Resumen, introducción y conclusiones - Práctica 7 PDF

Title Resumen, introducción y conclusiones - Práctica 7
Author Denilson Carlos Ala Samayani
Course Metodología de la programación
Institution Universidad Católica de Santa María
Pages 3
File Size 72.4 KB
File Type PDF
Total Downloads 489
Total Views 641

Summary

Clases Abstractas, Interfaces, Funciones Virtuales,Remplazo y refinamiento en C++ResumenEn el desarrollo de un programa orientado a objetos, se nos permite utilizar varios mecanismos que le dan coherencia y clasificación al código que desarrollamos. Por ejemplo, en una clase “Figura” no posee elemen...


Description

Clases Abstractas, Interfaces, Funciones Virtuales, Remplazo y refinamiento en C++ Resumen En el desarrollo de un programa orientado a objetos, se nos permite utilizar varios mecanismos que le dan coherencia y clasificación al código que desarrollamos. Por ejemplo, en una clase “Figura” no posee elementos, en cambio las clases que descienden de ella como ‘Triangulo’ o ‘Cuadrilátero’ si lo poseen; esto demuestra un tipo de organización eficiente relacionado con la realidad que se logra al utilizar clases abstractas. Como las clases abstractas no instancian objetos resulta útil su uso para jerarquizar elementos en la vida real, esto es debido a que tienen implementado en su ámbito al menos un método virtual puro (método igualado a ‘0’ en su declaración). En ciertas circunstancias una clase puede solo especificar métodos virtuales puros, a estos se les denomina “clases completamente abstractas” que en términos del Lenguaje Java reciben el nombre de ‘interfaces’. Al igual que una clase abstracta no instancian objetos, además se les utilizan para que otras clases no puedan modificar los métodos de forma directa de la clase que se heredan. Dentro de los pilares de la Programación orientada a objetos (POO) encontramos a la herencia y el polimorfismo. Sobre la herencia, se conoce que realiza una copia de los atributos y métodos pertenecientes a una clase base para que lo puedan utilizar clases descendientes de ella. Sin embargo, en las clases derivadas se suele necesitar una versión diferente de un método heredado, pero con la misma firma para desarrollar ‘polimorfismo’ en el programa; por tal motivo, se utilizan los métodos virtuales que avisan al compilador a tomar decisiones de cual método ejecutar en la ejecución del programa. En el caso del reemplazo y refinamiento su implementación, en un programa, se realiza a través de los métodos de las clases derivadas que manejan. Con el propósito de anular el método de la clase base usando la misma firma o invocando al método de la clase base en la clase derivada y agregarle mayor funcionalidad. A todo lo mencionado, podemos confirmar la existencia de una variedad de mecanismos en el Lenguaje C++ que facilitan el desarrollo de la herencia y el polimorfismo al construir un programa dinámico. Por tal motivo, este informe aludirá a dar una explicación de las situaciones (experiencias prácticas) donde se puedan aplicar estos mecanismos, relacionados a dos pilares importantes de la POO, en miembros (atributos y métodos) de una clase.

Introducción Los estudios que se realizan de la Programación Orientada a Objetos (POO), nos explican y demuestran el concepto de polimorfismo en las jerarquías de clases durante la herencia. Su aplicación nos permite “programar en

general” en vez de “programar de manera específica”. Además, con el polimorfismo podemos diseñar e implementar sistemas que puedan extenderse con facilidad; pueden agregarse nuevas clases con sólo modificar un poco los sectores generales del programa, siempre y cuando las nuevas clases sean parte de la jerarquía de clases que el programa procesa en forma genérica. En alguno de sus estudios también señalan los beneficios de una utilidad práctica que corresponde al desarrollo de no instanciar objetos de una cierta clase, ya que mejora la organización en la jerarquía de clases (árbol de clasificación), asimismo este tipo de desarrollo en clases llevan a cabo la subtificación. En el Lenguaje C++ podemos expresar a las clases de las cuales no se pueden definir instancias (objetos) como “clases abstractas”. Estas clases en C++ sirven como clase base para otras clases a las que generalmente se conoce como clases "concretas”, ya que pueden compartir sus atributos y métodos para ser manipulados por los objetos de las clases derivadas mediante la herencia. La característica que lo distingue, es la de poseer por lo menos un método virtual puro, y de manera equivalente cualquier clase que tenga por lo menos un método virtual puro es considerada abstracta y, por lo tanto, no pueden declararse objetos de esa clase. Como C++ no dispone de ‘interfaces’, tal como existen en Lenguaje Java, se simuló su mecanismo por medio de "clases completamente abstractas". Una interfaz (clase completamente abstracta), a diferencia de las clases abstractas, no tiene variables ni métodos miembros de la clase, solo posee las declaraciones de métodos virtuales puros. A través de las interfaces se denota una operatividad evidente y similar que una clase abstracta que, al no poder ser instanciada, no tiene sentido de implementación hasta que una serie de clases que heredan de ella la implementan completamente y les dan un significado a todos sus métodos. Para un programa la implementación del polimorfismo en tiempo de ejecución es logrado por una combinación de dos características: Herencia y funciones virtuales. Por esta razón, cuando una clase perteneciente a una jerarquía de herencia incluye en su ámbito un método virtual recibe el nombre de ‘clase polimórfica’. Al anteponer la palabra clave ‘virtual’ a un método de clase, estamos indicando que será polimórfica; es decir, tendrá un comportamiento diferente por cada nivel de herencia donde se le declare ya que por términos de operatividad una clase derivada necesita modificar el método que derivo de forma distinta al mismo método declarado en la clase base. Los métodos virtuales, además de exhibir el polimorfismo, pretenden mejorar la organización en la jerarquía de clases al momento de llamar a un método específico en la ejecución del programa, mediante el uso de la técnica de enlace dinámico o tardío. Incluso, se debe tener en cuenta las varias restricciones existentes cuando se declara un método como ‘virtual’. Hasta ahora, los programadores novatos utilizan la herencia como un modelo práctico para reutilizar métodos y atributos declarados en una clase

base hacía una o varias clases derivadas de esta que necesitan implementarlas. Durante este mecanismo consideramos 2 situaciones diferentes, la 1° situación consiste al agregar más atributos en la clase derivada se consigue aumentar las características que se modelan de la clase base, particularizando las características de la clase derivada; el mismo efecto ocurre, en la 2° situación, al agregar más métodos ya que hacemos que la clase derivada sea más especializada que su clase base. Según estas dos situaciones se puede optar por añadir nuevos métodos/atributos propios de la clase derivada, o modificar los métodos heredados de la clase base. Estas acciones, sobre los miembros de una clase, en C++ se le considera ‘refinamiento’ y ‘reemplazo’. En fin, teniendo conocimiento previo de los mecanismos utilizados para el desarrollo del polimorfismo y la herencia en base a la Programación Orientada a Objetos (POO), en la siguiente sección se evidenciarán las observaciones realizadas.

Conclusiones Conclusiones de la práctica: 







En las clases prácticas, se observó situaciones concretas donde las clases abstractas requerían su implementación y correcta declaración en el desarrollo de programas. Así pues, como estudiantes pudimos comprender las diferencias en la definición entre una clase abstracta y una clase ordinaria, asimismo, se nos resaltó los efectos colaterales al no definirse los métodos virtuales puros que contienen las clases abstractas sobre las clases que lo heredan. Con respecto a las interfaces, se les puede calificar como otra faceta superior de las clases abstractas que, además de no instanciar objetos, sus únicos miembros son clases virtuales puras. Sin embargo, su uso es particularmente útil debido a que implementa una mayor clasificación en la jerarquía de clases (herencia). Los métodos (funciones) virtuales comparten algunos aspectos de los métodos miembros de una clase; sin embargo, estos permiten que su definición se modifique en los distintos niveles de la herencia en una jerarquía de clases, es decir cuando se desea una operatividad distinta a la establecida, los métodos que están declarados como virtuales pueden crear su propia definición e implantación sin perjuicio de otras clases. Los mecanismos de ‘reemplazo’ y ‘refinamiento’ son interpretados de forma única en los métodos de una clase derivada. Las funciones que cumplen en el Lenguaje C++ le otorgan el permiso de preservar y ocultar la funcionalidad de los métodos para luego implementarlos, según las necesidades del programador, en el programa....


Similar Free PDFs