Publicado el 21 de Noviembre del 2019
1.229 visualizaciones desde el 21 de Noviembre del 2019
267,4 KB
77 paginas
Creado hace 15a (28/01/2010)
Cap. 10. Subtipos y Herencias.
Capítulo 10. Subtipos y Herencia.
Lenguajes de Programación
Carlos Ureña Almagro
Dpt. Lenguajes y Sistemas Informáticos
ETSI Informática y de Telecomunicación
Universidad de Granada
Curso 2009-10
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 1/1.
Cap. 10. Subtipos y Herencias.
Índice del capítulo
Capítulo 10. Subtipos y Herencia.
1. Subtipos
2. Herencia
3. Herencia y Restricciones de acceso
4. Redefinición de métodos y polimorfismo
5. Herencia múltiple
6. Clases abstractas e interfaces
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 2/1.
Cap. 10. Subtipos y Herencias.
Subtipos
Indice de la sección
Sección 1
Subtipos
1.1. Subtipos en Ada
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 3/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos
Dados dos tipos A y B, se dirá que el tipo B es un subtipo de A
(o, equivalentemente, que A es el supertipo de B) si:
El conjunto de valores o estados de B está incluido en el de A
(considerados como conjuntos, se cumple A ⊆ B).
Todas las operaciones definidas para A también lo están para
B
Lo contrario no es necesariamente cierto: el tipo B puede
tener definidas operaciones adicionales, no definidas para A.
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 4/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Beneficios de los subtipos
Los mecanismos de subtipos sirven para definir un tipos nuevos
usando otros tipos existentes como base, pero añadiendo nuevas
propiedades u operaciones adicionales.
El mecanismo de subtipos facilita:
La legibilidad del código: permite asignar nombres descriptivos
a tipos, y especificar las propiedades en la declaración
La fiabilidad: permite insertar comprobaciones en tiempo de
ejecución para comprobar que se cumplen las propiedades
establecidas
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 5/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos
Supongamos que B es un subtipo de A
Si existe una operación f definida para A, entonces decimos
que B hereda esa operación f
Todo valor de tipo B puede ser reinterpretado como un valor
de tipo A, luego existe una conversión implícita desde B hacia
A, usable en asignaciones de la forma a := b donde a es un
acceso a una variable de tipo A y b una expresión de tipo B
La asignaciones contrarias (b := a) necesitan una
comprobación en tiempo de ejecución, o estan prohibidas, o
suponen perdida de información.
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 6/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en diferentes lenguajes
Diferentes lenguajes incorporan, explícita o implicitamente,
mecanismos basados en el concepto de subtipos.
En Pascal existen algunas construcciones
En ADA se desarrolla bastante
Apenas está presente en C, C++, Java y C# (en estos
lenguajes se puede usar herencia)
Adicionalmente, podemos interpretar la herencia como un
mecanismo basado en el concepto de subtipo
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 7/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Pascal
1
2
3
En Pascal, se pueden definir subtipos para los enteros:
type Byte
= 0 . . 2 5 5 ;
DiaSemana = 1 . . 1 7 ;
NumMes
= 1 . . 1 2 ;
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 8/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Mecanismos
En ADA se desarrollan bastante los mecanismos para subtipos. En
concreto se pueden definir subtipos de:
Tipos primitivos (definiendo un sub-rango de valores)
Arrays dinámicos (fijando el rango de los índices)
Tipos registro con un campo discriminante (fijando el valor
del campo discriminante)
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 9/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Subtipos de tipos primitivos en Ada
En el caso de tipos primitivos, la sintaxis está inspirada en Pascal:
subtype id-subtipo is id-tipo range e1 .. e2 ;
Aquí, e1 y e2 son dos valores (dos constante) de tipo id-tipo La
construcción es una declaración que crea un tipo nuevo, de nombre
id-subtipo.
Esta declaración genera conversiones implícitas entre el tipo
original y los subtipos.
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 10/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Ejemplos de subtipos en ADA
Subtipos de enteros:
subtype N a t u r a l e s
subtype NumeroMes
subtype B y t e S i g i s
Subtipos de flotantes
1
2
3
1
1
i s
i s
I n t e g e r
I n t e g e r
range 0 . . I n t e g e r ’ l a s t
range 1 . . 1 2 ;
I n t e g e r
range −127..127 ;
;
subtype P r o b a b i l i d a d i s
I n t e g e r
range 0 . 0 . . 1 . 0 ;
Subtipos de caracteres
subtype M i n u s c u l a s
i s C h a r a c t e r
range ’ a ’ . . ’ z ’
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 11/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Ejemplo de conversiones
1 Procedure PruSub0 i s
2
s u b t y p e N a t u r a l e s
i n t
4
5 n a t
:
: N a t u r a l e s
I n t e g e r
i s
:= 2 ;
:= 1 ;
I n t e g e r
r a n g e 0 . . I n t e g e r ’ l a s t
3
6
7
8
9
10
11
12
13
14
15
b e g i n
i n t
n a t
i n t
n a t
−− ( t r a d u c t o r p o d r i a e m i t i r a d v e r t e n c i a )
n a t
; −− ok ,
:= n a t
; −− ok ,
:= i n t
:= −2 ; −− ok
; −− l a n z a CONSTRAINT ERROR en e j e c .
:= i n t
; −− l a n z a CONSTRAINT ERROR en e j e c .
:= −2
s i n c o m p r o b a c i ó n
s i e m p r e ,
t r a s c o m p r o b a c i ó n en t . e .
−− t r a d u c t o r e m i t e a d v e r t e n c i a
end ;
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 12/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Subtipos de arrays en Ada
Otra posibilidad son los subtipos de arrays dinámicos
1
2
3
4
5
6
type Cadena i s a r r a y ( I n t e g e r
range <>)
o f C h a r a c t e r
;
subtype Cadena10 i s Cadena ( 1 . . 1 0 ) ;
subtype Cadena50 i s Cadena ( 1 . . 5 0 ) ;
subtype CadC10
i s Cadena ( 0 . . 1 0 ) ;
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 13/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Subtipos de arrays en Ada
Los valores de índice al acceder a un array se comprueban en
tiempo de ejecución
Los límites concretos de los rangos de índices de los subtipos
array pueden ser expresiones arbitrarias (evaluables en tiempo
de ejecución), no necesariamente constantes.
Lo anterior es posible porque en ADA el rango de índices de
un array se incluye en su representación.
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 14/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Ejemplo de uso de subtipos de arrays en Ada
1 Procedure PruSub i s
2
3
4
5
6
7
8
9
10
11
type A r r a y D i n i s
a r r a y (
I n t e g e r
range <> ) o f
I n t e g e r
;
Procedure T e s t ( n :
i s
subtype A r r a y n i s A r r a y D i n ( 1 . . n )
a : A r r a y n ; −− tamaño dep . de
begin
;
’ n ’
I n t e g e r
)
a ( n ) := 0 ;
end ;
12
13 begin
14
15 end ;
T e s t ( 1 0 ) ; T e s t ( 1 0 0 ) ;
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 15/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Subtipos de arrays en Ada
Las referencias al tipo son compatibles con las de los subtipos:
1
2
3
4
5
6
. . .
type PCadena i s a c c e s s Cadena ;
s 0 : PCadena ;
s 1 : PCadena := new Cadena10 ;
s 2 : PCadena := new Cadena50 ;
7
8 begin
9
10
s 0 := s 1 ;
s 1 := s 2 ;
s 2 := s 0 ;
11
12 end ;
s 1 ( 4 9 ) := ’ a ’
s 1 ( 4 9 ) := ’ a ’
; −− e r r o r en t . e .
; −− ok
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 16/77.
Cap. 10. Subtipos y Herencias.
Subtipos
Subtipos en Ada
Subtipos de registros en ADA
(falta)
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 17/77.
Cap. 10. Subtipos y Herencias.
Herencia
Indice de la sección
Sección 2
Herencia
2.1. Herencia en ADA
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 18/77.
Cap. 10. Subtipos y Herencias.
Herencia
Herencia
La herencia es un mecanismo asociado a las clases, presente
en lenguajes orientados a objetos
La herencia permite que una clase sea una subtipo (subclase,
o clase derivada) de otra clase (su superclase, o clase base)
La subclase tiene las mismas variables de instancia y los
mismos métodos que su superclase.
La subclase puede añadir variables de instancia y métodos
adicionales (se dice que extiende a la clase base).
En la subclase se pueden redefinir métodos de la superclase
(en algunos lenguajes se pueden incluso eliminar métodos de
la base, no es común).
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 19/77.
Cap. 10. Subtipos y Herencias.
Herencia
Beneficios de la herencia
Permite reusar el código de la clase base, adaptándolo mediante
subclases, y evitando duplicidades, por tanto:
Permite reusabilidad
Facilita el trabajo en equipo y la creación de librerías
Permitir simplificar los programas
Facilita el análisis y diseño
Autor: Carlos Ureña. Fecha creación: January 28, 2010. Página: 20/77.
Cap. 10. Subtipos y Herencias.
Herencia
Representación de clases derivadas
La representación de la clase derivada se hace concatenando tres
partes:
Un parte inicial con información de tipos en tiempo de
ejecución
Un bloque de memoria con la representación de las variables
de instancia específicas de la clase base.
Un bloque de m
Comentarios de: Capítulo 10. Subtipos y Herencia - Lenguajes de Programación (0)
No hay comentarios