Professional Documents
Culture Documents
Herencia y polimorfismo
2.2. Clases bases y clases derivadas. 2.3. Concepto de herencia. 2.4. Tipos de herencia. 2.5. Composicin. 2.6. Concepto de polimorfismo. 2.7. Clases bases abstractas. 2.8. Sobrecarga de mtodos. 2.9. Mtodos virtuales.
Competencias Genricas Solucin de problemas Toma de decisiones. Trabajo en equipo. Capacidad de aplicar los conocimientos Habilidades de investigacin Capacidad de aprender
Criterios de evaluacin Conceptuales: 50% Procedimentales: 40% Actitudinales: 10%
L a clase que hereda se denomina clase derivada, es decir, se puede crear nuevas clases a partir de las antiguas por el mecanismo de herencia. Se conoce esta tcnica por derivacin. La nueva clase que se crea se denomina clase derivada. El proceso completo es la derivacin de clases.
Ejemplo de herencia
using System; namespace clase_base { class perimetro { protected double lado1,resultado; public perimetro() { lado1=0; resultado=0; } public void leer1() { Console.WriteLine("Lado1: "); lado1= double.Parse (Console.ReadLine()); } }
Ejemplo de herencia
class cuadrado: perimetro { public void calcular() { resultado= 4*lado1; Console.WriteLine("El resultado es: "+ resultado); } } class triangulo: perimetro { protected double lado2,lado3; public void leer2() { Console.WriteLine("Lado2: "); lado2= double.Parse (Console.ReadLine()); Console.WriteLine("Lado3: "); lado3= double.Parse (Console.ReadLine()); }
Ejemplo de herencia
public void calcular() { resultado= lado1+lado2+lado3; Console.WriteLine("El resultado es: " + resultado); } } class Program { static void Main(string[] args) { cuadrado c= new cuadrado(); triangulo t=new triangulo(); c.leer1(); c.calcular(); t.leer1(); t.leer2(); t.calcular(); Console.ReadKey(); } } }
Instrucciones: Realice un programa en donde de la clase base medidas, que tenga un constructor y destructor se hereden todos sus atributos a la clase derivada longitud y reas y ambas clases derivada tengan un mtodo llamado conversion en donde se leer un dato en metros y se convertira cm,dm,mm,yda,pie,pulagada.
medidas m,dm,cm,mm,yda,p ie,pulg
conversion()
Tarea:
persona nombre direccion fechadenacimiento persona() ~persona()
categoria sueldo
leer() imprimir()
leer() imprimir()
Herencia multinivel
En C# se puede construir jerarquas que contengan tantas capas de herencia como desee. Es decir se puede utilizar una clase derivada como clase base de otra. Ejemplo: figura
area()
namespace cadenas { class Program { static void Main(string[] args) { string cad; Console.WriteLine("cadena: "); cad = Console.ReadLine(); Console.WriteLine("cadena: " +cad); Console.ReadKey(); } } }
Tarea
plantas nombre tipo Raiz plantas() ~plantas() hojas tipoHoja leer() imprimir() flor nombreFlor leer() imprimir()
animales
Tarea
aves
pigmentacion
leer() imprimir()
2.5. Composicin.
Una agregacin de composicin es aquella que posee (<<contiene>>) a sus partes y entraa una fuerte dependencia de propiedad. Las partes viven en el todo, de modo que se destruyen cuando se destruye el todo. La multiplicidad en el lado parte puede ser un intervalo. Una agregacin de composicin forma un rbol de partes, mientras que un agregado compartido forma una red. Se representa el numero seguido de una lnea y un rombo slido (dibujado de negro) conectado a la parte todo.
Avin
4 * 1..3 2..6
Motor
Asientos
Bodega
Baos
En C#, una clase abstracta tiene al menos una funcin miembro que se declara pero no se define; su definicin se realiza en una clase derivada. Debido a que una clase abstracta tiene al menos una funcin que no se puede llamar, no puede ser instanciada.
En las clases abstractas existen los mtodos abstractos, este se crea con el modificador de tipo abstract, un mtodo no tiene ni cuerpo y, por tanto, no lo implementa en la clase base. As, una clase derivada tiene que sustituirlo, y no puede utilizar simplemente la versin que esta definida en la clase base. Para declarar un mtodo abstracto, utilice esta forma general: abstract tipo nombre(lista_parametros);
Cuando una clase derivada hereda una clase abstracta, tiene que implementar todos los mtodos abstractos de la clase base. Si no lo hace, tambien hay que especificar la clase derivada como abstract.
} public override void area() { res = (lado1 * lado2) / 2; Console.WriteLine("Area del triangulo: " + res); }
}
Console.ReadKey(); } } }
public int leer(int l) { Console.Write("lado: "); l = int.Parse(Console.ReadLine()); return l; } public void area(int l1,int l2 ) { A = l1 * l2; Console.Write("Area del rectangulo: "+ A);
} public void area(double l1, double l2) { A =( l1 * l2)/2; Console.Write("Area del triangulo: " + A); }
switch (opc) { case 1: f.area(f.leer(0), f.leer(0)); break; case 2: f.area(f.leer(), f.leer()); break; case 3: f.area(f.leer()); break; } Console.ReadKey();
} } }
} }