Complejidad del software.
Proceso de desarrollo difícil.
Verificación del software poco viable.
Dependencias.
Dependencia estructurar: Existen dependencias muy fuertes.
Jerarquía de especialización: Heredan las características.
Algorítmico: Método utilizado en el diseño estructurado "Top-down". Se basa en la identificación de las operaciones en la descripción del problema y su expresión en términos de operaciones más sencillas.
Ejemplo.
Método que permite resolver un problema alrededor de abstracciones
representadas por objetos. Los objetos se comportan como agentes.
Topología de programas estructurados.
Topología de programas orientados a objetos (hay encapsulamiento).
Conceptos básicos.
Abstracción.
Caracterización de un objeto de acuerdo a las propiedades que nos interesen en un instante de tiempo.
Las características escogidas son relativas a la perspectiva del observador.
Encapsulación.
Manera de ocultar los detalles de la representación interna de un objeto
presentando solo la interfase para el usuario.
Modularidad.
Un módulo es una agrupación de abstracciones
lógicamente relacionadas.
Los conceptos de herencia, interfaces y paquetes, conforman los mecanismos para organizar clases y su comportamiento. La biblioteca de clases de Java se apoya en estos conceptos.
La herencia.
Con la herencia, todas la clases se acomodan en una jerarquía estricta, las que uno mismo creó y aquellas que provienen de la biblioteca de clases de Java y otras bibliotecas.
Modularidad:
La interfaz de un módulo es la descripción de los servicio que ofrece a otros módulos.
Hay dos tipos: por estructura y por especialización.
Concurrencia:
Objeto = Instancia.
Un objeto tiene un estado, un comportamiento y una identidad.
Estado
El estado de un objeto se compone de las propiedades estáticas de un objeto con valores dinámicos asociados a ellas en un momento dado.
Estado à variables de instancia.
(se traduce al manejo de las variables de instancia)
Comportamiento
Forma en que actúa y reacciona el objeto, expresado en términos de cambios de estado y envío de mensajes a otros objetos.
Comportamiento à Método (es lo que nos indica como se comporta la clase o
qué puede hacer la clase)
Identidad.
Propiedad que distingue a un objeto de los demás.
Cuando hablamos de OOP hablamos de crear un objeto que tenga las tres características (Estado, Comportamiento, identidad).
Hablando de la parte de programación, las
variables de instancia + los métodos definen al objeto.
Relación de Contención.
Cuidado !!! --> Crean dependencias.
Recordemos: Hay que crear objetos independientes buscando en un futuro
re-utilizar.
Se divide en:
Protegida: visible sólo para subclases.
Privada: NO visible para ninguna otra clase.
La interfaz esta compuesta por las variables de instancia.
Para garantizar el encapsulamiento y la privacidad se usaran variables privadas.
à Las relaciones entre las clases forman la estructura del diseño de un sistema.
Formas básicas:
Relación de Herencia.
Nota: aquí el "elefante" es una subclase, y "animal" es una superclase.
Herencia Multiple.
Superclase: Clase de la cual otra clase hereda.
Subclase: Clase que hereda de una o más clases.
subclase à especialización de la superclase.
à NO todos los lenguajes de programación
orientada a objetos usan la herencia múltiple.
Clase abstracta.
Su comportamiento no esta totalmente definido. Sirven para captar las propiedades generales que posteriormente son particularizadas en las subclases.
Clase Base.
Clase que no tiene superclases.
Hay 2 formas principales de relación de uso entre clases:
- La interfaz de una clase usa otra clase.
- La implantación de una clase usa otra clase.
Las relaciones que se tendrán dentro de las clases, se tendrá en un
agente, en su comportamiento.
Relación de instanciación.
Relación entre clases donde el comportamiento de una clase puede ser parametrizada por otra clase.
Ejemplo.
Colecciones de objetos homogéneas (listas, colas, pilas, árboles, etc. [operaciones genéricas para todos]).
La parametrización de una clase con otra es un mecanismo muy flexible que permita crear clases reutilizables.
Relación de metaclases.
A una clase se le puede ver como a un objeto por lo tanto a la clase de los objetos de clases se les llama Metaclase.
Metaclase.
Es una clase cuyos objetos son clases.
Idea central de la instanciación y la
parametrización: poder llegar a tener clases reutilizables.
Relación
entre clases y objetos.
Las clases son estáticas, i.e. forman parte del texto del programa y no cambian durante su ejecución.
Los objetos por el contrario son totalmente dinámicos, se crean,
cambian su estado y se destruyen.
Clasificación.
Forma de ordenar el conocimiento. No existen reglas simples que permitan la mejor selección de clases y objetos para generar una clasificación.
Identificar clases y objetos requiere de la aplicación de nuestras capacidades de descubrir e inventar.
Clasificar es agrupar cosas que tienen estructura común o comportamiento similar.
La clasificación es un proceso difícil, por lo que conviene hacerlo de manera incremental iterativa.
Al iniciar el diseño, se define una estructura
inicial para las clases. En base a la experiencia adquirida se crean nuevas
subclases a partir de las existentes o bien es muy común que
se requiera dividir una clase en otras más pequeñas (pero más generales),
inclusive es posible requerir de la unión de varias clases.
Eventos que ocurren (aterrizaje, petición,? )
Interacción (préstamos, encuentro, ?)
Organizaciones (UAM, ONU, ?)
Conceptos (negociación, comunicación, ?)
Operaciones que modifican. Verbos activos (dibujar, mover, ?)
Operaciones de selección. Preguntas (¿esta abierto? ?)
Determinan de qué manera interactúan las instancias de las clases. La definición de los mecanismos es una decisión estratégica en el diseño de un sistema.
Nota: Es importante no perder de vista el diagrama de jerarquías.
Método de diseño.
Para especificar el diseño de un sistema complejo es necesario especificar la estructura estática (clases, objetos, módulos, procesos), y la dinámica del sistema (transición de estados, tiempo).
Especificación Estática.
à Diagrama de objetos.
Física à Diagrama de módulos.
Diagrama de tiempo.
Se usa para mostrar la existencia de clases y las relaciones entre ellas.
Simbología.
Por ejemplo.
Esta clase (la de la izquierda), lo que hace es usar en su interfaz elementos
de la otra clase (la de la derecha), y la misma clase "x" usará métodos de la
clase de abajo.
A continuación tenemos más elementos.
Esta relación entre clases conviene usarla en las primeras fases del diseño, cuando todavía no estamos seguros del tipo de relación.
Categorías de Clases.
Cuando un sistema incluye muchísimas clases, es importante agrupar las clases en categorías y hacer diagramas de las mismas.
Cuando una categoría de clase es visible para las demás, se recomienda anotar la palabra "global" en la esquina izquierda del recuadro.
Ejemplo.
Aquí implica que todo lo que esta dentro de la clase "policía" es público, i.e. podríamos crear un nuevo objeto de nombre "Policía Federal de Caminos", que heredaría las propiedades básicas de "policía", pero se le agregarían nuevas características a la nueva categoría.
Esquemas de Clases.
Para complementar la información de los diagramas de clases, es importante incluir la documentación o esquema de clases.
De manera general podemos incluir:
Descripción: texto.
Jerarquía:
Superclases: lista de nombres de clases.
Metaclase: nombre de clase.
Parámetros: lista de parámetros.
Interfaz: (público, protegido, privado).
*Usa: Lista de nombres de clases.
*Campos: lista de declaraciones.
*Operaciones: lista de declaraciones.
Máquina de Estados finitos. Diagrama de transición.
Concurrencia. Secuencial / paralelo
Esquema de Operaciones.
En fases avanzadas del diseño se requiere de una definición más precisa de las operaciones que forman parte de la clase.
Descripción: Texto
Categoría: Nombre
Parámetros formales: Lista
Resultado: lista
Acciones: lista
Excepciones: lista de declaraciones
Concurrencia: secuencial / paralelo.
Diagramas de transición de estados.
Se usan para mostrar el estado de una instancia de una clase dada, los eventos que causan una transición de un estado a otro y las acciones que resultan del cambio de estado.
Ejemplo.
Proceso de inscripción a la maestría.
Diagrama de objetos.
Las clases son estáticas, mientras que los objetos son dinámicos. Los diagramas de objetos reflejan las interacciones dinámicas entre objetos relacionados con el envío de mensajes.
Esquemas de objetos y mensajes.
Documentación para el diseño de objetos.
Un diagrama de tiempo es una gráfica de tiempo contra los objetos involucrados en la interacción.
Ejemplo.
Se compone por las siguientes actividades.
2. Identificar la semántica de clases y objetos.
3. Identificar interrelaciones de clases y objetos.
4. Implementar clases y objetos.
Se dibujan los diagramas de clases y objetos.
Se establece el significado de las clases y objetos.
Se trabaja sobre el refinamiento de las interfaces de las clases y sobre las acciones que pueden hacer sus objetos.
Identificar interrelaciones de clases y objetos.
Establecer exactamente como interactúan las cosas dentro del sistema.
Se establecen las relaciones de uso, herencia y otras.
Se refinan los diagramas de los pasos anteriores.
Implementar clases y objetos.
Implementar las clases y objetos en un lenguaje OO.
No acomoda el tipo de desarrollo evolutivo.
No enfoca los posibles modos futuros de desarrollo de software.
Al terminar un sistema es casi imposible reutilizar el código en otra
aplicación.
Une a los usuarios y a los diseñadores.
Permite proporcionar una descripción completa del problema, legible y revisable por las partes interesadas y verificable contra la realidad.
Nota: Si tenemos correctamente definidas nuestras jerarquías de clase, hacer modificaciones no es tan costoso como en el caso de programación tradicional. Sólo tenemos que entrar en la parte de Evolución para hacer modificaciones.
Diseño.
Inicia aún antes de concluir con la etapa de análisis.
Se recomienda analizar un poco y diseñar.
Esta etapa debe concluir una vez que se establecieron claves y mecanismos importantes.
Evolución.
El proceso de desarrollo consiste en una producción incremental de series de prototipos que evolucionan a la implantación final.
Posibles cambios que pueden presentarse en esta etapa:
Modificar la representación de una clase.
Reorganizar la estructura de clases.
Cambiar la interfaz de una clase.
Gastos mucho menores en programación y verificación.
Gastos considerablemente menores en integración.
Recursos humanos equivalentes o menores.
Un producto de mayor calidad.
Los sistemas resultan flexibles al cambio.
Reduce los riesgos de desarrollo.
Es atractivo para la cognición humana.
Permiten especificar gráficamente las relaciones entre los actores y los procesos del sistema.
Ejemplo.
(ver diagrama en hoja de papel)
Actores. Son las entidades que realizan o están involucrados en el proceso.
Procesos. Acciones que se deben realizar para provocar un cambio de estado.
Ejemplo.
Coordinación
Caja
Computo
Inscripción
Validación
Efectuar pago
Autorización Sistemas Escolares
Autorización Coordinación.
Ejemplo de un diagrama de clases.
(**) Restricción: Si pedido. cliente. calificación. crédito es "pobre", entonces pedido: prepagado debe ser verdadero.
Se vale que algunas clases no incluyan métodos o
variables de instancia.
| UML | Clase | Asociación | Generalización | Agregación |
| Booch | Clase | Uso | Hereda | Contiene |
Otro ejemplo:
Ahora vamos a aplicarlo al ejemplo que hemos venido desarrollando.
Evolución
Ventajas y desventajas.
Conclusiones.
1 Introducción a la Programación Orientada a Objetos (OOP). *
1.2 Diseño Orientado a Objetos. *
1.3 Descomposición algorítmica. *
1.4 Orientado a objetos. *
1.5 Modelo orientado a objetos. *
1.6 Introducción a la Programación Orientada a Objetos (OOP). *
1.7 Clases y objetos. *
1.8 Relaciones entre objetos. *
1.9 Clases. *
1.10 Relación de uso. *
1.11 Relación entre clases y objetos. *
1.10 Proceso de diseño orientado a objetos *
1.11 Análisis orientado a objetos. *
1.12 Proceso de diseño orientado a objetos ( OOP) *
1.13 Diseño tradicional vs. Diseño OO. *
1.14 Puntos débiles del diseño tradicional. *
1.15 Método orientado a objetos. *
1.16 Administración de un proyecto. *
1.17 Autoevaluación *
1.18 Indice *