At first glance, object-oriented programming has little or nothing in common with functional programming. One grew out of the procedural tradition, providing means for representing real-world objects and mechanisms for encapsulating state. Computing proceeds via method calls. The other is a radical departure from conventional programming. It emphasizes a(n almost) purely mathematical approach. Programmers design systems of algebraic datatypes and functions, and a computation is the evaluation of an expression. Still, nobody can overlook the similarities of the two approaches considering the development of design patterns and notions of effective object-oriented programming practices.
In my talk, I will compare and contrast the two ideas of programming and programming language design. I will present and defend the thesis that good object-oriented programming heavily ``borrows'' from functional programming and that the future of object-oriented programming is to study functional programming and language design even more.