sábado, 20 de julio de 2013

MODELADO CON UML

El modelado de objetos se puede encontrar  la descripción de los elementos primordiales de la orientación a objetos así como las estructuras estáticas y sus relaciones.
Los componentes de las estructuras estáticas son los objetos y clases que a la vez está compuesto de ligas y asociaciones.
Describiendo cada uno de los elementos empezaremos por lo que es un objeto el cual su significado en latín nos describe que es cualquier cosa que se puede arrogar y que se pueda dividir en abstractos o concretos además de que cuente con una estructura y un comportamiento así como una identidad coherente.
Para que exista un objeto depende mucho del contexto del problema, cada objeto puede o no ser apropiado para diferentes aplicaciones; estos pueden ser independientes y se deben considerar características o propiedades del mismo.
Los objetos integran una estructura de  datos (atributos) y un comportamiento (operaciones), estos objetos son representados en un diagrama de objetos.
Cada uno de los objetos se distingue por su identidad ya que además cada objeto a pesar de que internamente los valores sean iguales se consideran diferentes, cada uno de los objetos necesita un identificador interno único, esto es cuando se implementa un sistema, cabe destacar que este identificador no se debe de poner al momento que se esté representando el objeto en el modelado.
Todo objeto pertenece a un a clase ya que en esta se describe un grupo de objetos con estructura y comportamiento común, a esa estructura o propiedades se le conocen como atributos y al comportamiento se le denominan operaciones; cada clase define uno o más objetos los cuales tienen características comunes; además de crear múltiples objetos, y al momento de definirlos se logra una abstracción del problema, con estas características también se le puede dar el nombre de clase básica.
Cuando se empieza con el proceso de creación de objetos pertenecientes a una clase se llama instanciación, donde los objetos son la instancia de la clase, en otras palabras es la instancia de la clase a la que pertenece el objeto, para esta representación se hace a través de una flecha punteada que va dirigida a la clase.
Algo muy importante para definir la estructura de la clase son los atributos de sus correspondientes objetos, ya que este define cada atributo que contenga la clase se les debe definir un valor estos pueden ser iguales o distintos en los diferentes objetos existentes de cada clase, cada atributo debe tener un nombre propio diferente de los demás, a estos se les conoce como con el nombre de atributos básicos, se puede representar en notación extendida o compacta.
Se nos menciona en el libro que se  puede asociar con cada atributo un tipo de dato, esto con la finalidad de restringir los posibles valores a esto se le denomina como omisión en cada atributo.
Se nos recomienda identificar a los identificadores que se utilizan exclusivamente por razones de implementación pero no deben ser incluidos como atributos del objeto.
Cabe destacar que dentro de los atributos podemos agregar restricciones  como por ejemplo debe de ser de cierto tipo de valor o que acepta hasta un número determinado de dígitos según sea el valor sea entero o numérico.
Dentro de una clase existe las operaciones que son funciones que se aplican a todos los objetos de una clase particular y estas pueden ser ejecutadas por o en un objeto; cada uno de estos debe tener un único nombre además de argumentos  o parámetros , cada uno con un tipo y pueden devolver resultados.
Otros conceptos relacionados con las operaciones son las consultas las cuales no modifican los valores de los atributos ni de los objetos, simplemente devuelven valores de los atributos básicos o derivados, existen los accesos que son otro tipo de operaciones que nos ayudan para leer o escribir los atributos de un objeto; los métodos nos ayudan a distinguir las operaciones como un concepto de alto nivel de la propia implementación de la operación; utilizamos el polimorfismo que se define como una misma operación que toma diferentes formas.
Una operación se considera polimórfica si se está implementando en diferentes clases de forma distinta o si se implementa en una misma clase diferente por diferentes métodos, con otro número y tipo de argumentos de cada método, la forma de una operación se define por el tipo y numero de argumentos y el tipo de resultado que devuelve.
Existe la relación de objetos y a eso se le llama liga;  la asociación nos describe la relación entre clases de objetos y posibles ligas donde es una instancia de una asociación.
Hay dos clases de asociaciones una de conocimiento que es una asociación estática entre instancias, donde una instancia conoce la existencia de otra y el tipo es de comunicación, esta asociación es de tipo dinámica donde modela la comunicación entre los objetos y sirve para intercambiar información entre ellos.
Un grado de una asociación se determina por el número de clases conectadas por la misma asociación, estas pueden ser binarias, ternarias o de mayor grado según sea el caso, estas relaciones solamente se pueden llevar únicamente entre clases.
Existen las relaciones flexibles donde se relacionan diferentes objeto de una misma clase, esto puede ser al igual que las asociaciones binarias, terciaria o de mayor grado dependiendo del número de objetos que estén relacionados.
Otra característica que podemos encontrar es la multiplicidad o como nosotros conocemos cardinalidad, esta es una asociación especifica de cuantas instancias de una clase pueden relacionarse a una sola instancia de otra clase, es necesario decidir la multiplicidad de cada clase en una asociación, o sea de dos multiplicidades por cada relación binaria, una para cada extremo de la relación, ya que esta depende del contexto de la aplicación.
Existen diferentes tipos de multiplicidades  para las asociaciones, de las cuales las mas relevantes son:
·         Uno a uno
·         Uno a muchos o viceversa
·         Muchos  a muchos.
El rol describe el papel que juega cada extremo de una asociación, una asociación binaria tiene dos roles, uno en cada extremo de la asociación, los roles  pueden tener un nombre diferente cada uno. Una relación de n clases tendría  n roles, son necesario para las asociaciones las cuales restringen los valores que esas entidades pueden asumir.
Dentro de las ligas y asociaciones existen también las restricciones al igual que en los atributos estas restricciones pueden ser los valores de esas entidades que pueden asumir.
Nos menciona también el libro las posibles ligas de una asociación donde puede ser un subconjunto de las posibles ligas de otra asociación. La multiplicidad del subconjunto debe de ser igual o menor que la multiplicidad de la asociación del súper conjunto, las relaciones pueden estar de igual manera ordenadas.
Otra característica dentro de los diagramas de clases son las asociaciones derivadas las cuales se consideran que son asociaciones dependientes o redundantes, y están determinadas directa o indirectamente a través de otras asociaciones que se agregan para facilitar la búsqueda de cierta información, pero como se representa, bien cada asociación está representada por una línea a esta línea se atraviesa con una diagonal y  así como puede representarse la asociación derivada; se menciona que no todas las asociaciones que forman multiples conexiones entres clases indican redundancia ya que por lo regular eso pasa. A veces la existencia de una asociación se deriva de dos o más asociaciones primitivas, se debe mantener la asociación adicional, ya que puede ser importante  para una restricción adicional de multiplicidad.
Otro tipo de operaciones que se pueden mostrar  y representar son las operaciones de acceso ya que además de leer o escribir atributos, pueden servir para acceder a las ligas relacionadas con un objeto también se puede tener acceso a los objetos por medio de pseudoatributos de los roles de las asociaciones.
Al igual que un atributo de clase es prioridad de una clase, un atributo de asociación o atributo de liga y es propiedad de una  asociación.
Podemos encontrar las operaciones de asociación y estas dependen de las clases involucradas en una relación existente según sea el caso , y así como son con asociaciones existen las asociaciones como clases y estas se pueden modelar como si fuera una clase, en particular si se desea asociar la propia asociación con otras clases. Los atributos y operaciones  de la asociación pasan a ser miembros de la clase correspondiente  a la asociación.
Los ensamblados, en particular la agregación y la composición son formas especiales de asociación entre u todo y sus partes, en donde el ensamblado está compuesto por sus componentes. El ensamblado es el objeto central, y la estructura completa se describe como una jerarquía de contenido. Un ensamblado puede componerse de varias partes, donde cada relación parte-todo se considera una relación separada. En el caso de la agregación, las partes del ensamblado pueden aparecer en multiplex ensamblados, las partes den ensamblado pueden aparecer múltiples ensamblados. En el caso de la composición, las partes del ensamblado no pueden ser compartidas entre ensamblados.
Ciertos puntos de los ensamblados es que tienen propiedades de transición o si es antisimetrico, es decir que si A es parte de B, entonces B no es parte de A.
Se considera un ensamblado y una  asociación:
·         Si se puede usar la frase “parte de “o “ consiste de” o “tiene”.
·         Si algunas operaciones en el todo pueden propagarse a sus partes.
·         Si algunos atributos en el todo se pueden propagar a sus partes.
·         El ensamblado es común en los objetos interface. En un sistema de ventanas por ejemplo, una ventana puede consistir en botones, menús y barras, cada uno un modelado por su propio objeto interface. El resultado es una estructura de interface en forma de árbol. La decisión de usar ensamblados es un poco arbitraria, y en la práctica no causa grandes problemas la distinción imprecisa entre agregación, composición y asociación, aunque es bueno ser consistente.
Los tipos de ensamblados pueden ser:
·         Fijos: los que tienen una estructura fija donde el número de componentes esta predefinido.
·         Variables: tienen un numero finito de niveles, pero el número de componentes varia.
·         Recursivos. Los ensamblados recursivos contienen la forma directa o indirecta una instancia del mismo tipo de agregado, donde el número de niveles de ensamblado es posteriormente ilimitado.
Uno de los objetivos del ensamblado es que las operaciones aplicadas a este puedan propagarse de forma automática a sus objetos componentes. La operación se propaga en una sola dirección, y puede ser aplicada a las partes del ensamblado de forma independiente.
Las clases con atributos y operaciones comunes se puede organizar de forma jerárquica mediante la herencia, esta es una abstracción importante para compartir similitudes entre clases, donde todos los atributos y operaciones comunes a varias clases se pueden compartir por medio de la superclase, una clase más general. Las clases más refinadas se conocen como subclases.
La herencia es útil pata el modelado conceptual. Al igual que la implementación: como modelado conceptual da buena estructuración a las clases. Como modelo de implementación es un buen vehículo para no replicar innecesariamente el código. Le generalización define una relación entre una clase más generalizada y una o más versiones definidas en ella.
El opuesto de la generalización es la especialización, que define una relación entre una clase más general y una o más versiones especializadas de ella.
La herencia es transitiva a través de un numero arbitrario de niveles. Los ancestros de una clase son la superclase de una clase de cualquier nivel superior de la jerarquía y de los descendientes de una clase son la subclase de una clase en cualquier nivel inferior de la jerarquía.
Las siguientes características se aplican a clases en una jerarquía de herencia:
·         Los valores de una instancia incluyen valores para cada atributo de cada clase ancestra.
·         Cualquier operación de cualquier clase ancestra se puede aplicar a una instancia.
·         Cada subclase no solo hereda todas las características de sus ancestros, sino también añade sus propios atributos y operaciones.
La generalización se puede extender a múltiples niveles de jerarquías, donde una clase hereda de su superclase, que a su vez hereda de otra superclase, hacia arriba en la jerarquía. En otras palabras, las relaciones entre subclases y superclases son relativas. La herencia define una jerarquía de clases donde existen ancestros y descendientes que pueden ser directos o no.
La agregación o composición no son lo mismo que la generalización, el ensamblado relaciona clases correspondientes a muchos objetos; mientras que la generalización relaciona clases, que finalmente corresponden a un solo objeto. La agregación o composición es una forma de estructurar la descripción de un solo objeto; mientras que con la generalización, un solo objeto es una instancia de la combinación de la superclase y subclase. El ensamblado es una relación parte de, en cambio generalización es una relación tipo de o es una.
La generalización puede hacerse por diferentes razones:
·         Extensión: clases definidas por operaciones con estructuras de información.
·         Restricción: clases como implementación es de tipos, especializaciones, subconjuntos de todas las instancias de un ancestro.
La extensión de clase expresa que una subclase pueda añadir nuevos atributos u operaciones ala superclase.
Dentro de las clases existen las restricciones de clase que nos indica como una subclase puede restringir los atributos heredados de una superclase. Una clase descendiente no puede suprimir los atributos u operaciones de sus ancestros.
Una subclase puede sobreescribir atributos y operaciones de una superclase, al definir nuevos atributos y operaciones con el mismo nombre, se pueden sobreescrinbir atributos, por ejemplo, para redefinir sus valores por omisión, y se pueden sobreescrinir operaciones para mejorar el rendimiento de un algoritmo.
Se nos aconseja que no es conveniente desarrollar nuevas clases sobreescribiendo los métodos de las superclases simplemente por conveniencia de implementación, sobreescritura por implementación, sobre las cuales no existe ninguna relación conceptual. Se puede introducir herencia adicional en el sistema durante la etapa de diseño.
Todas las características o todas las acciones que se pueden hacer simplemente se han hecho con clases concretas o simplemente clases donde cualquiera de estas tenía la cualidad de ser instanciada. Una clase abstracta es una clase que no tiene directamente instancias, pero cuyas clases descendientes si las tiene. Las clases abstractas organizan características comunes a través de clases; pueden aparecer naturalmente en la aplicación o pueden ser introducidas artificialmente para promover la reutilización de código y compartir atributos y métodos.

Un ejemplo seria para la clase mueble, la clase asiento es abstracta, ya que para crear un asiento se debe instanciar una de sus tres subclases: silla, sillón o taburete.
Cuando una superclase se divide en subclases por discriminación, y existe una subclase para cada valor posible del discriminador, entonces la superclase se considera una clase abstracta, esta puede definir métodos para ser usados por la subclase, o definir el protocolo de la operación, o sea el tipo y numero de argumentos: el resultado y la intención semántica, sin dar el correspondiente método (operación abstracta). Cada clase concreta debe proveer su propia implementación y no debe tener operaciones abstractas.
Otro concepto que es importante es la herencia múltiple la cual permite a una clase tener más de una superclase y heredar aspectos de todos sus ancestros.
En la herencia sencilla no existen conflictos entre superclases. Cuando se hereda la misma operación se múltiples ancestros, como opción se debe sobrescribirla operación en la nueva clase para evitar conflictos.
La ventaja de incorporar la herencia múltiple es que permita integrar información de dos o más superclases a la vez, dando más poder en la especificación de clases y más oportunidad de reutilización, siendo por lo general más natural para el modelo de objetos que la herencia sencilla.
La desventaja de incorporar herencia múltiple es que es más complicada que la herencia sencilla, ya que se pierde la simplicidad conceptual y de implementación. El mayor problema resultante es que se podría estar heredando varias veces una misma característica de diferentes clases ancestrales. Se puede definir reglas para resolver ambigüedades y evitar conflictos entre las características heredadas por varios recorridos en la jerarquía de herencia.
Las clases disjuntas son clases que semánticamente describen características diferentes, de distinta jerarquía de herencia mientras que las clases no disjuntas son clases que tienen aspectos comunes, por lo cual una hereda características de ambas estaría compartiendo tales propiedades. Se puede incorporar herencia múltiple de una misma generalización, si las clases dentro de la generalización son no disjuntas. (No se debe heredad de dos clases perteneciendo a una misma generalización, si las clases dentro de la generalización son disjuntas.)
Se puede incorporar herencia múltiple de dos generalizaciones distintas, donde las clases son disjuntas. Cada generalización debe cubrir una sola propiedad, por lo cual, una nueva clase creada por medio de la herencia múltiple estaría siendo refinada sobre dimensiones de generalización diferentes e independientes.
Un módulo o paquete es una construcción lógica para agrupar clases, asociaciones y generalizaciones. El modulo captura diferentes perspectivas de un sistema. Los bordes entre distintos módulos pueden ser bastante arbitrarios. Un modelo de objetos consiste de uno a más módulos.

Cada módulo debe proveer una visión de alto nivel de las clases más importantes del sistema, mostrando las clases y sus asociaciones son atributos u operaciones. Cada una de estas clases se asigna a su propio modulo, mostrando si descomposición en clases por generalización y agregación.

No hay comentarios:

Publicar un comentario