Вы находитесь на странице: 1из 7

Herencia simple

La herencia es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y mtodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, que luego se aplican a los atributos y mtodos heredados. Esta particularidad permite crear una estructura jerrquica de clases cada vez ms especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compaa que vende estas clases tiende a proteger las datos miembro usando la encapsulacin). Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se comportar como pblica en la clase Base y en las que componen la jerarqua de herencia, y como privada en las clases que NO sean de la jerarqua de la herencia. Ejemplo: clases Barco, Acorazado, Carguero, etc. un Acorazado ES-UN Barco, un Carguero ES-UN Barco, un Trasatlntico ES-UN Barco, etc. En este ejemplo tendramos las cosas generales de un Barco (en C++) class Barco { protected: char* nombre; float peso; public: //Constructores y dems funciones bsicas de barco };

y ahora las caractersticas de las clases derivadas, podran (a la vez que heredan las de barco) aadir cosas propias del subtipo de barco que vamos a crear, por ejemplo: class Carguero: public Barco { // Esta es la manera de especificar que hereda de Barco private: float carga; //El resto de cosas }; class Acorazado: public Barco { private: int numero Armas; int Soldados; // El resto de cosas }; Por ltimo, hay que mencionar que existen 3 clases de herencia que se diferencian en el modo de manejar la visibilidad de los componentes de la clase resultante:

Herencia publica (class Derivada: public Base ): Con este tipo de herencia se respetan los comportamientos originales de las visibilidades de la clase Base en la clase Derivada.

Herencia privada (class Derivada: private Base): Con este tipo de herencia todo componente de la clase Base, ser privado en la clase Derivada (las propiedades heredadas sern privadas aunque estas sean pblicas en la clase Base)

Herencia protegida (clase Derivada: protected Base): Con este tipo de herencia, todo componente publico y protegido de la clase Base, ser protegido en la clase Derivada, y los componentes privados, siguen siendo privados.

Herencia mltiple
La herencia mltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrs suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, tambin podrs suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la programacin sera herencia mltiple (clase empleado_tienda): class Persona { ... Hablar(); Caminar(); ... }; class Empleado { Persona jefe; int sueldo; Cobrar(); ... }; class empleado_tienda: public Persona, Empleado { ... Almacenar Stock(); Comprobar Existencias(); ... }; Por tanto, es posible utilizar ms de una clase para que otra herede sus caractersticas.

Herencia mltiple Algunos lenguajes orientados a objetos, como C++ permiten herencias mltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este mtodo puede utilizarse para agrupar atributos y mtodos desde varias clases dentro de una sola.

Jerarqua de clase
La relacin primaria-secundaria entre clases puede representarse desde un punto de vista jerrquico, denominado vista de clases en rbol. La vista en rbol comienza con una clase general llamada superclase (a la que algunas veces se hace referencia como clase primaria, clase padre, clase principal, o clase madre; existen muchas metforas genealgicas). Las clases derivadas (clase secundaria o subclase) se vuelven cada vez ms especializadas a medida que van descendiendo el rbol. Por lo tanto, se suele hacer referencia a la relacin que une a una clase secundaria con una clase primaria mediante la frase "es una" x o y.

Instituto Politcnico Nacional Escuela Superior de Ingeniera Mecnica y Elctrica Programacin orientada a objetos Murillo Hernndez Jess Eduardo Salinas Cern Diego 2AM4 Herencia

Programas
#include <iostream> using namespace std; class base { public: base() { cout << "construyendo base\n"; } ~base() { cout << "Destruyendo base\n"; } }; class derivada1 : public base { public: derivada1() { cout << "Construyendo derivada1\n"; } ~derivada1() { cout << "destruyendo derivada1\n"; } }; class derivada2 : public derivada1 { public: derivada2() { cout << "Construyendo derivada2\n"; } ~derivada2() { cout << "Destruyendo derivada2\n"; } }; int main() { derivada2 obj; // construir y destruir obj system("pause"); return 0; }

#include <iostream> using namespace std; class base1 { protected: int i; public: base1(int x) { i=x; cout << "Construyendo base1\n"; } ~base1() { cout << "Destruyendo base1\n"; } }; class base2 { protected: int k; public: base2(int x) { k=x; cout << "construyendo base2\n"; } ~base2() { cout << "Destruyendo base2\n"; } }; class derivada : public base1, public base2 { public: /* el constructor en derivada no usa parametros, pero aun asi debe ser declarado para tomarlos y pasarselos a las clases base. */ derivada(int x, int y) : base1(x), base2(y) { cout << "Construyendo derivada\n"; } ~derivada() { cout << "Destruyendo derivada\n"; } void mostrar() { cout << i << "" << k << "\n"; } }; int main() { derivada obj(3, 4); obj.mostrar(); // mostrar 3 4 system("pause"); return 0; }

Вам также может понравиться