Está en la página 1de 7

Unidad 4 Polimorfismo. 4.1 Definicin. La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes.

Este es uno de los conceptos esenciales de una programacin orientada a objetos. As como la herencia est relacionada con las clases y su jerarqua, el polimorfismo se relaciona con los mtodos. Ejemplo de polimorfismo Aplicado a un Auto:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cap14_POO_Polimorfismo { class Auto { public string Color; public int Ruedas; public int Puertas; public void vehiculo(string color, int ruedas, int puertas) { Console.WriteLine("\n\n Metodo CON parametros"); Console.WriteLine(" ====================="); Console.WriteLine("\n Color: " + color + "\n Ruedas: " + ruedas + "\n Puertas: " + puertas + "\n"); Console.ReadKey(); } public void vehiculo() { Color = "Azul"; Ruedas = 4; Puertas = 4; Console.WriteLine("\n\n Metodo SIN parametros"); Console.WriteLine(" ====================="); Console.WriteLine("\n Color: " + Color + "\n Ruedas: " + Ruedas + "\n Puertas: " + Puertas); Console.ReadKey(); } } } //En la clase Program.cs codificamos: namespace Cap14_POO_Polimorfismo { class Program { static void Main(string[] args) { Auto ObjetoAuto = new Auto (); ObjetoAuto.vehiculo("Negro", 4, 5); ObjetoAuto.vehiculo (); } } }

4.2 Clases abstractas: definicin, mtodos abstractos, implementacin de clases abstractas, modelado de clases abstractas. Definicin: Una clase abstracta es una clase de la cual no se pueden definir (o construir) instancias (u objetos) Evitan que los usuarios de la clase crear objetos y permiten crear interfaces que luego deben ser implementadas por las clases que hereden de la clase abstracta. Para definir una clase abstracta se utiliza la palabra clave abstract (que tambin sirve para definir mtodos y propiedades abstractos).

Ejemplos Clases Abstractas


using using using using System; System.Collections.Generic; System.Linq; System.Text;

namespace ConsoleApplication6 { public abstract class Producto { protected double precioVenta; protected double costoFabrica; protected string nombreProducto; public Producto(string nombre, double precio, double costo) { nombreProducto = nombre; costoFabrica = costo; precioVenta = precio; } public abstract string imprimirDatos(); } public class Libro : Producto { public Libro(string titulo, double precio, double costo) :base(titulo, precio,costo) { } public override string imprimirDatos() {

return "Libro: " + nombreProducto + ", Precio: " + precioVenta; } } public class DVD : Producto { public DVD(string titulo, double precio, double costo) : base(titulo, precio, costo) { } public override string imprimirDatos() { return "DVD: " + nombreProducto + " Precio: " + precioVenta; } }

class Programu { static void Main(string[] args) { Libro miLibro = new Libro("Biblioteca del programador", 54.95, 39.95); DVD miDVD = new DVD("Curso multimedia de Java", 29.95, 19.95); Console.WriteLine("Los datos de mis productos."); Console.WriteLine(miLibro.imprimirDatos()); Console.WriteLine(miDVD.imprimirDatos());

Console.WriteLine("presione <enter> para terminar."); Console.ReadLine(); } } }

Mtodos abstractos Cuando una declaracin de mtodo de instancia incluye un modificador abstract, se dice que el mtodo es un mtodo abstracto. Aunque un mtodo abstracto es tambin implcitamente un mtodo virtual, no puede tener el modificador virtual. Una declaracin de mtodo abstracto introduce un nuevo mtodo virtual pero no proporciona una implementacin del mtodo. En cambio, es necesario que las clases derivadas no abstractas proporcionen su propia implementacin mediante el reemplazo del mtodo. Debido a que un mtodo abstracto no proporciona una

implementacin real, el cuerpo-del-mtodo de un mtodo abstracto consiste simplemente en un punto y coma.


Las declaraciones de mtodos abstractos slo se permiten en clases abstractas En el ejemplo public abstract class Shape { public abstract void Paint(Graphics g, Rectangle r); } public class Ellipse: Shape { public override void Paint(Graphics g, Rectangle r) { g.DrawEllipse(r); } } public class Box: Shape { public override void Paint(Graphics g, Rectangle r) { g.DrawRect(r); } } la clase Shape define la nocin abstracta de un objeto de forma geomtrica que puede dibujarse l mismo. El mtodo Paint es abstracto porque no existe una implementacin predeterminada significativa. Las clases Ellipse y Box son implementaciones Shape concretas. Ya que estas clases no son abstractas, son necesarias para reemplazar el mtodo Paint y proporcionar una implementacin real.

4.3 Interfaces: definicin, implementacin de interfaces, herencia de interfaces. Las interfaces Java son expresiones puras de diseo. Se trata de autnticas conceptualizaciones no implementadas que sirven de gua para definir un determinado concepto (clase) y lo que debe hacer, pero sin desarrollar un mecanismo de solucin. Se trata de declarar mtodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras segn las necesidades de un programa. Por ejemplo una misma interfaz podra ser implementada en una versin de prueba de manera poco ptima, y ser acelerada convenientemente en la versin definitiva tras conocer ms a fondo el problema. Se trata de declarar mtodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras segn las necesidades de un programa.

Por ejemplo una misma interfaz podra ser implementada en una versin de prueba de manera poco ptima, y ser acelerada convenientemente en la versin definitiva tras conocer ms a fondo el problema.

Implementacin de interfaces

Una clase que implementa una interfaz puede implementar explcitamente un miembro de esa interfaz. Cuando un miembro se implementa explcitamente, no es posible obtener acceso a l por medio de una instancia de clase, sino slo a travs de una instancia de la interfaz. Este tutorial contiene dos ejemplos. El primer ejemplo ilustra cmo implementar explcitamente miembros de interfaz y obtener acceso a ellos. El segundo ejemplo muestra cmo implementar dos interfaces que presentan los mismos nombres de miembro.

Ejemplo 1
Este ejemplo declara una interfaz IDimensions y una clase Box, la cual implementa explcitamente los miembros de la interfaz Length y Width. El acceso a los miembros se realiza a travs de la instancia de interfaz myDimensions. // explicit1.cs interface IDimensions { float Length(); float Width(); }
class Box : IDimensions { float lengthInches; float widthInches; public Box(float length, float width) { lengthInches = length; widthInches = width; } // Explicit interface member implementation: float IDimensions.Length() { return lengthInches; } // Explicit interface member implementation: float IDimensions.Width() { return widthInches; } public static void Main() { // Declare a class instance "myBox": Box myBox = new Box(30.0f, 20.0f); // Declare an interface instance "myDimensions": IDimensions myDimensions = (IDimensions)myBox; // Print out the dimensions of the box: /* The following commented lines would produce compilation errors because they try to access an explicitly implemented interface member from a class instance: */

//System.Console.WriteLine("Length: {0}", myBox.Length()); //System.Console.WriteLine("Width: {0}", myBox.Width()); /* Print out the dimensions of the box by calling the methods from an instance of the interface: */ System.Console.WriteLine("Length: {0}", myDimensions.Length()); System.Console.WriteLine("Width: {0}", myDimensions.Width()); } }

4.4 Variables polimrficas (plantillas): definicin, uso y aplicaciones. Definicin: Las variables que contienen objetos son variables polimrficas. El trmino polimrfico (literalmente: muchas formas) se refiere al hecho de que una misma variable puede contener objetos de diferentes tipos (del tipo declarado o de cualquier subtipo del tipo declarado). El polimorfismo aparece en los lenguajes orientados a objetos en numerosos contextos, las variables polimrficas constituyen justamente un primer ejemplo. En trminos de programacin, el polimorfismo permite que un solo nombre de clase o de mtodo represente diferente cdigo seleccionado mediante algn mecanismo automtico. De esta forma, puesto que un nombre puede representar diferente cdigo, tambin puede representar muchos comportamientos distintos. Un lenguaje que acepta el polimorfismo es un lenguaje polimrfico. Un lenguaje monomrfico no acepta el polimorfismo, est restringido a un comportamiento esttico, porque cada nombre est ligado en forma esttica a su cdigo.

4.5 Reutilizacin de cdigo. Por mucho tiempo la reutilizacin de cdigo se haba limitado nicamente el cortado y pegado de cdigo, el programador se acordaba donde tena un cdigo igual o parecido para utilizarlo en el proceso o actividad de

programacin actual. Con la programacin estructurada se dio un gran paso para la optimizacin y ahorro en la construccin de cdigo. Para reutilizar el cdigo creamos nuevas clases pero, en lugar de partir de cero, partimos de clases, relacionadas con nuestra clase, que han sido ya creadas y depuradas. El truco est en usar las clases sin ensuciar el cdigo existente. Una forma de hacer esto es crear objetos de nuestras clases existentes dentro de la nueva clase. Esto se conoce como composicin porque la nueva clase est compuesta de objetos de clases existentes. Estamos reutilizando la funcionalidad del cdigo, y no la forma.