Como vimos anteriormente entre el modelo de reutilización es definido por la organización, pero existen métodos ya establecidos para facilitar el proceso, de los cuáles pueden ser utilizados, dependiendo de los productos de software que se esté utilizando.
Reutilización de Caja negra
Definición
La reutilización de caja negra es conseguida cuando los detalles de la implementación de un componente reutilizable son escondidos al cliente. Los clientes saben sólo sobre un conjunto disponible de capacidades (el que). Los componentes nunca exponen detalles internos de la su implementación (el como).
Ejemplo
Muchas tecnologías hoy apoyan la reutilización de caja negra. Los componentes COM+, Assembly de Microsoft y la tecnología .NET soportan la creación de componentes que son usados vía su conocida interfaz sin cualquier conocimiento del usuario sobre la estructura interna del componente. Los artefactos de GUI, Controles UI, Add-In son un ejemplo de tales componentes.
Reutilización de Caja blanca
Definición
La reutilización de caja blanca es la reutilización de un componente de software completo o parcial, con el entendimiento profundo de su estructura interna, algoritmos, módulos etc.
Ejemplo
En la Programación OO la reutilización de caja blanca se refiere al proceso de desarrollar software escribiendo subclases con el conocimiento y entendiendo de las clases internas de las clases padres. Un ejemplo de esto es la utilización de patrones.
Reutilización Horizontal
Definición
La reutilización horizontal proporciona componentes reutilizables genéricos que pueden apoyar una variedad de productos. La reutilización horizontal se refiere a componentes de software usados a través de una amplia variedad de aplicaciones.
Ejemplo
En términos de activos de código, la reutilización horizontal incluye bibliotecas de componentes, como clases genéricas, rutinas de manipulación de cadenas, o funciones de interfaz grafica de usuario (GUI). La reutilización horizontal también puede referirse al uso de una aplicación de terceros dentro de un sistema más grande, como un paquete de correo electrónico o un programa de procesamiento de textos.
Reutilización Vertical
Definición
El concepto de Reutilización Vertical es la reutilización de áreas funcionales de un sistema, o dominios, que puede ser usado por una familia de sistemas con la funcionalidad similar. El estudio y la aplicación de esta idea han engendrado otra dos disciplina de ingeniería, llamada ingeniería de dominio e ingeniería de aplicación. Ingeniería de Dominio se enfoca en la creación y el mantenimiento de repositorios de reutilización de áreas funcionales, mientras en la ingeniería de aplicación, hace el uso de aquellos repositorios para poner en práctica nuevos productos.
Ejemplo
En el alcance de las aplicaciones de base de datos, un generador de informe general definido por el usuario es un ejemplo para la reutilización vertical.
Solución Específica
Definición
Es un acercamiento sistemático para identificar las similitudes, semejanzas y variabilidad necesaria para caracterizar y estandarizar una línea de productos como un conjunto del alcance de la solución, basado generalmente en componentes comerciales.
Ejemplo
Un convertidor de formato de imágenes general, es un ejemplo para una línea de productos (o una solución de digitalización de imágenes) de reutilización de software.

Categorías de de componentes de software reutilizables.
La sección siguiente describe las categorías de los componentes reutilizables más populares. Son los productos de trabajo habituales para el desarrollo de Software
Diseño de Patrones
Definición
Los Patrones y los lenguajes de patrones son utilizadas para describir soluciones acertadas a problemas de software recurrentes. No sólo que los patrones proporcionan técnicas útiles, ayudan a la gente a comunicarse mejor, y ayudan a la gente a explicar lo que ellos hacen y por qué. En el largo plazo, los patrones son un paso hacia guías para ingenieros de software.
Un patrón es una solución recurrente a un problema estándar. Cuando se relaciona patrones, forman un lenguaje de patrones que proporciona un proceso para la resolución ordenada de problemas de desarrollo de software. Los lenguajes de patrones no son lenguajes formales, si no una colección de soluciones propuestas interrelacionadas, aunque proporcionen realmente un vocabulario para discutir un problema particular. Ambos patrones y lenguajes de patrones ayudan a los desarrolladores a comunicar el conocimiento arquitectónico, ayudan a la gente a aprender un nuevo paradigma de diseño o estilo arquitectónico, y ayudan a nuevos desarrolladores a evitar trampas y errores que han sido tradicionalmente aprendidos sólo por la experiencia costosa.
Los patrones tienen un contexto en el cual ellos son aplicados. La manera que describimos patrones debe aclarar todas estas cosas. La claridad de la expresión de un patrón hace más fácil ver cuándo y por qué usar ciertos patrones, así como cuándo y por qué no usarlos.
Ejemplo
Los componentes de Acceso a Datos utilizados por el Data Access Application Block de Microsoft utilizan un patrón Factory.
Un conjunto de guías y lineamientos para unir la lógica de aplicación es necesario. Este conjunto de guías es conocido como un patrón de diseño.
Cuando Utilizar.
Los patrones deberían ser usados cuando un paradigma general a una arquitectura de aplicación y estructura es necesario y los detalles de implementación son muy diferentes de una instancia a otra. (Si los detalles de implementación no son diferentes, entonces la solución será más amplia que un patrón, si no la completa implementación de este patrón basta).
Librerías de Software
Definición
La biblioteca es una colección de subrutinas y/o funciones almacenadas en uno o varios archivos, por lo general agrupados en un solo archivo compilado. Las bibliotecas son una de las formas más rápidas para la reutilización de código. Los sistemas operativos, o los ambientes en tiempo real a menudo los suministran. Las rutinas en una biblioteca pueden ser de propósito general o diseñado para una función específica como comunicación vía GPRS con un dispositivo móvil.
Las bibliotecas son ligadas por el programa del usuario para formar un ejecutable completo.
Ejemplo
Muchos ejemplos de bibliotecas de software existen; el más común es por lo general bibliotecas de manipulación de cadenas o bibliotecas matemáticas.
Cuando Utilizar.
Las bibliotecas son todavía el método más común para crear el software reutilizable.
Siempre que haya un conjunto de clases reutilizables y funciones que son cohesivas, esto una buena práctica encapsularlos en una biblioteca.
Clases Abstractas
Definición
En la programación orientada por componente, una clase es diseñada sólo como un padre del cual una subclase pueden ser derivada, pero que no es posible crear su instancia. Las clases abstractas a menudo están acostumbradas "abstraer" el conjunto incompleto de las características, que pueden ser compartidos entonces por un grupo de subclases de clases hermanas que añaden variaciones diferentes de las piezas ausentes.
Ejemplo
En una biblioteca GUI, todos los artefactos son por lo general heredados de alguna clase general.
Esta clase de contiene el comportamiento común de componentes gráficos, pero no es un artefacto completo que no puede ser instanciada por sí sola.
Cuando Utilizar.
Primero, se tiene que comprobar la plataforma elegida, Únicamente paradigmas de OO para diseño e implementación, soportan clases abstractas.
Las clases abstractas son usadas, cuando hay un conjunto de clases, que comparten un comportamiento común y datos, pero son diferentes en algunos aspectos; entonces una clase abstracta es creada para capturar las partes comunes de aquellos componentes.
Plantillas
Definición
En programación, una plantilla es una clase genérica u otra unidad del código fuente que puede ser usado como la base para unidades únicas del código. En C# y otros lenguajes OO existen mecanismos para crear plantillas y bibliotecas de plantilla estándares de las cuales los programadores pueden elegir clases de plantilla individuales para modificar.
Ejemplo
En C# las Enterprise Templates son ejemplo para un conjunto de plantillas, de igual manera existen clases generadas a parir de asistentes con ayuda de los Software Factory de Microsoft es un ejemplo para un conjunto de clases (Colecciones, Entidades de Negocio, Entidades de Datos, Búsquedas, Paginaciones) y un conjunto de algoritmos (Find, Sort, etc.), los cuales son reutilizables sobre cualquier tipo de componente.
Cuando Utilizar.
Utilice Plantillas cuando hay una estructura de datos o algoritmo le gustaría aplicarse a un conjunto de clases. Entonces encapsule el comportamiento en una plantilla e implemente la plantilla a cada una de las clases.
Componentes
Definición
En las disciplinas de programación e ingeniería, un componente es una parte identificable de un programa o construcción más grande. Por lo general, un componente proporciona una función particular o un grupo de funciones relacionadas. En el diseño de software, un sistema es dividido en componentes que por su parte son subdivididos en módulos.
En la programación orientada por componentes y la tecnología distribuida de componentes, un componente es un componente básico reutilizable que puede ser combinado con otros componentes en el mismo u otras computadoras en una red distribuida para formar una aplicación. Un componente se ejecuta dentro de un contexto llamado contenedor.
Ejemplo
Ejemplos de un componente incluyen: Un botón en un interfaz de usuario gráfico, una pequeña calculadora de interés, y una interfaz a un administrador de base de datos. Los ejemplos de contenedores incluyen páginas en un Sitio Web, navegadores de Web, y procesadores de textos.
Cuando Utilizar.
En cuanto a bibliotecas, el uso de componentes hoy se ha extendido extensamente.
Usando la tecnología de POO, cada clase reutilizable es realmente un componente, un conjunto de funcionalidades cohesivas que comparten datos comunes. La utilización de tecnologías .NET es posible crear componentes que son fácilmente integrados en el IDE’s de desarrollo y código fuente. Cuando se crea un componente reutilizable es mejor usar tal tecnología para implementarlo.
Frameworks
Definición
Frameworks de aplicación Orientado a objetos (OO) son una tecnología para reutilizar diseños de software probados e implementaciones a fin de reducir el costo y mejorar la calidad de software. Un Framework es una aplicación reutilizable, "semicompleta" que puede ser especializada para producir aplicaciones personalizadas. En contraste con técnicas de reutilización de OO basadas en bibliotecas de clase, los frameworks son dirigidas para unidades de negocio particulares (como proceso de datos o comunicaciones celulares) y aplicación de soluciones (como interfaces de usuario u operaciones de tiempo real). Aunque las ventajas y los principios de diseño que son la base de los frameworks sean en gran parte independientes de la solución al cual ellos son aplicados, los frameworks pueden ser clasificados por su alcance, como sigue:
Frameworks de infraestructura de sistema- Estos marcos de trabajo simplifican el desarrollo de la infraestructura de sistemas portátil y eficiente como sistema operativo y frameworks de comunicación, y frameworks para interfaces de usuario y herramientas de procesamiento de lenguaje. Los frameworks de infraestructura de sistema son usados principalmente internamente y no son usados directamente para clientes de la organización.
Frameworks de integración de software intermedio - Estos marcos de trabajo comúnmente son usados para integrar aplicaciones distribuidas y componentes. Los frameworks de integración de software intermedio son diseñados para realzar la capacidad de los desarrolladores de software para modularizar, reutilizar, y ampliar su infraestructura de software para trabajar en un ambiente distribuido. Los ejemplos comunes incluyen: software orientado a mensajes, bases de datos transaccionales y software de orquestación y manipulación de datos.
Frameworks de aplicación empresarial- Estos marcos de trabajo se dirigen a la amplia gama de aplicaciones de soluciones (como encuestas, ventas, seguros, e ingeniería financiera) y son la piedra angular de actividades económicas de una empresa.
Con relación a los frameworks de infraestructura de Sistema y frameworks de integración de Software intermedio, los frameworks empresarial son caros de desarrollarse. Ellos pueden proporcionar sin embargo un retorno de inversión ya que ellos apoyan el desarrollo de aplicaciones del usuario final y productos directamente. En contraste, la infraestructura de Sistema y los frameworks de integración de Software intermedio se concentran en gran parte en preocupaciones de desarrollo de software internas.
Ejemplo
El MSF (Microsoft Solution Framework) proporciona un sistema de modelos, principios, y pautas para dar soluciones a empresas que diseñan y desarrollan de una manera que se asegure de que todos los elementos de un proyecto, tales como gente, procesos, y herramientas, puedan ser manejados con éxito.
Cundo Utilizar.
La creación de un Framework, hasta para una solución muy específica es una tarea difícil y que consume recursos. La mayoría de los frameworks existentes son usados como COTS. Use un marco de trabajo cuando exista uno que satisface sus necesidades. Si su solución crea una aplicación estándar como una base de datos o aplicación de comunicación, es más probable que exista un marco de trabajo conveniente ya existente.
Arquitectura Orientada a Servicios
Definición.
Define la utilización de servicios para dar soporte a los requerimientos de software del usuario. SOA proporciona una metodología y un marco de trabajo para documentar las capacidades de negocio y puede dar soporte a las actividades de integración y consolidación.
En un ambiente SOA, los nodos de la red hacen disponibles sus recursos a otros participantes en la red como servicios independientes a los que tienen acceso de un modo estandarizado. La mayoría de las definiciones de SOA identifican la utilización de Servicios Web (empleando SOAP y WSDL) en su implementación, no obstante se puede implementar una SOA utilizando cualquier tecnología basada en servicios.
Ejemplo.
Existen soluciones que permiten reutilizar el desarrollo de software orientado a servicios, una de las herramientas que en lo particular me gustan para lograr este tipo de servicios es Windows Comunication Foundation, el cual es un subsistema de comunicación para habilitar a las aplicaciones comunicarse.
Cuando utilizar.
Es recomendable para aquellas soluciones en las cuales existen ambientes heterogéneos que son sujetos a frecuentes cambios, cuando se desea ofrecer servicios de manera externa hacia otros clientes o proveedores o cuando se tengan operaciones que no sean altamente acopladas.

La relación de categorías de componentes de software y métodos de reutilización de software se puede resumir en la siguiente tabla.
|
|
Caja Negra |
Caja Blanca |
Horizontal |
Vertical |
Solución Específica |
|
Diseño de Patrones |
|
|
|
|
|
|
Librerías |
|
|
|
|
|
|
Clases Abstractas |
|
|
|
|
|
|
Plantillas |
|
|
|
|
|
|
Componentes |
|
|
|
|
|
|
Frameworks |
|
|
|
|
|
|
Arquitectura Orientada a Servicios |
|
|
|
|
|
En el siguiente post veremos algunos de los lineamientos que utilizamos para determinar la reutilización de algunos de los elementos que forman parte del proceso de desarrollo de software.