UD10 - Concepto de Tipo y Subtipo. Diseño e Implementación

Anuncio
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
Descargar