SlideShare ist ein Scribd-Unternehmen logo
1 von 31
UNIVERSIDAD TÉCNICA FEDERICO SANTAMARIA
         Departamento de Informática




Triz para Software
Analogía de Patrones de Software
       Patricio Esquivel      2151024-6
       Francisco Riveros E.   2273036-3
       Andro Vlahovic         2273037-1

       Profesor :             Lautaro Guerra


                       6/23/2008
2     Triz para Software


    Indice
    Introducción ....................................................................................................................... 4
       Algoritmos Rápidos ...................................................................................................... 4
       Ley de Moore................................................................................................................. 5
       Tamaño del Software ..................................................................................................... 6
       Desarrollo de Arquitecturas ............................................................................................ 6
       Modas de una evolución tecnológica .............................................................................. 7
    Triz para el Software .......................................................................................................... 7
       Problemas de Software ................................................................................................... 9
       Triz para Software.......................................................................................................... 9
       Definición .................................................................................................................... 10
       Siete Pilares de “TRIZ para Software” ......................................................................... 10
       Subversión Análisis ...................................................................................................... 10
       Matriz de Contradicciones ............................................................................................ 11
       Generación de Solución................................................................................................ 13
       Secuencia de uso (frecuencia) de los Principios de Inventiva ........................................ 15
            Idealidad y Tendencias ............................................................................................. 16
    Diseñando Patrones de Software con Triz ........................................................................ 17
       Contradicciones Espacio-Tiempo ................................................................................. 18
    Diseño de Patrones y TRIZ .............................................................................................. 19
       1.     Adapter Pattern y el principio Mediador (Mediator Principle) ................................ 19
            1.3 Adaptación por herencia ..................................................................................... 19
            1.2 Adaptación por Composición.............................................................................. 20
       2. Composite and Iterator Pattern y el principio de Universalidad (Universality
       Principle) ..................................................................................................................... 21
       3.     Decorator Pattern y los principios de Agrupamiento y/o Membranas Flexibles ...... 21
       4.     Facade Pattern y el principio de la consolidación ................................................... 21
       5.     Flyweight Pattern y el principio de transición hacia una nueva dimensión ............. 22
       6.     Proxy Patterm y los principios de Cambio de parámetro y/o transición de fase ..... 22
    Ejemplos de Patrones ....................................................................................................... 23
       Proxy pattern................................................................................................................ 23
       Decorator Pattern ......................................................................................................... 23
       Facade Pattern.............................................................................................................. 24
       Bridge Pattern .............................................................................................................. 25
       Composite Pattern ........................................................................................................ 26
3     Triz para Software


       Adapter Pattern ............................................................................................................ 27
    Conclusiones .................................................................................................................... 27
    Referencias ...................................................................................................................... 28
    Anexos............................................................................................................................. 29
       Patentes en el software ................................................................................................. 31
4    Triz para Software


    Introducción
            Triz ha llegado a ser muy poderoso para resolver problemas y para crear soluciones
    innovadoras. Triz es principalmente usado para problemas mecánicos y en la forma actual,
    no tanto para problemas eléctricos de software. Pero para aplicar TRIZ al software tenemos
    que aplicar los principios de inventiva. Esos principios de inventiva son usados para
    resolver un problema algorítmico definiendo una situación ideal, analizando las
    contradicciones y usando los principios para desarrollar un mejor algoritmo. (Un algoritmo
    inteligente es como algo equivalente a una construcción inteligente en la Ing. Mecánica).

    La traducción desde los Principios de Inventiva al Software es muy difícil de hacer para
    muchos. Incluso para usuarios expertos en TRIZ.

    La traducción hecha por Kevin Rea [Kev-01] ayuda mucho pero solo si uno estas
    trabajando en un área de aplicación que es el caso de programación concurrente.

      Un camino mejor es usar la metodología de Genrich Altschuller
      analizando las patentes en Ingeniería de Software y desarrollando
      completamente un nuevo conjunto de Principios de inventiva y Matriz
      de Contradicciones.

     Esto nos abre un camino para poder seguir en nuestra investigación aplicando conceptos de
    Triz y viendo diversas analogías a este. Las próximas secciones veremos puntos
    importantes que en el Software resaltan muchos problemas con lo que Triz puede ser una
    ayuda para romper estas barreras. Asimismo en la otra sección veremos el primer
    acercamiento a Triz aplicado al software con la respectiva matriz y principios generados
    por analogías por el autor Darell Mann.

    Algoritmos Rápidos

           Los Ejemplos que son descritos en la base de datos TRIZ conciernen el desarrollo
    de algoritmos rápidos y confiables usando recursos limitados (tales como tamaño de
    memoria y velocidad del procesador). Tenemos que existen un sin número de patentes
    comerciales donde algunos son exitosos algoritmos o standards que pueden ser
    comercialmente interesantes, por ejemplo,

    Algoritmos                                   Función
    MP3                                          Procesamiento de Sonido
    MPEG                                         Procesamiento de Video
    Algoritmos de Búsqueda Rápida                Google
    Tabla 1 - Algoritmos y funciones

           Así podemos formarnos una idea, de que tener un conjunto de patentes de software
    podría ayudarnos a crear una matriz y principios y hacer lo que hizo Altshuller con las
    patentes.
5    Triz para Software


    Un autor llamado Graham Rawlinson concluye que: "TRIZ es muy útil, pero a menudo no
    acierta con las soluciones derivadas", esto quiere decir que a pesar de que Triz nos ayude a
    resolver nuestros problemas, no siempre vamos a tener la solución que queríamos o la
    solución esperada, es decir, no es la “panacea”.

    El desarrollo de algoritmos rápidos ha sido sujeto de investigación desde inicios de los
    sesenta. (Cuando los computadores eran caros y los recursos eran limitados). Aunque
    muchos de los métodos desarrollados en ese entonces son todavía validos.


    Ley de Moore

           La ley de Moore expresa que aproximadamente cada dos años se duplica el número
    de transistores en un circuito integrado. Se trata de una ley empírica, formulada por el co-
    fundador de Intel, Gordon E. Moore el 19 de abril de 1965, cuyo cumplimiento se ha
    podido constatar hasta hoy.

           Entonces con esa ley se decía que no habría un hardware que pudiera dar solución
    a los problemas de software que en los cuales se necesitaba de nuevo Hardware para
    poder realizar las tareas en un modo eficiente, ya que cuando el software probaba que es
    muy lento, o requiere mucha memoria, simplemente se espera por un nuevo hardware y el
    problema es resuelto automáticamente.

    Crear algoritmos rápidos es importante cuando el Hardware requerido no es todavía disponible
    dentro un periodo largo de tiempo,

         En ingeniería mecánica hay un desafío continuo en crear nuevos productos y tratar
    con crecientes contradicciones. En muchos productos las limitaciones técnicas han sido
    (casi) alcanzadas. Por ejemplo, por 100 años los automóviles han manejado bajo motores a
    combustión, 30 años después el avión comercial Concorde es el avión volando a
    velocidades supersónicas y así sucesivamente. O sea esto llega cada vez a hacer mas y mas
    difícil para desarrollar nuevos productos e incrementar la funcionalidad llega a ser
    pequeño.

        Un ejemplo:

           Supongamos que un ingeniero mecánico de una empresa automotriz va hacia su
           jefe y le dice: "Jefe, soy capaz de hacer nuestro motor un 5% más eficiente". Su Jefe
           probablemente le responda: "Estoy atónito, tomate todo tu tiempo que tu necesites
           y no olvides escribir una patente".

           Ahora si un Ingeniero de Software va hacia su jefe y le dice: " Jefe, yo puedo hacer
           trabajar nuestro software 5% más rápido", su jefe probablemente responda, " Eso no
           es de importancia ahora, el próximo mes nosotros obtendremos un nuevo
           procesador el cual trabaja dos veces más rápido. Vuelve a tu trabajo, que todavía
           tienes 20 Bugs que resolver antes que termine esta semana, así que no malgastes
6    Triz para Software


          mas tu tiempo".



    Tamaño del Software

    Tal como la memoria disponible se incrementa 2 veces en 18 meses, así también las líneas
    de código. Sin embargo, productos de software están llegando a ser más grandes cada año y
    más gente necesita desarrollar este software. Es más la moda como sistemas abiertos,
    subcontratación, re-uso, están disponibles para sobrepasar esto. Todo esto crea situaciones
    que son más complejas resultando en proyectos fuera de tiempo, software no confiable y
    clientes insatisfechos.

    El principal desafío hoy en día es manejar esta creciente complejidad. Desde comienzos de
    los noventas hay un fuerte énfasis sobre los procesos de software. Muchas organizaciones
    están usando la capacidad madura de los modelos u otros frameworks para mejorar sus
    procesos de desarrollo de software.


    Desarrollo de Arquitecturas

    Otro camino para tratar con el incremento en la complejidad es crear una arquitectura de
    software. Una arquitectura de software provee de la estructura técnica para un proyecto.
    Una buena arquitectura hace que el resto del trabajo sea más fácil, pero una mala
    arquitectura hacer que el resto del trabajo sea casi imposible.

    En la creación de arquitecturas se tiene que tratar con las demandas conflictivas. La
    arquitectura desempeña requerimientos funcionales y no funcionales. Ejemplos de
    requerimientos no funcionales son:
            Portabilidad
            Mantención
            Flexibilidad
            Extensibilidad
            Reusabilidad
    Estos requerimientos no-funcionales son también conocidos como Soft Intents. En algunas
    áreas de aplicación un grafico de softgoal interdependencia es usado para visualizar estos
    conflictos. La mayoría de las soluciones son ajustadas a la "medida" entre estas demandas
    conflictivas. Difícilmente incluso todas estas demandas son completadas.

    TRIZ podría ser muy útil en resolver estas peticiones conflictivas (Contradicciones) en una
    manera más satisfactoria. Desde que las arquitecturas son también usadas en otros campos
    como ing. Mecánica nosotros podemos aprender desde la aplicación de TRIZ en este
    campo.
7       Triz para Software


    Modas de una evolución tecnológica

    Debido a que rápidamente se incrementan las capacidades del software es difícil decir
    cómo serán estos en el futuro. Es difícil imaginar que es posible en el futuro y que será
    exitoso.
    Triz se enfoca en la evolución tecnológica y esto podría ser usado para identificar las
    posibilidades de futuro. Combinado con modas comerciales, esto ayuda en definir
    productos exitosos en una temprana edad.


    Triz para el Software

    La utilización de los ordenadores como instrumentos de ayuda a las diferentes actividades
    humanas ha cobrado tal importancia que hoy resulta casi inconcebible subsistir en un
    mundo tan competitivo sin su uso. Se puede decir que su aplicación ha cubierto todas las
    esferas de la actividad humana, siendo previsible que el uso de ordenadores vaya en
    aumento cada vez más.
    Estos datos son suficiente argumento para sostener la importancia que tiene la investigación
    sobre el mejor uso de tales instrumentos mediante la elaboración de aplicaciones para estas.

    Puede TRIZ ser aplicado para el diseño y creación de software? parece ser una cuestión que
    se plantea por un número cada vez mayor de empresas. Se propone en este documento
    indagar sobre el terreno y hacer sugerencias en cuanto a lo que un "TRIZ de Software”
    puede hacer.

    Teniendo en cuenta los distintos autores (Darrel Mann, entre otros) al respecto, parece
    probable suponer que la sugerencia será, sí, TRIZ puede ser aplicado a software. No
    obstante a habida cuenta de algunos debates de TRIZ y software, parece que la respuesta
    positiva no es tan evidente.

    Uno de los autores (Ikovenko 1) habla en torno a este tema en el TRIZ Centrum conferencia
    en 2003 y llegó a la conclusión de que, básicamente, desde el desarrollo de software se
    encuentra aún en una etapa temprana de su evolución, en otras palabras, que el desarrollo
    de software es un arte y no una ciencia en si. Por lo que no era todavía probable que se
    prestara para al tratamiento de TRIZ, ya que no era considerado una ciencia como tal.
    Mas franco aún fue Karasik 2, fue más vehemente en su despido de las posibilidades de
    aplicar TRIZ para problemas de software, “siendo un equipo un científico y un ingeniero
    un software” los 40 principios no serán aplicables a ingeniería de software bajo ninguna
    circunstancia.


    1
      Ikovenko, S, “Laws of Engineering System Evolution In Software Development”,·3rd European TRIZ-
    Conference, ETH Zurich, March 2003.
    2
       Karasik, Y., editorial comment, Anti-TRIZ Journal, Vol.2, No.2, and private email correspondence, 8
    September 2004.
8       Triz para Software


    El trigger para Karasik para incurrir en tal afirmación de primer orden fue la investigación
    Publicada acerca de la lista de los 40 Principios de Inventiva para Software de
    Rea3.haciendo una analogía de la situación es que los 40 Principios de Inventiva - o la
    mayoría de ellos por lo menos - se puede observar en el diseño de software, considerada
    absurda para el.

    Sobre la base anterior de experiencias y el extenso análisis de las patentes realizadas
    durante el programa de investigación para la actualización de TRIZ, es nuestra firme
    convicción de que tiene TRIZ algo de importancia para ofrecer a ingenieros de software.

    Sin embargo a diferencia de las materias ciencias duras: mecanica, hidráulica, etc. lo que ya
    podemos ver es que el sesgo y la orientación de las distintas herramientas de TRIZ es muy
    diferente a la de software que en otros campos de aplicación. Por lo que el autor (Darrel
    mann) con el fin de explorar los prejuicios que, sin embargo, en primer lugar hay que
    estudiar el contexto y los límites de lo que es y lo que no es un problema 'software'. Una
    buena forma de comenzar esta exploración, según Mann, entonces, es mediante la Ley de
    Sistema de Integridad TRIZ4 (modificada) y ver cómo esto podría ser aplicado a sistemas
    informáticos. Es decir si un problema de software puede ser situado bajo esta perspectiva,
    así como las demás áreas lo han hecho, estos últimos no tendrían ningún impedimento para
    ser aplicado a través de TRIZ.




                                          Imagen 1 - Imagen de referencia

    La primera pregunta que surge después de pensar en este modelo, es aplicable a software?
    La respuesta es sí, podemos aplicar recursivamente el modelo en varios niveles jerárquicos
    .En el nivel del software subrutina, por ejemplo, podríamos pensar en el 'motor' como los
    algoritmos que figuran en la rutina, la transmisión como la llamada a la subrutina, la
    herramienta como los resultados calculados por la rutina y el control, las diferentes líneas
    de código en el software que asegurarse de que las cosas sucedan en la secuencia correcta y
    con la lógica deseada. El „campo (interface)' es un poco más grande, pero si pensamos en él
    como un "campo de la comunicación” la lógica sigue intacta. La misma analogía se puede

    3
     Rea, K., „TRIZ and Software - 40 Principle Analogies, Parts 1 and 2‟, TRIZ Journal, September and
    November 2001.
    4
        Mann, D.L., „Hands-On Systematic Innovation‟, CREAX Press, June 2002.
9    Triz para Software


    aplicar en forma progresiva a los niveles jerárquicos más altos en que nos fijamos en los
    sistemas desde la perspectiva del sistema operativo, idioma, etc. Ya sea cualquier nivel que
    veamos, en última instancia el "sistema" tiene que interactuar con algo fuera de la sistema
    („campo (interface)'). Siendo esto cosa fuera del sistema ser otra rutina de programa o el
    usuario mismo.


    Problemas de Software

    Los 'Problemas de Software' quizás a diferencia de los sistemas o ciencias convencionales
    es que sólo empezarán a ocurrir cuando se examinan los vínculos entre el software y el
    mundo exterior. Por lo tanto la única práctica, entonces, cuando nos encontramos en la
    identificación de modelos funcionales que contienen relaciones negativas es cuando
    llegamos a la interfaz con el mundo exterior. Ya que un fragmento de código no
    interacciona «Inadecuadamente» con otro, pero un pedazo de código muy a menudo
    interactúa inadecuadamente con una pieza de hardware o con un usuario.

    Es probable que esto significa que vamos a estar pensando en como TRIZ como
    herramienta en la resolución de problemas, en un instrumento algo a un diferente nivel de
    detalle en el punto de inicio de un modelo de análisis de la función.


    Triz para Software

    Bajo los aspectos mencionados anteriormente, Darrell Mann, lo obtuvo. Bajo los mismos
    procedimientos y analogías efectuadas a los 40 principios de TRIZ es posible resolver un
    problema de software mediante TRIZ.

    De esta manera a continuación se expondrá las ideas y procedimientos para efectuar tal
    resultado.

    Darrel Mann propone la siguiente estructura, de desarrollo y análisis del problema.

    Definición:
       1. Resultado Ideal Final.
       2. Explorar el problema.
       3. Subversión análisis.
       4. Matriz de contradicciones.

    Generación de Solución:
       1. Principios Inventivos.
       2. Tendencias/Evolución Potencial.

    Nota: Si bien la estructura anterior de procedimiento fue propuesta por Mann puede ser
    aplicada bajo cualquier ciencia; solo la matriz y los principios inventivos conforman obra
    de Mann y su utilización es única para “Problemas de Software”.
10    Triz para Software




     Definición

     Para esta primera aproximación Mann, baso su propuesta bajo dos perspectivas esenciales,
     en primer lugar bajo la utilización de siete pilares de exploración del problema y en
     segundo lugar las contradicciones en relación con los factores y/o parámetros que la
     conforman.


     Siete Pilares de “TRIZ para Software”

     Esta aproximación responde a las características y entendimiento del problema en cuestión.
     Es decir apoya a situarse en el problema y observar las características de este último, de
     manera que al momento de encontrar una solución a través de los principios inventivos por
     medio de la matriz de contradicciones resulte la más apropiada.

            Idealidad: atenta a encontrar cada vez mayor acerca de lo bueno, la disminución de
            lo malo.(“Si mismo”,autorepararse,autodaptarse,etc)
            Emergente: producir un a solución o atentar o situación relevante en el contexto de
            la situación del problema.
            Funcional: en el contexto de un software, esta existe para el software proporcionar
            una función útil, ya sea a otras piezas de software o de una pieza de hardware o un
            ser humano indep. del producto como tal.
            Contradicción: La contradicción de la eliminación de estrategias se puede utilizar
            para acelerar la evolución de cualquier sistema. Las contradicciones tienden a
            ocurrir en las interfaces entre software y el mundo exterior en su totalidad mas que
            en lugar de «dentro» del software.
            Recursos: Todo dentro y alrededor de un sistema que no se utiliza al máximo de su
            potencial es un recurso.
            Espacio/Tiempo/Interface: la comprensión efectiva de un problema requiere
            conocimiento de cómo un sistema se ve afectado por efectos espaciales, temporales
            y cuestiones interfaciales.
            Recursion: se refiere al fenómeno según el cual ciertos fenómenos de sistema se
            repiten en los diferentes niveles jerárquicos.



     Subversión Análisis

     Atenta a generar los errores que pudiera tener el sistema y de esta manera “Si el fallo
     ocurre, entonces los recursos necesarios para hacerlo suceder deben estar presentes en el
     sistema”
11       Triz para Software


     Por lo que Subversión es el análisis sobre la búsqueda de esos recursos, se trata de
     «inventar fracaso";¿Qué podría ir mal, irá mal, ¿Qué podría ir mal en el futuro, va a salir
     mal. Para así dar paso a las contradicciones y resolver el problema en cuestión.

           1.   Identificar el Problema- donde y cuando.
           2.   Amplificar el problema.(como hacer que ocurra todo el tiempo)
           3.   Formula el problema invertido.
           4.   Identificar los componentes necesarios.
           5.   Identificar los recursos en el sistema.


     Matriz de Contradicciones

     El clásico TRIZ Contradicción Matrix ha sido objeto de actualizaciones muchas veces en
     los últimos tiempos, primero a través de la publicación de “Matrix 2003 5” (para negocios)
     y, a continuación, más recientemente, un matriz de problemas empresariales. A pesar de
     pasar                 por                varios                pasos                 hacia
     lo que es relevante para los problemas que enfrentan los ingenieros de software y la
     búsqueda de muchas las patentes de software que había algo que aportar a la construcción
     de la herramienta, Matrix 2003 contiene mucho de lo que se consideró fuera de poner a los
     usuarios de software. De ahí que en 2003 se decidió que era necesario crear una matriz a
     medida para problemas de software. Esto matriz ya se ha concluido, y se convertido a
     disposición del público por primera vez cuando el libro "TRIZ para ingenieros de software"
     se público.
     La tabla de continuación ilustra los parámetros que componen las partes de la nueva
     Matriz.

                               Size (Static)
                               Size (Dynamic)
                               Amount of Data
                               Interface
                               Speed
                               Accuracy
                               Stability
                               Ability to Detect/Measure
                               Loss of Time
                               Loss of Data
                               Harmful Effects Generated By System
                               Adaptability/Versatility
                               Compatibility/Connectability
                               Ease Of Use
                               Reliability/Robustness


     5
      Mann, D.L., Dewulf, S., Zlotin, B., Zusman, A., „Matrix 2003: Updating The TRIZ Contradiction Matrix‟,
     CREAX Press, Belgium, July 2003.
12    Triz para Software


                             Security
                             Aesthetics/Appearance
                             Harmful Effects On System
                             System Complexity
                             Control Complexity
                             Automation
                            Parámetros de la nueva, Software Matrix

     El método de funcionamiento de la nueva Matriz es exactamente el mismo que el utilizado
     en las demás Matrices; el usuario tiene que identificar lo que ellos desean mejorar en su
     sistema, entonces que es lo que les impide hacer la mejora. Desde aquí es necesario
     entonces traducir los detalles del conflicto (el par mejora y empeoramiento) de la Matriz de
     la lista de parámetros con mi problema que corresponde mas estrechamente con los
     detalles. A partir de ahí, la matriz apreciara los más probable principios de inventiva
     utilizados por otros para solucionar el desafío con éxito del par conflictos.

     Esta nueva Matriz es el resultado del estudio de alrededor de 40000 patentes de software y
     el diseño soluciones. No obstante el número está limitado por el hecho de que actualmente
     sólo los EE.UU. es la concesión de software las patentes.

     Un ejemplo sencillo, sin embargo, ha de servir al doble propósito de demostrar cómo la
     matriz fue compilada (patentes) y cómo un usuario puede hacer uso de la herramienta.

     US6, 785.819
     Esta patente se concedió a Mitsubishi Denki Kabushki Kaisha el 31 de agosto de 2004 (en
     realidad algún tiempo después de la Matriz de trabajo se completó). Los antecedentes de la
     patente como descrito en la divulgación es el siguiente (extracto):

     “Recientemente, los sistemas informático que utiliza LAN se están adoptando en las
     organizaciones. Comúnmente, una pluralidad de LAN ubicadas en diversos lugares en una
     organización de la red entre oficinas están conectadas por completo para formar una
     intranet. La extensión de más, una extranet que incluye la organización aliada a las
     empresas a formar una red total también se está convirtiendo en generalizada. Hay varias
     formas de conectar una pluralidad de LAN ubicadas en diversos lugares. Para dar un
     ejemplo, hay un caso de utilizar a bajo costo a Internet en lugar de una línea arrendada.
     En este caso, el acceso desde el exterior debe ser regulado, por lo que un servidor de
     seguridad general, se recurre a una frontera de fuera y dentro de la red. Esto ayuda a
     aumentar el factor de seguridad dentro de la LAN. El firewall es una técnica que sólo
     permite el acceso desde el exterior a una ubicación específica o para una aplicación
     específica de la LAN………. En un sistema de red informática, los servicios bajo un
     entorno LAN como el uso compartido de archivos, impresión a la impresora común, o el
     uso de la CPU del servidor no puede ser aprobado debido al firewall. En consecuencia, en
     los casos en que se desea obtener un ciertos datos o un programa a partir de otros
     ubicación, a continuación, uno sólo puede confiar en alguien en el otro lugar para datos
     requeridos utilizando un canal independiente, o sólo puede basarse en un método de envío
     de medios de comunicación como una cinta “.
13    Triz para Software



     El problema de este modo identificados por los inventores es un conflicto entre los deseos
     paralelo a mejorar la capacidad de transferencia de datos y mantener la seguridad.
     Traduciendo estos requisitos en los términos de la Matriz de Software, se pone en
     manifiesto el conflicto en la pareja ilustrada a continuación:




             US6, 785,819 conflicto traducido en términos de, The Software Matriz.

     Los inventores de la patenten ocuparon un Agente de software para lograr la solución.(en la
     figura se puede apreciar a través del principio 24,que es Intermediario, por lo que ahora
     cualquier problema de esta índole concurre a esta patente de Agentes).


     Generación de Solución

     La primera cosa que decir sobre el tema de los principios de inventiva es que el autor
     (Darrel Mann) confirmó la existencia de los mismos 40 principios como los que se
     encuentran en el TRIZ clásico. Como se dio en el caso con la técnica de conversión a los
     principios de gestión, se tuvieron que modificar algunos de los términos del principio para
     que las descripciones se adaptaran de mejor manera al contexto de software, pero más allá
     de eso, se han mantenido las mismas.

     Esto último se apoya ya que no ha habido a la fecha ingenieros de software que hayan
     identificado estrategias de inventiva que no encajen en los principios existentes. La lista de
     principios que presenta la modificación de los títulos se ilustra a continuación:
14    Triz para Software



       1. Segmentation                              25. Self-Service
       2. Extraction                                26. Copying
       3. Local Quality                             27. Cheap/Short Living
       4. Asymmetry                                 28. Another Sense
       5. Combination                               29. Fluidity
       6. Universality                              30. Thin & Flexible
       7. „Nested Doll‟                             31. Holes
       8. Counterbalance                            32. Colour Changes
       9. Prior Counter-Action                      33. Homogeneity
      10. Prior Action                              34. Discarding and Recovering
      11. Prior Cushioning                          35. Parameter Changes
      12. Remove Tension                            36. Paradigm Shift
      13. „The Other Way Round‟                     37. Relative Change
      14. Loop                                      38. Enrich
      15. Dynamics                                  39. Calm
      16. Slightly Less/Slightly More               40. Composite Structures
      17. Another Dimension
      18. Vibration
      19. Periodic Action
      20. Continuity of Useful Action
      21. Hurrying
      22. „Blessing in Disguise‟
      23. Feedback
      24. Intermediary
                                     40 Principios de Inventiva.

     También conviene señalar a este respecto es el hallazgo adicional de la investigación hecha
     por Mann, que la mayoría de los problema de software las soluciones parecen fusionar las
     ideas de varios principios.
     Para efectos prácticos de ejemplificación se muestran solo algunos principios respecto a su
     analogía clásica hacia la de software. (no obstante se anexan al final en un tabla todos los
     principios con su descripción de inglés)

        1. Segmentation

     Software Analogy: Dividir un sistema en componentes autónomos.

        5. Combination

     Software Analogy: Hacer ejecutar procesos en paralelo.

         7. Nesting (Matrioshka)
15    Triz para Software


     Software Analogy: Heredar la funcionalidad de otros objetos de sus respectivas clases
     dentro de una clase base.

         18.Vibration

     Software Analogy: cambiar el ritmo de ejecución de un algoritmo en el contexto de
     tiempo, hasta lograr. el resultado deseado.



     Secuencia de uso (frecuencia) de los Principios de Inventiva

     El análisis aquí descrito se basa en los mismos 40000 soluciones de software utilizado para
     compilar la Matriz de software. El método de presentar nuestras conclusiones es
     exactamente el mismo que recientemente se ha utilizado para la actualización de la matriz
     técnica y de. El software Principio de frecuencia de secuencia, es el siguiente:




                    Secuencia de frecuencia de los 40 Principios de Inventiva.

     En comparación con la matriz clásica de triz, es la siguiente (por efectos de procesador de
     textos, la tabla quedo en la página siguiente):

     La columna cambio (change) indica que se han producido algunos cambios muy
     importantes que han tenido lugar entre la matriz clásica y la nueva matriz de software. En
     menor medida también ha habido algunos cambios en. Los mayores subidas en la lista la
     oferta muestran de manera más interesante las diferencias entre estrategias de resolución de
     conflictos de software y problemas técnicos:

     Las subidas de los Principios 37 ( «Cambio relativo" en nuestra aplicación de software) y 7
     ( 'Muñeca Rusa ') son más indicativos de la facilidad con que estas dos estrategias pueden
     ser desplegadas en un contexto de software. Agrupamiento (Muñeca rusa) en particular,
     puede ser algo que añade una considerable complejidad en un sistema físico, pero en una
     pieza de software el uso de esta estrategia se limita solamente a exigir la creación de nuevas
     líneas de código. El aumento del principio “Cambio relativo” es también debido a la
     facilidad con que este estrategia puede ser desplegado en un entorno digital.

     En cuanto a los Principios que caen en la lista, parece claro que hay algunos de los
     Principios que son más difíciles de interpretar en el contexto de software. Por ejemplo el
16    Triz para Software


     Principio 18 («vibraciones»), 30 (”Flexible y delgado”), 31 ('Holes') y 36 («la fase de
     transición»). Si bien todos los ejemplos de software de estos principios pueden ser
     encontrados, su existencia es poco frecuente y, a veces, la imaginación necesaria es muy
     alta. El análisis detallado de la secuencia de prioridad se ilustra en mostrada anteriormente,
     de hecho, muestran que hay una gran diferencia en la frecuencia del uso de los 16
     principales principios en comparación con el 24 inferiores.




                        Comparación entre la matriz de Software y la Clásica.


     Idealidad y Tendencias

     Pasando de contradicciones, otro instrumento importante en el contexto del software parece
     ser La Idealidad y las Tendencias parte de TRIZ.
17    Triz para Software


     Una gran parte de la investigación subyacente para TRIZ-Software de ha examinado los
     patrones que existen en la evolución del software como los sistemas de salto discontinua de
     una manera de hacer las cosas a otro. Esto se debe a que esperamos que el conocimiento de
     esas tendencias nos permitirá acelerar considerablemente la evolución de las actuales
     sistemas de la misma manera que está empezando a suceder con los sistemas técnicos que
     estamos participando.
     Si bien este punto escapa al desarrollo de la investigación, nos pareció interesante
     mencionarlo ya que forma de una herramienta de gran apoyo para triz, especialmente para
     problemas de software. Ya que permite observar las tendencias a futuro de en un área tan
     volátil como la informática que permanece en constante evolución. De esta manera al
     momento de utilizar los principios observaremos nuestra tendencia de acuerdo a nuestra
     solución propuesta.




                   Radar de Comparación, Actual y Potencial de Tendencias.




     Diseñando Patrones de Software con Triz
     Triz como ya mencionamos anteriormente, aparte de ser ocupado para la física, química, y
     otras ciencias, también puede ser aplicado a los procesos de negocios y a los procesos de
     software. Es así como el análisis de Triz y los patrones de diseño, visualizamos ciertas
     analogías que pueden ser estructuradas para mejorar y ayudar a los ingenieros de software.

     Para entrar en contexto un patrón de diseño es:
         • una solución estándar para un problema común de programación
         • una técnica para flexibilizar el código haciéndolo satisfacer ciertos criterios
         • un proyecto o estructura de implementación que logra una finalidad determinada
         • un lenguaje de programación de alto nivel
         • una manera más práctica de describir ciertos aspectos de la organización de un
         programa
         • Conexiones entre componentes de programas
         • La forma de un diagrama de objeto o de un modelo de objeto.
18    Triz para Software


     Así describiremos un subconjunto de los 23 patrones de diseño que fueron desarrollados
     por los Gang of Four [1] como instancias de los principios de resolución de problemas
     encontrados por la teoría TRIZ de Genrich Altshuller´s. Nosotros podemos ver en un
     análisis temprano, las similaridades entre los patrones de diseño y Triz, esto es que ambos
     sistemas son un conjunto de heurísticas, derivados desde observaciones de soluciones
     exitosas para problemas comunes.
     Luego de un profundo análisis, nosotros podemos encontrar fuertes links entre los patrones
     estructurales del grupo de los Gang of Four y un conjunto especifico de principios de
     TRIZ.


     Contradicciones Espacio-Tiempo

     Los científicos de la computación tienen dos bien conocidas fuerzas que son el espacio y el
     tiempo (dos características de los sistemas). Así el problema general es que tal como la
     característica del sistema del tiempo decrece (se mejora), la característica del sistema de
     espacio se incrementa (se empeora). En cambio, tal como la característica del sistema del
     espacio decrece (mejora), la característica del sistema de tiempo decrece (se empeora).

     Un ejemplo ilustrativo de contradicciones de espacio-tiempo:

            Se encuentra un problema con las bases de datos que mientras más información
            ellos guardan, más lento el sistema se pone.
            Sin embargo, mientras más información ellos tienen, más comúnmente podemos
            encontrar la información que nosotros queremos, debido a una pregunta realizada.

            Si identificamos en la matriz de contradicciones de 39x 39 TRIZ sería lo siguiente:

                         Problemas                      Principios de Triz
                "el acceso a mas respuestas      Volumen de un objeto estático
                e información"                  (Característica del sistema 8)
                "incremento de tiempo           Tiempo de acción de un objeto
                necesario para encontrar        estacionario ( Característica del
                una respuesta"                  sistema 16)

            La intersección de tiempo de acción de un objeto estacionario a lo largo del eje
            horizontal (se empeora) y volumen de un objeto estático (se mejora) nos indica 3
            potenciales       soluciones       desde        los         40        principios:

                   35 - Transformación de Propiedades
                   34 - Rechazo y regeneración de las partes
                   38 - Oxidación acelerada.

            El principio 34 incluye: " Después de completar esta función o llegar a ser útil, un
            elemento del objeto es rechazado (descartado, disuelto, evaporado, etc.) o
            modificado durante el proceso de trabajo". Esta descripción contiene la esencia de la
19    Triz para Software


           definición de CACHE, el cual es una solución común a un problema inicial con
           base de datos.

           Examinando el problema general de mas y mas tiempo (empeora) tomando un orden
           a través de una sobre-abundancia de información (se mejora), la solución de TRIZ
           encuentra muy bien descrito en el principio 34 la idea de un FAQ, o una lista de
           Preguntas frecuentemente hechas - otro ejemplo de un CACHE.


     Diseño de Patrones y TRIZ

        1. Adapter Pattern y el principio Mediador (Mediator Principle)

               El patrón adaptador, como su propio nombre nos puede hacer ver, se usa para
               convertir el interface de una clase a la de otra, entendiendo en este caso interface
               como el conjunto de métodos que ofrece una clase para su manipulación por
               código, no la herramienta que usa el usuario final de nuestra aplicación. Lo que
               haremos será escribir métodos con nuestra interface deseada que deleguen el
               trabajo en los de la interface ya existente.

               Las razones para querer hacer algo así pueden ser de muy distinta naturaleza, y
               pueden ir desde:
                           Querer integrar una clase ya existente pero que no podemos
                    modificar en una nueva jerarquía de clases, que por ejemplo implemente
                    una nueva interfaz, podemos querer limitar el interface de una clase.
                           Querer hacerlo simplemente porque la convención de nombres
                    usada en la clase original, que tampoco podemos o queremos cambiar, no
                    se ajusta a la nuestra.
                       Esta última razón puede parecer un poco absurda pero puede ser
                          bastante frustrante recibir miles de errores de compilación por
                          trabajar con métodos del estilo GetName en lugar de getName.

           o   Esta adaptación se puede hacer de dos formas :
                          Adaptación por herencia
                          Adaptación por composición.


     1.3 Adaptación por herencia

     Aquí haremos que la clase que implementa la nueva interface extienda de la original y
     añadiremos a esta los métodos que consideremos oportunos.

     Por ejemplo:

         public class Usuario{
20    Triz para Software


         protected String nombre;
         protected String password;
         . . .
         public Usuario (String nombre, String password){
         . . .
         }
         public String GetNombre (){
         return nombre;
         }
         public String GetPassword (){
         return password;
         }
         . . .
         }

     Según las convenciones de programación, nos damos cuenta de que esas dos G de Getxxx
     darán muchos problemas. Entonces suponiendo que esta clase ya esta en sistemas
     productivos y por tanto no podemos hacer algo tan simple como cambiar esa letra, optamos
     por extender esa clase, de forma que el sistema siga trabajando correctamente con las clases
     antiguas, para así evitarnos errores de compilación innecesarios.

         public         class         BuenUsuario          extends         Usuario{

               public BuenUsuario (String nombre, String password){
                   super (nombre, password);
               }
               public String getNombre (){
                   return GetNombre();
               }
               public String getPassword (){
                   return GetPassword();
               }
         }

     Al hacerlo así, nos aprovechamos aparte de las ventajas de la herencia, haciendo que los
     métodos de otras clases que usen la clase usuario puedan seguir funcionando sin retocarlos.


     1.2 Adaptación por Composición

          Esta ocurre en algunos casos donde no podemos usar la herencia, ya sea porque
     queremos integrar esa clase en una jerarquía nueva y ya estemos heredando de otra clase, o
     ya sea por causa de modificadores de acceso como private o final que impidan que se
     hereden algunas características de la clase, o simplemente que no queramos que la nueva
     clase tenga el interface completo de la original. En ese caso tendremos que usar la
     composición, es decir, incluir la clase a adaptar como un atributo de la adaptadora.
21   Triz para Software


       2. Composite and Iterator Pattern y el principio de Universalidad
          (Universality Principle)

           Como desarrollador se tienen variadas listas para utilizar. Cada una de éstas
        pueden estar y lo más probable es que así sea, en distintos formatos. Es útil para crear
        una interfaz a través de la cual los objetos en las diferentes listas puedan sea
        accesados. Una segunda interfaz es creada para moverse a través de las listas (en el
        formato entregado por la interfaz de la lista). Esta interfaz, a través de la cual los
        objetos de la lista son accesados, es llama iterator (iterador). La representación
        (implementación) de la lista no es de ninguna consecuencia, el retorno de la siguiente
        lista de objetos de importancia primaria.

        PRINCIPIO 6 - UNIVERSALIDAD

        Promueve uniformidad de función, uso uniforme de un objeto para distintos
        propósitos, o la aplicación de los mismos requerimientos o características para
        distintos objetos, situaciones o acciones.




       3. Decorator Pattern y los principios de Agrupamiento y/o
          Membranas Flexibles

        El decorator pattern dinámicamente agrega funcionalidad a un objeto. Usando éste
        patrón, es una forma de evitar crear subclases (clases hijas) para proveer
        funcionalidad extendida. Este patrón comienza con una superclase de un componente
        particular, C. El objeto actual que vamos a “decorar”, es una subclase de C, el que
        llamaremos c. El objeto decorador, d, en realidad referencia valores en c. Una subclase
        del decorador en realidad crea la funcionalidad adicional provista por la clase
        decorador.

        PRINCIPIO 7 – AGRUPAMIENTO

        Aplica cuando un objeto cabe dentro o pasa a través de otro.

        PRINCIPIO 30 – MEMBRANAS FLEXIBLES

        Receta el reemplazo de las construcciones tradicionales con construcciones de
        peliculas delgadas o membrana flexibles. Además, un objeto puede ser aislado de su
        ambiente con una película delgada.




       4. Facade Pattern y el principio de la consolidación
22   Triz para Software


        Dada una colección de interfaces, un cliente (usuario) debería sólo tener que tratar
        con un sistema de interfaz unificada cuando trata de acceder a los datos. La interfaz
        de mayor nivel es el llamado patrón fachada. Es una implementación directa de la
        Ley de Remeter, la que encapsula el principio de mínimo conocimiento (“los amigos
        solo hablando con amigos”).

        PRINCIPIO 5 – CONSOLIDACION

        Entrega funciones o partes de un sistema a una relación que crea nuevos resultados.
        Un ejemplo es combinar la habilidad para reproductor de reproducir múltiples
        formatos (DVD, mp3, etc).


       5. Flyweight Pattern y el principio de transición hacia una nueva
          dimensión

        Existen momentos en los que uno necesita tener, literalmente, miles de instancias de
        un objeto. Cada objeto es relativamente simple, usualmente llamando a unos pocos
        métodos. Un ejemplo de esto, podría ser un procesador de palabras basado en web
        que talvez tiene 2560 lugares para poder ubicar caracteres. Caracteres cualquiera
        pueden aparecer o desaparecer (dos métodos). El patrón flyweight entrega un
        administrador para organizar cada uno de los pequeños objetos (configurando los
        caracteres en 80 por columna y 32 por fila por cada página). Los objetos carácter son
        responsables de su propia administración. (Mostrando o no una letra, número,
        símbolo o estando en blanco).

        PRINCIPIO 17 – TRANCISION HACIA UNA NUEVA DIMENSION

        Sugiere cambiar la orientación de un sistema agregando una dimensión. Esta nueva
        dimensión puede poner menor tensión en una dimensión ya existente, o puede
        agregar una dimensión de control.


       6. Proxy Patterm y los principios de Cambio de parámetro y/o
          transición de fase

        El patrón Proxy es usado para controlar el acceso a un objeto. Como ejemplo, hay
        momentos en lo que un usuario querrá solicitar que una imagen sea mostrada. Si el
        tamaño de ésta es un poco grande, entonces debería tomar un tiempo no mínimo en
        aparecer (quizás una animación flash). Prácticas de buena usabilidad recomendarían
        que un pequeño cartel animado que diga “Cargando” aparezca mientras se carga en
        memoria para reproducirse un gran archivo flash. Introduzca el patrón comentado
        para poder realizar esto, poner un cartel de “cargando” mientras la imagen está lista
        para ser mostrada, y luego mostrarla.
23    Triz para Software


         PRINCIPIO 35 – CAMBIOS DE PARAMETRO

         Sugiere cambiar el estado físico de un objeto (de gas a líquido por ejemplo). Cambiar
         la concentración o consistencia. Cambiar el grado de flexibilidad. Cambiar la
         temperatura.

         PRINCIPIO 36 – TRANSICION DE FASE

         Sugiere usar el fenómeno que ocurre durante el cambio de fase (cambio de volumen,
         ganancia o pérdida de calor)




     Ejemplos de Patrones
     Proxy pattern

     Se desea guardar una lista de usuarios registrados, pero no sé exactamente donde. La idea
     es que dependiendo del valor de un checkbox ( en el que el usuario elige si está conectado a
     internet o no ), debo mandar los datos a servidor ( en formato XML ) o guardarlos en disco
     en un Shared Object
     Esta es una misión para el Patrón Proxy, debido a que se quiere aislar el proceso de guardar
     los datos del resto del programa, simplemente hacerlo y olvidarse de cómo o dónde se
     guarda.
     Eso es lo que hace este patrón. El proxy guarda una referencia a un objeto, que es quien
     realmente se encargará de ejecutar la acción. Pero es el proxy el que crea ese objeto, por lo
     que puede crear una instancia de una u otra clase dependiendo de ciertas condiciones en
     tiempo de ejecución
     Por tanto, todas las clases que puedan ser instanciadas por el proxy, deben implementar el
     mismo interfaz. Y dependiendo del tipo de proxy, puede ser una buena idea que incluso él
     mismo implemente ese interfaz, para que se pueda eliminar si es necesario.



     Decorator Pattern

     Supongamos que tenemos una clase existente Ventana y queremos añadirle funcionalidad
     para que muestre un borde alrededor. Podemos crear una subclase VentanaConBorde que
     herede de Ventana.
     Hasta aquí todo bien, pero supongamos que surge la necesidad de crear una ventana que
     muestre un pequeño botón de ayuda con un signo de interrogación (?) en su parte superior.
     Entonces             tenemos            las             siguientes             opciones:

            Crear otra subclase de Ventana: VentanaConBotónDeAyuda.
24    Triz para Software


         Problema: No cubre la necesidad de tener ventanas con bordes y botón de ayuda a la
         vez.
           Crear una subclase de VentanaConBorde: VentanaConBordeYBotonDeAyuda.
         Problema: No tenemos una ventana con botón de ayuda y sin borde.

           Crear clases para todas las combinaciones posibles de funcionalidades.
         Problema: Con este ejemplo tendríamos cuatro clases: Ventana, VentanaConBorde,
         VentanaConBotonDeAyuda y VentanaConBordeYBotonDeAyuda; con tres
         funcionalidades tendríamos ocho clases y con cuatro, ¡dieciséis!


     El patrón Decorator soluciona este problema de una manera mucho más sencilla y
     extensible. Se crea a partir de Ventana la subclase abstracta VentanaDecorator y,
     heredando de ella, BordeDecorator y BotonDeAyudaDecorator. VentanaDecorator
     encapsula el comportamiento de Ventana y utiliza composición recursiva para que sea
     posible añadir tantas "capas" de Decorators como se desee. Podemos crear tantos
     Decorators como queramos heredando de VentanaDecorator.
     Flyweight Pattern

     Crear una clase PelotaFlyweight, que contendrá la información común (radio y color) y otra
     clase PelotaConcreta, que contendrá las coordenadas concretas de cada pelota y una
     referencia a un objeto de tipo PelotaFlyweight.
     Al crearse instancias de PelotaConcreta, se les deberá proveer de referencias a la instancia
     de PelotaFlyweight adecuada a nuestras necesidades.
     En este caso solamente tendríamos una instancia de PelotaFlyweight, puesto que hemos
     dicho que todas nuestras pelotas tienen el mismo radio y color, pero pensando en un
     ejemplo en el que tuviéramos varios grupos de pelotas, y dentro de cada uno de los cuales
     se compartieran el radio y el color, se puede utilizar Flyweight conjuntamente con el patrón
     Factory, de tal modo que este último, en el momento en que se le soliciten instancias de
     PelotaConcreta con determinadas características (mismo radio y color que el solicitado),
     compruebe si ya existe un PelotaFlyweight con ese radio y color, y devuelva esa referencia
     o, en caso de que no exista, la cree y la registre.


     Facade Pattern

         class UserfriendlyDate
         {
             GregorianCalendar gcal;

             public UserfriendlyDate(String isodate_ymd) {
                 String[] a = isodate_ymd.split("-");
                 gcal = new GregorianCalendar(Integer.valueOf(a[0]).intValue(),
                       Integer.valueOf(a[1]).intValue()-1       /*      !!!     */,
         Integer.valueOf(a[2]).intValue());
             }
             public void addDays(int days) { gcal.add(Calendar.DAY_OF_MONTH, days);
         }
             public String toString() { return new Formatter().format("%1$tY-%1$tm-
25    Triz para Software


         %1$td", gcal).toString();}
         }

         /** Cliente */
         class FacadePattern
         {
             public static void main(String[] args)
             {
                 UserfriendlyDate d = new UserfriendlyDate("1980-08-20");
                 System.out.println("Date: "+d);
                 d.addDays(20);
                 System.out.println("20 days after: "+d);
             }
         }




     Bridge Pattern

     public class Abstraccion
     {
             private Implementador implementador;
             public void setImplementador(Implementador implementador)
             {
                     this.implementador = implementador;
             }
             public Implementador getImplementador()
             {
                     return implementador;
             }
             public void operacion()
             {
                     implementador.operacion();
             }
     }
     public class AbstraccionRefinada extends Abstraccion
     {
             public void operacion()
             {
                     super.operacion();
             }
     }
     public interface Implementador
     {
             public abstract void operacion();
     }
     public class ImplementacionA implements Implementador
     {
             public void operacion()
             {
                     System.out.println("implementacion A");
             }
     }
     public class ImplementacionB implements Implementador
     {
             public void operacion()
26    Triz para Software


              {
                        System.out.println("implementacion B");
              }
     }
     public class PruebaBridge
     {
             public static void main(String arg[])
             {
                     Abstraccion abstraction = new AbstraccionRefinada();
                     abstraction.setImplementador(new ImplementacionA());
                     abstraction.operacion();




     Composite Pattern

            Imaginemos que necesitamos crear una serie de clases para guardar información
         acerca de una serie de figuras que serán círculos, cuadrados y triángulos. Además
         necesitamos poder tratar también grupos de imágenes porque nuestro programa
         permite seleccionar varias de estas figuras a la vez para moverlas por la pantalla.
         En principio tenemos las clases Círculo, Cuadrado y Triángulo, que heredarán de una
         clase padre que podríamos llamar Figura e implementarán todas la operación pintar().
         En cuanto a los grupos de Figuras podríamos caer en la tentación de crear una clase
         particular separada de las anteriores llamada GrupoDeImágenes, también con un
         método pintar().

         Problema.
         Esta idea de separar en clases privadas componentes (figuras) y contenedores
         (grupos) tiene el problema de que, para cada uno de los dos atributos, el método
         pintar() tendrá una implementación diferente, aumentando la complejidad del
         sistema.

         El patrón composite da una solución elegante a este problema, de la que además
         resulta en una implementación más sencilla.
         A la clase Figura la llamaríamos Gráfico y de ella extenderían tanto Círculo, Cuadrado y
         Triángulo, como GrupoDeImágenes. Además, ésta última tendría una relación todo-
         parte de multiplicidad * con Gráfico: un GrupoDeImágenes contendría varios Gráficos,
         ya fuesen éstos Cuadrados, Triángulos, u otras clases GrupoDeImágenes.
         Así, es posible definir a un grupo de imágenes recursivamente. Por ejemplo, un objeto
         cuya clase es GrupoDeImágenes podría contener un Cuadrado, un Triángulo y otro
         GrupoDeImágenes, este grupo de imágenes podría contener un Círculo y un Cuadrado.
         Posteriormente, a este último grupo se le podría añadir otro GrupoDeImágenes,
         generando una estructura de composición recursiva en árbol, por medio de muy poca
         codificación y un diagrama sencillo y claro.
27    Triz para Software




     Adapter Pattern

         El patrón adaptador, como su propio nombre nos puede hacer ver, se usa para
         convertir el interface de una clase a la de otra.

         Implementación:

         En otras palabras, un adaptador es típicamente implementado utilizando herencia
         múltiple, al crear una subclase del adaptador que herede los métodos privados y,
         permitiendo que herede además, la interfaz pública de las clases que definen la
         interfaz requerida.




     Conclusiones
     Se ha demostrado con este informe que la mayoría de las patentes de software y la
     implementación de nuevos principios pueden ayudar a formar una nueva matriz y generar
     la base para una nueva investigación para una Matriz totalmente limpia solo para software.
     Es así como el autor Darell Mann ha introducido una investigación importante respecto a
     este tema, por lo que un próximo trabajo estaría en crear y formar Triz para el software
     implementando nuevas matrices y generando nuevas soluciones con patentes de software
     innovadoras.
28   Triz para Software


     Referencias
          http://www.systematic-innovation.com
          Ikovenko, S., „Laws Of Engineering System Evolution In Software
           Development‟,keynote paper at TRIZ Centrum, 3rd European TRIZ-Conference,
           ETH Zurich, March 2003.
          Karasik, Y., editorial comment, Anti-TRIZ Journal, Vol.2, No.2, and private email
           correspondence, 8 September 2004.
          [Kev-01] Rea, K., „TRIZ and Software - 40 Principle Analogies, Partes 1 and 2‟,
           TRIZ Journal, Septiembre y Noviembre 2001.
          Mann, D.L., „Hands-On Systematic Innovation‟, CREAX Press, June 2002.
          Espejo, R., Harnden, R., „The Viable System Model‟, John Wiley & Sons, New
           York, 1989.
           Mann, D.L., „Hands-On Systematic Innovation For Business & Management‟, IFR
           Press, August 2004.
           Mann, D.L., „TRIZ For Software Engineers‟, IFR Press, October 2004.
          Mann, D.L., Dewulf, S., Zlotin, B., Zusman, A., „Matrix 2003: Updating The TRIZ
           Contradiction Matrix‟, CREAX Press, Belgium, July 2003.
          Mann, D.L., „Comparing The Classical And New Contradiction Matrix, Part 2 –
           Zooming In‟, TRIZ Journal, July 2004.
           Paulk, M.C., Weber, C.V., Garcia, S.M., Chrissis, M.B., Bush, M., „Key Practices
           Of The Software Maturity Model‟, Software Engineering Institute, Carnegie Mellon
           University, Pittsburgh, Pennsylvania.
           Mann, D.L., Dewulf, S., „Evolutionary Potential In Technical And Business
           Systems‟, TRIZ Journal, June 2002.
          Mann, D.L., „Ideality And Self-X‟, paper presented at 1st ETRIA TRIZ Future
           Conference, Bath, November 2001.
          Rea, K., „Applying TRIZ to Software Problems‟, TRIZ Journal, October 2002.
29   Triz para Software


     Anexos




                 Resumen, Analogía 40 principios de Inventiva TRIZ (1-20).
30   Triz para Software




                Resumen, Analogía 40 principios de Inventiva TRIZ (21-40).
31    Triz para Software


     Patentes en el software

     Patentar una idea o un producto no es algo nuevo, es más, ésta se lleva a cabo hace mucho
     tiempo, si bien en algunos casos puede ser vista como una medida arbitraria, también
     premiar de alguna forma al inventor de un producto u objeto que añada funcionalidad a
     alguno existente, o éste tenga funcionalidad por si sólo.
     Una patente, al igual que un derecho de autor (copyright), entrega a un autor un derecho
     exclusivo o monopólico respecto a su creación o invención intelectual.
     El problema nace al afirmar que está sujeto a patente y que no.
     Por ejemplo, el autor de un libro tiene el derecho de autor respecto a éste, ese derecho le
     otorga protección literaria como artística sobre su obra, pero es de un índole más estético.
     Con esto nos referimos a que el uso de frases o el argumento de la obra está protegido,
     tanto para su copia como reproducción, pero no así el género de ésta. Osea, puede tener
     derecho sobre su obra, pero no sobre el género “crimen/suspenso”, esto permite que existan
     más escritores que se dediquen a escribir obras de ésa índole, y protege al autor de una
     copia.
     Dentro de las cosas no patentables están por ejemplo; variedades vegetales o animales,
     inventos en biotecnología y microbiología, productos farmacéuticos y medicamentos
     esenciales en la lista de la OMS, descubrimientos, teorías científicas ni métodos
     matemáticos, descubrimiento de materias existentes en la naturaleza, etc.
     El software cae en el medio de la polémica, y es a su vez un caso emblemático.
     Si bien existen miles de patentes de software, existe un gran número de detractores de éstas,
     haciendo que en Europa se lleve discutiendo durante varios años el si es posible o no
     patentar el software.
     Respecto al tema que nos atañe, si bien existen grandes cantidades de productos de
     software patentados, también existe un número mayor de productos que no lo están, siendo
     un tema complicado y delicado la patentabilidad o no.
     Existen a nivel internacional distintas oficinas que conceden patentes y las administra.
     Entre éstas está la Oficina Europea de Patentes (OEP), quien presenta una gran cantidad de
     detractores respecto a nuestro tema. En el caso de Estados Unidos, la práctica de patentar
     software es realizada comúnmente.
     Finalmente en éste sentido, si bien existe una gran controversia, respecto a la patentabilidad
     o no del software, en éstos momentos, existen una gran cantidad de patentes, lo que
     permitiría avanzar en el análisis de éstas, trabajo ya iniciado por Darrel Mann, y formular
     finalmente una teoría de TRIZ pero aplicada directamente al desarrollo o la búsqueda de
     innovación en el software.

Weitere ähnliche Inhalte

Ähnlich wie Triz - Patrones de Software

Deuda tecnica en Lean Startup.en.es.pdf
Deuda tecnica en Lean Startup.en.es.pdfDeuda tecnica en Lean Startup.en.es.pdf
Deuda tecnica en Lean Startup.en.es.pdfNicanor Sachahuaman
 
Desarrollo de-software-basado-en-reutilizacion
Desarrollo de-software-basado-en-reutilizacionDesarrollo de-software-basado-en-reutilizacion
Desarrollo de-software-basado-en-reutilizacionMarvin Arteaga
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosFrank LS
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numericoLUIS COAQUIRA
 
Manual_process_maker
Manual_process_makerManual_process_maker
Manual_process_makerjesus8585
 
Algoritmos guia de maria hernandez
Algoritmos guia de maria hernandezAlgoritmos guia de maria hernandez
Algoritmos guia de maria hernandezjackie_18
 
Sistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerSistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerTensor
 
Peer to Peer
Peer to PeerPeer to Peer
Peer to PeerTensor
 
Modelado Visual de Aplicaciones Lotus Notes Domino
Modelado Visual de Aplicaciones Lotus Notes DominoModelado Visual de Aplicaciones Lotus Notes Domino
Modelado Visual de Aplicaciones Lotus Notes DominoHiriam Eduardo Perez Vidal
 
Fundamentos de programacion en java
Fundamentos de programacion en javaFundamentos de programacion en java
Fundamentos de programacion en javaJitle Noriega
 
Introducción a la programación paralela
Introducción a la programación paralelaIntroducción a la programación paralela
Introducción a la programación paralelafmayosi
 
Reglas y Practicas en Extreme Programming
Reglas y Practicas en Extreme ProgrammingReglas y Practicas en Extreme Programming
Reglas y Practicas en Extreme ProgrammingSaviotec
 
Reglas y practicas de xtrem programming
Reglas y practicas de xtrem programmingReglas y practicas de xtrem programming
Reglas y practicas de xtrem programmingAdrian Espinosa
 
Luis caraballo 24695744 ing.sistema
Luis caraballo 24695744 ing.sistemaLuis caraballo 24695744 ing.sistema
Luis caraballo 24695744 ing.sistemaLuis Caraballo
 
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)Adam Guevara
 

Ähnlich wie Triz - Patrones de Software (20)

Deuda tecnica en Lean Startup.en.es.pdf
Deuda tecnica en Lean Startup.en.es.pdfDeuda tecnica en Lean Startup.en.es.pdf
Deuda tecnica en Lean Startup.en.es.pdf
 
Desarrollo de-software-basado-en-reutilizacion
Desarrollo de-software-basado-en-reutilizacionDesarrollo de-software-basado-en-reutilizacion
Desarrollo de-software-basado-en-reutilizacion
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numerico
 
Aprende phyton
Aprende phytonAprende phyton
Aprende phyton
 
Manual_process_maker
Manual_process_makerManual_process_maker
Manual_process_maker
 
Algoritmos guia de maria hernandez
Algoritmos guia de maria hernandezAlgoritmos guia de maria hernandez
Algoritmos guia de maria hernandez
 
Xp
XpXp
Xp
 
Sistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerSistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to Peer
 
Peer to Peer
Peer to PeerPeer to Peer
Peer to Peer
 
Pacheco jhon cuestionario
Pacheco jhon cuestionario Pacheco jhon cuestionario
Pacheco jhon cuestionario
 
Segunda evaluación
Segunda evaluaciónSegunda evaluación
Segunda evaluación
 
Modelado Visual de Aplicaciones Lotus Notes Domino
Modelado Visual de Aplicaciones Lotus Notes DominoModelado Visual de Aplicaciones Lotus Notes Domino
Modelado Visual de Aplicaciones Lotus Notes Domino
 
Fundamentos de programacion en java
Fundamentos de programacion en javaFundamentos de programacion en java
Fundamentos de programacion en java
 
Introducción a la programación paralela
Introducción a la programación paralelaIntroducción a la programación paralela
Introducción a la programación paralela
 
Reglas y Practicas en Extreme Programming
Reglas y Practicas en Extreme ProgrammingReglas y Practicas en Extreme Programming
Reglas y Practicas en Extreme Programming
 
Reglas y practicas de xtrem programming
Reglas y practicas de xtrem programmingReglas y practicas de xtrem programming
Reglas y practicas de xtrem programming
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 
Luis caraballo 24695744 ing.sistema
Luis caraballo 24695744 ing.sistemaLuis caraballo 24695744 ing.sistema
Luis caraballo 24695744 ing.sistema
 
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)
Tecnicas avanzadas de_ingenieria_de_software_(modulo_3)
 

Triz - Patrones de Software

  • 1. UNIVERSIDAD TÉCNICA FEDERICO SANTAMARIA Departamento de Informática Triz para Software Analogía de Patrones de Software Patricio Esquivel 2151024-6 Francisco Riveros E. 2273036-3 Andro Vlahovic 2273037-1 Profesor : Lautaro Guerra 6/23/2008
  • 2. 2 Triz para Software Indice Introducción ....................................................................................................................... 4 Algoritmos Rápidos ...................................................................................................... 4 Ley de Moore................................................................................................................. 5 Tamaño del Software ..................................................................................................... 6 Desarrollo de Arquitecturas ............................................................................................ 6 Modas de una evolución tecnológica .............................................................................. 7 Triz para el Software .......................................................................................................... 7 Problemas de Software ................................................................................................... 9 Triz para Software.......................................................................................................... 9 Definición .................................................................................................................... 10 Siete Pilares de “TRIZ para Software” ......................................................................... 10 Subversión Análisis ...................................................................................................... 10 Matriz de Contradicciones ............................................................................................ 11 Generación de Solución................................................................................................ 13 Secuencia de uso (frecuencia) de los Principios de Inventiva ........................................ 15 Idealidad y Tendencias ............................................................................................. 16 Diseñando Patrones de Software con Triz ........................................................................ 17 Contradicciones Espacio-Tiempo ................................................................................. 18 Diseño de Patrones y TRIZ .............................................................................................. 19 1. Adapter Pattern y el principio Mediador (Mediator Principle) ................................ 19 1.3 Adaptación por herencia ..................................................................................... 19 1.2 Adaptación por Composición.............................................................................. 20 2. Composite and Iterator Pattern y el principio de Universalidad (Universality Principle) ..................................................................................................................... 21 3. Decorator Pattern y los principios de Agrupamiento y/o Membranas Flexibles ...... 21 4. Facade Pattern y el principio de la consolidación ................................................... 21 5. Flyweight Pattern y el principio de transición hacia una nueva dimensión ............. 22 6. Proxy Patterm y los principios de Cambio de parámetro y/o transición de fase ..... 22 Ejemplos de Patrones ....................................................................................................... 23 Proxy pattern................................................................................................................ 23 Decorator Pattern ......................................................................................................... 23 Facade Pattern.............................................................................................................. 24 Bridge Pattern .............................................................................................................. 25 Composite Pattern ........................................................................................................ 26
  • 3. 3 Triz para Software Adapter Pattern ............................................................................................................ 27 Conclusiones .................................................................................................................... 27 Referencias ...................................................................................................................... 28 Anexos............................................................................................................................. 29 Patentes en el software ................................................................................................. 31
  • 4. 4 Triz para Software Introducción Triz ha llegado a ser muy poderoso para resolver problemas y para crear soluciones innovadoras. Triz es principalmente usado para problemas mecánicos y en la forma actual, no tanto para problemas eléctricos de software. Pero para aplicar TRIZ al software tenemos que aplicar los principios de inventiva. Esos principios de inventiva son usados para resolver un problema algorítmico definiendo una situación ideal, analizando las contradicciones y usando los principios para desarrollar un mejor algoritmo. (Un algoritmo inteligente es como algo equivalente a una construcción inteligente en la Ing. Mecánica). La traducción desde los Principios de Inventiva al Software es muy difícil de hacer para muchos. Incluso para usuarios expertos en TRIZ. La traducción hecha por Kevin Rea [Kev-01] ayuda mucho pero solo si uno estas trabajando en un área de aplicación que es el caso de programación concurrente. Un camino mejor es usar la metodología de Genrich Altschuller analizando las patentes en Ingeniería de Software y desarrollando completamente un nuevo conjunto de Principios de inventiva y Matriz de Contradicciones. Esto nos abre un camino para poder seguir en nuestra investigación aplicando conceptos de Triz y viendo diversas analogías a este. Las próximas secciones veremos puntos importantes que en el Software resaltan muchos problemas con lo que Triz puede ser una ayuda para romper estas barreras. Asimismo en la otra sección veremos el primer acercamiento a Triz aplicado al software con la respectiva matriz y principios generados por analogías por el autor Darell Mann. Algoritmos Rápidos Los Ejemplos que son descritos en la base de datos TRIZ conciernen el desarrollo de algoritmos rápidos y confiables usando recursos limitados (tales como tamaño de memoria y velocidad del procesador). Tenemos que existen un sin número de patentes comerciales donde algunos son exitosos algoritmos o standards que pueden ser comercialmente interesantes, por ejemplo, Algoritmos Función MP3 Procesamiento de Sonido MPEG Procesamiento de Video Algoritmos de Búsqueda Rápida Google Tabla 1 - Algoritmos y funciones Así podemos formarnos una idea, de que tener un conjunto de patentes de software podría ayudarnos a crear una matriz y principios y hacer lo que hizo Altshuller con las patentes.
  • 5. 5 Triz para Software Un autor llamado Graham Rawlinson concluye que: "TRIZ es muy útil, pero a menudo no acierta con las soluciones derivadas", esto quiere decir que a pesar de que Triz nos ayude a resolver nuestros problemas, no siempre vamos a tener la solución que queríamos o la solución esperada, es decir, no es la “panacea”. El desarrollo de algoritmos rápidos ha sido sujeto de investigación desde inicios de los sesenta. (Cuando los computadores eran caros y los recursos eran limitados). Aunque muchos de los métodos desarrollados en ese entonces son todavía validos. Ley de Moore La ley de Moore expresa que aproximadamente cada dos años se duplica el número de transistores en un circuito integrado. Se trata de una ley empírica, formulada por el co- fundador de Intel, Gordon E. Moore el 19 de abril de 1965, cuyo cumplimiento se ha podido constatar hasta hoy. Entonces con esa ley se decía que no habría un hardware que pudiera dar solución a los problemas de software que en los cuales se necesitaba de nuevo Hardware para poder realizar las tareas en un modo eficiente, ya que cuando el software probaba que es muy lento, o requiere mucha memoria, simplemente se espera por un nuevo hardware y el problema es resuelto automáticamente. Crear algoritmos rápidos es importante cuando el Hardware requerido no es todavía disponible dentro un periodo largo de tiempo, En ingeniería mecánica hay un desafío continuo en crear nuevos productos y tratar con crecientes contradicciones. En muchos productos las limitaciones técnicas han sido (casi) alcanzadas. Por ejemplo, por 100 años los automóviles han manejado bajo motores a combustión, 30 años después el avión comercial Concorde es el avión volando a velocidades supersónicas y así sucesivamente. O sea esto llega cada vez a hacer mas y mas difícil para desarrollar nuevos productos e incrementar la funcionalidad llega a ser pequeño. Un ejemplo: Supongamos que un ingeniero mecánico de una empresa automotriz va hacia su jefe y le dice: "Jefe, soy capaz de hacer nuestro motor un 5% más eficiente". Su Jefe probablemente le responda: "Estoy atónito, tomate todo tu tiempo que tu necesites y no olvides escribir una patente". Ahora si un Ingeniero de Software va hacia su jefe y le dice: " Jefe, yo puedo hacer trabajar nuestro software 5% más rápido", su jefe probablemente responda, " Eso no es de importancia ahora, el próximo mes nosotros obtendremos un nuevo procesador el cual trabaja dos veces más rápido. Vuelve a tu trabajo, que todavía tienes 20 Bugs que resolver antes que termine esta semana, así que no malgastes
  • 6. 6 Triz para Software mas tu tiempo". Tamaño del Software Tal como la memoria disponible se incrementa 2 veces en 18 meses, así también las líneas de código. Sin embargo, productos de software están llegando a ser más grandes cada año y más gente necesita desarrollar este software. Es más la moda como sistemas abiertos, subcontratación, re-uso, están disponibles para sobrepasar esto. Todo esto crea situaciones que son más complejas resultando en proyectos fuera de tiempo, software no confiable y clientes insatisfechos. El principal desafío hoy en día es manejar esta creciente complejidad. Desde comienzos de los noventas hay un fuerte énfasis sobre los procesos de software. Muchas organizaciones están usando la capacidad madura de los modelos u otros frameworks para mejorar sus procesos de desarrollo de software. Desarrollo de Arquitecturas Otro camino para tratar con el incremento en la complejidad es crear una arquitectura de software. Una arquitectura de software provee de la estructura técnica para un proyecto. Una buena arquitectura hace que el resto del trabajo sea más fácil, pero una mala arquitectura hacer que el resto del trabajo sea casi imposible. En la creación de arquitecturas se tiene que tratar con las demandas conflictivas. La arquitectura desempeña requerimientos funcionales y no funcionales. Ejemplos de requerimientos no funcionales son: Portabilidad Mantención Flexibilidad Extensibilidad Reusabilidad Estos requerimientos no-funcionales son también conocidos como Soft Intents. En algunas áreas de aplicación un grafico de softgoal interdependencia es usado para visualizar estos conflictos. La mayoría de las soluciones son ajustadas a la "medida" entre estas demandas conflictivas. Difícilmente incluso todas estas demandas son completadas. TRIZ podría ser muy útil en resolver estas peticiones conflictivas (Contradicciones) en una manera más satisfactoria. Desde que las arquitecturas son también usadas en otros campos como ing. Mecánica nosotros podemos aprender desde la aplicación de TRIZ en este campo.
  • 7. 7 Triz para Software Modas de una evolución tecnológica Debido a que rápidamente se incrementan las capacidades del software es difícil decir cómo serán estos en el futuro. Es difícil imaginar que es posible en el futuro y que será exitoso. Triz se enfoca en la evolución tecnológica y esto podría ser usado para identificar las posibilidades de futuro. Combinado con modas comerciales, esto ayuda en definir productos exitosos en una temprana edad. Triz para el Software La utilización de los ordenadores como instrumentos de ayuda a las diferentes actividades humanas ha cobrado tal importancia que hoy resulta casi inconcebible subsistir en un mundo tan competitivo sin su uso. Se puede decir que su aplicación ha cubierto todas las esferas de la actividad humana, siendo previsible que el uso de ordenadores vaya en aumento cada vez más. Estos datos son suficiente argumento para sostener la importancia que tiene la investigación sobre el mejor uso de tales instrumentos mediante la elaboración de aplicaciones para estas. Puede TRIZ ser aplicado para el diseño y creación de software? parece ser una cuestión que se plantea por un número cada vez mayor de empresas. Se propone en este documento indagar sobre el terreno y hacer sugerencias en cuanto a lo que un "TRIZ de Software” puede hacer. Teniendo en cuenta los distintos autores (Darrel Mann, entre otros) al respecto, parece probable suponer que la sugerencia será, sí, TRIZ puede ser aplicado a software. No obstante a habida cuenta de algunos debates de TRIZ y software, parece que la respuesta positiva no es tan evidente. Uno de los autores (Ikovenko 1) habla en torno a este tema en el TRIZ Centrum conferencia en 2003 y llegó a la conclusión de que, básicamente, desde el desarrollo de software se encuentra aún en una etapa temprana de su evolución, en otras palabras, que el desarrollo de software es un arte y no una ciencia en si. Por lo que no era todavía probable que se prestara para al tratamiento de TRIZ, ya que no era considerado una ciencia como tal. Mas franco aún fue Karasik 2, fue más vehemente en su despido de las posibilidades de aplicar TRIZ para problemas de software, “siendo un equipo un científico y un ingeniero un software” los 40 principios no serán aplicables a ingeniería de software bajo ninguna circunstancia. 1 Ikovenko, S, “Laws of Engineering System Evolution In Software Development”,·3rd European TRIZ- Conference, ETH Zurich, March 2003. 2 Karasik, Y., editorial comment, Anti-TRIZ Journal, Vol.2, No.2, and private email correspondence, 8 September 2004.
  • 8. 8 Triz para Software El trigger para Karasik para incurrir en tal afirmación de primer orden fue la investigación Publicada acerca de la lista de los 40 Principios de Inventiva para Software de Rea3.haciendo una analogía de la situación es que los 40 Principios de Inventiva - o la mayoría de ellos por lo menos - se puede observar en el diseño de software, considerada absurda para el. Sobre la base anterior de experiencias y el extenso análisis de las patentes realizadas durante el programa de investigación para la actualización de TRIZ, es nuestra firme convicción de que tiene TRIZ algo de importancia para ofrecer a ingenieros de software. Sin embargo a diferencia de las materias ciencias duras: mecanica, hidráulica, etc. lo que ya podemos ver es que el sesgo y la orientación de las distintas herramientas de TRIZ es muy diferente a la de software que en otros campos de aplicación. Por lo que el autor (Darrel mann) con el fin de explorar los prejuicios que, sin embargo, en primer lugar hay que estudiar el contexto y los límites de lo que es y lo que no es un problema 'software'. Una buena forma de comenzar esta exploración, según Mann, entonces, es mediante la Ley de Sistema de Integridad TRIZ4 (modificada) y ver cómo esto podría ser aplicado a sistemas informáticos. Es decir si un problema de software puede ser situado bajo esta perspectiva, así como las demás áreas lo han hecho, estos últimos no tendrían ningún impedimento para ser aplicado a través de TRIZ. Imagen 1 - Imagen de referencia La primera pregunta que surge después de pensar en este modelo, es aplicable a software? La respuesta es sí, podemos aplicar recursivamente el modelo en varios niveles jerárquicos .En el nivel del software subrutina, por ejemplo, podríamos pensar en el 'motor' como los algoritmos que figuran en la rutina, la transmisión como la llamada a la subrutina, la herramienta como los resultados calculados por la rutina y el control, las diferentes líneas de código en el software que asegurarse de que las cosas sucedan en la secuencia correcta y con la lógica deseada. El „campo (interface)' es un poco más grande, pero si pensamos en él como un "campo de la comunicación” la lógica sigue intacta. La misma analogía se puede 3 Rea, K., „TRIZ and Software - 40 Principle Analogies, Parts 1 and 2‟, TRIZ Journal, September and November 2001. 4 Mann, D.L., „Hands-On Systematic Innovation‟, CREAX Press, June 2002.
  • 9. 9 Triz para Software aplicar en forma progresiva a los niveles jerárquicos más altos en que nos fijamos en los sistemas desde la perspectiva del sistema operativo, idioma, etc. Ya sea cualquier nivel que veamos, en última instancia el "sistema" tiene que interactuar con algo fuera de la sistema („campo (interface)'). Siendo esto cosa fuera del sistema ser otra rutina de programa o el usuario mismo. Problemas de Software Los 'Problemas de Software' quizás a diferencia de los sistemas o ciencias convencionales es que sólo empezarán a ocurrir cuando se examinan los vínculos entre el software y el mundo exterior. Por lo tanto la única práctica, entonces, cuando nos encontramos en la identificación de modelos funcionales que contienen relaciones negativas es cuando llegamos a la interfaz con el mundo exterior. Ya que un fragmento de código no interacciona «Inadecuadamente» con otro, pero un pedazo de código muy a menudo interactúa inadecuadamente con una pieza de hardware o con un usuario. Es probable que esto significa que vamos a estar pensando en como TRIZ como herramienta en la resolución de problemas, en un instrumento algo a un diferente nivel de detalle en el punto de inicio de un modelo de análisis de la función. Triz para Software Bajo los aspectos mencionados anteriormente, Darrell Mann, lo obtuvo. Bajo los mismos procedimientos y analogías efectuadas a los 40 principios de TRIZ es posible resolver un problema de software mediante TRIZ. De esta manera a continuación se expondrá las ideas y procedimientos para efectuar tal resultado. Darrel Mann propone la siguiente estructura, de desarrollo y análisis del problema. Definición: 1. Resultado Ideal Final. 2. Explorar el problema. 3. Subversión análisis. 4. Matriz de contradicciones. Generación de Solución: 1. Principios Inventivos. 2. Tendencias/Evolución Potencial. Nota: Si bien la estructura anterior de procedimiento fue propuesta por Mann puede ser aplicada bajo cualquier ciencia; solo la matriz y los principios inventivos conforman obra de Mann y su utilización es única para “Problemas de Software”.
  • 10. 10 Triz para Software Definición Para esta primera aproximación Mann, baso su propuesta bajo dos perspectivas esenciales, en primer lugar bajo la utilización de siete pilares de exploración del problema y en segundo lugar las contradicciones en relación con los factores y/o parámetros que la conforman. Siete Pilares de “TRIZ para Software” Esta aproximación responde a las características y entendimiento del problema en cuestión. Es decir apoya a situarse en el problema y observar las características de este último, de manera que al momento de encontrar una solución a través de los principios inventivos por medio de la matriz de contradicciones resulte la más apropiada. Idealidad: atenta a encontrar cada vez mayor acerca de lo bueno, la disminución de lo malo.(“Si mismo”,autorepararse,autodaptarse,etc) Emergente: producir un a solución o atentar o situación relevante en el contexto de la situación del problema. Funcional: en el contexto de un software, esta existe para el software proporcionar una función útil, ya sea a otras piezas de software o de una pieza de hardware o un ser humano indep. del producto como tal. Contradicción: La contradicción de la eliminación de estrategias se puede utilizar para acelerar la evolución de cualquier sistema. Las contradicciones tienden a ocurrir en las interfaces entre software y el mundo exterior en su totalidad mas que en lugar de «dentro» del software. Recursos: Todo dentro y alrededor de un sistema que no se utiliza al máximo de su potencial es un recurso. Espacio/Tiempo/Interface: la comprensión efectiva de un problema requiere conocimiento de cómo un sistema se ve afectado por efectos espaciales, temporales y cuestiones interfaciales. Recursion: se refiere al fenómeno según el cual ciertos fenómenos de sistema se repiten en los diferentes niveles jerárquicos. Subversión Análisis Atenta a generar los errores que pudiera tener el sistema y de esta manera “Si el fallo ocurre, entonces los recursos necesarios para hacerlo suceder deben estar presentes en el sistema”
  • 11. 11 Triz para Software Por lo que Subversión es el análisis sobre la búsqueda de esos recursos, se trata de «inventar fracaso";¿Qué podría ir mal, irá mal, ¿Qué podría ir mal en el futuro, va a salir mal. Para así dar paso a las contradicciones y resolver el problema en cuestión. 1. Identificar el Problema- donde y cuando. 2. Amplificar el problema.(como hacer que ocurra todo el tiempo) 3. Formula el problema invertido. 4. Identificar los componentes necesarios. 5. Identificar los recursos en el sistema. Matriz de Contradicciones El clásico TRIZ Contradicción Matrix ha sido objeto de actualizaciones muchas veces en los últimos tiempos, primero a través de la publicación de “Matrix 2003 5” (para negocios) y, a continuación, más recientemente, un matriz de problemas empresariales. A pesar de pasar por varios pasos hacia lo que es relevante para los problemas que enfrentan los ingenieros de software y la búsqueda de muchas las patentes de software que había algo que aportar a la construcción de la herramienta, Matrix 2003 contiene mucho de lo que se consideró fuera de poner a los usuarios de software. De ahí que en 2003 se decidió que era necesario crear una matriz a medida para problemas de software. Esto matriz ya se ha concluido, y se convertido a disposición del público por primera vez cuando el libro "TRIZ para ingenieros de software" se público. La tabla de continuación ilustra los parámetros que componen las partes de la nueva Matriz. Size (Static) Size (Dynamic) Amount of Data Interface Speed Accuracy Stability Ability to Detect/Measure Loss of Time Loss of Data Harmful Effects Generated By System Adaptability/Versatility Compatibility/Connectability Ease Of Use Reliability/Robustness 5 Mann, D.L., Dewulf, S., Zlotin, B., Zusman, A., „Matrix 2003: Updating The TRIZ Contradiction Matrix‟, CREAX Press, Belgium, July 2003.
  • 12. 12 Triz para Software Security Aesthetics/Appearance Harmful Effects On System System Complexity Control Complexity Automation Parámetros de la nueva, Software Matrix El método de funcionamiento de la nueva Matriz es exactamente el mismo que el utilizado en las demás Matrices; el usuario tiene que identificar lo que ellos desean mejorar en su sistema, entonces que es lo que les impide hacer la mejora. Desde aquí es necesario entonces traducir los detalles del conflicto (el par mejora y empeoramiento) de la Matriz de la lista de parámetros con mi problema que corresponde mas estrechamente con los detalles. A partir de ahí, la matriz apreciara los más probable principios de inventiva utilizados por otros para solucionar el desafío con éxito del par conflictos. Esta nueva Matriz es el resultado del estudio de alrededor de 40000 patentes de software y el diseño soluciones. No obstante el número está limitado por el hecho de que actualmente sólo los EE.UU. es la concesión de software las patentes. Un ejemplo sencillo, sin embargo, ha de servir al doble propósito de demostrar cómo la matriz fue compilada (patentes) y cómo un usuario puede hacer uso de la herramienta. US6, 785.819 Esta patente se concedió a Mitsubishi Denki Kabushki Kaisha el 31 de agosto de 2004 (en realidad algún tiempo después de la Matriz de trabajo se completó). Los antecedentes de la patente como descrito en la divulgación es el siguiente (extracto): “Recientemente, los sistemas informático que utiliza LAN se están adoptando en las organizaciones. Comúnmente, una pluralidad de LAN ubicadas en diversos lugares en una organización de la red entre oficinas están conectadas por completo para formar una intranet. La extensión de más, una extranet que incluye la organización aliada a las empresas a formar una red total también se está convirtiendo en generalizada. Hay varias formas de conectar una pluralidad de LAN ubicadas en diversos lugares. Para dar un ejemplo, hay un caso de utilizar a bajo costo a Internet en lugar de una línea arrendada. En este caso, el acceso desde el exterior debe ser regulado, por lo que un servidor de seguridad general, se recurre a una frontera de fuera y dentro de la red. Esto ayuda a aumentar el factor de seguridad dentro de la LAN. El firewall es una técnica que sólo permite el acceso desde el exterior a una ubicación específica o para una aplicación específica de la LAN………. En un sistema de red informática, los servicios bajo un entorno LAN como el uso compartido de archivos, impresión a la impresora común, o el uso de la CPU del servidor no puede ser aprobado debido al firewall. En consecuencia, en los casos en que se desea obtener un ciertos datos o un programa a partir de otros ubicación, a continuación, uno sólo puede confiar en alguien en el otro lugar para datos requeridos utilizando un canal independiente, o sólo puede basarse en un método de envío de medios de comunicación como una cinta “.
  • 13. 13 Triz para Software El problema de este modo identificados por los inventores es un conflicto entre los deseos paralelo a mejorar la capacidad de transferencia de datos y mantener la seguridad. Traduciendo estos requisitos en los términos de la Matriz de Software, se pone en manifiesto el conflicto en la pareja ilustrada a continuación: US6, 785,819 conflicto traducido en términos de, The Software Matriz. Los inventores de la patenten ocuparon un Agente de software para lograr la solución.(en la figura se puede apreciar a través del principio 24,que es Intermediario, por lo que ahora cualquier problema de esta índole concurre a esta patente de Agentes). Generación de Solución La primera cosa que decir sobre el tema de los principios de inventiva es que el autor (Darrel Mann) confirmó la existencia de los mismos 40 principios como los que se encuentran en el TRIZ clásico. Como se dio en el caso con la técnica de conversión a los principios de gestión, se tuvieron que modificar algunos de los términos del principio para que las descripciones se adaptaran de mejor manera al contexto de software, pero más allá de eso, se han mantenido las mismas. Esto último se apoya ya que no ha habido a la fecha ingenieros de software que hayan identificado estrategias de inventiva que no encajen en los principios existentes. La lista de principios que presenta la modificación de los títulos se ilustra a continuación:
  • 14. 14 Triz para Software 1. Segmentation 25. Self-Service 2. Extraction 26. Copying 3. Local Quality 27. Cheap/Short Living 4. Asymmetry 28. Another Sense 5. Combination 29. Fluidity 6. Universality 30. Thin & Flexible 7. „Nested Doll‟ 31. Holes 8. Counterbalance 32. Colour Changes 9. Prior Counter-Action 33. Homogeneity 10. Prior Action 34. Discarding and Recovering 11. Prior Cushioning 35. Parameter Changes 12. Remove Tension 36. Paradigm Shift 13. „The Other Way Round‟ 37. Relative Change 14. Loop 38. Enrich 15. Dynamics 39. Calm 16. Slightly Less/Slightly More 40. Composite Structures 17. Another Dimension 18. Vibration 19. Periodic Action 20. Continuity of Useful Action 21. Hurrying 22. „Blessing in Disguise‟ 23. Feedback 24. Intermediary 40 Principios de Inventiva. También conviene señalar a este respecto es el hallazgo adicional de la investigación hecha por Mann, que la mayoría de los problema de software las soluciones parecen fusionar las ideas de varios principios. Para efectos prácticos de ejemplificación se muestran solo algunos principios respecto a su analogía clásica hacia la de software. (no obstante se anexan al final en un tabla todos los principios con su descripción de inglés) 1. Segmentation Software Analogy: Dividir un sistema en componentes autónomos. 5. Combination Software Analogy: Hacer ejecutar procesos en paralelo. 7. Nesting (Matrioshka)
  • 15. 15 Triz para Software Software Analogy: Heredar la funcionalidad de otros objetos de sus respectivas clases dentro de una clase base. 18.Vibration Software Analogy: cambiar el ritmo de ejecución de un algoritmo en el contexto de tiempo, hasta lograr. el resultado deseado. Secuencia de uso (frecuencia) de los Principios de Inventiva El análisis aquí descrito se basa en los mismos 40000 soluciones de software utilizado para compilar la Matriz de software. El método de presentar nuestras conclusiones es exactamente el mismo que recientemente se ha utilizado para la actualización de la matriz técnica y de. El software Principio de frecuencia de secuencia, es el siguiente: Secuencia de frecuencia de los 40 Principios de Inventiva. En comparación con la matriz clásica de triz, es la siguiente (por efectos de procesador de textos, la tabla quedo en la página siguiente): La columna cambio (change) indica que se han producido algunos cambios muy importantes que han tenido lugar entre la matriz clásica y la nueva matriz de software. En menor medida también ha habido algunos cambios en. Los mayores subidas en la lista la oferta muestran de manera más interesante las diferencias entre estrategias de resolución de conflictos de software y problemas técnicos: Las subidas de los Principios 37 ( «Cambio relativo" en nuestra aplicación de software) y 7 ( 'Muñeca Rusa ') son más indicativos de la facilidad con que estas dos estrategias pueden ser desplegadas en un contexto de software. Agrupamiento (Muñeca rusa) en particular, puede ser algo que añade una considerable complejidad en un sistema físico, pero en una pieza de software el uso de esta estrategia se limita solamente a exigir la creación de nuevas líneas de código. El aumento del principio “Cambio relativo” es también debido a la facilidad con que este estrategia puede ser desplegado en un entorno digital. En cuanto a los Principios que caen en la lista, parece claro que hay algunos de los Principios que son más difíciles de interpretar en el contexto de software. Por ejemplo el
  • 16. 16 Triz para Software Principio 18 («vibraciones»), 30 (”Flexible y delgado”), 31 ('Holes') y 36 («la fase de transición»). Si bien todos los ejemplos de software de estos principios pueden ser encontrados, su existencia es poco frecuente y, a veces, la imaginación necesaria es muy alta. El análisis detallado de la secuencia de prioridad se ilustra en mostrada anteriormente, de hecho, muestran que hay una gran diferencia en la frecuencia del uso de los 16 principales principios en comparación con el 24 inferiores. Comparación entre la matriz de Software y la Clásica. Idealidad y Tendencias Pasando de contradicciones, otro instrumento importante en el contexto del software parece ser La Idealidad y las Tendencias parte de TRIZ.
  • 17. 17 Triz para Software Una gran parte de la investigación subyacente para TRIZ-Software de ha examinado los patrones que existen en la evolución del software como los sistemas de salto discontinua de una manera de hacer las cosas a otro. Esto se debe a que esperamos que el conocimiento de esas tendencias nos permitirá acelerar considerablemente la evolución de las actuales sistemas de la misma manera que está empezando a suceder con los sistemas técnicos que estamos participando. Si bien este punto escapa al desarrollo de la investigación, nos pareció interesante mencionarlo ya que forma de una herramienta de gran apoyo para triz, especialmente para problemas de software. Ya que permite observar las tendencias a futuro de en un área tan volátil como la informática que permanece en constante evolución. De esta manera al momento de utilizar los principios observaremos nuestra tendencia de acuerdo a nuestra solución propuesta. Radar de Comparación, Actual y Potencial de Tendencias. Diseñando Patrones de Software con Triz Triz como ya mencionamos anteriormente, aparte de ser ocupado para la física, química, y otras ciencias, también puede ser aplicado a los procesos de negocios y a los procesos de software. Es así como el análisis de Triz y los patrones de diseño, visualizamos ciertas analogías que pueden ser estructuradas para mejorar y ayudar a los ingenieros de software. Para entrar en contexto un patrón de diseño es: • una solución estándar para un problema común de programación • una técnica para flexibilizar el código haciéndolo satisfacer ciertos criterios • un proyecto o estructura de implementación que logra una finalidad determinada • un lenguaje de programación de alto nivel • una manera más práctica de describir ciertos aspectos de la organización de un programa • Conexiones entre componentes de programas • La forma de un diagrama de objeto o de un modelo de objeto.
  • 18. 18 Triz para Software Así describiremos un subconjunto de los 23 patrones de diseño que fueron desarrollados por los Gang of Four [1] como instancias de los principios de resolución de problemas encontrados por la teoría TRIZ de Genrich Altshuller´s. Nosotros podemos ver en un análisis temprano, las similaridades entre los patrones de diseño y Triz, esto es que ambos sistemas son un conjunto de heurísticas, derivados desde observaciones de soluciones exitosas para problemas comunes. Luego de un profundo análisis, nosotros podemos encontrar fuertes links entre los patrones estructurales del grupo de los Gang of Four y un conjunto especifico de principios de TRIZ. Contradicciones Espacio-Tiempo Los científicos de la computación tienen dos bien conocidas fuerzas que son el espacio y el tiempo (dos características de los sistemas). Así el problema general es que tal como la característica del sistema del tiempo decrece (se mejora), la característica del sistema de espacio se incrementa (se empeora). En cambio, tal como la característica del sistema del espacio decrece (mejora), la característica del sistema de tiempo decrece (se empeora). Un ejemplo ilustrativo de contradicciones de espacio-tiempo: Se encuentra un problema con las bases de datos que mientras más información ellos guardan, más lento el sistema se pone. Sin embargo, mientras más información ellos tienen, más comúnmente podemos encontrar la información que nosotros queremos, debido a una pregunta realizada. Si identificamos en la matriz de contradicciones de 39x 39 TRIZ sería lo siguiente: Problemas Principios de Triz "el acceso a mas respuestas Volumen de un objeto estático e información" (Característica del sistema 8) "incremento de tiempo Tiempo de acción de un objeto necesario para encontrar estacionario ( Característica del una respuesta" sistema 16) La intersección de tiempo de acción de un objeto estacionario a lo largo del eje horizontal (se empeora) y volumen de un objeto estático (se mejora) nos indica 3 potenciales soluciones desde los 40 principios: 35 - Transformación de Propiedades 34 - Rechazo y regeneración de las partes 38 - Oxidación acelerada. El principio 34 incluye: " Después de completar esta función o llegar a ser útil, un elemento del objeto es rechazado (descartado, disuelto, evaporado, etc.) o modificado durante el proceso de trabajo". Esta descripción contiene la esencia de la
  • 19. 19 Triz para Software definición de CACHE, el cual es una solución común a un problema inicial con base de datos. Examinando el problema general de mas y mas tiempo (empeora) tomando un orden a través de una sobre-abundancia de información (se mejora), la solución de TRIZ encuentra muy bien descrito en el principio 34 la idea de un FAQ, o una lista de Preguntas frecuentemente hechas - otro ejemplo de un CACHE. Diseño de Patrones y TRIZ 1. Adapter Pattern y el principio Mediador (Mediator Principle) El patrón adaptador, como su propio nombre nos puede hacer ver, se usa para convertir el interface de una clase a la de otra, entendiendo en este caso interface como el conjunto de métodos que ofrece una clase para su manipulación por código, no la herramienta que usa el usuario final de nuestra aplicación. Lo que haremos será escribir métodos con nuestra interface deseada que deleguen el trabajo en los de la interface ya existente. Las razones para querer hacer algo así pueden ser de muy distinta naturaleza, y pueden ir desde: Querer integrar una clase ya existente pero que no podemos modificar en una nueva jerarquía de clases, que por ejemplo implemente una nueva interfaz, podemos querer limitar el interface de una clase. Querer hacerlo simplemente porque la convención de nombres usada en la clase original, que tampoco podemos o queremos cambiar, no se ajusta a la nuestra.  Esta última razón puede parecer un poco absurda pero puede ser bastante frustrante recibir miles de errores de compilación por trabajar con métodos del estilo GetName en lugar de getName. o Esta adaptación se puede hacer de dos formas : Adaptación por herencia Adaptación por composición. 1.3 Adaptación por herencia Aquí haremos que la clase que implementa la nueva interface extienda de la original y añadiremos a esta los métodos que consideremos oportunos. Por ejemplo: public class Usuario{
  • 20. 20 Triz para Software protected String nombre; protected String password; . . . public Usuario (String nombre, String password){ . . . } public String GetNombre (){ return nombre; } public String GetPassword (){ return password; } . . . } Según las convenciones de programación, nos damos cuenta de que esas dos G de Getxxx darán muchos problemas. Entonces suponiendo que esta clase ya esta en sistemas productivos y por tanto no podemos hacer algo tan simple como cambiar esa letra, optamos por extender esa clase, de forma que el sistema siga trabajando correctamente con las clases antiguas, para así evitarnos errores de compilación innecesarios. public class BuenUsuario extends Usuario{ public BuenUsuario (String nombre, String password){ super (nombre, password); } public String getNombre (){ return GetNombre(); } public String getPassword (){ return GetPassword(); } } Al hacerlo así, nos aprovechamos aparte de las ventajas de la herencia, haciendo que los métodos de otras clases que usen la clase usuario puedan seguir funcionando sin retocarlos. 1.2 Adaptación por Composición Esta ocurre en algunos casos donde no podemos usar la herencia, ya sea porque queremos integrar esa clase en una jerarquía nueva y ya estemos heredando de otra clase, o ya sea por causa de modificadores de acceso como private o final que impidan que se hereden algunas características de la clase, o simplemente que no queramos que la nueva clase tenga el interface completo de la original. En ese caso tendremos que usar la composición, es decir, incluir la clase a adaptar como un atributo de la adaptadora.
  • 21. 21 Triz para Software 2. Composite and Iterator Pattern y el principio de Universalidad (Universality Principle) Como desarrollador se tienen variadas listas para utilizar. Cada una de éstas pueden estar y lo más probable es que así sea, en distintos formatos. Es útil para crear una interfaz a través de la cual los objetos en las diferentes listas puedan sea accesados. Una segunda interfaz es creada para moverse a través de las listas (en el formato entregado por la interfaz de la lista). Esta interfaz, a través de la cual los objetos de la lista son accesados, es llama iterator (iterador). La representación (implementación) de la lista no es de ninguna consecuencia, el retorno de la siguiente lista de objetos de importancia primaria. PRINCIPIO 6 - UNIVERSALIDAD Promueve uniformidad de función, uso uniforme de un objeto para distintos propósitos, o la aplicación de los mismos requerimientos o características para distintos objetos, situaciones o acciones. 3. Decorator Pattern y los principios de Agrupamiento y/o Membranas Flexibles El decorator pattern dinámicamente agrega funcionalidad a un objeto. Usando éste patrón, es una forma de evitar crear subclases (clases hijas) para proveer funcionalidad extendida. Este patrón comienza con una superclase de un componente particular, C. El objeto actual que vamos a “decorar”, es una subclase de C, el que llamaremos c. El objeto decorador, d, en realidad referencia valores en c. Una subclase del decorador en realidad crea la funcionalidad adicional provista por la clase decorador. PRINCIPIO 7 – AGRUPAMIENTO Aplica cuando un objeto cabe dentro o pasa a través de otro. PRINCIPIO 30 – MEMBRANAS FLEXIBLES Receta el reemplazo de las construcciones tradicionales con construcciones de peliculas delgadas o membrana flexibles. Además, un objeto puede ser aislado de su ambiente con una película delgada. 4. Facade Pattern y el principio de la consolidación
  • 22. 22 Triz para Software Dada una colección de interfaces, un cliente (usuario) debería sólo tener que tratar con un sistema de interfaz unificada cuando trata de acceder a los datos. La interfaz de mayor nivel es el llamado patrón fachada. Es una implementación directa de la Ley de Remeter, la que encapsula el principio de mínimo conocimiento (“los amigos solo hablando con amigos”). PRINCIPIO 5 – CONSOLIDACION Entrega funciones o partes de un sistema a una relación que crea nuevos resultados. Un ejemplo es combinar la habilidad para reproductor de reproducir múltiples formatos (DVD, mp3, etc). 5. Flyweight Pattern y el principio de transición hacia una nueva dimensión Existen momentos en los que uno necesita tener, literalmente, miles de instancias de un objeto. Cada objeto es relativamente simple, usualmente llamando a unos pocos métodos. Un ejemplo de esto, podría ser un procesador de palabras basado en web que talvez tiene 2560 lugares para poder ubicar caracteres. Caracteres cualquiera pueden aparecer o desaparecer (dos métodos). El patrón flyweight entrega un administrador para organizar cada uno de los pequeños objetos (configurando los caracteres en 80 por columna y 32 por fila por cada página). Los objetos carácter son responsables de su propia administración. (Mostrando o no una letra, número, símbolo o estando en blanco). PRINCIPIO 17 – TRANCISION HACIA UNA NUEVA DIMENSION Sugiere cambiar la orientación de un sistema agregando una dimensión. Esta nueva dimensión puede poner menor tensión en una dimensión ya existente, o puede agregar una dimensión de control. 6. Proxy Patterm y los principios de Cambio de parámetro y/o transición de fase El patrón Proxy es usado para controlar el acceso a un objeto. Como ejemplo, hay momentos en lo que un usuario querrá solicitar que una imagen sea mostrada. Si el tamaño de ésta es un poco grande, entonces debería tomar un tiempo no mínimo en aparecer (quizás una animación flash). Prácticas de buena usabilidad recomendarían que un pequeño cartel animado que diga “Cargando” aparezca mientras se carga en memoria para reproducirse un gran archivo flash. Introduzca el patrón comentado para poder realizar esto, poner un cartel de “cargando” mientras la imagen está lista para ser mostrada, y luego mostrarla.
  • 23. 23 Triz para Software PRINCIPIO 35 – CAMBIOS DE PARAMETRO Sugiere cambiar el estado físico de un objeto (de gas a líquido por ejemplo). Cambiar la concentración o consistencia. Cambiar el grado de flexibilidad. Cambiar la temperatura. PRINCIPIO 36 – TRANSICION DE FASE Sugiere usar el fenómeno que ocurre durante el cambio de fase (cambio de volumen, ganancia o pérdida de calor) Ejemplos de Patrones Proxy pattern Se desea guardar una lista de usuarios registrados, pero no sé exactamente donde. La idea es que dependiendo del valor de un checkbox ( en el que el usuario elige si está conectado a internet o no ), debo mandar los datos a servidor ( en formato XML ) o guardarlos en disco en un Shared Object Esta es una misión para el Patrón Proxy, debido a que se quiere aislar el proceso de guardar los datos del resto del programa, simplemente hacerlo y olvidarse de cómo o dónde se guarda. Eso es lo que hace este patrón. El proxy guarda una referencia a un objeto, que es quien realmente se encargará de ejecutar la acción. Pero es el proxy el que crea ese objeto, por lo que puede crear una instancia de una u otra clase dependiendo de ciertas condiciones en tiempo de ejecución Por tanto, todas las clases que puedan ser instanciadas por el proxy, deben implementar el mismo interfaz. Y dependiendo del tipo de proxy, puede ser una buena idea que incluso él mismo implemente ese interfaz, para que se pueda eliminar si es necesario. Decorator Pattern Supongamos que tenemos una clase existente Ventana y queremos añadirle funcionalidad para que muestre un borde alrededor. Podemos crear una subclase VentanaConBorde que herede de Ventana. Hasta aquí todo bien, pero supongamos que surge la necesidad de crear una ventana que muestre un pequeño botón de ayuda con un signo de interrogación (?) en su parte superior. Entonces tenemos las siguientes opciones: Crear otra subclase de Ventana: VentanaConBotónDeAyuda.
  • 24. 24 Triz para Software Problema: No cubre la necesidad de tener ventanas con bordes y botón de ayuda a la vez. Crear una subclase de VentanaConBorde: VentanaConBordeYBotonDeAyuda. Problema: No tenemos una ventana con botón de ayuda y sin borde. Crear clases para todas las combinaciones posibles de funcionalidades. Problema: Con este ejemplo tendríamos cuatro clases: Ventana, VentanaConBorde, VentanaConBotonDeAyuda y VentanaConBordeYBotonDeAyuda; con tres funcionalidades tendríamos ocho clases y con cuatro, ¡dieciséis! El patrón Decorator soluciona este problema de una manera mucho más sencilla y extensible. Se crea a partir de Ventana la subclase abstracta VentanaDecorator y, heredando de ella, BordeDecorator y BotonDeAyudaDecorator. VentanaDecorator encapsula el comportamiento de Ventana y utiliza composición recursiva para que sea posible añadir tantas "capas" de Decorators como se desee. Podemos crear tantos Decorators como queramos heredando de VentanaDecorator. Flyweight Pattern Crear una clase PelotaFlyweight, que contendrá la información común (radio y color) y otra clase PelotaConcreta, que contendrá las coordenadas concretas de cada pelota y una referencia a un objeto de tipo PelotaFlyweight. Al crearse instancias de PelotaConcreta, se les deberá proveer de referencias a la instancia de PelotaFlyweight adecuada a nuestras necesidades. En este caso solamente tendríamos una instancia de PelotaFlyweight, puesto que hemos dicho que todas nuestras pelotas tienen el mismo radio y color, pero pensando en un ejemplo en el que tuviéramos varios grupos de pelotas, y dentro de cada uno de los cuales se compartieran el radio y el color, se puede utilizar Flyweight conjuntamente con el patrón Factory, de tal modo que este último, en el momento en que se le soliciten instancias de PelotaConcreta con determinadas características (mismo radio y color que el solicitado), compruebe si ya existe un PelotaFlyweight con ese radio y color, y devuelva esa referencia o, en caso de que no exista, la cree y la registre. Facade Pattern class UserfriendlyDate { GregorianCalendar gcal; public UserfriendlyDate(String isodate_ymd) { String[] a = isodate_ymd.split("-"); gcal = new GregorianCalendar(Integer.valueOf(a[0]).intValue(), Integer.valueOf(a[1]).intValue()-1 /* !!! */, Integer.valueOf(a[2]).intValue()); } public void addDays(int days) { gcal.add(Calendar.DAY_OF_MONTH, days); } public String toString() { return new Formatter().format("%1$tY-%1$tm-
  • 25. 25 Triz para Software %1$td", gcal).toString();} } /** Cliente */ class FacadePattern { public static void main(String[] args) { UserfriendlyDate d = new UserfriendlyDate("1980-08-20"); System.out.println("Date: "+d); d.addDays(20); System.out.println("20 days after: "+d); } } Bridge Pattern public class Abstraccion { private Implementador implementador; public void setImplementador(Implementador implementador) { this.implementador = implementador; } public Implementador getImplementador() { return implementador; } public void operacion() { implementador.operacion(); } } public class AbstraccionRefinada extends Abstraccion { public void operacion() { super.operacion(); } } public interface Implementador { public abstract void operacion(); } public class ImplementacionA implements Implementador { public void operacion() { System.out.println("implementacion A"); } } public class ImplementacionB implements Implementador { public void operacion()
  • 26. 26 Triz para Software { System.out.println("implementacion B"); } } public class PruebaBridge { public static void main(String arg[]) { Abstraccion abstraction = new AbstraccionRefinada(); abstraction.setImplementador(new ImplementacionA()); abstraction.operacion(); Composite Pattern Imaginemos que necesitamos crear una serie de clases para guardar información acerca de una serie de figuras que serán círculos, cuadrados y triángulos. Además necesitamos poder tratar también grupos de imágenes porque nuestro programa permite seleccionar varias de estas figuras a la vez para moverlas por la pantalla. En principio tenemos las clases Círculo, Cuadrado y Triángulo, que heredarán de una clase padre que podríamos llamar Figura e implementarán todas la operación pintar(). En cuanto a los grupos de Figuras podríamos caer en la tentación de crear una clase particular separada de las anteriores llamada GrupoDeImágenes, también con un método pintar(). Problema. Esta idea de separar en clases privadas componentes (figuras) y contenedores (grupos) tiene el problema de que, para cada uno de los dos atributos, el método pintar() tendrá una implementación diferente, aumentando la complejidad del sistema. El patrón composite da una solución elegante a este problema, de la que además resulta en una implementación más sencilla. A la clase Figura la llamaríamos Gráfico y de ella extenderían tanto Círculo, Cuadrado y Triángulo, como GrupoDeImágenes. Además, ésta última tendría una relación todo- parte de multiplicidad * con Gráfico: un GrupoDeImágenes contendría varios Gráficos, ya fuesen éstos Cuadrados, Triángulos, u otras clases GrupoDeImágenes. Así, es posible definir a un grupo de imágenes recursivamente. Por ejemplo, un objeto cuya clase es GrupoDeImágenes podría contener un Cuadrado, un Triángulo y otro GrupoDeImágenes, este grupo de imágenes podría contener un Círculo y un Cuadrado. Posteriormente, a este último grupo se le podría añadir otro GrupoDeImágenes, generando una estructura de composición recursiva en árbol, por medio de muy poca codificación y un diagrama sencillo y claro.
  • 27. 27 Triz para Software Adapter Pattern El patrón adaptador, como su propio nombre nos puede hacer ver, se usa para convertir el interface de una clase a la de otra. Implementación: En otras palabras, un adaptador es típicamente implementado utilizando herencia múltiple, al crear una subclase del adaptador que herede los métodos privados y, permitiendo que herede además, la interfaz pública de las clases que definen la interfaz requerida. Conclusiones Se ha demostrado con este informe que la mayoría de las patentes de software y la implementación de nuevos principios pueden ayudar a formar una nueva matriz y generar la base para una nueva investigación para una Matriz totalmente limpia solo para software. Es así como el autor Darell Mann ha introducido una investigación importante respecto a este tema, por lo que un próximo trabajo estaría en crear y formar Triz para el software implementando nuevas matrices y generando nuevas soluciones con patentes de software innovadoras.
  • 28. 28 Triz para Software Referencias  http://www.systematic-innovation.com  Ikovenko, S., „Laws Of Engineering System Evolution In Software Development‟,keynote paper at TRIZ Centrum, 3rd European TRIZ-Conference, ETH Zurich, March 2003.  Karasik, Y., editorial comment, Anti-TRIZ Journal, Vol.2, No.2, and private email correspondence, 8 September 2004.  [Kev-01] Rea, K., „TRIZ and Software - 40 Principle Analogies, Partes 1 and 2‟, TRIZ Journal, Septiembre y Noviembre 2001.  Mann, D.L., „Hands-On Systematic Innovation‟, CREAX Press, June 2002.  Espejo, R., Harnden, R., „The Viable System Model‟, John Wiley & Sons, New York, 1989.  Mann, D.L., „Hands-On Systematic Innovation For Business & Management‟, IFR Press, August 2004.  Mann, D.L., „TRIZ For Software Engineers‟, IFR Press, October 2004.  Mann, D.L., Dewulf, S., Zlotin, B., Zusman, A., „Matrix 2003: Updating The TRIZ Contradiction Matrix‟, CREAX Press, Belgium, July 2003.  Mann, D.L., „Comparing The Classical And New Contradiction Matrix, Part 2 – Zooming In‟, TRIZ Journal, July 2004.  Paulk, M.C., Weber, C.V., Garcia, S.M., Chrissis, M.B., Bush, M., „Key Practices Of The Software Maturity Model‟, Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pennsylvania.  Mann, D.L., Dewulf, S., „Evolutionary Potential In Technical And Business Systems‟, TRIZ Journal, June 2002.  Mann, D.L., „Ideality And Self-X‟, paper presented at 1st ETRIA TRIZ Future Conference, Bath, November 2001.  Rea, K., „Applying TRIZ to Software Problems‟, TRIZ Journal, October 2002.
  • 29. 29 Triz para Software Anexos Resumen, Analogía 40 principios de Inventiva TRIZ (1-20).
  • 30. 30 Triz para Software Resumen, Analogía 40 principios de Inventiva TRIZ (21-40).
  • 31. 31 Triz para Software Patentes en el software Patentar una idea o un producto no es algo nuevo, es más, ésta se lleva a cabo hace mucho tiempo, si bien en algunos casos puede ser vista como una medida arbitraria, también premiar de alguna forma al inventor de un producto u objeto que añada funcionalidad a alguno existente, o éste tenga funcionalidad por si sólo. Una patente, al igual que un derecho de autor (copyright), entrega a un autor un derecho exclusivo o monopólico respecto a su creación o invención intelectual. El problema nace al afirmar que está sujeto a patente y que no. Por ejemplo, el autor de un libro tiene el derecho de autor respecto a éste, ese derecho le otorga protección literaria como artística sobre su obra, pero es de un índole más estético. Con esto nos referimos a que el uso de frases o el argumento de la obra está protegido, tanto para su copia como reproducción, pero no así el género de ésta. Osea, puede tener derecho sobre su obra, pero no sobre el género “crimen/suspenso”, esto permite que existan más escritores que se dediquen a escribir obras de ésa índole, y protege al autor de una copia. Dentro de las cosas no patentables están por ejemplo; variedades vegetales o animales, inventos en biotecnología y microbiología, productos farmacéuticos y medicamentos esenciales en la lista de la OMS, descubrimientos, teorías científicas ni métodos matemáticos, descubrimiento de materias existentes en la naturaleza, etc. El software cae en el medio de la polémica, y es a su vez un caso emblemático. Si bien existen miles de patentes de software, existe un gran número de detractores de éstas, haciendo que en Europa se lleve discutiendo durante varios años el si es posible o no patentar el software. Respecto al tema que nos atañe, si bien existen grandes cantidades de productos de software patentados, también existe un número mayor de productos que no lo están, siendo un tema complicado y delicado la patentabilidad o no. Existen a nivel internacional distintas oficinas que conceden patentes y las administra. Entre éstas está la Oficina Europea de Patentes (OEP), quien presenta una gran cantidad de detractores respecto a nuestro tema. En el caso de Estados Unidos, la práctica de patentar software es realizada comúnmente. Finalmente en éste sentido, si bien existe una gran controversia, respecto a la patentabilidad o no del software, en éstos momentos, existen una gran cantidad de patentes, lo que permitiría avanzar en el análisis de éstas, trabajo ya iniciado por Darrel Mann, y formular finalmente una teoría de TRIZ pero aplicada directamente al desarrollo o la búsqueda de innovación en el software.