- Clase: Abstracción que recoge las propiedades y comportamiento de los objetos en el sistema. Una clase puede instanciarse en objetos tantas veces como se necesite.
- Objeto: instancia de una clase que se relaciona con el resto de objetos a través de los métodos definidos en sus clases.
- Herencia: las clases no están aisladas y se relacionan entre ellas, mediante esta propiedad forman una jerarquía en la que las clases heredan las propiedades y métodos de las clases superiores.
- Polimorfismo: es la propiedad de las instancias de las clases, los objetos, por la que pueden responder de forma diferente a un mismo nombre de método en función de su tipo concreto.
- Abstracción: Permite modelar una entidad del ámbito de trabajo con las características relevantes para el sistema.
- Encapsulamiento: los elementos relacionados se agrupan juntos en una misma clase para aumentar la cohesión.
- Ocultación: las clases tienen una interfaz a través de la cual el resto de clases interactuan con ella de forma que no necesiten conocer sus detalles y evita que clases externas modifiquen el estado de manera inesperada.
Aquí es donde aparecen los patrones de diseño y unos principios a la hora de diseñar los sistemas OO. Los patrones de diseño son formas identificadas que resuelve de forma correcta diferentes problemas comunes a algunos escenarios. Los principios son unas guías que dirigen el diseño que realizamos y que en gran medida están presentes en los patrones de diseño.
Muy resumidamente los patrones de diseño tienen como objetivo permitir hacer frente a toda constante que posee cualquier aplicación, el cambio, de tal forma que permitan escalar a los sistemas incorporando nuevas funcionalidades y prefiriendo añadir nuevo código a modificar código existente.
Algunos principios que deberían guiar nuestras decisiones son:
- Encapsula lo que varía
- Favorece la composición sobre herencia
- Programa sobre interfaces, no implementaciones
- Abierto a extensión, cerrado a cambio
- Depende sobre abstracciones, no sobre clases concretas
- Conocimiento solo de clase amigas
- No nos llames, nosotros te llamaremos
- Una clase debería tener solo una razón para cambiarla
- Inversión de dependencias
- Strategy
- Observer
- Decorator
- Factory
- Simple factory
- Factory method
- Abstract factory
- Singleton
- Command
- Adapter & Facade
- Object adapter
- Class adapter
- Template Method
- Iterator & Composite
- State
- Proxy Patttern
- Compound Pattterns
- Otros
Referencia:
Programación orientada a objetos (Wikipedia)
Libro Head First - Desing Patterns de O'Reilly
Ejemplo del patrón de diseño Command y programación concurrente en Java
Ejemplo del patrón de diseño State
Ejemplo del patrón de diseño No Operation