Objetos (II): Herencia

Portada Ejemplo El objetivo La forma Curso de programación en C moderno (II Edición) Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores Neira Ayuso, Pablo Falgueras García, Carlos Tema 12 Objetos (II): Herencia Índice Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores 1 Ejemplo de herencia 2 El objetivo 3 La forma 4 Herencia Estructura de ficheros Encapsulación 5 Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores Ejemplo de herencia Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores El objetivo Portada 1 2 3 4 Ejemplo 5 6 El objetivo 7 La forma 8 9 Herencia 10 Estructura de 11 ficheros 12 Encapsulación 13 Polimorfismo 14 15 Punteros a funciones 16 Métodos Constructor vehicle Constructor car Destructores #i n c l u d e " v e h i c l e . h " #i n c l u d e " c a r . h " i n t main ( ) { s t r u c t v e h i c l e ∗v ; s t r u c t v e h i c l e ∗c ; v = v e h i c l e _ a l l o c ( " 1234 ABC" ) ; c = ( s t r u c t v e h i c l e ∗ ) c a r _ a l l o c ( " 4321 CBA" , " p i c k u p " ) ; vehicle_print (v) ; vehicle_print (c) ; }; return 0; > ./ vehicles Vehicle { p l a t e = " 1234 ABC" } Car { p l a t e = " 4321 CBA" type = " pickup " } La forma Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores • Encapsular la estructura del objeto padre en la del objeto hijo para implementar la herencia • Utilizar punteros a funciones para implementar el polimorfismo: Un puntero guardará una función u otra en función del tipo de objeto Herencia Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores HERENCIA Estructura de ficheros Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores Encapsulación Portada vehicle_int.h 1 2 3 Ejemplo 4 5 El objetivo 6 La forma 7 8 Herencia 9 Estructura de 10 ficheros 11 Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores #i n c l u d e < s t d i n t . h> struct vehicle { char ∗ plate ; uint32_t f l a g s ; }; enum v e h i c l e _ a t t r { VEHICLE_PLATE , }; car.c 1 2 3 4 5 6 7 8 9 10 11 #i n c l u d e " v e h i c l e _ i n t . h " struct car { s t r u c t v e h i c l e s u p e r ; /∗ S i e m p r e char ∗ type ; uint32_t f l a g s ; }; enum c a r _ a t t r { CAR_TYPE, }; el p r i m e r o ∗/ Encapsulación Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores struct vehicle *v = (struct vehicle *)car_alloc(...); Polimorfismo Portada Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores POLIMORFISMO Punteros a funciones Portada 1 2 3 Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores 4 5 6 7 8 #i f n d e f _VEHICLE_INT_ #d e f i n e _VEHICLE_INT_ #i n c l u d e < s t d i n t . h> struct vehicle { char ∗ plate ; 9 v o i d (∗ s e t _ p l a t e ) ( s t r u c t v e h i c l e ∗ , const char ∗) ; const char ∗(∗ get_plate ) ( const s t r u c t v e h i c l e ∗) ; v o i d (∗ p r i n t ) ( const s t r u c t v e h i c l e ∗) ; 10 11 12 13 14 15 16 17 18 19 20 21 }; uint32_t f l a g s ; enum v e h i c l e _ a t t r { VEHICLE_PLATE , }; #e n d i f Métodos Portada 1 Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores 2 3 s t a t i c void default_print ( const struct { p r i n t f ( " V e h i c l e {" ) ; 4 i f (ATTR_IS_SET( v−>f l a g s , VEHICLE_PLATE ) ) p r i n t f ( " \n\ t p l a t e = \"% s \" " , v−>p l a t e ) ; 5 6 7 8 9 10 11 12 13 14

3 downloads 141 Views 572KB Size

Recommend Stories


Programación Orientada a Objetos. Sesión 4: Herencia
Programación Orientada a Objetos Sesión 4: Herencia Contextualización Cuando hablamos de informática, podemos contemplar varios elementos que se uti

Semana 7 Biomoléculas II. Herencia Semana 7
Biomoléculas II. Herencia Biomoléculas II. Herencia Semana 7 Semana 7 En la tercera semana de este semestre estudiamos algunas biomoléculas de rel

Tema: Clases y Objetos en C++. Parte II
Programación II. Guía 4 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C++. Parte II. Objetivos

Story Transcript

Portada

Ejemplo El objetivo La forma

Curso de programación en C moderno (II Edición)

Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

Neira Ayuso, Pablo

Falgueras García, Carlos

Tema 12

Objetos (II): Herencia

Índice Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

1 Ejemplo de herencia 2 El objetivo 3 La forma 4 Herencia

Estructura de ficheros Encapsulación 5 Polimorfismo

Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

Ejemplo de herencia Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

El objetivo Portada 1 2 3 4 Ejemplo 5 6 El objetivo 7 La forma 8 9 Herencia 10 Estructura de 11 ficheros 12 Encapsulación 13 Polimorfismo 14 15 Punteros a funciones 16 Métodos Constructor vehicle Constructor car Destructores

#i n c l u d e " v e h i c l e . h " #i n c l u d e " c a r . h " i n t main ( ) { s t r u c t v e h i c l e ∗v ; s t r u c t v e h i c l e ∗c ; v = v e h i c l e _ a l l o c ( " 1234 ABC" ) ; c = ( s t r u c t v e h i c l e ∗ ) c a r _ a l l o c ( " 4321 CBA" , " p i c k u p " ) ; vehicle_print (v) ; vehicle_print (c) ; };

return

0;

> ./ vehicles Vehicle { p l a t e = " 1234 ABC" } Car { p l a t e = " 4321 CBA" type = " pickup " }

La forma Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

• Encapsular la estructura del objeto padre en la del objeto

hijo para implementar la herencia • Utilizar punteros a funciones para implementar el

polimorfismo: Un puntero guardará una función u otra en función del tipo de objeto

Herencia Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

HERENCIA

Estructura de ficheros Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

Encapsulación Portada

vehicle_int.h

1 2 3 Ejemplo 4 5 El objetivo 6 La forma 7 8 Herencia 9 Estructura de 10 ficheros 11 Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

#i n c l u d e < s t d i n t . h> struct vehicle { char ∗ plate ; uint32_t f l a g s ; }; enum v e h i c l e _ a t t r { VEHICLE_PLATE , };

car.c 1 2 3 4 5 6 7 8 9 10 11

#i n c l u d e " v e h i c l e _ i n t . h " struct car { s t r u c t v e h i c l e s u p e r ; /∗ S i e m p r e char ∗ type ; uint32_t f l a g s ; }; enum c a r _ a t t r { CAR_TYPE, };

el

p r i m e r o ∗/

Encapsulación Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

struct vehicle *v = (struct vehicle *)car_alloc(...);

Polimorfismo Portada

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

POLIMORFISMO

Punteros a funciones Portada

1 2 3

Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

4 5 6 7 8

#i f n d e f _VEHICLE_INT_ #d e f i n e _VEHICLE_INT_ #i n c l u d e < s t d i n t . h> struct vehicle { char ∗ plate ;

9

v o i d (∗ s e t _ p l a t e ) ( s t r u c t v e h i c l e ∗ , const char ∗) ; const char ∗(∗ get_plate ) ( const s t r u c t v e h i c l e ∗) ; v o i d (∗ p r i n t ) ( const s t r u c t v e h i c l e ∗) ;

10 11 12 13 14 15 16 17 18 19 20 21

};

uint32_t f l a g s ;

enum v e h i c l e _ a t t r { VEHICLE_PLATE , }; #e n d i f

Métodos Portada 1 Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

2 3

s t a t i c void default_print ( const struct { p r i n t f ( " V e h i c l e {" ) ;

4

i f (ATTR_IS_SET( v−>f l a g s , VEHICLE_PLATE ) ) p r i n t f ( " \n\ t p l a t e = \"% s \" " , v−>p l a t e ) ;

5 6 7 8 9 10 11 12 13 14

v e h i c l e ∗v )

}

p r i n t f ( " \n }\ n" ) ;

void vehicle_print ( const struct { v−>p r i n t ( v ) ; }

v e h i c l e ∗v )

Nota: Para crear un método/clase abstract@ basta con no crear el/los método(s) por defecto

Constructor vehicle Portada

1 2 3

Ejemplo El objetivo

4 6 7

Herencia

8

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

9 10 11 12 13 14

}

v = ( s t r u c t v e h i c l e ∗) malloc ( s i z e o f ( s t r u c t i f (! v) r e t u r n NULL ;

16 17 18 19

vehicle_init (v , plate ) ;

20 21 23

default_set_plate (v , plate ) ;

s t r u c t v e h i c l e ∗ v e h i c l e _ a l l o c ( const char ∗ plate ) { s t r u c t v e h i c l e ∗v ;

15

22

v e h i c l e ∗v , c o n s t char ∗ p l a t e )

v−>s e t _ p l a t e = d e f a u l t _ s e t _ p l a t e ; v−>g e t _ p l a t e = d e f a u l t _ g e t _ p l a t e ; v−>p r i n t = d e f a u l t _ p r i n t ;

5

La forma Estructura de ficheros Encapsulación

void vehicle_init ( struct { v−>f l a g s = 0 ;

}

return v ;

vehicle )) ;

Constructor car Portada 1 Ejemplo El objetivo La forma Herencia Estructura de ficheros Encapsulación

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

2 3

s t r u c t car ∗ car_alloc ( const char ∗ plate , const char ∗ type ) { s t r u c t car ∗c ;

4

c = ( s t r u c t car ∗) malloc ( s i z e o f ( s t r u c t car ) ) ; i f (! c) r e t u r n NULL ;

5 6 7 8

v e h i c l e _ i n i t (&c−>s u p e r , p l a t e ) ;

9 10

c−>f l a g s = 0 ; c−>s u p e r . p r i n t = c a r _ p r i n t f ; car_set_type ( c , type ) ;

11 12 13 14 15 16

}

return c ;

Destructores Portada

vehicle Ejemplo El objetivo

1 2 3

La forma

4

Herencia

5

Estructura de ficheros Encapsulación

6 7

Polimorfismo Punteros a funciones Métodos Constructor vehicle Constructor car Destructores

void v e h i c l e _ f r e e ( s t r u c t v e h i c l e ∗v ) { i f (ATTR_IS_SET( v−>f l a g s , VEHICLE_PLATE ) ) f r e e ( v−>p l a t e ) ; }

free (v) ;

car 1 2 3 4 5 6

void car_free ( s t r u c t car ∗c ) { i f (ATTR_IS_SET( c−>f l a g s , CAR_TYPE) ) f r e e ( c−>t y p e ) ; v e h i c l e _ f r e e (&c−>s u p e r ) ; }

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.