Encapsulamiento - UML - Diagrama de Clases (Java)
Encapsulamiento - UML - Diagrama de Clases (Java)
Programación I
• UML – Diagram
a de Clases
• Ejemplos
Tema 4
Encapsulamiento
El encapsulamiento permite a una clase ocultar su información al
exterior
Para ocultar información la clase proporciona niveles de acceso:
publico, protegido, privado, etc. (modificadores)
Encapsulamiento
No olvidar:
Nivel de Descripción
acceso
private Atributos y métodos accesibles solo por la clase que las define
Encapsulamiento
Continuando, cree una clase ejecutable Encapsulamiento (es
ejecutable porque en ella esta el método main) y escriba:
public class Encapsulamiento
{ Como se ve no
public static void Main() tenemos acceso
{ desde el exterior a
Padre unPadre = new Padre(); la información de
unPadre; la clase Padre
}
}
Encapsulamiento
En la clase Padre defina el
método verData( ):
Encapsulamiento
En la clase Encapsulación escriba el siguiente código
Encapsulamiento
Defina los siguientes constructores:
Encapsulamiento
En la clase Encapsulación escriba el siguiente código :
Encapsulamiento
Para acceder a
miembros privados de
una clase se definen sus
métodos de acceso
Un método set puede
cambiar el valor de un
atributo privado
Un método get puede
obtener el valor de un
atributo privado:
Encapsulamiento
No es
accesible
debido al
nivel de
protección
UML – Diagrama de Clases
La orientación a objetos intenta modelar aplicaciones del
mundo real tan fielmente como sea posible, apoyándose en
ello en una gran facilidad de reutilización y extensibilidad
del software. El potente concepto OO que proporciona estas
características es la HERENCIA.
Scenario State
Scenario State
Diagramas de
Diagrams Diagramas de
Diagrams
Diagrams Diagrams
Colaboración Modelos Componentes
Scenario Component
Scenario Component
Diagramas
Diagrams de
Diagramas de
Diagrams Diagrams
Diagrams Distribución
Estados Diagramas de
Actividad
Diagramas de UML
Un diagrama de clase es un
tipo de modelo estático. Un
diagrama de clases describe
la vista estática de un sistema
en términos de clases y
relación entre ellas. Un
diagrama de clases muestra
solo las clases, pero existe
una variante del diagrama
que muestra las instancias de
objetos de las clases y que es
el diagrama de objetos.
Diagrama de Clases
Una clase se dibuja con un rectángulo, dividido en tres
compartimientos o bandas, la banda de nombre, la banda
de atributos y la banda de operaciones
Nombre
Diagrama de Clases
Atributos
importantes
Operaciones
importantes
Diagrama de Clases
Un atributo tiene un tipo, que indica la clase de atributo. (int, double, string, etc.)
Diagrama de Clases
Para la banda de operaciones (Métodos), la visibilidad es igual
que para los atributos. No es necesario que todas las operaciones
tengan tipo de retorno y parámetros, pero han de tener una
asignatura única.
Diagrama de Clases
Los diagramas de clase
consta de clases y las
relaciones entre ellas.
Las relaciones que se
pueden utilizar en UML
son asociación,
generalizaciones,
dependencias y
refinamiento.
Relaciones
Una asociación es una conexión entre clases, una
conexión (enlace) entre objetos de las clases implicadas
en la asociación.
Una asociación representa una relación estructural entre
objetos de clases diferentes.
La mayoría de las asociaciones son relaciones binarias
aunque pueden existir relaciones ternarias o n-arias.
Relaciones - Asociación
La conexión entre una asociación y los enlaces
correspondientes se realiza etiquetando ambas
asociaciones y enlazándolas con el mismo nombre.
Usa ►
Programador Computadora
Relaciones - Asociación
Una asociación es una relación entre clases que especifican cuantas
instancias cuantas instancias se pueden enlazar juntas. Un enlace es la
relación entre objetos. Una asociación se representa por una línea que
une dos clases, el nombre de la asociación se escribe en la línea.
recibe un
Estudiante * *
Curso
recibe un
Juan:Estudiante Matemáticas:Curso
rec
i be
un
Relaciones - Asociación
Aunque las asociaciones conectan normalmente dos clases diferentes juntas,
son posibles otros formatos. En particular existen muchas situaciones en
donde los objetos se pueden enlazar a otros objetos de la misma clase.
Ejemplo: los objetos representa aeropuertos y los enlaces representan la
existencia de un vuelo que conecta los aeropuertos enlazados.
Lima:Aeropuerto Cusco:Aeropuerto
Arequipa:Aeropuerto Tacna:Aeropuerto
Relaciones - Asociación
Etiquetas
Utiliza ►
Usuario tiene Computadora
Relaciones - Asociación
Multiplicidad entre las Asociaciones
La multiplicidad de una asociación determina cuántos objetos de cada tipo
intervienen en la relación: El número de instancias de una clase que se relacionan
con una instancia de la otra clase.
Cada asociación tiene dos multiplicidades (una para cada extremo de la relación).
Para especificar la multiplicidad de una asociación hay que indicar la
multiplicidad mínima y la multiplicidad máxima (mínima..máxima)
Multiplicidad Significado
1 Uno y sólo uno
0..1 Cero a uno
N..M Desde N hasta M
* Muchos
0..* Cero a muchos
1..* Uno a varios
Relaciones - Asociación
Multiplicidad
◄Trabaja para
* 1..*
Empresa Persona
empleador empleado
Emplea - a►
Cada extremo de una asociación es un Rol (papel). Cada rol puede tener
un nombre que indica como es visualizada la clase por la otra clase. Una
Empresa visualiza a Persona como un empleado. De modo similar
Persona visualiza la Empresa como empleador. Los nombres de los roles
deben de ser únicos.
Relaciones - Asociación
Cada rol indica multiplicidad de su clase. Por ejemplo, una Persona puede
trabajar para muchas empresas. Esto indica la multiplicidad del rol. ¿Cuántos
objetos Empresa se pueden asociar con un objeto Persona?. Una Persona puede
trabajar para muchas Empresas y una Empresa puede emplear a muchas
Personas. Por consiguiente, la multiplicidad de Empresa con Persona es 1..*.
Multiplicidad
◄Trabaja para
* 1..*
Empresa Persona
empleador empleado
Emplea - a►
Relaciones - Asociación
Navegación de las asociaciones
Aunque las asociaciones suelen ser bidireccionales (se pueden recorrer
en ambos sentidos), en ocasiones es deseable hacerlas unidireccionales
(restringir su navegación en un único sentido).
Gráficamente, cuando la asociación es unidireccional, la línea termina
en una punta de flecha que indica el sentido de la asociación:
posee 0..*
Persona Carros
Relaciones - Asociación
pertenece a
Profesor * 1..*
Escuela
Todo profesor pertenece a una o más escuela .
A una escuela pueden pertenecer varios
profesores.
Vive con
Nieto * 0..4
Abuelo
Todo nieto vive, hasta con sus cuatro abuelos
Un abuelo puede vivir con varios nietos
◄ Corresponde a
Cuenta 1 *
Operación
Una operación corresponde a una cuenta.
Relaciones - Asociación
Una asociación puede ser
otra clase en si misma , una
clase asociación. La clase
asociación no se conecta en
ninguno de los extremos de la
asociación. Es similar a una
clase normal, puede tener
atributos, operaciones y otras
asociaciones. La clase
asociación se utiliza para
añadir información extra en
un enlace.
Clases Asociadas
Ejemplo: una operación o transacción en un cajero
automático (CA) tiene sus propios atributos y
también operaciones sobre ellos.
CA Cliente
* operación *
propietario nombre
dirección contraseña
Operación CA
tipo_operación
fecha Clase asociación
hora
Clases Asociadas
Compañía Persona
* trabaja para *
nombre nombre
dirección dni
Trabajo
salario
departamento El trabajo realizado
gerente por una persona en
una compañía es una
clase
Clases Asociadas
La agregación es una caso especial de asociación. El
agregado indica que la agregación entre clases es un
tipo de todo parte. Un ejemplo de agregado es un coche
que consta de cuatro ruedas, un motor un chasis, etc.
Relaciones - Agregación
*
Todo Parte
*
Universidad Facultad
Tiene
Relaciones - Agregación
La definición de generalización en
UML es: “una relación taxonómica
(taxonomía es la ciencia de la
clasificación) entre un elemento
mas general y un elemento mas
especifico”. La generalización Cuenta
cuando se manifiesta en un lenguaje
de programación se suele conocer
como HERENCIA. Esta relación
implica generalización –
especialización de la clase base a la Cuenta
Cuenta Cuenta
clase derivada, donde existe una Corrient
Ahorro Sueldo
clase “general” y diferentes clases e
“especialización”.
Generalización de la clase Cuenta
Relaciones - Generalización
Frase
Relaciones - Generalización
Una generalización se
conoce como relación
“es-un”, “es-un-tipo-
de”, y es una relación
que es capaz de decir
es-un entre el
elemento especificado
y el elemento general
(un coche es-un
vehículo, un vendedor
es-un empleado, etc.).
Relaciones - Generalización
Generalización ordinaria
La generalización es una relación entre una clase general y una clase
especifica.
La clase especifica denominada sub-clase hereda de la clase general,
denominada superclase. Se heredan los atributos, las operaciones y
todas las asociaciones. Los atributos y operaciones con la visibilidad
publica en la superclase serán publicas en la subclase. Los miembros
que tiene visibilidad privada se heredaran pero no son accesibles
dentro de la subclase.
Para proteger atributos y operaciones de acceso desde el exterior a la
superclase y la subclase, se pueden hacer estos miembros protegidos.
Relaciones - Generalización
Clase Abstracta
Relaciones - Generalización
Una jerarquía de clases vehículo
Vehículo (abstracta) La clase coche es una
{abstract} subclase de vehículo y es una
superclase de coche deportivo,
coche turismo y coche camión
Coche Avión
Relaciones - Generalización
La clase vehículo es un ejemplo de clase abstracta que no
tiene ningún objeto, pero se utiliza solo para heredar de
ella. Una clase abstracta normalmente tiene operaciones
abstractas. Una operación abstracta es una que no tiene
ningún método de implementación en la clase en que se
especifica. Una clase que tiene al menos una operación
abstracta debe de ser una clase abstracta, y una clase que
hereda de una clase que tiene una o mas operaciones
abstractas, debe de implementar esas operaciones
(proporcionar métodos para ellas) o convertirse así misma
en una clase abstracta.
Relaciones - Generalización
Las operaciones abstractas se muestran con la cadena
{abstracta} seguida de la signatura de la operación, y en
letra cursiva. Las operaciones abstractas se definen en las
clases abstractas para especificar el comportamiento que
deben tener todas las subclases. Así, una clase vehículo
puede tener operaciones abstractas que especifiquen
operaciones a realizar por todos los vehículos tales como
conducir, acelerar, frenar, detenerse, arrancar, etc.
Relaciones - Generalización
Vehículo
{abstracto}
Clase
abstracta
vehículo
conducir() {abstracto}
Coche Barco
Conducir() Conducir()
Relaciones - Generalización
Las clases concretas son las opuestas de las clases abstractas y
significan que de estas clases es posible crear objetos y tienen
implementaciones de todas las operaciones. Si la clase Vehículo a especificado
una operación abstracta estas operaciones han de implementarse – y de modo
diferente – en las clases derivadas coche y barco.
Relaciones - Generalización
Ejemplo: en la figura, muestra una clase Persona que tiene una
asociación conduce.
La clase Vehículo es abstracta; esto significa que los objetos reales que
la Persona conduce son de las subclases concretas Coche y Barco.
Cuando la Persona ejecuta la operación de conducir, el resultado
depende de que el objeto utilizado sea un coche o un barco. Aquí un
objeto de una subclase actual como un objeto de una superclase y una o
mas operaciones de la superclase se redefinen en la clase, recordemos
que esto se llama POLIMORFISMO. El Polimorfismo significa que la
implementación real utilizada dependerá del objeto sobre el que
aplicaba la operación.
Relaciones - Generalización
Vehículo
{abstracta}
Conduce ► color
Persona
matricula
conducir() {abstracta}
Coche Barco
Una persona tiene
asociación conduce
con vehículos Conducir() Conducir()
Relaciones - Generalización
La herencia múltiple es una forma de herencia en
donde una clase hereda la estructura y el
comportamiento de dos clases base. En otras palabras
hay múltiples clases padre para la clase hija. La
herencia múltiple, por otras parte, implica clases base
múltiple. Una clase ProfesorAyudante hereda
propiedades de las clases Estudiantes y Profesor que ha
su vez heredan propiedades de la clase base Persona.
Relaciones - Generalización
Persona
Nombre
Fecha nacimiento
Sexo
Estudiante Profesor
Dirección Categoría
Departamento Departamento
ProfesorAyudante
Campo investigación
Titulo
HERENCIA MÚLTIPLE
Relaciones - Generalización
Dependencia
Relación (más débil que una asociación) que muestra la relación entre un cliente y
el proveedor de un servicio usado por el cliente.
◦ Cliente es el objeto que solicita un servicio.
◦ Servidor es el objeto que provee el servicio solicitado.
Gráficamente, la dependencia se muestra como una línea discontinua con una
punta de flecha que apunta del cliente al proveedor.
Relaciones - Dependencia
Ejemplos
Desarrollar una clase llamada Punto que:
Tenga dos atributos private de tipo double.
Tenga un constructor con dos parámetros de tipo double que
inicialice los dos atributos.
Tenga un constructor por defecto (sin parámetros) que
inicialice los dos atributos al valor que se quiera.
Tenga un getter para cada uno de los atributos.
Tenga un método calcularDistanciaDesde que recibe un
parámetro de tipo Punto y que devuelve un double.
-p1: Punto
-p2: Punto
-p3: Punto
+Triangulo()
+Triangulo(param1: Punto, param2: Punto, param3: Punto)
+Triangulo(x1: double, y1: double, x2: double, y2: double, x3: double, y3: double)
+getP1(): Punto
+getP2(): Punto
+getP3(): Punto
+calcularArea(): double
+calcularPerimetro(): double
+calcularDistanciaDesde(): double
+ponerNotas(param: Alumno)
+calcularPromedio(param: Alumno): double
-motor: Motor
-marca: string
-modelo: string
-precioAverias: double
Garaje
Desarrollar una clase llamada Garaje que:
Tendrá tres atributos, un coche, un String con la avería asociada
y el número de coches que ha ido atendiendo.
El garaje solo podrá atender a un coche en cada momento.
Controlar esta premisa.
Tenga un método aceptarCoche que recibe un parámetro de tipo
Coche y la avería asociada. El garaje solo podrá atender a un
coche en cada momento. Si ya esta atendiendo uno, que
devuelva un false.
Tenga un método devolverCoche que dejara al garaje en estado
de aceptar un nuevo coche.
+coche: coche
+aveia: string
+numCochesAtendidos