4. Herencia jerárquica
Clase Tela
Clase Ropa Hombre Clase Ropa Mujer
class Ropa_Hombre: public Tela
class Ropa_Mujer: public Tela 4Mtl. Lourdes Cahuich
5. Herencia multi nivel
Clase A
Clase B
Clase C
class A
{…}
class B : public A
{…}
class C : public B
{…}
5Mtl. Lourdes Cahuich
6. Herencia múltiple
*No aplica en C#
Clase B3
Clase D
Clase B2Clase B1
class D : public B1, public B2, private B3
6Mtl. Lourdes Cahuich
7. Especificadores de acceso y la herencia
• La herencia puede ser declarada pública,
privada o protegida.
• En toda la declaración de clases derivadas, la
primera palabra es “class”.
• Después va el nombre de la clase derivada,
seguida de dos puntos (:)
• Finalmente se pone el especificador de acceso
y el nombre de la clase base.
7Mtl. Lourdes Cahuich
8. Especificadores de acceso en herencia
*No aplica en C#
class D : public B //herencia pública
class D : protected B //herencia protegida
class D : private B //herencia privada
class D : B //default es privado
8Mtl. Lourdes Cahuich
9. Herencia pública
• Las funciones y miembros públicos de la clase
base (general) pueden ser usados
directamente por los miembros de la clase
derivada (especializada).
9Mtl. Lourdes Cahuich
10. Herencia pública
• Los elementos protegidos de la clase base sólo
pueden usarse por la clase derivada a través
de sus miembros públicos.
10Mtl. Lourdes Cahuich
11. Herencia pública
• Los elementos privados de la clase base no
son visibles en la clase derivada; sólo pueden
accederse mediante los métodos públicos
setters/getters de la clase base.
11Mtl. Lourdes Cahuich
12. El ejemplo que vimos la clase
anterior…
• Es una herencia sencilla pública.
• Ahora veremos algunos de los otros tipos de
herencia.
12Mtl. Lourdes Cahuich
13. Herencia pública sencilla con miembros
privados, protegidos y públicos.
public class B
{ //propiedades
private int p_b; //miembro privado clase base
protected int m_b; //miembro protegido clase base
public int k_b; //miembro público clase base
//métodos
public int cuadrado() { return k_b * k_b; } //propiedad pública
public int producto() { return k_b * m_b; } //propiedad protegida
public int otroProducto() { return p_b*k_b; } //funcion propiedad privada
//setters/getters
public void escribeP(int num){ p_b = num; }
public void escribeM(int num) { m_b = num; }
} //Fin clase B (Base)
13Mtl. Lourdes Cahuich
14. Herencia pública sencilla con miembros
privados, protegidos y públicos.
public class D : B //Herencia sencilla
{ //propiedades de clase derivada
public int n_d;
//métodos
public void setvalueBase(int a) { m_b = a; }
public void setvalueN(int a) { n_d = a; }
public int prodNporM() { return n_d * m_b; }
} //Fin clase D (Derivada)
14Mtl. Lourdes Cahuich
15. Probar herencia sencilla
private void btnPruebaHerencia_Click(object sender, EventArgs e)
{
D Cl = new D(); //se crea objeto de clase derivada
Cl.k_b = 9; //Acceso directo a k de la clase B (base)
Cl.setvalueBase(6);
//Cl.p = 0; //acceso a miembro privado de clase base
Cl.escribeP(5);//funcion publica para modificar miembro privado clase base
lblMostrarHerencia.Text = "Cuadrado "+Cl.cuadrado().ToString() +
", Producto " + Cl.producto().ToString();
lblMostrarHerencia.Text = lblMostrarHerencia.Text +"n Otro producto "+
Cl.otroProducto().ToString();
}
15Mtl. Lourdes Cahuich
17. Código ejemplo herencia multi-nivel
• Además de las dos clases que ya vimos,
agregamos:
public class C : D
{
public int c_c=5;
public int productoDeTodos(){
//m clase abuelo, n clase padre, cc clase nieta
return (k_b * n_d * c_c);
}
}
17Mtl. Lourdes Cahuich
18. private void btnHerenciaMultinivel_Click(object sender, EventArgs e)
{
C hijo = new C();
hijo.k_b = 4;//propiedad publica clase base (abuelo)
hijo.n_d = 9; //propiedad publica clase derivada (padre)
hijo.c_c = 10; //propiedad publica clase 2a derivada (hijo)
lblHerenciaMultinivel.Text = "Multiplicacion de propiedades de
las clases n hijo, padre, abuelo " +
hijo.productoDeTodos();
}
18Mtl. Lourdes Cahuich
20. Tarea 7
• Crear el diagrama UML para la herencia multi
nivel que programamos en C#
• Recuerda respetar la notación detallada de
clase de UML para cada una de las clases y la
notación para todos los métodos y
propiedades de cada una de las clases.
• Envía al correo del docente antes de la
siguiente sesión.
20Mtl. Lourdes Cahuich