• No se han encontrado resultados

UML a Java. Paquetes Ejemplo - Paquetes. Clases - Forma Básica. Clases Forma Avanzada- Curso de Arquitecturas de Software

N/A
N/A
Protected

Academic year: 2021

Share "UML a Java. Paquetes Ejemplo - Paquetes. Clases - Forma Básica. Clases Forma Avanzada- Curso de Arquitecturas de Software"

Copied!
10
0
0

Texto completo

(1)

Curso de Arquitecturas de

Software

Programación Orientada a

Objetos

UML a Java

UML a Java

„Diagramas desarrollados durante el

análisis y el diseño necesitan ser

convertidos a código en Java o cualquier otro Lenguaje OO

„Dado que Java es un lenguaje orientado a

objetos mapear de UML a Java es directo

Paquetes

Logica package Logica; package Logica.ModelodelMundo; Logica

ModelodelMundo Pueden existir paquetes dentro

De paquetes.

Los paquetes agrupan clases correlacionados entre sí y es una característica muy importante para la reutilización de código.

Paquetes – Ejemplo

-El paquete anterior llamado Mundo tiene 4 clases: Punto, Figura (Abstracta), Rectangulo y Triangulo.

Clases - Forma Básica

[import <Nombre Paquete>[* ò<clase>];] [package <Nombre Paquete>;]

class <NombreClase> { // Atributos // ... // Métodos // ... }

Especifica que la clase va A pertenecer a este paquete.

Permite “reusar” clases de otros paquetes.

Clases –Forma

Avanzada-[<Modificadores de clase>]

class <NombreClase> [extends <SuperClase>]

(2)

Clases – Modificadores

•Modificadores de clase: •public: Clase publica (+) •private: Clase privada (-) •Protected: Clase protegida (#) •abstract: Clase abstracta

•final: Clase final (no pueden crearse subclases de ella)

Si no aparece ninguno la clase sólo es visible en el directorio.

Clases – Cláusulas

„

Cláusula extends

indicamos la clase de la que hereda

„

Cláusula implements

indicamos una lista de interfaces que implementa

Clases – Propiedades

Propiedades: this y super. • this

Es una referencia al objeto (instancia de la clase) que está ejecutando en ese momento.

• super

Es una referencia a la superclase desde la que una clase hereda, pudiendo así, ejecutar métodos de la superclase (incluyendo contructores).

Clases – Interfaces

Observe la representación UML de interface

Clases – Interfaces

/* Generated by Together */

public interface PersonaColegial { public Horario getHorario(); /**

* @directed */

Horario lnkSchedule = null; }

/* Generated by Together */

public class Estudiante implements PersonaColegial { public Horario getHorario()

{ return this.lnkSchedule; } }

Clases – Interfaces

Notas

Observe que el método getHorario() no está implementado, note la ausencia de {}. El valor de retorno de getHorario es un objeto de tipo Horario.

(3)

Ejemplo

Clases – Ejemplo

package Mundo; class Punto { private int x = 0; private int y = 0; ... } package Mundo; abstract class Figura {

private Punto origen; static final double PI = 3.1416; ... } package Mundo; public class Rectangulo extends Figura { private int alto,

ancho; ... }

Atributos – Forma Básica

•Forma

[<Modificador de atributo>] <Tipo> <NombreAtributo>; •Modificadores de atributo

public, private, protected

Si no se especifica ninguno el atributo es accesible sólo en el directorio.

Ejemplos:

private int alto; public int alto = 33;

Atributos - Estáticos

• Existe una sola copia y es compartida por todos los objetos de la clase.

static [modificadores] idTipo idVar;

Ejemplos

static public int maxAlturaRectangulo; static final double PI = 3.1416; final indica que el atributo no puede ser modificado.

Métodos – Forma Básica

[<Modificadores de método>]

<TipoRetorno> <Nombre> ( [<ListaParámetros>] ) [throws <Lista TiposExcepcion>]

{ // Variables locales // Instrucciones o sentencias return (<Expresión>); }

Métodos – Modificadores

Modificadores de método: public, private, protected, static

„ abstract: método que no tiene implementación „ final: método que no puede sobreescribirse „ synchronized: Método sincronizado , el método

se ejecuta por exclusión mutua (un solo hilo a la vez).

„ native: Método nativo, el método está

(4)

Métodos – Constructor

„Sirven para inicializar los objetos „Un objeto puede tener uno o más

constructores.

„Todos los constructores tienen el mismo

nombre de la clase y se distinguen por la lista de parámetros (polimorfismo)

„En caso de no especificar ningún

constructor, automáticamente se crea uno sin parámetros (constructor por defecto) que inicializa las variables de instancia a cero

Métodos – Constructor

Forma

[modificadores] idClase (<parámetros>) {

<sentencias> }

Ejemplo

Rectangulo (int al, int an){

origen = new Punto();

this.alto = al; this.ancho = an; }

Métodos – Constructor

class Punto { private int x = 0; private int y = 0; Punto(){} Punto(int x, int y){

this.x = x; this.y = y; }

}

abstract class Figura { protected Punto origen; static final double PI = 3.1416; ...

}

Métodos – Constructor

public class Rectangulo extends Figura {

private int alto, ancho;

public Rectangulo() {origen = new Punto();} public Rectangulo( Punto p) {origen = p;} public Rectangulo( int ancho, int alto) {

this (new Punto(), ancho, alto);

}

public Rectangulo (Punto p, int ancho, int alto) {

origen = p; this.ancho= ancho; this.alto= alto; }

... }

Métodos – Parámetros

Podremos pasarlos de dos modos:

„ Por Valor: Tipos primitivos „ Por Referencia: Objetos y Arrays

Paso de Mensajes:

„Llamada a uno de los métodos de una

clase

(5)

Métodos – Sobrecarga

„ La Sobrecarga hace referencia a métodos con igual

nombre.

„ Deben tener listas de parámetros diferentes para distinguir

cuando ejecutar uno u otro.

„ El tipo devuelto puede ser igual

Ejemplo:

public void mover(int x, int y) { origen.mover(x,y);

}

public void mover(Punto p) { origen = p;

}

Métodos Abstractos Ejemplo

Métodos Abstractos

Son aquellos métodos donde no se especifica el cuerpo, éste será implementado en las subclases (por sobrescritura). Forma Básica

[modificadores] abstract [idTipo] idMetodo (parámetros);

Ejemplos

public abstract int area(); //abstracto de la clase figura public int area() //método sobreescrito de rectangulo {

return alto * ancho; }

public int area() {

return base * altura / 2; //método sobreescrito de triangulo }

Métodos Static

„ Métodos de clase que pueden ser llamados

directamente sin que haya sido creado un objeto de esa clase

„ Para utilizarlos se antecede el nombre de la

clase

„ Permiten realizar tareas que no estén

necesariamente asociadas a un objeto Forma

[modificadores] static [idTipo] idClase (parámetros) {

<sentencias> }

Métodos Static

Métodos Static

//Clase con las funciones y constantes matemáticas public class Matematica {

public static final double PI = 3.1416; public static double seno(double arg) {

return ... }

} Uso:

public class test{

(6)

Métodos Finalize

„ Opcionalmente puede incluirse un método finalize() que

es ejecutado de forma automática en caso de existir, inmediatamente antes de destruir una instancia de la clase. En ocasiones puede ser útil, p.e. para anular objetos y facilitar la labor al recolector de basura de Java. Forma

[modificadores] void finalize () { <sentencias>

}

Ejemplo

protected void finalize() { origen = null; }

Objetos – Creación

„

Tres pasos: Declarar, instanciar e

inicializar

Rectangulo rect = new Rectangulo(100,100); „

o también en dos partes:

Rectangulo rect;

rect = new Rectangulo(100,100);

Objetos – Inicialización

„Inicialización de objetos con constructores „Utilidad de asignar un valor inicial a las

propiedades del objeto.

„Un constructor tiene el nombre de la

clase y es ejecutado después de crear el objeto con new

„El constructor tiene como parámetros los

valores que sirven para inicializar el objeto

Objetos – Inicialización

Distintas formas de inicialización con

Distintos constructores

Rectangulo r1 = new Rectangulo(punto); Rectangulo r2 = new Rectangulo(14, 28); Rectangulo r3 = new Rectangulo(punto, 15, 25); Rectangulo r4 = new Rectangulo() Æ Constructor

por defecto

Objetos – Uso

„El comportamiento de un objeto es

expresado a través de sus métodos. Estos deben soportar todas las posibles

interacciones de ese objeto con el resto de objetos Ejecución de un método Forma idRefObjeto.idMétodo(parámetros); Ejemplos rect.mover(45,56);

Objetos – Uso

„Acceso directo a los atributos del objeto

Forma

idRefObjeto.idVarObjeto

Ejemplos

rect.alto = 16;

anchoRectangulo = rect.ancho;

„Recomendable: Usar métodos para

acceso y modificación

rect.setAlto(16);

(7)

Objetos – Destrucción

„

En Java con Eliminador automático

de objetos no utilizados

"Recolector de basura" (garbage collector)

„

Sistema que durante la ejecución del

programa recorre periódicamente la

memoria buscando y eliminando los

objetos sin ninguna referencia válida

Asociación

Bus Conductor

1 1

„ Si la relación tiene navegabilidad, se coloca una

referencia a la clase conocida en la clase conocedora, esta referencia se hace en la sección de atributos de la clase

„ Si la relación es bidireccional (ambas se

conocen) entonces se coloca un atributo en cada clase que haga referencia a la otra clase

„ En el siguiente ejemplo el bus conoce su

conductor.

Asociación Unidireccional

class Bus {

protected Driver driver = null;

public void assignDriver(Driver newDriver) {

driver = newDriver; }

public Driver getDriver() { return driver;

}

public boolean isDriverAssigned() { return driver == null;

} }

Asociación Unidireccional

„Ejemplo 1 - Agregación

Driver bob = new Driver(); Bus bigBus = new Bus(); bigBus.assignDriver(Bob);

„Ejemplo 2 - Composición

Driver bob = new Driver(); Bus bigBus = new Bus(bob);

Asociación Bidireccional

class Driver {

protected Bus bus;

public void assignBus(Bus newBus) {

bus = newBus; }

}

„ Ejemplo

Driver bob = new Driver(); Bus bigBus = new Bus(); bob.assignBus(bigBus); bigBus.assignDriver(Bob);

Asociación con Cardinalidad

Bus Conductor

„Si la cardinalidad (multiplicidad) de la

relación es mayor que 1 se usa una colección para guardar las referencias

„En el ejemplo un bus puede tener muchos

(8)

Asociación

class Bus {

protected Driver driverList[] = new Driver[2]; protected int driverCount = 0;

public void assignDriver(Driver newDriver) { if (driverCount < 2) {

driverList[driverCount] = newDriver; driverCount++;

} }

public int getDriverCount() { return driverCount;

} }

Agregación/Composición

„ Se colocan referencias en el todo de las partes

que lo componen, si hay relaciones muchos se usa una colección

„ En el siguiente ejemplo el libro está compuesto

de páginas y cubiertas

Agregación/Composición

class Pagina {…}

class Cubierta {…} class Libro {

private Cubierta cubiertaPosterior; private Cubierta cubiertaAnterior; private Pagina[] paginas;

Libro( int numPages) {

this. cubiertaPosterior = new Cubierta(); this. cubiertaAnterior = new Cubierta(); this.paginas = new Pagina[numPages]; } }

Herencia

0..* 1 Cliente -Ingresos:float +Cliente +ToString:String Persona -Apellido:String +Persona +ToString:String nombre:String Empleado -Sueldo:float +Empleado Prestamo -FechaPrestamo:Date +Prestamo +main:void

Herencia

Forma

[modificadores] class idSubClase extends idSuperClase {

<Sentencias> }

Ejemplo

//La subclase Rectangulo "extiende" la superclase Figura

public class Rectangulo extends Figura

{

private int alto, ancho;

... }

Herencia – Forma Básica

/* Generated by Together */

public class Empleado extends Persona { public Empleado( String n, String a, float s)

{

super (n, a);

this.Sueldo = s; }

private float Sueldo;

(9)

Herencia – Reglas

„ Se heredan todos los miembros (atributos y

métodos), aunque sólo son accesibles los declarados public o protected, en caso de no tener calificador de acceso es posible el acceso si la subclase esta declarada en el mismo directorio

„ No se hereda un miembro de la superclase si la

subclase declara un miembro idéntico (sobrescritura)

„ Los miembros declarados private se heredan

aunque sin posibilidad de acceso

„ Las clases con el modificador final no pueden ser

heredadas

Herencia – Acceso

„ Private: No hay posibilidad de acceso directo por

lo que se eliminan los efectos laterales y dependencias entre clases. Por el contrario, exige añadir métodos para el acceso indirecto.

„ Protected: Permite el acceso directo sólo a las

subclases, esto es útil a veces, aunque añade dependencias en la jerarquía de clases.

„ Public: Facilita el acceso directo de todas las

clases, lo que por norma es peligroso.

„ Sin modificador: Público en el mismo directorio y

privado entre distintos directorios.

Como norma general el acceso debe ser privado

Herencia – Sobreescritura

„Una subclase puede redefinir un método

de la superclase a efectos de especializarse

„Método sobrescrito

„sustituye al método heredado

• nombre, parámetro y tipo devuelto „Métodos private , static ó final

„no pueden sobrescribirse

„Métodos abstract

„obligatoriamente sobrescritos

Herencia – Sobreescritura

public class Cliente extends Persona {

public Cliente( String n, String a, float i) { super (n, a);

this.Ingresos = i; }

// Sobreescritura – ToString Herado de Clase Object

public String ToString() {

return ""+ this.Ingresos; }

private float Ingresos;

}

Herencia – Llamado de

métodos

„ En la misma clase o subclases (acceso

protected)

Forma

idMétodo(parámetros);

Ejemplo

mover(x,y);

„ En la misma clase (métodos sobrescritos de

superclases)

Forma

super.idMétodo(parámetros);

Ejemplo

super.mover(x,y);

Esto supone que existe un método mover en la clase

Herencia – Llamado de

métodos

„Fuera de la clase (acceso public)

Formas idRefObj.idMétodo(parámetros); expresión.idMétodo(parámetros); Ejemplos rect.mover(x,y) listaRect[indRec].mover(x,y);

„Fuera de la clase (métodos static)

Forma

idClase.idMétodo(parámetros);

Ejemplo

(10)

Herencia – Constructores

„

Al crear un objeto los constructores

se ejecutan en orden de derivación,

desde la superclase a la subclase

„

En cada superclase se ejecuta el

constructor por defecto salvo que se

indique uno concreto con la palabra

clave super

Herencia – Constructores

abstract class Figura { protected Punto origen; Figura (Punto origen) {

this.origen = origen; }

}

public class Rectangulo extends Figura { private int alto, ancho;

...

public Rectangulo(Punto punto) { super (punto); alto = 0; ancho = 0; }

... }

/* Generated by Together */

public class Empleado extends Persona { public Empleado (String n, String a, float s) {

super (n, a);

this.Sueldo = s; }

private float Sueldo;

}

Herencia – Constructores

Observe la llamada que se Hace al constructor de la superclase

import java.util.Date; public class Prestamo {

public Prestamo (String n, String a, int tipo) { //tipo 1 empleado 2 cliente

if (tipo==1){

lnkPersona = new Empleado(n, a, 5000); }

if (tipo==2){

lnkPersona = new Cliente(n,a, 100000); }

}

public static void main( String[] args){ Prestamo p = new Prestamo("julio","carreño",2); System.out.println(p.lnkPersona.ToString()); }

private Persona lnkPersona; private Date FechaPrestamo; }

Herencia y Polimorfismo

(Implementación)

Observe que lnkPersona es de tipo Persona

Referencias

Documento similar

A través da presentación e ulterior desenvolvemento de tales criterios chégase a romper con visións reducionistas, monolíticas e erróneas presentes sobre todo nas

Como se ha indicado anteriormente, en un diagrama de clase aparecen clases relacionadas entre sí, de esta forma, las clases y las principales relaciones

Instrucciones: Por medio de la formula molecular, clasifica los isómeros, escribe el nombre de la clase de isomería que le corresponda a cada uno de los siguientes

Each CALIFA galaxy is targeted twice with di fferent spec- tral settings, a low-resolution (V500) setup covering the nom- inal wavelength range 3745–7500 Å at spectral resolution of R

Individual circadian preference, shift work, and risk of medication errors: a cross-sectional web survey among Italian midwives. Int J Environ Res Public

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

para establecer un sistema de organización territorial que garantizase la existencia de autonomías regionales que con fórmulas distintas casi todos los partidos habían prometido