Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ingeniera de Software
Pero el nivel de abstraccin del modelo de diseo existente es relativamente alto y el del programa operativo es bajo.
Qu es un componente?
Un componente es un bloque de construccin de software de computo. Con ms formalidad, la Especificacin OMG del lenguaje de modelado Unificado, define un componente como una parte modular, desplegable y sustituible de un sistema, que incluye la implantacin y expone un conjunto de interfaces.
Qu es un componente?
Como se dijo anteriormente,
los componentes forman la arquitectura del software y, en consecuencia, juegan un papel en el logro de los objetivos y de los requerimientos del sistema que se va ha construir.
Como los componentes se encuentran en la arquitectura del software, deben comunicarse y colaborar con otros componentes y con entidades (otros sistemas, dispositivos, personas, etc.) que existen fuera de las fronteras del software.
Qu es un componente?
El verdadero significado del termino componente difiere en funcin del punto de vista del ingeniero del software que lo use. Existen tres visiones importantes de lo que es un componente y como se emplea en el desarrollo de la modelacin del diseo.
Como parte de la elaboracin del diseo, tambin deben definirse todas las interfaces que permiten que las clases se comuniquen y colaboren con otras clases de diseo.
En la parte superior de la figura 10.1 aparecen los atributos y operaciones definidos durante el anlisis.
En el diseo de arquitectura de defini Imprimir Trabajo como un componente dentro de la arquitectura del software y esta representado con la notacin abreviada UML que se muestra en la parte media derecha de la figura.
Las interfaces CalcularTrabajo e IniciarTrabajo implican comunicacin y colaboracin con otros componentes (que no se muestran).
Por ejemplo, la operacin CalcularCostoporPagina () (que forma parte de la interfaz IniciarTrabajo) podra colaborar con un componente llamado TabladeValuacion que contuviera informacin sobre los precios del trabajo.
Una vez concluida se aplica mas elaboracin a cada atributo, operacin e interfaz.
La visin tradicional
En el contexto de la ingeniera de software tradicional, un componente es un elemento funcional de un programa que incorpora la lgica del procesamiento, las estructuras de datos internas que se requieren para implantar la lgica del procesamiento y una interfaz que permite la invocacin del componente y el paso de los datos. Dentro de la arquitectura del software se encuentra un componente tradicional, tambin Llamado modulo, que tiene tres funciones importantes:
La visin tradicional
1) como componente de control que cardina la invocacin de todos los dems componente del dominio del problema 2) como componente del dominio del problema que implantas una funcin completa o parcial que requiere el cliente 3) como componente de infraestructura que es responsable de las funciones que dan apoyo al procesamiento requerido en el domino del problema.
La visin tradicional
Igual que los componentes orientados a objetos, los componentes tradicionales del software provienen del modelo de anlisis. Sin embargo, en este caso, el elemento de datos orientado al flujo del modelo de anlisis sirve de base para su obtencin. Cada transformacin (burbuja) representada en los niveles mas bajos del diagrama de flujo de datos se mapea en una jerarqua de mdulos. Cerca de la parte superior de la jerarqua ( arquitectura del programa)
La visin tradicional
Se hallan los componentes del control (mdulos) y hacia la parte inferior de ella tienden a encontrarse los del dominio del problema. Para lograr una modularidad efectiva, cuando se elaboran los componentes se aplican conceptos de diseo, cmo la independencia de funciones.
Para ilustrar este proceso de elaboracin del diseo de componentes tradicionales, considere otra vez el software que debe elaborarse para un taller de impresin avanzada.
La visin tradicional
Durante el modelado de los requerimientos se obtendr un conjunto de diagramas de flujo de datos. Suponga que esto se mapean en la arquitectura que se aprecia en la figura 10.2 Cada rectngulo representa un componente del software. Observe que los que estn sombreados son equivalentes en su funcin y operaciones a los definidos para la clase ImprimirTrabajo.
La visin tradicional
Sin embargo, en este caso, cada operacin se representa como modulo aislado que se invoca como se indica en la figura. Para controlar el procesamiento se utilizan otros mdulos, por lo que son componentes de control.
Cada modulo de la figura 10.2 elabora durante el diseo en el nivel de componentes. La interfaz del modulo se define explcitamente. Es decir, se representa todo objeto de datos control que fluya a travs de la interfaz.
La visin tradicional
Se definen las estructuras de datos que se utilicen en el interior del modulo. El algoritmo que permite que el modulo cumpla su funcin previa se diseo con el empleo del enfoque de refinamiento por etapas. El comportamiento del modulo se representa en ocasiones en un diagrama de estado.
para ilustrar este proceso, considere el modulo, calcular costo por Pagina. El objetivo de este modulo es calcular el costo de impresin por pagina con base en las especificaciones dadas por el cliente.
La visin tradicional
Los datos requeridos para realizar esta funcin son: numero de paginas en el documento, numero total de documentos que se va a producir, impresin por uno o dos lados, requerimientos de color y requerimientos de tamao. Estos datos se pasan a CalcularCostoporPagina a travs de la interfaz del modulo. CalcularCostoporPagina usa estos datos para determinar el costo por pagina con base en el tamao y complejidad del trabajo, que es funcin de todos los datos proporcionados al modulo a travs de la interfaz. El costo por pagina es inversamente proporcional al tamao del trabajo y directamente proporcional a su complejidad.
La visin tradicional
La figura 10.3 representa el diseo en el nivel de componentes con el uso de notacin UML modificada. El modulo CalcularCostoporPagina accede a los datos invocando el modulo ObtenerDatosdelTrabajo, que permite que todos los datos relevantes pasen al componente, y una interfaz de base de datos, AccederBDdeCosto, que permite que el modulo acceda a una base de datos que contiene todos los costos de impresin.
La visin tradicional
A medida que avanza el diseo, se elabora el modulo CalcularCostoporPagina para que provea los detalles del algoritmo y de la interfaz. Los detalles del algoritmo se representa con el uso del texto de seudocdigo que aparece en la figura, o con un diagrama de actividades UML. Las interfaces se representan como una coleccin de objetos de datos o conceptos de entrada y salida. La elaboracin del diseo continua hasta que haya detalles suficientes que guen la construccin del componente.
En las ultimas dos dcadas, la comunidad de la ingeniera de software ha puesto el nfasis en la necesidad de elaborar sistemas que utilicen componentes de software o patrones de diseo ya existentes.
Hay cuatro principios bsicos que son aplicables al diseo en el nivel de componentes y que han sido ampliamente aceptados para la aplicacin de la ingeniera de software orientada a objetos. La motivacin subyacente para aplicar estos principios es crear diseos que sean mas factibles de cambiar, as como reducir la programacin de efectos colaterales cuando se hagan cambios. Estos principios pueden usarse como gua cuando se desarrolle cada componente del software
Dicho en pocas palabras, debe especificarse el componente en forma tal que permita extenderlo (dentro del dominio funcional a que esta dirigido) sin necesidad de hacerle modificaciones internas ( en el nivel del cdigo o de la lgica),
Las subclases deben ser sustituibles por sus clase de base Este principio de diseo, originalmente propuesto por Barbara Liskov, sugiere que un componente que use una clase de base debe funcionar bien si una clase derivada de la clase base pasa al componente.
El PSL demanda que cualquier clase derivada de una clase de base debe respetar cualquier contrato implcito entre la clase de base y los componentes que la usan.
En el contexto de este anlisis, un contrato es una precondicin que debe ser verdadera antes de que el componente use una clase de base y una poscondicin que debe ser verdadera despus de ello.
Cuando se crean clases derivadas hay que asegurarse de que respeten la precondicin y la poscondicion.
Principio de inversin de la Dependencia (PID). Dependa de las abstracciones. No dependa de las concreciones. Como se vio en el estudio del PAC, las abstracciones son el lugar en el que es posible ampliar un diseo sin muchas dificultades. Entre mas dependa un componente de otros componentes concretos ( y no de abstracciones tales como una interfaz), mas difcil ser ampliarlo.
Hay muchas instancias en las que mltiples componentes del cliente usan las operaciones que provee una clase servidor. El PSI sugiere que debe crearse una interfaz especializada que atienda a cada categora principal de clientes. En la interfaz de ese cliente, solo deben especificarse aquellas operaciones que sean relevantes para una categora particular de clientes.
En lugar de abordar cada clase individual, es frecuente que sea mejor agrupar las que sean reutilizables en paquetes que puedan manejarse y controlar a medida que evolucionen las nuevas versiones.
Si las clases no se agrupan de manera cohesiva, es posible que se cambie una clase sin relacin junto con las dems que hay dentro del paquete. Esto generara integracin y pruebas innecesarias. Por esta razn, solo las clases que se reutilicen juntas deben incluirse dentro de un paquete.
Si como parte de la implantacin de PlanodelaCasa va a administrarse una lista vinculada, es apropiada la operacin AdministrarLista(), aun si una persona sin capacitacin tcnica pudiera interpretarlo mal. Puede usarse estereotipos para ayudar a identificar la naturaleza de los componentes en el nivel de diseo detallado. Por ejemplo, < <infraestructura>> debera usarse para identificar un componente de infraestructura, <<basededatos>> podra emplearse para identificar una base de datos que de servicio a una o mas clases de diseo o a todo el sistema; se usara <<tabla>> para identificar una tabla dentro de una base de datos.
En el contexto del diseo en el nivel de componentes para los sistemas orientados a objetos, la cohesin implica que un componente o clase solo contiene atributos y operaciones que se relacionan de cerca uno con el otro y con la clase o componente en si. Lethbridge y Laganiere definen varios tipos diferentes de cohesin.
De comunicacin. Todas las operaciones que acceden a los mismos datos se definen dentro de una clase. En general, tales clases se centran nicamente en los datos en cuestin, acceden a ellos y los guardan.
Las clases y componentes que tienen cohesin funcional, de capa y comunicacin son relativamente fciles de implantar, probar y mantener. Siempre que sea posible, deben alcanzarse estos niveles de cohesin. Sin embargo, es importante notar que en ocasiones hay aspectos pragmticos del diseo y de la implantacin que obligan a optar por niveles de cohesin mas bajos.
Acoplamiento del control. Tiene lugar si la operacin A() invoca a la operacin B() y pasa una bandera de control a B, La bandera dirige entonces el flujo de la lgica dentro de B. El problema con esta forma de acoplamiento es que un cambio no relacionado en B puede dar como resultado la necesidad de cambiar el significado de la bandera de control que pasa A. Si esto se pasa por alto ocurrir un error. Acoplamiento de molde. Se presenta cuando se declara a ClaseB como un tipo para un argumento de una operacin de ClaseA. Como ClaseB ahora forma parte de la definicin de ClaseA, la modificacin del sistema se vuelve mas compleja.
Una imagen vale mas que mil palabras pero es importante saber de que imagen se trata y cuales serian las mil palabras. No hay duda de que herramientas graficas, como el diagrama UML de actividades o el diagrama de flujo, constituye patrones grficos tiles que ilustran fcilmente detalles de procedimiento. No obstante, si se hace mal uso de las herramientas graficas, surge una imagen equivocada que conduce al software equivocado.
El diagrama de actividades permite representar la secuencia, condicin y repeticin todos los elementos de que consta la programacin estructurada- y es descendiente de un diseo grafico anterior (que todava se utiliza mucho) llamado diagrama de flujo. Como cualquier diagrama de actividades, el flujo es muy simple.
La construccin seleccin (o caso seleccionar ) que se aprecia en la figura en realidad es una extensin de la clausula si-entonces-en otro caso.
Para ilustrar el uso de una tabla de decisin, considere el siguiente extracto de un caso de uso informal propuesto para el sistema del taller de impresin: Se definen tres tipos de clientes: regular, plateado y dorado ( que se asignan de acuerdo con la cantidad de negocios que realice el cliente con el taller de impresin en un periodo de doce meses).
La figura ilustra una representacin de tabla de decisin del caso de uso anterior. Cada una de las seis reglas indica una de las seis condiciones posibles. Por regla general, la tabla de decisin se usa de manera eficaz para dar otra notacin de diseo orientado al procedimiento.