Informática II

28
Informática II Clase 11: Herencia Avanzada 1 Diego Fernando Serna Restrepo Semestre 2011/2

description

Informática II. Clase 11: Herencia Avanzada. Diego Fernando Serna Restrepo. Semestre 2011/2. Chiste del Día. Contenido. Contención. 1. Delegación. 2. Herencia privada. 3. 4. Clases y funciones amigas. Contención. - PowerPoint PPT Presentation

Transcript of Informática II

Page 1: Informática II

Informática II

Clase 11: Herencia Avanzada

1Diego Fernando Serna Restrepo Semestre 2011/2

Page 2: Informática II

Informática II 2011/22

CHISTE DEL DÍA

Page 3: Informática II

3

CONTENIDO

Informática II 2011/2

Contención1

Delegación2

3

4

Herencia privada

Clases y funciones amigas

Page 4: Informática II

4

CONTENCIÓN

Informática II 2011/2

• Una clase o estructura en C++ es capaz de contener cualquier otro tipo de datos, inclusive otras clases o estructuras

class Empleado{Telefono numTel;Nombre Nombre;

}

class Telefono{int tel;

}

class Nombre{char *name;

}

Un objeto instanciado de una clase, es declarado como miembro de otra.

Page 5: Informática II

Informática II 2011/25

CONTENCIÓN EN C++

5

class Carro { public: Motor suMotor; Fabricante suMarca; Color suColor; Propietario suDuenio;}

class Motor { public: … private: …}

class Fabricante { public: … private: …}

class Propietario { public: … private: …}

Se dice que la clase contiene miembros de otras clases

class Color { public: … private: …}

Page 6: Informática II

Informática II 2011/26

1

Es posible acceder a estas clases miembro y a su vez a sus variables y

métodos miembro mediante los operadores (.) (->) según sea el caso.

2De este modo se puede

construir una nueva clase a partir de otra sin el uso

de herencia.

CONTENCIÓN

Page 7: Informática II

Informática II 2011/27

EL COSTO DE LA CONTENCIÓN

Copiando por valor

Cuando se pasan objetos de la clase por valor a una función esto provoca mayor número de llamadas al

constructor al crear copias de dicho objeto.

Es importante notar que el uso de la clase Empleado debe pagar el precio del llamado al constructor de las

clases Telefono, y Nombre y los respectivos espacios en memoria de sus variables miembro. Esto se hace evidente cada vez que se instancie un objeto tipo Empleado o cuando se haga una copia de este.

Page 8: Informática II

8

CONTENIDO

Informática II 2011/2

Contención1

Delegación2

3

4

Herencia privada

Clases y funciones amigas

Page 9: Informática II

Informática II 2011/29

DELEGACIÓN

La delegación

Método para otorgar funcionalidades a las clases, a partir de otras clases.

Se puede llevar a cabo

Al contener clases que le otorguen la funcionalidad

requerida

Heredar dichas funciones de otra clase base.

Page 10: Informática II

Informática II 2011/210

CONTENCIÓN HERENCIA

Page 11: Informática II

Informática II 2011/211

HERENCIA O CONTENCIÓN?

• Contenido. Un objeto declarado como miembro de otra clase, contenido por esa clase.

• Delegación. Uso de los atributos de una clase contenida para llevar a cabo funciones no disponibles para la clase que contiene.

• Implementar en terminos de. construcción de una clase utulizando las capacidades de otra sin usar la herencia pública.

Page 12: Informática II

Informática II 2011/212

HERENCIA O CONTENCIÓN?

Existe algún miembro de la clase base que no debería estar en la clase derivada?

R/= Si, entonces no hay lugar a usar herencia pública.

¿La clase que usted esta creando, debe usar varias clases del mismo tipo para realizar su trabajo?

R/= Si, entonces será necesario el uso de contención.

Page 13: Informática II

Informática II 2011/213

HERENCIA O CONTENCIÓN?

Será necesario heredar de una clase base para poder tomar ventaja de sus

métodos virtuales y miembros privados?

R/= Si, entonces tanto la herencia pública como la privada puede dar

solución a este escenario.

Page 14: Informática II

14

CONTENIDO

Informática II 2011/2

Contención1

Delegación2

3

4

Herencia privada

Clases y funciones amigas

Page 15: Informática II

Informática II 2011/215

HERENCIA PUBLICA

• Con este tipo de herencia se respetan los comportamientos originales de las visibilidades de la clase Base en la clase Derivada.

• class Derivada: public Base

Herencia pública:

Page 16: Informática II

Informática II 2011/216

HERENCIA PROTEGIDA

• Con este tipo de herencia, todo componente público y protegido de la clase Base, será protegido en la clase Derivada, y los componentes privados, siguen siendo privados.

• class Derivada: protected Base

Herencia protegida

Todas las funciones públicas en la clase base pasana ser protegidas en la clase derivada

Page 17: Informática II

Informática II 2011/217

HERENCIA PRIVADA

• Con este tipo de herencia todo componente de la clase Base, será privado en la clase Derivada (las propiedades heredadas serán privadas aunque estas sean públicas en la clase Base)

• class Derivada: private Base

Herencia privada:

• La herencia privada te da acceso a los miembros protegidos de la clase base

No siempre se desea dejar expuesta las funcionalidades o variables miembro de una clase base dentro de una clase derivada

Page 18: Informática II

Informática II 2011/218

HERENCIA PRIVADA

• Es usada si se desea ocultar parte de la funcionalidad de la clase base

• Cuando se hereda de manera privada, todos los miembros públicos de la clase base se vuelven privados, si se desean que sea visibles, se debe colocar el nombre del método (sin valor de retorno o parámetros de entrada) en la sección pública de la clase derivada.

class Base1 {public: char f() const { return 'a'; } int g() const { return 2; } float h() const { return 3.0; }};

class Derived : Base1 { // Private inheritancepublic: Base1::f; // Name publicizes member Base1::h;};

int main() { Derived d; d.f(); d.h(); d.g(); }

Page 19: Informática II

Informática II 2011/219

HERENCIA PRIVADA

• Se dice que una clase esta implementada en términos de otra clase (oculta parte de la funcionalidad de la clase base)

• Los que son públicos en la superclase, pasan a ser privados en la subclase, pero son accesibles en la subclase.

• Los que son privados en la superclase, siguen siendo privados en la subclase e inaccesibles.

• En las funciones miembro de la subclase no se tiene acceso a los miembros privados heredados, pero sí a los miembros públicos heredados, aunque se hayan convertido en privados.

Page 20: Informática II

20

CONTENIDO

Informática II 2011/2

Contención1

Delegación2

3

4

Herencia privada

Clases y funciones amigas

Page 21: Informática II

Informática II 2011/221

ACCEDIENDO A LOS ATRIBUTOS PRIVADOS

Informática II21

class Punto { public: float x; float y; Punto(); Show();}

class Punto { private: float x; float y; public: Punto(); Show(); float getX(){return x;} float getY(){return y;}}

float Distancia(Punto p1, Punto p2) { float dx, dy; dx = p1.x – p2.x; dy = p1.y – p2.y; return sqrt(dx*dx + dy*dy)}

float Distancia(Punto p1, Punto p2) { float dx, dy; dx = p1.getX() – p2.getX(); dy = p1.getY() – p2.getY(); return sqrt(dx*dx + dy*dy)}

Page 22: Informática II

Informática II 2011/222

CLASES Y FUNCIONES AMIGAS

• Se ha visto que todos aquellos miembros de una clase que sean declarados protegidos o privados, no podrán ser accedidos directamente desde el exterior de la clase.

• Existen ocasiones en que se desea que una clase pueda acceder directamente a los miembros privados de otra, en estos casos es posible declarar a la función/clase que se desea compartir como amiga.

class Clase1{public:friend class Clase2; // Clase 2 será amiga de clase 1,

// por lo tanto podrá acceder a // todos los miembros de Clase 1// directamente

}class Clase2{...}

La declaración de la clase amiga no es bidireccional

Page 23: Informática II

Informática II 2011/223

• No siempre se desea declarar todos los miembros de una clase como “amigas”. En estos casos será posible declararlas explícitamente.

CLASES Y FUNCIONES AMIGAS

class ParteNodo{

// Haciendo que otra función miembro sea amigafriend void ListaParte::Insertar(Parte *);

// Haciendo amiga a una función globalfriend int AlgunaFuncion();//....}

Page 24: Informática II

Informática II 2011/224

FUNCIONES AMIGAS

• La implementación de la función Distancia, no hace uso del operador de ámbito (::).– Porque??

• La función es amiga de Punto, pero no pertenece a la clase.

• Las funciones amigas no contienen el argumento implícito this.

• Una función puede ser amiga de una clase y miembro de otra.24

class Punto { private: float x; float y; public: Punto(); Show(); float getX(){return x;} float getY(){return y;} friend float Distancia(Punto, Punto);}

float Distancia(Punto p1, Punto p2){ float dx, dy; dx = p1.x – p2.x; dy = p1.y – p2.y; return sqrt(dx*dx + dy*dy)}

Page 25: Informática II

Informática II 2011/225

PROBLEMAS DE SEGURIDAD??• Uno de los pilares de la POO es la

ocultación de la información.– ¿Proveen entonces las funciones amigas una

puerta trasera para burlar la ocultación de la información?.

• ¿Como se preserva esto?.– Es la clase la que dice quiénes son sus amigos

y pueden acceder a sus miembros privados.– Ninguna función puede autodeclararse amiga y

acceder a la privacidad de una clase sin que la propia clase tenga conocimiento de ello.

25

Page 26: Informática II

26Informática II 2011/2

GRACIAS POR SU ATENCIÓN

Page 27: Informática II

27

BIBLIOGRAFÍA

• Pagina de Referencia lenguaje C++: • http://www.cplusplus.com/reference/std/ex

ception/exception/• http://www.cplusplus.com/reference/std/std

except/• Sams Teach yourselft C++ in 21 days:

http://newdata.box.sk/bx/c/htm/ch20.htm#Heading1

Informática II 2011/2

Page 28: Informática II

Informática II 2009/2

28