miércoles, 31 de enero de 2018

CLASE 7: HERENCIA

HERENCIA SIMPLE

Herencia Simple La herencia en C++ es un mecanismo de abstracción creado para poder facilitar, y mejorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relación especial. En la herencia, las clases derivadas “heredan” los datos y la función miembro de las clases base, pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas. 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 pública en la clase Base y en las que componen la jerarquía de herencia, y como privada en las clases que NO sean de la jerarquía de la herencia. Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene sentido, podemos intentar usar esta jerarquía: Si la frase <claseB> ES-UN <claseA> tiene sentido, entonces estamos ante un posible caso de herencia donde clase A será la clase base y clase B la derivada.
EJEMPLO:
#include<conio.h> 
#include <iostream>
using namespace std;

class Vehiculo {
public:
  void avanza() {}
};

class Coche : public Vehiculo {
public:
  void avanza(void)
     { cout << "Avanza coche." << endl; }
};

class Moto: public Vehiculo {
public:
  void avanza(void)
     { cout << "Avanza moto." << endl; }
};

int main()
{
  Moto t;
  Coche c;

  t.avanza();
  c.avanza();

  return 0;
}

HERENCIA  MÚLTIPLE
La herencia múltiple 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, podrás suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, también podrás suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio. La herencia múltiple presenta el conocido problema del diamante. Esté problema surge cuando dos clases heredan de otra tercera y, además una cuarta clase tiene cómo padre a las dos últimas. La primera clase padre es llamada A y las clases B y C heredan de ella, a su vez la clase D tiene cómo padres a B y C. En esta situación, si una instancia de la clase D llama a un método de la clase A, ¿lo heredará desde la clase B o desde la clase C? Cada lenguaje de programación utiliza un algoritmo para tomar esta decisión

EJEMPLO:
#include <math.h>
#include <stdio.h>
class Circulo {
 float radio;
public:
 Circulo(float r) { radio = r; }
 float area() { return M_PI*radio*radio; }
};
class Mesa {
 float altura;
public:
 Mesa(float a) { altura = a; }
 float alto() { return altura; }
};
class MesaRedonda : public Mesa, public Circulo {
 int color;
public:
 MesaRedonda(float r, float a, int c);
 int Color() { return color; }
};
MesaRedonda::MesaRedonda(float r, float a, int c) :
Circulo(r), Mesa(a)
{
 color = c;
}
void main()
{
 MesaRedonda mesa(15.0, 3.0, 5);
 printf("\nLas propiedades de la mesa son:");
 printf("\nAltura = %0.2f", mesa.alto());
 printf("\nArea = %0.2f", mesa.area());
 printf("\nColor = %d", mesa.Color());
}

NETGRAFIA:
 http://www.itlalaguna.edu.mx/academico/carreras/sistemas/programacion2/CPP9C.pdf

No hay comentarios:

Publicar un comentario