Está en la página 1de 18

INSTITUTO TECNOLOGICO DE TLAXIACO

PROGRAMACIN ORIENTADA A OBJETOS

UNIDAD IV
POLIMORFISMO

Facilitador: Neira Snchez Rojas Alumno: Oscar Gutirrez Lpez

II semestre A

Ing. Sistemas Computacionales

INDICE
4.0 Introduccin. 2 4.1 Definicin. 3 4.2 Clases abstractas: definicin, mtodos abstractos, implementacin de clases abstractos, modelados de las clases abstractos.. 4

4.3 Interfaces: definicin, implementacin de interfaces, herencia de interfaces.. 6

4.4 Variables polimrficas (plantillas): definicin, uso y aplicaciones... 12 4.5 Reutilizacin de cdigo 15

Conclusin y bibliografa 16

Introduccin:
En el presente trabajo hablaremos del polimorfismo, que es uno de los fundamentos para cualquier lenguaje orientado a Objetos. Esta palabra que significa "mltiples formas", permite a una interface ser usada por una clase general de acciones. La accin concreta a llevar a cabo se determina por la naturaleza especfica de la situacin. En ocasiones, cuando se lleva a cabo el procesamiento del polimorfismo es necesario programar en forma especfica. Con el polimorfismo es posible disear e implementar sistemas que puedan extenderse fcilmente. Pueden agregarse nuevas clases con pocas modificaciones (o si acaso ninguna) a las porciones genricas del programa, siempre y cuando esa clases formen parte de la jerarqua de herencia que el programa procese en forma genrica. Las nicas partes de un programa que deben alterarse para dar cabida a nuevas clases son aquellos componentes del programa que requiera de un conocimiento directo de las nuevas clases que el programador agregar a la jerarqua. En trminos ms generales, el concepto de polimorfismo a menudo se expresa por la frase "una interfaz, mltiples mtodos". Esto significa que es posible disear una interfaz genrica para un grupo de actividades relacionadas. Es evidente que esta forma de trabajar ayuda a reducir la complejidad del diseo, pues permite usar una misma interfaz para especificar un conjunto de acciones similares. Ser el compilador el que tendr que seleccionar la accin concreta (esto es, el mtodo) para aplicar en cada situacin. Como estudiantes de Ingeniera de Sistemas, nosotros tenemos que conocer la interfaz general. En el siguiente apartado se relata casos prcticos que ayudar a entender los beneficios del polimorfismo. En programacin orientada a objetos se denomina polimorfismo a la capacidad que tienen objetos de diferentes clases de responder al mismo mensaje o evento. Esto significa que puede haber muchos mensajes con el mismo nombre, en diferentes clases. Cada Clase responde al mensaje con su cdigo propio (o mtodo). Tambin se puede aplicar a la propiedad que poseen algunas operaciones de tener un comportamiento diferente dependiendo del objeto (o tipo de dato) sobre el que se aplican. El polimorfismo slo es aplicable si cualquiera de los posibles tipos de objetos que se invoquen tienen definida la operacin empleada, y los tipos de datos de entrada requeridos y los valores devueltos, ms all de cmo se empleen o calculen, son compatibles entre s.

4.1 Definicin.
Polimorfismo El polimorfismo es un concepto de la programacin orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma especfica. En general nos sirve para programar objetos con caractersticas comunes y que todos estos compartan la misma superclase en una jerarqua de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programacin. A travs de la herencia, una clase puede utilizarse como ms de un tipo; puede utilizarse como su propio tipo, cualquier tipo base o cualquier tipo de interfaz si implementa interfaces. Esto se denomina polimorfismo. En C#, todos los tipos son polimrficos. Los tipos se pueden utilizar como su propio tipo o como una instancia de Object, porque cualquier tipo trata automticamente a Object como tipo base. El polimorfismo no slo es importante para las clases derivadas, sino tambin para las clases base. Cualquiera que utilice la clase base podra, de hecho, estar utilizando un objeto de la clase derivada que se haya convertido en el tipo de clase base. Los diseadores de una clase base pueden anticipar qu aspectos de su clase base cambiarn probablemente para un tipo derivado. Por ejemplo, es posible que una clase base para automviles contenga un comportamiento sujeto a cambios si el automvil en cuestin es un vehculo familiar o uno descapotable. Una clase base puede marcar esos miembros de clase como virtuales, lo cual permite que las clases derivadas que representan automviles descapotables y vehculos familiares reemplacen ese comportamiento. Cuando una clase derivada hereda de una clase base, obtiene todos los mtodos, campos, propiedades y eventos de la clase base. Para cambiar los datos y el comportamiento de una clase base, existen dos opciones: se puede reemplazar el miembro base por un nuevo miembro derivado o se puede reemplazar un miembro base virtual. Para reemplazar un miembro de una clase base por un nuevo miembro derivado, se requiere la palabra clave new. Si una clase base define un mtodo, campo o propiedad, la palabra clave new se utiliza para crear una nueva definicin de ese mtodo, campo o propiedad en una clase derivada. La palabra clave new se coloca antes del tipo de valor devuelto de un miembro de clase que se reemplaza.

4.2 Clases abstractas: definicin, mtodos abstractos, implementacin de clases abstractos, modelados de las clases abstractos.
Son clases de las que no es posible crear instancias; frecuentemente, estn implementadas slo parcialmente o no estn implementadas. Una clase abstracta es aquella que forzosamente se ha de derivar si se desea que se puedan crear objetos de la misma o acceder a sus miembros estticos. El modificador abstract se utiliza para indicar que una clase est incompleta y que slo se va a utilizar como una clase base. Una clase abstracta se diferencia de una clase no abstracta en lo siguiente: No se puede crear una instancia de una clase abstracta directamente, y es un error en tiempo de compilacin utilizar el operador new en una clase abstracta. Aunque es posible tener variables y valores cuyos tipos en tiempo de compilacin sean abstractos, tales variables y valores sern null o contendrn referencias a instancias de clases no abstractas derivadas de los tipos abstractos. Se permite que una clase abstracta contenga miembros abstractos, aunque no es necesario. No se puede sellar una clase abstracta. Cuando una clase no abstracta se deriva de una clase abstracta, la clase no abstracta debe incluir implementaciones reales de todos los miembros abstractos heredados; por lo tanto, reemplaza a estos miembros abstractos. En el ejemplo: abstract class A { public abstract void F(); } abstract class B: A { public void G() {} } class C: B { public override void F() { // actual implementation of F } } La clase abstracta A define el mtodo abstracto F. La clase B define un mtodo adicional G, pero no proporciona una implementacin de F, por lo que B tambin debe ser declarada como abstracta. La clase C reemplaza F y proporciona una implementacin real. Dado que no hay miembros abstractos en C, est permitido que C sea no abstracta, aunque no es necesario.

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. 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. Implementacin de clases abstractas. El modificador abstract se utiliza para indicar que una clase est incompleta y que slo se va a utilizar como una clase base. Una clase abstracta se diferencia de una clase no abstracta en lo siguiente: No se puede crear una instancia de una clase abstracta directamente, y es un error en tiempo de compilacin utilizar el operador new en una clase abstracta. Aunque es posible tener variables y valores cuyos tipos en tiempo de compilacin

sean abstractos, tales variables y valores sern null o contendrn referencias a instancias de clases no abstractas derivadas de los tipos abstractos. Se permite que una clase abstracta contenga miembros abstractos, aunque no es necesario. No se puede sellar una clase abstracta. Cuando una clase no abstracta se deriva de una clase abstracta, la clase no abstracta debe incluir implementaciones reales de todos los miembros abstractos heredados; por lo tanto, reemplaza a estos miembros abstractos. En el ejemplo abstract class A { public abstract void F(); } abstract class B: A { public void G() {} } class C: B { public override void F() { // actual implementation of F } }

La clase abstracta A define el mtodo abstracto F. La clase B define un mtodo adicional G, pero no proporciona una implementacin de F, por lo que B tambin debe ser declarada como abstracta. La clase C reemplaza F y proporciona una implementacin real. Dado que no hay miembros abstractos en C, est permitido que C sea no abstracta, aunque no es necesario.

4.3 Interfaces: definicin, implementacin de interfaces, herencia de interfaces.


Una interfaz contiene slo las firmas de mtodos, delegados o eventos. La implementacin de los mtodos se hace en la clase que implementa la interfaz, como se muestra en el ejemplo siguiente:

interface ISampleInterface { void SampleMethod(); } class ImplementationClass : ISampleInterface { // Explicit interface member implementation: void ISampleInterface.SampleMethod() { // Method implementation. }

static void Main() { // Declare an interface instance. ISampleInterface obj = new ImplementationClass(); // Call the member. obj.SampleMethod(); } }
Una interfaz puede ser miembro de un espacio de nombres o de una clase, y puede contener firmas de los siguientes miembros: Mtodos Propiedades Indizadores Eventos Una interfaz puede heredar de una o varias interfaces base. Cuando una lista de tipos base contiene una clase base e interfaces, la clase base debe aparecer primero en la lista. Una clase que implementa una interfaz puede implementar explcitamente miembros de esa interfaz. Slo se puede tener acceso a un miembro explcitamente implementado mediante una instancia de la interfaz, y no mediante una instancia de clase. En el siguiente ejemplo, se muestra la implementacin de una interfaz. En este ejemplo, la interfaz IPoint contiene la declaracin de propiedades, la cual es responsable de establecer y obtener los valores de los campos. La clase Point contiene la implementacin de las propiedades. // Interface implementation using System; interface IPoint { // Property signatures: int x { get; set; } int y { get; set; } } class Point : IPoint { // Fields:

private int _x; private int _y; // Constructor: public Point(int x, int y) { _x = x; _y = y; } // Property implementation: public int x { get { return _x; } set { _x = value; } } public int y { get { return _y; } set { _y = value; } } } class MainClass { static void PrintPoint(IPoint p) { Console.WriteLine("x={0}, y={1}", p.x, p.y); } static void Main() { Point p = new Point(2, 3); Console.Write("My Point: "); PrintPoint(p); } }

Resultado: My Point: x=2, y=3

Las interfaces se definen utilizando la palabra clave interface. Por ejemplo: interface IComparable { int CompareTo(object obj); } Las interfaces describen un grupo de comportamientos relacionados que pueden pertenecer a cualquier clase o estructura. Las interfaces pueden estar compuestas de mtodos, propiedades, eventos, indizadores o cualquier combinacin de estos cuatro tipos de miembros. Una interfaz no puede contener campos. Los miembros de interfaz son automticamente pblicos. Al igual que las clases se pueden heredar de una clase base o estructura, las clases y estructuras se pueden heredar de interfaces, con dos excepciones: Una clase o estructura puede heredar ms de una interfaz. Cuando una clase o la estructura hereda una interfaz, hereda slo los nombres de mtodo y las firmas, ya que la propia interfaz no contiene ninguna implementacin. Por ejemplo: public class Minivan : Car, IComparable { public int CompareTo(object obj) { //implementation of CompareTo return 0; //if the Minivans are equal } } Para implementar un miembro de interfaz, el miembro correspondiente de la clase debe ser pblico, no esttico y tener el mismo nombre y la misma firma que el miembro de interfaz. Las propiedades e indizadores de una clase pueden definir descriptores de acceso adicionales para una propiedad o indizador definidos en una interfaz. Por ejemplo, una interfaz puede declarar una propiedad con un descriptor de acceso get, pero la clase que implementa la interfaz puede declarar la misma propiedad con descriptores de acceso get y set. Sin embargo, si la propiedad o el indizador utiliza una implementacin explcita, los descriptores de acceso deben coincidir. Las interfaces y los miembros de interfaz son abstractos; las interfaces no proporcionan una implementacin predeterminada. Para obtener ms informacin, vea Clases y miembros de clase abstractos y sellados (Gua de programacin de C#).

La interfaz IComparable informa al usuario del objeto de que ste se puede comparar con otros objetos del mismo tipo y el usuario de la interfaz no necesita saber cmo se implementa. Las interfaces pueden heredar otras interfaces. Es posible que una clase herede una interfaz varias veces, a travs de las clases base o interfaces que hereda. En ese caso, la clase slo puede implementar la interfaz una vez, siempre que sta se declare como parte de la nueva clase. Si la interfaz heredada no est declarada como parte de la nueva clase, la clase base que la declar proporcionar su implementacin. Es posible que una clase base implemente miembros de interfaz a travs de miembros virtuales. En ese caso, la clase que hereda la interfaz puede cambiar el comportamiento de la interfaz reemplazando los miembros virtuales.

Una interfaz tiene las siguientes propiedades: Una interfaz es similar a una clase base abstracta. Cualquier tipo no abstracto que hereda la interfaz debe implementar todos sus miembros. No se pueden crear instancias directamente de una interfaz. Las interfaces pueden contener eventos, mtodos, indizadores y pr opiedades. Las interfaces no contienen implementaciones de mtodos. Las clases y estructuras se pueden heredar de ms de una interfaz. Una interfaz se puede heredar de varias interfaces. Si una clase implementa dos interfaces que contienen un miembro con la misma firma, la implementacin de ese miembro en la clase har que ambas interfaces usen ese miembro como implementacin. Por ejemplo: interface IControl { void Paint(); } interface ISurface { void Paint(); } class SampleClass : IControl, ISurface { // Both ISurface.Paint and IControl.Paint call this method. public void Paint() { } } Sin embargo, s los miembros de dos interfaces no realizan la misma funcin, esto puede llevar a una implementacin incorrecta de una o ambas interfaces. Es posible implementar un miembro de interfaz explcitamente, creando un miembro de clase que slo se llama a travs de la interfaz y es especfico de sta. Esto se puede

10

llevar a cabo asignando al miembro de clase el nombre de la interfaz y un punto. Por ejemplo: public class SampleClass : IControl, ISurface { void IControl.Paint() { System.Console.WriteLine("IControl.Paint"); } void ISurface.Paint() { System.Console.WriteLine("ISurface.Paint"); } } El miembro de clase IControl.Paint slo est disponible a travs de la interfaz IControl, mientras que ISurface.Paint slo est disponible a travs de ISurface. Ambas implementaciones de mtodo son independientes y ninguna est directamente disponible en la clase. Por ejemplo: SampleClass obj = new SampleClass(); //obj.Paint(); // Compiler error. IControl c = (IControl)obj; c.Paint(); // Calls IControl.Paint on SampleClass. ISurface s = (ISurface)obj; s.Paint(); // Calls ISurface.Paint on SampleClass.

La implementacin explcita tambin se usa para resolver casos donde cada una de las dos interfaces declara miembros diferentes del mismo nombre como propiedad y mtodo:

interface ILeft { int P { get;} } interface IRight { int P(); } Para implementar ambas interfaces, una clase tiene que utilizar implementacin explcita, ya sea para la propiedad P, el mtodo P o ambos, con el fin de evitar un error del compilador. Por ejemplo:

class Middle : ILeft, IRight { public int P() { return 0; }

11

int ILeft.P { get { return 0; } } }

4.4 Variables polimrficas (plantillas): definicin, uso y aplicaciones.


Es la capacidad que tiene los objetos de comportarse de mltiples formas. Polimorfismo: Upcasting nicamente tienen sentido por la existencia de la herencia. El polimorfismo (o upcasting) consiste en la posibilidad de que una referencia a objetos de una clase pueda conectarse tambin con objetos de descendientes de sta. El sentido del polimorfismo es realizar una generalizacin, olvidar los detalles concretos de uno o varios objetos de distintas clases y buscar un punto comn a todos ellos en un ancestro Se trata de algo que realiza comnmente la mente humana durante el proceso de Razonamiento. Las conexiones polimrficas se realizan a veces de manera implcita en el paso de argumentos a una operacin. Puede contener referencias a objetos de diferentes clases. El polimorfismo hace posible que un usuario pueda aadir nuevas clases a una jerarqua sin modificar o recompilar el cdigo escrito en trminos de la clase base. Permite programar a nivel de clase base utilizando objetos de clases derivadas Se puede clasificar el polimorfismo en dos grandes clases: Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo no incluye ningn tipo de especificacin sobre el tipo de datos sobre el que se trabaja. As, puede ser utilizado a todo tipo de datos compatible. Polimorfismo esttico (o polimorfismo ad hoc) es aqul en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados. El polimorfismo dinmico unido a la herencia es lo que en ocasiones se conoce como programacin genrica. Tambin se clasifica en herencia por redefinicin de mtodos abstractos y por mtodo sobrecargado. El segundo hace referencia al mismo mtodo con diferentes parmetros. En trminos de programacin, el polimorfismo permite que un solo nombre de clase o de mtodo represente diferente cdigo seleccionado mediante algn mecanismo automtico.

12

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. public class ObjetoPersonalidad { public String hablar() { return "Soy un objeto."; } } Otro ejemplo: public class ObjetoPesimista extends ObjetoPersonalidad { public String hablar() { return "El vaso est medio vacio."; } }

public class ObjetoOptimista extends ObjetoPersonalidad { public String hablar() { return "El vaso est medio lleno."; } } public public class ObjetoIntrovertido extends ObjetoPersonalidad { public String hablar() { return Hola."; } }

public class ObjetoExtrovertido extends ObjetoPersonalidad { public String hablar() { return "Hola, bla, bla, bla, sabas que bla, bla, bla."; } } Estas clases conforman una jerarqua de herencia. La clase base, ObjetoPersonalidad, declara un mtodo: hablar(). Cada subclase redefine hablar() y devuelve su propio mensaje con base en su personalidad. La jerarqua establece relaciones de sustituibilidad entre los subtipos y su madre. public class EjemploPersonalidad { public static void main( String [] args ) { ObjetoPersonalidad personalidad = new ObjetoPersonalidad(); ObjetoPesimista pesimista = new ObjetoPesimista(); ObjetoOptimista optimista = new ObjetoOptimista();

13

ObjetoIntrovertido introvertido = new ObjetoIntrovertido(); ObjetoExtrovertido extrovertido = new ObjetoExtrovertido(); // la sustituibilidad permite hacer lo siguiente ObjetoPersonalidad [] personalidades = new ObjetoPersonalidad[5]; personalidades[0] = personalidad; personalidades[1] = pesimista; personalidades[2] = optimista; personalidades[3] = introvertido; personalidades[4] = extrovertido; _ // el polimorfismo hace que el ObjetoPersonalidad parezca tener muchos comportamientos distintos System.out.println( "El ObjetoPersonalidad[0] habla: " + personalidades[0].hablar()); System.out.println( "El ObjetoPersonalidad[1] habla: " + personalidades[1].hablar()); System.out.println( "El ObjetoPersonalidad[2] habla: " + personalidades[2].hablar()); System.out.println( "El ObjetoPersonalidad[3] habla: " + personalidades[3].hablar()); System.out.println( "El ObjetoPersonalidad[4] habla: " + personalidades[4].hablar()); } } __ El resultado de la ejecucin es el siguiente: El ObjetoPersonalidad[0] habla: Soy un objeto. El ObjetoPersonalidad[1] habla: El vaso est medio vaco. El ObjetoPersonalidad[2] habla: El vaso est medio lleno. El ObjetoPersonalidad[3] habla: Hola. El ObjetoPersonalidad[4] habla: Hola, bla, bla, bla, sabas que bla, bla, bla. Process exited with exit code 0. El mtodo hablar() de ObjetoPersonalidad tiene muchos comportamientos distintos. Aun cuando ObjetoPersonalidad define que hablar() imprima Soy un objeto., ObjetoPersonalidad exhibe ms de un comportamiento. Cada instancia de ObjetoPersonalidad se comporta de manera distinta cuando el main() llama al mtodo hablar(). sta es la esencia del comportamiento polimrfico; parece que ObjetoPersonalidad, el nombre, tiene muchos comportamientos. La variable personalidades de la clase EjemploPersonalidad es un ejemplo de variable polimrfica. Una variable polimrfica es aquella que puede contener muchos tipos distintos.

14

4.5 Reutilizacin de cdigo.


Por mucho tiempo la reutilizacin de cdigo se haba limitado nicamente al 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. Con los tipos abstractos de datos tambin se dio un buen Avance en la abstraccin y solucin a situaciones donde se necesitaba una solucin computacional. Los paradigmas presentes en la ingeniera del aprovechamiento ms eficiente del cdigo ya construido. software permiten un

Uno de estos paradigmas es la Programacin Orientada a Objetos (OOP). Otro factor que permite la reutilizacin de cdigo es la programacin genrica y la programacin Dinmica. La programacin por componentes Tambin hace buen aporte para la Reutilizacin de cdigo y ahorro de esfuerzo, tiempos en tareas de construccin de software. No se puede olvidar las Metodologas, mtodos, tcnicas, estrategias y lenguajes de modelado de la ingeniera del software algunas de estas son la programacin extrema, Rup, MSF,Uml-lenguaje de modelado,SCRUM5,Crystal Methodologies,Dynamic Systems Development Method7 (DSDM), Adaptive Software Development8 (ASD),Feature -Driven Development9 (FDD), Lean Development10 (LD), entre otras. Otra punto importante sera revisar las teoras importantes sobre Arquitecturas de Software, donde dependiendo del sistema a construir podemos seleccionar una u otra arquitectura. La arquitectura a grandes rasgos son los Elementos, antes llamados componentes, las relaciones de estos componentes, su adecuada agregacin, unin e interrelacin para formar un todo. Entonces cuando se habla de reutilizacin de cdigo se busca el ahorro de tiempo y esfuerzo y la Ingeniera del Software evoluciona para brindar nuevas y mejores estrategias para la industria del software. public class Cronometro { Horas h;

15

Minutos m; Segundos s; String cadena; int seg,min,hor; public Cronometro() { seg=0; min=0; hor=0; h = new Horas(); m = new Minutos(); s = new Segundos(); cadena = new String("0 : 0 : 0"); } public String avanzar(){ seg = s.forward(); if(seg==0){ min=m.forward(); if(min==0){ hor=h.forward(); } } cadena = hor + " : " + min + " : " + seg; return cadena; } public String reset(){ seg = s.reset(); min = m.reset(); hor = h.reset(); cadena = hor + " : " + min + " : " + seg; return cadena; } }

Conclusin:
En conclusin la herencia es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene de que la subclase contiene los atributos y mtodos de la clase primaria. La principal ventaja que tiene la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, que luego se aplican a los atributos y mtodos heredados.

Bibliografa:

16

http://www.estructurayprogramacion.com/materias/programacion-orientada-a-objetos/ http://fjglez90.blogspot.mx/2012/06/unidad-4-polimorfismo.html http://www.unirioja.es/cu/jearansa/0910/archivos/EIPR_Tema04.pdf http://odelys2003.wordpress.com/category/programacion-orientada-a-objetos/

17

También podría gustarte