Tipos de herencia
Transcript of Tipos de herencia
![Page 1: Tipos de herencia](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/1.jpg)
Tipos de herencia
Material de apoyo POO
![Page 2: Tipos de herencia](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/2.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/3.jpg)
Herencia sencilla
Clase Madera
Clase Mueble
class Mueble : public Madera3Mtl. Lourdes Cahuich
![Page 4: Tipos de herencia](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/4.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/5.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/6.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/7.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/8.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/9.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/10.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/11.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/12.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/13.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/14.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/15.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/16.jpg)
Herencia multi-nivel
Clase A
Clase B
Clase C
16Mtl. Lourdes Cahuich
![Page 17: Tipos de herencia](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/17.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/18.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/19.jpg)
19Mtl. Lourdes Cahuich
![Page 20: Tipos de herencia](https://reader030.fdocument.pub/reader030/viewer/2022032714/55aa80a51a28ab3b578b46a3/html5/thumbnails/20.jpg)
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