Relaciones entre clases 1 Humberto Cervantes Maceda Alfonso Martínez Martínez Abril 2005
Relaciones entre clases Dependencia Generalización Asociación Realización 2
Relaciones entre clases Dependencia: es una relación de uso en donde los cambios en la especificación de una clase, pueden afectar a otra clase que la usa Dependencia Ventana # tamaño: integer + configurar() + abrir() + cerrar() + mover() + mostrar() + manejarevento() Evento 3
Relación de dependencia De la práctica No. 1: 4
Relación de dependencia De la práctica No. 1: package mx.uam.cursojava.practica1; public class Principal public static void main(string [] argc) Principal p = new Principal(); p.realizapruebaordenado(10000); /* Relación de dependencia de la class principal hacia Arreglo y Cronometro */ public void realizapruebaordenado(int elems) Arreglo a= new Arreglo(elems); Cronometro cron=new Cronometro(); 5 cron.arrancar(); a.ordenaburbuja(); cron.detener() cron.mostrartiempo(); // los objetos a y cron // existen solo durante // la ejecución de: // p.realizapruebaordenado(10000)
Relaciones entre clases Generalización: Es una relación entre una clase general (superclase) y otra específica (subclase): Generalización/Especialización Ventana # tamaño: integer Generalización (herencia) + configurar() + abrir() + cerrar() + mover() + mostrar() + manejarevento() 6 Consola CajaDialogo
Relación de generalización Herencia simple: una subclase tiene exactamente un padre Herencia múltiple: una subclase hereda de varios padres, sin traslape de estructura o comportamiento Semánticamente la relación se puede verificar comprobando si la subclase es un tipo de su padre 7
Polimorfismo por inclusión [Cardelli & Wegner] Es un tipo de polimorfismo universal en donde el comportamiento declarado o implementado en una tipo general (superclase), es incluido en tipos específicos (subclases) 8
Generalización Control de acceso Los miembros declarados como protected, public o package son accesibles en las subclases. Sin embargo, los atributos no pueden declararse como public o package (encapsulamiento) Los métodos declarados como final no pueden redefinirse en las subclases Los métodos declarados como abstract, son implementados en las subclases 9 abstract public class Elemento abstract public int compara(elemento elem) throws ArregloException; // este método se implementará en las // las subclases de esta clase
Clases Abstractas Son clases de las cuales no se obtienen objetos: Semánticamente, son muy generales y la obtención de objetos no tiene sentido, por ejemplo un objeto de la clase persona Es mas significativo obtener objetos de sus subclases, por ejemplo persona heredando a alumno Sintácticamente, el compilador de java lo impide 10
Clases Abstractas Son clases que definen solo parte de su implementación, dejando a las subclases (extensiones) la tarea de implementaciones específicas de algún método o de todos En la práctica 2, el metodo compara() de la class elemento es declarado como abstract y es implementado en class Alumno y en class Libro 11
Clase Abstracta y Generalización De la Práctica No. 2 Elemento es una clase abstracta, el metodo compara( ) se implementa en las clase Libro y Alumno en donde la comparación entre elementos es diferente 12
Clase Abstracta y Generalización De la Práctica No. 2 import mx.uam.cursojava.practica2.arregloexception; import mx.uam.cursojava.practica2.elemento; public class Libro extends Elemento // Relación de generalización // hereda de elemento private String m_titulo; private String m_autor; private int m_isbn; public Libro(String titulo, String autor, int isbn) 13 public int compara(elemento elem) throws ArregloException // La comparación se realiza entre dos elementos de tipo // Libro
Relaciones entre clases Asociación: es una relación estructural que expresa la conexión reciproca entre objetos de de 2 clases distintas 14
Relación de asociación: Agregación simple Relación todo/partes en donde una clase representa el todo y otra una de sus partes Se realiza declarando referencias dentro de los atributos (rombo vacío en UML) Todo Organización 1 Parte * Departamento Agregación 15
Agregación simple De la práctica No. 1 Arreglo 1 * int Class Arreglo int m_arreglo[]; int m_tamanio; public Arreglo(int tamanio) m_tamanio=tamanio; m_arreglo=new int[m_tamanio] // Agregación simple public agregarelemento()... m_arreglo... 16 null
Relación de asociación: Composición es una forma de agregación, con fuerte pertenencia y tiempo de vida coincidente como parte del todo. Todo Window 1 Parte Composición * Frame 17
Composición De la práctica No.2 public class Principal private Teclado teclado = new Teclado(); // Ejemplo de //relación de composición public static void main(string [] argc) Principal p = new Principal(); 18 // Aquí se cachan excepciones que pueda generar el menu. try p.pruebaconmenu(); Principal 1 catch(exception ex) ex.printstacktrace(); 1 Teclado