OOAD - Modelo de objetos

El modelo de objetos visualiza los elementos de una aplicación de software en términos de objetos. En este capítulo, analizaremos los conceptos y terminologías básicos de los sistemas orientados a objetos.

Objetos y clases

Los conceptos de objetos y clases están intrínsecamente vinculados entre sí y forman la base del paradigma orientado a objetos.

Objeto

Un objeto es un elemento del mundo real en un entorno orientado a objetos que puede tener una existencia física o conceptual. Cada objeto tiene -

  • Identidad que lo distingue de otros objetos del sistema.

  • Estado que determina las propiedades características de un objeto así como los valores de las propiedades que posee el objeto.

  • Comportamiento que representa actividades visibles externamente realizadas por un objeto en términos de cambios en su estado.

Los objetos se pueden modelar según las necesidades de la aplicación. Un objeto puede tener existencia física, como un cliente, un automóvil, etc .; o una existencia conceptual intangible, como un proyecto, un proceso, etc.

Clase

Una clase representa una colección de objetos que tienen las mismas propiedades características que exhiben un comportamiento común. Proporciona el plano o descripción de los objetos que se pueden crear a partir de él. La creación de un objeto como miembro de una clase se denomina instanciación. Por tanto, el objeto es una instancia de una clase.

Los componentes de una clase son:

  • Un conjunto de atributos para los objetos que se van a instanciar desde la clase. Generalmente, diferentes objetos de una clase tienen alguna diferencia en los valores de los atributos. Los atributos a menudo se denominan datos de clase.

  • Un conjunto de operaciones que retratan el comportamiento de los objetos de la clase. Las operaciones también se denominan funciones o métodos.

Example

Consideremos una clase simple, Circle, que representa el círculo de la figura geométrica en un espacio bidimensional. Los atributos de esta clase se pueden identificar de la siguiente manera:

  • coordenada x, para denotar la coordenada x del centro
  • y – coord, para denotar la coordenada y del centro
  • a, para denotar el radio del círculo

Algunas de sus operaciones se pueden definir de la siguiente manera:

  • findArea (), método para calcular el área
  • findCircumference (), método para calcular la circunferencia
  • scale (), método para aumentar o disminuir el radio

Durante la instanciación, se asignan valores para al menos algunos de los atributos. Si creamos un objeto my_circle, podemos asignar valores como x-coord: 2, y-coord: 3 y a: 4 para representar su estado. Ahora, si la operación scale () se realiza en my_circle con un factor de escala de 2, el valor de la variable a se convertirá en 8. Esta operación trae un cambio en el estado de my_circle, es decir, el objeto ha mostrado cierto comportamiento.

Encapsulación y ocultación de datos

Encapsulamiento

La encapsulación es el proceso de vincular atributos y métodos dentro de una clase. A través del encapsulado, los detalles internos de una clase se pueden ocultar desde el exterior. Permite acceder a los elementos de la clase desde el exterior solo a través de la interfaz proporcionada por la clase.

Ocultar datos

Por lo general, una clase está diseñada de tal manera que solo se puede acceder a sus datos (atributos) mediante sus métodos de clase y está aislada del acceso externo directo. Este proceso de aislar los datos de un objeto se denomina ocultación de datos o ocultación de información.

Example

En la clase Circle, la ocultación de datos se puede incorporar haciendo que los atributos sean invisibles desde fuera de la clase y agregando dos métodos más a la clase para acceder a los datos de la clase, a saber:

  • setValues ​​(), método para asignar valores a x-coord, y-coord y a
  • getValues ​​(), método para recuperar valores de x-coord, y-coord y a

Aquí no se puede acceder directamente a los datos privados del objeto my_circle mediante ningún método que no esté encapsulado dentro de la clase Circle. En su lugar, debería accederse a él a través de los métodos setValues ​​() y getValues ​​().

Paso de mensajes

Cualquier aplicación requiere que varios objetos interactúen de manera armoniosa. Los objetos de un sistema pueden comunicarse entre sí mediante el paso de mensajes. Suponga que un sistema tiene dos objetos: obj1 y obj2. El objeto obj1 envía un mensaje al objeto obj2, si obj1 quiere que obj2 ejecute uno de sus métodos.

Las características del paso de mensajes son:

  • El paso de mensajes entre dos objetos es generalmente unidireccional.
  • El paso de mensajes habilita todas las interacciones entre objetos.
  • El paso de mensajes implica esencialmente invocar métodos de clase.
  • Los objetos en diferentes procesos pueden estar involucrados en el paso de mensajes.

Herencia

La herencia es el mecanismo que permite crear nuevas clases a partir de las clases existentes ampliando y perfeccionando sus capacidades. Las clases existentes se denominan clases base / clases padre / superclases, y las nuevas clases se denominan clases derivadas / clases hijo / subclases. La subclase puede heredar o derivar los atributos y métodos de la superclase (s) siempre que la superclase lo permita. Además, la subclase puede agregar sus propios atributos y métodos y puede modificar cualquiera de los métodos de la superclase. La herencia define una relación "es - a".

Example

A partir de una clase Mamífero, se pueden derivar varias clases como Humano, Gato, Perro, Vaca, etc. Los seres humanos, gatos, perros y vacas tienen todas las características distintivas de los mamíferos. Además, cada uno tiene sus propias características particulares. Se puede decir que una vaca "es - un" mamífero.

Tipos de herencia

  • Single Inheritance - Una subclase deriva de una única superclase.

  • Multiple Inheritance - Una subclase deriva de más de una superclase.

  • Multilevel Inheritance - Una subclase se deriva de una superclase que a su vez se deriva de otra clase y así sucesivamente.

  • Hierarchical Inheritance - Una clase tiene varias subclases, cada una de las cuales puede tener subclases posteriores, continuando por varios niveles, para formar una estructura de árbol.

  • Hybrid Inheritance - Una combinación de herencia múltiple y multinivel para formar una estructura de celosía.

La siguiente figura muestra los ejemplos de diferentes tipos de herencia.

Polimorfismo

El polimorfismo es originalmente una palabra griega que significa la capacidad de adoptar múltiples formas. En el paradigma orientado a objetos, el polimorfismo implica el uso de operaciones de diferentes maneras, dependiendo de la instancia en la que operan. El polimorfismo permite que los objetos con diferentes estructuras internas tengan una interfaz externa común. El polimorfismo es particularmente eficaz al implementar la herencia.

Example

Consideremos dos clases, Circle y Square, cada una con un método findArea (). Aunque el nombre y el propósito de los métodos en las clases son los mismos, la implementación interna, es decir, el procedimiento de cálculo del área es diferente para cada clase. Cuando un objeto de la clase Circle invoca su método findArea (), la operación encuentra el área del círculo sin ningún conflicto con el método findArea () de la clase Square.

Generalización y especialización

La generalización y la especialización representan una jerarquía de relaciones entre clases, donde las subclases heredan de las superclases.

Generalización

En el proceso de generalización, las características comunes de las clases se combinan para formar una clase en un nivel superior de jerarquía, es decir, las subclases se combinan para formar una superclase generalizada. Representa una relación "es - una - especie - de". Por ejemplo, "el automóvil es una especie de vehículo terrestre" o "el barco es una especie de vehículo acuático".

Especialización

La especialización es el proceso inverso de la generalización. Aquí, las características distintivas de los grupos de objetos se utilizan para formar clases especializadas a partir de clases existentes. Se puede decir que las subclases son las versiones especializadas de la superclase.

La siguiente figura muestra un ejemplo de generalización y especialización.

Vínculos y Asociación

Enlace

Un enlace representa una conexión a través de la cual un objeto colabora con otros objetos. Rumbaugh lo ha definido como “una conexión física o conceptual entre objetos”. A través de un enlace, un objeto puede invocar los métodos o navegar a través de otro objeto. Un vínculo describe la relación entre dos o más objetos.

Asociación

La asociación es un grupo de vínculos que tienen una estructura y un comportamiento comunes. Asociación describe la relación entre objetos de una o más clases. Un enlace se puede definir como una instancia de una asociación.

Grado de una Asociación

El grado de una asociación denota el número de clases involucradas en una conexión. El grado puede ser unario, binario o ternario.

  • UN unary relationship conecta objetos de la misma clase.

  • UN binary relationship conecta objetos de dos clases.

  • UN ternary relationship conecta objetos de tres o más clases.

Razones de cardinalidad de asociaciones

La cardinalidad de una asociación binaria denota el número de instancias que participan en una asociación. Hay tres tipos de razones de cardinalidad, a saber:

  • One–to–One - Un solo objeto de clase A está asociado con un solo objeto de clase B.

  • One–to–Many - Un solo objeto de clase A está asociado con muchos objetos de clase B.

  • Many–to–Many - Un objeto de la clase A puede estar asociado con muchos objetos de la clase B y, a la inversa, un objeto de la clase B puede estar asociado con muchos objetos de la clase A.

Agregación o composición

La agregación o composición es una relación entre clases mediante la cual una clase puede estar formada por cualquier combinación de objetos de otras clases. Permite colocar objetos directamente dentro del cuerpo de otras clases. La agregación se conoce como una relación de “parte de” o “tiene una”, con la capacidad de navegar desde el todo hasta sus partes. Un objeto agregado es un objeto que se compone de uno o más objetos.

Example

En la relación, "un automóvil tiene un motor", el automóvil es el objeto completo o el agregado y el motor es una "parte" del automóvil. La agregación puede denotar:

  • Physical containment - Por ejemplo, una computadora se compone de monitor, CPU, mouse, teclado, etc.

  • Conceptual containment - Ejemplo, el accionista tiene una acción.

Beneficios del modelo de objetos

Ahora que hemos analizado los conceptos básicos relacionados con la orientación a objetos, valdría la pena señalar las ventajas que ofrece este modelo.

Los beneficios de utilizar el modelo de objetos son:

  • Ayuda a un desarrollo más rápido de software.

  • Es de fácil mantenimiento. Suponga que un módulo desarrolla un error, luego un programador puede arreglar ese módulo en particular, mientras que las otras partes del software aún están en funcionamiento.

  • Admite actualizaciones relativamente sencillas.

  • Permite la reutilización de objetos, diseños y funciones.

  • Reduce los riesgos de desarrollo, particularmente en la integración de sistemas complejos.