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

Curso de Arquitecturas de Software UML a Java „ „ Programación Orientada a Objetos UML a Java Paquetes Logica Logica ModelodelMundo Paquetes – E

1 downloads 54 Views 483KB Size

Recommend Stories


SOLUCIONES CLASES JAVA
SOLUCIONES CLASES JAVA 55- Teniendo en cuenta las diferencias entre un lenguaje y otro, se pide adaptar el programa creado en C# del ejercicio 50 al

Servicios de Paquetes
Servicios de Paquetes Servicios de paquetes Ethernet Los siguientes servicios de paquetes son ofrecidos por el SpeedTouch para la interfaz Ethernet.

Ejemplo UML. Terminal de Punto De Venta (TPDV) Diagrama de casos de uso Diagrama de clases
Ejemplo UML Terminal de Punto De Venta (TPDV) Diagrama de casos de uso Diagrama de clases José M. García - ESI 04/05 1 06 de marzo de 2005 Descrip

Modulo 11. Clases y Objetos en Java
El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, “Introduction to Programming 1”, no pretende en ningún mome

PAQUETES LATITUDE - ESTANDAR
PAQUETES LATITUDE - ESTANDAR Lista de Precios Febrero 2007 Características: * Gabinete de acero galvanizado resistente con protección anti-corrosión.

Procesamiento de datos: paquetes estadísticos
3 Procesamiento de datos: paquetes estadísticos Antonia Guillén Serra 3.1. Introducción En el presente capitulo nos centraremos fundamentalmente en

PAQUETES DE MINUTOS RPC
ANEXO 3 – PLANES RPC - ACUERDO PCS CONSUMER Nº _____________ El presente Anexo 3 al Acuerdo PCS que celebran de una parte AMÉRICA MÓVIL PERÚ S.A.C. (C

Story Transcript

Curso de Arquitecturas de Software

UML a Java „

„

Programación Orientada a Objetos UML a Java

Paquetes Logica

Logica ModelodelMundo

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

Pueden existir paquetes dentro De paquetes.

package Logica;

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

package Logica.ModelodelMundo;

Clases - Forma Básica [import [* ò];] [package ;] class { // Atributos // ...

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

Permite “reusar” clases de otros paquetes. Especifica que la clase va A pertenecer a este paquete.

Clases –Forma Avanzada[] class [extends ] [implements ] { // Atributos // ...

// Métodos

// Métodos

// ... } Nota : [ ] indican que son opcionales en la declaración

// ... }

1

Clases – Modificadores •Modificadores de clase:

Clases – Cláusulas „

•private: Clase privada (-) •Protected: Clase protegida (#) •abstract: Clase abstracta

Cláusula extends indicamos la clase de la que hereda

•public: Clase publica (+) „

Cláusula implements indicamos una lista de interfaces que implementa

•final: Clase final (no pueden crearse subclases de ella) Si no aparece ninguno la clase sólo es visible en el directorio.

Clases – Propiedades

Clases – Interfaces

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 /* 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; } }

Observe la representación UML de interface

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. Observe que los atributos si existen son final, estáticos.

2

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; ... }

Atributos – Forma Básica •Forma []

Atributos - Estáticos • Existe una sola copia y es compartida por todos los objetos de la clase. static [modificadores] idTipo idVar;

; •Modificadores de atributo

package Mundo; public class Rectangulo extends Figura { private int alto, ancho; ... }

Ejemplos

public, private, protected

static public int maxAlturaRectangulo;

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

static final double PI = 3.1416;

Ejemplos: private int alto; public int alto = 33;

Métodos – Forma Básica [] ( [] ) [throws ] { // Variables locales // Instrucciones o sentencias return (); }

final indica que el atributo no puede ser modificado.

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á implementado en otro archivo fuente y en otro lenguaje

3

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 () { }

Ejemplo

Rectangulo (int al, int an){ origen = new Punto(); this.alto = al; this.ancho = an; }

Métodos – Constructor

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; ... }

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

Métodos – Sobrecarga

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

4

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. „

Métodos Abstractos Ejemplo

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

Métodos Static

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) { }

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{ private double base = hipotenusa * Matematica.seno(alfa); private double longitud = 2 * Matematica.PI * radio; }

5

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 () { }

Objetos – Creación „

Tres pasos: Declarar, instanciar e inicializar

„

o también en dos partes:

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

Ejemplo

protected void finalize() { origen = null; }

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 Rectangulo r2 Rectangulo r3 Rectangulo r4 por defecto

= = = =

new new new new

Rectangulo(punto); Rectangulo(14, 28); Rectangulo(punto, 15, 25); Rectangulo() Æ Constructor

Objetos – Uso

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

„ Acceso directo a los atributos del objeto Forma

„

Forma idRefObjeto.idMétodo(parámetros);

Ejemplos

idRefObjeto.idVarObjeto

Ejemplos

rect.alto = 16; anchoRectangulo = rect.ancho;

„

Recomendable: Usar métodos para acceso y modificación rect.setAlto(16); anchoRectangulo = rect.getAncho();

rect.mover(45,56); rect.area(); anchoRectangulo = rect.elAncho();

6

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 „

„

„

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. Bus

Conductor 1

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 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);

1

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 con Cardinalidad „

„

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 conductores y el bus conoce sus conductores Bus

Conductor 1

1..*

7

Asociación

Agregación/Composició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

Herencia

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]; } }

„

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

Persona Prestamo

-Apellido:String +Persona +ToString:String

1

-FechaPrestamo:Date +Prestamo +main:void

nombre:String

Empleado

0..*

Cliente

-Sueldo:float

-Ingresos:float

+Empleado

+Cliente +ToString:String

Herencia

Herencia – Forma Básica

Forma

/* 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; }

[modificadores] class idSubClase extends idSuperClase { }

Ejemplo //La subclase Rectangulo "extiende" la superclase Figura public class Rectangulo extends Figura { private int alto, ancho; ... }

8

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

„

Métodos abstract

„

„

no pueden sobrescribirse

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; }

obligatoriamente sobrescritos

Herencia – Llamado de métodos „

Herencia – Sobreescritura

En la misma clase o subclases (acceso protected)

Herencia – Llamado de métodos „

Formas

Forma

idRefObj.idMétodo(parámetros); expresión.idMétodo(parámetros);

idMétodo(parámetros);

Ejemplos

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 actual y se desea llamar a mover de la superclase

Fuera de la clase (acceso public)

rect.mover(x,y) listaRect[indRec].mover(x,y);

„

Fuera de la clase (métodos static) Forma

idClase.idMétodo(parámetros);

Ejemplo

Math.seno(alfa);

9

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 /* Generated by Together */ public class Empleado extends Persona { public Empleado (String n, String a, float s) { super (n, a); Observe la llamada que se this.Sueldo = s; Hace al constructor de la } superclase private float Sueldo; }

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; } ... }

Herencia y Polimorfismo (Implementación) 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); } Observe que lnkPersona } es instanciado como Cliente public static void main( String[] args){ Prestamo p = new Prestamo("julio","carreño",2); o empleado. System.out.println(p.lnkPersona.ToString()); } Observe que lnkPersona private Persona lnkPersona; es de tipo Persona private Date FechaPrestamo; }

10

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.