Busca en este sitio:
Twitter
. Soy Novato
. Soy Gerente de Proyectos
. Quiero ganar más
. Quiero mejorar a mi empresa
y sus proyectos
. Tengo experiencia, pero no soy experto
. Soy experto (o eso creo)
.
.

Contáctanos
Escríbenos a:
contacto@liderdeproyecto.com
Para información de cursos:
cursos@liderdeproyecto.com

Teléfono en México D.F:
+52 (55) 2652 4590


Aviso de privacidad
+
.
Humor del Líder

Problemas de comunicación
+
.
Glosario
Ven a conocer el glosario de administración de proyectos. Nuevas definiciones: Condiciones, Diagrama de flujo, Proceso de negocio, Producción, Secuencia.
+
.
Colaboradores

Conoce a los colaboradores de LiderDeProyecto.com. Tu puedes ser uno de ellos.
+
.
 
UML

Todos son Reemplazables, pocos Reutilizables: Los Componentes
Por Sergio Orozco

La mayoría hemos soñado con desarrollar nuestros propios componentes reutilizables y desarrollar aplicaciones cada vez más eficientemente; en menos tiempo. Algunos pocos lo logran, pero la gran mayoría se queda muy lejos de tan grandiosa meta.

Afortunadamente hay empresas que se han enfocado en realizar dicho trabajo por nosotros y contamos con gran cantidad de librerías de código y componentes que podemos aprovechar para no partir de cero en nuestros proyectos. Gracias a esto el desarrollo de aplicaciones cada día se vuelve algo más eficiente. Obviamente, para quien sabe buscar y aprovechar todos estos componentes y librerías que existen en el mercado.

Los más sofisticados aprovechan cada nueva versión que surge de dichos componentes. Sacándole todo el jugo en beneficio de un desarrollo más eficiente y de calidad. Actualmente el desarrollador más inteligente no necesariamente es el que conoce a la perfección un lenguaje de programación, sino el que es capaz de producir más eficientemente y con mayor calidad una aplicación. Esto no implica únicamente un conocimiento a fondo del lenguaje de programación, sino de las librerías que puede reutilizar para reducir al máximo la cantidad de código nuevo a escribir.

El desarrollador moderno requiere contar con la habilidad de estructurar adecuadamente las aplicaciones mediante la integración de componentes propios y de terceros.

El componente según UML

Pero, a todo esto ¿qué es un componente? De acuerdo a la especificación de UML un componente “es una parte modular de un sistema que encapsula su contenido y que es reemplazable en su entorno. Un componente define su comportamiento en términos de sus interfases proporcionadas y requeridas…”

A menos que se trate de un sistema pequeño y stand-alone, de esos que cada vez hay menos, seguramente tendrás que representar tu sistema con dos o más componentes, por lo que el diagrama de componentes se vuelve un artefacto necesario para modelar tus sistemas.
Las nuevas tecnologías y la mayoría de las arquitecturas modernas requieren del uso de componentes para estructurar y distribuir la aplicación. Necesitamos decidir en dónde ubicaremos los servicios de usuario, de negocio de datos o cualquier otro tipo de servicio específico; y sin el concepto de componentes esto resultaría imposible.

Componentes y objetos

Cuando hablamos de componentes estamos llevando el concepto de objetos a un más alto nivel. La orientación a objetos puede hacer maravillas por nuestros desarrollos una vez que aprendemos a explotar al máximo este paradigma. Pero, el reuso, mantenibilidad y flexibilidad de nuestros sistemas a un mayor nivel lo conseguiremos en el momento en que aprendamos a definir adecuadamente los componentes de nuestros sistemas. Ya sea que nosotros los construyamos o que reutilicemos componentes ya existentes.

Reemplazable = menor costo

La definición de la Especificación de la OMG nos habla acerca de que un componente es reemplazable. Vale la pena detenerse un momento a analizar ese punto.

De acuerdo a algunos estudios, y no es necesario ser genio para darse cuenta de eso, un costo importante de los sistemas viene a la hora del mantenimiento. El sistema empieza a crecer y el costo por cada línea de código adicional va siendo cada vez más alto. Crear un software nuevo es más económico que mantener un software existente. Ya sea para corregirlo, modificarlo o para agregarle nueva funcionalidad.

Aquí es donde entra el concepto de “reemplazabilidad” de los componentes. Si diseñamos adecuadamente nuestro sistema por medio de componentes que encapsulan de forma modular el comportamiento de nuestro sistema y las reglas de negocio, entonces podremos modificar el sistema cuando cambien esas reglas de negocio a un costo mucho menor. Esto siempre y cuando seamos capaces de identificar el componente donde tienen que realizarse dichos cambios.

Si logramos respetar las interfases de dicho componente a pesar de los cambios internos requeridos en el componente tendremos un mantenimiento sumamente eficiente de la aplicación y muy transparente, en muchos casos, para la mayoría de los involucrados en el desarrollo.

Ventajas de los Componentes

Algunos de los beneficios de trabajar partiendo de un modelo de componentes para construir nuestro sistema:

  1. Mayor productividad, si logramos identificar componentes ya existentes que podamos reutilizar o si construimos componentes que podamos reutilizar en el futuro.

  2. Reducción del tiempo de entrega, ya sea porque reutilizamos componentes o porque partimos de un plan donde podemos paralelizar mayor cantidad de trabajo. Varias personas pueden trabajar en diferentes componentes al mismo tiempo.
  3. Mayor calidad, pues un componente es más fácil de programar y probar que una aplicación completa. Si los componentes están bien planeados para formar la aplicación completa, la calidad de los componentes se verá reflejada en la aplicación final. Además, si un componente fue creado y utilizado anteriormente significa que ya fue probado en situaciones reales, por lo que muy probablemente habrá madurado.

  4. Menores costos, tanto por el reuso como por la facilidad para darle mantenimiento a la aplicación mediante el mantenimiento a componentes específicos donde se identifican los cambios a realizar.

Las Interfases

Pero, ¿qué es esto de las interfases? La interfase representa la declaración de un conjunto de funciones y obligaciones que alguien más lleva a cabo. En el diagrama de componentes la interfase representa aquello que un componente es capaz de hacer por alguien más (interfase proporcionada) o aquellos servicios que posiblemente requiera utilizar un componente y que son proporcionados por otro componente (interfase requerida). Gráficamente la podemos visualizar como un círculo ligado al componente o como una clase estereotipada.


El componente Ventas expone sus servicios a través de la interfase IVenta
y requiere de una interfase IDetalleCliente

Un componente proporciona funcionalidad específica dentro del sistema. Por ejemplo, podríamos tener un componente que se encarga de aplicar las reglas de negocio para realizar una venta (obtener total, obtener IVA, agregar un producto a la venta, cancelar la venta, etc.). Esa funcionalidad, cuando usamos un lenguaje orientado a objetos está implementada en un conjunto de clases agrupadas dentro del componente.

No todas las funciones de las clases agrupadas en el componente pueden “verse” o “utilizarse” por otros componentes. Únicamente aquellas que decidamos exponer. Esas funciones se exponen precisamente a través de las interfases. Es por eso que decimos que la interfase contiene un conjunto de declaraciones de operaciones públicas, las que expone el componente.


La interfase de un componente se puede ver como círculo o como una clase estereotipada con una relación de realización desde el componente que la expone


Cuando queremos indicar en un solo diagrama que la interface expuesta por un componente es la misma requerida por otro componente podemos mostrarlo por medio de un ensamble.


El componente Orden requiere utilizar la Interfase CodigoUnidad que expone el componente Producto y la Interfase DetalleCliente que expone el componente Cliente

Al igual que otros artefactos que hemos mostrado se ha hecho de forma simplificada y para las situaciones más comunes, de la misma forma en esta ocasión se explica el concepto de componente e interfase para la situación más común en que es utilizada. Pues, nuestra intención en varios de estos artículos consiste en ayudar a la persona que comienza a trabajar con estos artefactos y no nos gustaría confundirlo con demasiados conceptos.

Para quien conoce ya el tema les recomendamos usar referencias más completas, como sería la especificación de UML en la OMG o participar en un curso especializado en UML o esperar artículos futuros donde ahondemos en el tema.

Publicado en la revista Software Gurú.
Reproducido con permiso del autor.


Temas relacionados:
Curso de análisis y diseño orientado a objetos con UML


indice del manual





Cambios previstos para el PMBOK® Guide 6ta edición (Raymundo Sánchez Ticó)
+
.
.
.
Quienes somos I Base de conocimiento I Apoyo y servicios profesionales I Carrera y desarrollo profesional I Material de apoyo I Productos y souvenirs I Comunidad I Contacto I Aviso de privacidad
© LiderDeProyecto.com - Todos los derechos reservados. PMBOK, PMP, Project Management Professional, Project Management Professional (PMP), PgMP, Program Management Professional (PgMP), PMI-RMP, PMI Risk Management Professional (PMI-RMP), CAPM, Certified Associate in Project Management (CAPM), PMI-SP, PMI Scheduling Professional (PMI-SP), THE PMI TALENT TRIANGLE and the PMI REP Logo are registered marks of the Project Management Institute. Capability Maturity Model® y CMM® son marcas registradas en la Oficina de Patentes de los EUA por el Software Engineering Institute (SEI) de la Universidad Carnegie Mellon®. CMM® IntegrationSM, IDEALSM y SCAMPISM son marcas de servicio de la Universidad Carnegie Mellon. MDA®, BPMN®, SysML®, MOF®, OMG® y UML® son marcas registradas en los EUA y en otros países por el Object Management Group. Microsoft® es una marca registrada en los EUA y en otros países; Microsoft Office, Microsoft Excel y Microsoft Project son productos propiedad de Microsoft Corp. Enterprise Architect es un producto propiedad de Sparx Systems, Australia. RUP® es una marca registrada por IBM Corp.