1 / 28

Informática II

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.

berg
Download Presentation

Informática II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informática II Clase 11: HerenciaAvanzada Diego Fernando Serna Restrepo Semestre 2011/2

  2. Chiste del Día Informática II 2011/2

  3. Contenido Contención 1 Delegación 2 Herencia privada 3 4 Clases y funciones amigas Informática II 2011/2

  4. Contención • Una clase o estructura en C++ es capaz de contener cualquier otro tipo de datos, inclusive otras clases o estructuras • classEmpleado{ • TelefononumTel; • NombreNombre; • } • classTelefono{ • inttel; • } • classNombre{ • char *name; • } Un objeto instanciado de una clase, es declarado como miembro de otra. Informática II 2011/2

  5. Contención en C++ Se dice que la clase contiene miembros de otras clases classCarro { public: MotorsuMotor; FabricantesuMarca; ColorsuColor; PropietariosuDuenio; } classMotor { public: … private: … } classFabricante { public: … private: … } classPropietario { public: … private: … } classColor { public: … private: … } 5 Informática II 2011/2

  6. Contención Informática II 2011/2

  7. El costo de la Contención Informática II 2011/2

  8. Contenido Contención 1 Delegación 2 Herencia privada 3 Clases y funciones amigas 4 Informática II 2011/2

  9. Delegación Informática II 2011/2

  10. Herencia Contención Informática II 2011/2

  11. Herencia o Contención? • Contenido. Un objetodeclaradocomomiembro de otraclase, contenidoporesaclase. • 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. Informática II 2011/2

  12. Herencia o Contención? Informática II 2011/2

  13. Herencia o Contención? Informática II 2011/2

  14. Contenido Contención 1 Delegación 2 Herencia privada 3 4 Clases y funciones amigas Informática II 2011/2

  15. Herencia Publica Informática II 2011/2

  16. Herencia Protegida Informática II 2011/2

  17. Herencia Privada Informática II 2011/2

  18. Herencia Privada • class Base1 { • public: • char f() const { return 'a'; } • int g() const { return 2; } • float h() const { return 3.0; } • }; • class Derived : Base1 { // Private inheritance • public: • Base1::f; // Name publicizes member • Base1::h; • }; • int main() { • Derived d; • d.f(); • d.h(); • d.g(); • } • 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. Informática II 2011/2

  19. 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. Informática II 2011/2

  20. Contenido Contención 1 Delegación 2 Herencia privada 3 4 Clases y funciones amigas Informática II 2011/2

  21. Accediendo a los atributos privados classPunto { public: float x; float y; Punto(); Show(); } floatDistancia(Punto p1, Punto p2) { floatdx, dy; dx = p1.x – p2.x; dy = p1.y – p2.y; returnsqrt(dx*dx + dy*dy) } classPunto { private: float x; float y; public: Punto(); Show(); floatgetX(){return x;} floatgetY(){return y;} } floatDistancia(Punto p1, Punto p2) { floatdx, dy; dx = p1.getX() – p2.getX(); dy = p1.getY() – p2.getY(); returnsqrt(dx*dx + dy*dy) } Informática II 2011/2 Informática II 21

  22. 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: • friendclass 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 Informática II 2011/2

  23. Clases y funciones amigas • No siempre se desea declarar todos los miembros de una clase como “amigas”. En estos casos será posible declararlas explícitamente. • classParteNodo • { • // Haciendo que otra función miembro sea amiga • friendvoidListaParte::Insertar(Parte *); • // Haciendo amiga a una función global • friendintAlgunaFuncion(); • //.... • } Informática II 2011/2

  24. Funciones amigas classPunto { private: float x; float y; public: Punto(); Show(); floatgetX(){return x;} floatgetY(){return y;} friendfloatDistancia(Punto, Punto); } floatDistancia(Punto p1, Punto p2){ floatdx, dy; dx = p1.x – p2.x; dy = p1.y – p2.y; returnsqrt(dx*dx + dy*dy) } • 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. Informática II 2011/2 24

  25. 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. Informática II 2011/2 25

  26. GRACIAS POR SU ATENCIÓN Informática II 2011/2

  27. Bibliografía • Pagina de Referencia lenguaje C++: • http://www.cplusplus.com/reference/std/exception/exception/ • http://www.cplusplus.com/reference/std/stdexcept/ • SamsTeach yourselft C++ in 21 days: http://newdata.box.sk/bx/c/htm/ch20.htm#Heading1 Informática II 2011/2

  28. Gracias ! Informática II 2009/2

More Related