Como hemos visto la orientación a objetos trata de acercarse al contexto del problema lo más posible por medio de la simulación de los elementos que intervienen en su resolución y basa su desarrollo en los siguientes conceptos:
- Abstracción: Permite capturar las características y comportamientos similares de un conjunto de objetos con el objetivo de darles una descripción formal. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad, o el problema que se quiere atacar.
- Encapsulación: Organiza los datos y métodos de una clase, evitando el acceso a datos por cualquier otro medio distinto a los definidos. El estado de los objetos sólo debería poder ser modificado desde métodos de la propia clase Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
- Modularidad: Propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. En orientación a objetos es algo consustancial, ya que los objetos se pueden considerar los módulos más básicos del sistema.
- Principio de ocultación: La implementación de una clase sólo es conocida por los responsables de su desarrollo. Gracias a la ocultación, ésta podrá ser modificada para mejorar su algoritmo de implementación sin tener repercusión en el resto del programa. Principalmente se oculta las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas. Reduce la propagación de efectos colaterales cuando se producen cambios.
- Polimorfismo: Consiste en reunir bajo el mismo nombre comportamientos diferentes. La selección de uno u otro depende del objeto que lo ejecute.
- Herencia: Relación que se establece entre objetos en los que unos utilizan las propiedades y comportamientos de otros formando una jerarquía. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen.
- Recolección de basura: Técnica por la cual el entorno de objetos se encarga de destruir automáticamente los objetos, y por tanto desvincular su memoria asociada, que hayan quedado sin ninguna referencia a ellos.
Reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción, permite mejorar la cohesión y se implementa a través del principio de ocultación.
En informática, la cohesión hace referencia a la forma en que agrupamos unidades de software (módulos, subrutinas...) en una unidad mayor. Por ejemplo: la forma en que se agrupan funciones en una biblioteca de funciones o la forma en que se agrupan métodos en una clase, etc. En orientación a objetos logramos una alta cohesión cuando una clase hace referencia a una única entidad, el objetivo es lograr el principio de única responsabilidad por el que una clase se dedica a una responsabilidad únicamente y, a su vez, esa responsabilidad está cubierta por una única clase.
Relacionado con la ingeniería del software, consiste en el aislamiento del estado, es decir, de los datos miembro de un objeto, de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto. Este aislamiento protege a los datos de que sean modificados por alguien que no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.
La palabra proviene del griego y significa varias formas. En el paradigma de orientación a objetos hace referencia al comportamiento diferente que adopta un objeto según el tipo que tenga, o de un método según sean sus parámetros.
Propiedad del paradigma de orientación a objetos que permite que un objeto sea construido a partir de otro, reutilizando sus propiedades y métodos y aportando los suyos propios. Puede ser simple o compuesta según se herede de un único objeto o de varios.
Propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Permite la generación de módulos que se pueden compilar por separado, pero que tienen conexiones con otros módulos.