PDF de programación - Capítulo 10. Subtipos y Herencia - Lenguajes de Programación

Imágen de pdf Capítulo 10. Subtipos y Herencia - Lenguajes de Programación

Capítulo 10. Subtipos y Herencia - Lenguajes de Programacióngráfica de visualizaciones

Publicado el 21 de Noviembre del 2019
1.078 visualizaciones desde el 21 de Noviembre del 2019
267,4 KB
77 paginas
Creado hace 14a (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
  • Links de descarga
http://lwp-l.com/pdf16945

Comentarios de: Capítulo 10. Subtipos y Herencia - Lenguajes de Programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad