Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Carátula para entrega de prácticas Facultad de Ingeniería Laboratorio de docencia Laboratorios de computación salas A y B Profesor: Saavedra Hernández Honorato Ing. Asignatura: Programación Orientada a Objetos Grupo: 1 No de Práctica(s): 8 Integrante(s): Ayala Trejo Albanya Yendalli Téllez González Jorge Luis Méndez Costales Luis Enrique Villamar Cortes Juan Antonio Santana Sánchez María Yvette Zecua Salinas Juan Carlos Téllez González Jorge Luis Villamar Cortes Juan Antonio Zecua Salinas Juan Carlos No. de Equipo de cómputo empleado: --- No. de Lista o Brigada: Semestre: 2020-2 Fecha de entrega: 31/03/2020 Observaciones: CALIFICACIÓN: __________ Facultad de Ingenierı́a Programación Orientada a Objetos Índice 1. Introducción 2 2. Objetivos 3 3. Polimorfismo 3 4. Clase abstracta 7 5. Interfaces 10 5.1. Implementación múltiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.2. Herencia múltiple entre interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.3. Atributos entre las interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.4. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1 Facultad de Ingenierı́a Programación Orientada a Objetos 1. Introducción El concepto de Polimorfismo escribe múltiples y posibles estados de una única propiedad. En computación (informática), es una de las propiedades fundamentales de la programación orientada a objetos y es también una técnica utilizada por virus informáticos y gusanos para modificar partes de su código dificultando su detección. En programación orientada a objetos el Polimorfismo se refiere a la posibilidad de definir clases di- ferentes que tienen métodos o atributos denominados de forma idéntica, pero que se comportan de manera distinta. El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Ası́, nacen los conceptos de funciones polimórficas y tipos polimórficos: las primeras son aquellas funciones que pue- den evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado. Figura 1: Es posible definir clases que modelen a una persona, pero que modeles aspectos distintos. El Polimorfismo se puede clasificar en dos grandes grupos: Polimorfismo dinámico (o paramétrico): es aquel en el que no se especifica el tipo de datos sobre el que se trabaja y, por ende, se puede recibir utilizar todo tipo de datos compatible. Este tipo de polimorfismo también se conoce como programación genérica. Polimorfismo estático (o ad hoc): es aquel en el que los tipos de datos que se pueden utilizar deben ser especificados de manera explı́cita antes de ser utilizados. 2 Facultad de Ingenierı́a Programación Orientada a Objetos 2. Objetivos Implementar el concepto de polimorfismo en un lenguaje de programación orientado a objetos. A partir de una jerarquı́a de clases, implementar referencias que se comporten como diferentes obje- tos. 3. Polimorfismo Como se abordado, el Polimorfismo indica la habilidad de tener diferentes formas conceptualmente. Se tiene que mencionar el termino IS-A, que hace alusión a la pertenencia de un objeto, es decir, si se crea un objeto de tipo A, el objeto creado por tanto es un A. En Java, si un objeto puede comportarse como un IS-A puede ser considerado polimórfico; por lo anterior todos los objetos en el entorno de Java pueden ser considerados polimórficos debido a que todos se pueden comportar como objetos de su propio tipo y como objetos de la clase Objetct. La única manera de acceder a un objeto es a través de su referencia, por lo tanto, se deben tener en cuenta los siguientes puntos: Una referencia puede ser de un solo tipo y este no puede cambiarse. Una referencia es una variable y puede ser reasignada a otros objetos. El tipo de una referencia determina los métodos que pueden ser invocados del objeto, por lo que solo puede ejecutar los métodos definidos en el tipo de referencia. Una referencia se le puede asignar cualquier objeto que sea del mismo tipo con el que se declaró la referencia (polimorfismo). Para esta práctica se utilizará el ejemplo presentado en la guı́a del laboratorio, con el fin de visualizar mejor el tema desarrollado en el presente reporte. Además, se colocarán las capturas pertinentes del proyecto creado en NetBeans con el código propuesto. 3 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 2: Diagrama UML de las clases a modelar en el ejemplo. A continuación, se tiene el contenido del método principal; lo que finalmente servirá de menú de control para ejecutar e imprimir los objetos deseados. Figura 3: Método principal. Introduce una impresión de las figuras creadas. 4 Facultad de Ingenierı́a Programación Orientada a Objetos A continuación, se muestran capturas de pantalla de las clases módeladas a partir de la herencia de la clase Poligono: Figura 4: Clase principal Poligono. Figura 5: Clase hija Triangulo. 5 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 6: Clase hija Cuadrilatero. Cuando el parámetro definido es una referencia a una clase, el método es capaz de recibir un objeto de ese tipo: esto se le conoce también como polimorfismo en métodos. Un código que expresa mejor un método polimórfico es el siguiente: Figura 7: Polimorfismo sobre métodos. 6 Facultad de Ingenierı́a Programación Orientada a Objetos La ejecución de este método es la siguiente: Figura 8: Ejecución del código anterior. 4. Clase abstracta Una clase abstracta es aquella que implementa una idea o noción sobre un determinado objeto a modelar y declara sus métodos, sin llegar a implementarlos. Una restricción de Java sobre los métodos no implemen- tados consiste en que, si se realiza una declaración de un método abstracto sobre una clase, esta clase debe ser necesariamente abstracta. Su sintáxis es de la forma: Figura 9: Sintáxis de declaración de clases abstractas. Si una clase hereda de una clase abstracta, debe de implementar los métodos definidos en la clase padre. Por otra parte, las clases abstractas no pueden ser instanciadas, es decir, no permiten construir objetos de tal clase. Figura 10: Sintáxis de declaración de clases abstractas. Por otra parte, las referencias abstractas pueden contener objetos concretos que hayan hererado de la clase abstracta. 7 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 11: Creación de un objeto de tipo Triangulo, que hereda de la clase abstracta Poligono. A continuación, se transcribe el código proporcionado que implementa a la clase abstracta Poligono y las clases Cuadrilatero y Triangulo, que heredan de la clase abstracta. Figura 12: Clase abstracta Poligono. Figura 13: Clase Cuadrilatero. 8 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 14: Clase Triángulo. Figura 15: Método principal del programa. Al realizar la ejecución del programa, se obtiene la siguiente salida: Figura 16: Salida obtenida.. 9 Facultad de Ingenierı́a Programación Orientada a Objetos 5. Interfaces Una interfaz es muy similar a una clase abstracta, en la cual se pueden especificar uno o más métodos que no tienen cuerpo, es decir, una clase donde todos los métodos son abstractos (no se implementan). Una interfaz especifica lo que se debe hacer, pero no cómo hacerlo, por tanto, no es posible crear instancias de una interfaz. Para las interfaces, se utiliza la palabra reservada interface en lugar de class. Se puede definir pública o sin modificar de acceso, ya que los modificadores tienen la misma utilidad que en las clases. Su sintaxis es la siguiente: Figura 17: El voltaje es el mismopara cada uno de los capacitores en paralelo.. La forma general de una interfaz tiene la siguientes particularidad: los métodos se declaran utili- zando solo su tipo de devolución y firma, por lo cual, son métodos abstractos y públicos. Las variables declaradas en la interfaz no son variables de instancias. En cambio, son implı́citamente public, static, o final, y deben de inicializarse. Una vez creada, una o más clases pueden implementar dicha interfaz. Para implementar una interfaz se utiliza la palabra reservada implements. La clase que implementa la interfaz tiene la obligación de de- finir los métodos que la interfaz declaró. Los métodos que implementan una interfaz deben ser declarados públicos. Su sintaxis es la siguiente: Figura 18: Sintáxis de implementación de una interfaz sobre una clase. A continuación. se muestra un ejemplo de una interfaz de instrumentos musicales. Posteriormente, se crea una clase que implementa dicha interfaz para, finalmente, instanciar la clase y escribir en pantalla una mensaje de estado del objeto creado. 10 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 19: Ejemplo de una interfaz de instrumentos. La clase InstrumentoViento implementa la interfaz. Figura 20: Salida obtenida con el ejemplo anterior. 11 Facultad de Ingenierı́a Programación Orientada a Objetos 5.1. Implementación múltiple Una clase puede llegar a implementar una o más interfaces, el único inconveniente es que dentro de la clase se debe Implementar todos y cada uno de los métodos de las interfaces. Cabe señalar que el orden de la implementación no es relevante para tal propósito. Su sintaxis es la siguiente: Figura 21: Ejemplo. 5.2. Herencia múltiple entre interfaces Las interfaces pueden llegar a heredar de otras interfaces, y a diferencias de las clases, una interfaz puede heredar de una o muchas más interfaces, por lo cual si existe la herencia múltiple entre las interfaces y Se Aplican las mismas reglas que en la herencia. Su sintaxis es la siguiente: Figura 22: Sintáxis de herencia múltiple entre interfaces. 5.3. Atributos entre las interfaces En una interfaz, todos los atributos que se encuentren dentro de ella deben de ser públicos, estáticos y finales. Esta caracterı́stica puede llegar a ser muy útil en muchos casos. El siguiente ejemplo implementa una interfaz de Meses del año que permite recuperar datos asociados al número del mes y su nombre: 12 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 23: Atributos de una interfaz manipulados en un método principal de ejecución. Figura 24: Salida obtenida con el ejemplo anterior. 5.4. Conclusiones Durante el desarrollo de la práctica, nos dimos cuenta de la importancia que tiene el uso del polimorfismo en la programación orientada a objeto, además del correcto uso de las interfaces y las clases abstractas. Aunque al principio costó un poco entender cómo funcionaban, ya que su implementación es distinta a la que estamos acostumbrados con las clases normales, finalmente empleando conocimientos de prácticas pasadas entendimos el porque estas son distintas y el cómo poder implementarlas para agilizar el proceso de programación. 13 Facultad de Ingenierı́a Programación Orientada a Objetos Referencias [1] Polimorfismo. Recuperado de: http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/ poo_p8.pdf. Fecha de consulta: 28/03/2020. Los créditos de las fotografı́as pertenecen a sus respectivos autores. c© LATEX 14 http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/poo_p8.pdf http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/poo_p8.pdf
Compartir