Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Temas
Mtodos abstractos y virtuales Clases abstractas Sobrecarga de mtodos y operadores Polimorfismo en c# Uso de polimorfismo mediante mtodos
genricos
Clase pasada
Que significa instanciar una clase? Cuales son las principales ventajas de la herencia? A que llambamos encapsulamiento de miembros? Que problemas provocaban la utilizacin del encapsulamiento de atributos en las clases? Cuales palabras se utilizaban para definir el acceso a los miembros de una clase? Que significa cada una?
Bibliografa
Antonio Gonzlez Saco Programming Microsoft Windows with C#. Charles Petzold C# design patterns, a tutorial. Addison Wesley
El lenguaje de programacion c sharp. Jose
Especulacin cientfica
Es esto posible en C#?
Figura MyFigure1 = new Circulo(); Figura MyFigure2 = new Cuadrado(); Figura MyFigure3 = new Poligono(); Figura MyFigure4 = new Amorfo();
Polimorfismo
Es la capacidad de almacenar objetos de un determinado tipo en variables de tipos antecesores del primero, a costa esto de slo poderse acceder a travs de dicha variable a los miembros comunes a ambos tipos.
Mtodos virtuales
Ya hemos visto que es posible definir tipos cuyos mtodos se hereden de definiciones de otros tipos. Lo que ahora vamos a ver es que adems es posible cambiar dicha definicin en la clase hija. A este tipo de mtodos se les llama mtodos virtuales.
Mtodos virtuales
Clase Base virtual <tipoDevuelto> <nombreMtodo>(<parmetros>) { <cdigo> } Clase Derivada override <tipoDevuelto> <nombreMtodo>(<parmetros>) { <nuevoCdigo> }
Mtodos abstractos
Es una variante de mtodo virtual que no es programado en la clase base y obliga al programador a redefinirlo en la clase derivada si desea que esta clase pueda ser instanciada. Toda clase que contenga algn mtodo abstracto o que herede uno y no lo redefina ser una clase abstracta
Mtodos abstractos
abstract Class Base abstract <tipoDevuelto> <nombreMtodo>(<parmetros>) { <cdigo> } Class Derivada override <tipoDevuelto> <nombreMtodo>(<parmetros>) { <nuevoCdigo> }
Clases abstractas
Una clase abstracta es aquella que forzosamente se ha de derivar si se desea que se puedan crear objetos de la misma. Puede o no contener mtodos abstractos pero toda clase que contenga mtodos abstractos debe ser definida como abstracta. Para ello se antepone la palabra abstract a la definicin de clase
Operadores
Object is Class: Devuelve true si el objeto Object es del tipo de Class Object as Class: En nuestro caso se utilza para tratar al objeto Object del tipo de una clase base como un objeto de una clase derivada. Tiene otros usos.
Problema
Se asumir que el cumpleaos de los estudiantes coincide con el da de graduacin del curso. En ese caso si su promedio es mayor a 2 puntos debe pasar de curso.
Problema
Se asumir que el cumpleaos de los empleados coincide con el da de comienzo en su empleo, se desea incrementar sus aos de experiencia en 1 y su salario en 20.
Problema
Se han realizado algunas pequeas modificaciones a las clases de la jerarqua para hacerlas ms cortas y rpidas de escribir. Por ejemplo se han definido todos los atributos como pblicos, se han eliminado las propiedades y algunos atributos no relevantes
Como lo hacemos?
Person
Name Age Initials Birthday() Salary Workplace Profession YearsOfExperience
Employee
School Course Speciality Grade
Student
} public Person() { Name=""; Initial=""; } public Person(string aName, int anAge) { Name=aName; Initial=aName.Substring(0,1); Age=anAge; } }
class Student: Person { public string College; public int Course; public double Grade; public string Speciality; public Student(string aName, string aCollege, string aSpeciality, int anAge) :base(aName, anAge) { College=aCollege; Speciality=aSpeciality; Course=1; } }
class Employee: Person { public string WorkPlace; public double Salary; public int YearsOfExperience; public string Profession; public Employee(string aName, string aWorkPlace, string aProfession, float aSalary, int anAge): base(aName, anAge) { WorkPlace=aWorkPlace; Profession=aProfession; Salary=aSalary; YearsOfExperience=0; } }
Metodos virtuales
Person
Name Age Initials Birthday() Salary Workplace Profession YearsOfExperience Birthday()
Employee
Student
class Person { public string Name; public string Initial; public int Age;
virtual
{
Age++; } public Person() { Name=""; Initial=""; } public Person(string aName, int anAge) { Name=aName; Initial=aName.Substring(0,1); Age=anAge; } }
class Student: Person { public string College; public int Course; public double Grade; public string Speciality;
public static void Stats(Person aPerson) { Console.WriteLine("---"); Console.WriteLine("Nombre:{0}", aPerson.Name); Console.WriteLine("Edad:{0}", aPerson.Age); if (aPerson is Student) { Console.WriteLine("Escuela:{0}", (aPerson as Student).College); Console.WriteLine("Carrera:{0}", (aPerson as Student).Speciality); Console.WriteLine("Promedio:{0}", (aPerson as Student).Grade); Console.WriteLine(Curso:{0}", (aPerson as Student).Course); } else if (aPerson is Employee) { Console.WriteLine("Centro de Trabajo:{0}", (aPerson as Employee).WorkPlace); Console.WriteLine("Profesion:{0}", (aPerson as Employee).Profession); Console.WriteLine("Salario:{0}", (aPerson as Employee).Salary); Console.WriteLine("Anyos de Exp:{0}", (aPerson as Employee).YearsOfExperience); } }
public static void Main(string[] args) { Person aStudent=new Student("Juan", "Cujae", "Tele", 18); (aStudent as Student).Grade=5; Person anEmployee=new Employee("Jose", "Cujae", "Profe", 350, 24); Stats(aStudent); Stats(anEmployee); aStudent.Birthday(); anEmployee.Birthday(); Stats(aStudent); Stats(anEmployee); Console.ReadLine(); }
Salida en la consola
Resumen
El polimorfismo es una de las herramientas
ms poderosas que brinda la POO. Permite a los programadores tratar a objetos de una misma jerarqua de clases de la misma manera y con el mismo algoritmo y sin embargo que estos se comporten de manera diferente. Para esto se vale de la redefinicin de mtodos virtuales y abstractos
Estudio Individual
Estudiar el tema 11 del libro de texto de la