18 articles in low level design › oop concepts.
Understand classes as blueprints and objects as instances: fields, constructors, methods, access modifiers, and Java records for value objects.
Encapsulation bundles data with the behavior that controls it. Private fields enforce invariants so that objects can't enter invalid states.
Master Java enums, from simple constant lists to enums with fields, methods, and abstract behavior that replace brittle string and integer constants.
Inheritance models IS-A relationships and enables polymorphism, but it creates tight coupling. Use composition when in doubt.
Master Java interfaces, from abstract contracts and default methods to sealed interfaces and the interface segregation principle for clean, pluggable designs.
Polymorphism lets you write code against an abstraction and swap behaviors at runtime. It is the mechanism behind the Open/Closed Principle and the Strategy pattern.
Abstraction separates what an object can do from how it does it. Callers depend on contracts, not implementations, which makes systems extensible and independently testable.
Inheritance models IS-A but couples tightly. Composition models HAS-A and stays flexible. Learn when each is right and how to migrate from one to the other.
Six timeless principles that guide clean code decisions: KISS, DRY, YAGNI, Law of Demeter, Single Level of Abstraction, and Principle of Least Astonishment.
UML is how engineers communicate design at a whiteboard. Learn class diagrams, sequence diagrams, state machines, and component diagrams with real Java examples.
Understand association in OOP: how objects reference each other without ownership, with examples of unidirectional, bidirectional, and multiplicity relationships.
Learn aggregation in OOP: a has-a relationship where the part can exist independently of the whole, with Java examples and UML notation.
Understand composition in OOP: a strong has-a relationship where the whole owns its parts and controls their lifecycle, with Java examples and UML notation.
Understand dependency in OOP, a temporary uses-a relationship where one class relies on another without holding a persistent reference.
Understand realization in OOP, the relationship where a class implements an interface, promising to fulfill its contract with concrete behavior.
Apply separation of concerns to keep each class, module, and layer focused on a single aspect of functionality, making code easier to change and test.
Measure and improve your design by reducing coupling between modules and increasing cohesion within them, with Java examples and practical metrics.
Apply the composing objects principle to assemble behavior from small, focused collaborators rather than inheriting from deep class hierarchies.