Unidad Didáctica 10 - Departamento de Lenguajes y ...
Transcript of Unidad Didáctica 10 - Departamento de Lenguajes y ...
Concepto de Tipo y Subtipo
Diseño e Implementación
Fundamentos de Programación
Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 10
Versión 1.0.0
UD10: Concepto de Tipo y Subtipo. Diseño e Implementación
Í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
int, double, float, char…
Tipos de la API de Java
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
B
A
BImpl
AImpl
C CImpl
UD10: Concepto de Tipo y Subtipo. Diseño e Implementación
1.3 Subtipos por Herencia
Clausula: extends
Sintaxis:
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.
public interface A extends B1, B2,…{…}
public class CImpl extends DImpl{…}
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
PuntoMetricoPunto
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?
Solo se permite la herencia simple
PixelImpl
PuntoImpl
AlumnoImpl
PersonaImpl
Object
UD10: Concepto de Tipo y Subtipo. Diseño e Implementación
1.4 Subtipos por Implementación
Clausula: implements
Sintaxis:
Semántica:
La clase AImpl proporciona el “cómo” es la interfaz A
public class AImpl implements 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:
Instanciación de tipo asociado a clase:
Todos los tipos subtipan al tipo Object
A obj = new AImpl(…);
ClaseC obj = new ClaseC(…);
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;
D obj3 = new Dimpl();
obj2 = (E) obj3;
DImpl
BImpl
EImpl
CImpl
AImpl
B
D
C
E
A
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;
D obj3 = new Dimpl();
obj2 = (E) obj3;
DImpl
BImpl
EImpl
CImpl
AImpl
B
D
C
E
A
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
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
Población de un tipo
Conjunto de los posibles individuos del tipo
Pueden existir propiedades compartidas por todos ellos
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:
edadMedia
María
(Alumno)
Gómez Lope
77456321S
fechaNacimi
2009
2
notas
23
12
(Fecha)
1990
7.35.0
(List)
…
Juan
(Alumno)
Lara Ruiz
26598551L
fechaNacimi
2007
4
notas
2
6
(Fecha)
1985
5.15.4
(List)
…
Alfredo
(Alumno)
Martín Casas
24771256O
fechaNacimi
2010
1
notas
14
9
(Fecha)
1991
(List)
edadMedia
21.3333
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
implements
Alumno
Comparable<Alumno>
Copiable<Alumno>
Persona
PersonaImpl
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
AlumnoImpl
PersonaImpl
Object
Persona
Alumno
Comparable<Persona>
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
}
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)
Acceso mediante el nombre de la clase
Implementación en la interfaz (si la hay) y en la clase (no son static)
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
}
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;
}
…
}