Académique Documents
Professionnel Documents
Culture Documents
DIAGRAMA DE CLASES
===========================================================
1. El concepto de clase
En la evolución del software los objetos fueron una abstracción de nuevo tipo,
es decir, cualitativamente diferente a las demás porque eran variables que se podían
asociar con el concepto de cosa. Gracias a este nivel de ambigüedad, los objetos
facilitaron el acceso a un campo más amplio de trabajo. Con los objetos el software
aumento su capacidad para enfrentar la complejidad, pero no era suficiente. En la
misma dirección, convenía disponer de mayor nivel de abstracción y se inventaron
las clases para expresar abstracciones de cosas (objetos). Una vez más, se facilitó el
trabajo porque las clases permiten pensar el diseño con menos elementos, expresar
relaciones de forma más compacta (abstracta) y además, dejan abierta la puerta
para elevar todavía más el potencial de ambigüedad.
Las clases
Los objetos se podrían definir uno a uno o en conjunto. Para conseguir esto
último se han inventado las clases como las definiciones de los conjuntos de objetos.
Ya se utilizaron en el programa orientado a objetos para pintar círculos. Las clases
Círculo, Ventana y Formulario sirvieron para definir las propiedades de los objetos
círculo, ventana y formulario respectivamente. Algunos lenguajes de programación
permiten definir uno a uno los objetos y otros, los más difundidos, exigen la definición
(clase) de los conjuntos de objetos aunque sólo se utilice un elemento.
X = {6, 7}
X = {x / x ε N y 5 < x < 8}
Calase persona
Objetos instanciados:
Instancias:
Fig. 2
Fig. 3
Primer compartimiento:
Fig. 4
Fig. 5
Boleta Boleta_Detalle
Alumno Curso
Fig. 6
Fig. 7
Fig. 8
- modelo
- anioFabricacion
- peso
- caballoFuerza
- color
- placa
- etc.
En UML seria así como en la figura 9.
Especificación de atributos
Un atributo se puede especificar utilizando la siguiente sintaxis:
Public(+):Si un atributo tiene visibilidad publica, indica que se puede acceder desde
dentro o fuera de la clase a la que pertenece y para indicar esto se pone el “+”
delante del nombre del atributo.
Private(-):Si un atributo tiene visibilidad privada, indica que se puede acceder solo
desde dentro de la clase a la que pertenece, en otras palabras esto indica que solo
los métodos de la clase tienen permiso para manipular al atributo.
Para indicar que un atributo es privado se pone el “-” delante del nombre del
atributo.
Fig. 10
De la clase(figura 10) se observa que:
El atributo1, atributo2 y atributo4 tiene visibilidad publica
El atributo3 tiene visibilidad privada y
El atributo5 tiene visibilidad protegida
En la herramienta CASE Rational Rose se utiliza para la representación de la
visibilidad los símbolos que se muestran en la figura 11
Fig. 11
NombreClase
+atributo1
+atributo2
-atributo3[0...3]
Fig. 12
tipo : Es el tipo de dato que tiene el atributo y puede ser cualquiera de los tipos de
uso común tales como: int, string, char, float, double, date.
Ejemplo 4:
En la figura 12 se presenta la clase persona con sus atributos: nombre, DNI,
telefono,direccion: de tipo string, fechaNacimiento: de tipo Date
Fig. 12
valor inicial : Es el valor inicial por defecto que se le puede asignar a un atributo;
esto es útil para no tener inconsistencia de datos, en la figura 13 se muestra una
Fig. 13
Tercer compartimiento
Contiene las operaciones que los objetos de una clase pueden realizar.
Operaciones
Las operaciones describe el comportamiento de un objeto de una clase, es decir
como un objeto interactúa con su entorno.
Ejemplo 5:
En al figura 14 se puede observar la clase usuario con tres operaciones en el tercer
compartimiento: Alumno(); que es el constructor de la clase, agregar alumno(),
Inscripción.
Publica(+): La operación puede ser invocado por cualquier objeto de otras clases;
para indicar esto se le antepone al nombre el símbolo “+” .
Privada(-): La operación puede ser invocada solo por la clase en la que fue creada;
para indicar esto se le antepone al nombre el símbolo “-”.
Protegida(#): Indica que la operación no puede ser invocada desde otra clase pero
si desde la clase en la que fue creada y de las clases descendientes; para indicar
esto se le antepone al nombre el símbolo “#”.
1
Libro Modelamiento con UML, Cesar Avila, pag. 78
Fig. 15
Una clase puede tener más de un método constructor para crear objetos de
forma distinta. Por ejemplo, un constructor puede crear el objeto inicializando todos
sus atributos y otro sin inicializarlos, o inicializando sólo alguno de ellos. Estos
constructores tienen el mismo nombre y se diferencian en los parámetros que
reciben. Por ejemplo:
Círculo()
Fig. 16
2
Modelamiento con UML, Cesar Avila, Pag 84
Fig. 17
En al figura 17 se muestra clases: en donde se menciona el nombre y sus
responsabilidades de cada clase
En al figura 18 se muestra una clase Cuenta, con un atributo balance de tipo entero y
tres operaciones: depositar(monto: int):void; que recibe un parámetro de tipo
entero y no retorna valor alguno, girar(monto: int):boolen; que recibe un
paramentro de tipo entero y retorna un valor de tipo bolean(0 ó 1), balance():int; que
no recibe ningun parámetro y retorna un valor de tipo entero.
En la figura 19 se tiene la clase vehiculo con tres clases con visibilidad protegida y
tres operaciones con visibilidad publica; en este caso el operador Vehiculo() es el
constructor del objeto y el operador Vehiculo() es el destructor del objeto.
La clase Vehiculo es una clase mas general de la clase Auto y de la clase
Camioneta. A esto se llama generalización que se hablara mas adelante en la
CAPITULO III.
Los diagramas de clases son diagramas de estructura estática que muestran las
clases del sistema y sus interrelaciones (incluyendo herencia, agregación,
asociación, etc). Los diagramas de clase son el pilar básico del modelado con UML,
siendo utilizados tanto para mostrar lo que el sistema puede hacer (análisis), como
para mostrar cómo puede ser construido (diseño). El diagrama de clases de más alto
nivel (main class diagram), será lógicamente un dibujo de los paquetes que
componen el sistema. A su vez cada paquete tendrá un main class diagram que
muestra las clases del paquete
Las clases se documentan con una descripción de lo que hacen, sus métodos y sus
atributos. Las relaciones entre clases se documentan con una descripción de su
propósito, su cardinalidad (cuantos objetos intervienen en la relación) y su
opcionalidad (cuando un objeto es opcional el que intervenga en una relación). La
descripción de clases complejas se puede documentar con diagramas de estados
d d
e c e c
b b
f f
a a
(1) (2)
d c d c
e b e
a
a f b
f
I G N M
I ≡ {f, g, d}
N ≡ {a, d}
M ≡ {b, c, e, f}
La figura 23. Muestra el diagrama de clases del sistema para dibujar círculos.
Se aprecian las clases, los elementos que componen cada clase y las relaciones
entre las clases.
FormularioCirculo
-int centrox
-int centroy
-int radio
-Color color
-JLabel centroxLabel
-JLabel centroyLabel
Ventana Circulo -JLabel radioLabel
-Circulo circulo1 -int centrox -JLabel colorLabel
-Circulo circulo2 -int centroy -String centroxString
+Ventana() -int radio -String centroyString
-asignarLookAndFeel() -Color color -String radioString
-setCloseClick() -boolean haydatos -String colorString
+paint(entrada Graphics g) +Circulo() -JTextField centroxTextField
+main(entrada String[] args) +paint(entrada Graphics g) -JTextField centroyTextField
-JTextField radioTextField
-JComboBox colorField
+FormularioCirculo()
+obtenerCentrox()
+obtenerCentroy()
+obtenerRadio()
+obtenerColor()
- Clases
- Relaciones entre clases
- Cardinalidad
- Navegabilidad
Diagrama de
clases
correspondiente
Círculo()
Pintar()
El sistema está formado por objetos ventana y círculo; todos los objetos
ventana usan a objetos círculo y además, los objetos círculos tienen las
propiedades de crearse y pintarse.
En la tabla 1 se resumen los tipos de relaciones que pueden existir entre clases
Generalización
Multiplicidad
Tipos de 1..*
Binaria
relaciones entre 0..*
clases Según el número Reflexiva, etc.
de clases
participantes
N-aria Clase
asociación
Asociación
Composición
Según de cómo se
una las clases
Agregación
Tabla Nº 1
A B
Circulo1
<<create>> FormularioCirculo
<<create>>
obtenerCentrox()
obtenerCentroy()
obtenerRadio()
obtenerColor()
Círculo Formulario
Asociación
A B
Relaciones de asociación
Ventana ≡ {
Ventana::Ventana ≡ {
Agregación
En UML se utiliza una línea continua y un rombo en el lado del todo para
representar una relación de agregación. figura 28.
A B
X es de la clase B
A B
X es de la clase B
Destructor {
x.Destructor
}
Volviendo al ejemplo del sistema para pintar círculos, el diseño puede asignar
una relación de asociación, agregación (simple) o composición entre las clases
Ventana y Círculo, según convenga. Se podría utilizar una asociación si nada se
quiere realzar; una agregación para indicar que los objetos círculos son “parte” del
objeto ventana. Y una composición, en el caso de querer ligar la existencia de los
círculos a la ventana, de forma que al desaparecer la ventana desapareciesen
también los círculos.
FormularioCirculo
-int centrox
-int centroy
-int radio
-Color color
-JLabel centroxLabel
-JLabel centroyLabel
Ventana Circulo -JLabel radioLabel
-Circulo circulo1 -int centrox -JLabel colorLabel
-Circulo circulo2 -int centroy -String centroxString
+Ventana() -int radio -String centroyString
-asignarLookAndFeel() -Color color -String radioString
-setCloseClick() -boolean haydatos -String colorString
+paint(entrada Graphics g) +Circulo() -JTextField centroxTextField
+main(entrada String[] args) +paint(entrada Graphics g) -JTextField centroyTextField
-JTextField radioTextField
-JComboBox colorField
+FormularioCirculo()
+obtenerCentrox()
+obtenerCentroy()
+obtenerRadio()
+obtenerColor()
Solución
3. y el objeto formulario que será el encargado de leer los datos necesarios para
crear el triángulo.
================================================================
===
public Ventana() {
new Ventana();
}
public class Triangulo extends JPanel{
//Base
private int base;
//Altura
private int altura;
dialog.setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
dialog.pack();
dialog.show();
super.paint(g);
//Si el usuario ha introducido los datos pinta el triangulo
if (haydatos){
g.setColor(color);
g.drawPolygon(coordenadasx, coordenadasy, 3);
g.fillPolygon(coordenadasx, coordenadasy, 3);
g.dispose();
}
coordenadasx[0]=verticesuperiorx;
coordenadasx[1]=verticesuperiorx-(base/2);
coordenadasx[2]=verticesuperiorx+(base/2);
return coordenadasx;
}
coordenadasy[0]=verticesuperiory;
coordenadasy[1]=verticesuperiory+altura;
return coordenadasy;
}
contentPane.setLayout(new BorderLayout());
contentPane.add(labelPane, BorderLayout.CENTER);
contentPane.add(fieldPane, BorderLayout.EAST);
if (string.equals("Azul"))
color=Color.BLUE;
else if (string.equals("Verde"))
color=Color.GREEN;
else if (string.equals("Naranja"))
color=Color.ORANGE;
else if (string.equals("Rojo"))
color=Color.RED;
else if (string.equals("Amarillo"))
color=Color.YELLOW;
else if (string.equals("Gris"))
color=Color.GRAY;
else
color=Color.BLACK;
return color;
}
if (verticesuperiorxTextField.getText()!= null)
if (verticesuperioryTextField.getText()!= null)
return Integer.parseInt(verticesuperioryTextField.getText());
else
return 0;
}
if (baseTextField.getText()!= null)
return Integer.parseInt(baseTextField.getText());
else
return 0;
}
if (alturaTextField.getText()!= null)
return Integer.parseInt(alturaTextField.getText());
else
return 0;
}
}
Fig. 32
Fig. 33
- SQLServer
- Oracle
- MySQL
- Etc.
- Poet
- Db4o
CLASE PARADIGM
A
RDBMS
OBJETO1
X
X
TABLA1 TABLA2
OBJETO2
OBJETO3
X
ENTORNO DE OBJETOS ENTORNO DE DATOS
Fig. 34.
CLASE MAPEO
REGISTRO1 RDBMS
OBJETO1
REGISTRO2 X
TABLA1
X
TABLA2
OBJETO2
OBJETO3
REGISTRO3
X
<atributo
ENTORNO DE OBJETOS > ENTORNO DE DATOS
<columna
>
Fig. 35.
En el mercado existen productos que realizan dicho proceso de casamiento entre los
dos paradigmas y uno de ellos es el:
HIBERNATE
VERTICAL
Fig. 36
Fig. 37
- Las clases son muy importante; según la metodología Rup uno de los
artefactos en la etapa de análisis es presentar un diagrama de clases de
análisis, que nos sirve para delimitar nuestros sistemas y otro diagrama de
clases de diseño que es más completo.
• http://xdoclet.sf.net
• http://boss.bekk.no/boss/middlegen
• http://www.andromda.org