Semana 3 -Diagrama de Clases
-
Upload
krla-c-ulloa -
Category
Documents
-
view
53 -
download
0
Transcript of Semana 3 -Diagrama de Clases
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
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
¿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
(¿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
(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
(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..*