Está en la página 1de 14

HERENCIA

ING. CAMILO TÁUTIVA MANCERA

1
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Introducción
z La herencia es una forma de reutilización del
software con la que se crean clases que absorben
los datos y comportamientos de una clase existente
y los mejoran con nuevas capacidades

z Clase existente Clase base Directa


Indirecta

z Nueva clase Clase derivada


z Herencia simple y multiple

2
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Temas
z Clases base y clases derivadas
z Consideraciones de diseño
z Declaración de una clase derivada
z Tipos de herencia en C++
z Tipo de herencia public
z Tipos de herencia protected y private
z Herencia multiple

3
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Clases base y clases derivadas
z Todo objeto de una clase derivada “es un”
objeto de su clase base

z El conjunto de objetos representados por


una clase base por lo general es más
grande que el conjunto de objetos
representado por cualquiera de sus clases
derivadas
4
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Estructuras jerárquicas: una clase se convierte en clase base,
suministrando datos y comportamientos a otras clases, o en clase
derivada, heredando sus datos y comportamientos desde otras
clases
Miembro Comunidad

Empleado Estudiante Exalumno

Docente Administrativo

Administrador Maestro

Maestro - administrador

5
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Consideraciones de diseño
A veces es difícil decidir cuál es la relación de herencia mas
adecuada entre clases en el diseño de un programa y se debe
tener presente cada aplicación a desarrollar

Empleado Empleado

Tiempo completo Medio tiempo Fijo Temporal

Empleado

Asalariado Comisión Por horas


6
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Declaración de una clase derivada
La declaración de una clase derivada debe incluir:
class nombre_clase_derivada : tipo_herencia nombre_clase_base {
public:
// Miembros públicos
private:
// Miembros privados
};

Tipos de herencia en C++


z Public
z Private
z Protected
7
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Nivel intermedio de protección entre
el acceso public y el private
Miembros protected
Se puede acceder a ellos mediante
miembros y friends de cualquier
clase derivada de la clase base

Herencia public
z Es la mas utilizada
z Los miembros public y protected de la clase base retienen su acceso
a miembros original cuando se hacen miembros de una clase
derivada
z No es posible acceder de manera directa a los miembros private de
una clase base desde las clases derivadas pero se puede acceder a
ellos a través de llamadas a los miembros public y protected de la
clase base
z Los constructores no se heredan
z Las funciones friend no son heredadas
8
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Definición de una clase con datos miembro protected

// Definición de la clase Punto


class Punto {
public:
Punto (int=0, int=0); // Constructor predeterminado
void estableceX (int);
void estableceY (int);
void imprime () const;
protected: // constructor predeterminado
int x; Punto::Punto( int valorX, int valorY ){
int y; x = valorX;
}; // fin de la clase Punto y = valorY;
} // fin del constructor Punto
Definición de una clase derivada de la clase anterior

// Definición de la clase Circulo derivada de la clase Punto


class Circulo : public Punto {
public:
Circulo (int=0, int=0, double=0.0); // Nuevo constructor predeterminado
void estableceRadio (double); // Nueva función miembro
void imprime () const;
private: // Nuevo constructor predeterminado
double radio; //Nuevo dato miembro privado Circulo::Circulo( int valorX, int valorY, double valorRadio ){
}; // fin de la clase Circulo x = valorX;
y = valorY;
estableceRadio (valorRadio);
} // fin del constructor Circulo
9
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Problemas de utilizar datos miembro protected

z El objeto de la clase derivada no tiene que utilizar una función


miembro para establecer el valor del dato miembro protected de la
clase base, por lo tanto, un objeto de una clase derivada puede
facilmente asignar un valor no valido al dato miembro protected, y
asi, dejar al objeto en un estado no valido.
z Existe la probabilidad de que las funciones miembro se escriban
dependiendo de la implementación de la clase base
Definición de una clase con datos miembro private

// Definición de la clase Punto


class Punto {
public:
Punto (int=0, int=0); // Constructor predeterminado
void estableceX (int);
void estableceY (int);
void imprime () const; // constructor predeterminado
private: Punto::Punto( int valorX, int valorY )
int x; : x (valorX), y(valorY) // Lista inicializadora de miembros
int y; {
}; // fin de la clase Punto // Cuerpo vacío
} // fin del constructor Punto
10
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Definición de una clase derivada de la clase anterior

// Definición de la clase Circulo derivada de la clase Punto


class Circulo : public Punto {
public:
Circulo (int=0, int=0, double=0.0); // Nuevo constructor predeterminado
void estableceRadio (double); // Nueva función miembro
double obtieneRadio () cont; // Devuelve el radio
void imprime () const;
private:
double radio; //Nuevo dato miembro privado
}; // fin de la clase Circulo
// Nuevo constructor predeterminado
Circulo::Circulo( int valorX, int valorY, double valorRadio )
: Punto (valorX, valorY) // Invoca al constructor de la clase base
{
estableceRadio(valorRadio);
} // fin del constructor Circulo

// muestra el objeto Circulo


void Circulo::imprime() const
{
cout << "Centro = ";
Punto::imprime(); // invoca a la función imprime de Punto
cout << "; Radio = " << obtieneRadio();

} // fin de la función imprime

11
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Herencia protected
z Su uso es raro y se debe tener cuidado
z Cuando una clase se deriva de una clase base protected,
los miembros public y protected se convierten en
miembros protected de la clase derivada
z Los constructores no se heredan
class nombre_clase_derivada : protected nombre_clase_base {

Herencia private
z Su uso es raro y se debe tener cuidado
z Cuando una clase se deriva de una clase base private, los
miembros public y protected se convierten en miembros
private de la clase derivada
z Los constructores no se heredan
class nombre_clase_derivada : private nombre_clase_base {
12
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Herencia multiple
z La herencia multiple es un tipo de herencia en la que una
clase hereda el estado y comportamiento de más de una
clase base
z Hay herencia multiple cuando existen multiples clases
base para la clase derivada
class nombre_clase_derivada : tipo_herencia nombre_clase_base1, tipo_herencia nombre_clase_base2
{
public:
// Miembros públicos
private:
// Miembros privados
};

Presenta problemas como la ambigüedad por el uso de nombres


identicos en diferentes clases base y la dominación o preponderancia de
funciones o datos
13
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006
Bibliografia
z Deitel H., Deitel P., “Como programar en
C++”, cuarta edición. Pearson educación.
Capítulos 7 y 9
z Joyanes A. Luis, “Prograamción en C++,
algoritmos, estructuras de datos y objetos”.
Parte IV, Capítulos 23 y 24

14
Universidad Militar Nueva Granada - Ingeniería Mecatrónica - Programación II 21/02/2006

También podría gustarte