Unidad Didáctica 10 - Departamento de Lenguajes y ...

27
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

Transcript of Unidad Didáctica 10 - Departamento de Lenguajes y ...

Page 1: 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

Page 2: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Índice

1. Concepto de Tipo y Subtipo

2. Diseño e Implementación

Page 3: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 4: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 5: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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 …

Page 6: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 7: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 8: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 9: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 10: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 11: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 12: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 13: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 14: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 15: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 16: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 17: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 18: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 19: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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)

Page 20: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 21: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 22: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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>

Page 23: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 24: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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)

Page 25: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

}

Page 26: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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

Page 27: Unidad Didáctica 10 - Departamento de Lenguajes y ...

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;

}

}