Paradigma orientado a objetos
El paradigma orientado a objetos (OO) tomó su forma a partir del concepto inicial de un nuevo enfoque de programación, mientras que el interés por los métodos de diseño y análisis llegó mucho más tarde. El paradigma de análisis y diseño de OO es el resultado lógico de la amplia adopción de lenguajes de programación OO.
El primer lenguaje orientado a objetos fue Simula (Simulación de sistemas reales) que fue desarrollado en 1960 por investigadores del Norwegian Computing Center.
En 1970, Alan Kay y su grupo de investigación en Xerox PARC crearon una computadora personal llamada Dynabook y el primer lenguaje de programación puro orientado a objetos (OOPL), Smalltalk, para programar Dynabook.
En la década de 1980, Grady Boochpublicó un artículo titulado Object Oriented Design que presentaba principalmente un diseño para el lenguaje de programación Ada. En las siguientes ediciones, amplió sus ideas a un método de diseño completo orientado a objetos.
En la década de 1990, Coad incorporó ideas de comportamiento a los métodos orientados a objetos.
Las otras innovaciones importantes fueron las técnicas de modelado de objetos (OMT) de James Rum Baugh e ingeniería de software orientada a objetos (OOSE) por Ivar Jacobson.
Introducción al paradigma de OO
El paradigma OO es una metodología significativa para el desarrollo de cualquier software. La mayoría de los estilos o patrones de arquitectura, como la canalización y el filtro, el repositorio de datos y los basados en componentes, se pueden implementar utilizando este paradigma.
Conceptos básicos y terminologías de sistemas orientados 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. Da el plano o la 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, un objeto es uninstance 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, los 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 (), un método para calcular el área
- findCircumference (), un método para calcular la circunferencia
- scale (), un método para aumentar o disminuir el radio
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.
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 formas, dependiendo de las instancias en las que operan. El polimorfismo permite que los objetos con diferentes estructuras internas tengan una interfaz externa común. El polimorfismo es particularmente efectivo 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 de un á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.
Relationships
Para describir un sistema, se deben proporcionar especificaciones tanto dinámicas (de comportamiento) como estáticas (lógicas) de un sistema. La especificación dinámica describe las relaciones entre los objetos, por ejemplo, el paso de mensajes. Y la especificación estática describe las relaciones entre clases, por ejemplo, agregación, asociación y herencia.
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.
Composición o agregació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.
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. 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.
- Una relación unaria conecta objetos de la misma clase.
- Una relación binaria conecta objetos de dos clases.
- Una relación ternaria conecta objetos de tres o más clases.
Herencia
Es un 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.
Análisis OO
En la fase de análisis orientado a objetos del desarrollo de software, se determinan los requisitos del sistema, se identifican las clases y se reconocen las relaciones entre las clases. El objetivo del análisis OO es comprender el dominio de la aplicación y los requisitos específicos del sistema. El resultado de esta fase es la especificación de requisitos y el análisis inicial de la estructura lógica y la viabilidad de un sistema.
Las tres técnicas de análisis que se utilizan conjuntamente para el análisis orientado a objetos son el modelado de objetos, el modelado dinámico y el modelado funcional.
Modelado de objetos
El modelado de objetos desarrolla la estructura estática del sistema de software en términos de objetos. Identifica los objetos, las clases en las que se pueden agrupar los objetos y las relaciones entre los objetos. También identifica los principales atributos y operaciones que caracterizan a cada clase.
El proceso de modelado de objetos se puede visualizar en los siguientes pasos:
- Identificar objetos y agruparlos en clases.
- Identificar las relaciones entre clases.
- Crear un diagrama de modelo de objetos de usuario
- Definir los atributos de un objeto de usuario
- Definir las operaciones que se deben realizar en las clases.
Modelado dinámico
Una vez analizado el comportamiento estático del sistema, es necesario examinar su comportamiento con respecto al tiempo y los cambios externos. Este es el propósito del modelado dinámico.
El modelado dinámico se puede definir como "una forma de describir cómo un objeto individual responde a eventos, ya sean eventos internos desencadenados por otros objetos o eventos externos desencadenados por el mundo exterior".
El proceso de modelado dinámico se puede visualizar en los siguientes pasos:
- Identificar estados de cada objeto
- Identificar eventos y analizar la aplicabilidad de acciones.
- Construya un diagrama de modelo dinámico, que incluya diagramas de transición de estado
- Exprese cada estado en términos de atributos de objeto.
- Validar los diagramas de transición de estado dibujados
Modelado funcional
El modelado funcional es el componente final del análisis orientado a objetos. El modelo funcional muestra los procesos que se realizan dentro de un objeto y cómo cambian los datos, a medida que se mueven entre métodos. Especifica el significado de las operaciones de un modelado de objetos y las acciones de un modelado dinámico. El modelo funcional corresponde al diagrama de flujo de datos del análisis estructurado tradicional.
El proceso de modelado funcional se puede visualizar en los siguientes pasos:
- Identificar todas las entradas y salidas
- Construya diagramas de flujo de datos que muestren las dependencias funcionales
- Indique el propósito de cada función
- Identificar las limitaciones
- Especificar criterios de optimización
Diseño orientado a objetos
Después de la fase de análisis, el modelo conceptual se desarrolla aún más en un modelo orientado a objetos utilizando diseño orientado a objetos (OOD). En OOD, los conceptos independientes de la tecnología en el modelo de análisis se asignan a las clases de implementación, se identifican las restricciones y se diseñan las interfaces, lo que da como resultado un modelo para el dominio de la solución. El objetivo principal del diseño OO es desarrollar la arquitectura estructural de un sistema.
Las etapas del diseño orientado a objetos se pueden identificar como:
- Definiendo el contexto del sistema
- Diseñar la arquitectura del sistema
- Identificación de los objetos en el sistema.
- Construcción de modelos de diseño
- Especificación de interfaces de objetos
OO Design se puede dividir en dos etapas: diseño conceptual y diseño detallado.
Conceptual design
En esta etapa, se identifican todas las clases que se necesitan para construir el sistema. Además, se asignan responsabilidades específicas a cada clase. El diagrama de clases se usa para aclarar las relaciones entre clases y el diagrama de interacción se usa para mostrar el flujo de eventos. También se conoce comohigh-level design.
Detailed design
En esta etapa, se asignan atributos y operaciones a cada clase en función de su diagrama de interacción. Los diagramas de la máquina de estados se desarrollan para describir los detalles adicionales del diseño. También se conoce comolow-level design.
Criterios de diseño
A continuación se presentan los principales principios de diseño:
Principle of Decoupling
Es difícil mantener un sistema con un conjunto de clases altamente interdependientes, ya que la modificación en una clase puede resultar en actualizaciones en cascada de otras clases. En un diseño OO, el acoplamiento estrecho se puede eliminar mediante la introducción de nuevas clases o herencia.
Ensuring Cohesion
Una clase cohesiva realiza un conjunto de funciones estrechamente relacionadas. La falta de cohesión significa: una clase realiza funciones no relacionadas, aunque no afecta el funcionamiento de todo el sistema. Hace que toda la estructura del software sea difícil de administrar, expandir, mantener y cambiar.
Open-closed Principle
Según este principio, un sistema debería poder ampliarse para cumplir con los nuevos requisitos. La implementación existente y el código del sistema no deben modificarse como resultado de una expansión del sistema. Además, las siguientes pautas deben seguirse en el principio de abierto-cerrado:
Para cada clase concreta, se deben mantener interfaces e implementaciones separadas.
En un entorno multiproceso, mantenga los atributos privados.
Minimice el uso de variables globales y variables de clase.