Object Oriented Programming involves analyzing a problem to identify classes, their responsibilities, and relationships. It aims to make software more modular, manageable, predictable, reusable, and maintainable. The analysis phase identifies what the software should do, design identifies classes and relationships, and implementation involves programming, testing and deployment. Key concepts include classes, objects, encapsulation, inheritance, polymorphism and relationships like dependency, aggregation and inheritance.