Logo Studenta

3.1 Bibliotecas de Clases En términos generales se define una biblioteca de clases como una colección de componentes reutilizables relativas a un d...

3.1 Bibliotecas de Clases En términos generales se define una biblioteca de clases como una colección de componentes reutilizables relativas a un dominio de aplicación o independientes de dominio que sirven como elementos constructivos de aplicaciones. En principio las bibliotecas de clases más utilizadas son independientes del dominio de aplicación y suelen ser suministradas por los fabricantes de compiladores o por terceros. Ejemplos del último caso son las bibliotecas de tipos abstractos de datos donde se ofrecen abstracciones estructurales de tipo pilas, colas, listas, bolsas, anillos etc [Booch 94]. Bibliotecas de clases específicas de dominio también existen. Existen en dominios diferentes como los financieros, investigación operativa, control de tráfico aéreo o comunicaciones. Nuestra experiencia previa se centró en el dominio de navegación de aviones [Fernández 91] y ejecutivos de tiempo real [Puente 92]. Booch [Booch 94]define las propiedades que debería tener una biblioteca de clases para facilitar su reutilización: • Completa. La biblioteca de clases debe proporcionar familias de clases que tengan un interfaz común pero posibilitando diferentes implementaciones. • Adaptable. Todos los aspectos específicos de la plataforma deben estar identificados y aislados. • Eficiente. Se debe buscar la eficiencia en compilación, permitiendo el fácil ensamblaje de los componentes y en ejecución, haciendo una optima utilización de las características del lenguaje. • Segura respecto a los tipos. Permitiendo que las suposiciones estáticas respecto al comportamiento de una clase puedan reforzarse por el sistema de compilación. • Simple. La biblioteca debe usar una organización clara y consistente que facilite la identificación y selección de clases concretas. • Extensible. Se ha de admitir la adición de nuevas clases. El modelo de objetos se basa en cuatro principios fundamentales y tres secundarios, estos últimos no son esenciales al modelo de objetos [Booch 96]. Los principios fundamentales son : Abstracción, encapsulamiento, modularidad y jerarquía. Los principios secundarios son tipificación, concurrencia y persistencia. El creador de una biblioteca de clases tiene que tener en cuenta como son soportados estos principios en el lenguaje de programación utilizado y en función de ello definir una estrategia para implementar los aspectos variables del dominio en las diferentes clases. Los puntos de variabilidad de los componentes son aquellos aspectos que denotan particularidades que distinguen a las aplicaciones dentro del dominio. Se pueden utilizar diversas técnicas de la orientación a objetos para permitir la implementación de la variabilidad en los componentes. Las técnicas posibles son: • Especialización. Utilizando los mecanismos de herencia soportados por el lenguaje. • Extensión. Utilizando la composición de componentes . • Parametrización. Esta técnica permite definir un tipo sin especificar todos los otros tipos que este usa. Los tipos no especificados son suministrados como parámetros en el punto de uso. La herencia permite definir la implementación de una clase en términos de otra. Esta reutilización se le suele denominar de “caja blanca” porque permite que las interioridades de los ancestros sean conocidas por sus descendientes. La herencia se define estáticamente en tiempo de compilación y es relativamente fácil de aplicar. La herencia tiene el inconveniente que en cierta medida no cumple el principio de encapsulamiento, por lo que ha de ser utilizada con precaución. La composición es una alternativa a la herencia . En la composición se obtiene una nueva funcionalidad ensamblando o componiendo objetos. Esto requiere que los objetos tengan bien definidas sus interfaces. Se suele conocer como reutilización de “caja negra” porque los objetos no conocen los detalles internos de los otros. La composición se puede realizar en tiempo de ejecución. Si se favorece la composición sobre la herencia se pueden tener en la biblioteca de clases, jerarquías de clases más pequeñas y fáciles de manejar. Gamma et al. [Gamma 95], definen la delegación como la forma de permitir que la composición sea tan poderosa para la reutilización como la herencia. En la delegación , dos objetos están involucrados en manejar una misma petición. Un objeto receptor y un delegado. El receptor se pasa a si mismo al delegado para permitir que la operación del delegado se refiera al receptor. Por ejemplo, en la figura 2, la clase ventana puede reutilizar la conducta de rectángulo manteniendo un ejemplar de rectángulo y delegando la conducta específica de rectángulo a ella. Es decir, en vez que la ventana sea un rectángulo, se tiene que la ventana rectangular envía las peticiones al ejemplar de rectángulo con lo que no tiene que heredar esas operaciones. La principal ventaja de la delegación es que permitiría cambiar la conducta de la ventana en tiempo de ejecución. Por ejemplo una ventana se haría circular simplemente remplazando el objeto rectángulo por un objeto circulo , suponiendo que ambos tuvieran el mismo tipo. Los tipos parametrizados, también conocidos como genéricos (Ada ,Eiffel) o plantillas (C++) , permiten definir un tipo sin especificar todos los tipos que éste usa. Estos serán suministrados como parámetros en el punto de instanciación . Los cambios son realizados por tanto en tiempo de compilación. Los tipos parametrizados se utilizan especialmente para implementar tipos abstractos de datos : pilas, colas, anillos , bolsas y otros que permiten almacenar distintos tipos de elementos según sean instanciados en tiempo de compilación. La figura 3, muestra un ejemplo presentado por Booch [Booch 94], que muestra como se puede combinar la herencia y tipos parametrizados para construir una cola de mensajes de correo electrónico. La figura 3 describe un diseño de una aplicación para ordenar mensajes de correo electrónico por orden de llegada y prioridad. Para lo cual se utiliza una biblioteca de clases, plantillas en C++, donde se encuentran los tipos abstractos cola y cola con prioridades, esta última es un descendiente del anterior. Se crea un ejemplar de cola con prioridades para manejar mensajes . Un descendiente de éste es el componente para gestionar mensajes de correo que se ha realizado para cubrir los requisitos de la aplicación. Ventana Area() Rectangulo Area() Altura Anchura ltados. Se utiliza el polimorfismo cuando se quiere enviar el mismo mensaje a diferentes objetos sin saber el objeto específico al que se le esta enviando el mensaje. Existen diversas formas de polimorfismo: • Ad Hoc. Es la sobrecarga de operadores, donde una función es llamada basándose en su firma definida como la lista de tipos de argumentos en su lista de parámetros. • Puro. Una clase es subclase de otra. Las funciones disponibles en la superclase pueden usarse en la subclase. Se puede tener distinta implementación de la función en la subclase. La función a utilizar se determina dinámicamente en tiempo de ejecución. esto se conoce como ligadura dinámica y se consigue en C++ con el uso de funciones virtuales . En Ada 95 la utilización de objetos etiquetados consigue efectos similares. Estudios de Deutsch indican que el polimorfismo puro no se necesita del orden del 85% de las ocasiones, con lo que el paso de mensajes puede reducirse a simples llamadas a procedimiento[Deutsch 83]. 3.1.1 Clasificación de Clases Un aspecto no específico de la orientación a objetos pero de interés para la reutilización es la clasificación de las clases pertenecientes a una biblioteca de clases. Estas clasificaciones son más necesarias según sea el tamaño de la biblioteca de clases, es decir cuando se habla de más de cien clases no es fácil localizar la clase que se necesita en un momento determinado. Como este problema ya existía en las bibliotecas, las soluciones más ampliamente difundidas en la industria software se han tomado de la biblioteconomía. Los esquemas de clasificación de componentes software reutilizables que serían también aplicados a las clases son básicamente dos: • Enumerativos. Donde se descompone el dominio en clases cada vez más específicas y restringiendo a la vez el número de ramas de los árboles así creados. Estas descomposiciones pueden basarse en una taxonomía conceptual, similar a la clasificación decimal utilizada en biblioteconomia, o en la descomposición de los sistemas. • Por Facetas. Se basa en la síntesis y no en la descomposición del dominio. Las facetas, cuyo uso proviene también de la biblioteconomía, permiten clasificar una clase escogiendo el término adecuado para cada una de las facetas que mejor describa la clase en cuestión.

Esta pregunta también está en el material:

Reusabilidad_y_Desarrollo_Orientado_a_Ob
15 pag.

Análise Orientada A Objetos Universidad Nacional De ColombiaUniversidad Nacional De Colombia

💡 1 Respuesta

User badge image

Ed IA de Studenta Verified user icon

Entiendo que estás buscando información sobre bibliotecas de clases. ¿En qué puedo ayudarte específicamente?

0
Dislike0

✏️ Responder

FlechasNegritoItálicoSubrayadaTachadoCitaCódigoLista numeradaLista con viñetasSuscritoSobreDisminuir la sangríaAumentar la sangríaColor de fuenteColor de fondoAlineaciónLimpiarInsertar el linkImagenFórmula

Para escribir su respuesta aquí, Ingresar o Crear una cuenta

User badge image

Otros materiales