Tipos de herencia

20
Tipos de herencia Material de apoyo POO

Transcript of Tipos de herencia

Page 1: Tipos de herencia

Tipos de herencia

Material de apoyo POO

Page 2: Tipos de herencia

Ahora que ya hemos visto el concepto básico de herencia…

• Veremos los diferentes tipos de herencia que podemos tener:

2Mtl. Lourdes Cahuich

Page 3: Tipos de herencia

Herencia sencilla

Clase Madera

Clase Mueble

class Mueble : public Madera3Mtl. Lourdes Cahuich

Page 4: Tipos de herencia

Herencia jerárquica

Clase Tela

Clase Ropa Hombre Clase Ropa Mujer

class Ropa_Hombre: public Telaclass Ropa_Mujer: public Tela

4Mtl. Lourdes Cahuich

Page 5: Tipos de herencia

Herencia multi nivel

Clase A

Clase B

Clase C

class A{…}

class B : public A{…}

class C : public B{…}

5Mtl. Lourdes Cahuich

Page 6: Tipos de herencia

Herencia múltiple*No aplica en C#

Clase B3

Clase D

Clase B2Clase B1

class D : public B1, public B2, private B36Mtl. Lourdes Cahuich

Page 7: Tipos de herencia

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

Page 8: Tipos de herencia

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

Page 9: Tipos de herencia

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

Page 10: Tipos de herencia

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

Page 11: Tipos de herencia

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

Page 12: Tipos de herencia

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

Page 13: Tipos de herencia

Herencia pública sencilla con miembros privados, protegidos y públicos.

public class B{ //propiedades

private int p_b; //miembro privado clase baseprotected int m_b; //miembro protegido clase basepublic int k_b; //miembro público clase base//métodospublic int cuadrado() { return k_b * k_b; } //propiedad públicapublic int producto() { return k_b * m_b; } //propiedad protegidapublic int otroProducto() { return p_b*k_b; } //funcion propiedad privada//setters/getterspublic void escribeP(int num){ p_b = num; }public void escribeM(int num) { m_b = num; }

} //Fin clase B (Base)

13Mtl. Lourdes Cahuich

Page 14: Tipos de herencia

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étodospublic 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

Page 15: Tipos de herencia

Probar herencia sencilla

private void btnPruebaHerencia_Click(object sender, EventArgs e){

D Cl = new D(); //se crea objeto de clase derivadaCl.k_b = 9; //Acceso directo a k de la clase B (base)Cl.setvalueBase(6);//Cl.p = 0; //acceso a miembro privado de clase baseCl.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

Page 16: Tipos de herencia

Herencia multi-nivel

Clase A

Clase B

Clase C

16Mtl. Lourdes Cahuich

Page 17: Tipos de herencia

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 nietareturn (k_b * n_d * c_c);

}}

17Mtl. Lourdes Cahuich

Page 18: Tipos de herencia

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

Page 19: Tipos de herencia

19Mtl. Lourdes Cahuich

Page 20: Tipos de herencia

Tarea 7

• Crear el diagrama UML para la herencia multinivel 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