La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.

Presentaciones similares


Presentación del tema: "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."— Transcripción de la presentación:

1 Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2

2 C HISTE DEL D ÍA Informática II 2011/2 2

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

4 C ONTENCIÓN Informática II 2011/2 4 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.

5 Informática II 2011/2 5 C ONTENCIÓ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: … }

6 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. 2 De este modo se puede construir una nueva clase a partir de otra sin el uso de herencia. Informática II 2011/2 6 C ONTENCIÓN

7 E L COSTO DE LA C ONTENCIÓ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. Informática II 2011/2 7

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

9 D ELEGACIÓ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. Informática II 2011/2 9

10 C ONTENCIÓN Informática II 2011/2 10 H ERENCIA

11 H ERENCIA O C ONTENCIÓN ? Informática II 2011/2 11 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.

12 H ERENCIA O C ONTENCIÓ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. Informática II 2011/2 12 ¿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.

13 H ERENCIA O C ONTENCIÓ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. Informática II 2011/2 13

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

15 H ERENCIA P UBLICA 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: Informática II 2011/2 15

16 H ERENCIA P ROTEGIDA 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 Informática II 2011/2 16

17 H ERENCIA P RIVADA 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 Informática II 2011/2 17

18 H ERENCIA P RIVADA 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 18 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(); }

19 H ERENCIA P RIVADA 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 19

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

21 Informática II 2011/2 21 A CCEDIENDO A LOS ATRIBUTOS PRIVADOS Informática II 21 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) }

22 C LASES Y FUNCIONES AMIGAS Informática II 2011/2 22 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

23 No siempre se desea declarar todos los miembros de una clase como amigas. En estos casos será posible declararlas explícitamente. Informática II 2011/2 23 C LASES Y FUNCIONES AMIGAS class ParteNodo { // Haciendo que otra función miembro sea amiga friend void ListaParte::Insertar(Parte *); // Haciendo amiga a una función global friend int AlgunaFuncion(); //.... }

24 Informática II 2011/2 24 F UNCIONES 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) }

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

26 Informática II 2011/2 26

27 B IBLIOGRAFÍA Pagina de Referencia lenguaje C++: http://www.cplusplus.com/reference/std/ex ception/exception/http://www.cplusplus.com/reference/std/ex ception/exception/ http://www.cplusplus.com/reference/std/st dexcept/http://www.cplusplus.com/reference/std/st dexcept/ Sams Teach yourselft C++ in 21 days: http://newdata.box.sk/bx/c/htm/ch20.htm# Heading1 27 Informática II 2011/2

28 Informática II 2009/2 28


Descargar ppt "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."

Presentaciones similares


Anuncios Google