Unidad Didáctica 10 Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Índice 1. Concepto de Tipo y Subtipo 2. Diseño e Implementación UD10: Concepto de Tipo y Subtipo. Diseño e Implementación Índice 1. Concepto de Tipo y Subtipo 1.1 Tipos y subtipos 1.2 Tipos definidos por el usuario 1.3 Subtipos por Herencia 1.4 Subtipos por Implementación 1.5 Grafo de tipos 2. Diseño e Implementación UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.1 Tipos y subtipos Tipos: Tipos definidos por el usuario: Tipo asociado a interfaz y clase Subtipado Tipo Object Grafo de diseño de tipo UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.1 Tipos y subtipos Tipos: Tipos primitivos o básicos Tipos de la API de Java int, double, float, char… String, Integer… Tipos definidos por el usuario Ejemplos: Punto, PuntoImpl, Persona, PersonaImpl Cada tipo ofrece: Los métodos que constituyen la parte pública Las propiedades de ser clonados, comparados … UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.2 Tipo definido por el usuario Tipo asociado: A interfaz A clase: Parte pública de la clase, es decir, la parte pública vista desde fuera Subtipos: Interfaces y clases hijas Clases que implementan a una interfaz A AImpl C B CImpl BImpl UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.3 Subtipos por Herencia Clausula: extends Sintaxis: public interface A extends B1, B2,…{…} public class CImpl extends DImpl{…} Semántica: La interfaz o clase hija se lee como “es un/una” interfaz o clase padre Ejemplo: Un pixel es un punto, un alumno es una persona, etc. UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.3 Herencia Herencia de interfaces (refinamiento) Todos los métodos declarados en la interfaz padre son heredados por la interfaz hija Restricciones: Se permite la herencia múltiple Punto PuntoMetrico Pixel UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.3 Herencia Herencia de clases Todos los métodos y atributos de la clase padre son: automáticamente heredados en la subclase accesibles para el código de la misma clase Restricciones: Solo los métodos/atributos public y protected son accesibles para la clase hija ¿protected solo es accesible desde clases hijas? Object Solo se permite la herencia simple PuntoImpl PersonaImpl PixelImpl AlumnoImpl UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.4 Subtipos por Implementación Clausula: implements Sintaxis: public class AImpl implements A {…} Semántica: La clase AImpl proporciona el “cómo” es la interfaz A Punto PuntoImpl UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.4 Implementación Instanciación de tipo asociado a interfaz: A obj = new AImpl(…); Instanciación de tipo asociado a clase: ClaseC obj = new ClaseC(…); Todos los tipos subtipan al tipo Object UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.5 Grafo de tipos Tipo ofrecido por un objeto (VISTAS DEL OBJETO): Tipo de la clase según ha sido instanciado Tipos superiores en la navegación del grafo de diseño de tipos Posibilidades: Conversión automática o implícita: Se produce si un objeto de tipo A es subtipo de B Ejemplo: parámetro de entrada en el método equals Conversión explícita: Mediante Casting UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.5 Grafo de tipos Ejemplos de casting: Analiza si es correcto este código: A obj1 = new EImpl(); E obj2; obj2 = (E) obj1; A D obj3 = new Dimpl(); obj2 = (E) obj3; AImpl B BImpl CImpl C D DImpl EImpl E UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 1.5 Grafo de tipos Ejemplos de casting: Analiza si es correcto este código: A obj1 = new EImpl(); E obj2; obj2 = (E) obj1; A D obj3 = new Dimpl(); obj2 = (E) obj3; AImpl B BImpl CImpl C D DImpl EImpl E UD10: Concepto de Tipo y Subtipo. Diseño e Implementación Índice 1. Subtipado 2. Diseño e Implementación 2.1 Definición del tipo 2.2 Relación con tipos existentes 2.3 Implementación como clase o interfaz y clase 2.4 Elección de atributos y métodos UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.1 Definición de un nuevo tipo Población de un tipo Conjunto de los posibles individuos del tipo Pueden existir propiedades compartidas por todos ellos Definición de propiedades Consultables / Modificables Básicas / Calculadas Describir las relaciones existentes entre las propiedades calculadas y las básicas Individuales / Compartidas Las propiedades compartidas son propiedades del tipo. Se definirán con la palabra static y solamente existirá una copia de ellas UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.1 Definición de propiedades - Ejemplo Tipo Alumno Decidir de entre las siguientes propiedades individuales cuáles serán consultables, modificables, básicas o calculadas. Indicar asimismo el tipo de cada una de ellas nombre, apellidos, dni, edad, fechaNacimiento, añoIngreso, cursoMasAlto, notas, notaMedia Propiedades compartidas edadMedia. Esta propiedad permitirá almacenar la edad media de todos los alumnos matriculados UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.1 Definición de propiedades - Ejemplo Propiedades compartidas: (Fecha) 23 12 1990 (List) 7.3 5.0 … edadMedia (Alumno) Juan 2 6 1985 Lara Ruiz 26598551L (List) 5.1 5.4 … (Alumno) María Gómez Lope (Fecha) fechaNacimi 2007 4 notas edadMedia 77456321S fechaNacimi 2009 2 notas 21.3333 (Fecha) 14 9 1991 (List) (Alumno) Alfredo Martín Casas 24771256O fechaNacimi 2010 1 notas UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.2 Relación con tipos existentes Decidir si el nuevo tipo que estamos diseñando es un subtipo de otro ya existente Relaciones tipo/subtipo Entre clases (extends) Entre interfaces (extends) Entre clase e interfaz (implements) UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.2 Relación con tipos existentes Pensar qué relaciones de subtipado podemos establecer para el nuevo tipo Alumno Persona Copiable<Alumno> implements Comparable<Alumno> PersonaImpl Alumno UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.3 Implementación del nuevo tipo No siempre la implementación de un tipo se corresponde con la creación de una interfaz y una clase Podemos elegir entre dos opciones de implementación: Interfaz + clase (una o varias) Organiza la programación Permite establecer relaciones entre clases Obliga a las clases que implementan la interfaz a utilizar los mismos métodos La interfaz se llamará como el nombre del tipo y a las distintas clases las denominaremos además con los sufijos Impl1, Impl2, etc. Solamente una clase El nombre de la clase será el nombre del tipo UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.3 Implementación de Alumno Interfaz Alumno y clase AlumnoImpl Comparable<Persona> Object Persona PersonaImpl Alumno AlumnoImpl UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.4 Atributos y métodos Atributos Los nombres de los atributos coinciden con los de las propiedades básicas Representación canónica: equivalencia entre objetos iguales Ejemplo: Racional Propiedades compartidas Se implementan como atributos static Inicialización. Solamente se inicializan una vez: cuando se crea el primer objeto Se pueden inicializar en su declaración O en los constructores teniendo en cuenta que no hayan sido ya creadas UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.4 Atributos y métodos Constructores Tienen el mismo nombre que la clase Deben inicializar todos los atributos individuales Se diferenciarán por el tipo y/o el número de parámetros de entrada Constructor por defecto (sin parámetros) El sistema solo lo crea si no se añade ningún otro constructor Aún así es conveniente incluirlo explícitamente (si se va a usar) UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.4 Atributos y Constructores en AlumnoImpl public class AlumnoImpl extends PersonaImpl implements Alumno{ private Integer añoIngreso; private Integer cursoMasAlto; private List<Double> notas; private static Double sumaEdades = 0.0; private static Integer numAlumnos= 0; public AlumnoImpl() { super(); añoIngreso = 0; cursoMasAlto = 0; notas = new ArrayList<Double>(); numAlumnos ++; } //otros constructores … } UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.4 Atributos y métodos Métodos Propios del tipo Consultores/Modificadores get/set + nombre de la propiedad Consultores/Modificadores de propiedades compartidas Implementación como métodos static (solamente en la clase) Implementación en la interfaz (si la hay) y en la clase (no son static) Acceso mediante el nombre de la clase Acceso mediante objetos Auxiliares privados Métodos de Object: equals,toString,hashCode Métodos de supertipos: implementaciones y/o redefiniciones UD10: Concepto de Tipo y Subtipo. Diseño e Implementación 2.4 Métodos en AlumnoImpl public class AlumnoImpl extends PersonaImpl implements Alumno{ … public Double getNotaMedia(){ return calculaMediaLista(notas); } //método privado auxiliar private static Double calculaMediaLista(List<Double> l){ … } //método consultor de una propiedad compartida public static Double getEdadMediaAlumnos(){ return sumaEdades/numAlumnos; } … } UD10: Concepto de Tipo y Subtipo. Diseño e Implementación