Análisis y Diseño Orientado a Objetos
Autor: Juan Manuel Cueva Lovelle
Entregado por:
John Eider Salas Miranda
Resumen
Dirigido al profesor:
Tatiana Mastrascusa Villalobos
Facultad de Ingeniería
Tecnología Desarrollo en de Software
Semestre 4
Sección 1
Cartagena, Bolívar 2019
Programación orientada a objetos (POO)
Es un método de implementación en el que los programas se organizan como colecciones
cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y
cuyas clases son, todas ellas, miembros de una jerarquía de clases unidas mediante relaciones
de herencia
Diseño orientado a objetos (DOO)
Es un método de diseño que abarca el proceso de descomposición orientada a objetos y una
notación para describir los modelos lógico y físico, así como los modelos estático y dinámico del
sistema que se diseña
Análisis orientado a objetos (AOO)
Es un método de análisis que examina los requisitos desde la perspectiva de las clases y objetos
que se encuentran en el vocabulario del dominio del problema
Para la ejecución de la POO se hacen uso de unas metodologías para sus debidas prácticas.
Método y metodología
“Un método es un proceso disciplinado para generar un conjunto de modelos que describen
varios aspectos de un sistema de software en desarrollo, utilizando alguna notación bien
definida” [Booch 94] •
“Una metodología es una colección de métodos aplicados a lo largo del ciclo de vida del
Desarrollo de software y unificados por alguna aproximación general o filosófica” [Booch 94]
Cada metodología puede catalogarse en uno de los grupos siguientes:
• Diseño estructurado descendente – Yourdon y Constantine – Wirth – Dahl, Dijkstra y Hoare
• Diseño dirigido por datos – Jackson – Warnier y Orr
• Diseño orientado a objetos son las que siguen el modelo de objetos – Booch – OMT
(Rumbaugh et al.) – Objectory (Jacobson et al.) – Schlaer-Mellor – Coad/Yourdon
Planteamiento de las metodologías según los autores las han utilizado en el siguiente
tema de enfoque se toma en cuenta a Booch acerca del modelado orientado a objetos.
Un modelo es una representación simplificada de la realidad, se construyen modelos para
comprender mejor el sistema que se está desarrollando para ello es necesario observar el
modelo desde distintas vistas, y que todas ellas tienen que ser compatibles entre sí – Al igual
que en un plano se tienen varias perspectivas (planta, alzado, perfiles) compatibles entre sí.
La arquitectura de un sistema orientado a objetos puede describirse con cinco vistas
interrelacionadas:
Vista de casos de uso
Vista de diseño
Vista de procesos
Vista de implementación
Vista de despliegue
Cada vista del modelo que resulta del diseño orientado a objetos es un conjunto de diagramas
y estos diagramas permiten razonar sobre el comportamiento del sistema. Cuando el modelo
es estable cada uno de los diagramas permanece semánticamente consistente con el resto de
los diagramas.
También además de una metodología se toma en cuenta una arquitectura
Arquitectura de sistemas orientados a objetos
La arquitectura de un sistema orientado a objetos puede describirse con cinco vistas
interrelacionadas:
Vista de casos de uso
Muestra los requisitos del sistema tal como es percibido por los usuarios finales, analistas, y
encargados de pruebas.
Vista de diseño
Captura el vocabulario del espacio del problema y del espacio de la solución
Vista de procesos
Modela la distribución de los procesos e hilos
Vista de implementación
Modela los componentes y archivos que se utilizan para ensamblar y hacer disponible el
sistema físico.
Vista de despliegue
Modela los nodos de la topología hardware sobre la que se ejecuta el sistema, cada una de
estas vistas representan los planos del sistema. Según la naturaleza del problema unas vistas
tendrán más peso que otras.
Así por ejemplo: – Los sistemas con grandes cantidades de datos dominaran las vistas de
diseño – Los sistemas con uso intensivo de interfaces gráficas de usuario dominarán las vistas
de casos de uso – Los sistemas de tiempo real las vistas de procesos tienden a ser las más
importantes – En los sistemas distribuidos las vistas de implementación y el despliegue pasa a
un plano más importante.
Clases
Las clases son necesarias para la creación de objetos siendo las clases en si un conjunto de
objetos que comparten una estructura común y un comportamiento común
Una clase. Las clases tienen miembros formados por campos y métodos.
Las características de una clase son las siguientes:
Los atributos y las operaciones pueden ser visibles o no según el detalle deseado
Un atributo es un dato que se almacenará en los objetos que son instancias de la clase.
Un método es la implementación de una operación para la clase
Un adorno de clase es una propiedad por ejemplo indicar que la clase es abstracta (no
puede tener instancias, sólo se puede heredar de ella)
Objetos
Un objeto tiene estado, comportamiento e identidad; la estructura y comportamiento de
objetos similares están definidos en su clase común; los términos “instancia” y “objeto” es
intercambiables.
Los objetos contienen:
Estado: El estado de un objeto abarca todas las propiedades
(Normalmente estáticas) del mismo más los valores actuales
(Normalmente dinámicos) de cada una de esas propiedades
Comportamiento: El comportamiento es cómo actúa y reacciona un objeto, en términos
de sus cambios de estado y paso de mensajes.
– El estado de un objeto representa los resultados acumulados de su comportamiento
Operaciones: Una operación denota un servicio que una clase ofrece a sus clientes
Los tipos de operaciones más frecuentes son:
Modificador: Una operación que altera el estado de un objeto
Selector: Una operación que accede al estado de un objeto, pero no altera este estado
Iterador: Una operación que permite acceder a todas las partes de un objeto en algún
orden perfectamente establecido
Constructor: Una operación que crea un objeto y/o inicializa su estado
Destructor: Una operación que libera el estado de un objeto y/o destruye el propio
objeto
Subprogramas libres: En los lenguajes OO puros (Smalltalk,
Eiffel, Java) sólo pueden declararse las operaciones como métodos
Herencia
La herencia es una delas jerarquías de clases más importante y es uno de los elementos
esenciales de los sistemas orientados a objetos. Aunque es necesaria manejarla con
cuidado y sólo cuando es necesario.
La herencia define una relación entre clases, en la que una clase comparte la estructura
de comportamiento definida en una o más clases (herencia simple o múltiple)
La herencia denota una relación “es-un” (“is-a”). Algunos autores también la denotan
como “is-a-kind-of”.
La herencia implica una jerarquía de generalización/especialización, en la que una
subclase especializa el comportamiento o estructura, más general, de sus superclases
• Las superclases representan abstracciones generalizadas
• Las subclases representan especializaciones en las que los atributos y métodos de la
superclase. Pueden añadirse, modificarse o incluso ocultarse.
• La herencia puede violar los principios de la encapsulación
• Los lenguajes OO ofrecen mecanismos para acoplar encapsulación y herencia
Riesgos de la Herencia:
La herencia promueve una fuerte encapsulación con respecto a otras clases
fuera de la jerarquía de herencia. Sin embargo la encapsulación es frágil entre
las clases de la jerarquía, dado que un cambio en una superclase se trasmite a
todas las subclases
La herencia promueve un acomodo frágil a objetos que cambian de subclase con
el tiempo
Polimorfismo
Es un mecanismo que permite a un método realizar distintas acciones al ser aplicado
sobre distintos tipos de objetos que son instancias de una misma jerarquía de clases
Características del polimorfismo:
Polimorfismo significa “muchas formas”
El polimorfismo se realiza en tiempo de ejecución gracias a la ligadura dinámica.
No se debe confundir polimorfismo con sobrecarga.
La sobrecarga se resuelve en tiempo descompilación, dado que los métodos se
deben diferenciar en el tipo o en el número de parámetros
El polimorfismo se resuelve en tiempo de ejecución, todos los métodos tienen
los mismos parámetros, las acciones cambian en función del objeto al que se le
aplica.
El lenguaje C++ utiliza los denominados métodos virtuales y punteros a objetos
para implementar el polimorfismo.
Sobrecarga (Overloading)
Se produce cuando existen dos o más métodos con el mismo identificador pero
con distinto número o tipo de parámetros resolviendo el compilador en tiempo
de compilación.
Características del polimorfismo:
Algunos autores también denominan a la sobrecarga polimorfismo
estático.
Cada método realiza una operación en función de los argumentos que
recibe
Algunos lenguajes como C++ también soportan sobrecarga de
operadores, en este caso el significado de cada operador depende del
operando al que se aplique.