17
DESARROLLO DE SOFTWARE ORIENTADO A OBJETOS CON UML UML tiene sus orígenes en la orientación a objetos. Por esta razón se puede definir como “un lenguaje de modelado orientado a objetos para desarrollo de sistemas de software moderno”. Un modelo UML indica qué es lo que supuestamente hará el sistema, mas no cómo lo hará. El diseño de sistemas se modela por una importante razón: Gestionar la complejidad. Un modelo es una abstracción de cosas reales. Programación estructurada (Procedimental). Divide un programa en funciones (subrutinas, procedimientos, etc.) y agrupamiento de funciones en una entidad más grande denominada módulo. La ecuación fundamental de programación estructurada, debido a Niklaus Wirth y Edsger Dijkstra es: Algoritmos +Datos=Programas Programación Orientada a Objetos. El mundo real trata de objetos (real o abstracta), que tienen incorporado atributos (datos) y comportamiento (funciones o métodos). El comportamiento es la acción que realizan los objetos del mundo real en respuesta a un estímulo. El paradigma orientado a objetos nació en 1969, con el docto noruego Kristian Nygaard. Comportamiento (funciones o métodos), constituyen el único método para acceder a los datos y se devuelve un valor. Las etapas para modelar un sistema empleando OO, son: 1. Identificación de los Objetos. 2. Agrupamiento en clases (tipos de objetos). 3. Identificación de los datos y operaciones de cada una de las clases. 4. Identificación de las relaciones existentes entre las diferentes clases del modelo. El objeto es el centro de la POO. Un objeto es real (físico o duro) y abstracto (conceptual o blando).

Clases Uml

Embed Size (px)

Citation preview

Page 1: Clases Uml

DESARROLLO DE SOFTWARE ORIENTADO A OBJETOS CON UML

UML tiene sus orígenes en la orientación a objetos. Por esta razón se puede definir como “un lenguaje de modelado orientado a objetos para desarrollo de sistemas de software moderno”.

Un modelo UML indica qué es lo que supuestamente hará el sistema, mas no cómo lo hará.

El diseño de sistemas se modela por una importante razón: Gestionar la complejidad. Un modelo es una abstracción de cosas reales.

Programación estructurada (Procedimental).

Divide un programa en funciones (subrutinas, procedimientos, etc.) y agrupamiento de funciones en una entidad más grande denominada módulo.

La ecuación fundamental de programación estructurada, debido a Niklaus Wirth y Edsger Dijkstra es: Algoritmos+Datos=Programas

Programación Orientada a Objetos.

El mundo real trata de objetos (real o abstracta), que tienen incorporado atributos (datos) y comportamiento (funciones o métodos). El comportamiento es la acción que realizan los objetos del mundo real en respuesta a un estímulo. El paradigma orientado a objetos nació en 1969, con el docto noruego Kristian Nygaard.

Comportamiento (funciones o métodos), constituyen el único método para acceder a los datos y se devuelve un valor.

Las etapas para modelar un sistema empleando OO, son:1. Identificación de los Objetos.2. Agrupamiento en clases (tipos de objetos).3. Identificación de los datos y operaciones de cada una de las clases.4. Identificación de las relaciones existentes entre las diferentes clases del modelo.

El objeto es el centro de la POO. Un objeto es real (físico o duro) y abstracto (conceptual o blando).

Un Tipo Abstracto de Dato (TAD) se conoce en POO con el término de clase. Una clase es la implementación de un TAD y describe atributo (datos) y operaciones (comportamiento).

Modelado e identificación de objetos.

La correspondencia entre objetos de programación y objetos del mundo real es el resultado práctico de combinar atributos y operaciones. Un objeto tiene un estado, un comportamiento y una identidad.

Page 2: Clases Uml

El estado de un objeto viene determinado por los valores que tomas sus atributos o datos. El estado de un objeto tiene un carácter dinámico que evoluciona con el tiempo, con independencia de que ciertos elementos del objeto pueden permanecer constantes.

Comportamiento, Conjunto de operaciones que se pueden realizar sobre un objeto. Las operaciones pueden ser de observación del estado interno del objeto, o bien de modificación de dicho estado. Estas operaciones se realizan tras la recepción de un mensaje o estimulo externo enviado por otro objeto.

Identidad, Permite diferenciar los objetos de modo no ambiguo independiente de su estado. Es posible distinguir dos objetos cuyos atributos sean iguales. Cada objeto ocupa su propia posición en la memoria de la computadora. Hace al objeto único, diferente al resto.

Propiedades fundamentales de la OO.

Los conceptos fundamentales de la OO, que a su vez se constituyen en reglas de diseño en un lenguaje de programación, son: abstracción, encapsulación y ocultación de datos, herencia (generalización), reutilización o reusabilidad, polimorfismo. Otras propiedades importantes son: envió de mensajes y diferentes tipos de relaciones tales como dependencia, asociación, agregación (composición), jerarquía de clases (generalización / especialización), herencia (clase derivada).

Abstracción, es una forma de reducir la complejidad intrínseca que poseen los sistemas del mundo real. En computación, la abstracción (modelo simplificado) es el proceso crucial de representar la información en términos de su interfaz con el usuario ¿Qué hace el sistema?. Ejemplo, en un televisor, el mando de control a distancia es una interfaz: encender, apagar, cambiar de canal, ajustar volumen, cambiar de brillo, etc. Es decir es posible distinguir claramente del Qué? Y del Cómo?

Encapsulamiento y ocultación de datos, Los objetos que poseen las mismas características y comportamiento se agrupan en clases, que no son más que unidades de programación que encapsulan datos y operaciones. La encapsulación oculta lo que hace un objeto de lo que hacen otros objetos del mundo exterior, por lo que se denomina también ocultación de datos.

Los botones (interfaz) del televisor y lavadora constituyen la comunicación con el mundo exterior.

En esencia, la interfaz de una clase representa un “contrato” de presentación de servicios entre ella y los demás componentes del sistema. De este modo, los clientes de un componente sólo necesitan conocer los servicios que éste ofrece y no como está implementado internamente.

Page 3: Clases Uml

Existe una separación de la interfaz de la implementación. La interfaz pública establece qué se puede hacer con el objeto; de hecho, la clase actúa como una “caja negra”. Si bien la interfaz pública es estable, la implementación se puede modificar.

Herencia, el concepto de clase conduce al concepto de herencia. La clase principal de la que se derivan las restantes se denomina clase base o clase padre o superclase y las subclases también se denominan subclase o clase hija.

Esta jerarquía desde el punto de vista del modelo se denomina relación de generalización o es-un (is-a). En POO, la relación de generalización se denomina herencia. Cada clase derivada hereda las características de la clase base y además añade sus propias características (atributos y operaciones).

Reutilización o reusabilidad, este concepto significa que una vez que se ha creado, escrito y depurado una clase, se puede poner a disposición de otros programadores para ser utilizado, ampliado o mejorado.

La facilidad de reutilizar el software existente es una de las grandes beneficios de la POO, como se suele decir en la jerga de programación: dejar de “inventar la rueda” cada día.

Polimorfismo, Es la propiedad que permite a una operación (función) tener el mismo nombre en clases diferentes y actuar de un modo distinto en cada una de ellas. Ejemplo: abrir una puerta, abrir una ventana, abrir un libro, abrir una cuenta corriente, etc. En cada caso se realiza una operación diferente.

El polimorfismo (una cosa con distintas formas) permite una única función calcularSuperficie, cuya implementación es diferente de la clase Triángulo, Rectángulo o Circunferencia.

Page 4: Clases Uml

Diseño de clases y objetos.

Concepción de Objeto. Un objeto es una instancia de una clase.

Booch define objeto como: “algo que tiene un estado, un comportamiento y una identidad”.

Martin/Odell define objeto como: “cualquier cosa, real o abstracta, en el que se almacena datos y los métodos (operaciones) que manipulan dichos datos”.

Un objeto es una entidad atómica formada por la unión del estado y del comportamiento. Proporciona una relación de encapsulamiento que asegura una fuerte cohesión interna y un débil acoplamiento con el exterior. Un objeto revela su rol verdadero y su responsabilidad cuando al enviar mensajes se convierte en parte de un escenario de comunicaciones.

Objeto de software define una representación abstracta de las entidades del mundo real con el fin de controlarlo o simularlo. Al igual que los objetos del mundo real que nacen, viven y mueren; los objetos del mundo del software tienen una representación similar, conocida como su ciclo de vida.

Un objeto de un programa de computadora es algo que no se puede tocar. Cuando un programa se ejecuta, la mayoría existe en memoria principal. Los objetos se crean por un programa para su uso mientras el programa se esta ejecutando.

Un mensaje es una instrucción que se envía a un objeto y cuando recibe ejecuta sus acciones. Un mensaje incluye un identificador que contiene la acción que ha de ejecutar el objeto junto con los datos que necesita el objeto para realizar su trabajo. Los mensajes, por consiguiente, forman una ventana del objeto al mundo exterior.

Un usuario de un objeto se comunica con el objeto mediante su interfaz, un conjunto de operaciones definidas por la clase del objeto de modo que todas son visibles al programa. Una interfaz se puede considerar como una vista simplificada de un objeto.

Objeto=Estado+Comportamiento+ Identidad

Concepción de una Clase. Es un tipo definido por el usuario. Son los bloques de construcción fundamental de la POO.

Booch denomina a una clase “como un conjunto de objetos que comparten una estructura y comportamiento comunes”.

Una clase describe el dominio de definición de un conjunto de objetos. Cada objeto pertenece a una clase. Las características generales están contenidas dentro de la clase y las características específicas están contenidas en el objeto. Los objetos software se construyen a partir de la clase vía un proceso conocido como instanciación. De este modo un objeto es una instancia (ejemplar o caso) de una clase.

Los métodos y las variables definidas en una clase se denominan miembro de la clase. Los métodos son los que determinan cómo se pueden utilizar los datos de la clase.

Page 5: Clases Uml

Las variables definidas en el interior de una clase se llaman variables de instancia debido a que cada instancia de la clase (es decir cada objeto de la clase) contiene su propia copia de estas variables. Por consiguiente, los datos de un objeto son únicos e independientes de otro objeto.

Representación gráfica de una Clase.

Un diagrama de clases esta compuesto por los siguientes elementos: Clase : atributos, métodos y visibilidad. Relaciones : Dependencia, Asociación, Agregación (Composición), Jerarquización

(Generalización / Especificación), Herencia (Clase Derivada).

Clase, es la unidad básica que encapsula toda la información de un Objeto (un objeto es una instancia de una clase). A través de ella podemos modelar el entorno en estudio (una Casa, un Auto, una Cuenta Corriente, etc.). En UML, una clase es representada por un rectángulo que posee tres divisiones:

En donde: o Superior: Contiene el nombre de la Clase o Intermedio: Contiene los atributos (o variables de instancia) que

caracterizan a la Clase (pueden ser private, protected o public). o Inferior: Contiene los métodos u operaciones, los cuales son la forma como

interactúa el objeto con su entorno (dependiendo de la visibilidad: private, protected o public).

Ejemplo: Una Cuenta Corriente.Posee atributos o características:

o Balance Puede realizar las operaciones de:

o Depositar o Girar o Balance

Page 6: Clases Uml

El diseño asociado es:

Atributos y Métodos:

o Atributos: Los atributos o características de una Clase pueden ser de tres tipos, los que definen el grado de comunicación y visibilidad (complementan o refinan el concepto de encapsulamiento) de ellos con el entorno, estos son:

public (+, ): Indica que el atributo será visible tanto dentro como fuera de la clase, es decir, es accesible desde todos lados.

private (-, ): Indica que el atributo sólo será accesible desde dentro de la clase (sólo sus métodos lo pueden accesar).

protected (#, ): Indica que el atributo no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (ver herencia).

o Métodos: Los métodos u operaciones de una clase son la forma en como ésta interactúa con su entorno, éstos pueden tener las características:

public (+, ): Indica que el método será visible tanto dentro como fuera de la clase, es decir, es accesible desde todos lados.

private (-, ): Indica que el método sólo será accesible desde dentro de la clase (sólo otros métodos de la clase lo pueden accesar).

protected (#, ): Indica que el método no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de métodos de las subclases que se deriven (ver herencia).

Relaciones entre Clases.

Una relación es una conexión semántica (significado e interpretación de símbolos) entre clases. Permite que una clase conozca los atributos, operaciones y relaciones de otras clases. Las clases no actúan aisladas entre sí, al contrario, están relacionadas unas con otras, dependiendo de la fortaleza de la relación.

Page 7: Clases Uml

La fortaleza de una relación de clases se baza en el modo de dependencia de las clases implicadas. Dos clases que son fuertemente dependientes una de otras se dice que están acopladas fuertemente y en caso contrario, que están acopladas débilmente.

1. Dependencia.Es la relación más débil entre dos clases; significa que una clase utiliza (usa un) la información y los servicios de otra clase o dicho de otro modo, “lo que una clase necesita conocer de otra clase para utilizar objetos de esa clase”. Normalmente es una relación transitoria y significa que una clase dependiente interactúa de manera breve con la clase destino, pero normalmente no tiene con ella una relación de un tiempo definido.

Dependencia de una clase de otra, es decir, ¿Quién depende de quien?. Clase Independiente (puede existir sin la presencia de la clase independiente). Clase Dependiente (su visualización depende de la clase independiente). Este tipo de relación no es muy usado en el diseño de BD.

2. Asociación.

Es una conexión conceptual o semántica entre clases. Tiene un nombre (verbo, también puede ser frases nominales). Cuando una asociación conecta dos clases, cada clase envía mensajes a la otra en un diagrama de colaboración. Una asociación es una abstracción de los enlaces que existen entre instancias de objetos.

Page 8: Clases Uml

Una asociación es más fuerte que la dependencia y normalmente indica que una clase recuerda o retiene una relación con otra clase durante un periodo determinado de tiempo. La asociación significa que una clase contiene referencia a un objeto u objetos de la otra clase en forma de atributo. La asociación se representa mediante una line que conecta las dos clases.

Multiplicidad (Cardinalidad), representa la cantidad de objetos de una clase que se relacionan con un objeto de la clase asociada. Estas pueden ser:

o uno a muchos: 1..* (1..n)

o 0 a muchos: 0..* (0..n)

o número fijo: m (m denota el número).

o Numero fijo: 5 .. 11 Cinco a once.

Asociación reflexiva (recursiva), es cuando una clase tiene una asociación consigo mismo. Esto se presenta cuando una clase tiene objetos que pueden jugar diferentes roles.

Clase asociación, Una clase asociación es una asociación, con métodos y atributos, que es también una asociación normal.

La clase asociación no se conecta a ninguno de los extremos de la asociación, sino que se conecta a la asociación real, a través de una línea punteada. La clase asociación se utiliza para añadir información extra en un enlace. Este tipo de clase se utiliza cuando se necesita mantener información sobre la propia relación.

Page 9: Clases Uml

3. Agregación.

Una agregación es un tipo especial de asociación que expresa un acoplamiento más fuerte entre clases. Una de las clases juega un papel importante dentro de la relación con las otras clases.

La agregación implica normalmente propiedad o pertenencia. La agregación se lee normalmente como relación “posee un” o “todo-parte”, en la cual una clase (“el todo”) representa un gran elemento que consta de elementos más pequeños (“ las partes”). La agregación se representa con un rombo a continuación de la clase “propietaria” y una línea recta que apunta a la clase “poseída”. Esta relación se conoce como “tiene-un” ya que el todo tiene sus partes; un objeto es parte de otro objeto.

Composición, es un tipo especial de agregación que impone algunas restricciones: si el objeto completo se copia o se borra (elimina), sus partes se copian o se eliminan con él. La composición es una relación fuerte entre clases y se utiliza para representar una relación todo-parte (whole part) y se lee “…es parte de…”. Cada componente dentro de una composición puede pertenecer tan sólo a un componente. El símbolo de una composición es el mismo que el de una agregación, excepto que el rombo está relleno.

Page 10: Clases Uml

4. Jerarquía de clases: Generalización y Especialización.

La jerarquía de clase (o clasificación) hace lo posible por gestionar la complejidad ordenando objetos dentro de arboles de clases con niveles crecientes de abstracción. Las jerarquías de clase más conocidas son: generalización y especialización.

Generalización / Especialización.

I. La generalización es una relación de herencia entre dos elementos de un modelo tal como clase. Permite a una clase heredar atributos y operaciones de otra clase. En realidad es la factorización de elementos comunes (atributos, operaciones y restricciones) dentro de un conjunto de clases en una clase más general denominado superclase. Las clases están ordenadas dentro de una jerarquía, una superclase es una abstracción de sus subclases.

II. La flecha que representa la generalización entre dos clases apunta hacia la clase más general.

III. La especialización permite la captura de las características específicas de un conjunto de objetos que no han sido distinguidos por las clases ya identificadas. Las nuevas características se representan por una nueva clase, que es una subclase de una de las clases existentes. La especialización es una técnica muy eficiente para extender un conjunto de clases de un modo coherente.

IV. La generalización (abajo hacia arriba) y la especialización (arriba hacia abajo) son dos puntos de vista opuesto del concepto de jerarquía de clasificación; expresan la dirección en que se extiende la jerarquía de clases.

V. Una generalización no lleva ningún nombre especifica; siempre significa “es un tipo de”. “es un”. “es uno de”, etc. La generalización sólo pertenece a clases, no se puede instanciar vía enlaces y por consiguiente no admite el concepto de multiplicidad.

VI. La generalización es una relación no reflexiva: una clase no se puede de si misma. VII. La generalización es una relación asimétrica: si la clase B se deriva de la case A,

entonces la clase A no se puede derivar de la clase B. VIII. La generalización es una relación transitiva: si la clase C se deriva de la clase B que

a su vez se deriva de la clase A, entonces la clase C se deriva de la clase A.IX. Una superclase representa una generalización de las sub clases. Una subclase de

la clase dada representa una especialización de la clase ascendente.

Page 11: Clases Uml

5. Herencia: clases derivadas.

La herencia o relación es-un es la relación que existe entre dos clases, en la que una clase denominada derivada se crea a partir de otra ya existente, denominada clase base.

Herencia simple, es cuando tiene un solo padre. Una clase puede no tener padre, en cuyo caso se denomina clase base o clase raíz, y también puede no tener ninguna hija, en cuyo caso se denomina clase terminal o clase hija o clase hoja.

Page 12: Clases Uml

Herencia múltiple, es cuando tiene más de un padre.

Aunque la herencia múltiple está admitida en UML y en C++ (no en Java y C#), en general su uso no se considera una buena práctica en la mayoría de los casos. Esta característica se debe al hecho de que la herencia múltiple presenta un problema complicado cuando las dos clases padre tienen solapamiento de atributos y comportamiento.

En OO la relación se conoce como herencia y el UML como generalización.

6. Clases abstractas.

Una clase abstracta es una clase que no tiene objeto, o con mayor precisión, es una clase que no puede tener objetos instancia de la clase base. Una clase abstracta describe atributos y comportamientos comunes a otras clases, y deja algunos aspectos del funcionamiento de la clase a las subclases concretas. Una clase abstracta se representa su nombre en letras cursivas.

Page 13: Clases Uml

7. Interfaz Realice.

Una interfaz es un conjunto de operaciones que realiza una clase. Esta última se relaciona con una interfaz mediante la realización, misma que se indica por una línea discontinua con un punto de flecha en forma de triangulo sin rellenar que apunta a la interfaz.

Otra forma (omitida) de representar una clase y una interfaz es con un pequeño círculo que se conecta mediante una línea a la clase.

Page 14: Clases Uml