Design principles: Abstraction
Data abstraction: The developer and other objects in the system have a high level summary view of what data items are. It contains the required info about an object.
Procedure abstraction; A high level summary view of the operations provided . The detail and how the methods are.
Encapsulation : classes /object
The attributes(Data) relating to an object and the methods/operation that act upon them are all encapsulated inside a single software capsule.
Encapsulation : Aggregation/Composition
via aggregation and composition to encapsulate a group of classes collectively as a complex whole is made of similar components.
Data Hiding : the developer and other objects in the system have no direct access to the attributes or the details of how the attributes are stored.
Procedure Hiding : The developer and other objects in the system do not know the detail of how the methods work. The name of a method is public , but the code body of the method is private.
principle of separation of concern.
separating software into components , module according to functionality and responsibility.
ignore details of other modules when dealing with a module.
the related concepts are cohesion and coupling .