As opposed to [[Procedural Programming|procedural programming]] Revolves around [[Classes|classes]] and [[Objects|objects]] - Classes model real-world domain entities - Allow higher level of abstraction - Successful in large programs - Complexity outpaces ability of developers to understand program as it grows - Abstraction hides complexity Reusability - Easier reuse classes in other applications - Faster development # Concepts - [[Classes]] - [[Class Methods]] - [[Constructors]] - [[Destructors]] - [[Encapsulation]] - [[Inheritance]] - [[Objects]] - [[Polymorphism]] # Limitations - Does not make bad code better - Not suitable for all problems - More upfront design needed - Steep learning curve - especially for [[C++]] - different implementations across languages - Unchecked, programs can be - larger - more complex - slower