Semana 3 -Diagrama de Clases

69
Semana 3 Algoritmica II 2013

Transcript of Semana 3 -Diagrama de Clases

Semana 3

Algoritmica II

2013

Introducción: Modelado de SW

Construcción de Algoritmo de Fibonacci

Puede hacerlo una sola persona

Requiere:

Modelado mínimo

Proceso simple

Herramientas simples

int fib(int val){

if ((val==1)||(val==2)) return 1;

else

return (fib(val-1)+fib(val-2));

}

Construcción del software para un

cajero automatico

Construida eficientemente y en un tiempo

razonable por un equipo

Requiere:

Modelado

Proceso bien definido

Herramientas más sofisticadas

Auto-teller

system

Security

system

Maintenance

system

Account

da tabase

Usage

database

Branch

accounting

system

Branch

counter

system

Sistema de Radar de Aeropuerto

Herramientas Proceso

Notación

Pero, como se modela un sistema con

esta complejidad ?

Beneficios del Modelado

Interface de Usuario (Visual Basic,

Java, ..)

Lógica del Negocio (C++, Java, ..)

Servidor de BDs (C++ & SQL, ..)

Múltiples Sistemas

Componentes Reutilizados

Manejar la complejidad

“Modelar el sistema independientemente del lenguaje de implementación”

Promover la Reutilización

Introducción: UML

¿Qué es UML?

UML = Unified Modeling Language

Un lenguaje de propósito general para el modelado orientado a objetos. Impulsado por el Object Management Group (OMG, www.omg.org)

Documento “OMG Unified Modeling Language Specification”

UML combina notaciones provenientes desde: Modelado Orientado a Objetos Modelado de Datos Modelado de Componentes Modelado de Flujos de Trabajo (Workflows)

Antes de UML

Diversos métodos y técnicas OO, con muchos aspectos

en común pero utilizando distintas notaciones.

Modelos de Constantine, Jackson, Gane Sarson,

Shlaer-Mellor, etc.

Inconvenientes para el aprendizaje, aplicación,

construcción y uso de herramientas CASE, etc.

Pugna entre distintos enfoques

Objetivo: Establecer una notación estándar

Antes de UML

Modelos de descripción de procesos: Diagramas de

flujo de datos.

Modelos de descripción de datos: Diagramas de

entidad-relación, diccionario de datos.

Modelos de descripción arquitectural: Diagramas de

Estructura.

Modelos de descripción de comportamiento: State-

Charts.

Historia de UML

Comenzó como el “Método Unificado”, con la

participación de Grady Booch y Jim Rumbaugh. Se

presentó en el OOPSLA’95

El mismo año se unió Ivar Jacobson. Los “Tres Amigos”

son socios en la compañía Rational Software.

Herramienta CASE Rational Rose

Historia de UML

Nov ‘97 UML aprobado por el OMG

1998

1999

2000

UML 1.2

UML 1.3

UML 1.4

2005? UML 2.0

Revisiones menores

UML 1.5 2003

Participantes en UML 1.0

Rational Software (Grady Booch, Jim Rumbaugh y

Ivar Jacobson)

Digital Equipment

Hewlett-Packard

i-Logix (David Harel)

IBM

ICON Computing (Desmond D’Souza)

Intellicorp and James Martin & co. (James Odell)

MCI Systemhouse

Microsoft

ObjecTime

Oracle Corp.

Platinium Technology

Sterling Software

Taskon

Texas Instruments

Unisys

UML reune a enfoques OO

UML

Rumbaugh

Jacobson

Meyer

Harel

Wirfs-Brock

Fusion

Embly

Gamma et. al.

Shlaer-Mellor

Odell

Booch

Pre- and Post-conditions

State Charts

Responsabilities

Operation descriptions,

message numbering

Singleton classes

Frameworks, patterns,

notes

Object life cycles

Factores importantes en UML

Definición del proceso de desarrollo usando UML. UML

no es una metodología o proceso.

No cubre todas las necesidades de especificación de un

proyecto software.

Util en la definición de requerimientos, pero tambien en

el diseño (y en las pruebas…).

Notacion estándar y soportada por herramientas CASE

Estándar del OMG

Gran cantidad de Libros y cursos.

Modelos y Diagramas

Un modelo captura una vista de un sistema del mundo

real. Es una abstracción de dicho sistema, considerando

un cierto propósito. Así, el modelo describe completa-

mente aquellos aspectos del sistema que son relevantes

al propósito del modelo, y a un apropiado nivel de detalle.

Diagrama: una representación gráfica de una colección

de elementos de modelado, a menudo dibujada como un

grafo con vértices conectados por arcos

OMG UML 1.4 Specification

... Modelos y Diagramas

Un proceso de desarrollo de software debe ofrecer un conjunto de

modelos que permitan expresar el producto desde cada una de las

perspectivas de interés

El código fuente del sistema es el modelo más detallado del sistema

(y además es ejecutable). Sin embargo, se requieren otros modelos

...

Cada modelo es completo desde su punto de vista del sistema, sin

embargo, existen relaciones de trazabilidad entre los diferentes

modelos

Diagramas de UML

Use Case Diagrams

Use Case Diagrams

Diagramas de Casos de Uso

Scenario Diagrams

Scenario Diagrams

Diagramas de Colaboración

State Diagrams

State Diagrams

Diagramas de Componentes

Component Diagrams Component

Diagrams Diagramas de Distribución

State Diagrams

State Diagrams

Diagramas de Objetos

Scenario Diagrams

Scenario Diagrams

Diagramas de Estados

Use Case Diagrams

Use Case Diagrams

Diagramas de Secuencia

State Diagrams

State Diagrams

Diagramas de Clases

Diagramas de Actividad

Modelos

Los diagramas expresan gráficamente partes de un modelo

Diagramas de

Clase

(¿Qué Muestran?)

Muestran la estructura estática del sistema modelado.

Se concentran en los elementos del sistema de forma independiente del tiempo

Muestran las relaciones que existen entre las distintas clases y objetos del sistema

Muestran las clases y objetos del sistema y su estructura interna

(¿Para qué Sirven?)

Permiten realizar la abstracción de un dominio y formalizar el análisis de los conceptos relacionados al mismo

(o de cualquier tipo de conceptos)

Permiten definir una solución de diseño, es decir, la estructura del sistema que se va a implementar en

términos de clases y objetos

Permiten realizar modelado de datos

(cumplen la misma función en este sentido de los diagramas ERE)

Diagrama de Clases

El Diagrama de Clases es el diagrama principal para el análisis y diseño del sistema

Un diagrama de clases presenta las clases del sistema con sus relaciones estructurales y de herencia

La definición de clase incluye definiciones para atributos y operaciones

El modelo de casos de uso debería aportar información para establecer las clases, objetos, atributos y operaciones

Objetos

Objeto = unidad atómica que encapsula estado y

comportamiento

La encapsulación en un objeto permite una alta

cohesión y un bajo acoplamiento

La cohesion es la medida de la cercania de las

relaciones entre sus componentes.

El acoplamiento es una medida de la fuerza de las

interconecciones entre los componentes en el diseño.

Un objeto puede caracterizar una entidad física (coche)

o abstracta (ecuación matemática)

(¿Que es una Clase?)

Visibilidad:

- Privado

~ Paquete

# Protegido

+ Público

Nombre Atributo

Valor por Defecto

Tipo de Dato

Multiplicidad

Tipo de Retorno Parámetros de Entrada Nombre del Método

Clase / Clasificador: Definición de la estructura y el comportamiento de un conjunto de objetos que tienen el

mismo patrón estructural y de comportamiento

Clases y Objetos

En UML, para distinguir una

clase y una instancia de la

clase (un objeto) se

representa por un rectángulo

con un nombre subrayado

Objeto = Identidad + Estado

+ Comportamiento

El estado está representado

por los valores de los

atributos los cuales tienen una

visibilidad.

Un atributo toma un valor en

un dominio concreto.

Clases y objetos

La clase define el ámbito de definición de un conjunto de objetos

Cada objeto pertenece a una clase

Los objetos se crean por instanciación de las clases

Para distinguir entre una clase (el tipo) y un objeto (una instancia

del tipo), un objeto se muestra subrayado. Un objeto puede

representarse como anObject, anotherObject:Class, o :Class.

Las clases y los objetos forman parte de varios diagramas UML.

Clases: Notación Gráfica

Cada clase se representa en un rectángulo con tres

compartimientos: nombre de la clase

atributos de la clase

operaciones de la clase

Motocicleta

color

cilindrada

velocidad máxima

arrancar()

acelerar()

frenar()

Diagramas de Clases

¿Qué es una Instancia?

¿Qué es Instanciar?

¿Qué es una “Clasificación” (POO)?

¿Qué es la extensión de

una clase (POO)?

Conceptos de Objetos

(Diagramas de Clases)

Extensión de Clase: Conjunto de todas las instancias de una clase

Instancia: Cada objeto que pertenece a una clase

Instanciación: Proceso de generación o creación de las

instancias (objetos) de una clase

Clasificación: Agrupación de objetos con propiedades y

comportamiento similares dentro de una clase

pedro = new Persona()

Clases: Encapsulación

La encapsulación permite la cohesion y presenta dos

ventajas básicas:

Se protegen los datos de accesos indebidos

El acoplamiento entre las clases se disminuye

Favorece la modularidad y el mantenimiento

Los atributos de una clase no deberían ser

manipulables directamente por el resto de objetos

Clases: Encapsulación

Los niveles de encapsulación están heredados de los niveles

de C++, y explican si estos son visibles desde el exterior de

la clase:

(-) Privado : es el más fuerte. Esta parte es totalmente invisible (excepto para clases friends en terminología C++)

(#) Los atributos/operaciones protegidos están visibles para las clases friends y para las clases derivadas de la original

(+) Los atributos/operaciones públicos son visibles a otras clases (cuando se trata de atributos se está transgrediendo el principio de encapsulación)

Clases: Encapsulación

Ejemplo:

Reglas de visibilidad

+ Atributo público : Integer

# Atributo protegido : Integer

- Atributo privado : Integer

+ "Operación pública"()

# "Operación protegida"()

- "Operación privada"()

Diagramas de Clases

Un diagrama de clases describe los tipos de objetos

en el sistema y los distintos tipos de relaciones

estáticas que existen entre ellos. Existen cuatro

relaciones:

• Asociación

• Generalización/especialización

• Agregación/composición

• Dependencia

(Asociaciones)

Asociaciones: Representan relaciones estructurales entre las clases (la forma en que están relacionadas entre si las

clases)

¿Cómo se implementan?

Asociación

ProfesorDepartamento

10..1

director

1

dirige

0..1

•Permite asociar objetos.

•La asociacion se representa mediante una línea

que une las cajas de los dos objetos.

Empresa Empleado

1..** 1..**

trabajadoresempleador

Cargo

nombre

sueldo 0..1

1..*

superior

subordinado 1..*

0..1

Asociación

ProfesorDepartamento

10..1

director

1

dirige

0..1

•Una asociación se representa mediante una línea que une las

cajas de las dos clases.

•Esta asociacion tiene un nombre y opcionalmente una

pequeña cabeza de flecha que indica la dirección en la cual

se debe leer el nombre de la asociación.

•En cada extremo de la línea se sitúa la multiplicidad o

cuantas instancias de una clase se relacionan con una

instancia de la otra.

•Se puede usar una flecha de línea (“stick arrow”) para

representar la dirección de la navegabilidad.

Asociación

Ejemplo:

Compañía

nombre

dirección

Persona

nombre

s.s.

0..1

*

jefe 0..1

Administra

empleado

*

0..1

0..1mujer

0..1

casado-con

marido

0..1

*

* trabaja-para

*emplea-a

*

Asociación

Especificación de multiplicidad (mínima...máxima)

1 Uno y sólo uno

0..1 Cero o uno

M..N Desde M hasta N (enteros naturales)

* Cero o muchos

0..* Cero o muchos

1..* Uno o muchos (al menos uno)

La multiplicidad mínima >= 1 establece una restricción de existencia

Relación de Asociación

UniDireccional

Relación de Asociación Bidireccional

(Asociaciones / Navegabilidad)

Navegabilidad: Representan relaciones estructurales entre las clases (la forma en que están relacionadas entre si las

clases)

Indefinido

Navegable

NO navegable

Navegable por ambos lados

(Especialización / Generalización / Herencia)

Jerarquía de Clases: Relación ES-UN(A),

abstracciones de generalización /

especialización de clases

Herencia: Propiedad que tienen las clases de heredar

de sus superclases estructura y/o comportamiento (Simple /

Múltiple)

Generalización

Catalo gue n umberAcquisition da teCostTy peStatus

Number of copies

Library item

Acquire ()Catalo gue ()Dispose ()Issue ()Return ()

Author

EditionPub lication da te

ISBN

Book

Year

Issue

Magazine

Director

Date of release

Distrib utor

Film

Version

Platfor m

Computerpro gram

TitlePub lisher

Pub lished item

Title

Medium

Recorded item

Esta es una relación de

tipo: es-un.

Una generalización se

representa como una flecha

que une a las subclases

(hijos) a la superclase

(padre), con la flecha

tocando la caja de la

superclase.

Generalización

Permite gestionar la complejidad mediante un

ordenamiento taxonómico de clases

Se obtiene usando los mecanismos de abstracción de

Generalización y/o Especialización

La Generalización consiste en factorizar las propiedades

comunes de un conjunto de clases en una clase más

general

... Generalización

Nombres usados: clase padre - clase hija. Otros

nombres: superclase - subclase, clase base - clase

derivada

Las subclases heredan propiedades de sus clases

padre, es decir, atributos y operaciones (y asociaciones)

de la clase padre están disponibles en sus clases hijas

Generalización

Supongamos la clase empleado de la universidad

Empleado

Profesor

Adminis-

trativo

Obrero Autorida-

des

Implementaremos la clase profesor

como subclase de empleado

Generalización

Empleado

Atributos:

cedula

nombre y apellido

sueldo por hora

Métodos:

constructor

obtener cedula

obtener nombre

obtener sueldo por hora

modificar sueldo

class CEmp {

protected float suelhor;

protected String nomape;

protected int cedula;

public CEmp(float sue, String nom, int ced) {

suelhor=sue;

nomape=nom;

cedula=ced;

}

public CEmp(String nom, int ced) {

nomape=nom;

cedula=ced;

}

Implementando la clase empleado

public int getcedula() {

return cedula;

}

public String getnombre() {

return nomape;

}

public float getsuelhor() {

return suelhor;

}

public void setsuelhor(float sue) {

suelhor=sue;

}

}

Generalización

Generalización

Profesor

Atributos:

número de materias

número de horas

dependencia

Métodos:

constructor

obtener horas

obtener materias

obtener dependencia

calcular sueldo a pagar

Generalización

Para indicar que la clase profesor es subclase de la clase empleado

Empleado

Profesor class CProfesor extends CEmpleado

Generalización

Para invocar al constructor de la super clase,

debemos contemplar los siguiente:

Java invoca automáticamente al constructor de la

superclase, al crear un objeto de la subclase, la llamada se

efectúa sin parámetros.

Si no existe un constructor de la superclase sin parámetros,

se debe especificar la palabra super junto con los

parámetros del constructor que se desee invocar.

En nuestro ejemplo no existe en CEmpleado un constructor

definido sin parámetros, por lo tanto, debemos invocar al

constructor con los parámetros correspondientes desde el

constructor de la subclase.

super(sue,nom,ced);

public class CProf extends CEmp {

protected int nomat;

protected int nohor;

protected String dependencia;

public CProf(String nom, int ced, int m, int n,

String dep, float sue) {

super(sue,nom,ced);

nomat = m;

nohor = n;

dependencia = dep;

}

public CProf(String nom, int ced,String dep)

{

super(0,nom,ced);

dependencia=dep;

nomat=0;

nohor=0;

}

Implementando la clase profesor

public int gethoras() {

return nohor;}

public int getmat() {

return nomat;}

public String getdep() {

return dependencia; }

public void setmat(int mat) {

nomat=mat; }

public void sethor(int hor) {

nohor=hor; }

public float getsuelpagar() {

return nohor*suelhor; }

}

Generalización

class Univer {

public static void main(String args[]) {

CProf Betty;

CProf Carlo;

CProf Elvira;

Betty = new CProf("Betty del moral",785747,2,12,"Programacion",80000.00f);

Elvira = new CProf("Elvira Navas",685422,2,12,"Programacion",100000.00f);

Carlo = new CProf("Carlo Magurno",542635,"Programacion");

Carlo.setmat(3);

Carlo.sethor(16);

Carlo.setsuelhor(60000f);

System.out.println(Betty.getcedula()+Betty.getnombre()+Betty.getsuelpagar());

System.out.println(Elvira.getcedula()+Elvira.getnombre()+Elvira.getsuelpagar());

System.out.println(Carlo.getcedula()+Carlo.getnombre()+Carlo.getsuelpagar());

}

}

Creando tres profesores

Generalización

Relacion de Dependencia entre

Clases

Se usa para mostrar

relaciones entre paquetes

(grupos de clases)

Proveedor Cliente

(Agregación / Composición)

Composición: ¡Las partes NO pueden ser compartidas por

varios todos!

Agregación: ¡Las partes pueden ser compartidas por

varios todos!

Agregacion de Objetos

•En este modelo se muestra como

las clases pueden estar compuestas

por otras clases.

•Existe la relacion de agregacion y

la de composicion.

•Son similares a los modelos de

entidad-relacion.

(Agregación / Composición)

“Precise semantics of shared aggregation varies by application area and modeler”

Tomado Literalmente del Estándar de UML

Composición: El todo no puede existir sin las partes

(Ejemplo Anterior)

Composición: Las partes no pueden existir sin el todo

En contradicción con el ejemplo anterior:

¿La parte (La rueda) puede existir sin el todo?

Ejemplos

Window

scrollbar[2] : Slider

title : Header

body : Panel

Slider Header

Window

1

2

1

2scrollbar

1

1

1

1title

Panel

1

1

1

1body

Esta compuesta de

Son parte de

Composición

Composición

(Dependencia)

Dependencia: Relación en la que una clase necesita (requiere) a otra para poder funcionar

La clase persona depende de la clase teléfono

68

Diagrama de clases

class Dependencias

Dependencia

Escuela

Departamento

InstitutoDeInvestigación

CentroDeInvestigación

LaboratorioDeInvestigación

Postgrado

Facultad/Núcleo

+tieneDepartamentos 1..*

+tieneEscuelas

1..*

+tieneInstitutos

*

+tieneCentros

*

+tieneLabs

*

+tienePostgrados

*

69

Diagrama de clases

class películas

Película

- titulo: string = Desconocido

- año: char = 0000

- duracion: float = 0.0

- tipo: TipoPelicula

+ nuevaPelicula() : void

- setTitulo(string) : void

+ getTitulo() : string

- setAño(char) : void

+ getAño() : char

- setDuracion(float) : void

+ getDuracion() : float

+ modificaPelicula() : void

+ despliegaPelicula() : void

+ eliminaPelicula() : void

«enumeration»

TipoPelicula

«enum»

drama

suspenso

acción

comedia

Estudio

- nombre: string

- ciudad: string

- direccion: string

- dirWeb: string

- fechaFundacion: date

- pais: string

- telefonos: Lista

+ nuevoEstudio() : void

+ modificaEstudio() : void

+ cierraEstudio() : void

+ despliegaEstudio() : Estudio[]

- setNombre(string) : void

- setCiudad(string) : void

- setDireccion(string) : void

- setDirWeb(string) : void

- setFechaFundacion(date) : void

- setPais(string) : void

- setTelefonos(Lista) : void

+ getNombre() : string

+ getCiudad() : string

+ getDireccion() : string

+ getDirWeb() : string

+ getFechaFundacion() : date

+ getPais() : string

+ getTelefonos() : string[]

+produce

* producción

+producidaPor

1..*