SlideShare une entreprise Scribd logo
1  sur  23
SEMINARIO 3
REUTILIZACIÓN DEL SOFTWARE




                      LUIS JAVIER DÍAZ RÍOS

                               28/05/2010
INDICE
1. Introducción…………………………………………………………………….3
2. El campo de la reutilización……………………………………………………4
     a. Conclusión………………………………………………………………5
3. Patrones de diseño……………………………………………………………...5
     a. ¿Qué es un patrón de diseño?..................................................................5
     b. Ejemplo de un patrón…………………………………………………6,7
     c. Descripción de un patrón de diseño………………………………….7
     d. Breve reseña histórica………………………………………………...7,8
     e. Tipos de Patrones…………………………………………….…8,9,10,11
     f. Patrones GRASP…………………………………………………….11,12
     g. El futuro de patrones…………………………………………………..12
     h. Conclusión……………………………………………………………..12
4. Reutilización basada en generadores…………………………………………13
     a. Conclusión……………………………………………………………..13
5. Tipos de reutilización…………………………………………………...14,15,16
     a. Conclusión…………………………..…………………………………16
6. Reutilización de sistemas de aplicaciones……………………………………16
     a. Reutilización de productos de COTS……………………………...16,17
     b. Líneas de productos software……………………………………...18,19
     c. Conclusión……………………………………………………………..20
7. Desarrollo de componentes de reutilización…………………………….20,21
     a. Conclusión……………………………………………………………..21
8. Conclusiones Finales…………………………………………………………..22
9. Bibliografía…...………………………………………………………………..23




                                                                                                      2
1.- INTRODUCCIÓN
           La ingeniería del software basada en reutilización es una estrategia de ingeniería del software
 comparable en la que el proceso de desarrollo es adaptado a la reutilización del software existente. Si bien
 los beneficios de la reutilización han sido reconocidos durante muchos años, solo en la última década ha
 existido una transición gradual desde el desarrollo del software original hasta el desarrollo basado en la
 reutilización. La tendencia hacia el desarrollo asado en la reutilización viene dada como respuesta a las
 demandas de una menor producción de software y de menores costes de mantenimiento, de una entrega más
 rápida de los sistemas y del incremento en la calidad del software.
        “Cada vez más compañías ven su software como un activo valioso y están
 promocionando la reutilización para incrementar sus beneficios en las inversiones del
 software”
          Las unidades de software que se reutilizan pueden ser de tamaños totalmente diferentes:

               Reutilización de sistemas de aplicaciones: Puede ser reutilizada incorporándolos
               sin ningún cambio en otros sistemas, configurando la aplicación para diferentes clientes.

               Reutilización de componentes: Varía en tamaño desde subsistemas hasta objetos
               simples.

               Reutilización de objetos y funciones: Pueden reutilizarse componentes software que
               implementan una única función.
           Una forma complementaria de reutilización es la reutilización de conceptos, en la que en lugar
 de reutilizar un componente, la entidad reutilizada es más abstracta y se diseña para ser configurada y
 adaptada a una variedad de situaciones. Puede incluirse tanto en patrones de diseño, productos de sistemas
 configurables y generadores de programas.
          “La gran ventaja es que los costes de desarrollo deberían reducirse”.
          Seguidamente se muestra una tabla con una serie de ventajas e inconvenientes que existe en el
 proceso de reutilización del software:

                    TABLA DE VENTAJAS E INCONVENIENTES

                  VENTAJAS                                             INCONVENIENTES

Incremento de la confiabilidad                            Incremento en los costes de
                                                                 mantenimiento

   Reducción del riesgo del                                   Falta de soporte de las
            proceso                                                 herramientas

Uso efectivo de especialistas                               Síndrome de reinventar la
                                                                      rueda

  Cumplimiento de estándares                              Creación y mantenimiento de
                                                          una librería de componentes




                                                                                                           3
Desarrollo acelerado                                    Búsqueda de componentes




         2.- EL CAMPO DE REUTILIZACIÓN

         Estas explotan el hecho de que los sistemas del mismo dominio de aplicación son similares y tienen
potencial para la reutilización. Esta reutilización es posible a diferentes niveles desde funciones simples a
funciones completas.
         Los factores clave que deberían de considerarse a la hora de planificar la reutilización son:

               La agenda de desarrollo del software: Son activos reutilizables de grano grueso.

               Vida esperada del software: Si se está desarrollando un sistema de larga vida, habría
               que centrarse en la mantenibilidad del sistema. Se tendrá que adaptar el sistema a nuevos
               requerimientos, lo cual probablemente signifique hacer cambios a los componentes y sistemas
               de proveedores.

               Los conocimientos, habilidades y experiencia del grupo de desarrollo: Todas
               las tecnologías de reutilización son bastante complejas y se necesita bastante tiempo para
               comprenderlas y usarlas de forma efectiva.

               La criticidad del software y sus requerimientos no funcionales: Se tiene que
               crear un caso de confiabilidad para el sistema. Esto es difícil si no se tiene acceso al código
               fuente del software.

               El dominio de las aplicaciones: En algunos dominios de aplicaciones como los sistemas
               de información medica y de fabricación hay varios productos genéricos que pueden
               reutilizarse para configurarlos a una situación particular.

               La plataforma sobre la que el sistema se va ejecutar: Los sistemas de aplicaciones
               genéricos pueden ser plataformas especificas y solamente es posible reutilizarlos si el sistema
               se diseña para la plataforma.




                                                                                                            4
2. a.-CONCLUSIONES

         La reutilización lleva varios años en el ámbito de la ingeniería y se esta instaurando sobre todo en
las grandes empresas ya que se produce una gran disminución de los costes a la vez que abarata los precios
y se obtiene mayores benéficos además de un gran ahorro de implementación pero si supone un gran
esfuerzo en la planificación y a su vez en la integración de la misma, todo esto empezó y fue reconocido
durante muchos años en Japón (Matsumoto, 1984) con el desarrollo del software “Cusamano” y más
adelante otras empresas que han experimentado con esto han sido Hewlett.Packard con los programas “Gris
y Wosser”.
          En cuanto al riesgo sobre la planificación, implementación y desarrollo de la reutilización del
software es posible que no se comprendan los riesgos asociados tan bien como se entienden los riesgos del
desarrollo original aunque algunos gestores pueden preferir estos riesgos ya conocidos que otros que son
desconocidos.


         3.-PATRONES DE DISEÑO

          Los patrones de diseño se derivaron de las ideas introducidas por Christopher Alezander, quien
sugirió que existían ciertos patrones del diseño de edificios que eran comunes e inherentemente interesantes
y efectivos. El patrón es una descripción del problema y la esencia de su solución, de forma que la solución
se pueda reutilizar en diferentes situaciones. El patrón no es una especificación detallada, antes bien,
puede pensarse en el como una descripción del conocimiento y experiencia acumulados
         “Los patrones y los lenguajes de patrones son formas de describir las mejores
prácticas, buenos diseños, y encapsulan la experiencia de tal forma e es posible para
otros el reutilizar dicha experiencia”.




                                                                                                           5
3. a- ¿QUE ES UN PATRÓN DE DISEÑO?

          Son soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a
objetos. Son soluciones basadas en la experiencia y que se ha demostrado que funcionan.
         Es evidente que a lo largo de multitud de diseños de aplicaciones hay problemas que se repiten o
que son análogos, es decir, que responden a un cierto patrón. Sería deseable tener una colección de dichos
patrones con las soluciones más óptimas para cada caso. En este artículo presentamos una lista con los más
comunes y conocidos.
          Los patrones de diseño no son fáciles de entender, pero una vez entendido su funcionamiento, los
diseños serán mucho más flexibles, modulares y reutilizables. Han revolucionado el diseño orientado a
objetos y todo buen arquitecto de software debería conocerlos.


         3. b- EJEMPLO DE UN PATRÓN

         Nombre del patrón: Observer
          Descripción: Separa la vista del estado de un objeto del objeto mismo y permite proporcionar
vistas alternativas. Cuando el estado del objeto cambia, todas las vistas son notificadas y actualizadas de
forma automática para reflejar el cambio.
          Descripción del problema: En muchas situaciones es necesarios proporcionar múltiples vistas
de laguna información del estado, tal como una vista grafica y una vista tabular. No todos ellos pueden
ser conocidos cuando se especifica la información. Todas las presentaciones alternativas pueden soportar
interacción y, cuando el estado se cambia, deben actualizarse todas las vistas.
         Este patrón puede utilizarse en todas las situaciones en las que se requiera más de un formato de
vista para la información del estado y en las que no es necesario que el objeto que mantenga la
información del estado conozca los formatos específicos utilizados para las vistas.
         Descripción de la solución: La estructura del patrón se muestra en la figura. Esta define dos
objetos abstractos, Subject y Observer, y dos objetos concretos ConcreteSubject y ConcreteObserver, que
heredan los atributos de los objetos abstractos relacionados. El estado a visualizar es mantenido en
ConcreteSubject, que también hereda las operaciones del Subject permitiéndole añadir y eliminar Observers
y enviar una notificación cuando el estado ha cambiado.
         El objeto ConcreteObserver mantiene una copia del estado de ConcreteSubject e implementa la
interfaz Update () de Observer, que permite guardar estas copias en el mismo momento.
          Consecuencias: El objeto Subjecct solamente conoce el Observer abstracto y no conoce los
detalles de la clase concreta. Por ello hay un mínimo acoplamiento entre estos objetos. Debido a esa falta
de conocimiento, las optimizaciones que mejoran el rendimiento de la visualización no son prácticas. Los
cambio es en el objeto Subject pueden provocar la generación de un conjunto de actualizaciones vinculadas
con los objetos Observers, algunas de las cuales pueden no ser necesarias.




                                                                                                         6
3. c-DESCRIPCIÓN DE UN PATRÓN DE DISEÑO

Los cuatro elementos esenciales de los patrones de diseño:

     Un nombre que es una referencia significativa del patrón.

     Una descripción del área del problema que explica cuando puede aplicarse el patrón.




                                                                                           7
Una descripción de las partes de la solución del diseño, sus relaciones y sus
                 responsabilidades. Es una plantilla para una solución de diseño que puede instanciarse de
                 diferentes formas. A menudo estas se expresan gráficamente y muestra las relaciones entre los
                 objetos las clases de los objetos en la solución.

                 Una declaración de las consecuencias de aplicar el patrón. Esto puede ayudar a los
                 diseñadores a comprender si un patrón puede ser aplicado de forma efectiva en una
                 situación particular.


            3. d- BREVE RESEÑA HISTORICA

         En 1979 el arquitecto Christopher Alexander aportó al mundo de la arquitectura el libro The
Timeless Way of Building; en él proponía el aprendizaje y uso de una serie de patrones para la
construcción de edificios de una mayor calidad.
         En palabras de este autor, "Cada patrón describe un problema que ocurre infinidad de veces en
nuestro entorno, así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón
de veces más adelante sin tener que volver a pensarla otra vez."
          Los patrones que Christopher Alexander y sus colegas definieron, publicados en un volumen
denominado A Pattern Language, son un intento de formalizar y plasmar de una forma práctica
generaciones de conocimiento arquitectónico. Los patrones no son principios abstractos que requieran su
redescubrimiento para obtener una aplicación satisfactoria, ni son específicos a una situación particular o
cultural; son algo intermedio. Un patrón define una posible solución correcta para un problema de diseño
dentro de un contexto dado, describiendo las cualidades invariantes de todas las soluciones.
         Más tarde, en 1987, Ward Cunningham y Kent Beck usaron varias ideas de Alexander para
desarrollar cinco patrones de interacción hombre-ordenador (HCI) y publicaron un artículo en OOPSLA-
87 titulado Using Pattern Languages for OO Programs.
          No obstante, no fue hasta principios de los 90's cuando los patrones de diseño tuvieron un gran
éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo
Gang of Four (GoF) compuesto por Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que
se recogían 23 patrones de diseño comunes.


            3. e – TIPOS DE PATRONES

            A continuación se muestra una lista con el tipo de patrones y una breve descripción de cada uno
de ellos:

            Patrones de creación


              * Abstract Factory. Proporciona una interfaz para crear familias de objetos o que dependen
entre sí, sin especificar sus clases concretas.
           * Builder. Separa la construcción de un objeto complejo de su representación, de forma que
el mismo proceso de construcción pueda crear diferentes representaciones.




                                                                                                            8
* Factory Method. Define una interfaz para crear un objeto, pero deja que sean las
subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación
de objetos.
            * Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y
crear nuevos objetos copiando este prototipo.
            * Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de
acceso global a ella.

         Patrones estructurales


             * Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los
clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles.
             * Bridge. Desvincula una abstracción de su implementación, de manera que ambas puedan
variar de forma independiente.
            * Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-
todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
           * Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando
una alternativa flexible a la herencia para extender la funcionalidad.
            * Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un
subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.
            * Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino
de forma eficiente.
           * Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a
éste.

         Patrones de comportamiento


            * Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a
más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y
pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.
            * Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los
clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la
operaciones.
            * Interpreter. Dado un lenguaje, define una representación de su gramática junto con un
intérprete que usa dicha representación para interpretar las sentencias del lenguaje.
            * Iterator. Proporciona un modo de acceder secuencialmente a los elementos de un objeto
agregado sin exponer su representación interna.
             * Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos.
Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite
variar la interacción entre ellos de forma independiente.




                                                                                                        9
* Memento. Representa y externaliza el estado interno de un objeto sin violar la
encapsulación, de forma que éste puede volver a dicho estado más tarde.
            * Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando
un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.
            * State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado
interno. Parecerá que cambia la clase del objeto.
           * Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace
intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.
            * Template Method. Define en una operación el esqueleto de un algoritmo, delegando en
las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin
cambiar su estructura.
            * Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite
definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.




                                                                                                      10
3. f – PATRONES GRASP

Los últimos cuatro patrones GRASP son:

     Polimorfismo: Esta acorde al espíritu del patrón “”Lo hago yo mismo”. En vez de operar
     externamente sobre un pago para autorizarlo, el pago se autoriza a si mismo, esto
     constituye la esencia de la orientación a objetos. Sera el patrón más importante estratégico
     en el diseño orientado a objetos. Es un principio fundamental que fundan las estrategias
     globales, o planes al ataque, al diseñar como organizar un sistema para que se encargue del
     trabajo.
         o Beneficios: Es fácil agregar las futuras extensiones que requieren las variaciones
           imprevistas.

     Fabricación Pura: Para diseñar una fabricación pura debe buscarse ante todo una gran
     potencial de reutilización, asegurándose para ello de que sus responsabilidades sean
     pequeñas y cohesivas. Estas clases tienden a tener un conjunto de responsabilidades de
     granularidad fina. Una fabricación pura suele partirse atendiendo a su funcionalidad y,
     por lo mismo, es una especie de objeto de función central. Generalmente se considera que la
     fabricación es parte de la capa de servicios orientada a objetos de alto nivel en una
     arquitectura. Muchos patrones actuales del diseño orientado a objetos constituyen ejemplos:
     adaptador, observador, visitante y otros más….
         o Beneficios: Se brinda soporte a una alta cohesión porque las responsabilidades se
           dividen en una clase de granularidad fina que se centra exclusivamente en un
           conjunto muy específico de tareas.
         o Puede aumentar el potencial de reutilización debido a la presencia de las clases
           fabricación pura de granularidad fina, cuyas responsabilidades pueden utilizarse
           en otras aplicaciones.



     Indirección: El motivo de la indirección casi siempre es el bajo acoplamiento, se agrega una
     intermediaria con el fin de desacoplar otros componentes o servicios.

         o Beneficios: Bajo acoplamiento.

     No hables con extraños: Se refiere a no obtener una visibilidad temporal frente a objetos
     indirectos, que son de conocimiento de otros objetos pero no del cliente. La desventaja de
     conseguir visibilidad ante extraños es la siguiente: la solución se acopla entonces a la
     estructura interna de otros objetos. Esto origina un alto acoplamiento que hace el diseño
     menos robusto y más propenso a requerir un cambio si se alteran las relaciones estructurales
     indirectas.

         o Beneficios: Bajo acoplamiento.




                                                                                              11
3. g – EL FUTURO DE LOS PATRONES

          En la actualidad, se ha desarrollado y catalogado un número relativamente pequeño de patrones.
De cualquier manera, los últimos cinco años han sido testigos de una tremenda explosión, en términos de
interés industrial. Los patrones, junto con los componentes, ofrecen la esperanza de que la ingeniería del
software, eventualmente, se parezca a otras disciplinas de ingeniería, con clases volviéndose al análogo en
software de componentes electrónicos, y los patrones volviéndose el análogo en software de pequeños
circuitos hechos de componentes. Antes de que esto suceda, existe aún una ingente cantidad de trabajo que
llevar a cabo al identificar patrones y catalogarlos; también, se producirá esta situación, cuando el numero
de patrones existentes se vuelva tan grande, que se necesite una forma de indexado automática o
semiautomática.




         3. h – CONCLUSIONES

         Los patrones de diseño permiten al diseñador crear la arquitectura de diseño integrando
componentes reusables. La programación Orientada a objetos extiende el modelo de diseño a un dominio de
ejecución. Un lenguaje de programación Orientado a objetos se usa para traducir las clases, atributos,
operaciones y mensajes, de manera que puedan ejecutarse por la maquina. En la actualidad existe un buen
grupo de patrones, sin embargo, en los próximos años debería haber una verdadera expansión de su uso.
Aquí juega un gran papel la reutilización del software ya que los patrones de diseño en el futuro debe de
integrar e implementar con la reutilización de componentes software para a su vez abaratar costes de
producción y de ejecución como a su vez intentar realizar paulatinamente mejoras en la calidad del
software rehusándolo, mejorándolo e intentando explotar y aumentar el nivel de patrones a su vez.


           4. – REUTILIZACIÓN BASADA EN
                  GENERADORES
          El conocimiento reutilizable se captura en un sistema generador de programas que puede ser
programado por expertos en el dominio utilizando un lenguaje orientado a dominios o una herramienta
CASE interactiva que soporte la generación de sistemas. Utilizando esta información se puede generar un
sistema software operativo:




                                                                                                         12
La reutilización basada en generadores ha tenido éxito sobre todo para sistemas de aplicaciones de
negocios. Estos pueden generar aplicaciones completas o pueden automatizar parcialmente la creación de
aplicaciones y dejar que el programador las complete con detalles específicos. También se utiliza en otras
áreas como:

              Generadores de analizadores para el procesamiento del lenguaje.

              Generadores de código en herramientas CASE.




         4. a – CONCLUSIONES

          En cuanto a la reutilización basada en generadores se ha demostrado e informado que le mejor
para su uso es a la hora de aplicar sistemas en los negocios porque a su vez es totalmente rentable para
aplicaciones como procesamiento de datos además de que resulta más sencillo para los clientes o usuarios
cuando van a desarrollar programas utilizando generadores frente a otro tipo de componentes basados en la
reutilización, pero con esto puede surgir u problema que es que a la hora de utilizar esta aproximación a
grandes rasgos o con un rendimiento bastante alto. Habría que destacar en este aspecto una de las
aproximaciones mejores y mas importantes que es el desarrollo de software orientado a aspectos (AOSD), en
esta aproximación los intereses compartidos se implementan como aspectos y dentro del programa se define
como se debería asociar un aspecto, actualmente este desarrollo es un tema de investigación importante,
pero todavía no se ha generalizado su uso para el desarrollo industrial del software porque el código que se
genera no es eficiente comparándolo con el código escrito manualmente y se necesita un mayor
conocimiento de las relaciones entre los requerimientos no funcionales del sistema y los aspectos.




         .




                                                                                                         13
5. – TIPOS DE REUTILIZACIÓN
        Podemos definir distintos tipos de reutilización del software como:
        Oportunista:

              El ingeniero de software reutiliza piezas que él sabe que se ajustan a su problema.
        Sistemática:

             Es un esfuerzo global (a nivel organización) y planificado de antemano.

             Los artefactos reutilizables deben ser generados con la abstracción necesaria y con un nivel
             de variabilidad adecuado (estudio de los aspectos comunes y variables del dominio). Es
             decir, todo componente reutilizado ha de ser ideado, a priori, para ser reutilizado.

             Implica unas inversiones iníciales para recoger frutos en un futuro.

             La reutilización sistemática suele ser la única vía de éxito sostenible.
         Para poder llevar a cabo reutilización sistemática se requiere:

             Estudiar su viabilidad.

              Determinar el dominio de aplicación de estos componentes.

             Diseñar y desarrollar componentes suficientemente genéricos como para que puedan ser
             reutilizados con facilidad.

             Debe ser una política soportada desde la alta dirección.

             Los procedimientos y reglas a seguir deben estar definidos de antemano.

             Se deben definir métricas para medir su utilidad y poder mejorar los procesos de
             reutilización.
        Seguidamente se muestra un grafica que contiene la evolución de algunas características sobre
“Granularidad en la reutilización”.




                                                                                                      14
Anotación: Como podemos comprobar en la grafica el nivel de beneficio aumenta
continuamente si altibajos y a su vez determina mayor facilidad de uso.
          A continuación se muestra otra grafica ilustrando el nivel de abstracción que hay en la
reutilización del software:




       Anotación: Como vemos la reutilización de código nos hace obtener un beneficio
progresivo a la hora de la implementación y uso pero a su vez nos plantea mayor o
menor dificultad dependiendo de la tecnología que se utilice.
        A continuación se citara una lista con los diferentes aspectos de la reutilización:
        Bottom-Up:

             Se desarrollan pequeños componentes para una determinada aplicación.

             Se incorporan a un repositorio de artefactos software.



                                                                                              15
Top-Down:

              Se realiza un estudio previo global de todo el dominio de la organización.

              Se determinan las piezas necesarias que encajan unas con otras.

              Se van desarrollando, poco a poco, todas estas piezas.
         En la práctica, el enfoque Top-Down suele aportar mayores éxitos.
       No todos los aspectos a tener en cuenta en reutilización son técnicos. Aspectos como el “Not
invented here” son una barrera a la reutilización de software.
         La reutilización sistemática requiere apoyo de la alta dirección debido a que:

               Requiere una alta inversión al comienzo.

              Se empezarán a recoger beneficios en el futuro.


         5. a – CONCLUSIONES

          Cualquiera de los enfoques vistos en este punto es totalmente valido para su uso en la
reutilización del software aunque hay que tener especialmente cuidado a la hora de pasar de una
reutilización “oportunista” a una “sistemática”, en cuanto a los aspectos hay que detallar que el “Buttom-
Up” es mas sencillo a su vez menos costoso ya que su utilización recae en aplicaciones pequeñas y sencillas
mientras que el “Top-Down” habría que realizar un estudio global para ajustarse a las necesidades del
software y esto requerirá mayor tiempo, mayor coste, pero nos resultara más eficiente y seguro




         6. – REUTILIZACÓN DE SISTEMAS
               DE APLICACIONES
          Implica reutilizar sistemas de aplicaciones completos configurando un sistema para un entorno
específico o integrando dos o más sistemas para crear una nueva aplicación. Es la técnica más efectiva,
implica la reutilización de activo de grano grueso que pueden ser rápidamente configurados para crear un
nuevo sistema. En esta sección nombraremos dos tipos de reutilización de aplicaciones: Reutilización de
productos COTS y el desarrollo de líneas de productos.


         6. a – REUTILIZACIÓN DE PRODUCTOS COTS

         Se aplica a un sistema software que puede utilizarse sin cambios por su comprador. Incluye
muchas características y funciones para que sea potencialmente reutilizable en diferentes aplicaciones y
entornos. Si bien puede haber problemas con esta aproximación para la construcción de sistemas (Tracz,
2001). Algunos tipos de productos COTS han sido reutilizados durante muchos años. Los sistemas de base



                                                                                                        16
de datos son un ejemplo. Hasta mediados delos 90 solamente existían unos cuantos sistemas grandes, como
los sistemas gestión de bases de datos y monitores de teleprocesamiento, que fueran reutilizados de forma
rutinaria. En la actualidad es normal para los sistemas grandes tener definidas interfaces API´S que
permiten programar el acceso a las funciones de dichos sistemas. Debido a la funcionalidad de estos
productos COTS ofrecen es posible reducir costes y tiempos de entrega en varios órdenes de magnitud
comparados con el desarrollo de nuevo software.
          Para desarrollar sistemas utilizando productos COTS, se tienen que tomar varias elecciones de
diseño:

               ¿Qué productos COTS ofrecen en la funcionalidad más adecuada?

               ¿Cómo se intercambiarán los datos?

               ¿Qué características de un producto se utilizaran realmente?
        Después de haber nombrado las elecciones para el diseño cuando hablamos del uso de un sistema
COTS a gran escala es el mismo que el uso de cualquier otro componente más específico. Se tienen que
comprender las interfaces del sistema y hay que utilizarse exclusivamente para comunicarse con el
componente:
          Se tiene que buscar un equilibrio entre los requerimientos específicos y el desarrollo rápido y la
reutilización y se tiene que diseñar una arquitectura del sistema que permita que los sistemas COTS
operen conjuntamente. Boehm y Abts, 1999 plantean cuatro problemas con la integración de sistemas
COTS:

               Ausencia de control sobre la funcionalidad y el rendimiento.

               Problema con la interoperabilidad del sistema COTS.

               No existe control sobre la evaluación del sistema.

               Soporte de los vendedores de productos COTS.
          Aunque no es probable que todos estos problemas que ocurran en cada caso, pero al menos uno de
ellos e va a producir en la mayoría de los proyectos de integración COTS de esto los beneficios en coste y
tiempo derivados de la reutilización de COTS son probablemente menores que los que podrían esperarse de
un principio. Además Boehm y Abts, señalan que el coste de mantenimiento y evolución de un sistema
puede ser mayor cuando se utilizan productos COTS. En un sistema cuantos menos desarrolladores
originales haya, más personas estarán implicadas en su mantenimiento, por lo que es más probable que se
planteen problemas con la integración de productos COTS.
         Los beneficios de reutilización de productos COTS son significativos debido a que estos sistemas
ofrecen mucha más funcionalidad a la persona que los reutiliza, se ahorra mucho tiempo si se reutiliza un
sistema existente los tiempos de desarrollo del sistema se reduce drásticamente.




                                                                                                         17
6. b – LINEAS DE PRODUCTOS SOFTWARE

         Es una e las aproximaciones más efectivas para la reutilización, es un conjunto de aplicaciones
con una arquitectura común específica de dichas aplicaciones. El núcleo común de la familia de
aplicaciones se reutiliza cada vez que se requiere una nueva aplicación. El nuevo desarrollo puede implicar
una configuración específica de componentes, implementación de componentes adicionales y adaptación de
algunos componentes para satisfacer las nuevas demandas.
         Se pueden desarrollar varios tipos de especialización de líneas de productos software:

              Especialización de la plataforma: Solo se modifican aquellos componentes que interactúan
              con el hardware y con el sistema operativo.

              Especialización del entorno: Se crean versiones de la aplicación para gestionar entornos
              operativos y dispositivos periféricos concretos.

              Especialización de la funcionalidad: Se crean versiones de la aplicación para clientes
              específicos que tienen diferentes requerimientos.

              Especialización del proceso: El sistema se adapta para tratar con procesos de negocio
              específicos.
          Las líneas de productos software se diseñan para ser reconfiguradas. Esto puede implicar añadir o
eliminar componentes del sistema, definir parámetros y restricciones para los componentes del sistema, e
incluir conocimiento de los procesos de negocio. Pueden ser configuradas en dos puntos del proceso de
desarrollo:

              Configuración durante el despliegue: sistema genérico que se diseña para su configuración
              por u cliente o consultores que trabajan con el cliente.

              Configuración durante el diseño: en donde la organización que está desarrollando el
              software modifica un núcleo de líneas de productos comunes desarrollando, seleccionando o
              adaptando componentes para crear un nuevo sistema para un cliente.
          La configuración durante el despliegue se utiliza en paquetes de software verticales que son
diseñados para una aplicación específica tal como un sistema de gestión de información de un hospital.
También se utiliza en sistemas de planificación de recursos de empresas (ERP) tales como los producidos
por SAP y BEA. El proceso de estos implica compartir la información detallada sobre el negocio del cliente
y el proceso de negocio y a continuación incluir esta información en una base de datos de configuraciones.
          El sistema ERP genérico incluye un gran número de módulos que pueden componerse de diferentes
formas para crear un sistema específico. El proceso de configuración implica elegir que módulos tienen que
ser incluidos, configurara estos módulos individuales, definir procesos y reglas de negocio, y definir la
estructura y organización de la base de datos del sistema. Ejemplo:




                                                                                                        18
Los sistemas ERP son quizá el ejemplo más extendido de la reutilización de software, la mayoría
de las grandes compañías utilizan estos sistemas para soportar alguna o todas sus funciones, aunque existe
una limitación obvia de que la funcionalidad del sistema se restringe a la funcionalidad del núcleo
genérico, puede haber alguna discrepancia entre los conceptos del negocio y los conceptos soportados e el
lenguaje de configuración.
         La aproximación alternativa a la reutilización de familias de aplicaciones es la configuración por
el proveedor del sistema antes de entregarlo al cliente. El proveedor comienza un sistema genérico y
después, modificando y extendiendo módulos en este sistema crea un sistema especifico que proporciona las
funcionalidades requeridas por el cliente. Esto implica cambiar y extender el código fuente del núcleo del
sistema para que sea posible una mayor flexibilidad que con una configuración durante el despliegue.
Ejemplo:




                                                                                                        19
6. c – CONCLUSIONES

        En esta sección hemos definido los diferentes tipos de reutilización de sistemas de componentes
como son: Reutilización de productos COTS y Líneas de productos software.
          En el que hemos podido comprobar que los sistemas COTS han ido evolucionando desde los años
90 en el que de haber unos pocos sistemas granes que han implementado con sistemas COTS a en la
actualidad que la gran mayoría de sistemas grandes tienen definidas interfaces (APIs) que permiten
programar el acceso a las funciones de dichos sistemas, mientras que las líneas de productos software ha
sido y es utilizada para sistemas más pequeños basado en negocios porque permite que el núcleo de
aplicaciones que puede implicar una configuración especifica de componentes, implementación de
componentes adicionales y adaptación de algunos componentes para satisfacer nuevas demandas, aunque
los sistemas COTS sean mas robustos por su dimensión muestra una posibilidad de reducir costes además de
tiempos de entrega comparados con los desarrollo del nuevo software además de que los riesgos pueden
reducirse ya que el producto se encuentra disponible y los gestores pueden ver si dio producto satisface sus
requerimientos.




                       7. – DESARROLLO DE
                      COMPONENTES PARA
                        REUTILIZACIÓN

          Por ultimo punto de este seminario vamos a analizar como se realiza el desarrollo en la
reutilización de los componentes asociados, como ya se ha indicado a lo largo del seminario los problemas
de confianza implican que hasta ahora no haya sido desarrollado un mercado abierto de componentes y la
mayoría de componentes que son reutilizados han sido implementados y utilizados dentro de la empresa.
Los componentes reutilizables no están especialmente desarrollados, sino que se basan componentes
existentes que ya han sido implementados y utilizados en sistemas de aplicaciones.
          Los componentes desarrollados internamente no son inmediatamente reutilizables, por lo que
habría que adaptar y extender estos componentes para crear una versión mas genérica y por tanto más
reutilizable, esto tiene un coste asociado, hay que plantearse primero si un componente va a ser
probablemente reutilizado y segundo se el ahorro de costes de la reutilización justifican los costes para
hacer que ese componente reutilizable.
         Para responder el primer apartado, tiene que decidirse si el componente implementa una o más
abstracciones del dominio estables.
        Para responder ala cuestión sobre la efectividad del coste, tienen que evaluarse los costes de los
cambios requeridos para hacer que el componente sea reutilizable. Estos costes son los costes de
documentación del componente, la validación del componente y os costes para hacer que el componente sea
más genérico. Los cambios que pueden hacerse para que el componente sea más reutilizable incluyen:

                Eliminar los métodos específicos de la aplicación.




                                                                                                         20
Cambiar los nombres para hacerlos más generales.

              Añadir métodos para proporcionar una cobertura funcional más completa.

              Hacer que el manejo de excepciones sea consistente para todos los métodos.

              Añadir una interfaz de configuración para permite que el componente se adapte a diferentes
              situaciones de uso.

              Integrar los componentes requeridos para incrementar la independencia.
          El problema de manejo de excepciones es particularmente difícil. En principio todas las
excepciones deberían formar parte de la interfaz del componente. Los componentes no deberían manejar las
excepciones que pueden ocurrir y debería publicarlas como parte de su interfaz. MILI (2002) y otros
plantean formas de estimar costes para hacer que un componente sea reutilizable y estimar el resultado de
esta inversión.
          Otro importante fuente de componentes son los sistemas heredados existentes, hay sistemas que
desempeñan una función importante para la empresa, pero están escritos utilizando tecnologías software
obsoletas. Debido a estos puede ser difícil utilizarlos con nuevos sistemas, si se quedan anticuados pueden
reutilizase en aplicaciones nuevas. Para hacer que estos componentes sean reutilizables, tienen que
definirse las interfaces del componente mediante lo que se conoce como wrapper , oculta la complejidad
del código subyacente y proporciona una interfaz para que los componentes externos puedan acceder a los
servicios que dicho código proporciona, este wrapper, es un elemento del software bastante complejo ya
que tiene que acceder a la funcionalidad del sistema heredado. El coste de un wrapper es menor que
volver a implementar el sistema heredado.


         7. a – CONCLUSIONES

          En esta sección podemos comprobar que en el desarrollo de componentes para la reutilización se
obtiene simples ganancias en cuanto a productividad se refiere porque también gran parte de esos beneficios
se obtienen gracias a la calidad debido a que los componentes reutilizados suelen ser mas confiables además
de obtener ganancias en el mercado hay que tener n cuenta también las ganancias al desplegar el software
más rápidamente aunque nos muestra un problema que es la falta de equilibrio cuando hablamos de
reusabilidad y uso de un componente porque hacer que un componente pueda ser reutilizable implica
proporcionar unas interfaces genéricas y paraqué sea usable implicarlo mismo solo que con una interfaz
más sencilla a la hora de comprenderla. Todo esto produce que sea complejo a la hora de reutilizar
componentes por que lo interesante seria buscar y encontrar el equilibrio de reusabilidad y usabilidad.




                                                                                                        21
8.- CONCLUSIONES FINALES
          En este seminario he desarrollado una gran gama de aspectos de la reutilización del software
empezando por el campo, seguidamente una larga descripción, historia y tipos de patrones que se usan a la
hora de reutilizar así como las técnicas que se usan, tipos y reutilización basada en generadores y
aplicaciones, en el aspecto de los patrones hay que destacar que son totalmente fundamentales para la
reutilización del software en el diseño orientado a objetos porque nos documentan situaciones de cualquier
tipo de diseño, hablando de generadores de programas los conceptos reutilizables están incluidos en un
sistema generador, en cuanto a la reutilización de productos COTS se utilizan a grandes escalas en
empresas bastante grandes y en la actualidad están resaltada por la programación de interfaces (APIs) que
esta muy vinculada a la reutilización de productos COTS, permite reducir costes además de tiempo en el
desarrollo y darle mayor funcionalidad aunque no todo es beneficioso y como todo tiene unos aspectos en el
que surgen problemas y es la falta de control en el rendimiento y su funcionalidad y muestran una
desconfianza o dificultad para asegurar que los sistemas puedan interoperar pero además de estos aspectos
es una buena solución sobre todo en empresas de alto nivel a la hora d desarrollar sistemas con
reutilización del software.
          Cuando se ha hablado de los sistemas ERP se a destacado su facilidad de operar en pequeños
negocios gracias a su sencillez y su facilidad de comprender además de tener costes más pequeños pero
muestran carencias a la hora de seguridad y de aportar requisitos más importantes o diferentes pero se
aplica muy bien a la pequeña y mediana empresa. En cuestión cuando hablamos de líneas de productos que
son aplicaciones que se desarrollan a partir de otra base muestra una ventaja en su funcionamiento y
proceso por ejemplo para el uso de vehículos para servicios de emergencia. Por ultimo hay que destacar las
principales ventaja que se obtiene de la reutilización del software como reducción e los costes, disminución
de los riesgos y a la hora del desarrollo aumento de frecuencia y rapidez, permite que los especialistas
concentre su experiencia en diseñar componente para la reutilización además de aumentar la confiabilidad
dentro de los sistemas.




                                                                                                         22
9.- BIBLIOGRAFIA
      “Ingeniería del Software – Ian Somerville, 7ª Edición, Ed: Pearson, Adisson
Wesley”


       “http://www.ingenierosoftware.com/analisisydiseno/patrones-diseno.php”


       “http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o”


      “Ingeniería del Software. Un enfoque practica – Roger S.Pressman, 5ª Edición,
Mc Graw Hill”


      “Uml y Patrones. Introducción al análisis y diseño orientado a objetos –Craig
Larman, Pearson, Prentice Hall”




                                                                                23

Contenu connexe

Tendances

Implementación de clases
Implementación de clasesImplementación de clases
Implementación de clasesFernando Solis
 
Cuadro comparativo entre moprosoft y cmmi
Cuadro comparativo entre moprosoft y cmmi Cuadro comparativo entre moprosoft y cmmi
Cuadro comparativo entre moprosoft y cmmi Darthuz Kilates
 
modelos del proceso del software
 modelos del proceso del software  modelos del proceso del software
modelos del proceso del software Brihany Rossell
 
Modelado Orientado a Objetos
Modelado Orientado a ObjetosModelado Orientado a Objetos
Modelado Orientado a ObjetosRafael Miranda
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASEdavidsande
 
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareGestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareJosé Antonio Sandoval Acosta
 
4.2 espacios de estados determinísticos y espacios no determinísticos.
4.2 espacios de estados determinísticos y espacios no determinísticos.4.2 espacios de estados determinísticos y espacios no determinísticos.
4.2 espacios de estados determinísticos y espacios no determinísticos.Jose Maldonado Cortes
 
Plan de pruebas de software
Plan de pruebas de softwarePlan de pruebas de software
Plan de pruebas de softwareEdgardo Rojas
 
IEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareIEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareJesús Navarro
 
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XPETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XPJglory22
 
Diagramas de despliegue
Diagramas de despliegueDiagramas de despliegue
Diagramas de desplieguegmjuan
 
Ingeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosIngeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosCesar Prado
 
6.modelado de los requerimientos escenarios y clases
6.modelado de los requerimientos  escenarios y clases6.modelado de los requerimientos  escenarios y clases
6.modelado de los requerimientos escenarios y clasesRamiro Estigarribia Canese
 
Tm01 el modelado en el desarrollo de software
Tm01 el modelado en el desarrollo de softwareTm01 el modelado en el desarrollo de software
Tm01 el modelado en el desarrollo de softwareJulio Pari
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooJosé Antonio Sandoval Acosta
 

Tendances (20)

Implementación de clases
Implementación de clasesImplementación de clases
Implementación de clases
 
Cuadro comparativo entre moprosoft y cmmi
Cuadro comparativo entre moprosoft y cmmi Cuadro comparativo entre moprosoft y cmmi
Cuadro comparativo entre moprosoft y cmmi
 
Prueba de Caja Blanca
Prueba de Caja BlancaPrueba de Caja Blanca
Prueba de Caja Blanca
 
modelos del proceso del software
 modelos del proceso del software  modelos del proceso del software
modelos del proceso del software
 
Modelado Orientado a Objetos
Modelado Orientado a ObjetosModelado Orientado a Objetos
Modelado Orientado a Objetos
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASE
 
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareGestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
 
4.2 espacios de estados determinísticos y espacios no determinísticos.
4.2 espacios de estados determinísticos y espacios no determinísticos.4.2 espacios de estados determinísticos y espacios no determinísticos.
4.2 espacios de estados determinísticos y espacios no determinísticos.
 
Plan de pruebas de software
Plan de pruebas de softwarePlan de pruebas de software
Plan de pruebas de software
 
IEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareIEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de software
 
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XPETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
 
Diagramas de despliegue
Diagramas de despliegueDiagramas de despliegue
Diagramas de despliegue
 
Ingeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientosIngeniería de requisitos e ingeniería de requerimientos
Ingeniería de requisitos e ingeniería de requerimientos
 
6.modelado de los requerimientos escenarios y clases
6.modelado de los requerimientos  escenarios y clases6.modelado de los requerimientos  escenarios y clases
6.modelado de los requerimientos escenarios y clases
 
Tm01 el modelado en el desarrollo de software
Tm01 el modelado en el desarrollo de softwareTm01 el modelado en el desarrollo de software
Tm01 el modelado en el desarrollo de software
 
Diseño de interfaz de usuario
Diseño de interfaz de usuarioDiseño de interfaz de usuario
Diseño de interfaz de usuario
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Ciclo Vida del Software
Ciclo Vida del SoftwareCiclo Vida del Software
Ciclo Vida del Software
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma poo
 

En vedette

Reutilización de software
Reutilización de softwareReutilización de software
Reutilización de softwareKevin F. Mena
 
Reutilización de software
Reutilización de softwareReutilización de software
Reutilización de softwareAntonio Moreno
 
Segunda sesión
Segunda sesiónSegunda sesión
Segunda sesiónivansalge
 
Cocomo basico
Cocomo basicoCocomo basico
Cocomo basicodavid286
 
ASD (Adaptive Software Development)
ASD (Adaptive Software Development)ASD (Adaptive Software Development)
ASD (Adaptive Software Development)urumisama
 
ingenieria de requerimientos
ingenieria de requerimientos ingenieria de requerimientos
ingenieria de requerimientos Gabriel Garcia
 
Ingenieria de software (conceptos básicos)
Ingenieria de software (conceptos básicos)Ingenieria de software (conceptos básicos)
Ingenieria de software (conceptos básicos)Yaskelly Yedra
 
Atributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de softwareAtributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de softwareGustavo Cuen
 

En vedette (9)

Reutilización de software
Reutilización de softwareReutilización de software
Reutilización de software
 
Reutilización de software
Reutilización de softwareReutilización de software
Reutilización de software
 
Segunda sesión
Segunda sesiónSegunda sesión
Segunda sesión
 
Cocomo basico
Cocomo basicoCocomo basico
Cocomo basico
 
ASD (Adaptive Software Development)
ASD (Adaptive Software Development)ASD (Adaptive Software Development)
ASD (Adaptive Software Development)
 
ingenieria de requerimientos
ingenieria de requerimientos ingenieria de requerimientos
ingenieria de requerimientos
 
Ingenieria de software (conceptos básicos)
Ingenieria de software (conceptos básicos)Ingenieria de software (conceptos básicos)
Ingenieria de software (conceptos básicos)
 
Atributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de softwareAtributos de calidad en el desarrollo de software
Atributos de calidad en el desarrollo de software
 
Tendencias de Modelado Software
Tendencias de Modelado SoftwareTendencias de Modelado Software
Tendencias de Modelado Software
 

Similaire à Seminario 3 reutilización del software

Desarrollo de componentes
Desarrollo de componentesDesarrollo de componentes
Desarrollo de componenteschito86
 
Desarrollo de componentes
Desarrollo de componentesDesarrollo de componentes
Desarrollo de componentesdianiktlk
 
Metodologia rup
Metodologia rupMetodologia rup
Metodologia rupmireya2022
 
Metodologias De Analisis Y Diseño De Sistemas
Metodologias De Analisis Y Diseño De SistemasMetodologias De Analisis Y Diseño De Sistemas
Metodologias De Analisis Y Diseño De Sistemasgrupo7inf162
 
Métodos de la ingeniería
Métodos de la ingenieríaMétodos de la ingeniería
Métodos de la ingenieríaSam Stgo
 
Lineas de productos de software y método watch
Lineas de productos de software y método watchLineas de productos de software y método watch
Lineas de productos de software y método watchجويل غونزاليس
 
Rap reutilización apropiada para programadores
Rap reutilización apropiada para programadoresRap reutilización apropiada para programadores
Rap reutilización apropiada para programadoresaxtreme
 
Desarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorDesarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorJomicast
 
Herramientas del Ciclo de Vida de Prototipos
Herramientas del Ciclo de Vida de PrototiposHerramientas del Ciclo de Vida de Prototipos
Herramientas del Ciclo de Vida de PrototiposSaúl Torres Molina
 
Metodología de desarrollo de software
Metodología de desarrollo de softwareMetodología de desarrollo de software
Metodología de desarrollo de softwareAbner Garcia
 
Fundamentos de diseño de software
Fundamentos de diseño de softwareFundamentos de diseño de software
Fundamentos de diseño de softwareLuis Jesus Curbata
 

Similaire à Seminario 3 reutilización del software (20)

prueva
pruevaprueva
prueva
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Desarrollo de componentes
Desarrollo de componentesDesarrollo de componentes
Desarrollo de componentes
 
Desarrollo de componentes
Desarrollo de componentesDesarrollo de componentes
Desarrollo de componentes
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
LÍNEAS DE PRODUCTOS DE SOFTWARE
LÍNEAS DE PRODUCTOS DE SOFTWARELÍNEAS DE PRODUCTOS DE SOFTWARE
LÍNEAS DE PRODUCTOS DE SOFTWARE
 
ing del software
 ing del software  ing del software
ing del software
 
Metodologia rup
Metodologia rupMetodologia rup
Metodologia rup
 
Metodologias De Analisis Y Diseño De Sistemas
Metodologias De Analisis Y Diseño De SistemasMetodologias De Analisis Y Diseño De Sistemas
Metodologias De Analisis Y Diseño De Sistemas
 
Métodos de la ingeniería
Métodos de la ingenieríaMétodos de la ingeniería
Métodos de la ingeniería
 
Lineas de productos de software y método watch
Lineas de productos de software y método watchLineas de productos de software y método watch
Lineas de productos de software y método watch
 
Rap reutilización apropiada para programadores
Rap reutilización apropiada para programadoresRap reutilización apropiada para programadores
Rap reutilización apropiada para programadores
 
Desarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidorDesarrollo de aplicaciones web en el entorno servidor
Desarrollo de aplicaciones web en el entorno servidor
 
Herramientas del Ciclo de Vida de Prototipos
Herramientas del Ciclo de Vida de PrototiposHerramientas del Ciclo de Vida de Prototipos
Herramientas del Ciclo de Vida de Prototipos
 
Proyecto
ProyectoProyecto
Proyecto
 
Proyecto
ProyectoProyecto
Proyecto
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
Modelos de Desarrollo de Software - INF162 - 2017
Modelos de Desarrollo de Software - INF162 - 2017Modelos de Desarrollo de Software - INF162 - 2017
Modelos de Desarrollo de Software - INF162 - 2017
 
Metodología de desarrollo de software
Metodología de desarrollo de softwareMetodología de desarrollo de software
Metodología de desarrollo de software
 
Fundamentos de diseño de software
Fundamentos de diseño de softwareFundamentos de diseño de software
Fundamentos de diseño de software
 

Dernier

Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperiomiralbaipiales2016
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVGiustinoAdesso1
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxnandoapperscabanilla
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosJonathanCovena1
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoJosDanielEstradaHern
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 

Dernier (20)

Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
Valoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCVValoración Crítica de EEEM Feco2023 FFUCV
Valoración Crítica de EEEM Feco2023 FFUCV
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 

Seminario 3 reutilización del software

  • 1. SEMINARIO 3 REUTILIZACIÓN DEL SOFTWARE LUIS JAVIER DÍAZ RÍOS 28/05/2010
  • 2. INDICE 1. Introducción…………………………………………………………………….3 2. El campo de la reutilización……………………………………………………4 a. Conclusión………………………………………………………………5 3. Patrones de diseño……………………………………………………………...5 a. ¿Qué es un patrón de diseño?..................................................................5 b. Ejemplo de un patrón…………………………………………………6,7 c. Descripción de un patrón de diseño………………………………….7 d. Breve reseña histórica………………………………………………...7,8 e. Tipos de Patrones…………………………………………….…8,9,10,11 f. Patrones GRASP…………………………………………………….11,12 g. El futuro de patrones…………………………………………………..12 h. Conclusión……………………………………………………………..12 4. Reutilización basada en generadores…………………………………………13 a. Conclusión……………………………………………………………..13 5. Tipos de reutilización…………………………………………………...14,15,16 a. Conclusión…………………………..…………………………………16 6. Reutilización de sistemas de aplicaciones……………………………………16 a. Reutilización de productos de COTS……………………………...16,17 b. Líneas de productos software……………………………………...18,19 c. Conclusión……………………………………………………………..20 7. Desarrollo de componentes de reutilización…………………………….20,21 a. Conclusión……………………………………………………………..21 8. Conclusiones Finales…………………………………………………………..22 9. Bibliografía…...………………………………………………………………..23 2
  • 3. 1.- INTRODUCCIÓN La ingeniería del software basada en reutilización es una estrategia de ingeniería del software comparable en la que el proceso de desarrollo es adaptado a la reutilización del software existente. Si bien los beneficios de la reutilización han sido reconocidos durante muchos años, solo en la última década ha existido una transición gradual desde el desarrollo del software original hasta el desarrollo basado en la reutilización. La tendencia hacia el desarrollo asado en la reutilización viene dada como respuesta a las demandas de una menor producción de software y de menores costes de mantenimiento, de una entrega más rápida de los sistemas y del incremento en la calidad del software. “Cada vez más compañías ven su software como un activo valioso y están promocionando la reutilización para incrementar sus beneficios en las inversiones del software” Las unidades de software que se reutilizan pueden ser de tamaños totalmente diferentes: Reutilización de sistemas de aplicaciones: Puede ser reutilizada incorporándolos sin ningún cambio en otros sistemas, configurando la aplicación para diferentes clientes. Reutilización de componentes: Varía en tamaño desde subsistemas hasta objetos simples. Reutilización de objetos y funciones: Pueden reutilizarse componentes software que implementan una única función. Una forma complementaria de reutilización es la reutilización de conceptos, en la que en lugar de reutilizar un componente, la entidad reutilizada es más abstracta y se diseña para ser configurada y adaptada a una variedad de situaciones. Puede incluirse tanto en patrones de diseño, productos de sistemas configurables y generadores de programas. “La gran ventaja es que los costes de desarrollo deberían reducirse”. Seguidamente se muestra una tabla con una serie de ventajas e inconvenientes que existe en el proceso de reutilización del software: TABLA DE VENTAJAS E INCONVENIENTES VENTAJAS INCONVENIENTES Incremento de la confiabilidad Incremento en los costes de mantenimiento Reducción del riesgo del Falta de soporte de las proceso herramientas Uso efectivo de especialistas Síndrome de reinventar la rueda Cumplimiento de estándares Creación y mantenimiento de una librería de componentes 3
  • 4. Desarrollo acelerado Búsqueda de componentes 2.- EL CAMPO DE REUTILIZACIÓN Estas explotan el hecho de que los sistemas del mismo dominio de aplicación son similares y tienen potencial para la reutilización. Esta reutilización es posible a diferentes niveles desde funciones simples a funciones completas. Los factores clave que deberían de considerarse a la hora de planificar la reutilización son: La agenda de desarrollo del software: Son activos reutilizables de grano grueso. Vida esperada del software: Si se está desarrollando un sistema de larga vida, habría que centrarse en la mantenibilidad del sistema. Se tendrá que adaptar el sistema a nuevos requerimientos, lo cual probablemente signifique hacer cambios a los componentes y sistemas de proveedores. Los conocimientos, habilidades y experiencia del grupo de desarrollo: Todas las tecnologías de reutilización son bastante complejas y se necesita bastante tiempo para comprenderlas y usarlas de forma efectiva. La criticidad del software y sus requerimientos no funcionales: Se tiene que crear un caso de confiabilidad para el sistema. Esto es difícil si no se tiene acceso al código fuente del software. El dominio de las aplicaciones: En algunos dominios de aplicaciones como los sistemas de información medica y de fabricación hay varios productos genéricos que pueden reutilizarse para configurarlos a una situación particular. La plataforma sobre la que el sistema se va ejecutar: Los sistemas de aplicaciones genéricos pueden ser plataformas especificas y solamente es posible reutilizarlos si el sistema se diseña para la plataforma. 4
  • 5. 2. a.-CONCLUSIONES La reutilización lleva varios años en el ámbito de la ingeniería y se esta instaurando sobre todo en las grandes empresas ya que se produce una gran disminución de los costes a la vez que abarata los precios y se obtiene mayores benéficos además de un gran ahorro de implementación pero si supone un gran esfuerzo en la planificación y a su vez en la integración de la misma, todo esto empezó y fue reconocido durante muchos años en Japón (Matsumoto, 1984) con el desarrollo del software “Cusamano” y más adelante otras empresas que han experimentado con esto han sido Hewlett.Packard con los programas “Gris y Wosser”. En cuanto al riesgo sobre la planificación, implementación y desarrollo de la reutilización del software es posible que no se comprendan los riesgos asociados tan bien como se entienden los riesgos del desarrollo original aunque algunos gestores pueden preferir estos riesgos ya conocidos que otros que son desconocidos. 3.-PATRONES DE DISEÑO Los patrones de diseño se derivaron de las ideas introducidas por Christopher Alezander, quien sugirió que existían ciertos patrones del diseño de edificios que eran comunes e inherentemente interesantes y efectivos. El patrón es una descripción del problema y la esencia de su solución, de forma que la solución se pueda reutilizar en diferentes situaciones. El patrón no es una especificación detallada, antes bien, puede pensarse en el como una descripción del conocimiento y experiencia acumulados “Los patrones y los lenguajes de patrones son formas de describir las mejores prácticas, buenos diseños, y encapsulan la experiencia de tal forma e es posible para otros el reutilizar dicha experiencia”. 5
  • 6. 3. a- ¿QUE ES UN PATRÓN DE DISEÑO? Son soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones basadas en la experiencia y que se ha demostrado que funcionan. Es evidente que a lo largo de multitud de diseños de aplicaciones hay problemas que se repiten o que son análogos, es decir, que responden a un cierto patrón. Sería deseable tener una colección de dichos patrones con las soluciones más óptimas para cada caso. En este artículo presentamos una lista con los más comunes y conocidos. Los patrones de diseño no son fáciles de entender, pero una vez entendido su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han revolucionado el diseño orientado a objetos y todo buen arquitecto de software debería conocerlos. 3. b- EJEMPLO DE UN PATRÓN Nombre del patrón: Observer Descripción: Separa la vista del estado de un objeto del objeto mismo y permite proporcionar vistas alternativas. Cuando el estado del objeto cambia, todas las vistas son notificadas y actualizadas de forma automática para reflejar el cambio. Descripción del problema: En muchas situaciones es necesarios proporcionar múltiples vistas de laguna información del estado, tal como una vista grafica y una vista tabular. No todos ellos pueden ser conocidos cuando se especifica la información. Todas las presentaciones alternativas pueden soportar interacción y, cuando el estado se cambia, deben actualizarse todas las vistas. Este patrón puede utilizarse en todas las situaciones en las que se requiera más de un formato de vista para la información del estado y en las que no es necesario que el objeto que mantenga la información del estado conozca los formatos específicos utilizados para las vistas. Descripción de la solución: La estructura del patrón se muestra en la figura. Esta define dos objetos abstractos, Subject y Observer, y dos objetos concretos ConcreteSubject y ConcreteObserver, que heredan los atributos de los objetos abstractos relacionados. El estado a visualizar es mantenido en ConcreteSubject, que también hereda las operaciones del Subject permitiéndole añadir y eliminar Observers y enviar una notificación cuando el estado ha cambiado. El objeto ConcreteObserver mantiene una copia del estado de ConcreteSubject e implementa la interfaz Update () de Observer, que permite guardar estas copias en el mismo momento. Consecuencias: El objeto Subjecct solamente conoce el Observer abstracto y no conoce los detalles de la clase concreta. Por ello hay un mínimo acoplamiento entre estos objetos. Debido a esa falta de conocimiento, las optimizaciones que mejoran el rendimiento de la visualización no son prácticas. Los cambio es en el objeto Subject pueden provocar la generación de un conjunto de actualizaciones vinculadas con los objetos Observers, algunas de las cuales pueden no ser necesarias. 6
  • 7. 3. c-DESCRIPCIÓN DE UN PATRÓN DE DISEÑO Los cuatro elementos esenciales de los patrones de diseño: Un nombre que es una referencia significativa del patrón. Una descripción del área del problema que explica cuando puede aplicarse el patrón. 7
  • 8. Una descripción de las partes de la solución del diseño, sus relaciones y sus responsabilidades. Es una plantilla para una solución de diseño que puede instanciarse de diferentes formas. A menudo estas se expresan gráficamente y muestra las relaciones entre los objetos las clases de los objetos en la solución. Una declaración de las consecuencias de aplicar el patrón. Esto puede ayudar a los diseñadores a comprender si un patrón puede ser aplicado de forma efectiva en una situación particular. 3. d- BREVE RESEÑA HISTORICA En 1979 el arquitecto Christopher Alexander aportó al mundo de la arquitectura el libro The Timeless Way of Building; en él proponía el aprendizaje y uso de una serie de patrones para la construcción de edificios de una mayor calidad. En palabras de este autor, "Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno, así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón de veces más adelante sin tener que volver a pensarla otra vez." Los patrones que Christopher Alexander y sus colegas definieron, publicados en un volumen denominado A Pattern Language, son un intento de formalizar y plasmar de una forma práctica generaciones de conocimiento arquitectónico. Los patrones no son principios abstractos que requieran su redescubrimiento para obtener una aplicación satisfactoria, ni son específicos a una situación particular o cultural; son algo intermedio. Un patrón define una posible solución correcta para un problema de diseño dentro de un contexto dado, describiendo las cualidades invariantes de todas las soluciones. Más tarde, en 1987, Ward Cunningham y Kent Beck usaron varias ideas de Alexander para desarrollar cinco patrones de interacción hombre-ordenador (HCI) y publicaron un artículo en OOPSLA- 87 titulado Using Pattern Languages for OO Programs. No obstante, no fue hasta principios de los 90's cuando los patrones de diseño tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo Gang of Four (GoF) compuesto por Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides, en el que se recogían 23 patrones de diseño comunes. 3. e – TIPOS DE PATRONES A continuación se muestra una lista con el tipo de patrones y una breve descripción de cada uno de ellos: Patrones de creación * Abstract Factory. Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas. * Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones. 8
  • 9. * Factory Method. Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos. * Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo. * Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella. Patrones estructurales * Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles. * Bridge. Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. * Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte- todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos. * Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad. * Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar. * Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente. * Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste. Patrones de comportamiento * Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto. * Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones. * Interpreter. Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje. * Iterator. Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna. * Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente. 9
  • 10. * Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde. * Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos. * State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto. * Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan. * Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura. * Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera. 10
  • 11. 3. f – PATRONES GRASP Los últimos cuatro patrones GRASP son: Polimorfismo: Esta acorde al espíritu del patrón “”Lo hago yo mismo”. En vez de operar externamente sobre un pago para autorizarlo, el pago se autoriza a si mismo, esto constituye la esencia de la orientación a objetos. Sera el patrón más importante estratégico en el diseño orientado a objetos. Es un principio fundamental que fundan las estrategias globales, o planes al ataque, al diseñar como organizar un sistema para que se encargue del trabajo. o Beneficios: Es fácil agregar las futuras extensiones que requieren las variaciones imprevistas. Fabricación Pura: Para diseñar una fabricación pura debe buscarse ante todo una gran potencial de reutilización, asegurándose para ello de que sus responsabilidades sean pequeñas y cohesivas. Estas clases tienden a tener un conjunto de responsabilidades de granularidad fina. Una fabricación pura suele partirse atendiendo a su funcionalidad y, por lo mismo, es una especie de objeto de función central. Generalmente se considera que la fabricación es parte de la capa de servicios orientada a objetos de alto nivel en una arquitectura. Muchos patrones actuales del diseño orientado a objetos constituyen ejemplos: adaptador, observador, visitante y otros más…. o Beneficios: Se brinda soporte a una alta cohesión porque las responsabilidades se dividen en una clase de granularidad fina que se centra exclusivamente en un conjunto muy específico de tareas. o Puede aumentar el potencial de reutilización debido a la presencia de las clases fabricación pura de granularidad fina, cuyas responsabilidades pueden utilizarse en otras aplicaciones. Indirección: El motivo de la indirección casi siempre es el bajo acoplamiento, se agrega una intermediaria con el fin de desacoplar otros componentes o servicios. o Beneficios: Bajo acoplamiento. No hables con extraños: Se refiere a no obtener una visibilidad temporal frente a objetos indirectos, que son de conocimiento de otros objetos pero no del cliente. La desventaja de conseguir visibilidad ante extraños es la siguiente: la solución se acopla entonces a la estructura interna de otros objetos. Esto origina un alto acoplamiento que hace el diseño menos robusto y más propenso a requerir un cambio si se alteran las relaciones estructurales indirectas. o Beneficios: Bajo acoplamiento. 11
  • 12. 3. g – EL FUTURO DE LOS PATRONES En la actualidad, se ha desarrollado y catalogado un número relativamente pequeño de patrones. De cualquier manera, los últimos cinco años han sido testigos de una tremenda explosión, en términos de interés industrial. Los patrones, junto con los componentes, ofrecen la esperanza de que la ingeniería del software, eventualmente, se parezca a otras disciplinas de ingeniería, con clases volviéndose al análogo en software de componentes electrónicos, y los patrones volviéndose el análogo en software de pequeños circuitos hechos de componentes. Antes de que esto suceda, existe aún una ingente cantidad de trabajo que llevar a cabo al identificar patrones y catalogarlos; también, se producirá esta situación, cuando el numero de patrones existentes se vuelva tan grande, que se necesite una forma de indexado automática o semiautomática. 3. h – CONCLUSIONES Los patrones de diseño permiten al diseñador crear la arquitectura de diseño integrando componentes reusables. La programación Orientada a objetos extiende el modelo de diseño a un dominio de ejecución. Un lenguaje de programación Orientado a objetos se usa para traducir las clases, atributos, operaciones y mensajes, de manera que puedan ejecutarse por la maquina. En la actualidad existe un buen grupo de patrones, sin embargo, en los próximos años debería haber una verdadera expansión de su uso. Aquí juega un gran papel la reutilización del software ya que los patrones de diseño en el futuro debe de integrar e implementar con la reutilización de componentes software para a su vez abaratar costes de producción y de ejecución como a su vez intentar realizar paulatinamente mejoras en la calidad del software rehusándolo, mejorándolo e intentando explotar y aumentar el nivel de patrones a su vez. 4. – REUTILIZACIÓN BASADA EN GENERADORES El conocimiento reutilizable se captura en un sistema generador de programas que puede ser programado por expertos en el dominio utilizando un lenguaje orientado a dominios o una herramienta CASE interactiva que soporte la generación de sistemas. Utilizando esta información se puede generar un sistema software operativo: 12
  • 13. La reutilización basada en generadores ha tenido éxito sobre todo para sistemas de aplicaciones de negocios. Estos pueden generar aplicaciones completas o pueden automatizar parcialmente la creación de aplicaciones y dejar que el programador las complete con detalles específicos. También se utiliza en otras áreas como: Generadores de analizadores para el procesamiento del lenguaje. Generadores de código en herramientas CASE. 4. a – CONCLUSIONES En cuanto a la reutilización basada en generadores se ha demostrado e informado que le mejor para su uso es a la hora de aplicar sistemas en los negocios porque a su vez es totalmente rentable para aplicaciones como procesamiento de datos además de que resulta más sencillo para los clientes o usuarios cuando van a desarrollar programas utilizando generadores frente a otro tipo de componentes basados en la reutilización, pero con esto puede surgir u problema que es que a la hora de utilizar esta aproximación a grandes rasgos o con un rendimiento bastante alto. Habría que destacar en este aspecto una de las aproximaciones mejores y mas importantes que es el desarrollo de software orientado a aspectos (AOSD), en esta aproximación los intereses compartidos se implementan como aspectos y dentro del programa se define como se debería asociar un aspecto, actualmente este desarrollo es un tema de investigación importante, pero todavía no se ha generalizado su uso para el desarrollo industrial del software porque el código que se genera no es eficiente comparándolo con el código escrito manualmente y se necesita un mayor conocimiento de las relaciones entre los requerimientos no funcionales del sistema y los aspectos. . 13
  • 14. 5. – TIPOS DE REUTILIZACIÓN Podemos definir distintos tipos de reutilización del software como: Oportunista: El ingeniero de software reutiliza piezas que él sabe que se ajustan a su problema. Sistemática: Es un esfuerzo global (a nivel organización) y planificado de antemano. Los artefactos reutilizables deben ser generados con la abstracción necesaria y con un nivel de variabilidad adecuado (estudio de los aspectos comunes y variables del dominio). Es decir, todo componente reutilizado ha de ser ideado, a priori, para ser reutilizado. Implica unas inversiones iníciales para recoger frutos en un futuro. La reutilización sistemática suele ser la única vía de éxito sostenible. Para poder llevar a cabo reutilización sistemática se requiere: Estudiar su viabilidad. Determinar el dominio de aplicación de estos componentes. Diseñar y desarrollar componentes suficientemente genéricos como para que puedan ser reutilizados con facilidad. Debe ser una política soportada desde la alta dirección. Los procedimientos y reglas a seguir deben estar definidos de antemano. Se deben definir métricas para medir su utilidad y poder mejorar los procesos de reutilización. Seguidamente se muestra un grafica que contiene la evolución de algunas características sobre “Granularidad en la reutilización”. 14
  • 15. Anotación: Como podemos comprobar en la grafica el nivel de beneficio aumenta continuamente si altibajos y a su vez determina mayor facilidad de uso. A continuación se muestra otra grafica ilustrando el nivel de abstracción que hay en la reutilización del software: Anotación: Como vemos la reutilización de código nos hace obtener un beneficio progresivo a la hora de la implementación y uso pero a su vez nos plantea mayor o menor dificultad dependiendo de la tecnología que se utilice. A continuación se citara una lista con los diferentes aspectos de la reutilización: Bottom-Up: Se desarrollan pequeños componentes para una determinada aplicación. Se incorporan a un repositorio de artefactos software. 15
  • 16. Top-Down: Se realiza un estudio previo global de todo el dominio de la organización. Se determinan las piezas necesarias que encajan unas con otras. Se van desarrollando, poco a poco, todas estas piezas. En la práctica, el enfoque Top-Down suele aportar mayores éxitos. No todos los aspectos a tener en cuenta en reutilización son técnicos. Aspectos como el “Not invented here” son una barrera a la reutilización de software. La reutilización sistemática requiere apoyo de la alta dirección debido a que: Requiere una alta inversión al comienzo. Se empezarán a recoger beneficios en el futuro. 5. a – CONCLUSIONES Cualquiera de los enfoques vistos en este punto es totalmente valido para su uso en la reutilización del software aunque hay que tener especialmente cuidado a la hora de pasar de una reutilización “oportunista” a una “sistemática”, en cuanto a los aspectos hay que detallar que el “Buttom- Up” es mas sencillo a su vez menos costoso ya que su utilización recae en aplicaciones pequeñas y sencillas mientras que el “Top-Down” habría que realizar un estudio global para ajustarse a las necesidades del software y esto requerirá mayor tiempo, mayor coste, pero nos resultara más eficiente y seguro 6. – REUTILIZACÓN DE SISTEMAS DE APLICACIONES Implica reutilizar sistemas de aplicaciones completos configurando un sistema para un entorno específico o integrando dos o más sistemas para crear una nueva aplicación. Es la técnica más efectiva, implica la reutilización de activo de grano grueso que pueden ser rápidamente configurados para crear un nuevo sistema. En esta sección nombraremos dos tipos de reutilización de aplicaciones: Reutilización de productos COTS y el desarrollo de líneas de productos. 6. a – REUTILIZACIÓN DE PRODUCTOS COTS Se aplica a un sistema software que puede utilizarse sin cambios por su comprador. Incluye muchas características y funciones para que sea potencialmente reutilizable en diferentes aplicaciones y entornos. Si bien puede haber problemas con esta aproximación para la construcción de sistemas (Tracz, 2001). Algunos tipos de productos COTS han sido reutilizados durante muchos años. Los sistemas de base 16
  • 17. de datos son un ejemplo. Hasta mediados delos 90 solamente existían unos cuantos sistemas grandes, como los sistemas gestión de bases de datos y monitores de teleprocesamiento, que fueran reutilizados de forma rutinaria. En la actualidad es normal para los sistemas grandes tener definidas interfaces API´S que permiten programar el acceso a las funciones de dichos sistemas. Debido a la funcionalidad de estos productos COTS ofrecen es posible reducir costes y tiempos de entrega en varios órdenes de magnitud comparados con el desarrollo de nuevo software. Para desarrollar sistemas utilizando productos COTS, se tienen que tomar varias elecciones de diseño: ¿Qué productos COTS ofrecen en la funcionalidad más adecuada? ¿Cómo se intercambiarán los datos? ¿Qué características de un producto se utilizaran realmente? Después de haber nombrado las elecciones para el diseño cuando hablamos del uso de un sistema COTS a gran escala es el mismo que el uso de cualquier otro componente más específico. Se tienen que comprender las interfaces del sistema y hay que utilizarse exclusivamente para comunicarse con el componente: Se tiene que buscar un equilibrio entre los requerimientos específicos y el desarrollo rápido y la reutilización y se tiene que diseñar una arquitectura del sistema que permita que los sistemas COTS operen conjuntamente. Boehm y Abts, 1999 plantean cuatro problemas con la integración de sistemas COTS: Ausencia de control sobre la funcionalidad y el rendimiento. Problema con la interoperabilidad del sistema COTS. No existe control sobre la evaluación del sistema. Soporte de los vendedores de productos COTS. Aunque no es probable que todos estos problemas que ocurran en cada caso, pero al menos uno de ellos e va a producir en la mayoría de los proyectos de integración COTS de esto los beneficios en coste y tiempo derivados de la reutilización de COTS son probablemente menores que los que podrían esperarse de un principio. Además Boehm y Abts, señalan que el coste de mantenimiento y evolución de un sistema puede ser mayor cuando se utilizan productos COTS. En un sistema cuantos menos desarrolladores originales haya, más personas estarán implicadas en su mantenimiento, por lo que es más probable que se planteen problemas con la integración de productos COTS. Los beneficios de reutilización de productos COTS son significativos debido a que estos sistemas ofrecen mucha más funcionalidad a la persona que los reutiliza, se ahorra mucho tiempo si se reutiliza un sistema existente los tiempos de desarrollo del sistema se reduce drásticamente. 17
  • 18. 6. b – LINEAS DE PRODUCTOS SOFTWARE Es una e las aproximaciones más efectivas para la reutilización, es un conjunto de aplicaciones con una arquitectura común específica de dichas aplicaciones. El núcleo común de la familia de aplicaciones se reutiliza cada vez que se requiere una nueva aplicación. El nuevo desarrollo puede implicar una configuración específica de componentes, implementación de componentes adicionales y adaptación de algunos componentes para satisfacer las nuevas demandas. Se pueden desarrollar varios tipos de especialización de líneas de productos software: Especialización de la plataforma: Solo se modifican aquellos componentes que interactúan con el hardware y con el sistema operativo. Especialización del entorno: Se crean versiones de la aplicación para gestionar entornos operativos y dispositivos periféricos concretos. Especialización de la funcionalidad: Se crean versiones de la aplicación para clientes específicos que tienen diferentes requerimientos. Especialización del proceso: El sistema se adapta para tratar con procesos de negocio específicos. Las líneas de productos software se diseñan para ser reconfiguradas. Esto puede implicar añadir o eliminar componentes del sistema, definir parámetros y restricciones para los componentes del sistema, e incluir conocimiento de los procesos de negocio. Pueden ser configuradas en dos puntos del proceso de desarrollo: Configuración durante el despliegue: sistema genérico que se diseña para su configuración por u cliente o consultores que trabajan con el cliente. Configuración durante el diseño: en donde la organización que está desarrollando el software modifica un núcleo de líneas de productos comunes desarrollando, seleccionando o adaptando componentes para crear un nuevo sistema para un cliente. La configuración durante el despliegue se utiliza en paquetes de software verticales que son diseñados para una aplicación específica tal como un sistema de gestión de información de un hospital. También se utiliza en sistemas de planificación de recursos de empresas (ERP) tales como los producidos por SAP y BEA. El proceso de estos implica compartir la información detallada sobre el negocio del cliente y el proceso de negocio y a continuación incluir esta información en una base de datos de configuraciones. El sistema ERP genérico incluye un gran número de módulos que pueden componerse de diferentes formas para crear un sistema específico. El proceso de configuración implica elegir que módulos tienen que ser incluidos, configurara estos módulos individuales, definir procesos y reglas de negocio, y definir la estructura y organización de la base de datos del sistema. Ejemplo: 18
  • 19. Los sistemas ERP son quizá el ejemplo más extendido de la reutilización de software, la mayoría de las grandes compañías utilizan estos sistemas para soportar alguna o todas sus funciones, aunque existe una limitación obvia de que la funcionalidad del sistema se restringe a la funcionalidad del núcleo genérico, puede haber alguna discrepancia entre los conceptos del negocio y los conceptos soportados e el lenguaje de configuración. La aproximación alternativa a la reutilización de familias de aplicaciones es la configuración por el proveedor del sistema antes de entregarlo al cliente. El proveedor comienza un sistema genérico y después, modificando y extendiendo módulos en este sistema crea un sistema especifico que proporciona las funcionalidades requeridas por el cliente. Esto implica cambiar y extender el código fuente del núcleo del sistema para que sea posible una mayor flexibilidad que con una configuración durante el despliegue. Ejemplo: 19
  • 20. 6. c – CONCLUSIONES En esta sección hemos definido los diferentes tipos de reutilización de sistemas de componentes como son: Reutilización de productos COTS y Líneas de productos software. En el que hemos podido comprobar que los sistemas COTS han ido evolucionando desde los años 90 en el que de haber unos pocos sistemas granes que han implementado con sistemas COTS a en la actualidad que la gran mayoría de sistemas grandes tienen definidas interfaces (APIs) que permiten programar el acceso a las funciones de dichos sistemas, mientras que las líneas de productos software ha sido y es utilizada para sistemas más pequeños basado en negocios porque permite que el núcleo de aplicaciones que puede implicar una configuración especifica de componentes, implementación de componentes adicionales y adaptación de algunos componentes para satisfacer nuevas demandas, aunque los sistemas COTS sean mas robustos por su dimensión muestra una posibilidad de reducir costes además de tiempos de entrega comparados con los desarrollo del nuevo software además de que los riesgos pueden reducirse ya que el producto se encuentra disponible y los gestores pueden ver si dio producto satisface sus requerimientos. 7. – DESARROLLO DE COMPONENTES PARA REUTILIZACIÓN Por ultimo punto de este seminario vamos a analizar como se realiza el desarrollo en la reutilización de los componentes asociados, como ya se ha indicado a lo largo del seminario los problemas de confianza implican que hasta ahora no haya sido desarrollado un mercado abierto de componentes y la mayoría de componentes que son reutilizados han sido implementados y utilizados dentro de la empresa. Los componentes reutilizables no están especialmente desarrollados, sino que se basan componentes existentes que ya han sido implementados y utilizados en sistemas de aplicaciones. Los componentes desarrollados internamente no son inmediatamente reutilizables, por lo que habría que adaptar y extender estos componentes para crear una versión mas genérica y por tanto más reutilizable, esto tiene un coste asociado, hay que plantearse primero si un componente va a ser probablemente reutilizado y segundo se el ahorro de costes de la reutilización justifican los costes para hacer que ese componente reutilizable. Para responder el primer apartado, tiene que decidirse si el componente implementa una o más abstracciones del dominio estables. Para responder ala cuestión sobre la efectividad del coste, tienen que evaluarse los costes de los cambios requeridos para hacer que el componente sea reutilizable. Estos costes son los costes de documentación del componente, la validación del componente y os costes para hacer que el componente sea más genérico. Los cambios que pueden hacerse para que el componente sea más reutilizable incluyen: Eliminar los métodos específicos de la aplicación. 20
  • 21. Cambiar los nombres para hacerlos más generales. Añadir métodos para proporcionar una cobertura funcional más completa. Hacer que el manejo de excepciones sea consistente para todos los métodos. Añadir una interfaz de configuración para permite que el componente se adapte a diferentes situaciones de uso. Integrar los componentes requeridos para incrementar la independencia. El problema de manejo de excepciones es particularmente difícil. En principio todas las excepciones deberían formar parte de la interfaz del componente. Los componentes no deberían manejar las excepciones que pueden ocurrir y debería publicarlas como parte de su interfaz. MILI (2002) y otros plantean formas de estimar costes para hacer que un componente sea reutilizable y estimar el resultado de esta inversión. Otro importante fuente de componentes son los sistemas heredados existentes, hay sistemas que desempeñan una función importante para la empresa, pero están escritos utilizando tecnologías software obsoletas. Debido a estos puede ser difícil utilizarlos con nuevos sistemas, si se quedan anticuados pueden reutilizase en aplicaciones nuevas. Para hacer que estos componentes sean reutilizables, tienen que definirse las interfaces del componente mediante lo que se conoce como wrapper , oculta la complejidad del código subyacente y proporciona una interfaz para que los componentes externos puedan acceder a los servicios que dicho código proporciona, este wrapper, es un elemento del software bastante complejo ya que tiene que acceder a la funcionalidad del sistema heredado. El coste de un wrapper es menor que volver a implementar el sistema heredado. 7. a – CONCLUSIONES En esta sección podemos comprobar que en el desarrollo de componentes para la reutilización se obtiene simples ganancias en cuanto a productividad se refiere porque también gran parte de esos beneficios se obtienen gracias a la calidad debido a que los componentes reutilizados suelen ser mas confiables además de obtener ganancias en el mercado hay que tener n cuenta también las ganancias al desplegar el software más rápidamente aunque nos muestra un problema que es la falta de equilibrio cuando hablamos de reusabilidad y uso de un componente porque hacer que un componente pueda ser reutilizable implica proporcionar unas interfaces genéricas y paraqué sea usable implicarlo mismo solo que con una interfaz más sencilla a la hora de comprenderla. Todo esto produce que sea complejo a la hora de reutilizar componentes por que lo interesante seria buscar y encontrar el equilibrio de reusabilidad y usabilidad. 21
  • 22. 8.- CONCLUSIONES FINALES En este seminario he desarrollado una gran gama de aspectos de la reutilización del software empezando por el campo, seguidamente una larga descripción, historia y tipos de patrones que se usan a la hora de reutilizar así como las técnicas que se usan, tipos y reutilización basada en generadores y aplicaciones, en el aspecto de los patrones hay que destacar que son totalmente fundamentales para la reutilización del software en el diseño orientado a objetos porque nos documentan situaciones de cualquier tipo de diseño, hablando de generadores de programas los conceptos reutilizables están incluidos en un sistema generador, en cuanto a la reutilización de productos COTS se utilizan a grandes escalas en empresas bastante grandes y en la actualidad están resaltada por la programación de interfaces (APIs) que esta muy vinculada a la reutilización de productos COTS, permite reducir costes además de tiempo en el desarrollo y darle mayor funcionalidad aunque no todo es beneficioso y como todo tiene unos aspectos en el que surgen problemas y es la falta de control en el rendimiento y su funcionalidad y muestran una desconfianza o dificultad para asegurar que los sistemas puedan interoperar pero además de estos aspectos es una buena solución sobre todo en empresas de alto nivel a la hora d desarrollar sistemas con reutilización del software. Cuando se ha hablado de los sistemas ERP se a destacado su facilidad de operar en pequeños negocios gracias a su sencillez y su facilidad de comprender además de tener costes más pequeños pero muestran carencias a la hora de seguridad y de aportar requisitos más importantes o diferentes pero se aplica muy bien a la pequeña y mediana empresa. En cuestión cuando hablamos de líneas de productos que son aplicaciones que se desarrollan a partir de otra base muestra una ventaja en su funcionamiento y proceso por ejemplo para el uso de vehículos para servicios de emergencia. Por ultimo hay que destacar las principales ventaja que se obtiene de la reutilización del software como reducción e los costes, disminución de los riesgos y a la hora del desarrollo aumento de frecuencia y rapidez, permite que los especialistas concentre su experiencia en diseñar componente para la reutilización además de aumentar la confiabilidad dentro de los sistemas. 22
  • 23. 9.- BIBLIOGRAFIA “Ingeniería del Software – Ian Somerville, 7ª Edición, Ed: Pearson, Adisson Wesley” “http://www.ingenierosoftware.com/analisisydiseno/patrones-diseno.php” “http://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o” “Ingeniería del Software. Un enfoque practica – Roger S.Pressman, 5ª Edición, Mc Graw Hill” “Uml y Patrones. Introducción al análisis y diseño orientado a objetos –Craig Larman, Pearson, Prentice Hall” 23