Object oriented programming (OOP) is a subset of object oriented analysis and design (OOAD) and should be viewed in this context when adopting this particular programming paradigm.
All projects start out with a problem statement or set of requirements. This is what drives your development effort. This is the source of truth.
Analysis
The process starts with modelling the requirements as a set of use cases. A corollary would be user stories. How the end users and any external systems (actors) interact with the system under development to meet the system’s objectives.
The objective of this phase is to identify the objects that make up the system.
Interaction diagrams capture the way in which candidate objects communicate with each other. They can be sequence diagrams or collaborations diagrams.
Once the objects have been identified the process moves on to the design phase.
Design
A class diagram is created that contains the class definitions of each object identified. Relationships are modelled, inheritance heirarchies are established and redundancy is eliminated.
The access layer is where the system communicates with external systems and protocols, separated out to maintain a decoupled domain object model – the business model.
The view layer is where user interaction is defined via user interfaces and their objects.
Implementation
This is where the coding happens in your target language using the OOP facilities provided by that language.
Key Takeaways
Object oriented development (OOD) is part of a methodology – a process not an individual activity – that starts from a requirements specification and ends with an implementation. It is also iterative, meaning that each phase of the process can be revisited and refined at any time.
Modelling an application as interacting objects captures an entire history of research and modularisation best practices within the methodology and paradigm itself.
Understanding these crucial points will go a long way to making use of object oriented development, which is in fact a highly evolved technology, and will disabuse the developer of any misunderstandings and frustrations surrounding its use.
