<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkUDR3w_fSp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-10583243</id><updated>2011-11-27T18:57:56.245-05:00</updated><category term="Composición" /><category term="Iteraciones" /><category term="Ingeniero de Procesos" /><category term="Fases" /><category term="Usuario Final" /><category term="Concepción" /><category term="Analista del Software" /><category term="Analista" /><category term="Construcción" /><category term="Visión" /><category term="Polimorfismo" /><category term="Aspectos" /><category term="Requisitos" /><category term="Herencia" /><category term="Biología Celular" /><category term="RUP" /><category term="Caso de Uso" /><category term="Proyecto" /><category term="Elaboración" /><category term="Clase" /><category term="Transición" /><category term="Objetos" /><category term="Disciplinas" /><category term="Proceso" /><category term="Futuro" /><category term="Usuario" /><category term="Gerente" /><title>Gazafatonario IT</title><subtitle type="html">Este es mi punto de vista de la TI. Especialmente en lo que respecta a procesos y métodos, modelos y sistemas, mejores prácticas y calidad del software.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gazafatonarioit.blogspot.com/" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GazafatonarioIt" /><feedburner:info uri="gazafatonarioit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEcFRXYzcSp7ImA9WxdSE0k.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-2342274366293422357</id><published>2008-05-20T23:54:00.000-05:00</published><updated>2008-05-21T00:00:14.889-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-21T00:00:14.889-05:00</app:edited><title /><content type="html">&lt;P id=fiz71 align=left&gt;&lt;SPAN id=rx_w1&gt;&lt;FONT id=rx_w2&gt;&lt;b id=mwnm0&gt;Lectura Fundamental 12&lt;BR id=mwnm1&gt;&lt;/b&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P id=mwnm2 align=left&gt;&lt;SPAN id=mwnm3&gt;&lt;FONT id=mwnm4&gt;&lt;A id=ajws title="Lectura Fundamental Anterior: “Orientación a Objetos: Un Enfoque Teórico Moderno (Actualizado)”" href="http://gazafatonarioit.blogspot.com/2007/11/lectura-fundamental-anterior-realizacin.html"&gt;Lectura Fundamental Anterior: “Orientación a Objetos: Un Enfoque Teórico Moderno (Actualizado)”&lt;/A&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q10 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q11 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none"&gt;&lt;B id=ut.q12&gt;&lt;SPAN id=ut.q13&gt;&lt;FONT id=bup93&gt;Lectura # 12 &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=ut.q15 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q16&gt;&lt;SPAN id=ut.q17&gt;&lt;FONT id=bup94&gt;Casos de Uso: de Extensiones y de Inclusiones &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q19 style="MARGIN: 0cm 25.5pt 0pt 22.7pt; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q20&gt;&lt;FONT id=bup95 size=1&gt;“El hombre vive fascinado por la inmensidad de la eternidad y nos preguntamos: ¿Nuestras acciones perdurarán a través de los siglos? ¿Gente que no conocemos oirá nuestros nombres mucho después de nuestra muerte? ¿Y se preguntarán quiénes éramos, cuán valientemente peleábamos, cuán ferozmente amábamos?” &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q22 style="MARGIN: 0cm 14.15pt 0pt 0cm; TEXT-ALIGN: right" align=right&gt;&lt;B id=ut.q23&gt;&lt;SPAN id=ut.q24&gt;&lt;FONT id=bup96 size=1&gt;Wolfgang Petersen&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q25&gt;&lt;FONT id=bup97 size=1&gt; (Troya, 2004) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q27 style="MARGIN: 6pt 0cm 6pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q28&gt;&lt;SPAN id=ut.q29&gt;&lt;FONT id=bup98 size=2&gt;Introducción &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q31 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q32&gt;&lt;FONT id=bup99 size=2&gt;De vuelta en el tiempo, hace unas siete Lecturas Fundamentales, prometí hablar de las relaciones entre los casos de uso. Pues bien, he querido extender el tema hacía el no menos complejo asunto de modelar sistemas de información mediante casos de uso. Trataré de mantener una posición minimalista: abordaré sólo la cuestión relacionada con el diagrama de casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q34 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q35&gt;&lt;FONT id=bup910 size=2&gt;Básicamente, un diagrama de casos de casos de uso está compuesto de Actores y Casos de Uso, y las relaciones entre los unos, entre los otros y entre los unos y los otros. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q37 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q38&gt;&lt;FONT id=bup911 size=2&gt;Para recordar qué es un Actor podemos leer la Definición 5 en &lt;A id=hsgq title="Luis Antonio Salazar Caraballo, “Casos de Uso: Origen, Especificación y Evolución”, Gazafatonario IT, http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html, 17 nov. 2006." href="#[3]"&gt;[3]&lt;/A&gt;. Para recapitular sobre Casos de Uso, podemos leer esencialmente &lt;A id=iuty title="Luis Antonio Salazar Caraballo, “Casos de Uso: De Vuelta a lo Fundamental”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html, 09 nov. 2006." href="#[4]"&gt;[4]&lt;/A&gt; y luego repasar &lt;A id=dvq2 title="Luis Antonio Salazar Caraballo, “Casos de Uso: Del Todo y de Sus Partes”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html, 23 nov. 2006." href="#[5]"&gt;[5]&lt;/A&gt;, &lt;A id=zxma title="Luis Antonio Salazar Caraballo, “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación?”, Gazafatonario IT,   http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html, 07 dic. 2006." href="#[6]"&gt;[6]&lt;/A&gt;, &lt;A id=a11k title="Luis Antonio Salazar Caraballo, “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 2 de 2”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html, 22 dic. 2006." href="#[7]"&gt;[7]&lt;/A&gt; y &lt;A id=jr0v title="Luis Antonio Salazar Caraballo, “Casos de Uso: Origen, Especificación y Evolución”, Gazafatonario IT, http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html, 17 nov. 2006." href="#[3]"&gt;[3]&lt;/A&gt;. Ya sabemos además que podemos usar UML &lt;A id=syn: title="Luis Antonio Salazar Caraballo, “Prolegómenos Sobre el Lenguaje de Modelado Unificado”,  Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html, 01 jun. 2006." href="#[8]"&gt;[8]&lt;/A&gt; para especificar, visualizar, construir y documentar los artefactos de sistemas de software. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q40 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q41&gt;&lt;SPAN id=ut.q42&gt;&lt;FONT id=bup912 size=2&gt;Generalización de Actores &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q44 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q45&gt;&lt;FONT id=bup913 size=2&gt;Dos o más Actores se relacionan entre ellos mediante la &lt;/FONT&gt;&lt;B id=ut.q46&gt;Generalización&lt;/B&gt;&lt;FONT id=bup914 size=2&gt; (de actores). Esta relación significa que uno o más actores pueden heredar las características, pero mejor aún, las responsabilidades de otro actor del sistema. Un Vendedor de Licencias de Software y un Vendedor de Servicios de Ingeniería tienen al menos una responsabilidad en común, una actividad: Registrar Cliente. Si los roles se interceptan en dos o más actividades en el sistema, es posible entonces, por razones de organización del modelo, de abstracción y de simplicidad, crear un nuevo actor: Vendedor de Productos y Servicios. Este parentesco se diagrama como muestro en la figura 1. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q48 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q49&gt;&lt;FONT id=bup915 size=2&gt;Además, muchas veces enfrentamos el dilema en el que un caso de uso (del sistema) es ejecutado por dos o más actores. Como en un sistema de Administración de Proyectos, donde el Gerente de Proyectos puede Matricular un Proyecto, pero también lo puede hacer el Gerente de la Oficina de Proyectos. Una mala idea es expresar esta situación como lo hago aparecer en la &lt;A id=blc- title="figura 2" href="#Figura2"&gt;figura 2&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=d4h.0 style="MARGIN: 6pt 0cm" align=center&gt; &lt;SPAN id=ut.q55&gt;&lt;IMG id=d4h.1 src="http://docs.google.com/File?id=dd635kds_12cnjfh6c9_b"&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q54 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q60&gt;&lt;FONT id=bup917 size=1&gt;Figura 1: Diagrama parcial de Actores de un Sistema CRM &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q62 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q63&gt;&lt;FONT id=bup918 size=2&gt;En cambio, usamos la generalización, creando un actor que desde el punto de vista del negocio y del usuario es Abstracto: el Administrador de Proyectos. Entonces, el diagrama se convierte en algo como lo que sugiero en la figura 3. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q65 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;SPAN id=ut.q68&gt; &lt;DIV id=kq2w style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;A id=y15c name=Figura2&gt;&lt;/A&gt;&lt;IMG id=zb8b0 src="http://docs.google.com/File?id=dd635kds_13hqhwbtgs_b"&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=ut.q65 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=MsoNormal id=ut.q65 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q71&gt;&lt;FONT id=bup919 size=1&gt;Figura 2: Diagrama Incorrecto de Casos de Uso de un Sistema de Administración de Proyectos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN id=ut.q76&gt;&lt;FONT id=bup920 size=2&gt; &lt;DIV id=eu2g style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=yd-30 src="http://docs.google.com/File?id=dd635kds_16dzkgxsdd_b"&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=ut.q73 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P class=MsoNormal id=ut.q73 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=MsoNormal id=ut.q73 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q79&gt;&lt;FONT id=bup921 size=1&gt;Figura 3: Diagrama Correcto de Casos de Uso de un Sistema de Administración de Proyectos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q81 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q82&gt;&lt;FONT id=bup922 size=2&gt;Quizás lo que sucede en estos casos es que confundimos Actores del Negocio &lt;A id=vh.o title="Luis Antonio Salazar Caraballo, “Casos de Uso: Origen, Especificación y Evolución”, Gazafatonario IT, http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html, 17 nov. 2006." href="#[3]"&gt;[3]&lt;/A&gt; con Actores del Sistema o, simplemente, cargos o roles de la organización para la cual se construye la aplicación con roles o responsabilidades en el sistema de las personas que ejercen esas funciones. Ese no es el camino. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q84 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q85&gt;&lt;FONT id=bup923 size=2&gt;Por último, tengamos en cuenta el sentido de la generalización de actores: los casos de uso ejecutados por el actor padre son en la práctica ejecutados por los hijos. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q87 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q88&gt;&lt;SPAN id=ut.q89&gt;&lt;FONT id=bup924 size=2&gt;Relaciones Entre Actores y Casos de Uso &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q91 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q92&gt;&lt;FONT id=bup925 size=2&gt;Un Actor se comunica con casos de uso, componentes y clases &lt;A id=kn9h title="Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML, 2 nov. 2007. Pp. 587." href="#[9]"&gt;[9]&lt;/A&gt;. Esta comunicación se representa mediante la relación de Asociación (binaria). En Particular, nos interesa la relación entre el actor y el caso de uso. Esta relación muestra el actor que inicia o ejecuta el caso de uso, normalmente una persona o un grupo de personas, pero también cualquier entidad externa al sistema, como otra aplicación o maquinaria especial. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q94 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q95&gt;&lt;FONT id=bup926 size=2&gt;Las figuras 3, 4, 5 y 6 son muestras de relaciones de asociación típicas entre actores y casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q97 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q98&gt;&lt;FONT id=bup927 size=2&gt;En estos diagramas, la constante es que la relación es en ambos sentidos, es decir, es una relación de toma y dame, el actor hace-el sistema hace. Pero también se presentan casos donde la asociación es en un solo sentido, o hacia el caso de uso o hacia el actor. Estas situaciones son comunes cuando el actor no es una persona, sino un software externo o una máquina. Como en la figura 4, donde al ejecutarse la funcionalidad de registrar un cliente que es persona natural, el sistema CRM le comunica al sistema contable que matricule un tercero. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q100 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q101&gt;&lt;FONT id=bup928 size=2&gt;En este diagrama, la funcionalidad que va al sistema externo se representa como un caso de uso “incluido”, una relación de la que hablaré en breve. Pero en la práctica, la comunicación puede ir directamente del caso de uso principal al sistema externo. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q103 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;SPAN id=ut.q106&gt;&lt;FONT id=bup929 size=2&gt; &lt;DIV id=yxph style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=xlzs0 src="http://docs.google.com/File?id=dd635kds_17czb6pqfz_b"&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=ut.q103 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P class=MsoNormal id=ut.q103 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=MsoNormal id=ut.q103 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q109&gt;&lt;FONT id=bup930 size=1&gt;Figura 4: Diagrama Parcial de Casos de Uso donde interviene un sistema externo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q111 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q112&gt;&lt;FONT id=bup931 size=2&gt;Casos en los que un actor se relaciona con una clase o un componente se presentan cuando el actor es un sistema externo que envía o recibe datos del sistema principal o, cuando siendo persona, el actor se comunica con el sistema vía una página Web, por ejemplo, que se representa como una clase en la aplicación. Este último caso se presenta en los diagramas de Interacción, como los de Secuencia &lt;A id=rmdw title="Luis Antonio Salazar Caraballo, “Realización de Casos de Uso: de los Objetos y sus Interacciones”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html, 23 oct. 2006." href="#[10]"&gt;[10]&lt;/A&gt; o de Comunicación. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q114 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q115&gt;&lt;SPAN id=ut.q116&gt;&lt;FONT id=bup932 size=2&gt;Relaciones Entre Casos de Uso &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q118 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q119&gt;&lt;FONT id=bup933 size=2&gt;Este es la materia que genera más polémica y la que es menos entendida en la comunidad de la IT, así es que trataré de ir más despacio. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q121 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q122&gt;&lt;FONT id=bup934 size=2&gt;Dos o más casos de uso se pueden relacionar entre ellos para distintos propósitos: distribuir mejor el modelo, establecer condiciones de reusabilidad (de funcionalidad), de incrementos del software, y para planear las iteraciones, entre otros. Las relaciones son de tres tipos: Inclusión, Extensión y Generalización. Enfatizaré en las dos primeras. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q124 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q125&gt;&lt;SPAN id=ut.q126&gt;&lt;FONT id=bup935 size=2&gt;Relación de Inclusión &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q128 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q129&gt;&lt;FONT id=bup936 size=2&gt;Una relación de inclusión define que un caso de uso contiene el comportamiento definido en otro caso de uso &lt;A id=q6aa title="Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML, 2 nov. 2007. Pp. 592." href="#[11]"&gt;[11]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q131 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q132&gt;&lt;FONT id=bup937 size=2&gt;Una relación de inclusión es una relación de un caso de uso &lt;/FONT&gt;&lt;U id=ut.q133&gt;base&lt;/U&gt;&lt;FONT id=bup938 size=2&gt; a un caso de uso &lt;/FONT&gt;&lt;U id=ut.q134&gt;incluido&lt;/U&gt;&lt;FONT id=bup939 size=2&gt; en la que se especifica como el comportamiento definido en el caso de uso incluido es explícitamente insertado en el comportamiento del caso de uso base &lt;A id=rzk_ title="IBM. The Rational Unified Process V7.1." href="#[1]"&gt;[1]&lt;/A&gt;. Decimos entonces que el caso de uso incluido es &lt;/FONT&gt;&lt;U id=ut.q135&gt;abstracto&lt;/U&gt;&lt;FONT id=bup940 size=2&gt;, es decir, no es ejecutado directamente por un actor.  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q137 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q138&gt;&lt;FONT id=bup941 size=2&gt;Esta relación se usa cuando queremos: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL id=k2u60&gt; &lt;LI id=k2u61&gt; &lt;DIV class=MsoNormal id=k2u62 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q145&gt;&lt;FONT id=bup942 size=2&gt;Factorizar o descomponer (en sentido matemático) el comportamiento del caso de uso base que no es necesario para entender el objetivo principal del mismo y donde solamente el resultado del caso de uso incluido es importante. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=k2u63&gt; &lt;DIV class=MsoNormal id=k2u64 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q152&gt;&lt;FONT id=bup943 size=2&gt;Distribuir en uno o más casos de uso, funcionalidad del caso de uso base que es común para dos o más casos de uso (reusabilidad). &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=ut.q154 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q155&gt;&lt;FONT id=bup944 size=2&gt;La primera opción se usa especialmente en casos de uso largos o complejos donde algunas partes del mismo no son relevantes para el sentido primordial del caso de uso y no son necesarias, en primera instancia, para entenderlo y aprobarlo. Por ejemplo, un caso de uso para Ingresar un Cliente de Naturaleza Jurídica puede solicitar docenas o cientos de datos que se pueden agrupar de acuerdo a algunos criterios como Datos Generales, Datos del Tipo de Entidad y Naturaleza Jurídica, Datos del Gerente o Representante Legal, Datos de los Contactos, Referencias Comerciales, entre otros. Algunos de estos grupos de datos pueden incluirse en casos de uso complementarios que son ejecutados desde el caso de uso principal que podría lucir así: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q157 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q158 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q159&gt;&lt;SPAN id=ut.q160&gt;&lt;FONT id=bup945 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q161&gt;&lt;FONT id=bup946 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q162&gt;Registrar Cliente Jurídico&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q164 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q165&gt;&lt;SPAN id=ut.q166&gt;&lt;FONT id=bup948 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q167&gt;&lt;FONT id=bup949 size=1&gt;: Vendedor de Productos y Servicios &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q169 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q170&gt;&lt;SPAN id=ut.q171&gt;&lt;FONT id=bup950 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q172&gt;&lt;FONT id=bup951 size=1&gt;: este caso de uso permite registrar los datos de una persona de naturaleza jurídica… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q174 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q175&gt;&lt;SPAN id=ut.q176&gt;&lt;FONT id=bup952 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q177&gt;&lt;FONT id=bup953 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q179 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q180&gt;&lt;SPAN id=ut.q181&gt;1.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q183&gt;&lt;FONT id=bup954 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q184&gt;Actor&lt;/B&gt;&lt;FONT id=bup955 size=1&gt; decide registrar los datos de una persona jurídica &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q186 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: medium none; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q187&gt;&lt;SPAN id=ut.q188&gt;2.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q190&gt;&lt;FONT id=bup956 size=1&gt;El sistema pide seleccionar la ciudad y oficina de vinculación &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q192 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: medium none; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q193&gt;&lt;SPAN id=ut.q194&gt;3.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q196&gt;&lt;FONT id=bup957 size=1&gt;El actor selecciona la ciudad y oficina de vinculación &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q198 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: medium none; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q199&gt;&lt;SPAN id=ut.q200&gt;4.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q202&gt;&lt;FONT id=bup958 size=1&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q204 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; TEXT-INDENT: 17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q205&gt;&lt;FONT id=bup959 size=1&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q207 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q208&gt;&lt;FONT id=bup960 size=1&gt;12. Se ejecuta el caso de uso Registrar Datos del Tipo de Entidad y Naturaleza Jurídica &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q210 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q211&gt;&lt;FONT id=bup961 size=1&gt;13. Se ejecuta el caso de uso Registrar Datos del Gerente o Representante Legal &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q213 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q214&gt;&lt;FONT id=bup962 size=1&gt;14. Se ejecuta el caso de uso Registrar Datos de las Referencias Comerciales &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;DIV id=ut.q216 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q217 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q218&gt;&lt;FONT id=bup963 size=1&gt;15…. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q220 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q221&gt;&lt;FONT id=bup964 size=2&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q223 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q224&gt;&lt;FONT id=bup965 size=1&gt;25. El caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q226 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q227&gt;&lt;SPAN id=ut.q228&gt;&lt;FONT id=bup966 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q229&gt;&lt;FONT id=bup967 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q231 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q232&gt;&lt;SPAN id=ut.q233&gt;&lt;FONT id=bup968 size=1&gt;Requisitos Especiales: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q234&gt;&lt;FONT id=bup969 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=ut.q236 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q237&gt;&lt;FONT id=bup970 size=2&gt;En este ejemplo, en los pasos 12 a 14 se ejecutan distintos casos de uso de los que, en principio, interesa el resultado. La palabra clave es “en principio”. En este diagrama también muestro la segunda posibilidad de inclusión, el reuso, con el caso de uso Verificar Centrales de Riesgo, que se ejecuta desde varios casos de uso del modelo. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q240 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q241&gt;&lt;FONT id=bup971 size=2&gt;Algunos aspectos de los casos de uso incluidos que debemos tener en cuenta: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL id=xx8i0&gt; &lt;LI id=xx8i1&gt; &lt;DIV class=MsoNormal id=ut.q243 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q248&gt;&lt;FONT id=bup972 size=2&gt;Un caso de uso incluido no contiene una funcionalidad significante para la arquitectura del sistema, especialmente para la vista funcional o de casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=xx8i2&gt; &lt;DIV class=MsoNormal id=ut.q250 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q255&gt;&lt;FONT id=bup973 size=2&gt;Un caso de uso incluido se puede “&lt;/FONT&gt;&lt;I id=ut.q256&gt;prototipar&lt;/I&gt;&lt;FONT id=bup974 size=2&gt;” en las primeras de cambio, es decir, durante el análisis y el diseño del mismo, el diseñador se puede concentrar en el caso de uso base y omitir los detalles particulares del caso de uso incluido. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=xx8i3 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;SPAN id=ut.q261&gt;&lt;FONT id=bup975 size=2&gt; &lt;DIV id=l6is style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=m_1h0 src="http://docs.google.com/File?id=dd635kds_187r92fqcc_b"&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=xx8i3 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P class=MsoNormal id=xx8i3 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=MsoNormal id=xx8i3 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q264&gt;&lt;FONT id=bup976 size=1&gt;Figura 5: Diagrama parcial del caso de uso Registrar Cliente Jurídico &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL id=zz4b0&gt; &lt;LI id=zz4b1&gt; &lt;DIV class=MsoNormal id=ut.q266 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q271&gt;&lt;FONT id=bup977 size=2&gt;Un caso de uso incluido no debe usarse como excusa para hacer descomposición funcional &lt;A id=juzu title="Luis Antonio Salazar Caraballo, “Casos de Uso: De Vuelta a lo Fundamental”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html, 09 nov. 2006." href="#[4]"&gt;[4]&lt;/A&gt;, es decir, tener uno o más casos de uso incluidos que especifiquen aspectos CLAB (creación, lectura, actualización o borrado –CRUD en inglés) o que estén vinculados a usuarios concretos específicos, o completamente ligados a un componente del sistema o a un componente arquitectónico específico, o vinculados a una pantalla o función de usuario determinada, o en algún paso de su secuencia ejecutan otros casos de uso incluidos (asunto este que debería evitarse tanto como se pueda). Para saber más de casos de uso funcionalmente descompuestos ver &lt;/FONT&gt;&lt;B id=ut.q272&gt;Definición 3&lt;/B&gt;&lt;FONT id=bup978 size=2&gt; en &lt;A id=y0sj title="Luis Antonio Salazar Caraballo, “Casos de Uso: De Vuelta a lo Fundamental”, Gazafatonario IT,  http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html, 09 nov. 2006." href="#[4]"&gt;[4]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=zz4b2&gt; &lt;DIV class=MsoNormal id=ut.q274 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q279&gt;&lt;FONT id=bup979 size=2&gt;Un caso de uso incluido está incompleto por naturaleza, es decir, por sí solo no arroja un resultado observable para el actor, o es un resultado parcial, o sus escenarios dependen de lo que ha pasado antes en el caso de uso principal. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=zz4b3&gt; &lt;DIV class=MsoNormal id=ut.q281 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q286&gt;&lt;FONT id=bup980 size=2&gt;Un caso de uso incluido no es ejecutado por un actor distinto al actor del caso de uso base. Sin embargo, un caso de uso incluido puede tener asociado un actor pasivo o secundario, normalmente cuando este actor recibe o entrega información al caso de uso incluido, como anotaba en la figura 4. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=zz4b4&gt; &lt;DIV class=MsoNormal id=ut.q288 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q293&gt;&lt;FONT id=bup981 size=2&gt;Un caso de uso incluido no se usa para especificar procesos automáticos o semi-automáticos que el sistema realiza en su totalidad sin interacción con el usuario. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=zz4b5&gt; &lt;DIV class=MsoNormal id=ut.q295 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q300&gt;&lt;FONT id=bup982 size=2&gt;Un caso de uso incluido siempre se implementa con el caso de uso base o antes, si se trata de un caso de uso que expone funcionalidad común. En otras palabras, el caso de uso incluido se implementa durante la misma iteración en que se implementa el primero caso de uso principal que lo incluya. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=zz4b6&gt; &lt;DIV class=MsoNormal id=ut.q302 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q307&gt;&lt;FONT id=bup983 size=2&gt;Un caso de uso incluido no es condicional, es decir, si el ejecutar el caso de uso base se alcanza el paso donde se ejecuta el caso de uso incluido, éste se ejecuta. Por supuesto, la ejecución de la funcionalidad incluida puede depender de si se cumple una condición o no en el caso de uso base, pero esta condición debe especificarse explícitamente en el caso de uso principal, como apunto en el paso 12 del ejemplo siguiente: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=ut.q310 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q311&gt;&lt;SPAN id=ut.q312&gt;&lt;FONT id=bup984 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q313&gt;&lt;FONT id=bup985 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q314&gt;Registrar Cliente Natural&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q316 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q317&gt;&lt;SPAN id=ut.q318&gt;&lt;FONT id=bup987 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q319&gt;&lt;FONT id=bup988 size=1&gt;: Vendedor de Productos y Servicios &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q321 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q322&gt;&lt;SPAN id=ut.q323&gt;&lt;FONT id=bup989 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q324&gt;&lt;FONT id=bup990 size=1&gt;: este caso de uso permite registrar los datos de una persona natural. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q326 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q327&gt;&lt;SPAN id=ut.q328&gt;&lt;FONT id=bup991 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q329&gt;&lt;FONT id=bup992 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q331 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: windowtext; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q332&gt;&lt;SPAN id=ut.q333&gt;5.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q335&gt;&lt;FONT id=bup993 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q336&gt;Actor&lt;/B&gt;&lt;FONT id=bup994 size=1&gt; decide registrar los datos de una persona natural &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q338 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q339&gt;&lt;SPAN id=ut.q340&gt;6.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q342&gt;&lt;FONT id=bup995 size=1&gt;El sistema pide seleccionar la ciudad y oficina de vinculación &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q344 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q345&gt;&lt;SPAN id=ut.q346&gt;7.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q348&gt;&lt;FONT id=bup996 size=1&gt;El actor selecciona la ciudad y oficina de vinculación &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q350 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q351&gt;&lt;SPAN id=ut.q352&gt;8.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q354&gt;&lt;FONT id=bup997 size=1&gt;El sistema solicita el nombre de la persona &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q356 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q357&gt;&lt;SPAN id=ut.q358&gt;9.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q360&gt;&lt;FONT id=bup998 size=1&gt;El actor ingresa el nombre de la persona &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q362 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q363&gt;&lt;SPAN id=ut.q364&gt;10.  &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q366&gt;&lt;FONT id=bup999 size=1&gt;El sistema pide seleccionar la profesión de la persona &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q368 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 17.85pt; BORDER-LEFT: windowtext; TEXT-INDENT: -17.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q369&gt;&lt;SPAN id=ut.q370&gt;11.  &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q372&gt;&lt;FONT id=bup9100 size=1&gt;El actor selecciona la profesión de la persona &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q374 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q375&gt;&lt;FONT id=bup9101 size=1&gt;12. Si la profesión es “Congresista” se ejecuta el caso de uso Verificar Lista Clinton. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q377 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q378&gt;&lt;FONT id=bup9102 size=1&gt;13. … &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q380 style="BORDER-RIGHT: windowtext; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q381&gt;&lt;FONT id=bup9103 size=1&gt;14. Se ejecuta el caso de uso Registrar Datos de las Referencias Comerciales &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q383 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q384 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q385&gt;&lt;FONT id=bup9104 size=1&gt;15…. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q387 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q388&gt;&lt;FONT id=bup9105 size=2&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q390 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q391&gt;&lt;FONT id=bup9106 size=1&gt;25. El caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q393 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q394&gt;&lt;SPAN id=ut.q395&gt;&lt;FONT id=bup9107 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q396&gt;&lt;FONT id=bup9108 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q398 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q399&gt;&lt;SPAN id=ut.q400&gt;&lt;FONT id=bup9109 size=1&gt;Requisitos Especiales: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q401&gt;&lt;FONT id=bup9110 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;UL id=er3.0&gt; &lt;LI id=er3.1&gt; &lt;DIV class=MsoNormal id=ut.q403 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q408&gt;&lt;FONT id=bup9111 size=2&gt;Un caso de uso incluido debería incluir, en su documentación, una sección que describa explícitamente los casos de uso base desde los cuales es incluido. Este simple ejercicio hace al documento tan auto-suficiente o auto-contenido como sea posible, es decir, los interesados en el artefacto no tendrán que navegar por ningún otro lado para conocer todo el detalle del caso de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=er3.2&gt; &lt;DIV class=MsoNormal id=ut.q410 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q415&gt;&lt;FONT id=bup9112 size=2&gt;En un caso de uso incluido, las precondiciones siempre se han cumplido en el caso de uso base que lo incluye. Entre tanto, las poscondiciones del caso de uso incluido afectan el comportamiento del resto del caso de uso base. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=er3.3&gt; &lt;DIV class=MsoNormal id=ut.q417 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q422&gt;&lt;FONT id=bup9113 size=2&gt;Finalmente, un caso de uso incluido no debería tener relaciones de extensión con otros casos de uso. Simplemente no tiene sentido. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=ut.q424 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q425&gt;&lt;FONT id=bup9114 size=2&gt;Pasemos precisamente a la trama de las extensiones. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q427 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q428&gt;&lt;SPAN lang=ES id=ut.q429&gt;&lt;FONT id=bup9115 size=2&gt;Relación de Extensión &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q431 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q432&gt;&lt;FONT id=bup9116 size=2&gt;La Extensión es una relación de un &lt;/FONT&gt;&lt;U id=ut.q433&gt;caso de uso de extensión&lt;/U&gt;&lt;FONT id=bup9117 size=2&gt; a un &lt;/FONT&gt;&lt;U id=ut.q434&gt;caso de uso extendido&lt;/U&gt;&lt;FONT id=bup9118 size=2&gt; que especifica como y cuando el comportamiento definido en el caso de uso de extensión puede ser insertado en el comportamiento definido en el caso de uso extendido &lt;A id=haqv title="Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML, 2 nov. 2007. Pp. 589." href="#[12]"&gt;[12]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q436 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q437&gt;&lt;FONT id=bup9119 size=2&gt;Esta relación se usa: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL id=er3.4&gt; &lt;LI id=er3.5&gt; &lt;DIV class=MsoNormal id=ut.q439 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN lang=ES id=ut.q444&gt;&lt;FONT id=bup9120 size=2&gt;Para establecer que un fragmento de la funcionalidad del caso de uso es opcional, o potencialmente opcional. A diferencia de lo que ocurre con la inclusión que es una relación que implica obligatoriedad en la ejecución, por decirlo de cierta manera. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=er3.6&gt; &lt;DIV class=MsoNormal id=ut.q446 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN lang=ES id=ut.q451&gt;&lt;FONT id=bup9121 size=2&gt;Para señalar una parte del comportamiento que es ejecutado sólo bajo ciertas circunstancias, a veces excepcionales, tales como el envío de un mensaje a un usuario cuando se produce un hecho determinado. Por ejemplo, cuando un cliente VIP solicita el aumento de un cupo de crédito y la cantidad solicitada sobrepasa la política de crédito que puede soportar al Analista de Crédito, entonces el proceso pasa a una instancia mayor, como un Gerente de Oficina o algo así. Decimos entonces que ha ocurrido una &lt;/FONT&gt;&lt;B id=ut.q452&gt;interrupción&lt;/B&gt;&lt;FONT id=bup9122 size=2&gt; en el caso de uso. A este dilema nos enfrentamos continuamente y la primera intención de un Ingeniero de Requisitos inexperto es crear un único caso de uso con dos actores. Ahora ya sabemos que realmente son dos parejas actor-caso de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=er3.7&gt; &lt;DIV class=MsoNormal id=ut.q454 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN lang=ES id=ut.q459&gt;&lt;FONT id=bup9123 size=2&gt;Para mostrar que puede haber un conjunto de segmentos de comportamiento de los cuales uno o varios de estos pueden ser insertados en un punto de extensión en un caso de uso base o extendido. Estas secciones insertadas (y el orden en el cual son insertadas) dependerán de la interacción con los actores durante la ejecución del caso de uso base. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=ut.q461 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q462&gt;&lt;FONT id=bup9124 size=2&gt;La extensión es condicional, lo que significa que su ejecución depende de lo que ha pasado mientras se ejecuta el caso de uso base. Éste no controla las condiciones para la ejecución de la extensión –las condiciones son descritas dentro la relación de extensión. El caso de uso de extensión puede acceder y modificar los atributos del caso de uso base. Éste, sin embargo, no puede ver las extensiones y no puede acceder a sus atributos. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q464 style="MARGIN: 6pt 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q465&gt;&lt;FONT id=bup9125 size=2&gt;Una diferencia fundamental con la inclusión es que, en la extensión, el caso de uso base está completo por sí mismo, es decir, que debería entenderse y tener significado completo sin ninguna referencia a sus extensiones. Sin embargo, el caso de uso base no es independiente de las extensiones, puesto que no puede ser ejecutado sin la posibilidad de seguir las extensiones&lt;/FONT&gt;&lt;/SPAN&gt; &lt;SPAN id=ut.q468&gt;&lt;FONT id=bup9126 size=2&gt;&lt;A id=dxra title="IBM. The Rational Unified Process version V7.1." href="#[2]"&gt;[2]&lt;/A&gt;. También pasa que el caso de uso de extensión puede acceder y modificar los atributos del caso de uso base, pero éste no puede ver las extensiones y no puede acceder a sus atributos. Y más, el caso de uso base se modifica implícitamente por las extensiones. En otras palabras, el caso de uso extendido (base) es ciego a sus extensiones específicas, pero no al contrario.&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/P&gt; &lt;P class=MsoNormal id=ut.q471 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q472&gt;&lt;FONT id=bup9128 size=2&gt;Un poco truculento, pero así es. La figura 6 es una muestra típica de extensión de casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q474 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q475&gt;&lt;FONT id=bup9129 size=2&gt;Otra gran diferencia entre la inclusión y la extensión es que el caso de uso de extensión puede ser ejecutado por un actor distinto al caso de uso base, como observamos en el diagrama. Observamos también la condición que activa la extensión en cada caso: en una de ellas se trata de un crédito de mayor cuantía, donde la mayor cuantía es un atributo que puede y debería ser configurable; mientras que en el segundo caso se trata de un cliente del sector gubernamental o bien podría ser algún otro tipo de cliente con tratamiento especial. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=mmu60 style="MARGIN: 6pt 0cm 0pt" align=center&gt; &lt;/P&gt;&lt;SPAN lang=ES id=ut.q480&gt;&lt;FONT id=bup9130 size=2&gt; &lt;DIV id=m6l8 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=c_nk0 src="http://docs.google.com/File?id=dd635kds_19kkrfxbdp_b"&gt;&lt;/DIV&gt; &lt;P class=MsoNormal id=mmu60 style="MARGIN: 6pt 0cm 0pt" align=center&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P class=MsoNormal id=mmu60 style="MARGIN: 6pt 0cm 0pt" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=MsoNormal id=mmu60 style="MARGIN: 6pt 0cm 0pt" align=center&gt;&lt;SPAN id=ut.q483&gt;&lt;FONT id=bup9131 size=1&gt;Figura 6: Diagrama parcial del caso de uso Aprobar Solicitud de Crédito &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q485 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q486&gt;&lt;FONT id=bup9132 size=2&gt;Y más de la cuestión semántica, las extensiones de un caso de uso son suplementarias, lo que quiere decir, que el caso de uso extendido está completo, es un todo. En el ejemplo de la figura 6, Aprobar Solicitud de Crédito es un caso de uso terminado por sí mismo y bien podría ser implementado en una iteración distinta (previa) y hasta en un proyecto diferente a la iteración o proyecto donde se implementan los otros casos de uso. Esta es otra de las razones por las que se usa la extensión. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q488 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q489&gt;&lt;FONT id=bup9133 size=2&gt;Y estos son algunos aspectos de los casos de uso extendidos y de extensión que debemos tener en cuenta a la hora de modelar sistemas de información: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;UL id=kq8u0&gt; &lt;LI id=kq8u1&gt; &lt;DIV class=MsoNormal id=ut.q491 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q496&gt;&lt;FONT id=bup9134 size=2&gt;Un caso de uso extendido y sus casos de uso de extensión sí entregan un resultado de valor observable para el actor que los ejecuta, ya sea a través de ellos mismos o transfiriéndolo de la extensión al extendido y de allí al actor. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=kq8u2&gt; &lt;DIV class=MsoNormal id=ut.q498 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q503&gt;&lt;FONT id=bup9135 size=2&gt;Un caso de uso de extensión no es una especialización del caso de uso extendido, es decir, la extensión no es una relación de herencia o de generalización, dependiendo desde el ángulo del cual miremos. Hago énfasis en este aspecto porque tengo la ligera impresión de que, no sólo los analistas noveles, sino también los diseñadores y los programadores estamos entrenamos para ver la extensión como una especialización, cuando en realidad no es así. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=kq8u3&gt; &lt;DIV class=MsoNormal id=ut.q505 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q506&gt;&lt;FONT id=bup9136 size=2&gt;Quizás es por eso que la OMG tomó la decisión de cambiar la definición formal de la extensión para que sea una relación de dependencia. Aunque quiero aprovechar este punto para decir también que esta situación se desprende de la estructura formal de UML, la así llamada Especificación de Infraestructura de UML &lt;A id=l::4 title="Object Management Group, “OMG Unified Modeling Language (OMG UML), Infrastructure, V2.1.2”, http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML, 4 nov. 2007." href="#[13]"&gt;[13]&lt;/A&gt;, algo que nos ha complicado la vida de muchas formas, sin embargo, esta definición formal muchas veces es irrelevante en la vida real, quiero decir, no es práctica en la mayoría de los modelos que construimos. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt; &lt;LI id=kq8u4&gt; &lt;DIV class=MsoNormal id=ut.q508 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;       &lt;SPAN id=ut.q513&gt;&lt;FONT id=bup9137 size=2&gt;Un caso de uso se puede usar para documentar nuevas versiones del caso de uso original. Este es un gran beneficio de la extensión, porque deja intacto el caso de uso original que posiblemente ya está implementado y hasta en producción y permite que el analista de requisitos se concentre con los usuarios en las nuevas características del caso de uso extendido. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=ut.q515 style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q516&gt;&lt;FONT id=bup9138 size=2&gt;Aquí nos enfrentamos a la disyuntiva de extender o no extender un caso de uso. Me refiero a que si el cambio es pequeño, posiblemente sea más útil y práctico especificar una secuencia alterna en el caso de uso base; si la modificación es substancial, a juicio del analista, éste tomará la sabia decisión de crear un nuevo caso de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q518 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q519&gt;Ahora bien, un caso de uso extendido luce más o menos así: &lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q521 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q522 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q523&gt;&lt;SPAN id=ut.q524&gt;&lt;FONT id=bup9139 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q525&gt;&lt;FONT id=bup9140 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q526&gt;Aprobar Solicitud de Crédito&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q528 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q529&gt;&lt;SPAN id=ut.q530&gt;&lt;FONT id=bup9142 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q531&gt;&lt;FONT id=bup9143 size=1&gt;: Analista de Crédito &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q533 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q534&gt;&lt;SPAN id=ut.q535&gt;&lt;FONT id=bup9144 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q536&gt;&lt;FONT id=bup9145 size=1&gt;: este caso de uso permite aprobar una solicitud de crédito realizada por un cliente… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q538 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q539&gt;&lt;SPAN id=ut.q540&gt;&lt;FONT id=bup9146 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q541&gt;&lt;FONT id=bup9147 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q543 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q544&gt;&lt;SPAN id=ut.q545&gt;1.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q547&gt;&lt;FONT id=bup9148 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q548&gt;Actor&lt;/B&gt;&lt;FONT id=bup9149 size=1&gt; decide aprobar una solicitud de crédito &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q550 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q551&gt;&lt;SPAN id=ut.q552&gt;2.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q554&gt;&lt;FONT id=bup9150 size=1&gt;El sistema solicita el radicado y la fecha de de la solicitud &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q556 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q557&gt;&lt;SPAN id=ut.q558&gt;3.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q560&gt;&lt;FONT id=bup9151 size=1&gt;El actor ingresa el radicado y la fecha de de la solicitud &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q562 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q563&gt;&lt;SPAN id=ut.q564&gt;4.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q566&gt;&lt;FONT id=bup9152 size=1&gt;El sistema valida que el radicado exista para la fecha establecida y muestra los datos de la solicitud: nombre o razón social del cliente, número de identificación y tipo de la misma, dirección, ciudad, …, sector del cliente, cantidad solicitada, … &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q568 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q569&gt;&lt;SPAN id=ut.q570&gt;5.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q572&gt;&lt;FONT id=bup9153 size=1&gt;El sistema pide seleccionar el tipo de desembolso (Cheque, Consignación, Efectivo) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q574 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q575&gt;&lt;SPAN id=ut.q576&gt;6.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q578&gt;&lt;FONT id=bup9154 size=1&gt;El actor selecciona el tipo de desembolso &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q580 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q581&gt;&lt;SPAN id=ut.q582&gt;7.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q584&gt;&lt;FONT id=bup9155 size=1&gt;El sistema solicita el número de aprobación de la solicitud &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q586 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q587&gt;&lt;SPAN id=ut.q588&gt;8.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q590&gt;&lt;FONT id=bup9156 size=1&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;DIV id=ut.q592 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q593 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q594&gt;&lt;FONT id=bup9157 size=2&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q596 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q597&gt;&lt;FONT id=bup9158 size=1&gt;25. El caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q599 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q600&gt;&lt;SPAN id=ut.q601&gt;&lt;FONT id=bup9159 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q602&gt;&lt;FONT id=bup9160 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q604 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q605&gt;&lt;SPAN id=ut.q606&gt;&lt;FONT id=bup9161 size=1&gt;Puntos de Extensión &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q608 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q609&gt;&lt;FONT id=bup9162 size=1&gt;5A. La cantidad solicitada es de Mayor Cuantía &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q611 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q612&gt;&lt;FONT id=bup9163 size=1&gt;7A. El cliente es del sector Gobierno  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q614 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q615&gt;&lt;SPAN id=ut.q616&gt;&lt;FONT id=bup9164 size=1&gt;Requisitos Especiales: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q617&gt;&lt;FONT id=bup9165 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=ut.q619 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q620&gt;Lo único distinto son los puntos de extensión. Observen que la secuencia básica del caso de uso, ni ninguna otra secuencia, hace alusión a uno o más casos de uso de extensión. Es lo que había dicho: el caso de uso base no conoce los atributos ni las características del caso de uso de extensión. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q622 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q623&gt;Por su parte un caso de uso de extensión, se diferencia de un caso de uso normal en que debe tener especificado el evento que lo activa (llamado comúnmente &lt;I id=ut.q624&gt;trigger&lt;/I&gt;). Por ejemplo, en la figura 7, Asignar Revisión de Arquitectura es considerada una actividad especial por el sistema de Administración de Proyectos: &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=mmu61 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;SPAN id=ut.q629&gt; &lt;DIV id=e04j style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=f_ay0 src="http://docs.google.com/File?id=dd635kds_20f24qkwgw_b"&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=mmu61 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=PrrafoNormal id=mmu61 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt;&lt;SPAN id=ut.q632&gt;&lt;FONT id=bup9166 size=1&gt;Figura 7: Diagrama parcial de casos de usos de un Sistema de Administración de Proyectos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q634 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q635&gt;Este caso de uso, que extiende a Asignar Actividad, podría lucir más o menos así: &lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q637 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q638 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q639&gt;&lt;SPAN id=ut.q640&gt;&lt;FONT id=bup9167 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q641&gt;&lt;FONT id=bup9168 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q642&gt;Asignar Revisión de Arquitectura&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q644 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q645&gt;&lt;SPAN id=ut.q646&gt;&lt;FONT id=bup9170 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q647&gt;&lt;FONT id=bup9171 size=1&gt;: Gerente de Oficina de Proyectos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q649 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q650&gt;&lt;SPAN id=ut.q651&gt;&lt;FONT id=bup9172 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q652&gt;&lt;FONT id=bup9173 size=1&gt;: este caso de uso permite al PMO asignar la revisión de una arquitectura de software… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q654 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q655&gt;&lt;SPAN id=ut.q656&gt;&lt;FONT id=bup9174 size=1&gt;Evento de Activación&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q657&gt;&lt;FONT id=bup9175 size=1&gt;: la actividad es una actividad especial: Revisión de Arquitectura &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q659 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q660&gt;&lt;SPAN id=ut.q661&gt;&lt;FONT id=bup9176 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q662&gt;&lt;FONT id=bup9177 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q664 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q665&gt;&lt;SPAN id=ut.q666&gt;1.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q668&gt;&lt;FONT id=bup9178 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q669&gt;Actor&lt;/B&gt;&lt;FONT id=bup9179 size=1&gt; decide asignar una revisión de arquitectura &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q671 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q672&gt;&lt;SPAN id=ut.q673&gt;2.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q675&gt;&lt;FONT id=bup9180 size=1&gt;El sistema pide seleccionar el revisor técnico &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q677 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q678&gt;&lt;SPAN id=ut.q679&gt;3.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q681&gt;&lt;FONT id=bup9181 size=1&gt;El actor selecciona el revisor técnico &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q683 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q684&gt;&lt;SPAN id=ut.q685&gt;4.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q687&gt;&lt;FONT id=bup9182 size=1&gt;El sistema verifica que el revisor técnico tenga el perfil requerido para la actividad &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q689 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q690&gt;&lt;SPAN id=ut.q691&gt;5.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q693&gt;&lt;FONT id=bup9183 size=1&gt;El actor … &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q695 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q696&gt;&lt;SPAN id=ut.q697&gt;6.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q699&gt;&lt;FONT id=bup9184 size=1&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;DIV id=ut.q701 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q702 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q703&gt;&lt;FONT id=bup9185 size=2&gt;… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q705 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q706&gt;&lt;FONT id=bup9186 size=1&gt;12. El caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q708 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q709&gt;&lt;SPAN id=ut.q710&gt;&lt;FONT id=bup9187 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q711&gt;&lt;FONT id=bup9188 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q713 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q714&gt;&lt;SPAN id=ut.q715&gt;&lt;FONT id=bup9189 size=1&gt;Requisitos Especiales: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q716&gt;&lt;FONT id=bup9190 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=ut.q718 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q719&gt;La figura 7 también dilucida sobre otro aspecto de las relaciones entre casos de uso: un caso de uso base puede estar asociado con uno o más casos de uso incluidos y con uno o más casos de uso extendidos. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q721 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q722&gt;Otro aspecto importante de las relaciones de extensión es que el diagrama es bastante explicativo. En la figura 8, por ejemplo, está claro que un vuelo cualquiera puede ser reservado por un pasajero cualquiera, pero que si el pasajero está registrado como frecuente, la reserva tiene algunas características especiales (estas particularidades no se pueden observar en un diagrama de casos de uso como este).  &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q724 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q725&gt;El diagrama 8 también muestra otro aspecto de las relaciones de extensión y es que un caso de uso de extensión puede ser a su vez extendido por uno o más casos de uso de extensión. Y este hecho profundiza más en el proceso del negocio que resuelve este modelo: si el vuelo es internacional, y el pasajero frecuente además está registrado como pasajero VIP, tiene la opción de establecer o seleccionar el menú que consumirá durante el vuelo. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=mmu62 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;SPAN id=ut.q730&gt; &lt;DIV id=cw63 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=elaj0 src="http://docs.google.com/File?id=dd635kds_21dfv78dh9_b"&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=mmu62 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=PrrafoNormal id=mmu62 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt;&lt;SPAN id=ut.q733&gt;&lt;FONT id=bup9191 size=1&gt;Figura 8: Diagrama parcial de casos de usos de un Sistema de Reservación de Vuelos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q735 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q736&gt;Del diagrama no se pude extraer información sobre las distintas clases de vuelo que proporciona la aerolínea. Sin embargo, este es precisamente el objeto del siguiente apartado: la clasificación de casos de uso, en el sentido de generalización, llamada también herencia de casos de uso. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q738 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q739&gt;&lt;SPAN lang=ES id=ut.q740&gt;&lt;FONT id=bup9192 size=2&gt;Generalización Entre Casos de Uso &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q742 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q743&gt;&lt;FONT id=bup9193 size=2&gt;Una generalización es una relación taxonómica entre un clasificador más general y un clasificador más específico. Cada instancia del clasificador específico también es una instancia indirecta del clasificador general. Así, el clasificador específico hereda las características del clasificador más general &lt;A id=dkyc title="Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML, 2 nov. 2007. Pp. 71." href="#[14]"&gt;[14]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q745 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q746&gt;&lt;FONT id=bup9194 size=2&gt;Esta relación es ampliamente usada en el modelado orientado a objetos, sin embargo, no solo se da entre clases y objetos, sino entre cualquier elemento de UML que actúe como clasificador, como los casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q748 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN lang=ES id=ut.q749&gt;&lt;FONT id=bup9195 size=2&gt;La generalización de casos de uso se usa cuando dos o más casos de uso comparten comportamiento, estructura y propósito. Es decir, si dos casos de uso ejecutan un conjunto amplio de actividades similares y sólo algunas diferentes, es posible tomar todas las tareas comunes y especificarlas en un nuevo caso de uso que generaliza a los dos anteriores y en estos dos sólo se especifican las tareas disímiles. Esa es la primera premisa para usar la relación de generalización entre casos de uso, como en la figura 9, donde es posible que Reservar Vuelo Doméstico y Reservar Vuelo Internacional sólo difieran en que para este último caso el actor pueda seleccionar la ruta y especificar algunas condiciones especiales de vuelo. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q751 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;SPAN lang=ES id=ut.q754&gt; &lt;DIV id=i26d style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=aaku0 src="http://docs.google.com/File?id=dd635kds_22hq662mt3_b"&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=ut.q751 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=PrrafoNormal id=ut.q751 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align=center&gt;&lt;SPAN id=ut.q757&gt;&lt;FONT id=bup9196 size=1&gt;Figura 9: Diagrama parcial de casos de usos de un Sistema de Reservación de Vuelos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q759 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q760&gt;El caso de uso Reservar Vuelo Doméstico puede especificarse de la siguiente manera: &lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q762 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q763 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q764&gt;&lt;SPAN id=ut.q765&gt;&lt;FONT id=bup9197 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q766&gt;&lt;FONT id=bup9198 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q767&gt;Reservar Vuelo Doméstico&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q769 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q770&gt;&lt;SPAN id=ut.q771&gt;&lt;FONT id=bup9200 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q772&gt;&lt;FONT id=bup9201 size=1&gt;: Pasajero &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q774 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q775&gt;&lt;SPAN id=ut.q776&gt;&lt;FONT id=bup9202 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q777&gt;&lt;FONT id=bup9203 size=1&gt;: este caso de uso permite a un pasajero reservar un vuelo entre dos ciudades nacionales… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q779 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q780&gt;&lt;SPAN id=ut.q781&gt;&lt;FONT id=bup9204 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q782&gt;&lt;FONT id=bup9205 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q784 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q785&gt;&lt;SPAN id=ut.q786&gt;1.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q788&gt;&lt;FONT id=bup9206 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q789&gt;Actor&lt;/B&gt;&lt;FONT id=bup9207 size=1&gt; decide reservar un vuelo doméstico &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q791 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q792&gt;&lt;SPAN id=ut.q793&gt;2.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q795&gt;&lt;FONT id=bup9208 size=1&gt;El sistema pide seleccionar las ciudades origen y destino del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q797 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q798&gt;&lt;SPAN id=ut.q799&gt;3.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q801&gt;&lt;FONT id=bup9209 size=1&gt;El actor selecciona las ciudades origen y destino del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q803 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q804&gt;&lt;SPAN id=ut.q805&gt;4.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q807&gt;&lt;FONT id=bup9210 size=1&gt;El sistema solicita las fechas de ida y de regreso del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q809 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q810&gt;&lt;SPAN id=ut.q811&gt;5.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q813&gt;&lt;FONT id=bup9211 size=1&gt;El sistema valida la existencia de vuelos con las condiciones establecidas y pide seleccionar la tarifa &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q815 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q816&gt;&lt;SPAN id=ut.q817&gt;6.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q819&gt;&lt;FONT id=bup9212 size=1&gt;El actor selecciona la tarifa &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q821 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q822&gt;&lt;SPAN id=ut.q823&gt;7.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q825&gt;&lt;FONT id=bup9213 size=1&gt;El sistema genera y muestra un código de reserva y el caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;DIV id=ut.q827 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q828 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q829&gt;&lt;SPAN id=ut.q830&gt;&lt;FONT id=bup9214 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q831&gt;&lt;FONT id=bup9215 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=ut.q833 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q834&gt;Entre tanto, el caso de uso Reservar Vuelo Internacional puede ir así: &lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q836 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt; &lt;P class=MsoNormal id=ut.q837 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q838&gt;&lt;SPAN id=ut.q839&gt;&lt;FONT id=bup9216 size=1&gt;Caso de Uso&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q840&gt;&lt;FONT id=bup9217 size=1&gt;: &lt;/FONT&gt;&lt;U id=ut.q841&gt;Reservar Vuelo Internacional&lt;/U&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q843 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q844&gt;&lt;SPAN id=ut.q845&gt;&lt;FONT id=bup9219 size=1&gt;Actor&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q846&gt;&lt;FONT id=bup9220 size=1&gt;: Pasajero &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q848 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q849&gt;&lt;SPAN id=ut.q850&gt;&lt;FONT id=bup9221 size=1&gt;Descripción&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q851&gt;&lt;FONT id=bup9222 size=1&gt;: este caso de uso permite a un pasajero reservar un vuelo cuya ciudad destino es de otro país… &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q853 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q854&gt;&lt;SPAN id=ut.q855&gt;&lt;FONT id=bup9223 size=1&gt;Secuencia Básica&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q856&gt;&lt;FONT id=bup9224 size=1&gt;:  &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q858 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q859&gt;&lt;SPAN id=ut.q860&gt;1.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q862&gt;&lt;FONT id=bup9225 size=1&gt;El caso de uso inicia cuando el &lt;/FONT&gt;&lt;B id=ut.q863&gt;Actor&lt;/B&gt;&lt;FONT id=bup9226 size=1&gt; decide reservar un vuelo internacional &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q865 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q866&gt;&lt;SPAN id=ut.q867&gt;2.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q869&gt;&lt;FONT id=bup9227 size=1&gt;El sistema pide seleccionar las ciudades origen y destino del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q871 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q872&gt;&lt;SPAN id=ut.q873&gt;3.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q875&gt;&lt;FONT id=bup9228 size=1&gt;El actor selecciona las ciudades origen y destino del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q877 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q878&gt;&lt;SPAN id=ut.q879&gt;4.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q881&gt;&lt;FONT id=bup9229 size=1&gt;El sistema solicita las fechas de ida y de regreso del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q883 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q884&gt;&lt;SPAN id=ut.q885&gt;&lt;SPAN id=ut.q886&gt;5.    &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B id=ut.q888&gt;&lt;SPAN id=ut.q889&gt;&lt;FONT id=bup9230 size=1&gt;El sistema valida la existencia de vuelos con las condiciones establecidas, muestra las rutas disponibles (escalas intermedias) y pide seleccionar la ruta y tarifa de preferencia &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q891 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q892&gt;&lt;SPAN id=ut.q893&gt;&lt;SPAN id=ut.q894&gt;6.    &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B id=ut.q896&gt;&lt;SPAN id=ut.q897&gt;&lt;FONT id=bup9231 size=1&gt;El actor selecciona la ruta y la tarifa de su preferencia &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q899 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q900&gt;&lt;SPAN id=ut.q901&gt;&lt;SPAN id=ut.q902&gt;7.    &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B id=ut.q904&gt;&lt;SPAN id=ut.q905&gt;&lt;FONT id=bup9232 size=1&gt;El sistema pide seleccionar las condiciones especiales del vuelo &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q907 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 3pt 0cm 3pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q908&gt;&lt;SPAN id=ut.q909&gt;8.     &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q911&gt;&lt;FONT id=bup9233 size=1&gt;El sistema genera y muestra un código de reserva y el caso de uso termina &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;DIV id=ut.q913 style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q914 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q915&gt;&lt;SPAN id=ut.q916&gt;&lt;FONT id=bup9234 size=1&gt;Poscondiciones: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q917&gt;&lt;FONT id=bup9235 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q919 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;B id=ut.q920&gt;&lt;SPAN id=ut.q921&gt;&lt;FONT id=bup9236 size=1&gt;Requisitos Especiales: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN id=ut.q922&gt;&lt;FONT id=bup9237 size=1&gt;N/A &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=ut.q924 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q925&gt;La diferencia entre uno y otro se nota en los pasos 5, 6 y 7. En este caso, el caso de uso padre, Reservar Vuelo puede contener exactamente la misma funcionalidad que Reservar Vuelo Doméstico y dejar sólo los pasos distintos en Reservar Vuelo Internacional. De esta manera se simplifica la especificación y el modelado del sistema. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q927 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q928&gt;También puede ocurrir que sea necesario agrupar dos o más casos de uso cuya funcionalidad, estructura y objetivo sean compartidos en un caso de uso puramente abstracto, también para efectos de simplificación del modelo. Como en la figura 10. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=mmu63 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;SPAN lang=ES id=ut.q933&gt; &lt;DIV id=k_pk style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: center"&gt;&lt;IMG id=of590 src="http://docs.google.com/File?id=dd635kds_23gnnqt9zc_b"&gt;&lt;/DIV&gt; &lt;P class=PrrafoNormal id=mmu63 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt; &lt;/P&gt;&lt;/SPAN&gt; &lt;P class=PrrafoNormal id=mmu63 style="MARGIN: 6pt 0cm 0pt; LINE-HEIGHT: normal" align=center&gt;&lt;SPAN id=ut.q936&gt;&lt;FONT id=bup9238 size=1&gt;Figura 10: Diagrama parcial de casos de usos de un Sistema de Administración de Proyectos &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q938 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN id=ut.q939&gt;Aquí, el caso de uso abstracto no contiene ninguna especificación funcional y se usa como “comodín”, quizás para relacionar los casos de uso hijos con uno o más casos de uso incluidos o de extensión. También para hacer el análisis y diseño de todos ellos al mismo tiempo (hacer una única realización de casos de uso, por ejemplo). &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q941 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q942&gt;Aunque no está especificado, los casos de uso hijos pueden ser ejecutados por actores diferentes. También, si el caso de uso padre es abstracto, podría no tener actor relacionado. En esta última instancia, los hijos deberían tener asociado el actor que los ejecuta, necesariamente. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q944 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q945&gt;Mi recomendación final es que usemos la generalización de casos de uso como detallo en esta última alternativa. Para la primera forma, siempre podemos usar inclusión y hasta extensión. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q947 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;B id=ut.q948&gt;&lt;SPAN id=ut.q949&gt;Conclusiones &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q951 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q952&gt;Un modelo es una abstracción de la realidad, una representación simplificada de algunos fenómenos del mundo real. En materia de sistemas de software, esos fenómenos se refieren a requisitos del software y la representación de los mismos se hace mediante actores, casos de uso y las relaciones entre aquellos y estos y entre cada uno de ellos. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q954 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q955&gt;La asociación, la generalización, la inclusión y la extensión son los cuatro tipos de relaciones entre estos elementos de los sistemas de información. Algunas de ellas se quedan en un plano estrictamente teórico o conceptual, en el sentido de que no tienen aplicación práctica, al menos, no una de valor para el modelador. Me refiero a la generalización que en lo que a casos de uso se refiere no tiene el sentido de provecho que tiene, por ejemplo, en un diagrama de clases o uno de objetos. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q957 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q958&gt;La asociación, por su parte, es la relación natural entre actores y casos de uso, su significado es directo y simple: este actor ejecuta o inicia este caso de uso. También, este actor entrega o recibe información de (interactúa con) este caso de uso. Más allá, la inclusión y la extensión constituyen un par de relaciones que despiertan emociones encontradas en la comunidad de analistas, ya sea porque tendemos a confundir su uso o porque nuestros paradigmas mentales (específicamente los de la orientación a objetos) no nos permiten verlas y usarlas con claridad expedita. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q960 style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=ES id=ut.q961&gt;Estos son los temas que he tratado de dilucidar en este artículo. Son aspectos en los que todos debemos mejorar en aras de incrementar la calidad de los productos que desarrollamos. &lt;/SPAN&gt;&lt;/P&gt; &lt;P class=PrrafoNormal id=ut.q963 style="MARGIN: 6pt 0cm 6pt 36pt; TEXT-INDENT: -36pt; LINE-HEIGHT: normal"&gt;&lt;B id=ut.q964&gt;&lt;SPAN id=ut.q965&gt;¿Quiere Saber Más? &lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q967 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q968&gt;&lt;FONT id=bup9239 size=2&gt;Para conocer más sobre especificación de casos de uso, podemos consultar &lt;A id=jglx title="Alistair Cockburn, “Writing Effective Use Cases”, Addison-Wesley, 21 feb. 2000." href="#[15]"&gt;[15]&lt;/A&gt; que sigue siendo, sino el mejor, uno de los muy buenos libros sobre el espinoso asunto de escribir casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q970 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q971&gt;&lt;FONT id=bup9240 size=2&gt;Para conocer más de modelado de casos de uso, relaciones de inclusión, extensión y generalización, podemos consultar &lt;A id=d1:z title="Mike O’Docherty, Object-Oriented Analysis &amp;amp; design, Understanding System Development With UML.” John Wiley &amp;amp; Sons. 2005." href="#[16]"&gt;[16]&lt;/A&gt;, &lt;A id=s:84 title="Steve Adolph, Paul Bramble, Alistair Cockburn, Andy Pols. Patterns for Effective Use Cases. Addison Wesley. August 23, 2002." href="#[17]"&gt;[17]&lt;/A&gt; y &lt;A id=a1kr title="Kim Hamilton, Russell Miles. Learning UML 2.0. O'Reilly. April 2006." href="#[18]"&gt;[18]&lt;/A&gt; cuyos autores concentran sus esfuerzos en explicar los distintos patrones que podemos encontrar al momento de modelar requisitos de software con casos de uso. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q973 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q974&gt;&lt;FONT id=bup9241 size=2&gt;Como siempre, está el que considero el mejor libro sobre UML, patrones, análisis y diseño orientado a objetos y el proceso de desarrollo de software, todo en uno. Se trata del libro de Larman &lt;A id=fn-4 title="Graig Larman. applying-uml-and-patterns-an-introduction-to-object-oriented-analysis-and-design-and-the-unified-process-2nd-edition. 13 jul. 2001." href="#[19]"&gt;[19]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q976 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q977&gt;&lt;FONT id=bup9242 size=2&gt;También está el libro origen de todo, el de los &lt;/FONT&gt;&lt;I id=ut.q978&gt;three amigos&lt;/I&gt;&lt;FONT id=bup9243 size=2&gt; &lt;A id=c71r title="Grady Booch, James Rumbaugh, Ivar Jacobson. The Unified Modeling Language User Guide. 2nd-edition. May 29, 2005." href="#[20]"&gt;[20]&lt;/A&gt;. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q980 style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q981&gt;&lt;FONT id=bup9244 size=2&gt;Fin. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt; &lt;P class=MsoNormal id=ut.q983 style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B id=ut.q984&gt;&lt;SPAN id=ut.q985&gt;&lt;FONT id=bup9245 size=2&gt;&lt;A id=taei name=Referencias&gt;&lt;/A&gt;Referencias &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=References id=ut.q987 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt"&gt;&lt;FONT id=a2yo0 size=1&gt;&lt;SPAN lang=EN-US id=ut.q988&gt;&lt;SPAN id=ut.q989&gt;&lt;A id=q69f name=[1]&gt;&lt;/A&gt;[1]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q991&gt;IBM. The Rational Unified Process V7.1. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q993 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt"&gt;&lt;FONT id=a2yo1 size=1&gt;&lt;SPAN lang=EN-US id=ut.q994&gt;&lt;SPAN id=ut.q995&gt;&lt;A id=fngd name=[2]&gt;&lt;/A&gt;[2]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q997&gt;IBM. The Rational Unified Process version V7.1. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q999 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo2 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1000&gt;&lt;SPAN id=ut.q1001&gt;&lt;A id=jm9- name=[3]&gt;&lt;/A&gt;[3]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1003&gt;Luis Antonio Salazar Caraballo, “Casos de Uso: Origen, Especificación y Evolución”, Gazafatonario IT&lt;/SPAN&gt;&lt;SPAN class=MsoHyperlink id=ut.q1004&gt;&lt;SPAN id=ut.q1005&gt;&lt;FONT id=ut.q1006 color=#003399&gt;, &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1007&gt;&lt;A id=ut.q1008 href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html"&gt;&lt;SPAN lang=ES id=ut.q1009&gt;&lt;FONT id=ut.q1010 color=#800080&gt;http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1011&gt;, 17 nov. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1013 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo3 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1014&gt;&lt;SPAN id=ut.q1015&gt;&lt;A id=yvre name=[4]&gt;&lt;/A&gt;[4]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1017&gt;Luis Antonio Salazar Caraballo, “Casos de Uso: De Vuelta a lo Fundamental”, Gazafatonario IT,  &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1019&gt;&lt;A id=ut.q1020 href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html"&gt;&lt;SPAN lang=ES id=ut.q1021&gt;&lt;FONT id=ut.q1022 color=#800080&gt;http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1023&gt;, 09 nov. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1025 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo4 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1026&gt;&lt;SPAN id=ut.q1027&gt;&lt;A id=eh1z name=[5]&gt;&lt;/A&gt;[5]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1029&gt;Luis Antonio Salazar Caraballo, “Casos de Uso: Del Todo y de Sus Partes”, Gazafatonario IT,  &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1031&gt;&lt;A id=ut.q1032 href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html"&gt;&lt;SPAN lang=ES id=ut.q1033&gt;&lt;FONT id=ut.q1034 color=#800080&gt;http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1035&gt;, 23 nov. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1037 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo5 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1038&gt;&lt;SPAN id=ut.q1039&gt;&lt;A id=b98f name=[6]&gt;&lt;/A&gt;[6]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1041&gt;Luis Antonio Salazar Caraballo, “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación?”, Gazafatonario IT,   &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1044&gt;&lt;A id=ut.q1045 href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html"&gt;&lt;SPAN lang=ES id=ut.q1046&gt;&lt;FONT id=ut.q1047 color=#800080&gt;http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1048&gt;, 07 dic. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1050 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo6 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1051&gt;&lt;SPAN id=ut.q1052&gt;&lt;A id=psf2 name=[7]&gt;&lt;/A&gt;[7]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1054&gt;Luis Antonio Salazar Caraballo, “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 2 de 2”, Gazafatonario IT,  &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1057&gt;&lt;A id=ut.q1058 href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html"&gt;&lt;SPAN lang=ES id=ut.q1059&gt;&lt;FONT id=ut.q1060 color=#800080&gt;http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1061&gt;, 22 dic. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1063 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo7 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1064&gt;&lt;SPAN id=ut.q1065&gt;&lt;A id=og-z name=[8]&gt;&lt;/A&gt;[8]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1067&gt;Luis Antonio Salazar Caraballo, “Prolegómenos Sobre el Lenguaje de Modelado Unificado”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1068&gt;&lt;A id=ut.q1069 href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html"&gt; &lt;SPAN lang=ES id=ut.q1073 style="COLOR: windowtext"&gt;Gazafatonario IT,  &lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1075&gt;&lt;FONT id=ut.q1076 color=#800080&gt;http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=ES id=ut.q1077&gt;, 01 jun. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1079 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo8 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1080&gt;&lt;SPAN id=ut.q1081&gt;&lt;A id=p60w name=[9]&gt;&lt;/A&gt;[9]   &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1083&gt;Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1084&gt;&lt;A id=ut.q1085 href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;&lt;SPAN id=ut.q1086&gt;&lt;FONT id=ut.q1087 color=#003399&gt;http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1088&gt;, 2 nov. 2007. &lt;/SPAN&gt;&lt;SPAN lang=EN-GB id=ut.q1089&gt;Pp. 587. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1091 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo9 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1092&gt;&lt;SPAN id=ut.q1093&gt;&lt;A id=sg_5 name=[10]&gt;&lt;/A&gt;[10] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q1095&gt;Luis Antonio Salazar Caraballo, “Realización de Casos de Uso: de los Objetos y sus Interacciones”, Gazafatonario IT,  &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1097&gt;&lt;A id=ut.q1098 href="http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html"&gt;&lt;SPAN lang=ES-CO id=ut.q1099&gt;&lt;FONT id=ut.q1100 color=#800080&gt;http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN class=MsoHyperlink id=ut.q1101&gt;&lt;SPAN id=ut.q1102&gt;&lt;FONT id=ut.q1103 color=#003399&gt;,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN id=ut.q1104&gt; 23 oct. 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1106 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo10 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1107&gt;&lt;SPAN id=ut.q1108&gt;&lt;A id=nkmh name=[11]&gt;&lt;/A&gt;[11] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1110&gt;Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1111&gt;&lt;A id=ut.q1112 href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;&lt;SPAN id=ut.q1113&gt;&lt;FONT id=ut.q1114 color=#003399&gt;http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1115&gt;, 2 nov. 2007. &lt;/SPAN&gt;&lt;SPAN lang=EN-GB id=ut.q1116&gt;Pp. 592. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1118 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo11 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1119&gt;&lt;SPAN id=ut.q1120&gt;&lt;A id=agxs name=[12]&gt;&lt;/A&gt;[12] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1122&gt;Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1123&gt;&lt;A id=ut.q1124 href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;&lt;SPAN id=ut.q1125&gt;&lt;FONT id=ut.q1126 color=#003399&gt;http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1127&gt;, 2 nov. 2007. &lt;/SPAN&gt;&lt;SPAN lang=EN-GB id=ut.q1128&gt;Pp. 589. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1130 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo12 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1131&gt;&lt;SPAN id=ut.q1132&gt;&lt;A id=ive9 name=[13]&gt;&lt;/A&gt;[13] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1134&gt;Object Management Group, “OMG Unified Modeling Language (OMG UML), Infrastructure, V2.1.2”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1135&gt;&lt;A id=ut.q1136 href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;&lt;SPAN id=ut.q1137&gt;&lt;FONT id=ut.q1138 color=#003399&gt;http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1139&gt;, 4 nov. 2007.&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1142 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo13 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1143&gt;&lt;SPAN id=ut.q1144&gt;&lt;A id=js-p name=[14]&gt;&lt;/A&gt;[14] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1146&gt;Object Management Group, “OMG Unified Modeling Language (OMG UML), Superstructure, V2.1.2”, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1147&gt;&lt;A id=ut.q1148 href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;&lt;SPAN id=ut.q1149&gt;&lt;FONT id=ut.q1150 color=#003399&gt;http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1151&gt;, 2 nov. 2007. &lt;/SPAN&gt;&lt;SPAN lang=EN-GB id=ut.q1152&gt;Pp. 71. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1154 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo14 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1155&gt;&lt;SPAN id=ut.q1156&gt;&lt;A id=zmcn name=[15]&gt;&lt;/A&gt;[15] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1158&gt;Alistair Cockburn, “Writing Effective Use Cases”, Addison-Wesley, 21 feb. 2000.&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1161 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo15 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1162&gt;&lt;SPAN id=ut.q1163&gt;&lt;A id=x18r name=[16]&gt;&lt;/A&gt;[16] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1165&gt;Mike O’Docherty, Object-Oriented Analysis &amp;amp; design, Understanding System Development With UML.” John Wiley &amp;amp; Sons. 2005. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1167 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo16 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1168&gt;&lt;SPAN id=ut.q1169&gt;&lt;A id=r4wk name=[17]&gt;&lt;/A&gt;[17] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1171&gt;&lt;A id=ut.q1172 href="http://www.informit.com/safari/author_bio.asp@ISBN=0201721848" target=_new&gt;&lt;SPAN id=ut.q1173 style="COLOR: windowtext"&gt;Steve Adolph&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1174&gt;, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1175&gt;&lt;A id=ut.q1176 href="http://www.informit.com/safari/author_bio.asp@ISBN=0201721848" target=_new&gt;&lt;SPAN id=ut.q1177 style="COLOR: windowtext"&gt;Paul Bramble&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1178&gt;, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1179&gt;&lt;A id=ut.q1180 href="http://www.informit.com/safari/author_bio.asp@ISBN=0201721848" target=_new&gt;&lt;SPAN id=ut.q1181 style="COLOR: windowtext"&gt;Alistair Cockburn&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1182&gt;, &lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1183&gt;&lt;A id=ut.q1184 href="http://www.informit.com/safari/author_bio.asp@ISBN=0201721848" target=_new&gt;&lt;SPAN id=ut.q1185 style="COLOR: windowtext"&gt;Andy Pols&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1186&gt;. Patterns for Effective Use Cases. Addison Wesley. August 23, 2002. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1188 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo17 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1189&gt;&lt;SPAN id=ut.q1190&gt;&lt;A id=ijk: name=[18]&gt;&lt;/A&gt;[18] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1192&gt;Kim Hamilton, Russell Miles. Learning UML 2.0. O'Reilly. April 2006. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1194 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;FONT id=a2yo18 size=1&gt;&lt;SPAN lang=EN-US id=ut.q1195&gt;&lt;SPAN id=ut.q1196&gt;&lt;A id=x60g name=[19]&gt;&lt;/A&gt;[19] &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1198&gt;Graig Larman. applying-uml-and-patterns-an-introduction-to-object-oriented-analysis-and-design-and-the-unified-process-2nd-edition. 13 jul. 2001. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P class=References id=ut.q1200 style="MARGIN: 6pt 0cm 6pt 19.85pt; TEXT-INDENT: -19.85pt; TEXT-ALIGN: left" align=left&gt;&lt;SPAN lang=EN-US id=ut.q1201&gt;&lt;SPAN id=ut.q1202&gt;&lt;FONT id=a2yo19 size=1&gt;&lt;A id=ex64 name=[20]&gt;&lt;/A&gt;[20] &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US id=ut.q1204&gt;&lt;FONT id=a2yo20 size=1&gt;Grady Booch, James Rumbaugh, Ivar Jacobson. The Unified Modeling Language User Guide. 2nd-edition. May 29, 2005.&lt;/FONT&gt; &lt;/SPAN&gt;&lt;/P&gt; &lt;DIV id=ut.q1206 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid"&gt; &lt;P class=MsoNormal id=ut.q1207 style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;SPAN id=ut.q1208&gt;&lt;FONT id=bup9246 size=2&gt;Lectura Fundamental Siguiente: &lt;/FONT&gt;&lt;B id=ut.q1209&gt;Casos de Abuso &lt;/B&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;SPAN id=ut.q1211&gt;&lt;BR id=ut.q1212 style="PAGE-BREAK-BEFORE: always" clear=all&gt;&lt;/SPAN&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-2342274366293422357?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pmsdalZON1Z6yUGjy9Y4QMJNh1s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pmsdalZON1Z6yUGjy9Y4QMJNh1s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pmsdalZON1Z6yUGjy9Y4QMJNh1s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pmsdalZON1Z6yUGjy9Y4QMJNh1s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/MZgE6tIufJk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/2342274366293422357/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=2342274366293422357" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/2342274366293422357?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/2342274366293422357?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/MZgE6tIufJk/lectura-fundamental-12-lectura_8835.html" title="" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2008/05/lectura-fundamental-12-lectura_8835.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQHSX07fip7ImA9WxdSE0k.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-2390846643732334117</id><published>2007-11-23T00:02:00.003-05:00</published><updated>2008-05-21T00:05:38.306-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-21T00:05:38.306-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Composición" /><category scheme="http://www.blogger.com/atom/ns#" term="Clase" /><category scheme="http://www.blogger.com/atom/ns#" term="Objetos" /><category scheme="http://www.blogger.com/atom/ns#" term="Biología Celular" /><category scheme="http://www.blogger.com/atom/ns#" term="Aspectos" /><category scheme="http://www.blogger.com/atom/ns#" term="Polimorfismo" /><category scheme="http://www.blogger.com/atom/ns#" term="Herencia" /><title>Lectura Fundamental 11</title><content type="html">&lt;p class="Default" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-size:85%;"&gt;Lectura Fundamental Anterior: &lt;/span&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html"&gt;&lt;b&gt;“Realización de Casos de Uso: De los Objetos y sus Interacciones”&lt;/b&gt; &lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Lectura # 11&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Orientación a Objetos: Un Enfoque Teórico Moderno (Actualizado)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 25.5pt 0pt 22.7pt; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:78%;"&gt;“Cuando la Generación-Net alcance la mayoría de edad, el mundo será más pequeño e infinitamente más complejo. No tenemos idea de cuáles problemas afrontarán estos jóvenes, cuáles serán sus sueños, ni qué nuevas y audaces soluciones idearán. Pero una cosa es segura: la democracia tal como la conocemos se acabará. Quizás debamos adoptar una actitud seria desde ahora y replantear nuestra noción sobre el gobierno y el significado de la libertad.”&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 14.15pt 0pt 180pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:78%;"&gt;Don Tapscott&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:78%;"&gt; (Creciendo en un Entorno Digital)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Introducción&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En Ingeniería del Software, la &lt;/span&gt;&lt;b&gt;clase&lt;/b&gt;&lt;span style="font-size:85%;"&gt; es la unidad esencial que forma a todo sistema de software. Es además la estructura sistémica y funcional fundamental del software en actividad, capaz de ejecutarse independientemente como entidad mono-funcional (como un servicio), o bien, hacer parte de una formación mayor, como instrumento multi-funcional. La clase presenta dos modelos básicos: abstracto y concreto. Su organización general comprende: identificador de la clase o nombre, atributos o propiedades y operaciones o métodos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La teoría de la orientación a objetos o simplemente orientada-a-objetos es la base sobre la que se sustenta gran parte de la Ingeniería del Software. Todos los elementos utilitarios que forman los productos de software moderno están formados por clases.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El concepto de clase como unidad orgánica (en el sentido de &lt;/span&gt;&lt;b&gt;estructural&lt;/b&gt;&lt;span style="font-size:85%;"&gt;) y funcional de los sistemas de software surgió hará apenas unos cuarenta años, cuando el término “orientado-a-objetos” fue usado por primera vez.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 1cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;“En Utah, en algún momento después de Noviembre del 66 cuando, influenciado por Sketchpad, Simula, el diseño para la ARPAnet&lt;/span&gt;&lt;b&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;, el Burroughs B5000 y mi conocimiento en Biología y Matemáticas, empecé a pensar en una arquitectura para la programación. Y fue probablemente en 1967 cuando alguien me preguntó qué estaba haciendo y le respondí: “Es programación orientada-a-objetos”.”&lt;/span&gt;&lt;b&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Posteriormente, en los años setenta, el Grupo de Investigación en Aprendizaje (&lt;/span&gt;&lt;i&gt;Learning Research Group&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) de XPARC (&lt;/span&gt;&lt;i&gt;Xerox Palo Alto Research Center&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) con el Dr. Alan Kay a la cabeza, desarrolló SmallTalk, el primer lenguaje de programación orientado-a-objetos nativo que fue liberado a principios de los ochenta a toda la comunidad de desarrolladores. Algunas leyes&lt;/span&gt;&lt;b&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt; o primitivas subyacen el desarrollo del lenguaje:&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;1. &lt;span style="font-size:85%;"&gt;Cualquier cosa es un objeto&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;2. &lt;span style="font-size:85%;"&gt;Los objetos se comunican enviando y recibiendo &lt;/span&gt;&lt;i&gt;mensajes&lt;/i&gt;&lt;span style="font-size:85%;"&gt; (en términos de objetos)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;3. &lt;span style="font-size:85%;"&gt;Los objetos tienen su &lt;/span&gt;&lt;i&gt;propia memoria &lt;/i&gt;&lt;span style="font-size:85%;"&gt;(en términos de objetos)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;4. &lt;span style="font-size:85%;"&gt;Cada objeto es una instancia de una &lt;/span&gt;&lt;i&gt;clase&lt;/i&gt;&lt;span style="font-size:85%;"&gt; (la cual puede ser un objeto)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;5. &lt;span style="font-size:85%;"&gt;La clase contiene el &lt;/span&gt;&lt;i&gt;comportamiento&lt;/i&gt;&lt;span style="font-size:85%;"&gt; compartido para sus instancias (en la forma de objetos en un programa)&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;6. &lt;i&gt;&lt;span style="font-size:85%;"&gt;Para evaluar un programa, el control se pasa al primer objeto y el resto es tratado como su mensaje&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Hoy, todos los lenguajes de programación implementan esas leyes y como programadores deberíamos tenerlas siempre presente a la hora de escribir un programa.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Más tarde se crearon lenguajes como C++, Eiffel y Oberon. En los noventas, Java y hace apenas unos años, ya en este milenio, C# (C &lt;/span&gt;&lt;i&gt;Sharp&lt;/i&gt;&lt;span style="font-size:85%;"&gt;), alrededor de los cuales se han establecido los postulados de la teoría orientada-a-objetos, que afirma, entre otras cosas, que la clase (el objeto) es una unidad morfológica (desde el punto de vista sistémico) de todo sistema de software.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Biología Informática&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La &lt;/span&gt;&lt;b&gt;célula&lt;/b&gt;&lt;span style="font-size:85%;"&gt; es la unidad fundamental de los organismos vivos, generalmente de tamaño microscópico, capaz de reproducción independiente y formada por un citoplasma y un núcleo rodeados por una membrana.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;1 &lt;p&gt;&lt;/p&gt;&lt;/sup&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Una célula está compuesta por un Núcleo, el organillo más ilustre en la mayoría de células animales y vegetales. En el núcleo, las moléculas de ADN y proteínas están estructuradas en cromosomas normalmente dispuestos en pares iguales. El ADN del interior de cada cromosoma es una molécula indivisible larga y arrollada que contiene cadenas lineales de genes. Éstos encierran a su vez instrucciones codificadas para la construcción de las moléculas de proteínas y ARN necesarias para producir una copia funcional de la célula, ¡el mismísimo milagro de la vida!&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Los otros componentes de la célula son el Citoplasma y el Citosol. El primero comprende todo el volumen de la célula, salvo el núcleo. Engloba numerosas estructuras especializadas y orgánulos. El otro es la solución acuosa concentrada en la que están suspendidos los orgánulos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Les estoy contando todo esto precisamente porque una analogía muy útil para una célula (biológica) es un objeto (informático). Los objetos tienen instrucciones codificadas dentro de ellos llamadas métodos (o procedimientos o funciones). Los programas en los objetos son análogos a la programación genética en el DNA dentro de las células. El DNA se subdivide en unidades funcionales llamadas genes; estas unidades corresponden a los atributos (o variables) en el objeto. Un objeto también tiene un metabolismo: consume memoria de acceso aleatorio (léase RAM) o hasta de sólo lectura (ROM).&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Tanto los programas en las células como los métodos en los objetos pueden ser 1) copiados y 2) ejecutados. Algunas de las proteínas creadas cuando un programa genético se ejecuta corresponden a los resultados o salidas de los procedimientos y funciones del objeto. Pero otras proteínas son más análogas a los componentes de la clase o a las interfaces de la misma con el entorno. Por supuesto, los objetos no crean sus propios métodos o sus interfaces, lo hacen los programadores; la analogía no es perfecta.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;De hecho, nada en los objetos es análogo a la reproducción de una célula. Una célula puede crear una copia completa de sí misma; esta célula contiene las instrucciones completas (programas) y la maquinaria celular (hardware) necesarias para reproducirse por sí misma. Un objeto no puede crear una copia de sí mismo&lt;/span&gt;&lt;span style="color:blue;"&gt;… ¡hasta ahora!&lt;/span&gt;&lt;span style="font-size:85%;"&gt; Le hacen falta los mecanismos necesarios (pero puede ser capaz de reproducir su conjunto de instrucciones respondiendo a un mensaje de su entorno, por ejemplo.) Un objeto que pueda reproducirse por sí mismo sería mejor descrito como un robot-software auto-reproductor. Tal cosa es concebible, pero no existe hoy.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Una criatura multiceldada es como un diagrama de clases. Se requiere de una arquitectura orientada a objetos, paralela, a gran escala para operar criaturas multiceldadas tales como mamíferos con billones o trillones de celdas, todas trabajando en armonía, cada una haciendo su tarea. El sistema nervioso y el sistema hormonal son dos importantes sistemas en red usados por los mamíferos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Cambiar la forma en que un objeto trabaja requiere de novedosos y más avanzados algoritmos. Algunas veces un programador puede simplemente codificar un conjunto nuevo de órdenes de Inteligencia Artificial: el objeto reconoce el nuevo método o procedimiento, acepta su nuevo código y lo usa. Otras veces, reprogramar un objeto es más traumático. Las nuevas funciones pueden tener “errores”; puede no ser compatible desde el punto de vista de la lógica con el comportamiento existente en el objeto; se pueden llegar a necesitar parches adicionales; se puede introducir un virus de computador; o puede causar que el todo el objeto, y con ello el sistema del que hace parte, colapse sin explicación.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La evolución biológica sucede cuando las células son reprogramadas. De una forma u otra, los nuevos programas genéticos son instalados y activados. ¿Cómo se consigue instalar y activar nuevo software genético? ¿Y de dónde viene? Estas son algunas de las preguntas que la Cósmica Ancestral&lt;/span&gt;&lt;b&gt;&lt;sup&gt;22&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt; intenta responder.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Mientras encontramos estas y otras respuestas fundamentales, volvamos a nuestro hemisferio.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Conceptos Fundamentales&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Una &lt;/span&gt;&lt;i&gt;suite&lt;/i&gt;&lt;span style="font-size:85%;"&gt; de conceptos, unos básicos o fundamentales, otros más avanzados, desde el punto de vista de la semántica, son necesarios para entender la teoría de la orientación a objetos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 22&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Clase&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una descripción de un conjunto de objetos que comparten los mismos atributos, operaciones, métodos, relaciones y semántica. Una clase puede usar un conjunto de interfaces para especificar colecciones de operaciones que ella proporciona a su entorno.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span style="font-size:85%;"&gt;Una clase puede ser vista como una plantilla o molde, un prototipo funcional, a partir del cual se pueden crear o instanciar un conjunto de elementos con las mismas características y comportamientos llamados Objetos. La clase es la unidad básica, el equivalente de la célula en el ser humano, que forma todo sistema de software. Una clase representa un grupo de datos y la manipulación de estos datos. &lt;/span&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Como piezas de datos, las clases pueden ser manipuladas. Sin embargo, como procedimientos, las clases también describen la manipulación. La información se manipula enviando un mensaje a la clase que representa la información. &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Tiene sentido: puesto que un sistema de software es una herramienta para manipular información, las clases son esos diminutos corpúsculos, invisibles, que forman un sistema de software. Para los propósitos de este artículo, estoy usando una definición muy amplia de información. &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Definición 23&lt;/b&gt;: &lt;b&gt;Información&lt;/b&gt;. &lt;span lang="ES"&gt;Una representación o descripción de algo.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;6 &lt;/sup&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Hay muchos tipos de información que describen diferentes cosas en formas diversas. Uno de los grandes sucesos en la computación fue el hecho de que la información podía, entre otras cosas, describir la manipulación de la información. Este tipo de información es llamada software. &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;En el mundo real, los seres humanos no concebimos una estructura (una cosa) sin pensar al mismo tiempo en el comportamiento que presenta o puede presentar esa estructura (esa cosa). Esta fue la premisa que alimentó la investigación del LRG en XPARC. Y debería ser el punto de partida en el desarrollo de cualquier producto de software. Es el orden natural de las cosas: las clases, al menos las primeras que aparecen de la mano de los usuarios, provienen precisamente del mundo real que, en términos del ciclo de vida o del proceso de desarrollo, constituyen lo que se llama el modelo de dominio. Alrededor de estas clases aparecen otras, durante el análisis y el diseño del software, que apoyan la operación “automatizada” de las primeras. &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Ejemplos de clases típicas son: Proveedor, Cliente, Factura, Producto, Contrato, Pago (vemos una clase puede representar Personas, Cosas o Artefactos y Operaciones transaccionales). Cada una de estas clases tiene un conjunto de atributos o valores o características y un conjunto de métodos o procedimientos. En el caso de Contrato, por ejemplo, los atributos clave serían Número del Contrato, Fecha de Contrato, Valor del Contrato, Objeto del Contrato, Contratante, Contratista, Modalidad del Contrato, entre otros; algunas operaciones que se pueden hacer con el contrato son: Abrir Contrato, Cancelar Contrato, Suspender Contrato, Cerrar Contrato, Extender Contrato, Pagar Contrato. Son operaciones inherentes al negocio, del dominio dentro del cual una empresa rige su negocio. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 24: Modelo de Dominio.&lt;/span&gt;&lt;/b&gt; &lt;span style="font-size:85%;"&gt;Un modelo de dominio es un modelo del dominio dentro del cual una Empresa conduce su negocio. El Modelo de Dominio para una Empresa debería ser el mismo que para cualquier otra Empresa que conduzca el negocio en el mismo dominio. Cuando bajamos a niveles más detallados, personas distintas tienen diferentes ideas acerca de lo que constituye un Modelo de Dominio.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Un modelo de dominio puede verse como un modelo conceptual de un sistema el cual describe las distintas entidades involucradas en ese sistema y sus relaciones. El modelo de dominio es creado para documentar los conceptos clave y el vocabulario del sistema. El modelo muestra las relaciones entre las entidades principales dentro del sistema y usualmente identifica sus métodos y atributos importantes. Esto significa que el modelo proporciona una vista estructural del sistema el cual es complementado por las vistas dinámicas en el modelo de casos de uso. Un beneficio importante de un modelo de dominio es describir y restringir el alcance del sistema.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El modelo de dominio puede ser usado a bajo nivel en el ciclo de vida del desarrollo del software desde que la semántica del mismo puede ser usada en el código fuente. Las entidades se convierten en clases, mientras que los métodos y atributos pueden llevarse directamente al código fuente; los mismos nombres típicamente aparecen en el código fuente.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El modelo de dominio es uno de los artefactos centrales en las más importantes metodologías o procesos de desarrollo de software existentes. En UML, un diagrama de clases se usa para representar el modelo de dominio.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Todas las clases mencionadas en el apartado anterior son clases típicas que conforman un modelo de dominio. Para entender mejor, citemos algunas clases que no harían parte de ningún modelo de dominio: la Clase de Acceso a Datos, El Manejador de Errores (llamado también Controlador de Errores), la clase Usuario (en un contexto de seguridad), El Controlador de Transacciones, la clase de Auditoria, entre muchas otras que hacen parte del diseño de la solución y están fuera del dominio del problema.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 25&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Objeto&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una entidad con un límite bien definido e identidad que &lt;/span&gt;&lt;b&gt;encapsula&lt;/b&gt;&lt;span style="font-size:85%;"&gt; un &lt;/span&gt;&lt;i&gt;estado&lt;/i&gt;&lt;span style="font-size:85%;"&gt; y un &lt;/span&gt;&lt;i&gt;comportamiento&lt;/i&gt;&lt;span style="font-size:85%;"&gt;. El estado se representa por los &lt;/span&gt;&lt;i&gt;atributos&lt;/i&gt;&lt;span style="font-size:85%;"&gt; y las &lt;/span&gt;&lt;i&gt;relaciones&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, mientras que el comportamiento es representado por las &lt;/span&gt;&lt;i&gt;operaciones&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;i&gt;métodos&lt;/i&gt;&lt;span style="font-size:85%;"&gt; y las &lt;/span&gt;&lt;i&gt;máquinas de estado&lt;/i&gt;&lt;span style="font-size:85%;"&gt;. Un objeto es una instancia de una clase.&lt;/span&gt;&lt;b&gt;&lt;sup&gt; 7&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Un objeto es una entidad individual que satisface la descripción de una clase o tipo.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 26&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Instancia&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Es una manifestación concreta de una abstracción a la cual un conjunto de operaciones puede aplicarse y que tiene un estado que almacena los efectos de las operaciones.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt; Instancia y Objeto son básicamente sinónimos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Una clase puede derivar muchas instancias. Dicho de otra manera, en un momento determinado se pueden crear una o más instancias u objetos de una clase. El número de instancias creadas a partir de una clase está limitado únicamente por la cantidad de memoria disponible en el computador donde se esté ejecutando la aplicación que usa la clase.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Cada objeto se diferencia del otro por los valores de sus atributos. Este conjunto de valores forman el &lt;/span&gt;&lt;b&gt;Estado del Objeto&lt;/b&gt;&lt;span style="font-size:85%;"&gt;, único para cada instancia. Y observen que estoy usando los términos Instancia y Objeto indistintamente para referirme a lo mismo.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 27&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Operación&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Un servicio que puede ser requerido desde un objeto para afectar su comportamiento. Una operación tiene una firma, que puede restringir los parámetros reales que son posibles. En otras palabras, una operación es una abstracción de algo que se puede hacer a un objeto que es compartido por todas las instancias de la clase.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Una clase puede tener cualquier número de operaciones o ninguna operación. Por ejemplo, en una librería de ventanas como la que se encuentra en el paquete &lt;/span&gt;&lt;i&gt;awt&lt;/i&gt;&lt;span style="font-size:85%;"&gt; de Java, todos los objetos de la clase &lt;/span&gt;&lt;i&gt;Rectangle&lt;/i&gt;&lt;span style="font-size:85%;"&gt; pueden moverse, cambiar de tamaño o ser consultados sobre el valor de sus propiedades.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Muchas veces (pero no siempre), invocar una operación sobre un objeto cambia los datos o estado del objeto. En la Orientación a Objetos, una operación recibe comúnmente el nombre de método y en los lenguajes de programación se pueden clasificar en procedimientos y funciones.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En general las clases incluyen algunas operaciones comunes para Crear (&lt;/span&gt;&lt;i&gt;create &lt;/i&gt;&lt;span style="font-size:85%;"&gt;o&lt;/span&gt;&lt;i&gt; new&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) o Destruir (&lt;/span&gt;&lt;i&gt;Destroy&lt;/i&gt;&lt;span style="font-size:85%;"&gt; o &lt;/span&gt;&lt;i&gt;Release&lt;/i&gt;&lt;span style="font-size:85%;"&gt; o &lt;/span&gt;&lt;i&gt;Dispose&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) una instancia. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Además, las operaciones pueden ser públicas, es decir, visibles desde el exterior de la clase, o privadas, las que están disponibles solamente para los objetos de la clase. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Un término bastante relacionado con Operación es Mensaje.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 28&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Mensaje&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una especificación de una comunicación entre objetos que transmite información con la expectativa de iniciar una actividad; el recibo (la recepción) de una instancia de un mensaje es considerada normalmente una instancia de un evento.&lt;/span&gt;&lt;b&gt;&lt;sup&gt; 10&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Los mensajes se establecen vía el conjunto de operaciones públicas de una clase.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 29&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Protocolo&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. El conjunto de mensajes a los que un objeto puede responder.&lt;/span&gt;&lt;b&gt;&lt;sup&gt; 11&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Como programadores, lo primero que debemos preguntarnos es cuál será el protocolo de la clase a programar y cuál es el protocolo de la(s) clase(s) relacionadas. Son estos protocolos los que permiten poner en movimiento un proceso (automático), los que permiten el flujo de información y mantener en ejecución por tiempo indefinido un sistema de software.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 30&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Interfaz&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una colección de operaciones que son usadas para especificar un servicio de una clase o de un componente.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;12 &lt;p&gt;&lt;/p&gt;&lt;/sup&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La Interfaz es el mecanismo que usan los lenguajes de programación para implementar un Protocolo.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 31&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Atributo&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Un atributo definido por una clase representa una propiedad nombrada de la clase o sus objetos. Un atributo tiene un tipo que define el tipo de sus instancias.&lt;/span&gt;&lt;b&gt;&lt;sup&gt; 13&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El conjunto de atributos de una clase constituye su Estructura y los valores de esos atributos en un instante dado representan el &lt;/span&gt;&lt;b&gt;Estado &lt;/b&gt;&lt;span style="font-size:85%;"&gt;del objeto.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Normalmente los atributos o propiedades de una clase están ocultos al mundo exterior, es decir, al resto de clases o de entidades que forman un sistema. Solamente se puede acceder a los valores de tales propiedades a través de métodos de la clase dispuestos para tal fin. Algunos de estos métodos son especializados y únicamente son capaces de asignar o “recordar” (leer) el valor de una propiedad, otros lo hacen mediante operaciones o transacciones más o menos complejas. Hay atributos que sólo pueden ser vistos por las operaciones de la clase, otros pueden ser vistos además por las clases “hijas” en una jerarquía de clases (ver &lt;/span&gt;&lt;b&gt;Herencia&lt;/b&gt;&lt;span style="font-size:85%;"&gt;).&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Sin embargo, la mayoría de los lenguajes de programación implementan mecanismos para que desde el exterior de un objeto, o sea, desde otros objetos se pueda acceder directamente a los valores de las propiedades de una clase. Esto se hace para mejorar el desempeño de las aplicaciones en varios sentidos, sin embargo, deberíamos evitar el uso de estos mecanismos tanto como sea posible.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 32&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Relación&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Es una conexión semántica entre elementos de un modelo. Ejemplos de relaciones incluyen asociaciones y generalizaciones.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;14&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Las relaciones son los elementos encargados de darle vida a un modelo. Por sí solos, los demás componentes de un modelo como las clases no son capaces de hacer mucho (tal como muchos organismos unicelulares que actúan simplemente como parásitos) y es a través de relaciones como la Asociación, la Composición, la Agregación y la Generalización que se pone un modelo en ejecución.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Como regla general, todas las clases del dominio deberían estar relacionadas entre sí, sin embargo, el número de relaciones entre una clase y otras del modelo debería mantenerse al mínimo, lo que permitirá a su vez una baja dependencia entre el subsistema a los que pertenece una clase y los subsistemas a los que pertenecen las clases relacionadas. Esto se llama el Principio o Patrón de &lt;/span&gt;&lt;b&gt;Bajo Acoplamiento&lt;/b&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 33&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Asociación&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una asociación es una relación estructural que especifica que objetos de una cosa están conectados con objetos de otra. Dada una asociación que conecta dos clases, podemos relacionar objetos de una clase con objetos de la otra clase. Es legal tener ambos extremos de una asociación sobre la misma clase, de manera circular. Esto significa que, dado un objeto de la clase, podemos enlazar a otros objetos de la misma clase. Una asociación que conecta exactamente dos clases se llama una asociación binaria. Aunque no es común, podemos tener asociaciones que conectan más de dos clases; éstas son llamadas asociaciones n-arias. Usamos asociaciones cuando queremos mostrar relaciones estructurales.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;15&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En principio, durante las etapas de Análisis, todas las clases del dominio deberían estar “asociadas” entre sí. Más adelante, hacia el final del análisis y en el diseño, algunas asociaciones se pueden convertir en otro tipo de relaciones y las que permanecen como asociaciones se deben cualificar.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La cualificación de una relación como la asociación se logra mediante la cardinalización de ambos extremos de la relación, lo mismo que con el nombramiento, en ambos sentidos, de la misma. Por ejemplo, en un sistema típico tanto la entidad Cliente (de una Compañía) como la entidad Proveedor (de la misma Compañía) tienen alguna forma de relación (de asociación) con la entidad Producto. Pero a todas luces se evidencia la diferencia existente en la relación entre Proveedor y Producto que entre Cliente y Producto. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El Proveedor “vende” o “provee” de productos a la compañía, mientras que el Cliente “compra” o es “surtido” de productos por la compañía. En este contexto, “proveer”, “vender”, “comprar” y “surtir” son nombres representativos de asociaciones.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;A su vez, es probable que un Proveedor suministre uno o más productos a la compañía (y hasta puede suceder, por políticas de la compañía –regla del negocio-, que quizás haya un máximo número de productos que un proveedor pueda suministrar, por ejemplo, 5). También puede ocurrir que para ser considerado como tal, un Cliente de la compañía deba comprar o adquirir mínimo 2 productos y máximo 12. Estos rangos (uno o más productos, 1 a 5, 2 a 12) hacen parte de la cardinalidad de las asociaciones. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 34&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Generalización&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Es una relación entre un tipo general de una cosa (llamada la superclase o padre) y un tipo más específico de cosa (llamada la subclase o hija). Algunas veces, la generalización es llamada una relación “es-un-tipo-de”: una cosa (como la clase &lt;/span&gt;&lt;i&gt;Baywindow&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) es-un-tipo-de una cosa más general (por ejemplo, la clase Ventana). Un objeto de la clase hija puede ser usado para una variable o parámetro tipado por el padre, pero no a la inversa. En otras palabras, la generalización significa que la hija es sustituible para una declaración del padre. Una hija hereda las propiedades de sus padres, especialmente sus atributos y operaciones. Muchas veces pero no siempre la hija tiene atributos y operaciones en adición a los encontrados en sus padres. Una implementación de una operación en una hija anula una implementación de la misma operación del padre; esto se conoce como polimorfismo. Para ser la misma, dos operaciones deben tener la misma firma (mismo nombre y parámetros). Use generalizaciones cuando quiera mostrar las relaciones padre/hija.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;16&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La generalización es una relación taxonómica entre un elemento más general y un elemento más específico. El elemento más específico es completamente con el elemento más general y contiene información adicional. Una instancia del elemento más específico puede usarse donde el elemento más general es permitido.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 35&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Herencia&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Es el mecanismo que hace posible la generalización; un mecanismo para crear descripciones completas de clases a partir de segmentos de clases individuales.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;17&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En Orientación-a-Objetos, dada una clase, con unas características y un comportamiento bien definidos, se puede crear una jerarquía de clases, en donde cada clase de la jerarquía “hereda” los atributos y las operaciones de todos sus ancestros. El elemento hereditario además puede tener características y comportamiento propios o adicionales a los de los demás miembros de la estructura taxonómica a la que pertenece.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La herencia aparece cuando tipificamos o clasificamos elementos de un modelo, cuando decimos que este elemento “es-una-clase-de” o “es-un-tipo-de”. Por ejemplo un (Animal) Mamífero es una clase de Animal, un Automóvil es un tipo de Transporte Terrestre, un Vendedor es una clase de Persona.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 36&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Agregación&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Una asociación plana entre dos clases representa una relación estructural entre pares, lo que significa que ambas clases están conceptualmente al mismo nivel, ninguna es más importante que la otra. Algunas veces queremos modelar una relación “todo/parte” en la que una clase representa una cosa más grande (el “todo”), que consiste de cosas más pequeñas (las “partes”). Este tipo de relación se llama agregación, que representa una relación “tiene-un” que significa que un objeto del todo tiene objetos de la parte. La agregación es realmente una clase especial de asociación.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;18 &lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;Una de las grandes diferencias de la Agregación con la Asociación es que las instancias no pueden tener relaciones de agregación cíclicas, es decir, una parte no puede contener al todo.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La agregación se convierte en un concepto simple con alguna semántica moderadamente profunda. La agregación simple es enteramente conceptual y no hace nada más que distinguir un “todo” de una “parte”. La agregación simple no cambia el significado de la navegación a través de la asociación entre el todo y sus partes, ni enlace los ciclos de vida del todo y sus partes.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La multiplicidad de la parte agregada no puede ser mayor a 1, esto quiere decir que no es compartida.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 37&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Composición&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Hay una variación de la agregación simple, la composición, que adiciona cierta semántica importante. La composición es una forma de agregación con propiedad fuerte y ciclos de vida coincidentes como parte del todo. Partes con multiplicidad no fija pueden ser creadas después del compuesto mismo, pero una vez creadas viven o mueren con ella. Tales partes también pueden ser explícitamente removidas antes de la muerte del compuesto.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;19 &lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;A la Composición también se le conoce como Agregación Compuesta.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Esto significa que, en una agregación compuesta, un objeto puede ser una parte de sólo un compuesto a la vez. Por ejemplo, en un sistema de Ventanas, un &lt;/span&gt;&lt;i&gt;Marco&lt;/i&gt;&lt;span style="font-size:85%;"&gt; pertenece a exactamente una Ventana. Esto contrasta con una agregación simple en la que una parte puede ser compartida por varias partes. Por ejemplo, en el modelo de una casa, una Pared puede ser una parte de uno o más objetos &lt;/span&gt;&lt;i&gt;Cuarto&lt;/i&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Además, en una agregación compuesta el todo es responsable por la disposición de sus partes, lo que significa que el compuesto debe manejar la creación y destrucción de sus partes. Por ejemplo, cuando creamos un &lt;/span&gt;&lt;i&gt;Marco&lt;/i&gt;&lt;span style="font-size:85%;"&gt; en un sistema de ventanas, debemos adicionarlo a una Ventana. Similarmente, cuando destruimos una Ventana, el objeto Ventana debe a su vez destruir sus partes &lt;/span&gt;&lt;i&gt;Marco&lt;/i&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El control que mantiene el “todo” con la “parte” puede ser directo o transitivo, o sea, el “todo” puede tener la responsabilidad directa de crear o destruir la “parte” o puede aceptar una parte previamente creada y más tarde pasarla a algún otro “todo” que asuma la responsabilidad por esa “parte”.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Un objeto puede ser parte de solamente un compuesto a la vez. Si el compuesto es destruido, este debe destruir todas sus partes o pasar la responsabilidad de ellos a algún otro objeto. Un objeto compuesto puede ser diseñado con el conocimiento de que ningún otro objeto podrá destruir sus partes.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Un ejemplo típico de una composición es el del Automóvil: las puertas, la carrocería, las llantas y el motor, por sí solos pueden no tener ninguna utilidad (funcionalidad), pero compuestos, bien podríamos tener un (objeto) buen automóvil que nos presta una mayor utilidad (funcionalidad), seguramente mayor que la suma de sus partes.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 38&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Polimorfismo&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Generalmente, la habilidad aparece en muchas formas. En programación orientada-a-objetos, el polimorfismo se refiere a la habilidad de un lenguaje de programación de procesar objetos de manera diferente dependiendo de su tipo de dato o clase. Más específicamente, es la habilidad de redefinir métodos para clases derivadas.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;20 &lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;Por ejemplo, dada una clase base &lt;/span&gt;&lt;i&gt;Figura_Geometrica&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, el polimorfismo habilita al programador para definir métodos &lt;/span&gt;&lt;i&gt;CalcularArea&lt;/i&gt;&lt;span style="font-size:85%;"&gt; diferentes para cualquier número de clases derivadas, tales como círculos, rectángulos y triángulos. Sin importar de qué forma es un objeto, aplicarle el método &lt;/span&gt;&lt;i&gt;CalcularArea&lt;/i&gt;&lt;span style="font-size:85%;"&gt; retornará los resultados correctos. El polimorfismo es considerado un requisito de cualquier lenguaje de programación orientado-a-objetos (OOPL).&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En otras palabras, dada una jerarquía de objetos, cada objeto implementa su(s) comportamiento(s) de acuerdo a sus características. La operación para calcular el área de un triángulo (Base X Altura / 2) es diferente de la operación para calcular el área de un círculo (&lt;/span&gt;&lt;span style="font-family:Times New Roman;"&gt;π&lt;/span&gt;&lt;span style="font-size:85%;"&gt; X Radio&lt;/span&gt;&lt;b&gt;&lt;sup&gt;&lt;span style="font-size:100%;"&gt;2&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;) porque evidentemente tienen atributos distintos como bien sabemos.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 39&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;Abstracción&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Es un mecanismo y práctica para reducir y factorizar los detalles de tal manera que podamos enfocarnos en unos pocos conceptos al tiempo.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;21&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El concepto se da por analogía con la abstracción matemática. La técnica matemática de abstracción comienza con definiciones matemáticas; esto tiene el efecto afortunado de afinar algunos de los aspectos filosóficos molestos de abstracción. Por ejemplo, tanto en computación como en matemáticas, los números son conceptos en los lenguajes de programación, tal como se encuentran en las matemáticas. Los detalles de implementación dependen del hardware y del software, pero esto no es una restricción porque el concepto computacional de número todavía está basado en el concepto matemático.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;La abstracción puede aplicarse tanto al control del proceso como a los datos manipulados por el proceso. La abstracción de control es la abstracción de acciones mientras que la abstracción de datos aplica a las estructuras. Por ejemplo, la abstracción de control en programación orientada a objetos tiene que ver con el uso de métodos, interfaces y clases genéricas. La abstracción de datos permite el manejo de datos de maneras significativas. Por ejemplo, es la motivación básica detrás de los tipos de datos. Finalmente, la Programación orientada-a-objetos puede verse como un intento de abstraer tanto el dato como el código.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;De Dónde Surgen los Objetos&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Parece justo, al menos para mí, terminar esta disertación sobre orientación a objetos con un aspecto del que tengo algún conocimiento: la Gramática, en particular, y el lenguaje, en general. Por supuesto no hablo de C#, Java o C++, algunos de los lenguajes de programación más ampliamente usados hoy, estoy hablando del idioma Español.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Luego de tener un manifiesto con los requisitos del sistema (y por sistema también quiero decir un módulo, un subsistema, un proceso,&lt;/span&gt; &lt;span style="font-size:85%;"&gt;un modelo), expuestos en distintos artefactos como un documento de visión, un glosario, una descripción detallada de esos requisitos, un conjunto finito de casos de uso (hoy se llaman casos de uso, Jacobson 1994, ayer se llamaban escenarios, Rumbaugh 1991), entonces procedemos a realizar un análisis sintáctico, pero no de esos que hacen los compiladores, no. Estoy hablando de una exploración minuciosa de todas y cada una de las frases del manifiesto y hacer una tabla con los sustantivos, los verbos, los adjetivos, los adverbios. Si de pronto hemos olvidado lo que es un Predicado o lo que es un Adverbio de Lugar, entonces hay que volver a sacar el libro Español y Literatura de nuestra queridísima maestra Lucila González de Chávez y repasar algunos detalles sobre el tema.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Los sustantivos son clases o atributos potenciales (en este período mesozoico del proceso todavía no somos capaces de acertar en el primer intento sobre que elemento de nuestras fuentes documentarias es que elemento de nuestro modelo objetual). Entre tanto, los verbos son métodos potenciales (incluso, podrán llegar a ser procedimientos almacenados o &lt;/span&gt;&lt;i&gt;triggers&lt;/i&gt;&lt;span style="font-size:85%;"&gt;).&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;¿Y los adjetivos y los adverbios dónde se quedan? Bueno, dice mi Gazafatonario y doña Lucila González que un adjetivo califica al sustantivo (hay muchas clases de adjetivos), le da un valor, esa es la clave: si finalmente nuestro sustantivo es una propiedad, el adjetivo posiblemente sea su valor predeterminado, mientras que si es una clase, el calificativo será una instancia. Por su parte, el adverbio califica al verbo (¿recuerdan? Adverbios de modo, de lugar, de tiempo, demostrativos, relativos, interrogativos, de cantidad e intensidad), una teoría lingüística interesante y profunda que si la conocemos bien nos ayudará a encontrar cuál es el desempeño que se quiere para el método (adverbio de modo), dónde se ejecuta el método (adverbio de lugar) –quizás nos diga de qué clase es, en qué capa de la arquitectura va, si puede ser un &lt;/span&gt;&lt;i&gt;trigger&lt;/i&gt;&lt;span style="font-size:85%;"&gt; o no y cuándo se ejecuta (adverbio de tiempo), algunos criterios funcionales (adverbios demostrativos, relativos, interrogativos), cuál es la frecuencia de ejecución (adverbios de cantidad e intensidad), y hasta pueden llegar a ser argumentos del método en cuestión. &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;El tema tiene tanto de ancho como de profundidad y no quiero extender más esta lectura, así que los invito a que revisen la extensa literatura que existe sobre ello.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;El Siguiente Paso en la Evolución&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Fue por allá a mediados de los años 80 cuando escuché y leí por primera vez sobre la orientación a objetos. El término realmente me pareció interesante pero extraño. En contraste, algunos otros compañeros que todavía no habían tenido su primera vez con computadores encontraron la idea de los sistemas orientados a objeto como algo natural. No es que los programadores novatos puedan crear sistemas complejos en un ambiente orientado a objetos más fácilmente de lo que pueden los programadores experimentados. Ciertamente, crear sistemas complejos envuelve muchas técnicas más familiares al programador experto que al principiante, sin tener en cuenta si se usa o no un entorno orientado a objetos. Pero la idea básica acerca de cómo crear un sistema de software en un estilo orientado a objetos llega de una forma más natural a quienes no tienen una preconceptualización acerca de la naturaleza de sistemas de software. Entender los conceptos que he expuesto fue la clave que condujo mi carrera profesional durante mucho tiempo y que me permitió escribir algunos cientos de miles de líneas de código en diversos lenguajes de programación.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Muchos años después, con el advenimiento de la Internet, me di a la tarea de buscar y conocer en qué andaba el célebre equipo de XPARC que creó la técnica tan acertadamente. Los encontré en &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.parc.com/"&gt;&lt;span lang="ES-CO"&gt;&lt;span style="color:#003399;"&gt;www.parc.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; y el mundo de la programación no volvió a ser igual para mí.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Los amigos de PARC habían encontrado muchos problemas de programación para los que ni las técnicas de programación procedimental ni orientadas a objeto parecían suficientes para capturar claramente algunas de las decisiones importantes que un programa debía implementar. Ellos observaron que esos problemas forzaban la implementación de muchas decisiones de diseño en el código de una manera dispersa y heterogénea, dando como resultado un código fuente “enmarañado” que es difícil de desarrollar y mantener. Así es que presentaron a la comunidad un análisis del porqué ciertas decisiones de diseño eran difíciles de capturar apropiadamente en el código actual y llamaron a las propiedades a las que esas decisiones apuntaban &lt;/span&gt;&lt;i&gt;aspectos&lt;/i&gt;&lt;span style="font-size:85%;"&gt;. También mostraron que la razón de su captura compleja era que estas decisiones eran transversales a la funcionalidad básica de todo sistema. Con esto en mente, presentaron las bases para una nueva técnica de programación que llamaron &lt;/span&gt;&lt;b&gt;programación orientada a aspectos&lt;/b&gt;&lt;span style="font-size:85%;"&gt; o simplemente &lt;/span&gt;&lt;b&gt;aspectos&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Esta técnica hace posible escribir programas con precisión que involucren tales aspectos, incluyendo aislamiento apropiado (más allá de la encapsulación de objetos), composición y reusabilidad de código “aspectual”.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;En breve, los Aspectos son propiedades para las cuales la implementación no puede ser encapsulada en un procedimiento generalizado. Los Aspectos y los componentes transversales se cruzan entre sí en la implementación de un sistema. Esta técnica soporta una abstracción completa y la composición tanto de componentes como de aspectos. La diferencia clave entre AOP y la OOP (y por extensión con PPO) es que la AOP proporciona lenguajes de componentes y aspectos con diferentes mecanismos de abstracción y composición.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;23&lt;/sup&gt;&lt;/b&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Los Aspectos son a los Objetos lo que estos fueron a los Procedimientos. Hoy ya existen lenguajes orientados a aspectos como AspectJ (la primera implementación de un lenguaje AOP basado en Java), AspectC++, Aspicere2 y otros basados en C/C++; también existen LOOM.NET, AspectDNG, Compose, Aspect.NET, DotAspect y otros basados en C#/VB.NET y muchas otras docenas de estos lenguajes emergentes, incluyendo WEAVR de Motorola para UML 2.0, una herramienta de desarrollo de software Orientado a Aspectos de naturaleza industrial que soporta &lt;/span&gt;&lt;i&gt;weaving&lt;/i&gt;&lt;span style="font-size:85%;"&gt; de los modelos comportacionales de UML 2.0 como los diagramas de interacción y de actividad. Y es tiempo de un último aserto.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-family:verdana;"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Definición 40&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;: &lt;/span&gt;&lt;b&gt;&lt;i&gt;Weaving&lt;/i&gt;&lt;/b&gt; &lt;/span&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;es el proceso de aplicar Aspectos a los Objetos Destinatarios para crear los nuevos Objetos Resultantes en los especificados Puntos de Cruce. Este proceso puede ocurrir a lo largo del ciclo de vida del Objeto Destinatario: &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 35.7pt; TEXT-INDENT: -17.85pt"&gt;&lt;span lang="ES"   style="font-family:verdana;font-size:85%;"&gt;· &lt;/span&gt;&lt;span lang="ES"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Aspectos en Tiempo de Compilación, que necesita un compilador especial. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 35.7pt; TEXT-INDENT: -17.85pt"&gt;&lt;span lang="ES"   style="font-family:verdana;font-size:85%;"&gt;· &lt;/span&gt;&lt;span lang="ES"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Aspectos en Tiempo de Carga, los Aspectos se implementan cuando el Objeto Destinatario es cargado en la máquina virtual. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 35.7pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-size:85%;"&gt;&lt;tt&gt;&lt;span lang="ES"  style="font-family:verdana;"&gt;· &lt;/span&gt;&lt;/tt&gt;&lt;span lang="ES"&gt;&lt;span style="font-family:verdana;"&gt;Aspectos en Tiempo de Ejecución.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;tt&gt;&lt;span lang="ES"&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Está ocurriendo tal cual ha ocurrido durante millones de años en la naturaleza, las insuficiencias existentes, los entornos recién descubiertos, recién creados, sólo dan paso a los más fuertes y sólo los más arriesgados sobreviven, así es la biología celular. Así mismo pasa en la TI, las nuevas necesidades exigen nuevas soluciones y estas a su vez requieren de nuevas tecnologías y nuevas técnicas.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;En el futuro lejano, luego de la fusión de tres revoluciones científicas que todavía no ocurren, la teoría cuántica nos proveerá de transistores cuánticos microscópicos más pequeños que una neurona, la revolución informática nos facilitaría redes neuronales tan poderosas como las que hoy residen en el cerebro humano, y la revolución biomolecular nos permitiría la capacidad de reemplazar las redes neuronales de nuestro cerebro por tejidos sintetizados, garantizándonos así cierta condición de renovación, seríamos inmortales.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;Pero no nos apresuremos, un paso a la vez, “así se ha hecho durante millones de años”&lt;/span&gt;&lt;/span&gt; &lt;b&gt;&lt;sup&gt;&lt;span style="font-size:85%;"&gt;24&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span lang="ES"&gt;&lt;span style="font-size:85%;"&gt;, así que todo esto será motivo de otra de mis lecturas.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Conclusión&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span lang="ES"&gt;He abordado sucintamente los conceptos que subyacen la técnica de la programación orientada a objetos. Es lo que existió antes del lenguaje de programación, antes del Java y el C#, aún antes del BASIC y el C. Entender estos conceptos nos da una visión que permite reducir la complejidad de grandes sistemas sin poner complicaciones adicionales en la construcción de sistemas pequeños. Ciertamente, como lo pensaron los investigadores en XPARC durante 20 años de estudios, la técnica se acerca a la forma cómo pensamos los seres humanos; sin embargo, todavía el hardware disponible hoy, otros 30 años después, es incapaz de aceptar tales principios. Quizás en el futuro próximo, ayudados por lo que he dado en llamar Biología Informática, podamos tener máquinas casi tan hábiles como nosotros, máquinas que entretejan (como los Aspectos), millones de chips neuronales que se crucen &lt;i&gt;ad-infinitum&lt;/i&gt; y sean capaces de pensar y adaptarse a nuevos entornos. &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="PrrafoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal"&gt;&lt;span lang="ES"&gt;Mientras tanto, la programación orientada a objetos, y con ésta, el análisis y diseño orientados a objeto, la programación orientada a aspectos, la herencia y el polimorfismo, las asociaciones binarias y las abstracciones lógicas, serán las técnicas que reinen en el mundo de las tecnologías informáticas. &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;Cierre y fin de la emisión.&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;b&gt;&lt;span style="font-size:85%;"&gt;Referencias&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;1. &lt;/b&gt;Diccionario de la Real Academia de la Lengua Española Edición En Línea. &lt;span lang="EN-US"&gt;&lt;a href="http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&amp;amp;LEMA=célula"&gt;&lt;b&gt;&lt;span lang="ES-CO"&gt;&lt;span style="color:#003399;"&gt;http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&amp;amp;LEMA=célula&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt; TEXT-ALIGN: justify"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;2. ARPANet fue el nombre original de Internet. ARPA son las siglas en inglés de &lt;i&gt;Advanced Research Projects Agency&lt;/i&gt;, que inicialmente conectó cuatro grandes computadores en universidades en el suroeste de los Estados Unidos (UCLA, Stanford Research Institute, UCSB y la Universidad de Utah) por allá en 1.969. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;tt&gt;&lt;b&gt;&lt;span lang="EN-US"&gt;3. &lt;/span&gt;&lt;/b&gt;&lt;/tt&gt;&lt;span lang="EN-US"&gt;Dr. Alan Kay. &lt;i&gt;On The Meaning of “Object-Oriented Programming”&lt;/i&gt; &lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://www.purl.org/stefan_ram/pub/doc_kay_oop_en"&gt;&lt;b&gt;&lt;span style="color:#003399;"&gt;http://www.purl.org/stefan_ram/pub/doc_kay_oop_en&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;&lt;b&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;) &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span lang="EN-US"&gt;4. &lt;/span&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;Dr. Alan Kay. &lt;/span&gt;&lt;/tt&gt;&lt;span lang="EN-US"&gt;The Early History of Smalltalk. &lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html"&gt;&lt;b&gt;&lt;span style="color:#003399;"&gt;http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span lang="EN-US"&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;5. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process Glossary. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;6. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Luis Antonio Salazar Caraballo. Sistemas de Software Orientado a Objetos. 2000. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;7. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process Glossary. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;8. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;9. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process Glossary. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;10. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;11. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Luis Antonio Salazar Caraballo. Sistemas de Software Orientado a Objetos. 2000. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;12. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;13. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;14. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;15. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;16. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;17. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;18. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;19. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;20. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;IBM. The Rational Unified Process. UML. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;21. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;Wikipedia contributors, 'Abstraction (computer science)', Wikipedia, The Free Encyclopedia, 7 November 2007, 04:20 UTC, &amp;lt;&lt;/span&gt;&lt;/tt&gt;&lt;span lang="EN-US"&gt;&lt;a title="http://en.wikipedia.org/w/index.php?title=" href="http://en.wikipedia.org/w/index.php?title=Abstraction_%28computer_science%29&amp;amp;oldid=169781888" oldid="169781888"&gt;&lt;tt&gt;&lt;span style="color:blue;"&gt;http://en.wikipedia.org/w/index.php?title=Abstraction_%28computer_science%29&amp;amp;oldid=169781888&lt;/span&gt;&lt;/tt&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&amp;gt; [accessed 21 November 2007]. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;22. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;Wikipedia contributors, 'Cosmic ancestry', Wikipedia, The Free Encyclopedia, 26 April 2007, 23:28 UTC, &amp;lt;&lt;/span&gt;&lt;/tt&gt;&lt;span lang="EN-US"&gt;&lt;a title="http://en.wikipedia.org/w/index.php?title=" href="http://en.wikipedia.org/w/index.php?title=Cosmic_ancestry&amp;amp;oldid=126264933" oldid="126264933"&gt;&lt;span style="color:blue;"&gt;http://en.wikipedia.org/w/index.php?title=Cosmic_ancestry&amp;amp;oldid=126264933&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&amp;gt; [accessed 21 November 2007] &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span lang="EN-US"   style="font-family:verdana;font-size:85%;"&gt;23. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span lang="EN-US"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Kiczales, Lamping, Mendhekar, Maeda, Videira Lopes, Loingtier &amp;amp; Irwin. Aspect-Oriented Programming. 1997. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm 6pt 17.85pt; TEXT-INDENT: -17.85pt"&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;24. &lt;/span&gt;&lt;/tt&gt;&lt;tt&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Así le dice Ted a Ellie en Contacto, de Carl Sagan. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/tt&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Ted&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Este ha sido un primer paso. Con el tiempo, daréis otro. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/i&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Ellie&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Pero otros necesitan ver lo que he visto yo. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/i&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.85pt"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Ted&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Así se ha hecho durante millones de años. Poco a poco, Ellie. Poco a poco. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/i&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;(Le besa la frente. Ambos miran al cielo. Cientos de rayos, como cometas, se &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;aproximan a la nebulosa rojiza. Al chocar con ella, hay como una explosión &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;blanca. Volvemos a la realidad, con la cápsula cayendo bruscamente al agua…) &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm"&gt;&lt;tt&gt;&lt;p&gt;&lt;/p&gt;&lt;/tt&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid"&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2008/05/lectura-fundamental-12-lectura_8835.html"&gt;Lectura Fundamental Siguiente: &lt;/a&gt;&lt;/span&gt;&lt;b&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2008/05/lectura-fundamental-12-lectura_8835.html"&gt;Casos de Uso: de Extensiones y de Inclusiones&lt;/a&gt; &lt;p&gt;&lt;/p&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-2390846643732334117?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hSyXW1q2TJ9uq4hgVReDa-zlzjo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hSyXW1q2TJ9uq4hgVReDa-zlzjo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hSyXW1q2TJ9uq4hgVReDa-zlzjo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hSyXW1q2TJ9uq4hgVReDa-zlzjo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/ccR9QoGAyaw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/2390846643732334117/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=2390846643732334117" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/2390846643732334117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/2390846643732334117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/ccR9QoGAyaw/lectura-fundamental-anterior-realizacin.html" title="Lectura Fundamental 11" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/11/lectura-fundamental-anterior-realizacin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIHRn45fCp7ImA9WB9WF0Q.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-3779190915567564852</id><published>2007-10-23T19:11:00.000-05:00</published><updated>2007-11-23T00:08:57.024-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-11-23T00:08:57.024-05:00</app:edited><title>Lecturas Fundamentales 10</title><content type="html">&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/06/lecturas-fundamentales-9.html"&gt;Lectura Fundamental Anterior: “RUP: Fase de Concepción Parte 2”&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Lectura # 10: &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Realización de Casos de Uso: De los Objetos y sus Interacciones &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Presentación &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;¿Es familiar para alguno de ustedes esta imagen? &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;/p&gt;&lt;div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_1hq7xq2mk" /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 1: Meta-Modelo de un proceso de desarrollo de software mal-ejecutado &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Este meta-modelo muestra un paradigma muy común en los equipos de desarrollo de software en el que la substancia de los emisores (los Analistas) no se coordina con la idiosincrasia de los receptores (los Programadores y los Probadores). Lo que está sucediendo es que el formato en el que se emite y el formato en el que se recibe (para usar términos reconocibles por nosotros) no son compatibles en el sentido en que unos y otros ven las cosas de distinta forma: mientras los Analistas observamos el universo del problema desde una perspectiva de usuario final, los Programadores lo hacemos con una visión técnica y tecnológica de las cosas. Mientras el Analista habla (escribe) en términos de necesidades, causas raíz, características, requisitos y solicitudes, el Programador espera recibir expresiones orientadas al método (orientado-a-objetos, orientado-a-aspectos o a algún otro similar): clases, tablas, objetos, controles visuales, entre otros. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 12pt 0cm 6pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Esta cacofonía por antonomasia, esta genuina desproporción de los formatos de emisión y recepción que nacen (durante la Concepción del sistema) y evolucionan (a lo largo de la Elaboración y Construcción) de manera asimétrica por la simple causa de que una se apoya en lo biológico (las necesidades y los requisitos vienen de seres humanos) mientras que la otra se soporta en la mecánica y en la electrónica (las tablas, los índices y los objetos necesitan de una máquina para vivir), esta situación en la que la comunicación (entre Analistas y Programadores) se torna en un procedimiento irregular y embrollado, esta disyuntiva es la que me empieza a ocupar a partir de esta lectura fundamental. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Ahora bien, puesto que el análisis y diseño orientado a objetos es ciertamente un proceso dinámico, debo elegir desde que ángulo presentarlo. Como con el mismo proceso de desarrollo de software, mostrar un estado “final” muchas veces da al lector falsas expectativas de estar en lo correcto desde el primer intento, mientras que con un primer acercamiento se puede exhibir un sistema incompleto o peor aún, erróneamente entendido. En este artículo elegí compartir mi trabajo a partir de un enfoque temprano, corriendo el riesgo de darle al lector inexperto algunas falsas concepciones acerca de lo que son el análisis y el diseño orientados a objeto. Es un buen reto, sobre todo porque me da la oportunidad de reducir ese riesgo al mínimo, al punto de hacerlo desaparecer a lo largo de la explicación que tengo planeada en esta exposición; al final de la misma, espero, el Diseñador orientado a objetos habrá entendido las cuestiones básicas y algunas no tan básicas de la realización de casos de uso desde una perspectiva sistémica. Si eso sucede, al menos para un pequeño grupo de lectores, entonces habré cumplido mi misión. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Aquí vamos otra vez. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Sobre el Lenguaje de Modelado Unificado &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Definición 19&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;: “El Lenguaje de Modelado Unificado es un lenguaje visual para especificar, construir y documentar los artefactos de los sistemas. UML es un lenguaje de modelado de propósito general que puede ser usado con todos los métodos orientados a objetos y a componentes y puede ser aplicado a todos los dominios de aplicación (por ejemplo, salud, financiero, telecomunicaciones, aeroespacial) y a distintas plataformas de implementación (por ejemplo, J2EE y .NET).”&lt;/span&gt;&lt;b&gt;&lt;sup&gt; 1&lt;/sup&gt;&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En este contexto, &lt;/span&gt;&lt;b&gt;Especificar&lt;/b&gt;&lt;span style="font-size:85%;"&gt; significa enumerar y construir modelos que son precisos, no ambiguos y completos. UML dirige la especificación de todas las decisiones importantes de análisis, diseño e implementación&lt;/span&gt;&lt;b&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Mientras tanto, &lt;/span&gt;&lt;b&gt;Construir&lt;/b&gt;&lt;span style="font-size:85%;"&gt; quiere decir crear o modificar diagramas y modelos, usualmente basado en la existencia y estado de otros símbolos base o de otros diagramas. Los modelos que se construyen con UML están relacionados con los lenguajes de programación orientados a objetos. UML se usa para hacer Ingeniería Hacía Adelante, esto es, un mapeo directo de un modelo UML con código fuente. UML también se usa para hacer Ingeniería en Reversa, o sea, una reconstrucción de un modelo UML desde una implementación específica, normalmente en un lenguaje OO&lt;/span&gt;&lt;b&gt;&lt;sup&gt;3&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. UML además se usa para &lt;/span&gt;&lt;b&gt;Documentar&lt;/b&gt;&lt;span style="font-size:85%;"&gt; la arquitectura de los sistemas, los requisitos, las pruebas y actividades como planeación del proyecto y manejo de la entrega del producto&lt;/span&gt;&lt;b&gt;&lt;sup&gt;4&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Como cualquier lenguaje, UML tiene una sintaxis y una semántica. La sintaxis de UML está compuesta por un conjunto de construcciones gráficas útiles para especificar diagramas y modelos de sistemas&lt;/span&gt;&lt;b&gt;&lt;sup&gt;5&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Cada uno de estos símbolos tiene un significado de manera independiente, como lo tienen las palabras reservadas &lt;/span&gt;&lt;i&gt;Begin&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;i&gt;End&lt;/i&gt;&lt;span style="font-size:85%;"&gt; y &lt;/span&gt;&lt;i&gt;While&lt;/i&gt;&lt;span style="font-size:85%;"&gt; en Pascal o los términos &lt;/span&gt;&lt;i&gt;private&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, &lt;/span&gt;&lt;i&gt;void&lt;/i&gt;&lt;span style="font-size:85%;"&gt; y &lt;/span&gt;&lt;i&gt;string&lt;/i&gt;&lt;span style="font-size:85%;"&gt; en C# (léase C Sharp)&lt;/span&gt;&lt;b&gt;&lt;sup&gt;6&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;La semántica de UML es la que nos dice, por ejemplo, que un Actor solo se puede “comunicar” con el sistema a través de los casos de uso mediante una relación de Asociación, o que un paquete puede estar compuesto de Clases, Casos de Uso, Componentes u otros Paquetes y que existen distintos tipos de diagramas, a manera de modelos, que pueden ser construidos a partir de uno o más símbolos de UML&lt;/span&gt;&lt;b&gt;&lt;sup&gt;7&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. De esta manera, podemos construir “instrucciones válidas” en UML como las que ilustro en la figura 2, que resulta ser un Diagrama de Casos de Uso, un espécimen del que hablaré en alguna oportunidad. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Pueden encontrar más de UML en mis &lt;/span&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html"&gt;Prolegómenos Sobre el Lenguaje de Modelado Unificado&lt;/a&gt;&lt;span style="font-size:85%;"&gt; (&lt;/span&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html"&gt;http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html&lt;/a&gt;&lt;span style="font-size:85%;"&gt;). &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;El Caso de Estudio (aka, el Ejemplo) &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Consideremos el siguiente caso de uso típico ingreso al sistema de reserva de vuelos: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid"&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Caso de Uso&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;: Ingresar al Sistema &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Actor&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;: Pasajero &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Descripción&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;: Este caso de uso permite al Pasajero ingresar al sistema Web de Reservas usando su número de pasajero frecuente y la clave actual. A solicitud del usuario, el caso de uso además muestra los datos detallados del pasajero registrado. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Objetivo&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;: Suministrar al usuario Web del sistema de Reservas una interfaz amigable que le permita acceder rápidamente a las principales opciones del sistema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Precondiciones &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Ninguna &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Secuencia Básica&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;1. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El caso de uso inicia cuando el pasajero decide ingresar al sistema &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;2. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El sistema solicita el código (número) de pasajero frecuente y su respectiva clave &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;3. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El pasajero ingresa su número y clave &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;4. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El sistema busca los datos del pasajero, valida que el número y la clave del mismo coincidan con los registrados previamente. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;5. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El sistema solicita confirmación para mostrar los datos completos del pasajero &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;6. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El pasajero confirma que quiere ver sus datos &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;7. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El sistema muestra los datos detallados del pasajero &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm 6pt 18pt; BORDER-LEFT: medium none; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;8. &lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;El caso de uso termina &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Secuencia Alternativa 1 &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;4A. El número de pasajero o la clave no coinciden. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;4A1. el sistema muestra el mensaje: “Los datos proporcionados del pasajero no coinciden con los registrados en el sistema. Verifique.” &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;4A2. El caso de uso continúa en el paso 2. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Poscondiciones &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;El pasajero puede realizar diversas transacciones en el sistema como Reservar Vuelos, Cancelar Reservas, Cambiar su Clave, Modificar su Perfil, Pagar una Reserva o Cambiar los datos de una reserva. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Requisitos Especiales &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Por razones de seguridad, el sistema sólo muestra los cuatro últimos dígitos de la tarjeta de crédito del pasajero. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 6pt 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Por razones de seguridad, el sistema no indica cual de los datos (número o clave) está erróneo.&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;Advertencia: aunque éste es un caso de uso terminado, es de una situación simulada. Si lo usa en algún proyecto es bajo su propia responsabilidad. Todos los nombres y lugares han sido cambiados para proteger la identidad de los culpables. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Puesto que se trata de un enfoque holista, no puedo continuar sin poner en perspectiva este caso de uso. Hablo de ubicarlo dentro de un sistema, en este caso, de un sistema de reserva de vuelos en el que además se pueda cancelar una reserva, pagar por el vuelo (con tarjeta de crédito, por ejemplo), cambiar la reserva (algunos de sus datos, como la fecha de regreso, por ejemplo), confirmar una reserva, hacer apertura y cierre de vuelos por parte de las aerolíneas y mantener información de los aeropuertos, entre otras funcionalidades. Las cosas así, el diagrama de casos de uso de la figura 2 nos muestra una vista funcional del sistema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_2fjnmjbgk" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 2: Algunos casos de uso del Sistema de Reserva de Vuelos &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;Con este conato de modelo en mente, volvamos a nuestro caso de uso. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Interacciones &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Las Interacciones son usadas en diversas situaciones: para tener un mejor control de una situación de interacción por parte de un diseñador individual o por un grupo de personas que necesita lograr una interpretación común de la situación. Las interacciones también son usadas durante la fase de diseño más detallada donde la precisa comunicación entre procesos debe ser establecida de acuerdo a protocolos formales. Cuando se ejecutan las pruebas, las secuencias de ocurrencias de eventos del sistema pueden ser descritas como interacciones y comparadas con las de las fases anteriores.&lt;/span&gt;&lt;b&gt;&lt;sup&gt;8&lt;/sup&gt;&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En UML 2.x hay tres clases de diagramas de Interacción: Diagrama de Secuencia, Diagrama de Comunicación (anteriormente diagrama de Colaboración) y Diagrama de Revisión de Interacciones (nuevo a partir de la versión 2.0 de UML). &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Los Diagramas de Comunicación muestran las interacciones a través de una vista arquitectónica de las líneas de vida de los objetos en donde la secuencia de Mensajes es dada vía un esquema de numeración secuencial. Mientras tanto, los Diagramas de Revisión de Interacciones definen Interacciones a través de una variante de los Diagramas de Actividad promoviendo la revisión del flujo de eventos. En estos diagramas de Revisión se omiten las Líneas de Vida y los Mensajes entre ellas. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En lo que sigue, me concentraré en los Diagramas de Secuencia, que se enfocan en el intercambio de mensajes entre las Líneas de Vida de los objetos. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Diagramas de Secuencia, Paso a Paso &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Un Diagrama de Secuencia muestra una vista de las entrañas del sistema, cómo se van a suceder las funciones (expuestas normalmente en un caso de uso o en un conjunto de casos de uso) a partir de la activación de un Actor (una persona). En general, un diagrama de secuencia se usa para modelar la lógica del sistema (de uno o más casos de uso del sistema al tiempo, o de parte de un caso de uso). Este tipo de diagrama muestra precisamente el orden temporal en el que ocurren las acciones en un sistema. Estas acciones son especificadas en términos de Mensajes entre los objetos que interactúan en el modelo. Además, son modelados a nivel de objetos en vez de a nivel de clases para permitir escenarios que usan más de una instancia de la misma clase y para trabajar a nivel de hechos (reales), datos de prueba y ejemplos. Y más aún, el diagrama de secuencia muestra una vista dinámica del sistema (o de parte de él), en contraposición a lo que hace por ejemplo el diagrama de clases, que presenta un panorama estático del mismo sistema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;De acuerdo a Ivar Jacobson, la parte más importante del así llamado análisis dinámico es la &lt;/span&gt;&lt;b&gt;realización del caso de uso&lt;/b&gt;&lt;span style="font-size:85%;"&gt;, nombrada así puesto que con ellos hacemos &lt;/span&gt;&lt;b&gt;real(idad)&lt;/b&gt;&lt;span style="font-size:85%;"&gt; el caso uso mediante la demostración de cómo puede ser implementado a través de la colaboración entre objetos. La realización de casos de uso tiene tres pasos esenciales: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;1. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Ir a través de (caminar por) los casos de uso del sistema simulando los mensajes enviados entre objetos y almacenando los resultados en diagramas de interacción. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;2. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Agregar operaciones a los objetos que reciben los mensajes. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt 18pt; TEXT-INDENT: -18pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;3. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Adicionar clases para representar límites (interfaces del sistema) y controladores (un receptáculo para procesos del negocio complejos o para la creación y recuperación de objetos), cuando sea necesario. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En nuestro ejemplo, el caso de uso inicia cuando el &lt;/span&gt;&lt;b&gt;Pasajero&lt;/b&gt;&lt;span style="font-size:85%;"&gt; decide &lt;/span&gt;&lt;b&gt;Ingresar al Sistema. &lt;/b&gt;&lt;span style="font-size:85%;"&gt;Este es el punto de partida, la activación del proceso. La primera pregunta que tratamos de responder es: ¿mediante qué mecanismo (de interacción) el pasajero le indica al sistema que quiere autenticarse? Esta es una pregunta simple que tiene una respuesta simple: mediante un formulario llamado, coincidentemente, Ingresar al Sistema. Si asumimos que estamos desarrollando una aplicación para Internet, este formulario se encuentra en una página Web (no entraré en el detalle de la plataforma de implementación, del lenguaje de programación o de la base de datos a usar para la producción de este sistema). En este escenario, entonces, el actor le envía un mensaje (interactúa) con un formulario llamado &lt;/span&gt;&lt;b&gt;Ingresar al Sistema&lt;/b&gt;&lt;span style="font-size:85%;"&gt; (que no es más que una instancia –un objeto – de una página Web. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Anotación&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;: estoy usando una definición amplia e indistinta de los términos Instancia, Objeto y Clase. En una futura Lectura Fundamental abordaré el tema específico de la programación orientada a objetos y especificaré los detalles de tales conceptos. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;La figura 3 muestra entonces la interacción inicial entre el actor (el pasajero) y el sistema (la página Ingresar al Sistema). El diagrama de la figura muestra dos Líneas de Vida. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Definición 20&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;: Una &lt;/span&gt;&lt;b&gt;Línea de Vida&lt;/b&gt;&lt;span style="font-size:85%;"&gt; representa un participante individual en la Interacción. Cada Línea de Vida se conoce como una entidad interactuante&lt;/span&gt;&lt;b&gt;&lt;sup&gt;9&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;. Simplificando, una Línea de Vida es una instancia de una clase (si nos encontramos a la altura del análisis del sistema, ésta es realmente una &lt;/span&gt;&lt;b&gt;instancia potencial&lt;/b&gt;&lt;span style="font-size:85%;"&gt;) que muestra su propio ciclo de vida, desde la creación (que puede ser implícita o explícita), pasando por diferentes estados, hasta su destrucción (que también puede ser implícita o explícita). &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Definición 21&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;: Un &lt;/span&gt;&lt;b&gt;Mensaje&lt;/b&gt;&lt;span style="font-size:85%;"&gt; define una comunicación específica entre las Líneas de Vida de una Interacción. La comunicación puede ser de diversos tipos: el envío de una señal, la invocación de una operación, la creación o destrucción de una instancia&lt;/span&gt;&lt;b&gt;&lt;sup&gt;10&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-size:85%;"&gt;, entre otras. Con el Mensaje se pueden identificar tanto el Emisor (el objeto que envía el mensaje) como el Receptor (el objeto que recibe el mensaje). Este último es el que finalmente implementará la funcionalidad (las operaciones) que se requiere para que el sistema procese el Mensaje. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En el diagrama, el mensaje es “Ingresar”. El mensaje tiene dos argumentos: Número y Clave del Pasajero. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Por ahora, esta interacción nos resuelve los pasos 1 a 3 del caso, en los que el sistema solicita el número y clave del pasajero y este los ingresa. Lo que sigue es que el sistema busca y valida los datos de ese pasajero en particular. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Puesto que normalmente estaríamos en una fase en la que ya se conoce al menos una arquitectura preliminar o candidata del sistema, como diseñadores seguimos los patrones o las restricciones impuestas por esa arquitectura. En este caso, asumamos que nos enfrentamos a un diseño de varias capas en el que la interfaz de usuario no se comunica por ningún motivo con la base de datos. En este caso, la página Ingresar al Sistema debe transferir la solicitud de acceso a otro elemento del modelo que bien podría ser un objeto, una instancia de un Controlador de Pasajeros, como lo muestra la figura 4. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div id="cqec" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_3fwwnc9ff" /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 3: Diagrama de Secuencia Inicial del Caso de Uso Ingresar al Sistema &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_4fwdzkdcn" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 4: Transferencia de la Solicitud de Ingreso al Sistema &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Quiero detenerme unos instantes en este asunto de las restricciones impuestas por la arquitectura del software. Resulta que durante parte del proceso de desarrollo, los analistas, diseñadores, programadores y demás miembros del equipo nos encontramos en un proceso creativo, un proceso de descubrimiento constante, desde los objetos del dominio (del negocio) durante el modelado del negocio, pasando por los requisitos (en términos de casos de uso) y las clases y las tablas del sistema, hasta muchas de las líneas de código que escribimos. Eso es lo que hace que nuestra profesión siga siendo un “arte”, poco precisa y hasta llena de dilemas y ambigüedades. Pues bien, resulta que la Arquitectura es uno de esos “artilugios” que tenemos para guiar ese proceso de hallazgo al que nos enfrentamos. La arquitectura define o establece un conjunto de elementos estructurales que se nutren de decisiones de diseño, reglas o patrones que restringen ese diseño y la construcción misma del software. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Ahora bien, si nos ceñimos a las reglas arquitecturales (o arquitectónicas), el número de salidas que encontremos para un caso de uso o para un conjunto de ellos puede ser grande. La solución que estoy exponiendo es la de una transacción “tipo”, un patrón determinístico que se puede usar en la gran mayoría de los escenarios que nos ocupan día a día. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Volvamos al ejemplo. Este recién llegado Controlador de Pasajeros es quien puede comunicarse con algo así como una Relación de Pasajeros, un inventario que conozca los datos de todos los pasajeros registrados en el sistema. Este repertorio, bien podríamos llamarlo &lt;/span&gt;&lt;b&gt;Catálogo de Pasajeros&lt;/b&gt;&lt;span style="font-size:85%;"&gt; y dependiendo del momento por el que atravesemos en el proceso de desarrollo, este elemento bien podría permanecer en la abstracción conceptual de lo que ordinariamente conocemos como catálogo (durante el análisis) o bien podría ser una instancia de una Clase (realmente una Colección) de Pasajeros (más tarde en el diseño), hasta llegar a ser una Tabla de la base de datos (durante la implementación de la solución). Por ahora, sólo será el Catálogo de Pasajeros, simple. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Y es a este catálogo al que el Controlador de Pasajeros le puede indagar por los datos del pasajero que acaba de suscribir la solicitud de acceso, como lo dibujo en la figura 5. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: center" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_5f4q6j7cz" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 5: Buscar Pasajero por Número &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Sabemos que hay dos alternativas posibles: que el pasajero se encuentre registrado en el catálogo o que no se encuentre registrado. En este diagrama sólo ilustraré la primera. Una vez los datos del pasajero han sido localizados, el Catálogo de Pasajeros puede hacer dos cosas: informar a Control de Pasajeros y crear un nuevo objeto, finalmente, el Pasajero. Este nuevo objeto tiene todos los datos del pasajero y conoce todas las funciones que un pasajero (una persona) puede desempeñar en el sistema. ¡Es un Humanoide Virtual! &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En la figura 6 podemos observar el instante preciso en el que se crea la instancia del Pasajero, justo después de que el Control de Pasajeros recibe la notificación de que el pasajero en proceso existe. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_6hgrq2xfg" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 6: Crear la Entidad Pasajero &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En esta versión del diagrama de secuencia aparecen dos nuevos tipos de mensaje: el mensaje &lt;/span&gt;&lt;b&gt;4: Existe Pasajero&lt;/b&gt;&lt;span style="font-size:85%;"&gt; devuelve una confirmación del registro de pasajero al Controlador de Pasajeros; mientras tanto, el mensaje &lt;/span&gt;&lt;b&gt;5: Crear Pasajero&lt;/b&gt;&lt;span style="font-size:85%;"&gt; crea un nuevo objeto del sistema, Pasajero. Aquí, el título del mensaje, nemotécnico por demás, no es el que advierte de la creación del objeto, es más bien el lugar en el diagrama donde aparece la instancia recién-creada, mucho más abajo de donde inician las demás líneas de vida de esta realización. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Bueno, al parecer ya tenemos las identidades de todos los seres interactuantes que nos permitirán terminar de implementar el caso de uso Ingresar al Sistema o, al menos, uno de sus escenarios. El paso 4 del caso de uso: &lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:78%;"&gt;El sistema busca los datos del pasajero, valida que el número y la clave del mismo coincidan con los registrados previamente, &lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;se puede implementar como lo muestra la figura 7. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_7gzdkx9ct" /&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 7: Diagrama de Secuencia del Caso de Uso Ingresar al Sistema (versión 1 – Beta) &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;La imagen también muestra los demás pasos de la secuencia básica del caso de uso. Observamos que la Entidad Pasajero se convierte en una fuente de información para el resto de elementos del modelo ya que representa, como establecí antes, un pasajero real. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En esta versión del diagrama también aparece un nuevo tipo de mensaje (&lt;/span&gt;&lt;b&gt;8: Validar Clave&lt;/b&gt;&lt;span style="font-size:85%;"&gt;). Este es un mensaje Reflexivo (o Auto-Mensaje), en el que el origen y el destino del mensaje son el mismo objeto. No confundir con mensaje recursivo, que es un mensaje reflexivo que se ejecuta recursivamente (se llama a sí mismo durante su ejecución). &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;De otro lado, los mensajes 11 y 12 comunican directamente la interfaz de usuario con la entidad Pasajero. Si volvemos a los patrones arquitectónicos quizás deberíamos evitar este tipo de interacción y pasar siempre a través del Controlador de Pasajeros. Esta es apenas una primerísima versión, bien podrían existir algunas otras antes de lograr una que sea definitoria para el sistema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;De Estereotipos y Otros Menesteres &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Un estereotipo es el mecanismo que proporciona UML para que podamos extender las construcciones útiles de diseño. Un estereotipo puede ser visto como un clasificador (o tipificador) de clases o de otros elementos del lenguaje, es decir, adicionan un nuevo nivel al árbol de jerarquías en un modelo. Los estereotipos también sirven para representar objetos (físicos o virtuales) de una manera más cercana a la realidad de los mismos. De esta forma, Página Web (o Página HTML o Página ASP), Formulario Windows, Controlador, Entidad del Dominio, Colección, Tabla y Procedimiento Almacenado son estereotipos válidos que aplican al elemento base &lt;/span&gt;&lt;b&gt;Clase&lt;/b&gt;&lt;span style="font-size:85%;"&gt; de UML, mientras que Reporte, Proceso por Lotes, Ingreso de Datos y Transacción bien podrían ser estereotipos aplicables al elemento base &lt;/span&gt;&lt;b&gt;Caso de Uso&lt;/b&gt;&lt;span style="font-size:85%;"&gt; de UML. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;La sintaxis de estos clasificadores es: &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%; LETTER-SPACING: -2pxfont-size:9;" &gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Nombre del Estereotipo&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%; LETTER-SPACING: -2pxfont-size:9;" &gt;&amp;gt;&amp;gt;, &lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;como en &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%; LETTER-SPACING: -2pxfont-size:9;" &gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Colección&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%; LETTER-SPACING: -2pxfont-size:9;" &gt;&amp;gt;&amp;gt;. &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt" align="center"&gt;&lt;img src="http://docs.google.com/File?id=dd635kds_8d7wnn8dr" /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span lang="ES-CO"  style="font-family:Verdana;"&gt;&lt;span style="font-size:78%;"&gt;Figura 8: Diagrama de Secuencia del Caso de Uso Ingresar al Sistema con Estereotipos &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Algunos de estos estereotipos (usados en el ejemplo), cuyo uso se ha difundido ampliamente en la comunidad de desarrollo, ya tienen su propia sintaxis, como revelo en la figura 8. Ingresar al Sistema tiene un estereotipo &lt;/span&gt;&lt;i&gt;boundary&lt;/i&gt;&lt;span style="font-size:85%;"&gt; (límite), Control de Pasajeros y Catálogo de Pasajeros tienen un estereotipo &lt;/span&gt;&lt;i&gt;control&lt;/i&gt;&lt;span style="font-size:85%;"&gt;, mientras que Pasajero tiene un estereotipo &lt;/span&gt;&lt;i&gt;entity&lt;/i&gt;&lt;span style="font-size:85%;"&gt;. Cada uno de estos clasificadores tiene también su propia semántica: las clases límite (llamadas así porque tienen el estereotipo &lt;/span&gt;&lt;i&gt;boundary&lt;/i&gt;&lt;span style="font-size:85%;"&gt;) representan interfaces con los usuarios o con otros sistemas; las clases controladoras son las responsables de manejar el flujo o la lógica de un caso de uso y coordina la mayoría de sus acciones; por su parte, las clases entidad simbolizan las unidades de información operadas en el sistema, normalmente son elementos pasivos y persistentes en cuanto muchas veces la información que encapsulan en almacenada en algún tipo de repositorio de datos. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;En esta figura, también aparece una Nota de UML, que es el equivalente de un comentario en un lenguaje de programación como C++ o Java. Las notas se pueden asociar a una línea de vida, a un mensaje, a un argumento del mensaje o a cualquier otro elemento sustancial del modelo. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Comentarios Finales &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Los diagramas de secuencia pueden ser usados en distintas etapas del ciclo de vida, desde el análisis primitivo de los casos de uso, empleando abstracciones clave del sistema, hasta el diseño detallado, explotando muchos de los recursos del lenguaje de modelado unificado. De esta manera, constituyen un conducto natural entre la especificación de requisitos funcionales (casos de uso) y no funcionales por parte de los Analistas y Arquitectos del software y la implementación y prueba de los mismos por parte de los Programadores y Probadores del sistema. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Que cuántos diagramas son necesarios por caso de uso es una cuestión que dejo a las condiciones particulares de cada proyecto y dentro de este, a cada caso de uso. Primero es importante reconocer que no todos los casos de uso necesitan de un diagrama de secuencia para ser implementados (y en este subconjunto quizás entre el propio caso de uso que usé de ejemplo y que quizás solo sirve para ilustrar los principales conceptos de la realización de casos de uso). El paso a seguir es entonces decidir cuáles son los casos de uso que definen la arquitectura del sistema, es decir, los más complejos o riesgosos desde el punto de vista arquitectónico; de estos, los escenarios que abarquen más elementos del modelo (extensión) y que incluyan muchos mensajes entre ellos o mensajes que impliquen procesos delicados o laboriosos (profundidad), son los mejores candidatos, los más útiles, para diseñar con ellos el sistema a través de diagramas de secuencia. Habitualmente, estos casos de uso son los que se desarrollan durante la fase de Elaboración del proyecto y a menudo requieren de información suplementaria para su diseño: requisitos especiales, arquitectura, restricciones de diseño, longitud y tipos de datos y al final del diseño, restricciones de la plataforma de implementación. Los demás casos de uso, aquellos que son más fáciles o directos de implementar encontrarán, si hicimos bien el trabajo, un camino de ida hacía los elementos (clases, objetos, controles, tablas) que se usaron para realizar los primeros. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Los diagramas de secuencia constituyen así un medio de comunicación efectivo que cura esa fisura, a veces insondable, a veces abierta, que supone el paso de la especificación de requisitos a la programación de los sistemas de cómputo. Ahora bien, lograr comunicar un diagrama, y por extensión un modelo, demanda discernimiento y práctica, pues el diseño (orientado a objetos) de software es por ley un proceso formal y para ejecutarlo debemos adquirir los fundamentos (que rayan en lo estrictamente teórico) para que luego la práctica habitual nos permita perfeccionar la técnica y desarrollar mejores productos en cada nuevo intento. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt; TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;¡Funciona para mí! &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;Referencias &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;sup&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;1 &lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;" &gt;&lt;span style="font-size:85%;"&gt;Object Management Group –OMG. &lt;/span&gt;&lt;/span&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;UML Infrastructure Specification, v2.1.1. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;Page 9. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;sup&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;2,3,4,5,6,7 &lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Cambria;" &gt;&lt;span style="font-size:85%;"&gt;Salazar Caraballo, Luis A. &lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-CO"  style="font-family:Cambria;"&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html"&gt;&lt;span style="font-size:100%;"&gt;Prolegómenos Sobre el Lenguaje de Modelado Unificado&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;sup&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;8 &lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Cambria;" &gt;&lt;span style="font-size:85%;"&gt;Object Management Group –OMG. &lt;/span&gt;&lt;/span&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;UML Superstructure Specification, v2.1.1. Page 457. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 6pt 0cm; TEXT-ALIGN: justify"&gt;&lt;b&gt;&lt;sup&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;9 &lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;" &gt;&lt;span style="font-size:85%;"&gt;Object Management Group –OMG. &lt;/span&gt;&lt;/span&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;UML Superstructure Specification, v2.1.1. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;Page 489. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;b&gt;&lt;sup&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Verdana;" &gt;&lt;span style="font-size:85%;"&gt;10 &lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/b&gt;&lt;span style="font-family:Times New Roman;"&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;" &gt;&lt;span style="font-size:85%;"&gt;Object Management Group –OMG. &lt;/span&gt;&lt;/span&gt;&lt;span style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;UML Superstructure Specification, v2.1.1. &lt;/span&gt;&lt;span lang="ES-CO" style="LINE-HEIGHT: 115%;font-family:Cambria;font-size:9;"  &gt;Page 491.&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 10pt"&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/11/lectura-fundamental-anterior-realizacin.html"&gt;Lectura Fundamental Siguiente: “Orientación a Objetos: Un Enfoque Teórico Moderno (Actualizado)” &lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-3779190915567564852?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dkPPNnyf1aK10CLs6yPpA_MrGuU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dkPPNnyf1aK10CLs6yPpA_MrGuU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dkPPNnyf1aK10CLs6yPpA_MrGuU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dkPPNnyf1aK10CLs6yPpA_MrGuU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/T3cS5F6b_tI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/3779190915567564852/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=3779190915567564852" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/3779190915567564852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/3779190915567564852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/T3cS5F6b_tI/lecturas-fundamentales-10-lectura_3046.html" title="Lecturas Fundamentales 10" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IEQ3s_fyp7ImA9WB9QEk4.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-8035482772977195965</id><published>2007-06-25T11:44:00.000-05:00</published><updated>2007-10-24T10:25:02.547-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-24T10:25:02.547-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visión" /><category scheme="http://www.blogger.com/atom/ns#" term="Usuario Final" /><category scheme="http://www.blogger.com/atom/ns#" term="Futuro" /><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 9</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2007/03/lecturas-fundamentales-8.html"&gt;Lectura Fundamental Anterior: “RUP: Fase de Concepción”&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lectura # 9&lt;br /&gt;&lt;strong&gt;RUP: Fase de Concepción, Parte 2&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;“¿De dónde viene esto? Esta búsqueda, esta necesidad de solventar los misterios de la vida..., cuando las más simples preguntas nunca han sido contestadas.&lt;br /&gt;¿Por qué estamos aquí? ¿Qué es el alma? ¿Por qué soñamos? Puede que sea mucho mejor si dejáramos de buscarlas. Sin investigar, sin anhelar. Esa no es la naturaleza humana. No está en el corazón humano.&lt;br /&gt;¡Ése no es el motivo por el que estamos aquí!”&lt;/span&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;strong&gt;Héroes&lt;/strong&gt; (Capítulo 1, “Génesis”)&lt;/div&gt;&lt;br /&gt;Según las creencias de algunas tribus primitivas de la India, la Tierra era una enorme bandeja de té que descansaba sobre tres enormes elefantes, los que a su vez estaban sobre la caparazón de una tortuga corpulenta. En otra geografía, los antiguos egipcios mitificaron el cielo como una versión etérea del rio Nilo, a través del cual el dios Ra (el Sol) navegaba de Oriente a Occidente cada día, regresando a su sitio de partida por los abismos subterráneos donde residen los muertos; para ellos, los eclipses eran inducidos por ataques de una serpiente a la embarcación de Ra.&lt;br /&gt;&lt;br /&gt;Así comienzan los proyectos de software: con usa serie de afirmaciones que a veces distan mucho de la realidad. Hacer que la Tierra efectivamente sea redonda, que el cielo sea un reflejo fantástico de las cosas en el cerebro humano y que los eclipses realmente se provoquen a medida que la luz procedente de un cuerpo celeste es bloqueada por otro, es una tarea ardua que requiere de tiempo, de foco, de actitud. Es la faena del Analista del Software.&lt;br /&gt;&lt;br /&gt;En términos simples, en la Concepción buscamos un acuerdo con los usuarios sobre lo que hará el sistema. Durante esta fase atendemos cuidadosamente cada palabra de los usuarios, indagamos por el problema y el problema detrás del problema, nos movemos precisamente en el espacio del problema y desde ningún punto de vista pensamos en la solución. Bueno, hasta cierto grado. Una vez que hayamos entendido y acordado esa cuestión, resumida con diligencia en el documento de Visión y Alcance y tengamos claridad sobre el impacto, sobre los afectados y sobre lo que podrían ser los beneficios de una posible solución, entonces nos movemos al espacio de ésta, donde consideramos las características mayores del software a producir.&lt;br /&gt;Estas características están en el nivel intermedio entre las necesidades de los usuarios y los requisitos detallados de la solución, de tal manera que constituyen un puente estructural entre las unas y los otros y definen la organización del sistema.&lt;br /&gt;&lt;br /&gt;Hacer la transición entre lo que es y lo que será, enfrentarse a la ambiciosa tarea de prever el futuro cercano (¡a veces incierto!) de un proyecto de tecnología informática, con la profundidad y el rigor necesarios para calcar en palabras e imágenes las ideas y los sueños de docenas, quizás de cientos de usuarios, es algo que sólo la perspicacia y la sabiduría del Analista del Sistema es capaz de lograr.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;El Analista de Requisitos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Gran parte de la responsabilidad del éxito de la fase de Concepción de un proyecto depende del Ingeniero de Requisitos, Analista del Software o Analista de Requisitos.&lt;br /&gt;&lt;br /&gt;Analizar el problema de los usuarios comienza con la búsqueda y concertación de un vocabulario común, un glosario que sirva de referencia para todos los interesados en el proyecto, desde los mismos usuarios, los administradores del proyecto, los diseñadores y arquitectos, los programadores, los probadores y cualquier otra persona que requiera información sobre el proyecto y el producto a construir. En paralelo, el Analista busca actores y casos de uso (el mecanismo último para elicitar, especificar y administrar los requisitos del software), es decir, quién hará qué en el sistema (no puedo pasar por aquí sin permitirme remitirlos a mis cinco primeras Lecturas Fundamentales, donde abordé ampliamente este asunto de los casos de uso). Aquí el orden altera el resultado, por eso resalto que primero debemos conocer a los actores que jugarán un papel en el sistema y que luego ubiquemos sus necesidades como organismos primarios de funcionalidad en el software por desarrollar. Uno de los grandes motivos de fracaso en proyectos de software es que al final se encuentran en ellos funciones o módulos completos que nadie solicitó, que nadie necesitaba; también, funcionalidad equivocada. Eso se debe a que no anticipamos con quien o quienes iba a interactuar nuestro sistema.&lt;br /&gt;&lt;br /&gt;El espiral de actividades del Analista se complementa con el desarrollo de la &lt;strong&gt;Visión&lt;/strong&gt; del proyecto, condición sine qua non para terminar la fase de Concepción. Pero durante ese desarrollo, los Analistas nos enfrentamos a demasiadas posibilidades y muchas de nuestras aseveraciones (a manera de especificaciones) pueden vacilar porque reflejan puntos de vista coartados y hasta extravagantes de una sola persona o de muchas personas que no se ponen de acuerdo entre ellas. Es labor nuestra encontrar a los individuos adecuados, a los representantes apropiados de los usuarios, ojalá con distintos puntos de vista, conocimiento y experiencia, y entrevistarlos para así poder delinear un marco conceptual y temporal en el que esa Visión se lleve a cabo antes de terminar con el presupuesto del proyecto.&lt;br /&gt;&lt;br /&gt;Los Analistas pasamos (o deberíamos pasar) de transeúntes pasivos en materia del conocimiento del negocio que nos ocupa a ser coreógrafos activos del proceso previamente expuesto por los usuarios. En un sentido limitado esto quiere decir que primero debemos escuchar. Un Analista que hable mucho en las primeras de cambio con los usuarios corre el riesgo de caer en el conductivismo, o sea, llevar al usuario por donde cree que debería ir, cuando en realidad debe ser él (o ella) quien conduzca su propio destino. Si ya tenemos experiencia en el negocio debemos incluso estar más atentos porque entonces caemos en el &lt;strong&gt;síndrome de la copa medio llena&lt;/strong&gt;, cuando en realidad está medio vacía; esto es, el conocimiento previo evita que escuchemos como ávidos observadores las recién descubiertas necesidades de nuestro interlocutor.&lt;br /&gt;&lt;br /&gt;Después, cuando haya suficientes exposiciones de los usuarios, finalmente empezaremos a descodificar sus palabras, sus ideas, sus verdades, mediante un proceso de ingeniería que las convierta en expresiones que se puedan ejecutar en un computador, que sean factibles de automatizar. Eso significa entonces que nos hemos convertido en conocedores de ese negocio (o de esa parte específica del negocio), con lo que bien podríamos contribuir al mejoramiento del mismo poniendo de manifiesto las tareas repetitivas, las posibles ambigüedades, las actividades imposibles y las faltantes en el proceso de la organización para la cual desarrollamos el sistema. Eso simboliza ser “coreógrafos activos.”&lt;br /&gt;&lt;br /&gt;Al definir la visión, es fundamental comprender el marco temporal que tenemos para hacerla realidad. Nos enfrentaremos a diferentes tecnologías, condiciones y personas. Es importante que quede claro qué hará el producto de software, qué no hará y con qué se hará, lo mismo que los riesgos preexistentes.&lt;br /&gt;&lt;br /&gt;En la parte final de la Concepción, aceleramos el proceso y disponemos las estrategias y las herramientas para la próxima fase: Elaboración. Nuestro trabajo tendrá grandes repercusiones sobre el resto del proyecto y de las personas involucradas en el. Entrarán el Arquitecto y el Diseñador, lo mismo que el Programador y el Probador, se crearán las clases y los componentes, se integrarán las partes y finalmente se ensamblará un producto que se pondrá a disposición del usuario que lo concibió.&lt;br /&gt;&lt;br /&gt;Pero todo comienza aquí, en la Concepción; en consecuencia, el futuro del proyecto está fijado por la mayor disposición, el mayor y mejor esfuerzo y de la calidad del tiempo y del proceso que usemos en esta fase los Analistas del Software.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Artefactos y Otros Menesteres Durante la Concepción&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;El resultado del proceso siempre debe documentarse para que quede una prueba fehaciente y toda la fundamentación de lo que será. RUP proporciona algunas herramientas a manera de plantillas, agrupadas en Dominios de Productos de Trabajo, relacionadas unos con otros sobre la base de recursos, temporalidad o interrelación entre ellos, para que podamos concluir nuestro trabajo. En el caso del subdominio de los Requisitos, encontramos:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;La Visión y el Alcance&lt;/strong&gt;. Este artefacto define la vista de los interesados sobre el producto a ser desarrollado, especificado en términos de las necesidades clave de esos interesados y de las características del software. Contiene un perfil o resumen de los requisitos centrales visionados (el corazón o núcleo del sistema) y de esta forma suministra la base contractual para los requisitos técnicos más detallados. En breve, el documento de Visión captura la esencia de la solución imaginada en forma de requisitos de alto nivel y restricciones de diseño que dan al lector una visión del sistema a ser desarrollado desde una perspectiva de requisitos comportacionales. Además, facilita una entrada al proceso de aprobación del proyecto y está, de esta forma, íntimamente relacionado con el Caso del Negocio (del que hablaré en otra oportunidad). El documento de Visión comunica también el “por qué y qué” fundamental del proyecto y es un indicador contra el cual todas las decisiones futuras deberían ser validadas. Otro nombre usado para este artefacto es el &lt;strong&gt;Documento de Requisitos del Producto&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;En general, este documento está escrito usando un léxico del dominio de los usuarios líderes y finales del sistema y son ellos quienes en última instancia establecen la completitud y la exactitud del artefacto.&lt;br /&gt;&lt;br /&gt;El responsable directo, el hacedor de este documento es el Analista del Software.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;La Especificación de Requisitos del Software&lt;/strong&gt;. Por su parte, este artefacto captura los requisitos del software para todo el sistema o para una porción de el. Se enfoca en la recolección y organización de todos los requisitos alrededor del proyecto, tanto funcionales (lo que hace el sistema) como los no funcionales (aquellos aspectos de usabilidad, confiabilidad, desempeño, escalabilidad y restricciones de diseño, implementación y despliegue del software que afectan el producto). Cuando no se usa la técnica de los casos de uso, es en este documento donde consignamos el semblante funcional del sistema tal cual será implementado posteriormente. Si usamos casos de uso, en cambio, dejamos aquí el detalle de aquellos requisitos transversales y reusables del software, aquellos que se usan en distintos ámbitos del producto. En cualquier caso, los requisitos no funcionales encuentran aquí su repositorio absoluto, aunque en ocasiones estos requisitos son expuestos en un Documento de Especificaciones Suplementarias, que también puede incluir requisitos legales y regulatorios, lo mismo que el uso estándares de distinto tipo.&lt;br /&gt;&lt;br /&gt;Como antes, el garante inmediato, el productor de este documento es el Analista del Software.&lt;br /&gt;&lt;br /&gt;Sin embargo, muchas personas en el equipo del proyecto usan la Especificación de Requisitos del Software:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los diseñadores lo usan como referencia al definir responsabilidades, operaciones y atributos en las clases y cuando ajustan las clases al entorno de implementación. &lt;/li&gt;&lt;li&gt;Los programadores referencian el documento buscando insumos para la implementación de clases. &lt;/li&gt;&lt;li&gt;El gerente del proyecto lo usa para planear las iteraciones. &lt;/li&gt;&lt;li&gt;Los probadores lo usan para definir las pruebas que serán requeridas. &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;La Especificación del Caso de Uso&lt;/strong&gt;. No me extenderé en este apartado. Las cinco Lecturas Fundamentales iníciales describen ampliamente esto del Caso de Uso. Habrá más, pronto.&lt;br /&gt;&lt;br /&gt;Algunos otros artefactos importantes durante la Concepción y el resto del proyecto, que bien podrían hacer parte de uno de los anteriores o simplemente poseer su propio repositorio, son:&lt;br /&gt;El Glosario, que define términos importantes usados en el proyecto; constituye el carácter léxico-gráfico del proyecto y del producto. Los Atributos de los Requisitos, que describe los atributos de y dependencias (trazabilidad) entre los requisitos, importantes a la hora de administrar los cambios desde la perspectiva de los requisitos. El Plan de Manejo de Requisitos, que describe los artefactos de requisitos usados en el proyecto, los tipos de requisitos y sus atributos respectivos, especificando la información a recolectar y los mecanismos de control a ser usados para medir, reportar y controlar los cambios a los requisitos del producto.&lt;br /&gt;&lt;br /&gt;Por último, pero no menos importante, está el Modelo de Casos de Uso, que sirve como un medio de comunicación y como un contrato entre el usuario líder, los usuarios finales y los desarrolladores (y estoy usando el término desarrolladores en un sentido amplio con el que denoto realmente a todos los miembros del equipo del proyecto) sobre la funcionalidad del sistema. El modelo de casos de uso permite que los usuarios validen que el sistema será lo que ellos esperan y que los desarrolladores construyan lo que se espera del producto. Este modelo está compuesto de casos de uso y de actores y de las relaciones entre ellos. Por supuesto, va más allá de un simple diagrama.&lt;br /&gt;&lt;br /&gt;Y ya desde la &lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-7.html"&gt;Lectura Fundamental 7 &lt;/a&gt;he mencionado artefactos como la Lista de Riesgos, el Plan de Desarrollo de Software (que incluye como mínimo el Plan Maestro de Iteraciones y la Agenda del proyecto) y el Plan de Pruebas cuya responsabilidad recae más sobre el Gerente del Proyecto u otros integrantes del equipo de desarrollo.&lt;br /&gt;&lt;br /&gt;Quiero aclarar que el hecho de que no haga el mismo énfasis en estos últimos artefactos que en los primeros no quiere decir que estos sean menos relevantes que aquellos. Es una mera cuestión de espacio y de tiempo. Quizás en otra ocasión, en otra Lectura, aborde con más detalle algunos de estos documentos. Lo que sí es importante tener en cuenta es que la elaboración de uno o más de estos documentos (de todos los que he expuesto) depende del tipo de proyecto: si el proyecto es grande, requiere de más rigor documental y de más contratos y puesto que más personas estarán interesadas, la necesidad de usar cada artefacto por separado es mayor. En proyectos pequeños, de menos carácter ceremonial, varios de estos artefactos se pueden combinar en uno solo pero a la postre el resultado será el mismo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sobre la Arquitectura Preliminar&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ninguna disertación sobre el Inicio de un proyecto estará completa sin hablar de la Arquitectura Candidata. Por allá en la segunda mitad de la fase, el Arquitecto del Software recibe del Analista los insumos necesarios para abordar la Solución. Esta se expresa en términos de vistas o perspectivas, empezando por la vista funcional, arquitectura funcional o vista de casos de uso; ésta es un compendio de los casos de uso que precisamente “definen” la arquitectura, o son los más complejos arquitectónicamente (y la &lt;strong&gt;complejidad&lt;/strong&gt; es un asunto espinoso sobre el que únicamente el arquitecto tiene potestad). El arquitecto incluso puede desviar la atención del analista hacia un grupo distinto de casos de uso y solicitar el detalle de estos para validar efectivamente dicha complejidad. También puede requerir el diseño e implementación de una o más pruebas de concepto arquitectónicas con el ánimo de comprobar la factibilidad técnico-científica de implementar una parte del software que se prevé problemática o en la que no se tiene experiencia anterior.&lt;br /&gt;&lt;br /&gt;En un mundo ideal, es deseable que el arquitecto proponga más de una arquitectura candidata y que sea un comité (de arquitectos o de varios miembros del equipo desarrollador) el que decida más adelante (durante la Elaboración) cuál es la mejor alternativa para las necesidades actuales.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;En el Final&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Cuando un proyecto de Tecnología Informática comienza &lt;strong&gt;no&lt;/strong&gt; damos cuenta del abismo colosal de realidad inexplorada que se expande ante nuestras mentes. La búsqueda inicia aquí y es nuestro compromiso revelar esas ambiciones y estrechar las contingencias de los usuarios, concebir la solución, pasar de observadores pasivos de una organización a ser coreógrafos activos de su proceso o, al menos, de parte de el. A medida que nuestro conocimiento de ese proceso aumenta, se abre la posibilidad de construir mejores artilugios de cómputo para los usuarios. Y salvo que se produzca una catástrofe natural (que en este contexto quiere decir que se &lt;strong&gt;desborden&lt;/strong&gt; los sueños de los usuarios, o que dejemos que esa visión rebase la capacidad técnica y presupuestal del proyecto), o un colapso ocasionado por factores que van más allá de lo técnico y caen en lo legal o regulatorio, estamos en camino de alcanzar, en un marco de tiempo más o menos previsible (¡estimable!), la implantación de un producto de software de alta calidad que satisfaga o resuelva las necesidades elementales de nuestros usuarios.&lt;br /&gt;&lt;br /&gt;Y lo que hará que esto sea posible es la configuración y el seguimiento de un proceso de Ingeniería maduro para las características específicas de ese proyecto en particular. En última instancia, haremos que sea permisible plasmar nuestra meta si disponemos de las herramientas y técnicas más o menos como lo he expuesto en estas Lecturas Fundamentales. El aprovechamiento de ellas (de las herramientas y de las Lecturas) es el primer paso para convertirnos en mejores profesionales de la Ingeniería del Software.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Algunas de las características y conceptos expuestos aquí se basan en la documentación de &lt;a href="http://www-128.ibm.com/developerworks/rational/products/rup"&gt;IBM Rational Unified Process&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/10/lecturas-fundamentales-10-lectura_3046.html"&gt;Lectura Fundamental Siguiente: &lt;strong&gt;“Realización de Casos de Uso: De los Objetos y sus Interacciones” &lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt; &lt;/p&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-8035482772977195965?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h-oPhl2BQVWmcFFTM9NCkG3CLA0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h-oPhl2BQVWmcFFTM9NCkG3CLA0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h-oPhl2BQVWmcFFTM9NCkG3CLA0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h-oPhl2BQVWmcFFTM9NCkG3CLA0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/Wdjkrq8-Qsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/8035482772977195965/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=8035482772977195965" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/8035482772977195965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/8035482772977195965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/Wdjkrq8-Qsk/lecturas-fundamentales-9.html" title="Lecturas Fundamentales 9" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/06/lecturas-fundamentales-9.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fSp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-919534652120771839</id><published>2007-03-08T07:33:00.000-05:00</published><updated>2007-08-02T11:15:23.555-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.555-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Analista" /><category scheme="http://www.blogger.com/atom/ns#" term="Visión" /><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Usuario" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Ingeniero de Procesos" /><category scheme="http://www.blogger.com/atom/ns#" term="Proyecto" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Concepción" /><category scheme="http://www.blogger.com/atom/ns#" term="Gerente" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 8</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-7.html"&gt;&lt;span style="font-size:85%;"&gt;Lectura Fundamental Anterior: “RUP o Todo lo que quisiste saber alguna vez de RUP y no te atreviste a preguntar…”&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lectura # 8&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;RUP: Fase de Concepción&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;“No hay nada más difícil de emprender, ni más dudoso de hacer triunfar, ni más peligroso de manejar, que el introducir nuevas leyes.”&lt;br /&gt;Nicolás Maquiavelo (El Príncipe, 1513)&lt;/span&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;“In principio creavit…”&lt;br /&gt;Génesis 1 {1:1}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Inicio o Concepción es la primera fase de RUP. El nombre no es importante, solo la meta es importante. Lo realmente trascendental es el objetivo que buscamos durante este período de gestación del proyecto: complementando lo que dije en la &lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-7.html"&gt;lectura fundamental # 7&lt;/a&gt;, la finalidad cardinal de esta fase es establecer la visión y el alcance del proyecto y del sistema, lo que se hará y no se hará dentro del proyecto y más aún, lo que hará y lo que no hará el producto a construir.&lt;br /&gt;&lt;br /&gt;Para ello, RUP nos proporciona herramientas, a manera de mecanismos y maniobras, que bien usadas nos llevan de la mano hacia la consecución del objeto primario que nos ocupa: obtener un acuerdo con todos los involucrados sobre los objetivos del ciclo de vida para el proyecto.&lt;br /&gt;&lt;br /&gt;Pero antes de abordar detalladamente la fase de Concepción como la explica RUP, quiero referirme al significado de las características del proceso durante la misma.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RUP es Dirigido por Casos de Uso y es Centrado en la Arquitectura&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Esto significa que los casos de uso son la base para el resto del proceso de desarrollo. Durante la fase de Inicio, cuantificamos y cualificamos los requisitos funcionales del sistema en términos de casos de uso. Estos se convierten en el insumo para:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crear y validar el modelo de diseño de la solución&lt;/li&gt;&lt;li&gt;Diseñar la arquitectura del sistema&lt;/li&gt;&lt;li&gt;Definir los casos y procedimientos de prueba en el modelo de pruebas&lt;/li&gt;&lt;li&gt;Planear las iteraciones&lt;/li&gt;&lt;li&gt;Elaborar la documentación de usuario&lt;/li&gt;&lt;li&gt;Hacer el despliegue del sistema&lt;/li&gt;&lt;li&gt;Sincronizar el contenido de los diferentes modelos que forman el sistema&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Los casos de uso también son usados para modelar el negocio, actividad que pocas veces es tenida en cuenta a la hora de entender el comportamiento sistemático de una organización.&lt;/p&gt;&lt;p&gt;Cualificar los casos de uso quiere decir en el contexto del proceso que el Arquitecto del software debe hacer una priorización de los mismos desde el punto de vista arquitectónico. Es decir, establecer cuales son los casos de uso que definen la arquitectura o que tienen un impacto mayor en la misma. Para ello, los Arquitectos ponemos de manifiesto nuestra experiencia en proyectos anteriores y similares, si es posible, para reconocer los casos de uso arquitecturales: El ciclo de vida del caso de uso, el número y la calidad de los elementos estructurales (tanto de arquitectura como de diseño como de implementación) que se requieren para implementar el comportamiento del caso de uso en el sistema, requisitos de desempeño, confiabilidad, soportabilidad, concurrencia y restriccio-nes de diseño, la complejidad algorítmica asociada al caso de uso, el número de escenarios del caso de uso, el ranking del caso de uso desde el punto de vista de su criticidad (esto es, si el caso de uso es requerido u obligatorio, o importante, o adicional –normalmente los casos de uso arquitectónicos se cuentan entre los dos primeros), el grado de novedad de la tecnología y las estrategias disponibles para implementar el caso de uso o, en otras palabras, la experiencia del equipo de desarrollo en el uso de tal o cual tecnología o conjunto de técnicas para resolver un problema dado, son todas variables relevantes a la hora de catalogar o evaluar los casos de uso desde una perspectiva de arquitectura.&lt;/p&gt;&lt;p&gt;La fase de inicio es exploratoria, los casos de uso, todavía en estado primitivo, corren por un río de aguas diáfanas que se precipitan desde la mente de los usuarios como huevos prehistóricos. Encontrarlos, darles un lugar en el sistema, clasificarlos, esbozarlos, modelarlos y finalmente presentarlos, es lo que hacemos como analistas durante este período del proyecto. Una vez aprobado el modelo, los casos de uso rigen los designios a veces insondables a veces meta-humanos de todo el proyecto. A los casos de uso no se les puede poner limitantes técnicas y el equipo de desarrollo debe mantenerlos como un libro abierto de referencia para decidir siempre el siguiente paso. Eso significa “dirigido por casos de uso.”&lt;/p&gt;&lt;p&gt;La arquitectura del software, por su parte, asoma tímida durante la concepción, a manera de arquitectura candidata o preliminar y debería contemplar más de una posible solución, un conjunto pequeño de alternativas de cómo se va a implementar el software y la estrategia que usaremos para abordar el tratamiento de los requisitos suplementarios o no funcionales: la vista de casos de uso o funcional, subconjunto propio del modelo de casos de uso, una vista lógica de alto nivel y quizás una perspectiva del despliegue de la aplicación, surgen de la mente creativa del arquitecto, cual visión futurista de lo que será, de cómo lucirán las entrañas del sistema una vez esté construido. Y sea cual fuere la decisión, la elección que tomemos en la siguiente fase del proyecto, la arquitectura es desde todo punto de vista restrictiva, circunscribe el diseño y, consecuentemente, la implementación y el despliegue de la solución software que se conciba. Pero a partir de ella se abordan y mitigan los riesgos técnicos del proyecto, durante las primeras iteraciones del mismo; también se construyen las bases o cimientos del sistema, unas en las que todos los requisitos conocidos y algunos de los no conocidos tengan cabida; por supuesto, la arquitectura es el eje medular alrededor del cual se construye la solución, se planea y se controla el proyecto y también, en torno al cual se asegura la calidad del producto. Eso significa “centrado en la arquitectura.”&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Para el Gazafatonario IT&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A manera de inventario, y puesto que esto no es más que un Gazafatonario, la palabra Conceptualización[&lt;strong&gt;1&lt;/strong&gt;], aunque aparece en algún diccionario de la lengua española definida simplemente como: “f. Elaboración detallada y organizada de un concepto a partir de datos concretos o reales” no es aceptada por la Real Academia de la Lengua Española. Así que seguiremos usando Inicio o Concepción para referirnos a la primera fase del ciclo de vida de acuerdo a RUP.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Roles y Responsabilidades Durante Concepción&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Un Ingeniero de Procesos, un Gerente de Proyectos, al menos un Analista de Requisitos, un Analista del Negocio y un Administrador de la Configuración y el Versionamiento son los responsables de iniciar el proyecto. Con ellos, los usuarios, clasificados en Usuarios Líderes, Usuarios Finales y otros Involucrados (stakeholders es el término que nos llega del inglés) son los encargados de dictar el problema (y el problema detrás del problema, la causa raíz), sus necesidades, y hasta sus ambiciones, sus sueños y sus esperanzas. Más adelante, un Especificador de Requisitos (realmente un escritor técnico de casos de uso que bien podría ser el mismo analista de requisitos –de hecho casi siempre lo es) y un Arquitecto del Software, se unen a los anteriores para establecer las características (de alto nivel) del software, los primeros requisitos funcionales (a manera de casos de uso) detallados, los requisitos no funcionales y la misma solución de software expresada en términos arquitectónicos y de diseño.&lt;/p&gt;&lt;p&gt;Vamos por partes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;El Ingeniero de Procesos&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Sí, RUP es un proceso configurable y adaptable a cada proyecto. Es así como lo leen, a cada proyecto. La primera conclusión que viene a mi mente, aunque reiterativa, tiene que ver con la forma de abordar el proceso. Recordemos que el proceso expone prácticas que han funcionado alguna vez, pero que no deberíamos seguir al pie de la letra, cual ensayo de laboratorio. &lt;/p&gt;&lt;p&gt;Un proyecto tiene condiciones muy particulares: el tipo de organización, más exactamente, el contexto del negocio, el tamaño del esfuerzo de desarrollo del software, el grado de novedad, el tipo de aplicación, el proceso actual de desarrollo, los problemas actuales y sus causas primarias, los factores organizacionales, las actitudes y la complejidad técnica y de gestión son algunos discriminantes que el así llamado Ingeniero de Procesos debe tener en cuenta al momento de decidir el mejor de los caminos posibles del proceso para ese proyecto.&lt;/p&gt;&lt;p&gt;Previo a ello, debemos tener claridad sobre las influencias del proceso de desarrollo: factores del dominio, por ejemplo, entre los que se cuentan factores del dominio de la aplicación, del proceso de negocio a soportar, de la comunidad de usuarios y de las ofertas disponibles de los competidores; factores del ciclo de vida como el tiempo de salida al mercado, la vida esperada del software y las versiones futuras planeadas son igualmente importantes; factores técnicos, ni más faltaba, como los lenguajes de programación a usar, las herramientas de desarrollo, las bases de datos, los frameworks de componentes y los sistemas de software existentes, constituyen influjos de peso que actúan sobre el proceso de desarrollo, junto con otros factores organizacionales cuyo nombramiento, al menos, se escapa del alcance de esta lectura fundamental.&lt;/p&gt;&lt;p&gt;Sobre el tamaño del esfuerzo del proceso de desarrollo, tenemos en cuenta aspectos medibles como el número de líneas de código entregadas, el número de casos de uso, el número de personas por mes o por alguna otra unidad de tiempo, el número de clases y de componentes, el número de tablas y de procedimientos almacenados en la base de datos, entre otros, para cuantificar la influencia en el desarrollo: a mayor tamaño de proyecto, mayor tamaño de equipo de desarrollo, el contexto del negocio pierde importancia en favor de más formalidad y más visibilidad en los requisitos, en las interfaces y en los indicadores de progreso del proyecto. Adicionalmente, para equipos geográfi-camente dispersos, incluso transoceánicos, tenemos en cuenta aspectos cruciales de comunicación y el cambio del huso horario.&lt;/p&gt;&lt;p&gt;El grado de novedad es otra condición influyente que tengo en cuenta como ingeniero de procesos. Este grado de novedad es relativo al equipo de desarrollo y a la organización que lo envuelve: factores como la madurez de la organización y del proceso de desarrollo (medido vía CMMi o algún otro modelo similar), los activos del proceso, las habilidades actuales del personal, la composición y el entrenamiento del equipo y la adquisición de herramientas y otros recursos para el proyecto, son definitivos a la hora de configurar el proceso: si se trata de un sistema nuevo, establezco fases de concepción y de elaboración más largas y más iteraciones en esta última; también hago más énfasis en la captura y administración de requisitos, el modelo de casos de uso, la arquitectura y en la mitigación de riesgos. Entre tanto, para un sistema en evolución, enfatizo en la gestión de cambios y en la incorporación o no de código legado.&lt;br /&gt;En breve, durante la concepción, el ingeniero de procesos además elabora el caso de desarrollo, prepara las plantillas y las guías para el proyecto y, con un especialista en herramientas, selecciona las herramientas más adecuadas para el proyecto. Son materias que tienen tanto extensión como profundidad y abordarlas bien podría ser objeto de futuras Lecturas Fundamentales.&lt;/p&gt;&lt;p&gt;Lo que sí tengo que decir antes de cerrar esta puerta es que el ingeniero de procesos es al proceso lo que el arquitecto es al sistema y recuerden: la calidad de un producto está determinada en gran medida por la calidad del proceso que se usa para desarrollarlo y mantenerlo[&lt;strong&gt;2&lt;/strong&gt;].&lt;/p&gt;&lt;p&gt;&lt;strong&gt;El Analista de Procesos del Negocio&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Hablo de procesos distintos. En el apartado anterior me refería al proceso de desarrollo de software, mientras que en este me refiero al conjunto de procesos mediante los cuales una compañía organiza su actividad para conseguir sus objetivos. Cada proceso del negocio se identifica por un repertorio de datos que son elaborados y operados mediante un conjunto de quehaceres, en los que ciertos agentes (trabajadores, proveedores, departamentos, entre otros) interactúan de acuerdo a un flujo de trabajo determinado. Además, estos procesos dependen de un conjunto de reglas de negocio que fijan las políticas y la arquitectura de la información de la empresa. &lt;/p&gt;&lt;p&gt;El analista de procesos del negocio o simplemente analista del negocio es el responsable de definir la arquitectura del negocio y los actores y casos de uso del negocio, lo mismo que la interacción entre ellos. El modelo producido por este analista delimita la organización desde el punto de vista del sistema a desarrollar. &lt;/p&gt;&lt;p&gt;Entender la organización es un aspecto clave en todo desarrollo de software: enterarse de los procesos de negocio, quienes intervienen en su ejecución, sus entradas y sus resultados, como se manejan las excepciones, como se mantiene la integridad de la información y la consistencia entre procesos; también, conocer hacía donde va la organización, las expectativas de los usuarios, la visión que ellos tienen sobre lo que será y no será el negocio en el futuro, al menos, durante el ciclo de vida esperado del sistema.&lt;/p&gt;&lt;p&gt;Ahora bien, idealmente, la construcción de sistemas de software es uno de esos buenos momentos para cambiar procesos de negocio, no porque el negocio tenga que adaptarse al nuevo sistema, sino porque el esfuerzo de revisión de tales procesos puede llegar a ser tan significativo, tan profundo, que se encuentren oportunidades de mejora. Esto, por supuesto, es completa responsabilidad de la organización para la cual se construye el sistema y el área de TI, como buena conocedora de estos procesos, debe apoyar el diseño y la implantación del nuevo modelo y de paso quedar con el nuevo conocimiento para futuros ejercicios de esta índole.&lt;/p&gt;&lt;p&gt;Por supuesto, este trabajo implica un tiempo y recursos adicionales considerables que casi nunca son estimados a la hora de emprender un proyecto de tecnología informática, de tal forma que la cautela y el tratamiento efectivo de las expectativas de nuestros clientes son recomendables.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;El Gerente de Proyectos&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Planea, maneja y asigna recursos, determina prioridades, coordina las interaccio-nes con los usuarios y mantiene el foco del equipo del proyecto. También establece un conjunto de prácticas para asegurar la integridad y la calidad de los entregables del proyecto. Es un orquestador, articula y coordina los movimientos que se den en el proyecto.&lt;/p&gt;&lt;p&gt;Es el gerente quien precisamente concibe el proyecto mediante la transformación de una idea inicial a un estado en el que, soportado en razones de peso, pueda tomar una decisión sobre continuarlo o abandonarlo. Para lo que nos ocupa la mayor parte del tiempo, este “abandonarlo” más bien se convierte en un “ajustar” algunas condiciones críticas del proyecto, como el tiempo, el talento humano necesario para llevarlo a cabo y, por consiguiente, el presupuesto y la estrategia para alcanzar el éxito.&lt;/p&gt;&lt;p&gt;Durante la concepción, el gerente del proyecto identifica y evalúa los riesgos, elabora un caso de negocio e inicia el proyecto. Más adelante, en la misma concepción, planea el proyecto, teniendo en cuenta las métricas, los riesgos, los criterios de aceptación del producto, las tácticas para la resolución de problemas, el proceso de aseguramiento de la calidad, la organización del equipo de desarrollo, los modos de monitoreo y control del proyecto y las fases e iteraciones del mismo. Para ello se alimenta de toda la materia prima que los demás responsables de la concepción le transmitan. Es el gerente quien también decide si se han alcanzado los objetivos de la fase de concepción y si es viable empezar la fase de Elaboración.&lt;/p&gt;&lt;p&gt;Tanto en Concepción, como en el resto del proyecto, el gerente tiene una perspectiva de mediana profundidad para poder izar los hilos del proyecto con mayor propiedad y asegurar, casi como un dogma, que se pueda hacer una entrega, que se pueda avanzar o, si por el contrario, que se deba replantear la técnica y reorientar el enfoque (corregir el rumbo). Y el final de la fase de concepción es buen momento para asegurarnos de la idoneidad (en cuanto talento, competitividad, aptitud) del equipo de desarrollo, de indagar si los miembros del equipo tienen las habilidades y destrezas suficientes, comparten todos la misma visión de lo que vendrá, soportarán la presión, están dispuestos a dar ese “delta de t” (y otros deltas) necesarios para triunfar en todo proyecto. Desde este punto de vista, el destino del proyecto, incierto hasta este punto, depende enteramente de su gerente.&lt;/p&gt;&lt;p&gt;Bueno, esto no lo dice ningún proceso, no está escrito en ningún lado, simplemente es y con eso basta.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Continuará…&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Hace poco uno de mis revisores de cabecera me dijo que estas lecturas fundamentales estaban quedando muy largas. Yo les reenvío la inquietud, ¿ustedes qué piensan? En cualquier caso, les he dado suficiente tiempo, creo, para que hagan la mejor de las lecturas. Estoy atento, los escucho.&lt;/p&gt;&lt;p&gt;De todas formas, es evidente que esta lectura amerita otra parte, donde concluiremos con los aspectos más importantes de la fase de concepción. Hasta la próxima entonces.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Algunas de las características y conceptos expuestos aquí se basan en la documentación de &lt;a href="http://www-128.ibm.com/developerworks/rational/products/rup"&gt;IBM Rational Unified Process&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1&lt;/strong&gt;. Diccionario de la lengua española © 2005 Espasa-Calpe S.A., Madrid:&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Conceptualización &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;f. Elaboración detallada y organizada de un concepto a partir de datos concretos o reales.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;. Basado en principios de Administración Total de la Calidad enseñados por Shewhart, Juran, Deming y Humphrey.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/06/lecturas-fundamentales-9.html"&gt;Lectura Fundamental Siguiente: “RUP: Fase de Concepción. Parte 2.”&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-919534652120771839?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8BGRizI3QuT0XW_MXnxZHg1Mnwc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8BGRizI3QuT0XW_MXnxZHg1Mnwc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8BGRizI3QuT0XW_MXnxZHg1Mnwc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8BGRizI3QuT0XW_MXnxZHg1Mnwc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/v6FfwYBkcVM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/919534652120771839/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=919534652120771839" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/919534652120771839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/919534652120771839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/v6FfwYBkcVM/lecturas-fundamentales-8.html" title="Lecturas Fundamentales 8" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/03/lecturas-fundamentales-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMSH47eCp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-3170661278256387642</id><published>2007-02-21T14:40:00.000-05:00</published><updated>2007-08-02T11:14:49.000-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:14:49.000-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Construcción" /><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Disciplinas" /><category scheme="http://www.blogger.com/atom/ns#" term="Iteraciones" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Elaboración" /><category scheme="http://www.blogger.com/atom/ns#" term="Transición" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Concepción" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><category scheme="http://www.blogger.com/atom/ns#" term="Fases" /><title>Lecturas Fundamentales 7</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-6.html"&gt;Lectura Fundamental Anterior: “De Procesos y de Humanos” &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lectura # 7&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;RUP o Todo lo que quisiste saber alguna vez de RUP y no te atreviste a preguntar… &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;RUP es un proceso punto.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#6600cc;"&gt;&lt;br /&gt;&lt;/span&gt;¿Hace falta decir algo más? Sí, todo. Aquí vamos.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;RUP es un proceso y una metodología y un framework. RUP nos habla de actividades, de responsables, de procedimientos de trabajo, de casos de uso, de arquitectura del software, de iteraciones e incrementos, de riesgos, de modelos y de modelado con UML, de análisis y diseño del software, de pruebas y control de calidad; RUP también nos habla de guías y listas de chequeo, de herramientas del proceso (no software no hardware), de herramientas de software para apoyar el proceso; y también de gerencia de proyectos, de control de versiones, de configuración y adaptación del proceso, de prácticas contextuales; RUP nos cuenta los porqué de las cosas o, al menos, hace un recuento de la experiencia de otros; RUP tiene dinámica y tiene estática; RUP proporciona mecanismos para que hagamos mejor nuestro trabajo y nos lleva de la mano hacia el éxito y hacia la calidad total.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Framework, Proceso y Metodología&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Esto, por ningún motivo es un uso estándar. En el pasado encontré útil diferenciar &lt;strong&gt;proceso&lt;/strong&gt; de &lt;strong&gt;metodología&lt;/strong&gt; como explico a continuación: literalmente, un proceso es un conjunto de pasos para realizar algo, incluyendo quien hace que, cuando y todas esas cosas que expuse en la &lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-6.html"&gt;Lectura Fundamental #6&lt;/a&gt;. Estrictamente hablando, RUP no contiene nada de esto. Los flujos de trabajo y las actividades no están entretejidos en procedimientos específicos organizados en el tiempo. De esta forma, RUP es referenciado como un &lt;em&gt;framework&lt;/em&gt; de procesos que contiene piezas de las cuales se puede escribir un proceso para una organización. Forzosamente, este proceso debería ser configurado para la organización y sus roles específicos, su estructura y sus objetivos, entre otros.&lt;br /&gt;&lt;br /&gt;RUP también es una metodología. Esta afirmación quiere decir que RUP es una base teórico-conceptual detallada para hacer las cosas de cierta manera. Es como una enciclopedia. De este modo, cuando un proceso dice “escriba un caso de uso” hay mucha información en RUP sobre como y aún porqué escribir casos de uso.&lt;br /&gt;&lt;br /&gt;Usando los términos así, se aclara la confusión en las empresas que hablan de “hacer el proceso” o “tener un proceso” cuando simplemente quieren decir que tienen algunos procedimientos de trabajo. Adoptar una metodología es algo más –significa involucrarse con un &lt;em&gt;framework&lt;/em&gt; conceptual y un conjunto de métodos. Estos métodos entonces necesitan anidarse en procedimientos que concuerden con la organización.&lt;br /&gt;&lt;br /&gt;En aquel tiempo también encontré otros dos términos relacionados a los anteriores que debía entender: método y técnica. El primero se refiere a una descripción detallada de quien hace que, cuando y como; se parece mucho a metodología, ni más faltaba, pero hay una diferencia substancial que haré evidente en breve. Mientras tanto, la técnica es mucho más detallada y, por consiguiente, aborda o trata un área muy especializada.&lt;br /&gt;&lt;br /&gt;Esto también significa que un framework puede contener varios procesos, un proceso puede contener varios métodos y un método puede contener varias técnicas. Es difícil de decir en que punto se convierte una técnica en método, lo importante es que todos estos conceptos, concluí, es que son parte del mismo cuadro.&lt;br /&gt;&lt;br /&gt;Como siempre, hice uso de Mi Gazafatonario para establecer definiciones más semánticas. Este fue el resultado:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 14&lt;/strong&gt;: Un &lt;em&gt;&lt;strong&gt;framework &lt;/strong&gt;&lt;/em&gt;se refiere a un número de bloques de construcción predefinidos con los cuales es posible configurar un proceso, método, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 15&lt;/strong&gt;: Un &lt;strong&gt;proceso &lt;/strong&gt;se refiere a una serie de acciones, cambios o funciones que entregan un resultado (un flujo). Cuando hablamos de RUP, es útil recordar que el proceso es lo que tiene lugar en el “mundo real” mientras que la &lt;strong&gt;descripción del proceso&lt;/strong&gt; es lo que está documentado en el producto RUP como tal… ¡algunas veces éstas son dos cosas distintas!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 16&lt;/strong&gt;: una &lt;strong&gt;metodología &lt;/strong&gt;se refiere al cuerpo completo de prácticas (una práctica es una forma regular y sistemática de realizar alguna cosa), procedimientos y reglas usados por quienes trabajan en una disciplina (por ejemplo en la IT); pero una metodología también se refiere al estudio teórico del análisis de tales métodos de trabajo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 17&lt;/strong&gt;: un &lt;strong&gt;método&lt;/strong&gt;, por otro lado, se refiere a solamente una de esas prácticas.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 18&lt;/strong&gt;: Una &lt;strong&gt;técnica &lt;/strong&gt;se refiere al procedimiento sistemático mediante el cual una tarea compleja o científica se lleva a cabo.&lt;br /&gt;&lt;br /&gt;Eso era entonces, era feliz e indocumentado y &lt;span style="font-family:georgia;font-size:85%;"&gt;“el mundo era tan reciente, que muchas cosas carecían de nombre, y para mencionarlas había que señalarlas con el dedo."&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;1&lt;span style="font-family:georgia;font-size:85%;"&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Hoy, estos conceptos tienen más vigencia que nunca.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Comentario del Autor&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Confieso que a pesar de haber hecho docenas de presentaciones sobre RUP y de haber escrito algunos artículos al respecto, me encontré en una encrucijada al momento de abordar este nuevo volumen de lecturas fundamentales sobre el tema. Los enfoques pueden ser muchos: que si las características, que si las fases, que si las disciplinas, que si las actividades, que si las plantillas, en fin, eran muchas las posibilidades. Por fin inicié como acaban de leer, pero entonces algo, quizás sensato quizás absurdo, pasó por mi mente: acaso la mayoría de ustedes nunca ha tenido una primera vez con RUP. Entonces decidí volver a lo fundamental.&lt;br /&gt;&lt;br /&gt;Aquí vamos otra vez.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Raíces&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Para lo que nos interesa, RUP es un proceso de Ingeniería de Software que busca asegurar la producción de software de alta calidad, satisfaciendo las necesidades de un cliente (y estoy usando un espectro muy amplio de la palabra “cliente” al abordar desde usuarios finales y a otros involucrados hasta las organizaciones que de una u otra forma se ven impactadas por el software), con un plan y presupuesto previsibles.&lt;br /&gt;&lt;br /&gt;Pero también podemos mirar a RUP como un conjunto extenso, en lo horizontal, y profundo, en lo vertical, de experiencias documentadas alrededor de los distintos procesos relacionados con el ciclo de vida de los sistemas. Son prácticas dispuestas es una dimensión estática que establecen estándares probados, en principio, para desarrollar software, a través de una dimensión dinámica: el tiempo. Los procedimientos están enmarcados en procesos, conocidos también como disciplinas o flujos de trabajo: Modelado del Negocio, Administración de Requisitos, Análisis y Diseño, Implementación, Pruebas, Administración de la Configuración y Control de Versiones, Administración del Entorno y, por último pero no menos importante, Gerencia de Proyectos. Entre tanto, el tiempo está dividido en Fases: Inicio, Elaboración, Construcción y Transición. A su vez, cada fase, esta fraccionada en etapas o ciclos pequeños llamados Iteraciones.&lt;br /&gt;&lt;br /&gt;A través del tiempo hay que alcanzar hitos o cumplir objetivos, en cada fase y, dentro de ellas, en cada iteración. Para alcanzar esas metas, hay que llevar a cabo las funciones definidas en los distintos procesos que, a su vez, tienen objetivos más específicos. La suma de todos estos propósitos alcanzados resulta precisamente en la finalidad universal de todo proceso y RUP no es la excepción: la construcción de un sistema de software de calidad excelsa.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Metas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Inicio o &lt;strong&gt;Concepción&lt;/strong&gt; es la primera fase de RUP. El propósito principal es que alcancemos un acuerdo entre todos los involucrados sobre los objetivos del ciclo de vida para el proyecto. Los involucrados, mejor conocidos como stakeholders, son todas las personas y entidades que de una u otra forma influyen o se ven afectados por el desarrollo del proyecto y por el producto que resulta del proyecto. Ejemplos de involucrados son: usuarios finales, todo el equipo de desarrollo, patrocinadores del proyecto (los productores ejecutivos), socios de negocios, proveedores, clientes, otras áreas de la compañía distintas a aquella para la cual se elabora el software, entre otros.&lt;br /&gt;&lt;br /&gt;Al final de la fase de Inicio, revisamos los objetivos del ciclo de vida y decidimos proceder con el proyecto o cancelarlo. Esto último puede ocurrir porque no alcanzamos el hito de la fase o porque, al hacerlo, encontramos que no es posible, tanto técnica como financieramente (y con frecuencia una combinación de ambos factores), continuar con el proyecto.&lt;br /&gt;&lt;br /&gt;En particular, durante esta fase elaboramos el modelo del negocio, de ser necesario, y establecemos la visión y el alcance del proyecto, es decir, lo que haremos y lo que no haremos dentro del proyecto; también definimos un plan de manejo de riesgos, lo mismo que diseñamos, implementamos y evaluamos una o más pruebas de concepto arquitectónicas, a criterio del Arquitecto del Software o de los analistas más experimentados del equipo. Estas pruebas se ejecutan para tener la tranquilidad de que distintas estrategias de índole técnica o tecnológica tendrán cabida durante la construcción del software, es decir, es posible realizarlas con éxito. Con todo lo anterior, elaboramos el Plan de Desarrollo de Software o, al menos, una agenda viable para el proyecto que defina tiempos y número de iteraciones potenciales por fase, lo mismo que el talento humano asignado a cada iteración.&lt;br /&gt;&lt;br /&gt;Por su parte, el objetivo principal de la fase de &lt;strong&gt;Elaboración&lt;/strong&gt; es delinear la arquitectura del software y proporcionar una base estable para el grueso del diseño e implementación en la siguiente fase. Pero además de bosquejar la Arquitectura, durante la Elaboración probamos esa arquitectura mediante la implementación de la funcionalidad más significativa (precisamente, la que tiene un mayor impacto en la arquitectura) y una evaluación de los riesgos técnicos del proyecto, es decir, los que tienen que ver con el desempeño esperado, la seguridad, la infraestructura requerida para correr el sistema, la usabilidad y otras restricciones de diseño y del entorno de desarrollo del software. Al final de la Elaboración obtenemos una &lt;strong&gt;arquitectura estable&lt;/strong&gt; vía prototipos arquitectónicos sucesivos, que se construyen durante cada uno de los ciclos o etapas en los que se divida la fase.&lt;br /&gt;&lt;br /&gt;Mas adelante, en la fase de &lt;strong&gt;Construcción&lt;/strong&gt;, diseñamos, implementamos e integramos el software en su totalidad, basado en la arquitectura prescrita durante Elaboración. En esencia, la Construcción termina con lo que llamamos la versión βeta del producto, listo para someterlo a procedimientos de certificación de calidad. Durante esta fase realizamos pruebas que bien podríamos llamar Pruebas Alfa, completamos la capacidad operacional inicial del sistema y finalizamos la documentación del manual del usuario, cuando hay lugar a ello.&lt;br /&gt;&lt;br /&gt;Al final, durante la fase de &lt;strong&gt;Transición&lt;/strong&gt;, nos aseguramos de tener el software listo para entregar a nuestros usuarios quienes, revisan y aprueban todos los entregables del proyecto.&lt;br /&gt;&lt;br /&gt;Por su parte, las &lt;strong&gt;iteraciones&lt;/strong&gt;, durante las fases de Elaboración y Construcción sobre todo, tienen un único objetivo: la entrega de software ejecutable y su documentación asociada. Aunque tengo mucho por decir sobre el desarrollo iterativo, esta simple premisa, software ejecutable más documentación, encierra un gran significado que debería ser evidente para todos.&lt;br /&gt;&lt;br /&gt;Conocer la intención de cada una de las fases del ciclo de vida nos da una idea inicial de las acciones a seguir para alcanzar tales metas. Les hablo de tareas por hacer, procedimientos por ejecutar, los que finalmente nos conducirán al resultado esperado: un producto de notable calidad y valor. Con esto quiero decir que pensamos en actividades antes que en “entregables”.&lt;br /&gt;Estos últimos son consecuencia inmediata de aquellas, son el recipiente que debemos llenar.&lt;br /&gt;&lt;br /&gt;Ahora bien, el propósito principal del &lt;strong&gt;Modelado del Negocio&lt;/strong&gt; gira en torno a entender el problema actual de la organización objetivo e identificar mejoras potenciales; también, evaluar el impacto del cambio organizacional. Esto último debido a que un sistema de software trae un nuevo orden a las cosas, una nueva forma de desempeñar funciones y procedimientos en la organización. En esta disciplina también nos aseguramos de contar con un entendimiento común del negocio para el cual desarrollamos el sistema; y cuando digo común, me refiero a los usuarios, a los desarrolladores y a todos los demás involucrados en el proyecto.&lt;br /&gt;&lt;br /&gt;A su vez, la disciplina de &lt;strong&gt;Requisitos&lt;/strong&gt; establece y mantiene un acuerdo entre nosotros y los usuarios sobre lo que el sistema debe hacer; asimismo, define los límites y proporciona bases para la estimación de costos y tiempos para el desarrollo del sistema. Esta disciplina también aporta lo necesario para planear el contenido técnico de las iteraciones y permite definir una interfase de usuario para el sistema, conduciendo nuestro enfoque hacia las necesidades y metas de los usuarios. Un aspecto importante de este proceso de Requisitos es que expone las prácticas recomendadas para instaurar una buena comunicación con los usuarios y el resto de la organización destino del software.&lt;br /&gt;&lt;br /&gt;Me queda bien decir en este punto de la lectura es que a menudo no se conoce donde termina la administración de requisitos y donde comienza el análisis y diseño del sistema. Si bien, el Analista del Sistema interviene en ambos procesos, debemos tener claro los límites de uno y otro, para no exponer a los usuarios a aspectos de corte técnico inherentes al Análisis o al Diseño, o aún a la misma Arquitectura del software. Durante la Ingeniería de Requisitos, el Analista del Sistema tiende a ser un Especificador de Requisitos; mientras tanto, durante el Análisis y Diseño, ese mismo Analista tiende a ser un Diseñador y, quizás, un Arquitecto.&lt;br /&gt;&lt;br /&gt;Precisamente, el propósito de &lt;strong&gt;Análisis y Diseño&lt;/strong&gt; es transformar los requisitos en un diseño del sistema a construir, adaptar ese diseño para que concuerde con el entorno de implementación teniendo en cuenta, entre otros, factores de desempeño y de usabilidad; Y es también este proceso el que nos ayuda a determinar una arquitectura robusta que albergue el sistema.&lt;br /&gt;Importante es que la línea divisoria entre el Análisis y el Diseño del sistema es bastante tenue pero a la vez bien definitoria. Durante el análisis definimos una arquitectura candidata, ejecutamos una síntesis arquitectónica y analizamos el comportamiento del sistema; en tanto que en diseño, diseñamos componentes, base de datos y servicios, y hasta encontramos una actividad llamada Diseñar Casos de Uso, donde exhibimos todos los aspectos técnicos propios de un caso de uso.&lt;br /&gt;&lt;br /&gt;Después del diseño está la &lt;strong&gt;Implementación&lt;/strong&gt;, cuya finalidad es que podamos definir la organización del código, en términos de subsistemas de implementación organizados en capas. Es en este proceso donde convertimos los elementos de diseño en elementos de implementación (archivos fuentes, binarios, programas ejecutables, entre otros); también aquí probamos como unidades los componentes desarrollados e integramos e un sistema ejecutable los resultados producidos por cada uno de nuestros programadores.&lt;br /&gt;&lt;br /&gt;Quiero enfatizar en lo de pruebas unitarias o pruebas de unidad. Éstas son ejecutadas por el &lt;strong&gt;Implementador&lt;/strong&gt;, precisamente para verificar tanto la especificación como la estructura interna de una unidad de código, una clase, por ejemplo. Al validar que el componente está trabajando correctamente antes de someterlo a pruebas más formales, estamos asegurándonos de que la transición del código fuente al sistema ejecutable integrado será llevadera. Así como las pruebas hacen parte intrínseca y básica del desarrollo del software, las pruebas de unidad son congénitas a la implementación.&lt;br /&gt;&lt;br /&gt;Ya que hablo de &lt;strong&gt;Pruebas&lt;/strong&gt;, esta disciplina, que actúa como un proveedor de servicios a las demás disciplinas de RUP, nos permite enfocarnos en evaluar y valorar la &lt;strong&gt;Calidad del Producto&lt;/strong&gt; mediante la búsqueda y documentación de defectos, y la validación y prueba de las suposiciones hechas en el diseño y en la especificación de requisitos vía demostraciones concretas. &lt;strong&gt;Los Probadores&lt;/strong&gt; también aconsejan o asesoran sobre la calidad percibida en el software; de hecho, el equipo de pruebas es quizás la máxima autoridad del proyecto, dado el carácter restrictivo que tienen sus funciones. Ya alguna vez había señalado que en el futuro no habría gerentes de proyecto como los conocemos hoy, sino gerentes de calidad.&lt;br /&gt;&lt;br /&gt;La documentación de RUP anota una diferencia interesante que existe entre la disciplina de Pruebas y las demás disciplinas en RUP: esencialmente, Pruebas encuentra y expone debilidades en el software. Es interesante porque para conseguir mayores beneficios, necesitamos una filosofía general diferente a la que usamos durante la Administración de Requisitos, Análisis y Diseño e Implementación. Estos tres procesos se enfocan en la &lt;strong&gt;completitud&lt;/strong&gt; del software, mientras que Pruebas se enfoca en la &lt;strong&gt;incompletitud&lt;/strong&gt;. Así que no es gratuito aquello de que es mala práctica que sean los mismos desarrolladores quienes ejecuten las pruebas. Además está demostrado que celularmente es cuasi-imposible que un desarrollador tome el camino requerido para encontrar lo que le hace falta a su creación.&lt;br /&gt;&lt;br /&gt;Todavía hay más disciplinas. La de &lt;strong&gt;Despliegue&lt;/strong&gt;, por ejemplo, nos guía sobre las actividades necesarias para asegurar que el producto de software esté disponible para los usuarios. Aquí, &lt;em&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-size:85%;"&gt;disponible&lt;/span&gt; &lt;/span&gt;&lt;/em&gt;no sólo quiere decir “en producción”, sino también utilizable para pruebas y demostraciones.&lt;br /&gt;&lt;br /&gt;Todos los procesos anteriores, conforman las Disciplinas Básicas del ciclo de vida. Pero existen otros procesos, que son transversales a cualquier proyecto y sirven de apoyo durante todo el ciclo de vida de desarrollo: la disciplina de &lt;strong&gt;Administración de la Configuración y Versiones&lt;/strong&gt; nos permite controlar y sincronizar la evolución del conjunto de Productos de Trabajo que componen un sistema de software. Por su parte, la disciplina del Entorno organiza los elementos del método que suministran el entorno de desarrollo de software que apoya al equipo de desarrollo, incluyendo tanto procesos como herramientas; al hacer esto, esta disciplina soporta los demás procesos.&lt;br /&gt;&lt;br /&gt;En breve, la disciplina del &lt;strong&gt;entorno&lt;/strong&gt; es la que nos provee los mecanismos clave para configurar y adaptar el proceso para cada proyecto, brindándonos herramientas para cuantificar y cualificar distintas variables que afectan el desarrollo de un producto de software incluyendo el tiempo y los recursos disponibles, la complejidad del producto, la tecnología a usar, la experiencia del equipo de desarrollo, el conocimiento que este tenga del negocio, el tipo de cliente final, información de la competencia y el grado de formalidad, entre otros.&lt;br /&gt;&lt;br /&gt;Finalmente, la &lt;strong&gt;Gerencia de Proyectos&lt;/strong&gt; exhibe las prácticas recomendadas para los procesos de Inicio, Planeación, Ejecución, Control y Cierre de proyectos (incluyendo el cierre de iteraciones y de fases). Esta disciplina nos propone actividades y estructuras para la planeación de proyectos, la administración adecuada de riesgos, lo mismo que para monitorear el avance del proyecto y gestionar las métricas del mismo.&lt;br /&gt;&lt;br /&gt;Tendremos mucho espacio, en futuras lecturas fundamentales, para hablar de todos y cada uno de estos procesos. Lo importante, por ahora, es que para alcanzar cada una de estas metas, las actividades propuestas son dirigidas por los casos de uso, centradas en la arquitectura del software además de iterativas, es decir, se repiten una y otra vez, a lo largo de todo el proyecto, quizás hasta el cansancio. Esta última característica ciertamente es como una revolución, de hecho, entender el modelo de desarrollo por ciclos cortos de tiempo implica experimentar una profunda y quizás traumática transformación a varios niveles de nuestras creencias sobre la forma como desarrollamos software.&lt;br /&gt;&lt;br /&gt;Aún hoy, muchos proyectos “rupizados” después, muchos años después, me pregunto si lo que hacemos más bien es una secuencia continuada de “cascadas” en vez de seguir prácticas realmente iterativas e incrementales.&lt;br /&gt;&lt;br /&gt;Trataremos de dilucidar este y otros temas alrededor de RUP, por supuesto, en nuestra siguiente lectura fundamental.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;Algunas de las características y conceptos expuestos aquí se basan en la documentación de &lt;/span&gt;&lt;a href="http://www-128.ibm.com/developerworks/rational/products/rup"&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;IBM Rational Unified Process&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;"&gt;1. Cien Años de Soledad, Gabriel García Márquez. Página 1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;L&lt;a href="http://gazafatonarioit.blogspot.com/2007/03/lecturas-fundamentales-8.html"&gt;ectura Fundamental Siguiente: “RUP: Fase de Concepción”&lt;/a&gt;&lt;/strong&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/03/lecturas-fundamentales-8.html"&gt; &lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="mailto:lucho.salazar@gmail.com"&gt;&lt;span style="font-size:85%;"&gt;lucho.salazar@gmail.com&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-3170661278256387642?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ahH_k38yRlDriTTMSDxDz02ZQfM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ahH_k38yRlDriTTMSDxDz02ZQfM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ahH_k38yRlDriTTMSDxDz02ZQfM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ahH_k38yRlDriTTMSDxDz02ZQfM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/NdgOb1T8kUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/3170661278256387642/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=3170661278256387642" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/3170661278256387642?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/3170661278256387642?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/NdgOb1T8kUU/lecturas-fundamentales-7.html" title="Lecturas Fundamentales 7" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fSp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-9067828423890547398</id><published>2007-02-06T17:14:00.000-05:00</published><updated>2007-08-02T11:15:23.555-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.555-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 6</title><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html"&gt;&lt;span style="font-size:85%;"&gt;Lectura Fundamental Anterior: Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 2 de 2&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lectura # 6&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;De Procesos y de Humanos&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;“Hay ciertos privilegios comunes a un escritor cuyos beneficios, espero, no haya razón para dudar; particularmente, que si no se me entiende, se debería concluir que algo muy útil y profundo se esconde debajo; y también, que si cualquier palabra o frase es impresa en un carácter diferente, debería pensarse que contiene algo extraordinario o ingeniosamente sublime.”&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Jonathan Swift, &lt;/span&gt;&lt;a title="w:A_Tale_of_a_Tub" href="http://en.wikipedia.org/wiki/A_Tale_of_a_Tub"&gt;&lt;span style="font-size:85%;"&gt;A Tale of a Tub&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, Prefacio (1704)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Jochen Krebs dice en un artículo reciente: “Seguir un proceso de ingeniería de software implica un compromiso con la consistencia y estandarización.”&lt;strong&gt;1&lt;/strong&gt; Y más adelante expone: “Desde una perspectiva organizacional, emplear especialistas certificados en RUP crea un ambiente consistente para la comunicación y la colaboración entre los miembros del equipo del proyecto y los demás involucrados, lo cual es la base para la eficiencia y la productividad.”&lt;strong&gt;2&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Esta misma convicción me acompañó desde el instante en que la irreparable voluntad del destino me condujo a usar RUP por primera vez hace ya unos seis años que, convertidos a “años TI”, bien podrían ser treinta o cuarenta. Pero también desde entonces me inquieta férreamente, como una espina clavada en el cerebro, el motivo por el cual en una cultura como la nuestra no hayamos logrado la madurez suficiente y necesaria para enfrentar todos y cada uno de nuestros proyectos con el éxito debido. Pues bien, este es un nuevo intento por remediar esta situación. Hablemos de Procesos.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Definición 13&lt;/strong&gt;: Un proceso es un conjunto de pasos o acciones parcialmente ordenadas mediante las cuales se busca un objetivo. Un proceso define quién hace qué, cuándo hacerlo y cómo alcanzar ese objetivo.&lt;/p&gt;&lt;p&gt;Lo primero que se me ocurre agregar a esta definición sistémica es que no tiene nada que ver con artefactos documentarios o el puro acto de documentar. Lo aclaro porque en mis continuas asesorías todavía me encuentro con la excusa de “es que nosotros no seguimos ningún proceso porque no hay tiempo para documentar.” Ahora bien, en este contexto, “parcialmente ordenadas” significa que no siempre tenemos que seguir caminos iguales. Es otra aclaración importante porque tendemos a creer que un proceso es una receta o una fórmula que siempre debe llevar los mismos ingredientes y prepararse de idéntica forma y no es así: un proceso se configura o se adapta, no solo para cada empresa, sino para cada proyecto. Y para el caso de la TI, el objetivo del proceso es desarrollar un producto de software nuevo (y estoy usando un término bastante general al decir “producto de software” porque soy de los que consideran al software como un medio y el verdadero producto es el conocimiento contenido en el software), o hacer el mantenimiento de uno existente. Justamente, otro error común es creer que no podemos dar soporte a un sistema de software usando un proceso si este sistema no fue desarrollado originalmente usando ese proceso.&lt;/p&gt;&lt;p&gt;En la segunda parte de la definición, Quién se refiere a los practicantes, actuarios (no actores) en el sentido de actuar, o a los ejecutantes de las acciones. Normalmente es un equipo de personas y, hoy más que nunca, de máquinas y herramientas a nuestra disposición. Entre tanto el Qué da cuenta precisamente de las acciones o pasos que se ejecutan o llevan a cabo por esas personas o herramientas. Son funciones que se suceden en el tiempo, pero que se repiten continuamente una y otra vez (de forma iterativa) hasta alcanzar el resultado esperado. Se trata de tareas más o menos simples, muchas de ellas mecánicas, que se pueden hacer en días o en horas. Esta sucesión de momentos redundantes señalan el Cuándo del enunciado; son instantes que se multiplican durante un proyecto y en muchos proyectos, de tal forma que con el paso del tiempo podemos llegar a predecir con gran exactitud cuando pasarán y cuanto tardará su ejecución; al menos esa es la presunción al usar un proceso: estimaciones más precisas y la conversión del mal llamado “arte” de la programación de computadores en Ingeniería, en ciencia numérica que pueda ser cuantificada. Y finalmente, el Cómo, constituido por los medios, las herramientas (y no me refiero siempre a maquinaria) y las técnicas proporcionadas por el proceso, que no son más que una suma de prácticas documentadas que han funcionado al menos una vez para al menos una persona en al menos un entorno.&lt;/p&gt;&lt;p&gt;Esto último es muy importante asimilarlo con cuidado, porque también tenemos la tendencia a asumir que todo lo que está por escrito sirve para cualquier ocasión cuando una buena práctica es medir distintas variables relacionadas con el hábitat, con los miembros del equipo, con la economía, con la cultura y hasta con la idiosincrasia de las personas para decidir cual es la mejor trayectoria a seguir.&lt;/p&gt;&lt;p&gt;Un proceso se documenta: esto mejora su difusión en cada una de las dimensiones de la compañía que lo adopta, clarifica conceptos y estandariza el uso del mismo. También permite la medición del mejoramiento del proceso. Con esto en mente, un proceso se sigue: lo que pasa es que el seguimiento no es del tipo “receta de cocina”, es decir, no siempre tenemos que participar de acciones semejantes, construir artefactos semejantes, ni actuar tipo “robot” sistemático. Eso ocurre esencialmente porque los actuantes del proceso medimos además variables del ambiente en el que nos transportamos a través del ciclo de vida del desarrollo del software. Variables como el tiempo disponible, la criticidad y complejidad del software, el equipo del proyecto (aspectos como experiencia técnica, conocimiento del negocio y del proceso usado influyen), herramientas de apoyo, modo de utilización del proceso, entre muchas otras, se usan para adaptar el proceso al proyecto que está iniciando.&lt;/p&gt;&lt;p&gt;En ese orden de ideas, un proceso puede ser pequeño al comienzo: y es una buena práctica que sea pequeño para empezar a usarlo. De hecho, es posible emplear sólo una pequeña parte del proceso: la fase de inicio, por ejemplo, o solamente una disciplina como la Gerencia del Proyecto a lo largo de todo el ciclo de vida. De esta forma, luego de aplicar esa porción del proceso, medimos los resultados, mejoramos esa parte del proceso, de ser posible, y la divulgamos al interior de la empresa. Más adelante usamos otra fracción del proceso, quizás junto con la anterior, y vamos creciendo con el.&lt;/p&gt;&lt;p&gt;Y algo muy importante: un proceso no tiene que ser perfecto. Es más, ninguno lo es. Y hay más: un proceso nos indica que hacer bajo ciertas condiciones, que bien podríamos llamar “ideales”. Por ejemplo, un proceso no dice que hacer si al equipo de desarrollo le faltan dos personas intempestivamente o si hay problemas técnicos que no son solucionables a corto o mediano plazo. Lo que sí hace es dar ideas (prácticas documentadas) de qué hacer en casos como esos. En resumen: un proceso no dice que hacer en tiempos de crisis. Es en esos momentos cuando toda nuestra razón, nuestros conocimientos, nuestra praxis (hablo de los seres humanos actuarios del proceso) y nuestra pragmática se debe poner de manifiesto para superar el trance.&lt;/p&gt;&lt;p&gt;Importante es que un proceso vaya de la mano con un programa de entrenamiento para el manejo de las habilidades de las personas que usan el proceso. El proceso no hace nada por sí solo, ni las herramientas, son las personas las que, con cierto grado de conocimiento del proceso y de experiencia en el rito procesal, lo siguen, lo ejecutan. Lo que no debe ocurrir es que el proceso de pie a interpretaciones diversas. El proceso debe ser claro, no ambiguo, preciso, sin que ello quiera decir inflexible. Al final, el proceso debe contar con unas bases para el mejoramiento continuo de la calidad y he aquí la primera premisa de lo que se ha llamado Mejora de Procesos: “La calidad de un producto es determinada en gran medida por la calidad del proceso que es usado para desarrollarlo y mantenerlo”&lt;strong&gt;3&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Y para finalizar esta disertación sobre Procesos y Personas, me resta decirles que un proceso debe usar las mejores prácticas probadas en la industria, no sólo la última moda en materia de guías o actividades. Un proceso debe estar bien establecido en el medio donde se utilizará, ser familiar a los miembros del equipo de desarrollo, a los clientes, a los usuarios (de alguna forma), a los socios de negocios y a todos los involucrados en el proyecto. No podemos forzar el uso de tal o cual práctica que aprendimos en un libro de aparición reciente o que escuchamos en la conferencia de la noche anterior.&lt;/p&gt;&lt;p&gt;Y más aún, un proceso debe ser práctico, esto es, entregar la información que se necesita, cuando se necesita y en un formato y medio usable. Y con el temor de ser incisivo: el proceso debe adaptarse a las necesidades de quien lo usa, es decir, un proceso debe proporcionar los mecanismos para que sea configurable de acuerdo al proyecto.&lt;/p&gt;&lt;p&gt;¿Y todo esto qué tiene que ver con RUP? Pues bien, RUP es un proceso pensado en principio para desarrollar software. RUP posee todas esas características a las que me acabo de referir. La entrada de RUP son los requisitos, nuevos o cambiados; la salida de RUP es el sistema, nuevo o cambiado. Pero lo más importante, es un sistema de alta calidad, como lo exigen los estándares de la industria.&lt;/p&gt;&lt;p&gt;Pero para hablar de RUP tendremos todo un volumen, a partir de la próxima lectura fundamental. Por ahora quiero dejarlos con estas tres leyes del proceso de software, algo como para tener siempre presente:&lt;strong&gt;4&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;La Primera Ley del Proceso de Software&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Los procesos solamente nos permiten hacer cosas que ya sabemos hacer.&lt;/p&gt;&lt;p&gt;&lt;em&gt;El Corolario a La Primera Ley del Proceso de Software&lt;/em&gt;&lt;/p&gt;&lt;p&gt;No puedes tener un proceso para algo que no hayas hecho nunca ni que sepas como hacer.&lt;/p&gt;&lt;p&gt;&lt;em&gt;La Creación Reflexiva de Sistemas y Procesos&lt;/em&gt;&lt;/p&gt;&lt;p&gt;1. La única forma de crear sistemas efectivos es a través de la aplicación de procesos efectivos.&lt;/p&gt;&lt;p&gt;2. La única forma de crear procesos efectivos es a través de la construcción de sistemas efectivos.&lt;/p&gt;&lt;p&gt;&lt;em&gt;El Lema de la Tardanza Eterna&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Los únicos procesos que podemos usar en el proyecto actual fueron definidos en proyectos previos, que son diferentes de éste.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;La Segunda Ley del Proceso de Software&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Solamente podemos definir procesos de software a dos niveles: uno demasiado vago o uno demasiado limitante.&lt;/p&gt;&lt;p&gt;&lt;em&gt;La Regla de la Bifurcación del Proceso&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Las reglas de los procesos de software muchas veces se dictan en términos de dos niveles: una sentencia general de la regla y un ejemplo detallado específico (valga el ejemplo: La Segunda Ley del Proceso de Software).&lt;/p&gt;&lt;p&gt;&lt;em&gt;La Hipótesis Dual del Descubrimiento del Conocimiento&lt;/em&gt;&lt;/p&gt;&lt;p&gt;· Hipótesis Uno: Solamente podemos “descubrir” el conocimiento en un entorno que contiene el conocimiento.&lt;/p&gt;&lt;p&gt;· Hipótesis Dos: La única forma de declarar la validez de cualquier conocimiento es compararlo con otra fuente de conocimiento.&lt;/p&gt;&lt;p&gt;&lt;em&gt;La Observación de Armour sobre el Proceso de Software&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Lo que todo desarrollador de software realmente quiere es un conjunto de reglas riguroso, hermético, concreto, universal, absoluto, total, definitivo y completo que se puedan romper.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;La Tercera Ley del Proceso de Software &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;El último tipo de conocimiento a ser considerado como candidato para la implementación en un sistema de software ejecutable es el conocimiento de cómo implementar el conocimiento en un sistema de software ejecutable.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Las Metas Gemelas de la Terminación Óptima&lt;/em&gt;&lt;/p&gt;&lt;p&gt;1. La única meta natural de un grupo de procesos de software debería ser alejada del negocio tan pronto como sea posible.&lt;/p&gt;&lt;p&gt;2. El resultado final del desarrollo y aplicación continuos de un proceso efectivo será que nadie realmente tiene que usarlo.&lt;/p&gt;&lt;p&gt;Quizás el único comentario que me queda por hacer es que los procesos y los modelos no pueden separarse de la forma como pensamos los seres humanos. Más que cualquier otra cosa, el desarrollo de software es una actividad pensante. Como humanos, sólo pensamos en términos de modelos. Las restricciones de estos modelos nos asisten en la actividad pensante, pero también nos restringen y pueden aún conducir el resultado de nuestro pensamiento forzando una respuesta sobre nosotros. Todos estos elementos, los procesos que usamos y los modelos de nuestro entendimiento que nosotros mismos creamos, incluyendo el modelo del código, deben conformar con los requisitos de la mente.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Referencias&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;1. &lt;/span&gt;&lt;a href="http://www.ibm.com/developerworks/rational/library/jan07/krebs/index.html"&gt;&lt;span style="font-size:85%;"&gt;The value of RUP certification&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, by Jochen Krebs. The Rational Edge, Enero 2007.&lt;br /&gt;2. &lt;/span&gt;&lt;a href="http://www.ibm.com/developerworks/rational/library/jan07/krebs/index.html"&gt;&lt;span style="font-size:85%;"&gt;The value of RUP certification&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, by Jochen Krebs. The Rational Edge, Enero 2007.&lt;br /&gt;3. Basado en principios de Administración Total de la Calidad enseñados por Shewhart, Juran, Deming y Humphrey.&lt;br /&gt;4. The Laws of Software Process: A New Model for the Production and Management of Software by Philip G. Armour&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-7.html"&gt;&lt;strong&gt;Lectura Fundamental Siguiente:&lt;/strong&gt; “Todo lo que siempre quisiste saber de RUP y no te atreviste a preguntar”&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="mailto:lucho.salazar@gmail.com"&gt;&lt;span style="font-size:85%;"&gt;lucho.salazar@gmail.com&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-9067828423890547398?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5AzNUagN4nyHrhepnCmUEw-XkZ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5AzNUagN4nyHrhepnCmUEw-XkZ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5AzNUagN4nyHrhepnCmUEw-XkZ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5AzNUagN4nyHrhepnCmUEw-XkZ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/fDAvZ_wxWz4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/9067828423890547398/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=9067828423890547398" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/9067828423890547398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/9067828423890547398?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/fDAvZ_wxWz4/lecturas-fundamentales-6.html" title="Lecturas Fundamentales 6" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fip7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-116680562727842715</id><published>2006-12-22T11:35:00.000-05:00</published><updated>2007-08-02T11:15:23.556-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.556-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 5 (2 de 2)</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Lectura Fundamental Anterior&lt;/strong&gt;: “Casos de Uso: ¿Cuándo Están Terminados? ... ¿Y qué hacer con ellos a continuación?” Parte 1 &lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Lectura # 5&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 2 de 2&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Previamente en Lecturas Fundamentales…&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;En la parte 1 de este artículo enunciaba mi Ley de la Terminación del Caso de Uso. Decía que un caso de uso está terminado cuando se cumplen al menos diez de trece condiciones. Las primeras seis condiciones a las que me refería son:&lt;br /&gt;1. ¿El caso de uso tiene especificado el Actor que lo inicia?&lt;br /&gt;2. ¿El caso de uso ha sido leído y entendido por todos los interesados en el mismo, incluyendo representantes de los usuarios finales y los programadores del mismo?&lt;br /&gt;3. ¿La secuencia de comunicación entre el actor y el caso de uso cumple con las expectativas del usuario?&lt;br /&gt;4. ¿Está claro cómo y cuándo comienzan y terminan los flujos de eventos del caso de uso?&lt;br /&gt;5. ¿Los subflujos en el caso de uso están modelados con precisión?&lt;br /&gt;6. ¿Está claro quién quiere ejecutar el caso de uso? ¿El propósito del caso de uso también está claro?&lt;br /&gt;Y aportaba algunos elementos de criterio para hacer la revisión con cada uno de esos puntos. Bien, estas son las demás:&lt;br /&gt;&lt;strong&gt;¿Las interacciones del actor y la información intercambiada están claras?&lt;br /&gt;&lt;/strong&gt;¿Es comprensible la forma como el actor proporciona datos al sistema mediante el caso de uso y qué datos suministra? Esto es, establecer si el actor debe seleccionar de una lista o debe digitar el dato o debe escoger una de un conjunto de posibles opciones; o si debe especificar la ruta o la dirección de un archivo de datos o si debe autorizar la carga de información mediante un proceso.&lt;br /&gt;También debe hacerse evidente el tipo y mecanismo de validación, si existe, para cada dato intercambiado con el sistema. En este contexto, “hacerse evidente” quiere decir “especificar o documentar”, que sea explícito en el caso de uso. No porque algo nos &lt;strong&gt;parezca evidente&lt;/strong&gt;, como especificadores de requisitos, le parecerá evidente a los demás, hay que hacerlo incuestionable, axiomático.&lt;br /&gt;&lt;strong&gt;¿La descripción breve ofrece un cuadro verdadero del caso de uso?&lt;/strong&gt;&lt;br /&gt;Aunque la descripción breve no hace parte de la funcionalidad establecida en el caso de uso, ésta debe brindar a los lectores del mismo una visión horizontal, concisa, que permita formar imágenes mentales precisas de lo que hace el caso de uso y hasta un bosquejo del mismo.&lt;br /&gt;Durante la fase de exploración del proyecto, la fase de Concepción o Inicio, cuando se descubren los casos de uso, la descripción breve del caso de uso juega un papel muy importante no solo para los analistas y usuarios, sino para el Arquitecto del Software, que cuenta con que le facilitemos de estas descripciones para que comience a elaborar la arquitectura del producto, al menos, la arquitectura preliminar, o para que tome decisiones acerca de llevar a cabo pruebas de concepto o no.&lt;br /&gt;&lt;strong&gt;¿La secuencia básica del caso de uso tiene un número de pasos pequeño?&lt;/strong&gt; (Menos de 20)&lt;br /&gt;El límite puede ser 20, 15, 25, 17, 13, 23. “Pequeño” es un término relativo, eso lo sabemos de sobra. Puede haber casos de uso “grandes”, de 30, 50 ó 70 pasos; sin embargo, éstos deben ser la excepción. Además, el tamaño es un índice de complejidad, pero no es el único. Y siempre puede suceder que un caso de uso de 50 pasos sea sencillo y uno de 10 pasos sea complejo.&lt;br /&gt;En cualquier caso, cuando el número de pasos de un caso de uso empieza a crecer, debemos también comenzar a pensar en que quizás se pueda dividir. De hecho una de los lineamientos a seguir para crear casos de uso incluidos es precisamente la máxima de “divide y vencerás” que, en esta oportunidad, podríamos traducir como “divide y entenderás.”&lt;br /&gt;&lt;strong&gt;Definición 12&lt;/strong&gt;. Un &lt;strong&gt;caso de uso incluido&lt;/strong&gt; es aquel cuyo comportamiento (funcionalidad) puede ser insertado en el comportamiento definido para otro caso de uso, llamado caso de uso &lt;strong&gt;base&lt;/strong&gt;.&lt;br /&gt;La inclusión, junto con la extensión y la generalización, son las relaciones que pueden existir entre casos de uso. En una lectura fundamental posterior les hablaré en detalle de este tema de las relaciones entre casos de uso.&lt;br /&gt;¿Está claro que el caso de uso no se puede dividir en dos o más casos de uso?&lt;br /&gt;En la &lt;strong&gt;lectura fundamental #1&lt;/strong&gt; anotaba que, desde el punto de vista del usuario, un caso de uso es una pieza indivisible de software, simple, con un objetivo exacto y único.&lt;br /&gt;Siempre debemos buscar estas características en el caso de uso. Si observamos que el caso de uso hace varias tareas desacopladas, si la complejidad de algunas de sus acciones lo hace incomprensible para los usuarios o aún para los desarrolladores, si tiene un número excesivo de pasos o de secuencias alternativas, si la profundidad de las anidaciones (decisiones lógicas o ciclos) es mayor de dos (por ejemplo, si hay secuencias alternativas que se derivan no de la secuencia básica o principal, sino de otra secuencia alternativa), si parte de las acciones de un caso de uso se puede “ocultar” deliberadamente (en casos de uso incluidos) sin que se afecte el matiz que se obtenga de su lectura, si para entender el caso de uso se hace necesario acompañarlo de adjuntos como prototipos de usuario, manifiestos en prosa sobre la funcionalidad del caso de uso u otros elementos de diseño, entonces seguramente será necesario fraccionar la especificación en dos o más casos de uso.&lt;br /&gt;Sí, otra vez, simplicidad es la clave.&lt;br /&gt;&lt;strong&gt;¿Para un caso de uso incluido: se probó que si se modifica el caso de uso que lo incluye, el caso de uso incluido no se afecta?&lt;br /&gt;&lt;/strong&gt;En términos generales, un caso de uso incluido no es autónomo en cuanto a que por sí solo no entrega un resultado de valor observable para el actor. Esto lo convierte en dependiente del caso de uso base.&lt;br /&gt;A pesar de tal interdependencia, el comportamiento de un caso de uso incluido no debe verse sobre-influido por un cambio al caso de uso base, sobre todo, cuando la razón de la inclusión es una factorización en la funcionalidad de varios casos de uso, es decir, distintos casos de uso tenían una funcionalidad común que se eliminó de éstos y se incluyó en un único caso de uso incluido por todos los demás.&lt;br /&gt;De esta forma, si al modificar la funcionalidad de uno de los casos de uso, se acomete contra la funcionalidad “incluida”, todos los casos de uso que la usan deben someterse a una minuciosa inspección con el fin de mantener la consistencia en el modelo funcional o de casos de uso.&lt;br /&gt;&lt;strong&gt;¿Cada caso de uso es independiente del resto?&lt;/strong&gt;&lt;br /&gt;Es realmente necesario abordar este chequeo con un pensamiento sistémico que nos permita no sólo modelar el producto sino también obtener varias perspectivas del modelo.&lt;br /&gt;En particular, al revisar las interrelaciones de los casos de uso en los distintos modelos del sistema, el resultado debe ser uno que exhiba bajo acoplamiento y alta cohesión. &lt;strong&gt;Bajo acoplamiento&lt;/strong&gt; quiere decir que hay poca o ninguna interdependencia entre el caso de uso y su entorno (otros casos de uso u otros actores distintos al que ejecuta este caso de uso). Entre tanto, el principio de &lt;strong&gt;alta cohesión&lt;/strong&gt; señala que el caso de uso ejecuta una tarea simple y precisa y alcanza un objetivo predeterminado. En este contexto, los casos de uso a los que me refiero son casos de uso concretos, ejecutados por actores del sistema; esto excluye, si me permiten la disfunción, a los casos de uso incluidos y a los abstractos o generalizados. Estos últimos son aquellos que no se implementan, pero que existan para estabilizar el modelo y entenderlo mejor.&lt;br /&gt;Este, que es un patrón común de diseño heredado cuidadosamente de las técnicas estructuradas de programación de computadores, requiere tanto un enfoque de bajo nivel para verificar el acoplamiento, como un punto de vista más alto para cotejar la cohesión. De allí la necesidad de hacer cálculos holistas con los elementos funcionales del sistema, o sea, con los casos de uso.&lt;br /&gt;&lt;strong&gt;¿Este caso de uso hace algo muy parecido a otro caso de uso?&lt;br /&gt;&lt;/strong&gt;De ser así, quizás deberían convertirse ambos en un único caso de uso.&lt;br /&gt;Ocurre mucho con los casos de uso descompuestos funcionalmente, que deberíamos evitar. Estos tienden a parecerse, porque, por ejemplo, uno es para adicionar un elemento y el otro es para actualizar los datos de ese elemento, digamos un producto o un cliente.&lt;br /&gt;Pero en casos de uso no descompuestos funcionalmente también suele suceder, sobre todo, cuando obtenemos la visión de un rango heterogéneo de usuarios y cada uno de ellos expresa sus necesidades de acuerdo a sus criterios y ambiente de trabajo. Reservar Vuelo y Comprar Tiquete quizás sean dos casos de uso distintos, pero también pueden llegar a convertirse en uno solo, dependiendo de la meta que se quiera alcanzar con uno u otro.&lt;br /&gt;&lt;strong&gt;¿Y qué hacer con los casos de uso una vez están terminados?&lt;/strong&gt;&lt;br /&gt;Realmente no es necesario terminar un caso de uso para continuar con su ciclo de vida. Desde la descripción breve y el esbozo que se obtiene durante la fase de Inicio del proyecto, ya es posible empezar a hacer el análisis y diseño del caso de uso. En este punto ya también el arquitecto puede considerar distintas variables para seleccionar los casos de uso más críticos o complejos para la arquitectura del software, aquellos que definen las bases del producto a construir.&lt;br /&gt;Más adelante, durante cada una de las iteraciones, al completar la secuencia básica es factible diseñar prototipos, “realizar” los casos de uso y comenzar a implementarlos. Y también es posible diseñar los casos de prueba.&lt;br /&gt;Todos estos eventos subsiguientes a la especificación de un caso de uso, serán temas que ocuparán nuestras lecturas fundamentales durante 2007.&lt;br /&gt;Hasta entonces y &lt;strong&gt;feliz navidad.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2007/02/lecturas-fundamentales-6.html"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Lectura Fundamental Siguiente&lt;/strong&gt;: De Procesos y de Humanos.&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-116680562727842715?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g3-B26DqD-CaRLQMOC-WRZ-L0XI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g3-B26DqD-CaRLQMOC-WRZ-L0XI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g3-B26DqD-CaRLQMOC-WRZ-L0XI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g3-B26DqD-CaRLQMOC-WRZ-L0XI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/QrSws6qdH04" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/116680562727842715/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=116680562727842715" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116680562727842715?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116680562727842715?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/QrSws6qdH04/lecturas-fundamentales-5-2-de-2.html" title="Lecturas Fundamentales 5 (2 de 2)" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fip7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-116549568059178090</id><published>2006-12-07T07:47:00.000-05:00</published><updated>2007-08-02T11:15:23.556-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.556-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 4 (1 de 2)</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html"&gt;Lectura Fundamental Anterior: “Casos de Uso: Del Todo y de Sus Partes” &lt;/a&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;Lectura # 4&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#6600cc;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 1 de 2&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Volvamos a considerar el siguiente caso de uso típico de un sistema de reservaciones:&lt;br /&gt;Caso de Uso: Reservar Vuelo&lt;br /&gt;Actor: Pasajero Frecuente&lt;br /&gt;Descripción: este caso de uso permite a una persona reservar un vuelo de ida y regreso entre dos ciudades distintas en las fechas de su elección. El sistema valida la disponibilidad de un asiento de las características que el Pasajero especifique. La reservación se hace vía Internet. La aerolínea sólo tiene aviones con asientos estándar.&lt;br /&gt;Objetivo: Proporcionar un mecanismo rápido y seguro a un Pasajero Frecuente para hacer reservas en vuelos nacionales o internacionales de ida y regreso. No se incluye la funcionalidad de pagar o cambiar el estado de la reserva.&lt;br /&gt;Precondiciones: El Pasajero debe estar plenamente identificado ante el sistema de reservas (Cuenta de Pasajero Frecuente, Identificación, Nombre y otros datos básicos).&lt;br /&gt;Secuencia Básica:&lt;br /&gt;1. El caso de uso inicia cuando el Pasajero decide Hacer una Reserva Aérea&lt;br /&gt;2. El sistema solicita las ciudades origen y destino del vuelo&lt;br /&gt;3. El Pasajero selecciona las ciudades origen y destino del vuelo&lt;br /&gt;4. El sistema valida que las ciudades Origen y Destino sean distintas, que haya al menos un vuelo entre esas ciudades y solicita las fechas de ida y regreso&lt;br /&gt;5. El Pasajero especifica las fechas de ida y regreso, incluyendo la hora de ambos viajes&lt;br /&gt;6. El sistema valida que la fecha de regreso, incluyendo la hora, sea superior a la fecha de ida, incluyendo la hora, y pide seleccionar una opción de la lista de vuelos disponibles para las fechas y ciudades establecidas&lt;br /&gt;7. El Pasajero selecciona una opción de vuelo&lt;br /&gt;8. El sistema muestra los detalles del vuelo y solicita confirmación de la reserva&lt;br /&gt;9. El Pasajero confirma la reserva&lt;br /&gt;10. El Sistema asigna un asiento al Pasajero, genera y muestra un código de reserva&lt;br /&gt;11. El caso de uso termina&lt;br /&gt;Secuencia Alternativa 1:&lt;br /&gt;4A. No hay vuelos entre las ciudades seleccionadas&lt;br /&gt;4A1. El sistema muestra el mensaje: “No hay vuelos entre las ciudades seleccionadas. Verifique.”&lt;br /&gt;4A2. El caso de uso termina&lt;br /&gt;Secuencia Alternativa 2:&lt;br /&gt;6A. No hay vuelos disponibles en las fechas especificadas&lt;br /&gt;6A1. El sistema muestra el mensaje: “No hay vuelos disponibles en las fechas seleccionadas. Verifique.”&lt;br /&gt;6A2. El caso de uso termina&lt;br /&gt;Secuencia Alternativa 3:&lt;br /&gt;6B. La fecha/hora de regreso es inferior a la fecha/hora de ida&lt;br /&gt;6A1. El sistema muestra el mensaje: “La fecha de regreso es inferior a la fecha de ida. Especifíquelas nuevamente.”&lt;br /&gt;6A2. El caso de uso continúa en el paso 5 de la secuencia básica&lt;br /&gt;Poscondiciones: El Pasajero puede consultar el estado de su reserva. El Pasajero puede modificar o cancelar su reserva.&lt;br /&gt;Requisitos Especiales: El sistema sólo muestra y permite seleccionar pares de vuelos disponibles en las fechas y entre las ciudades establecidas. El sistema de reservas es solo para el tipo de Pasajeros Frecuentes de la aerolínea.&lt;br /&gt;Advertencia: todavía este continua siendo un caso de uso de una situación simulada, no intente usarlo en ningún proyecto en curso.&lt;br /&gt;Voy a cerrar este primer ciclo de lecturas fundamentales sobre casos de uso basándome precisamente en una corta pero sustanciosa lista de chequeo para revisar casos de uso. Vale la pena decir que esta lista hace parte del proceso de Ingeniería de Requisitos institucionalizado en InterGrupo hace ya algún tiempo y que a su vez está cimentada en RUP.&lt;br /&gt;Ley de la Terminación de un Caso de Uso&lt;br /&gt;Un caso de uso está terminado cuando se cumplen al menos diez de las siguientes trece condiciones:&lt;br /&gt;1. ¿El caso de uso tiene especificado el Actor que lo inicia?&lt;br /&gt;2. ¿El caso de uso ha sido leído y entendido por todos los interesados en el mismo, incluyendo representantes de los usuarios finales y los programadores del mismo?&lt;br /&gt;3. ¿La secuencia de comunicación entre el actor y el caso de uso cumple con las expectativas del usuario?&lt;br /&gt;4. ¿La secuencia de comunicación entre el actor y el caso de uso cumple con las expectativas del usuario?&lt;br /&gt;5. ¿Está claro cómo y cuándo comienzan y terminan los flujos de eventos del caso de uso?&lt;br /&gt;6. ¿Está claro quién quiere ejecutar el caso de uso? ¿El propósito del caso de uso también está claro?&lt;br /&gt;7. ¿Las interacciones del actor y la información intercambiada están claras?&lt;br /&gt;8. ¿La descripción breve ofrece un cuadro verdadero del caso de uso?&lt;br /&gt;9. ¿La secuencia básica del caso de uso tiene un número de pasos pequeño? (menos de 20)&lt;br /&gt;10. ¿Está claro que el caso de uso no se puede dividir en dos o más casos de uso?&lt;br /&gt;11. ¿Para un caso de uso incluido: se probó que si se modifica el caso de uso que lo incluye, el caso de uso incluido no se afecta?&lt;br /&gt;12. ¿Cada caso de uso es independiente del resto?&lt;br /&gt;13. ¿Este caso de uso hace algo muy parecido a otro caso de uso? De ser así, quizás deberían convertirse ambos en un único caso de uso.&lt;br /&gt;¿El caso de uso tiene especificado el Actor que lo inicia?&lt;br /&gt;No habría mucho que decir de este control si la búsqueda y posterior definición de los actores de un sistema no estuviera hoy tan desestimada. En principio tengo que decir que intentar definir un sistema sin conocer sus actores es un error bastante común. Antes que cualquier otra cosa es importante conocer para quien construimos el sistema, luego procedemos a documentar lo que hace cada uno de esos actores.&lt;br /&gt;Debemos indagar por el perfil del actor y sus responsabilidades en el sistema. Recordemos que un actor bien podría ser alguien “abstracto” para el negocio, es decir, no equivale a un rol desempeñado por una persona o un grupo de personas dentro del negocio, razón por la cual, luego de hacer la abstracción, hay que mirarlo desde el punto de vista del sistema.&lt;br /&gt;Con ese perfil, evaluamos si las actividades descritas en el caso de uso pueden ser ejecutadas por ese actor. Este es realmente el punto de chequeo, no simplemente asegurarnos de que haya un nombre cualquiera en la sección Actor del caso de uso.&lt;br /&gt;Ahora bien, un caso de uso normalmente tiene un único actor que lo inicia; sin embargo, el caso de uso puede tener más actores. En este caso, los demás actores son pasivos, es decir, o simplemente reciben información, como en el caso de un sistema o un dispositivo externo, o son espectadores participes del proceso del negocio que envuelve el caso de uso, como en el caso de un cliente en un punto de venta. En cualquier caso, es importante enumerar a todos los actores que intervienen en el caso de uso por el horizonte que se extiende tanto para los analistas como para los desarrolladores y probadores del producto, en cuanto al entendimiento del mismo.&lt;br /&gt;En el ejemplo, un “simple” Pasajero puede significar un cliente casual de la aerolínea, mientras que un Pasajero Frecuente es precisamente una persona que toma vuelos con una frecuencia uniforme o que, al menos, está registrado como tal ante la compañía.&lt;br /&gt;¿El caso de uso ha sido leído y entendido por todos los interesados en el mismo, incluyendo representantes de los usuarios finales y los programadores del mismo?&lt;br /&gt;Los usuarios son la última línea de defensa del caso de uso, son quienes confirman que está terminado, son quienes lo aprueban. Es tarea del Especificador de Requisitos obtener de ellos la información suficiente y necesaria para terminar el caso de uso. Siempre tenemos a la mano el “¿Qué más debo saber acerca de esta funcionalidad?” Otras preguntas importantes son: ¿Quién más está interesado en este caso de uso? ¿Quién debería leerlo? ¿Quién debería aprobarlo?&lt;br /&gt;Una vez se tiene esa información, el revisor del caso de uso, si existe, puede indagar sobre el número de personas que leyeron y aprobaron el caso de uso para establecer si eso constituye una muestra representativa para dar por terminado el caso de uso.&lt;br /&gt;En el ejemplo, puesto que el Pasajero es un actor externo a la compañía, alguien dentro de ésta es quien lo representa, es decir, es quien decide cómo quiere que los clientes de la aerolínea perciban el sistema. Por ello es importante documentar desde el principio del proyecto, no solo quienes son los usuarios finales, sino quienes serán sus representantes a lo largo del ciclo de vida.&lt;br /&gt;¿La secuencia de comunicación entre el actor y el caso de uso cumple con las expectativas del usuario?&lt;br /&gt;Es más que evidente. Otra vez, es sólo el usuario y nadie más que el usuario, quien decreta la correcta finalización del caso de uso. Por ello el caso de uso no debe incluir aspectos técnicos o detalles del diseño o implementación del mismo.&lt;br /&gt;Se evidencia la participación dinámica y constante del usuario o de un grupo de usuarios durante la Ingeniería de Requisitos (por supuesto, también durante el resto del ciclo de vida, pero sin duda es esta etapa donde se hace más evidente la necesidad de contar con el mayor número de usuarios del producto).&lt;br /&gt;El usuario regular no está interesado en conocer lo que ocurre “detrás del telón” del sistema. Para él sólo es importante el grupo de acciones donde él participa activamente, donde interactúa con el software y finalmente es quien indica si está satisfecho con lo que está documentado en el caso de uso.&lt;br /&gt;Si, por ejemplo en el paso 6, dijéramos que la lista de vuelos se busca haciendo una intercalación multivía seguida de una selección por reemplazamiento, estaríamos adicionando detalles que confundirían innecesariamente al usuario común y corriente. Es más, ni siquiera tendríamos que mencionar las tablas y mucho menos los componentes involucrados en dicha búsqueda y selección.&lt;br /&gt;¿Está claro cómo y cuándo comienzan y terminan los flujos de eventos del caso de uso?&lt;br /&gt;Si mantenemos el caso de uso en su estado más simple, aunque con el suficiente detalle para pasar al siguiente estado, los momentos de inicio y finalización de cada secuencia de acciones deberían estar a la vista de todos.&lt;br /&gt;Los errores más comunes se encuentran en las secuencias alternativas, al decidir si la acción retorna a la secuencia básica o si el caso de uso termina. También pasa que si el caso de uso tiene varios escenarios a partir de una misma acción, luego de escribir dos o tres de ellos perdamos el foco de la “horizontalidad” del caso de uso y empezamos a cubrir detalles que nos podrían llevar, desde el punto de vista del usuario, por caminos insubstanciales del caso de uso.&lt;br /&gt;¿Los subflujos en el caso de uso están modelados con precisión?&lt;br /&gt;Luego de mi lectura fundamental # 1 no volví a mencionar la palabra modelo. No es que cuando estamos documentando casos de uso no estamos modelando, es que precisamente a veces perdemos la conciencia de que es eso lo que estamos haciendo, aunque sea puramente texto lo que escribamos. De hecho, el modelo de casos de uso es mayormente texto.&lt;br /&gt;Así que cuando hablo de modelar subflujos del caso de uso con precisión, me refiero a que proporcionemos toda la información necesaria al modelo: lugar donde se inicia el subflujo, motivo del subflujo, acciones del subflujo y método de terminación del subflujo.&lt;br /&gt;Cabe decir que los subflujos no son sólo secuencias alternativas, también pueden ser “porciones” de la secuencia básica, normalmente, porciones pequeñas y extremadamente simples.&lt;br /&gt;Sí, el concepto clave es simplicidad.&lt;br /&gt;¿Está claro quién quiere ejecutar el caso de uso? ¿El propósito del caso de uso también está claro?&lt;br /&gt;Una cosa es especificar un actor y otra es si ese actor representa adecuadamente al grupo de usuarios que ejecutará el caso de uso. Es posible que haya diferencias entre lo que piensa el representante de los usuarios asignado para proporcionar la información de, revisar y aprobar el caso de uso, y lo que finalmente quede documentado.&lt;br /&gt;Un trabajo de campo, donde aseguremos que varios usuarios lean y acuerden el caso de uso ayuda mucho en estos casos. Así evitamos esa escena de terror que más de uno hemos vivido cuando mucho tiempo después de la especificación, probablemente durante las pruebas de certificación o ya en producción, nos preguntan “¿Quién dijo eso?”&lt;br /&gt;De otro lado, el propósito puede estar implícito a lo largo y ancho de la declaración del caso de uso, o bien puede estar explícito en una sección inicial del mismo. Esta última opción es mi favorita porque permite verificar la consistencia del caso de uso lo mismo que medir su valor para el sistema y para los usuarios.&lt;br /&gt;El propósito, si se especifica, debe escribirse a priori, quizás durante la etapa de descubrimiento del caso de uso, para que posea la menos subjetividad posible. Por supuesto, siempre podemos afinarla, aún antes de presentar el caso de uso para su última revisión.&lt;br /&gt;El propósito debe incluir lo que el actor consigue del caso de uso y también lo que no consigue. Esto ayuda en las etapas posteriores al resto del equipo de desarrollo del proyecto a construir un sistema de alta usabilidad y gran aceptación.&lt;br /&gt;Lo que Falta&lt;br /&gt;Bien, hasta aquí la exploración a los primeros aspectos fundamentales que nos ayudan a decidir cuando un caso de uso está terminado. En la siguiente entrega volveré con el final de este artículo.&lt;br /&gt;Esta lectura #4 continuará. Hasta entonces.&lt;br /&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-5-2-de-2.html"&gt;&lt;strong&gt;Lectura Fundamental Siguiente&lt;/strong&gt;: “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación? Parte 2 de 2”&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-116549568059178090?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TOHsRreNmuNbSAt_edwEkyPPAeg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TOHsRreNmuNbSAt_edwEkyPPAeg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TOHsRreNmuNbSAt_edwEkyPPAeg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TOHsRreNmuNbSAt_edwEkyPPAeg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/JWnXatwSWRE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/116549568059178090/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=116549568059178090" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116549568059178090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116549568059178090?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/JWnXatwSWRE/lecturas-fundamentales-4-1-de-2.html" title="Lecturas Fundamentales 4 (1 de 2)" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fip7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-116434356311658260</id><published>2006-11-23T23:37:00.000-05:00</published><updated>2007-08-02T11:15:23.556-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.556-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 3</title><content type="html">&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html"&gt;Lectura Fundamental Anterior: “Casos de Uso: Origen, Especificación y Evolución”&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lectura # 3 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Casos de Uso: Del Todo y de sus Partes&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Consideremos el siguiente caso de uso típico de un sistema de reservaciones:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Caso de Uso&lt;/strong&gt;: Reservar Vuelo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Actor&lt;/strong&gt;: Pasajero Aerolínea&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Descripción&lt;/strong&gt;: este caso de uso permite a una persona reservar un vuelo de ida y regreso entre dos ciudades distintas en las fechas de su elección. El sistema valida la disponibilidad de un asiento de las características que el Pasajero especifique. La reservación se hace vía Internet. La aerolínea sólo tiene aviones con asientos estándar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Precondiciones&lt;/strong&gt;: El Pasajero debe estar plenamente identificado ante el sistema de reservas (Cuenta de Pasajero Frecuente, Identificación, Nombre y otros datos básicos).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Secuencia Básica: &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style="font-size:85%;"&gt;1. El caso de uso inicia cuando el Pasajero opta por Hacer una Reserva Aérea&lt;br /&gt;2. El sistema solicita las ciudades origen y destino del vuelo&lt;br /&gt;3. El Pasajero selecciona las ciudades origen y destino del vuelo&lt;br /&gt;4. El sistema valida que las ciudades Origen y Destino sean distintas, que haya al menos un vuelo entre esas ciudades y solicita las fechas de ida y regreso&lt;br /&gt;5. El Pasajero especifica las fechas de ida y regreso&lt;br /&gt;6. El sistema valida que la fecha de regreso sea superior a la fecha de ida y pide seleccionar una opción de la lista de vuelos disponibles para las fechas y ciudades establecidas&lt;br /&gt;7. El Pasajero selecciona una opción de vuelo&lt;br /&gt;8. El sistema muestra los detalles del vuelo y solicita confirmación de la reserva&lt;br /&gt;9. El Pasajero confirma la reserva&lt;br /&gt;10. El Sistema asigna un asiento al Pasajero, genera y muestra un código de reserva&lt;br /&gt;11. El caso de uso termina&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Secuencia Alternativa 1&lt;/strong&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;4A. No hay vuelos entre las ciudades seleccionadas&lt;br /&gt;4A1. El sistema muestra el mensaje: “No hay vuelos entre las ciudades seleccionadas. Verifique.” 4A2. El caso de uso termina&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Secuencia Alternativa 2&lt;/strong&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;6A. No hay vuelos disponibles en las fechas especificadas&lt;br /&gt;6A1. El sistema muestra el mensaje: “No hay vuelos disponibles en las fechas seleccionadas. Verifique.”&lt;br /&gt;6A2. El caso de uso termina&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Poscondiciones&lt;/strong&gt;: El Pasajero puede consultar el estado de su reserva. El Pasajero puede modificar o cancelar su reserva.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Requisitos Especiales&lt;/strong&gt;: El sistema sólo muestra y permite seleccionar pares de vuelos disponibles en las fechas y entre las ciudades establecidas. El sistema de reservas es solo para el tipo de Pasajeros Frecuentes de la aerolínea.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Advertencia&lt;/strong&gt;: este sigue siendo un caso de uso de una situación simulada, no intente usarlo en ningún proyecto en curso. Además, no es un caso de uso “Terminado”.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 6&lt;/strong&gt;: La descripción breve o simplemente descripción del caso de uso es un compendio informativo –tres o cuatro líneas a lo sumo- sobre el caso de uso. Resume las principales características del caso de uso pero en ningún momento hace parte de la especificación funcional del mismo. En esta sección se pueden considerar algunas condiciones bajo y para las cuales se ejecuta el caso de uso, se pueden enumerar algunos requisitos no funcionales y otros detalles relevantes. Las descripciones breves surgen durante la fase de Concepción del proyecto, cuando se identifica el caso de uso y no reemplazan el bosquejo o borrador del caso de uso, que surge a continuación de ésta. Un indicador de que hemos entendido el caso de uso o la funcionalidad requerida es cuando escribimos esta descripción en menos de un minuto y a “lápiz alzado” como dicen los dibujantes. Sin embargo, esta es una práctica que toma tiempo y se puede lograr después de muchos casos de uso documentados.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 7&lt;/strong&gt;: Las precondiciones constituyen el estado en el que debe estar el sistema para que el caso de uso se ejecute. Esto quiere decir, lo que debe ocurrir en el sistema para que sea posible “habilitar” el caso de uso y que este se pueda ejecutar. Pensemos, por ejemplo, en una funcionalidad ampliamente usada por todos: Copiar y Pegar texto. Un prerrequisito de Copiar es Seleccionar el texto; y un prerrequisito de Pegar es Copiar el texto.&lt;br /&gt;&lt;br /&gt;Una precondición se fija en prosa, como en nuestro caso de uso en demostración. O en términos de otros casos de uso, es decir, enumerando el o los casos de uso que deben ejecutarse para correr este. O usando una combinación de las dos. Esto último ocurre porque es posible que no hayamos identificado los casos de uso condicionantes, o porque no está claro de estos casos de uso cual es la precondición establecida y porque también hay un conjunto de especificaciones funcionales que no quedan escritas en términos de casos de uso y alguna de ellas puede ser un prerrequisito. Además, porque es mejor para el usuario que usemos su terminología y le evitemos leer un caso de uso completo para que entienda el estado final del mismo.&lt;br /&gt;&lt;br /&gt;Las precondiciones son a la vez una forma de validación, ya que esas “condiciones” deben cumplirse antes de crear la instancia del caso de uso. Esto disminuye el número de validaciones que debe hacer dicho caso de uso una vez ha iniciado su secuencia de acciones.&lt;br /&gt;&lt;br /&gt;La precondición del ejemplo se refiere al proceso o módulo donde el Pasajero se identifica ante el sistema: debe proporcionar su identificación y su número de pasajero frecuente para que el sistema conozca de quien se trata.&lt;br /&gt;&lt;br /&gt;Las precondiciones además le hablan al desarrollador al oído. Le cuentan del mecanismo que debe usar o tener en cuenta para habilitar o deshabilitar opciones de la aplicación. En el ejemplo: si un pasajero no se ha identificado ante el sistema como Cliente o Pasajero Frecuente, la opción Hacer una Reserva Aérea estará deshabilitada o invisible al usuario.&lt;br /&gt;&lt;br /&gt;Ahora bien, los tres errores más comunes que cometemos al definir una precondición son:&lt;br /&gt;&lt;br /&gt;· Incluir una precondición “lejana en el contexto del proceso” al caso de uso, es decir, algo que no tiene relación directa con el caso de uso en cuestión. En el ejemplo, una precondición así sería “Las ciudades hacía y desde donde se originan los vuelos deben estar matriculadas en el sistema.” Ciertamente ésta podría ser una precondición del caso de uso, en cuyo caso lo afectaría indirectamente; En particular, ésta es una precondición de todo el sistema: sin las ciudades origen y destino registradas, el sistema no puede arrancar.&lt;br /&gt;&lt;br /&gt;Aquí es importante precisar que una precondición no depende de esquemas temporales del proceso o del orden de ejecución en el tiempo. La precondición debería ser agnóstica de ello, desligándose del momento en que ocurre; lo que interesa es que se cumpla el estado, no el momento en que ese estado es establecido.&lt;br /&gt;&lt;br /&gt;· Incluir una precondición que, en vez de serlo, es una condición que el sistema debe validar durante la ejecución del caso de uso. En el ejemplo, decir que “Debe haber vuelos disponibles” no es una precondición porque es algo que el caso de uso debe verificar a medida que se establecen las condiciones del vuelo. Tampoco lo es: “El Pasajero debe estar matriculado como Pasajero Frecuente en el sistema.” Esta es más bien una condición que se debe verificar en el caso de uso “Validar Pasajero”, el cual sí es una precondición del caso de uso.&lt;br /&gt;&lt;br /&gt;Aquí también es importante aclarar que a veces una precondición puede convertirse en una validación en las primeras de cambio del caso de uso. Es decir, si no es compleja, entre otras características, la precondición bien podría incluirse como parte de las acciones del caso de uso.&lt;br /&gt;&lt;br /&gt;· Incluir una precondición “no funcional”. Por ejemplo: “El Pasajero debe tener conexión a Internet” o “El Navegador debe soportar el protocolo SSL.” Aquí realmente estamos hablando de recursos físicos o de ciertas condiciones con las que el usuario no tiene que lidiar en lo absoluto.&lt;br /&gt;&lt;br /&gt;Finalmente, las precondiciones son opcionales. Es posible, y ocurre muchas veces, que un caso de uso simplemente no tenga precondiciones.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 8&lt;/strong&gt;: La secuencia básica, llamada también Secuencia Principal, está formada por el conjunto de acciones que más ocurren en el caso de uso. Normalmente es la única que se describe por completo, es decir, de principio a fin.&lt;br /&gt;&lt;br /&gt;Ahora bien, las acciones de un caso de uso, son acciones “planas” y, muchas veces, simples. En la Lectura 2 dije que no incluyen aspectos técnicos ni de diseño de pantallas ni otros detalles que pueden hacer difícil de leer y entender el caso de uso. Por lo general, un caso de uso inicia por una acción directa de un usuario o Actor del sistema. Esa acción casi siempre significa que el usuario decide u opta por hacer algo en el sistema para lo que tiene privilegios.&lt;br /&gt;&lt;br /&gt;La elección de nombres, tanto de casos de uso como de otros elementos del proceso: Actores, datos y documentos, no debe hacerse a la ligera y mucho menos debe tomarse como algo sin importancia. Recuerden que eso afectará, al menos, la vida laboral de muchas personas. Como técnicos somos muy dados a seleccionar nombres ostentosos, adornados de tecnicismos innecesarios o incomprensibles para el usuario final; o, entre un grupo posible de nombres “del negocio” escogemos el menos usado en el entorno del usuario o alguno que tenga connotaciones distintas en el contexto de ese usuario: Reservar Vuelo, Hacer Reserva, Hacer una Reserva Aérea, Reservar, Hacer Reservación de Vuelo y Apartar un Viaje son algunos posibles nombres para el caso de uso.&lt;br /&gt;&lt;br /&gt;Debemos indagar por las costumbres del actor, su perfil, su experiencia, su conocimiento, el entorno donde se mueve. En el caso de InterGrupo, con oficinas y clientes en varios países (aún en nuestro propio país un término puede llegar a tener connotación diferente en Bogotá que en Barranquilla), no está de más hacer este trabajo, no vaya a ser que usemos una expresión ofensiva para alguien. Quienes hemos viajado por distintas ciudades y países atendiendo clientes de la empresa somos testigo de ello.&lt;br /&gt;&lt;br /&gt;Volviendo al nombre: Reservar y Hacer Reserva quizás sean muy cortos, sobre todo si hay distintos tipos de reserva; Reservar Vuelo quizás quiera decir un único trayecto, mientras que Hacer una Reserva Aérea puede significar reservar en ambos sentidos. En fin, las posibilidades pueden ser muchas. Por eso también es importante documentar el Glosario del sistema.&lt;br /&gt;&lt;br /&gt;Para terminar, dos anécdotas: hace poco le preguntaba a un aspirante a Analista en InterGrupo que si sabía español. Evidentemente le llamó la atención y me dijo: “inglés, sí, a un 75%”. Yo le aclaré que no, y parafraseándolo le insistí que cuál era su porcentaje de español. Finalmente me dijo que no me entendía, creo que se ofendió, pero yo inmediatamente lo descarté.&lt;br /&gt;&lt;br /&gt;Sí, es muy curioso que siempre nos exijan saber inglés sin siquiera indagar por nuestro nivel de español. Recuerdo que alguien, muy sincera, durante uno de los cursos que tomé de inglés hace muchos años me pidió ayuda cuando veíamos las distintas formas de conjugación en pasado. Ella me dijo que su problema era que no las dominaba en español y por eso se le dificultaba aprenderlas en inglés. Imagínense lo que pasó cuando llegamos al pretérito pluscuamperfecto: ese curso lo reprobó y nunca más la volví a ver.&lt;br /&gt;&lt;br /&gt;De vuelta al caso de uso: las acciones no deben dar pie a ambigüedades, ni en el proceso del negocio ni en el del sistema. A primera vista, el paso 7 del caso de uso es anfibológico&lt;a title="" style="mso-endnote-id: edn1" href="http://www.blogger.com/post-create.g?blogID=10583243#_edn1" name="_ednref1"&gt;[i]&lt;/a&gt;. Seleccionar una opción de vuelo quizás quiera decir escoger un único trayecto y hasta bien podría sacarse de contexto y significar que el Pasajero seleccione un tipo de pasillo (Fumador, No Fumador, Ventana, No Ventana, entre otras); sin embargo, en la sección de Requisitos Especiales se aclara un poco el panorama.&lt;br /&gt;&lt;br /&gt;Bueno, en otras lecturas volveremos a la secuencia básica.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 9&lt;/strong&gt;: Una secuencia alternativa está constituida por un conjunto de acciones que ocurren si se cumple una condición específica en el caso de uso, normalmente en la secuencia básica, aunque también puede ser en otra secuencia alternativa.&lt;br /&gt;&lt;br /&gt;Cuando me refería a que la especificación de una acción o evento era más bien plana, hacía alusión a que la acción era una sentencia algorítmica básica, es decir, no era una decisión lógica o un ciclo predefinido, o una selección múltiple, que bien pueden existir en un caso de uso, pero que lo hacen complejo de entender.&lt;br /&gt;&lt;br /&gt;El mecanismo que usamos para definir las decisiones en un caso de uso es precisamente el de las secuencias alternativas. Estas hacen más claro y preciso el caso de uso.&lt;br /&gt;&lt;br /&gt;Una secuencia alternativa siempre debe iniciar detallando el paso o la acción en que se produce (el número del paso en la secuencia que la acarrea) y porqué se produce poniendo de manifiesto la condición que se cumplió para llegar a ese punto del caso de uso. A continuación se enumeran las acciones de la secuencia y por último se finaliza la secuencia bien sea retornando a la secuencia que la originó o terminando el caso de uso.&lt;br /&gt;&lt;br /&gt;En nuestro ejemplo, es probable que falten algunas secuencias para terminar el caso de uso.&lt;br /&gt;En conjunto, las secuencias básica y alternativas componen el cuerpo del caso de uso, la funcionalidad que el usuario requiere para resolver su problema de manejo de información: son lo implementable del caso de uso.&lt;br /&gt;&lt;br /&gt;En general, un caso de uso se ejecuta para un elemento, en singular, del proceso. Por ejemplo, para un cliente decimos Registrar Cliente y no Registrar Clientes (a no ser que las condiciones así lo exijan); en nuestro caso, Reservar Vuelo: estamos reservando un vuelo de ida y regreso entre dos ciudades y fechas dadas, no son varios vuelos. El juego de palabras puede ser truculento, pero se debe aclarar lo mejor posible.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 10&lt;/strong&gt;: las poscondiciones describen el estado en el que queda el sistema una vez se ha ejecutado el caso de uso de manera exitosa, es decir, cuando no han surgido excepciones indeseables del sistema. Aquí, de manera exitosa quiere decir que se completó activamente un escenario del caso de uso sin que el sistema fallara por una caída de la base de datos, una sobrecarga de memoria o una mala implementación del caso de uso, entre otros.&lt;br /&gt;&lt;br /&gt;Precisando, una poscondición no es el final de un caso de uso, está fuera del caso de uso. Por ejemplo, una poscondición no es que “la información del vuelo queda almacenada en la base de datos.” Esta es más bien una consecuencia lógica del caso de uso.&lt;br /&gt;&lt;br /&gt;En el ejemplo, otra poscondición bien podría ser: “el pasajero puede Pagar su reservación con tarjeta de crédito, tarjeta débito o C.E.F.”&lt;br /&gt;&lt;br /&gt;Como con las precondiciones, las poscondiciones pueden expresarse en términos de casos de uso o en prosa, si involucra a muchos casos de uso. Aunque la primera opción es la preferida porque no se deja espacio para malos entendidos, podría ocurrir lo mismo que expliqué sobre las precondiciones sentenciadas como casos de uso; por tal motivo, podría ser mejor usar la prosa: sí ven que es importante conocer mejor nuestro idioma.&lt;br /&gt;&lt;br /&gt;Y al igual que las precondiciones, las poscondiciones son opcionales, aunque es difícil pensar en la ejecución de un caso de uso, que no sea la generación de un reporte o consulta, que no tenga un impacto directo sobre otro u otros casos de uso del sistema.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definición 11&lt;/strong&gt;: En principio, los requisitos especiales se refieren a requisitos de corte no funcional que deben tenerse en cuenta para la implementación de este caso de uso en particular y que no pueden ser descritas fácilmente en el flujo de eventos del caso de uso o lo convierten en un caso de uso enmarañado o sencillamente ilegible. Pero también pueden referirse a algunos requisitos funcionales si con ellos complementamos o precisamos el flujo del caso de uso, sobre todo, cuando no queremos adicionar detalles a ese flujo que también podrían hacerlo indescifrable.&lt;br /&gt;&lt;br /&gt;Ahora bien, aunque los requisitos no funcionales se detallan en el documento de Especificaciones Suplementarias, si un requisito especial se refiere a una especificación previamente dictada, primará la que se encuentre en el caso de uso.&lt;br /&gt;&lt;br /&gt;Para recordar, los requisitos no funcionales o el modelo URSP+ (por sus siglas en inglés): Usabilidad, Confiabilidad, Soportabilidad, Desempeño, Restricciones de diseño e implementación, Documentación, entre otros.&lt;br /&gt;&lt;br /&gt;Bien, así son las piezas constituyentes de un caso de uso, al menos las más usadas. El grado de “adornamiento” de un caso de uso lo delimita el Analista de acuerdo a factores como complejidad, perfil del usuario, tiempo disponible para la especificación, experiencia de los equipos de diseño y de desarrollo, entre otros.&lt;br /&gt;&lt;br /&gt;Escribir un caso de uso no es una tarea cándida, terminarlo puede llegar a ser extenuante. Pero ese será el tema de nuestra próxima lectura fundamental.&lt;br /&gt;&lt;br /&gt;Hasta entonces.&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/12/lecturas-fundamentales-4-1-de-2.html"&gt;&lt;strong&gt;Lectura Fundamental Siguiente&lt;/strong&gt;: “Casos de Uso: ¿Cuándo Están Terminados?... ¿Y qué hacer con ellos a continuación?”&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="" style="mso-endnote-id: edn1" href="http://www.blogger.com/post-create.g?blogID=10583243#_ednref1" name="_edn1"&gt;[i]&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;anfibológico, ca.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a name="0_1"&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;1. adj. Que tiene o implica anfibología.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Real Academia Española © Todos los derechos reservados&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;span style="font-size:0;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:85%;color:#3333ff;"&gt;anfibología.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;(Del lat. amphibologĭa, y este del gr. ἀμφίβολος, ambiguo, equívoco).&lt;br /&gt;&lt;br /&gt;1. f. Doble sentido, vicio de la palabra, cláusula o manera de hablar a que puede darse más de una interpretación.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a name="0_2"&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;2. f. Ret. Figura que consiste en emplear adrede voces o cláusulas de doble sentido.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Real Academia Española © Todos los derechos reservados&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-116434356311658260?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oSirkw5ZMaos6_Y_TdbodkR-Cvc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oSirkw5ZMaos6_Y_TdbodkR-Cvc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oSirkw5ZMaos6_Y_TdbodkR-Cvc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oSirkw5ZMaos6_Y_TdbodkR-Cvc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/rCqgpHM_29c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/116434356311658260/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=116434356311658260" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116434356311658260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116434356311658260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/rCqgpHM_29c/lecturas-fundamentales-3.html" title="Lecturas Fundamentales 3" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fyp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-116379062551116684</id><published>2006-11-17T14:05:00.000-05:00</published><updated>2007-08-02T11:15:23.557-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.557-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales 2</title><content type="html">&lt;p&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Lectura Fundamental Anterior:&lt;/strong&gt; “&lt;/span&gt;&lt;/span&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Casos de Uso: De Vuelta a lo Fundamental&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;”&lt;br /&gt;&lt;br /&gt;Lectura # 2&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;&lt;strong&gt;Casos de Uso: Origen, Especificación y Evolución&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los casos de uso detallan la funcionalidad del software en construcción. Aunque no tiene que usarse siempre, la técnica de casos de uso es una muy buena práctica a la hora de capturar, documentar, revisar y aprobar requisitos funcionales. Pero ¿a partir de qué elementos, en qué momento del ciclo de vida, surgen los casos de uso? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Los casos de uso, como la materia, no se crean ni se destruyen, se transforman. Están allí, esperando ingresar al conjunto de entidades que conforman un modelo, en este caso, como la materia prima fundamental de un producto de software. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;En un principio están las necesidades, el espacio del problema. Aquí atendemos diligentemente la exposición del usuario, sus dificultades, la manera como las resuelve, si lo hace; escuchamos lo que necesita, las causas (el problema raíz o el problema detrás del problema), el impacto de convivir con esos inconvenientes, el costo asociado, entre otros aspectos. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Conocer al detalle la dimensión del problema es el primer gran paso hacia el diseño e implementación de un sistema útil y lleno de bondades para los usuarios. Durante esta parte del proceso, identificamos, sino a todos, a la mayoría de las personas involucradas o impactadas por el proyecto o el producto objeto del proyecto; por supuesto, también a otros sistemas o herramientas con los que nuestro sistema tendrá algún tipo de comunicación directa o indirecta. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Todos estos son insumos para identificar luego las características, ya en el espacio de la solución, del software a construir. Si hemos sido juiciosos consignando las palabras del usuario y confrontándolas con él, podremos empezar, por ejemplo, haciendo un análisis gramatical, una técnica antiquísima que separa los verbos, o las frases verbales, de los sustantivos: los primeros son casos de uso potenciales, o partes de un caso de uso; los segundos son actores u otras entidades relacionadas con el proceso. Es probable, inclusive, que de este análisis, apenas podamos tener una aproximación a un modelo de casos de uso del negocio. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Definición 4&lt;/strong&gt;: un caso de uso del negocio representa un macro-proceso, un proceso, un subproceso o una actividad del negocio que no necesariamente es llevada a cabo por herramientas automatizadas, en el que intervienen una o más personas (llamadas entonces Actores del Negocio) y en el que se intercambia información relativa al proceso. Como con un caso de uso “normal”, al que llamaremos entonces &lt;strong&gt;caso de uso del sistema&lt;/strong&gt;, o simplemente, caso de uso, el caso de uso del negocio termina con un resultado de valor observable para los actores del negocio. Ahora bien, de un caso de uso del negocio se pueden derivar uno o más casos de uso del sistema. Sin embargo, en ocasiones, un caso de uso del negocio permanece en su estado natural, es decir, ninguna de sus partes es automatizada. Un ejemplo típico de un caso de uso del negocio es la Recepción de una Solicitud de “algo”: Aquí, un actor del negocio, El Cliente, entrega a otro Actor del negocio, Recepcionista, Archivador o Empleado, uno o más documentos; este último, revisa, pone un sello con fecha y número (opcional) y firma una copia que es devuelta al Cliente; este simplemente se retira con su copia y el proceso, el caso de uso del negocio, termina. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Un &lt;strong&gt;Actor del Negocio &lt;/strong&gt;representa un papel “actuado” en relación al negocio por alguien o algo en el entorno de ese negocio. Los siguientes tipos de usuarios del negocio son ejemplos de actores potenciales del negocio&lt;/span&gt;&lt;/span&gt;&lt;a title="" style="mso-footnote-id: ftn1" href="http://www.blogger.com/post-edit.g?blogID=10583243&amp;postID=116379062551116684#_ftn1" name="_ftnref1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;[1]&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;Clientes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;Proveedores&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Socios de negocio &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Clientes potenciales (el “mercado objetivo”) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Autoridades locales &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Colegas &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Un término íntimamente relacionado con el Actor del Negocio es el &lt;strong&gt;Trabajador del Negocio &lt;/strong&gt;y muchas veces se confunde uno con otro, pero dejaré los detalles de este tema para una próxima entrega. Lo que nos interesa aquí es que los casos de uso del negocio son también fuentes de los casos de uso del sistema. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;En este punto resolvamos más inquietudes: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;¿Cómo nombramos un caso de uso?&lt;/strong&gt; Con frases verbales simples. Verbos como Registrar, Generar, Consultar, Matricular, acompañados de expresiones sustantivadas de una sola parte son ampliamente usados. Y muchos otros. Algunos verbos que debemos evitar son Procesar, Hacer, Ejecutar, Establecer, Administrar o Gestionar, por lo genérico o ambiguo de los términos, al igual que el sustantivo Evento, que además para nosotros significa muchas otras cosas. Tampoco redundemos, como en Generar Reporte de Solicitudes Recibidas: Generar y Consultar normalmente se refieren a eso, a reportes y consultas, a no ser que se especifique otra cosa. El nombre de un caso de uso debe despedir cierto halito de grandeza, de verdad, de seguridad: en lo sucesivo, se convertirá en parte integral del vocabulario de muchas personas, quizás de toda una corporación, eso es motivo suficiente para que sea así. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;El nombre, además de usar los verbos y sustantivos, debe dar a conocer la intención que tiene el actor al usarlo en el sistema. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;En conclusión, Los nombres de los casos de uso traen orden y sentido a un proceso y a las personas involucradas en el mismo, allí radica su importancia. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;¿Cómo especificamos un caso de uso?&lt;/strong&gt; Cuáles son sus partes? Un caso de uso siempre es ejecutado por un Actor y eso es lo primero que debemos identificar del caso de uso. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;Definición 5&lt;/strong&gt;: un Actor es una entidad externa al sistema, normalmente una persona, pero también puede ser otro sistema o una máquina con la que nuestro sistema tenga algún tipo de contacto. Cuando se trata de personas, el Actor no identifica a alguien en particular; en cambio, señala un grupo o un perfil de usuarios del sistema. Todos los usuarios caracterizados por ese actor, ven el sistema de la misma forma, ninguno ve más o menos que otro. Eso sí, un individuo puede jugar a ser más de un actor en momentos distintos y en estados distintos de la aplicación. El mito más grande que hay con los Actores Personas es que representan cargos dentro de la compañía para la cual se construye el software, lo cual apenas sería una afortunada coincidencia. Hasta es probable que los actores del negocio, más cercanos a la compañía, no signifiquen cargos de trabajo. Ejemplos de actores son: Analista de Crédito, Vendedor de Licencias, Habilitador de Servicios de Salud, Supervisor de Producción, Administrador de Usuarios, entre muchos otros.&lt;br /&gt;&lt;br /&gt;En estos ejemplos hay una constante: el contexto. Un actor lo es dentro de un contexto particular. Analista, Vendedor, Habilitador, Supervisor o Administrador son actores bastante genéricos y podrían representar a toda una compañía, que nunca se modela en un sistema. Siempre debemos limitar el alcance de las actividades de un actor (los casos de uso que ejecuta) vía contextualización. Un actor ampliamente usado en los sistemas punto com es el Cliente. Muchas veces, la sola denominación Cliente es bastante amplia y no permite delimitar el ámbito en el que se mueve. Podríamos bien decir: Pasajero Aerolínea, Tarjeta-Habiente, Comprador Minorista, Asegurado, Solicitante de Crédito, entre muchos otros apelativos. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Por supuesto, el otro componente importante de un caso de uso es el conjunto de secuencias, los flujos de tareas. Las tareas dicen qué hace el caso de uso, no cómo lo hace, es decir, no hay detalles técnicos en un caso de uso, al menos, no en principio, mientras se revisa y se aprueba con el usuario, quien es la última línea de defensa en materia de casos de uso. Tampoco hay referencias al diseño de la interfaz gráfica de usuario. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Además, en un caso de uso no se escribe el código fuente ni el manual de usuario. Para ello existen otros artefactos, tratados en otras disciplinas e instancias, que requieren de un conocimiento más profundo y detallado del adquirido durante el período de la especificación de requisitos. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Ejemplo, Ejemplo, Ejemplo.&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Caso de Uso&lt;/strong&gt;: Reservar Vuelo &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Actor&lt;/strong&gt;: Pasajero Aerolínea &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family:verdana;font-size:78%;"&gt;Secuencia: &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:78%;"&gt;1. El caso de uso inicia cuando el Pasajero solicita una Reserva Aérea&lt;br /&gt;2. El sistema solicita las ciudades origen y destino del vuelo&lt;br /&gt;3. El Pasajero selecciona las ciudades origen y destino del vuelo&lt;br /&gt;4. El sistema solicita las fechas de ida y regreso&lt;br /&gt;5. El Pasajero especifica las fechas de ida y regreso&lt;br /&gt;6. El sistema verifica que haya un asiento disponible para las condiciones establecidas y solicita las preferencias de silla al Pasajero&lt;br /&gt;7. El Pasajero indica sus preferencias&lt;br /&gt;8. El sistema muestra los detalles del vuelo y solicita confirmación de la reserva&lt;br /&gt;9. El Pasajero confirma la reserva&lt;br /&gt;10. El Sistema genera y muestra un código de reserva&lt;br /&gt;11. El caso de uso termina &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Advertencia&lt;/strong&gt;: este es un caso de uso en estado de especificación, no intente usarlo en ningún proyecto en curso. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Esta primerísima versión está medianamente lejos de la versión definitiva. Sin embargo, sirve para indicar varios aspectos: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;1. La interacción Usuario-Sistema. El caso de uso siempre debe señalar lo que es obvio para el usuario, lo que él puede ver del sistema. Para el usuario es importante el estímulo que reciba del sistema, ya sea a través de solicitudes o de respuestas. El detalle del mecanismo algorítmico o técnico que use el sistema para enviar esas solicitudes o encontrar esas respuestas debe omitirse del caso de uso. En el ejemplo, el algoritmo de verificación del asiento disponible, si la búsqueda se hace secuencial o binaria, si se usan procedimientos almacenados o si se invoca a un Web Service para lograrlo, son especificaciones que están lejos del alcance del caso de uso (aún en la versión final del caso de uso, la que aprobará el usuario, no existirán).&lt;br /&gt;&lt;br /&gt;2. Las formas lingüísticas, en este caso, los verbos y sustantivos usados deben ser un indicador de los mecanismos de implementación a usar: cuando el caso de uso especifica “el Pasajero selecciona&lt;/span&gt;&lt;a title="" style="mso-footnote-id: ftn2" href="http://www.blogger.com/post-edit.g?blogID=10583243&amp;postID=116379062551116684#_ftn2" name="_ftnref2"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;[2]&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;…” está diciendo claramente: elegir, escoger de un grupo de posibles opciones. Es evidente que el sistema debe entonces utilizar los medios necesarios para mostrar la lista de opciones y permitir que el usuario decida entre ellas mediante la “Acción y efecto de elegir a una o varias personas o cosas entre otras, separándolas de ellas y prefiriéndolas.” &lt;span style="font-size:78%;"&gt;(Significado de &lt;strong&gt;Selección&lt;/strong&gt;, Diccionario de la RAE, XXII Edición).&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;Vamos un poco más allá: cuando el caso de uso dice: “5. El pasajero especifica…” igual está lejos de señalar el mecanismo de implementación; no obstante, dejamos una puerta abierta para que el Programador use uno o más elementos de interfase de usuario: un cuadro de texto para digitar, un control especializado que permita seleccionar la fecha, un calendario compuesto por listas de días, de meses y de años donde también el usuario pueda “armar” la fecha requerida o una combinación de algunos de ellos.&lt;br /&gt;&lt;br /&gt;Por supuesto, es posible que más adelante, durante las fases de análisis y diseño, cuando se suplemente el caso de uso, los posibles medios de implementación se particularicen de acuerdo a otros aspectos como los estándares de diseño gráfico, aspectos de usabilidad, restricciones de la aplicación, entre otros.&lt;br /&gt;&lt;br /&gt;3. El versionamiento y el involucramiento del usuario. Es importante tener una versión del caso de uso tan pronto como sea posible, empezar a discutirla con el usuario, refinar la versión y congelarla tan tarde como sea posible, eso sí, antes de que finalice la etapa de especificación de requisitos, ya sea para una iteración en particular o para una fase determinada del proceso. (De Iteraciones y de Fases será otro tema para una lectura fundamental futura).&lt;br /&gt;&lt;br /&gt;Ahora bien, el usuario nunca especifica o documenta casos de uso, pero sí los revisa, propone cambios y los aprueba. Hay un tiempo para todo. Si el cambio propuesto ocurre después de finalizada la etapa de especificación, es tarea del Analista de reportarlo como lo que llamamos comúnmente un &lt;strong&gt;control de cambio&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;¿Y sobre la evolución del caso de uso? Por evolución me refiero aquí a lo que sucede con un caso de uso una vez está aprobado (versión 1.0) por el usuario. Se trata del análisis, el diseño, la implementación, la integración, las pruebas, la puesta en operación del caso de uso. Son temas extensos, motivo de más lecturas fundamentales por hacer.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-3.html"&gt;&lt;strong&gt;Lectura Fundamental Siguiente&lt;/strong&gt;: “Casos de Uso: Del Todo y de Sus Partes”&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a title="" style="mso-footnote-id: ftn1" href="http://www.blogger.com/post-edit.g?blogID=10583243&amp;postID=116379062551116684#_ftnref1" name="_ftn1"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;[1]&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; IBM Rational Unified Process –RUP&lt;br /&gt;&lt;/span&gt;&lt;a title="" style="mso-footnote-id: ftn2" href="http://www.blogger.com/post-edit.g?blogID=10583243&amp;amp;postID=116379062551116684#_ftnref2" name="_ftn2"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;[2]&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; seleccionar. tr. Elegir, escoger por medio de una selección. Real Academia Española © Todos los derechos reservados.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-116379062551116684?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dT3fyx_-f0Jx21y9O5wgwOqKr-4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dT3fyx_-f0Jx21y9O5wgwOqKr-4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dT3fyx_-f0Jx21y9O5wgwOqKr-4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dT3fyx_-f0Jx21y9O5wgwOqKr-4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/91p5uCQ50Bs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/116379062551116684/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=116379062551116684" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116379062551116684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116379062551116684?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/91p5uCQ50Bs/lecturas-fundamentales-2.html" title="Lecturas Fundamentales 2" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-fyp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-116312832854296812</id><published>2006-11-09T21:55:00.000-05:00</published><updated>2007-08-02T11:15:23.557-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.557-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Lecturas Fundamentales</title><content type="html">&lt;p&gt;Lectura # 1&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;Casos de Uso: De Vuelta a lo Fundamental&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Volvamos a lo básico: un caso de uso es un conjunto de secuencias de actividades ejecutadas, normalmente por la interacción entre un ser Humano y una máquina. Las actividades son iniciadas por una entidad externa llamada Actor y las actividades terminan con un resultado de valor observable para ese Actor.&lt;/p&gt;&lt;p&gt;Desde otra perspectiva, la del usuario que usa el sistema, un caso de uso es una pieza de funcionalidad de software, casi siempre, una pieza indivisible, que tiene:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Uno o más datos de entrada, el estímulo &lt;/li&gt;&lt;li&gt;Uno o más datos de salida, la respuesta &lt;/li&gt;&lt;li&gt;Un número finito de pasos o tareas, el proceso &lt;/li&gt;&lt;li&gt;En principio, cada uno de esos pasos bien podría realizarse usando “sólo lápiz y papel”, la simplicidad &lt;/li&gt;&lt;li&gt;Un comienzo, la orientación &lt;/li&gt;&lt;li&gt;Un fin, el éxito. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;¿Alguien recuerda a qué se parece esa definición?&lt;/p&gt;&lt;p&gt;Un caso de uso es el primer peldaño en la conversión de las necesidades de los usuarios a un sistema automatizado. Es el primero, el cimiento: para llegar al cielo todavía se requieren muchos otros elementos (léase análisis, arquitectura, diseño, implementación…) &lt;/p&gt;&lt;p&gt;Un caso de uso es el componente primario del modelo dinámico de un sistema, ese que hace e intenta responder la pregunta: ¿qué hace el software? Ese que juzga (analiza) el sistema por sus acciones. Sí, ese del que se dice es una representación abstracta de lo que hace el software, el que define el comportamiento del sistema.&lt;/p&gt;&lt;p&gt;Ahora bien, habitualmente un caso de uso se escribe en el formato “el actor hace…, el sistema hace…” un diálogo, un guión, una escena, en este caso, de un sistema de software.&lt;/p&gt;&lt;p&gt;Con esto en mente, resolvamos varias preguntas que siempre llegan a mi buzón:&lt;/p&gt;&lt;p&gt;¿Cuántas secuencias forman el “conjunto de secuencias” del caso de uso? Una, dos, tres…, un número pequeño, contable de secuencias. Como en casi todos estos temas, no está escrita la última palabra. Depende del contexto, del proceso de negocio que implementa el caso de uso, del resultado esperado, de la cantidad y calidad de los datos de entrada, de la habilidad de los usuarios del caso de uso, de los escenarios de usabilidad, de…, la lista de es larga.&lt;/p&gt;&lt;p&gt;En breve, un caso de uso de una única secuencia puede ser mucho más complejo que un caso de uso de media docena de secuencias. El asunto es: el número de secuencias de pasos no es el único capricho de un caso de uso.&lt;/p&gt;&lt;p&gt;Entonces ¿cuántas actividades tiene una secuencia? La respuesta es la misma: un número pequeño. Las prácticas contextuales nos dicen que siempre habrá una secuencia “regular”, la que más ocurre, la principal, la básica; y también podrán existir cero, una, dos, tres…, secuencias de menor ocurrencia, secundarias, eventuales, cada una de ellas, quizás, con un número menor de pasos que la primera.&lt;/p&gt;&lt;p&gt;¿Una secuencia es lo mismo que un escenario? Ah, este es un error muy común que cometemos. Apenas es una feliz coincidencia que sean lo mismo; pero de una secuencia, principal o no, pueden surgir uno o más escenarios. &lt;/p&gt;&lt;p&gt;Definición 1: Un escenario es un “camino” de ejecución, una instancia, del caso de uso con datos reales, donde el actor tiene un nombre, los datos tienen un valor específico y donde efectivamente hay un resultado que se puede “ver”. Quienes alguna vez han diseñado casos de prueba conocen bien esta diferencia. De hecho, un escenario puede (y habitualmente lo hace) ir a través de varias secuencias, normalmente, la principal y una o más secundarias. En síntesis, los escenarios son hilos cohesivos de comportamiento del caso de uso ocasionados por el estímulo que este recibe desde el exterior.&lt;/p&gt;&lt;p&gt;¿Y esas actividades cómo se escriben? ¿Cuál es el alcance de las mismas? Se escriben en terminología del usuario, sin detalles técnicos; en términos lingüísticos, siempre deberían ser escritas como una expresión verbal simple, sin adornos, sin sinónimos, sin adjetivos, sin comentarios del autor: un caso de uso es “orientado-al-verbo” si quisiéramos parafrasear algunos de los términos más usados por quienes nos movemos por los vericuetos insondables del tratamiento sistémico de la información.&lt;/p&gt;&lt;p&gt;En eso se diferencia un caso de uso de un guión de teatro, por ejemplo. Este último es rico en emociones, en observaciones, en detalles analógicos y puntos de vista subjetivos tanto del autor como de los personajes que intervienen.&lt;/p&gt;&lt;p&gt;¿Y qué hay del nivel de granularidad? Aquí entramos en el dilema del CRUD&lt;a title="" style="mso-footnote-id: ftn1" href="mhtml:file://C:/Documents" name="_ftnref1"&gt;[1]&lt;/a&gt; o no CRUD, esa es la cuestión. Por agilidad deberíamos escribir casos de uso esenciales, no descompuestos funcionalmente, es decir, casos de uso que no entren en el nivel de detalle de la “pantalla” o del “formulario”, de los botones y cuadros de texto. Un caso de uso esencial deja un margen de maniobra al Analista, al Programador, al Arquitecto y aún al Probador. Los detalles de usabilidad, colorido y presentación bien podrían ser consignados en documentos auxiliares, en estándares en los cuales basar su implementación. Escribir casos de uso CRUD y similares aumenta innecesariamente el número de casos de uso, el tiempo de especificación, el tiempo de revisión, el tiempo de aprobación. Sí, quizás disminuya el tiempo de programación, pero este es cada vez más reducido a la luz de las poderosas herramientas con las que contamos hoy para escribir código fuente. &lt;/p&gt;&lt;p&gt;Definición 2: un caso de uso esencial se caracteriza porque: la funcionalidad CRUD es una porción del caso de uso, el actor que lo inicia está bien generalizado, su secuencia básica completa una interacción mayor con el sistema, no está asociado con componentes arquitectónicos o del sistema, es completamente independiente de la implementación de la Interfaz de Usuario, contiene un número mayor de secuencias alternas (hummm, esto podría representar algún tipo de inconveniente a la hora de cualificar la legibilidad del caso de uso), representa muchos ejemplos concretos de interacción, es decir, deriva en muchos escenarios, es bastante útil para pruebas del sistema y de funcionalidad. Finalmente, un caso de uso esencial forma parte de un modelo de casos de uso cuyo número de extensiones e inclusiones es menor al 20% de todo el modelo.&lt;/p&gt;&lt;p&gt;Definición 3: un caso de uso descompuesto funcionalmente es aquel que aborda un solo elemento CRUD a la vez, está vinculado a usuarios concretos específicos, no a actores abstractos, su flujo básico no completa una interacción mayor con el sistema, en cambio, describe funciones primarias del mismo, está completamente ligado a un componente del sistema o a un componente arquitectónico específico, está vinculado a una pantalla o función de usuario determinada y contiene instrucciones concretas de diseño de IU, incluye de cero a dos flujos secundarios frecuentemente relacionados con datos, Los escenarios derivados casi siempre deben invocar varios casos de uso para completar un ejemplo integral y es útil para pruebas unitarias. Para terminar, en un modelo de casos de uso descompuestos funcionalmente más de la mitad de los casos de uso son inclusiones o extensiones.&lt;/p&gt;&lt;p&gt;Una práctica contextual beneficiosa es sacrificar el modelo de los casos de uso descompuestos funcionalmente en aras de un diseño arquitectónico robusto y estable, de un modelo estático consistente y resistente y de una especificación más limpia y clara para quien, en últimas, revisa y aprueba cada caso de uso: el usuario.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ejemplo # 1: el caso de uso “Hola Mundo”&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Este es un caso de uso simple:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;El caso de uso inicia cuando el Actor ejecuta la aplicación Hola Mundo &lt;/li&gt;&lt;li&gt;El sistema muestra el mensaje “Hola Mundo.” &lt;/li&gt;&lt;li&gt;El caso de uso termina &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Ya tendremos la oportunidad de entrar en detalles acerca de como se escribe un caso de uso.&lt;/p&gt;&lt;p&gt;Lo que viene: bueno, habrá más de estas lecturas fundamentales. ¿De dónde surgen los casos de uso? ¿Y qué hay de los actores? ¿Cuándo un caso de uso está terminado? ¿Hay vida más allá de los casos de uso?&lt;/p&gt;&lt;p&gt;Estas y otras cuestiones nos aguardan en el universo binario de la técnica y la ciencia informática. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html"&gt;Lectura Fundamental Siguiente&lt;/a&gt;&lt;/strong&gt;: “&lt;a href="http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales-2.html"&gt;Casos de Uso: Origen, Especificación y Evolución&lt;/a&gt;”&lt;/p&gt;&lt;p&gt;Hasta entonces.&lt;/p&gt;&lt;p&gt;&lt;a title="" style="mso-footnote-id: ftn1" href="mhtml:file://C:/Documents" name="_ftn1"&gt;[1]&lt;/a&gt; CRUD: Create Read Update Delete (Crear, Leer, Actualizar, Eliminar). Operaciones fundamentales de los sistemas de información.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-116312832854296812?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mTzSVi-g-twaTQomSdw7Gzzy1t0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mTzSVi-g-twaTQomSdw7Gzzy1t0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mTzSVi-g-twaTQomSdw7Gzzy1t0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mTzSVi-g-twaTQomSdw7Gzzy1t0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/IQUVCXF90fA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/116312832854296812/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=116312832854296812" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116312832854296812?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/116312832854296812?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/IQUVCXF90fA/lecturas-fundamentales.html" title="Lecturas Fundamentales" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2006/11/lecturas-fundamentales.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-cCp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-111766540223990730</id><published>2005-06-01T17:32:00.000-05:00</published><updated>2007-08-02T11:15:23.558-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.558-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Prolegómenos Sobre el Lenguaje de Modelado Unificado</title><content type="html">Este artículo se puede bajar haciendo click a continuación:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://b.1asphost.com/LuchoSalazar/GazafatonarioIT/Prolegmenos%20Sobre%20el%20Lenguaje%20de%20Modelado%20Unificado.pdf"&gt;Prolegómenos Sobre el Lenguaje de Modelado Unificado&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Me puedes contactar en &lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-111766540223990730?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UBPB3TMwZ14xjwmaeZpfUHGwtNA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBPB3TMwZ14xjwmaeZpfUHGwtNA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UBPB3TMwZ14xjwmaeZpfUHGwtNA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBPB3TMwZ14xjwmaeZpfUHGwtNA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/jdAAaSmmOA8" height="1" width="1"/&gt;</content><link rel="related" href="http://b.1asphost.com/LuchoSalazar/GazafatonarioIT/Prolegmenos%20Sobre%20el%20Lenguaje%20de%20Modelado%20Unificado.pdf" title="Prolegómenos Sobre el Lenguaje de Modelado Unificado" /><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/111766540223990730/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=111766540223990730" title="3 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/111766540223990730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/111766540223990730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/jdAAaSmmOA8/prolegmenos-sobre-el-lenguaje-de.html" title="Prolegómenos Sobre el Lenguaje de Modelado Unificado" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2005/06/prolegmenos-sobre-el-lenguaje-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-cCp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-111636196745694477</id><published>2005-05-17T15:17:00.000-05:00</published><updated>2007-08-02T11:15:23.558-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.558-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Problemancia y Solucionancia</title><content type="html">&lt;div align="left"&gt;De todas las preguntas, observaciones y similares que me llegan a diario y que desafortunadamente por razones de tiempo no puedo atender en su completitud, quiero referirme esta vez a algunos comentarios y cuestiones que un colega me hace, a raíz de mi artículo anterior sobre Iteraciones. Ya le respondí a él, pero luego pensé que era interesante ampliar mis respuestas y darlas a un público más amplio, porque además son una muestra representativa de los temas que siempre discuto en los grupos de trabajo.&lt;br /&gt;&lt;br /&gt;Como siempre, los nombres y algunos datos fueron cambiados para proteger la identidad de los culpables.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Sobre RUP&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Nuestro amigo empieza diciendo que “&lt;span style="color:#6600cc;"&gt;&lt;em&gt;RUP no es una metodología, sino un Proceso y como tal tiene metodología y responsables de las actividades y artefactos.&lt;/em&gt;&lt;/span&gt;”&lt;br /&gt;&lt;br /&gt;Ciertamente. RUP es un proceso de ingeniería de software, ya había hecho una presentación al respecto en &lt;a href="http://gazafatonarioit.blogspot.com/2005/02/el-proceso-unificado-de-ibm-rational.html"&gt;El Imperio de las Metodologías&lt;/a&gt;, así es que estoy de acuerdo con esa apreciación, sin embargo, en el contexto en el que lo uso, Proceso y Metodología son sinónimos. Ahora van a salir los puristas del idioma a decirme que eso no es cierto, que hay una diferencia bien marcada. Pero no se trata de eso, hablo de las situaciones en las que uso las palabras: metodología es un término más arraigado en nuestro medio informático que proceso, que nos suena más a algo químico. Hay que ser flexibles en ese sentido y eso me da pie para hablarles de algo más adelante sobre adaptación.&lt;br /&gt;&lt;br /&gt;Formalmente, un proceso es un conjunto de pasos ordenados con los que se busca un objetivo; en ingeniería de software, el propósito es construir un producto de software; en el caso de RUP, esos pasos están organizados en Disciplinas que a su vez definen Flujos de Trabajo y otros elementos del proceso.&lt;br /&gt;&lt;br /&gt;Nuestro colega sigue diciendo que “&lt;em&gt;&lt;span style="color:#6600cc;"&gt;en este momento él y su equipo se encuentran desarrollando un proyecto bastante grande siguiendo los lineamentos de RUP, y por ser la primera experiencia ha sido difícil la aplicación (el proyecto es contratado con una empresa desarrolladora de Software). Están precisamente terminando la 4a iteración de la fase de Elaboración.&lt;/span&gt;&lt;/em&gt;”&lt;br /&gt;&lt;br /&gt;Ya he tenido experiencias con RUP (coincidencialmente, la primera de ellas hace algunos años, fue con un proyecto también muy grande, como el mencionado), y también ha sido complejo aplicarlo. Ha sido un proceso de adaptación y adopción, yo lo he llamado en mis conferencias “de tropicalización”. Este tipo de proyectos son escasos en nuestro medio (quiero decir, proyectos de software de varias docenas de personas y de varios años de duración), pero se dan algunas veces. La experiencia, en todo caso, ha sido enriquecedora (a veces ha sido dura, pero los resultados se han visto). En particular, celebro que estén involucrados en este tipo de procesos, creo que es la única forma de mejorar la calidad de lo que hacemos, productos de software.&lt;br /&gt;&lt;br /&gt;Voy a hacer énfasis en esto de la adaptación y adopción. El Proceso Unificado tiene muchos “roles” responsables de esa gran cantidad de actividades y de ese enorme conjunto de artefactos que se pueden generar siguiendo el proceso al pie de la letra. Pero una de las grandes ventajas de RUP es que, aunque rígido, permite cierta flexibilización por parte de quienes lo siguen. Y aquí “seguir” es la palabra clave, como lo anotaba nuestro lector en su comentario anterior. Esto quiere decir que no debemos meternos de cabeza en el proceso, sino acomodar y aceptar muchos de sus delineamientos, teniendo en cuenta siempre las habilidades del equipo del proyecto, el tiempo de entrega y los recursos (no es lo mismo “RUPizar” con las herramientas que proporciona IBM Rational –RequisitePro, Rose, Robot, XDE, entre muchas otras, que hacerlo prácticamente con lápiz y papel, como ocurre en muchos lados a nuestro alrededor.)&lt;br /&gt;&lt;br /&gt;Por ejemplo, es posible tener en un mismo documento (o Artefacto), La Visión del Sistema, la Especificación de Requisitos y la Especificación Suplementaria, y no en tres documentos separados como propone el proceso. Esto ahorra tiempo, esfuerzo y proporciona un mayor entendimiento del sistema en construcción: la idea es hacer encajar las partes comunes y no comunes de cada uno de esos elementos en uno solo de ellos. Es una propuesta, funciona bien, en proyectos pequeños y medianos, los que hacemos con la llegada de las lluvias.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Sobre Mecanismos de Análisis, Diseño e Implementación&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Luego pasamos al tema de las preguntas, inquietudes razonables, a las que traté de dar respuesta desde mi punto de vista y soportado en mi experiencia. Aquí la primera:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;Los Mecanismos de Análisis, Diseño e Implementación deben quedar en un artefacto o documento en la fase de Elaboración, necesariamente? O se pueden entregar en la fase de Construcción? Y cual sería la importancia de tenerlos en la fase de Elaboración?&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Trataré de definir en palabras simples qué es esto de los Mecanismos de Análisis, Diseño e Implementación. Un mecanismo de análisis representa un patrón que constituye una solución común a un problema común. Afortunadamente para nosotros, en ingeniería de software ya existen muchos problemas documentados, y con la aparición de cada nueva plataforma o tecnología, se documenta la forma de solucionar esos problemas habituales. Puedo citar algunos ejemplos prácticos: Manejo de Errores o Fallas del Sistema, Sincronización de Procesos y Acceso a Datos. En general, los mecanismos de análisis nos permiten concentrarnos en el análisis de los requisitos funcionales, el problema propiamente dicho, y no sumergirnos en ciertas complejidades que nos pueden conducir a la llamada “parálisis del análisis”, muy temida por todos.&lt;br /&gt;&lt;br /&gt;Entre tanto, un Mecanismo de Diseño es un refinamiento de un mecanismo de análisis correspondiente. Un mecanismo de diseño agrega detalles concretos al mecanismo de análisis conceptual, pero llega hasta justo antes de proponer una técnica particular de implementación. Tanto los mecanismos de diseño, como los de análisis pueden instanciar uno o más patrones, en este caso, patrones arquitectónicos o de diseño.&lt;br /&gt;&lt;br /&gt;De manera similar, un Mecanismo de Implementación es un refinamiento de un mecanismo de diseño correspondiente, usando ya una plataforma o lenguaje de programación específicos. Por ejemplo, para cada uno de los problemas que mencioné arriba ya existen soluciones en una plataforma como Microsoft.Net (y supongo que en J2EE también existirán). De los siguientes enlaces pueden bajar la solución a esos problemas, cuando se trata de usar tecnología Microsoft:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp"&gt;Manejo de Errores o Fallas del Sistema&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/PAIBlock.asp"&gt;Sincronización de Procesos&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp"&gt;Acceso a Datos&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001271"&gt;Y aquí pueden bajar otras soluciones comunes.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y para responder la duda citada, los mecanismos de Análisis, Diseño e Implementación hacen parte de lo que yo llamo “documentación interna”. Efectivamente, pueden hacer parte, por ejemplo, del documento de arquitectura, en cuyo caso lo extenderían y lo harían más complejo, innecesariamente. Lo que sí debe quedar en este documento son las relaciones o el mapeo de los mecanismos de análisis con los mecanismos de diseño con los mecanismos de implementación. Estos, a su vez, sí pueden quedar en el documento de Guías de Diseño, que también es responsabilidad del Arquitecto y que hace parte del Modelo de Diseño. En cualquier caso, estos mecanismos siguen siendo un asunto “peliagudo” (no sé si entiendan el término –“complicado”), son temas algo abstractos y muchas veces prefiero evitarlos, al menos, presentarlos al cliente (aun al representante del área de tecnología), pues siempre sigo la premisa de que “modelamos para entender el sistema que luego vamos a construir”.&lt;br /&gt;&lt;br /&gt;Ahora bien, estos mecanismos, muy tarde, deben estar para el refinamiento de la arquitectura, hacia el final de fase de Elaboración. La idea es que haya suficiente claridad al momento de enfrentar el gran grueso de Construcción y que las soluciones comunes estén quizás ya implementadas. Reusabilidad ante todo. Además de esto, son importantes en Elaboración porque son un indicador de que conocemos muy bien el sistema, su arquitectura, la forma como se va a construir e implantar y porque, precisamente, tenemos desde el inicio de la construcción un conjunto de soluciones preestablecidas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Sobre el Modelo de Dominio&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;El Modelo de Dominio es indispensable como insumo del documento de arquitectura? Es decir, lo necesito como insumo para validar la vista Lógica?&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;De acuerdo al Proceso Unificado, un modelo de dominio es un modelo de objetos del negocio que se enfoca en “el producto, entregables o eventos que son importantes para el dominio del negocio.” Un modelo de dominio es un modelo del negocio “incompleto”, en tanto omite las responsabilidades de los individuos. El modelo de dominio típicamente muestra las entidades mayores del negocio, sus responsabilidades funcionales y las relaciones entre esas entidades.&lt;br /&gt;&lt;br /&gt;Sin duda, el modelo de dominio es útil para validar la vista lógica de la arquitectura, pero no solo para eso, de hecho, es la base de dicha vista, creo que sin el modelo de dominio no podremos obtener la vista lógica completa y realmente tampoco estaríamos en capacidad de avanzar mucho, porque no tener el modelo de dominio indica que todavía no conocemos lo suficiente el sistema. Sin embargo, en la práctica, el modelo de dominio evoluciona hasta la fase de Construcción, cuando todavía desarrollamos casos de uso que no se trataron en Elaboración.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Sobre Casos de Uso Significativos&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;Cuántos casos de uso sería aconsejable desarrollar en la fase de Elaboración para definir la línea base de arquitectura?&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Cuántos casos de uso? Muchos. Depende del número total de ellos. La última palabra sobre este tema no está dicha ni aceptada, pero podríamos estar hablando de más del 60% de los casos de uso, al terminar la fase de Elaboración. Los que sí deben estar terminados son los casos de uso significativos para la arquitectura, aquellos que tienen mayor impacto sobre la misma.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;Con una docena de casos de uso seleccionados como arquitectónicamente significativos de más de mil casos de uso identificados hasta el momento (final de la fase de Elaboración), puedo decir que mi arquitectura es estable? Estos casos de uso arquitectónicamente significativos se escogieron teniendo en cuenta el riesgo tecnológico que representaban para su implementación desde el punto de vista técnico.&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;Una docena de casos de uso me parece un número muy pequeño comparado con más de mil de ellos. Desde el exterior, y desde mi perspectiva, no creo que podamos hablar de una arquitectura estable. Si seguimos los delineamientos de elaboración de casos de uso, por lo menos, deberíamos tener un centenar o más de ellos arquitectónicamente significativos. Ahora bien, mil casos de uso es un número muy grande para un sistema, yo diría que exageradamente grande, dado que los casos de uso son el medio a través del cual los usuarios (aunque no siempre es así) se comunican con el sistema. Estamos hablando entonces de que el sistema en construcción tiene más de mil maneras de acceder a el. Lo veo complejo desde aquí. Recordemos además que un caso de uso puede tener más de un escenario o secuencia alternativa, con lo que estaríamos hablando tal vez de miles de escenarios. Mucho, pienso yo.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;Se debieron escoger Casos de Uso Arquitectónicamente significativos desde el punto de vista de los usuarios o stakeholders y que representen la funcionalidad de negocio? De no tenerse en cuenta estos casos de uso, qué riesgo presenta la definición de la línea base de arquitectura?&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;Sí, se debieron (se deben) escoger. Pero con mucho cuidado. Algunas veces los usuarios piensan que un caso de uso (una funcionalidad es compleja o significativa) porque simplemente hacen uso de miles o millones de registros en muy poco tiempo y resulta que quizás para nosotros el asunto se resuelve con un algoritmo implementado en un procedimiento almacenado, para lo que se supone somos expertos.&lt;br /&gt;&lt;br /&gt;Si el usuario nos dice, por el contrario, que sin importar el sitio de origen, la transacción debe llegar al servidor central y responder al usuario en menos de cinco segundos, así la transacción sea traer unos datos básicos de un cliente dada su cédula, usando los canales existentes en la compañía, entonces sí que debemos preocuparnos. Y como este hay muchos casos que se deben tener en cuenta a la hora de seleccionar los “significativamente arquitectónicos”.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Sobre La Vista Lógica&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#6600cc;"&gt;La vista Lógica me debe mostrar el Core de mi negocio? O que esperaría ver en ella?&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;El “core” del negocio debe reflejarse de alguna forma en la vista lógica si el sistema Es para el “core” del negocio, de lo contrario no. En cualquier caso, la vista lógica muestra paquetes de alto nivel, subsistemas, clases y las realizaciones de casos de uso. Observemos que si el sistema es “core”, las clases del dominio reflejan precisamente el negocio.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Conclusiones&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y bueno, como recomendación adicional, les sugiero que traten de “platanizar” RUP, como dicen algunos de mis colegas, adoptarlo, sí, pero adaptarlo a nuestros recursos, a nuestras habilidades, a nuestro entorno, donde no tenemos el tiempo ni el presupuesto de los grandes proyectos de otros lados. Quizás combinarlo con prácticas ágiles y obtener una “metodología” acorde al medio.&lt;br /&gt;&lt;br /&gt;Como siempre, los invito a que compartan conmigo y con todos sus comentarios acerca de este artículo. Me pueden escribir a &lt;a href="mailto:luissalazar@usa.net"&gt;luissalazar@usa.net&lt;/a&gt; o en &lt;a href="http://gazafatonarioit.blogspot.com/"&gt;http://gazafatonarioit.blogspot.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="right"&gt;Luis Antonio Salazar Caraballo&lt;br /&gt;&lt;br /&gt;Medellín, Noviembre 4 de 2003&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-111636196745694477?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p1NbJOtdLzkFJgOmwE_u9mJy5ec/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p1NbJOtdLzkFJgOmwE_u9mJy5ec/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p1NbJOtdLzkFJgOmwE_u9mJy5ec/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p1NbJOtdLzkFJgOmwE_u9mJy5ec/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/sHgqBmzfy6o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/111636196745694477/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=111636196745694477" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/111636196745694477?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/111636196745694477?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/sHgqBmzfy6o/problemancia-y-solucionancia.html" title="Problemancia y Solucionancia" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2005/05/problemancia-y-solucionancia.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-cSp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-110842202084870595</id><published>2005-02-14T17:58:00.000-05:00</published><updated>2007-08-02T11:15:23.559-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.559-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Desarrollo de Software por Iteraciones</title><content type="html">&lt;strong&gt;Introducción&lt;br /&gt;&lt;/strong&gt;Una de las prácticas que más inquieta a los productores de software, una de las llamadas Mejores Prácticas, es esta de las Iteraciones en un proyecto. Una Iteración, para empezar, puede ser vista como un mini-proyecto, sin que el prefijo “mini” quiera decir que el proyecto está inconcluso o es de mala calidad, No. De hecho, esta práctica ha demostrado que el producto final es de mejor calidad que el elaborado mediante metodologías tradicionales como Cascada.&lt;br /&gt;Formalmente, una Iteración abarca el desarrollo de actividades que conducen a la liberación de un producto –una versión ejecutable y estable de un producto, junto con cualquier otro elemento periférico necesario para usar esta versión, como la documentación respectiva, para citar un caso. Desde este punto de vista, en una Iteración se hace un paso completo por todas las etapas del desarrollo de software, desde el análisis de requisitos, hasta la programación y, quizás, puesta en producción, pasando por análisis y diseño, pruebas y control de cambios. Si se quiere es como un proyecto pequeño realizado “en cascada”.&lt;br /&gt;Pero alrededor del concepto de las Iteraciones hay involucrados muchos aspectos de relevancia: cuántas iteraciones tiene un proyecto? Cuánto tarda una iteración? Todas las iteraciones tardan lo mismo? Qué es la Liberación de un producto? Cómo se seleccionan los requisitos a implementar en una iteración? Y muchas otras.&lt;br /&gt;&lt;strong&gt;Beneficios&lt;/strong&gt;&lt;br /&gt;Antes de tratar algunas de esas cuestiones, insistiré en los motivos por los cuales debemos iterar:&lt;br /&gt;Ø      Puesto que una iteración es un proyecto pequeño completo, hay un mejor control de los recursos, el talento humano asignado al proyecto, la calidad del producto implantado y los cambios en requisitos que se puedan producir durante el tiempo total del proyecto.&lt;br /&gt;Ø      Disminución en los riesgos de un proyecto. Hablo de riesgos tecnológicos, de riesgos administrativos y hasta del entorno. Por ejemplo, es posible que para implementar un requisito, o un conjunto de ellos, un equipo seleccione las herramientas y/o la técnica y/o la plataforma equivocada. Y de esto no se dan cuenta hasta que el producto (la versión a liberar en esa iteración) no está listo o casi listo. Por ejemplo, los tiempos de respuesta no son adecuados, la seguridad de los datos no se puede garantizar, el manejo de concurrencia no es aceptable, entre muchos otros aspectos. En un proyecto tradicional, estos hechos solo se ven al final del mismo, cuando ya no hay tiempo de hacer correcciones, de buscar alternativas, cuando se perdió la oportunidad (el costo de oportunidad), etc. Sin embargo, en un proyecto iterativo, muy probablemente todavía habrá tiempo (luego de buscar a los culpables y de elogiar a los no participantes!) de hacer algo. Cómo qué? Se define otra iteración, con otra técnica, con otras herramientas, con otra plataforma, lo que sea necesario, para asegurar que esta vez el requisito sí va a ser bien implantado.&lt;br /&gt;Ø      Las iteraciones relajan los nervios. Hablo de las expectativas que tienen los usuarios, los patrocinadores (llamados en lenguaje metodológico stakeholders), los desarrolladores; hablo también del producto que se libera o entrega en cada iteración. Cuando aquellos ven este, verifican la funcionalidad (los casos de uso), la calidad (desempeño, seguridad, estándares, entre otros), se forjan nuevas ideas de lo que ha sido, es y será el producto final (por supuesto están los “yaques” –ya que hiciste el cálculo de la retefuente, por qué no generas un informe que se envíe por Mail en formato Excel al gobierno?) En mi caso, validan la capacidad (de respuesta) del proveedor, comprueban que obtuvieron lo que compraron y los usuarios comienzan a hablar de las siguientes fases del proyecto, sin haber terminado esta. Recuerden, se terminó una iteración, no el proyecto. En cualquier instancia, los usuarios, sobre todo, no tienen que esperar meses o años para ver su producto, preguntándose todo el tiempo si estos chicos de Sistemas van a entregar y cuándo y que será lo que están haciendo y si habrán entendido lo que querían decir.&lt;br /&gt;Ø      Hay otros beneficios técnicos, como que la reusabilidad se facilita y se mejora. Esto es claro, porque una vez terminado un producto, o parte de el, sus componentes ya están ampliamente probados y documentados y se podrán usar en las iteraciones sucesivas donde seguramente serán sometidos a incrementos graduales. También se puede aprender en el camino: me refiero a que los desarrolladores pueden no solo aprender de sus errores pasados, sino de las nuevas técnicas a utilizar durante la iteración; también, las competencias y especialidades que se necesitan para una iteración específica son mejor utilizadas, es decir, es posible emplear desarrolladores diferentes en cada una de las iteraciones del proyecto.&lt;br /&gt;&lt;strong&gt;Cómo Iterar&lt;br /&gt;&lt;/strong&gt;Ahora sí, trataré de resolver algunos de los temas que planteé antes.&lt;br /&gt;Ya sabemos que el desarrollo de un proyecto debe hacerse teniendo como punto de partida y como conductor los casos de uso. Una vez que hayamos elaborado el documento de Especificación de Requisitos (Funcionales y No Funcionales), se escriben las descripciones de todos los casos de uso del sistema (hablo de Nombre del Caso de Uso, Actor, Descripción General y cualquier otra información que se tenga al momento de elaborar las Especificaciones.)&lt;br /&gt;Con esta lista, procedemos a “calificar” los casos de uso. Esta calificación la hacemos de acuerdo al grado de importancia y de criticidad, en cuanto a riesgo de implementación se refiere, de cada caso de uso.&lt;br /&gt;Respecto a su importancia, un caso de uso, como veremos en un artículo próximo sobre el tema, puede clasificarse en: Requerido, Importante o Adicional. Los primeros son aquellos sin los cuales el sistema no puede funcionar. Los casos de uso Importantes son aquellos sin los cuales el sistema puede funcionar, al menos, durante algún tiempo, pero que debemos implementar tan pronto como sea posible. Mientras tanto, los casos de uso Adicionales son aquellos no obligatorios para el sistema (los “yaques” que mencionaba antes), los Buenos, Bonitos y Baratos, como decimos popularmente. Por supuesto, la implementación de estos últimos debe hacerse siguiendo los mismos delineamientos metodológicos y técnicos que los demás; el que sean Adicionales, no los hace de menos calidad o incompletos o no sujetos al mismo proceso de pruebas que los otros.&lt;br /&gt;En relación a su Criticidad, los casos de uso se califican de 1 a 5, por ejemplo, donde 1 es de menor riesgo, 3 es de riesgo aceptable y 5 es de riesgo muy alto. Este riesgo se refiere a la implementación del caso de uso y se debe medir a la luz de varios criterios:&lt;br /&gt;Ø      Conocimiento del tema (del negocio) por parte de los usuarios y de los desarrolladores. Hay usuarios que desconocen parte de lo que quieren resolver a través de un sistema (porque la legislación o las políticas son nuevas, o porque son nuevos en la compañía, etc.) También hay desarrolladores que creyeron entender algo del usuario pero no fue así, sobre todo los noveles que, al momento de una entrevista con el usuario, están pendientes de cómo resolver el problema y no de escuchar y comprender todo lo que les quisieron decir.&lt;br /&gt;Ø      Habilidad y/o experiencia de los desarrolladores en el uso de la plataforma, herramientas y técnicas utilizadas para llevar a cabo la implementación. Qué se requieren Web Services, que la plataforma .Net, que XML, que UML, que C# (léase C Sharp), que J2EE, que…, en fin, un gran universo de siglas de las que les hablaré en otra ocasión. En todo caso, estos son apenas los medios, algo en lo que se supone somos especialistas, sin embargo, algunas veces no es así. Visto así, un caso de uso que en la práctica es fácil de programar, podría tener un alto riesgo de implementación debido a la poca experiencia del programador.&lt;br /&gt;Ø      Y otras como Tiempo de Desarrollo, Número de Analistas y de Programadores, calidad de los requisitos en cuanto a su precisión, compromiso del personal externo necesario para llevar a cabo una implantación (que la gente de Seguridad, que la gente de Calidad, que la gente de Capacitación).&lt;br /&gt;Ya con los casos de uso listados y clasificados, con el tiempo límite del proyecto en mente, con el número de desarrolladores establecido, podemos hacer un Plan de Iteraciones. Este es un conjunto de actividades y tareas secuenciadas en el tiempo, con talento humano asignado y con el conocimiento de las dependencias entre tareas, para cada iteración; un plan bien detallado. Normalmente, siempre hay dos planes activos: uno para la iteración actual y uno en construcción para la siguiente iteración. El plan incluye actividades de Análisis de Requisitos, Análisis y Diseño, Programación, Pruebas y Afinación, y Puesta en Marcha; también, control de cambios, documentación y capacitación.&lt;br /&gt;Las primeras iteraciones deben planearse para implementar los casos de uso Requeridos y de Criticidad Máxima (5). Les dejo una inquietud: existen sistemas que no tengan casos de uso de criticidad 5?&lt;br /&gt;Cuántos casos de uso por iteración? Depende del número total de casos de uso y del número de casos de uso Requeridos y Más Críticos, y además del número de desarrolladores dispuestos para la implementación. Una iteración podría implementar solo un par de casos de uso, o 10 de ellos, o quizás 20 o más. En el artículo de casos de uso exploraré más este tema.&lt;br /&gt;El tiempo, la duración, de las iteraciones es otro factor importante. No está dicha la última palabra a este respecto. En un proyecto pequeño (de pocos meses –dos o tres, quizás), con pocos desarrolladores (dos o tres tal vez–o hasta uno), iteraciones de dos semanas son aceptables. En un proyecto mediano (seis meses, hasta cinco desarrolladores), iteraciones de tres o cuatro semanas son bienvenidas. En un proyecto grande (más de seis meses, más de seis desarrolladores), iteraciones de hasta seis semanas son bien vistas.&lt;br /&gt;Debo anotar que esta clasificación del tamaño de los proyectos de acuerdo a la duración y al número de desarrolladores es un poco arbitraria, soportada en la trayectoria de quien les escribe y de algunos colegas con quienes he discutido el tema. Hablo de nuestro medio. La literatura que nos llega de otras latitudes se refiere a algo totalmente distinto, donde un proyecto pequeño tarda un año y tiene 10 desarrolladores, por ejemplo.&lt;br /&gt;En mi columna anterior decía que una iteración no debería tardar más de un mes. Este asunto de las iteraciones de mes y medio que menciono arriba también es viable si se tiene un buen control del proyecto. Recuerden que este es uno de los grandes beneficios del desarrollo iterativo, el control del proyecto, obtención rápida de resultados, mitigación de riesgos.&lt;br /&gt;Ahora bien, aunque es bueno que todas las iteraciones tarden lo mismo, en la práctica es posible que esto no se dé. Hay iteraciones que por su simplicidad pueden tardar dos semanas, otras pueden tardar cuatro. Lo importante es que los recursos estén disponibles al momento de iniciar cada iteración y se tenga claridad sobre los requisitos que se van a implementar.&lt;br /&gt;&lt;strong&gt;Sobre Versiones y Entregas&lt;br /&gt;&lt;/strong&gt;La Liberación de un producto puede ser Interna o Externa. Es Interna cuando solo será usada por el grupo de desarrolladores durante la ejecución de otras iteraciones en las que se completará un producto propiamente dicho. Y es Externa cuando se trata de un producto de software completo, funcional, que se puede poner en producción.&lt;br /&gt;Ambos tipos de entrega van acompañados de pruebas y afinación, documentación, capacitación y todos los artefactos necesarios para que el proyecto pueda seguir su marcha. Si es un entregable externo, debe tratarse como el mismísimo producto final.&lt;br /&gt;También, las dos especies de producto están sujetos a versionamiento. Sea un componente, la base de datos o una porción de la misma, un grupo de páginas ASP.NET o el producto de software en su completitud, incluyendo los documentos asociados, siempre debemos conocer su versión. Les recomiendo un versionamiento simple: Versión Mayor y Versión Menor; por ejemplo: 1.1, 2.5, 4.0. Creo que no es necesario utilizar las convenciones de las grandes casas productoras (que 8.04.003.185 Build 4321 o cosas así.)&lt;br /&gt;Lo que sí deberíamos incluir, cuando sea del caso, son las Revisiones. Estas son pequeñas modificaciones o ajustes que quizás exigieron compilar y empaquetar de nuevo el software, pero nada más: la documentación es la misma, la funcionalidad no cambió, el impacto no se notó. Las cosas así, podríamos tener una versión 2.5 revisión 3 o una versión 4.0 revisión 2. Por supuesto, el número de revisiones es pequeño (máximo 5). De hecho, un conjunto de revisiones pequeñas quizás dan pie a una nueva versión menor (de la 2.5 a la 2.6).&lt;br /&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;br /&gt;Las Iteraciones constituyen una técnica apropiada, una mejor práctica, para la construcción de software. Se requieren nuevas habilidades en el manejo de proyectos, coordinación de equipos, documentación de software, desarrollos en tiempos más pequeños pero más especializados, equipos multidisciplinarios y compromiso de parte de todos los involucrados en el proyecto. Pero funciona, sin duda, en cualquier tipo de proyecto, con cualquier número de desarrolladores, sea cual fuere su complejidad.&lt;br /&gt;Los invito entonces a que pongan en práctica este nuevo “arte” de Iterar, sin importar si usan o no una metodología estricta como RUP o una ágil. Seguramente, muy pronto verán los beneficios.&lt;br /&gt;Y también los invito a que compartan conmigo y con todos en AAII sus comentarios acerca de este artículo. Me pueden escribir a &lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt;.&lt;br /&gt;Luis Antonio Salazar Caraballo&lt;br /&gt;Medellín, Octubre 15 de 2003&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-110842202084870595?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NIoH_qmQQI7lv5HwKNhNNmdqmvU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NIoH_qmQQI7lv5HwKNhNNmdqmvU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NIoH_qmQQI7lv5HwKNhNNmdqmvU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NIoH_qmQQI7lv5HwKNhNNmdqmvU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/n6NcgJjQc4Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/110842202084870595/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=110842202084870595" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/110842202084870595?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/110842202084870595?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/n6NcgJjQc4Q/desarrollo-de-software-por-iteraciones.html" title="Desarrollo de Software por Iteraciones" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2005/02/desarrollo-de-software-por-iteraciones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns-cSp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-110842181685105248</id><published>2005-02-14T17:48:00.000-05:00</published><updated>2007-08-02T11:15:23.559-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.559-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>Las Seis Mejores Prácticas</title><content type="html">En cuatro de las cinco últimas columnas he hablado de una u otra forma sobre modelado de software, en particular, y sobre desarrollo de aplicaciones, en general. En “El Papel del Modelado en la Transformación de los Requisitos en Software”, por ejemplo, decía que debemos elaborar modelos simples, a partir de cada porción significativa de requerimientos del software.&lt;br /&gt;En “Qué Diagramas Usar?”, expresé mi opinión de que todas las técnicas y elementos en un proceso como RUP tienen múltiples propósitos y que realmente, no hay una “forma corta”, de decidir lo que es apropiado en cada situación (de modelado). Y en “El Imperio de las Metodologías” decía que era práctico dividir un proyecto en pequeñas piezas o mini-proyectos, donde cada mini-proyecto es una iteración.&lt;br /&gt;Estas y otras ideas al respecto son la base de esta nueva entrega, sobre lo que debemos y no debemos hacer al emprender un proyecto de desarrollo de software, en especial sobre lo que sí debemos hacer, las prácticas que quienes nos enfrentamos día a día al reto de construir software de alta calidad consideramos como mejores, como soporte para el éxito anunciado en los proyectos.&lt;br /&gt;Combinadas unas con otras y orientadas a la raíz de los problemas cotidianos de la construcción de software, estas prácticas permiten desarrollar y mantener aplicaciones en forma repetible y predecible. Ellas son:&lt;br /&gt;1. Modelar Visualmente&lt;br /&gt;2. Manejar Requisitos&lt;br /&gt;3. Verificar la Calidad Continuamente&lt;br /&gt;4. Usar Arquitecturas Basadas en Componentes&lt;br /&gt;5. Desarrollar por Iteraciones&lt;br /&gt;6. Controlar los Cambios&lt;br /&gt;&lt;strong&gt;Modelar Visualmente&lt;/strong&gt;&lt;br /&gt;Para Modelar Visualmente, es necesario usar un lenguaje de diseño con una semántica extendida que permita mejorar la comunicación en el equipo de trabajo que elabora y revisa el diseño de la aplicación. Además de los textos gramaticales, el lenguaje debe proporcionar una sintaxis gráfica predominante y rigurosa con la cual expresemos las decisiones tomadas que luego servirán como base para la implementación del sistema. De esta forma, podremos entender mejor el sistema en construcción y razonar acerca de el con precisión. Hablo, por supuesto, de aplicaciones multi-desarrollador, aquellas en las cuales se invierte una cantidad considerable de talento humano, de tiempo y, claro, de recursos.&lt;br /&gt;El Lenguaje de Modelado Unificado –UML cumple con estas características. Y sobre el ya hice una presentación que pueden encontrar en: &lt;a href="http://b.1asphost.com/LuchoSalazar/GazafatonarioIT/Prolegmenos%20Sobre%20el%20Lenguaje%20de%20Modelado%20Unificado.pdf"&gt;http://b.1asphost.com/LuchoSalazar/GazafatonarioIT/Prolegmenos%20Sobre%20el%20Lenguaje%20de%20Modelado%20Unificado.pdf&lt;/a&gt;. También en el boletín No. 5, en esta misma columna, presenté una breve discusión sobre los distintos tipos de diagramas que usamos para hacer modelado visual. La columna está en: &lt;a href="http://gazafatonarioit.blogspot.com/2005/02/qu-diagramas-usar.html"&gt;http://gazafatonarioit.blogspot.com/2005/02/qu-diagramas-usar.html&lt;/a&gt;.&lt;br /&gt;En resumen, el modelado visual es un requisito porque muestra la esencia del sistema desde una perspectiva particular y oculta los detalles no esenciales. Los modelos, en general, pueden ayudar a:&lt;br /&gt;Ø Entender sistemas complejos&lt;br /&gt;Ø Explorar y comparar alternativas de diseño&lt;br /&gt;Ø Formar una base sólida para la implementación&lt;br /&gt;Ø Capturar los requisitos con precisión&lt;br /&gt;Ø Comunicar decisiones inequívocamente&lt;br /&gt;&lt;strong&gt;Manejar Requisitos&lt;br /&gt;&lt;/strong&gt;El Proceso Unificado define el Manejo de Requisitos como un enfoque sistemático para encontrar, documentar, organizar y hacer seguimiento a los cambios de los requisitos de un sistema.&lt;br /&gt;En este punto sería interesante que hicieran el siguiente ejercicio que les propongo: Definir que es un “requisito”, un requisito de software, ciertamente. No se imaginan ustedes las sorpresas que me he llevado cuando le digo a los asistentes a mis cursos y conferencias que hagan esa tarea, al parecer, simple para muchos. Pues bien, desde el punto de vista de RUP, un requisito es una “condición o capacidad que el sistema debe cumplir o tener”.&lt;br /&gt;Mientras escribo esta columna, John Alexander López prepara un artículo introductorio sobre manejo de requisitos de software. Esperemos a ver lo que tiene que decirnos al respecto. Lo que sí quiero dejar claro desde ya es que la recolección de requisitos puede sonar como una tarea simple y, sin embargo, puede causar estragos significativos en un proyecto porque los requisitos:&lt;br /&gt;Ø no siempre son obvios y pueden venir de muchas fuentes&lt;br /&gt;Ø no siempre son fácilmente expresables en palabras&lt;br /&gt;Ø son de muchos tipos y de distintos niveles de detalle&lt;br /&gt;Ø si no son controlados desde el comienzo del proyecto, su número puede crecer hasta límites inmanejables&lt;br /&gt;Ø están sujetos a cambios “sin previo aviso”&lt;br /&gt;Ahora bien, para manejar requisitos exitosamente, se requiere:&lt;br /&gt;Ø Analizar el problema&lt;br /&gt;Ø Entender las necesidades tanto de los patrocinadores del proyecto, como de los usuarios y demás responsables del mismo&lt;br /&gt;Ø Definir el sistema&lt;br /&gt;Ø Manejar el alcance del proyecto&lt;br /&gt;Ø Refinar la definición del sistema&lt;br /&gt;Ø Manejar los cambios&lt;br /&gt;Cada una de estas actividades requiere de talento y, evidentemente, de tiempo y recursos compartidos en el equipo de desarrollo. En las próximas entregas les hablaré más del asunto.&lt;br /&gt;&lt;strong&gt;Verificar Calidad Continuamente&lt;br /&gt;&lt;/strong&gt;Una vez me dijeron acerca de la Calidad: “yo no sé como describirla, pero soy capaz de reconocerla cuando la veo”. Les dejo una vez más la tarea de definir lo que es Calidad, concretamente, Calidad de Software.&lt;br /&gt;Lo que sí quiero ilustrar en esta columna es que se debe evaluar la calidad de todos los artefactos en distintos puntos del ciclo de vida del proyecto, a medida que este crece. Estos artefactos deben ser validados al término de cada actividad o etapa que los produce (más adelante les hablaré de Iteraciones y de los resultados que se esperan en cada una de ellas). Específicamente, a medida que se producen componentes ejecutables del sistema, estos se deben someter a un proceso de pruebas que abarque los distintos escenarios para los cuales fueron construidos (todos los escenarios, hasta aquel que solo va a acontecer una vez en la vida útil del sistema y quizás hasta el que nunca va a suceder pero que es posible que ocurra).&lt;br /&gt;Este proceso de pruebas conduce a la depuración del sistema y a la eliminación de los defectos arquitectónicos de la aplicación.&lt;br /&gt;&lt;strong&gt;Usar Arquitecturas Basadas en Componentes&lt;br /&gt;&lt;/strong&gt;En ocasiones pienso acerca de cada ser humano como un imperio y acerca de la humanidad como una summa de imperios. Y una característica común a todos los imperios es que poseen tecnología y estrategias de guerra superiores a las de los conquistados, entre las que se encuentra la famosa “divide y vencerás”, utilizada por Julio César o Hernán Cortés y adoptada hoy como herramienta guerrera por las compañías multinacionales simplemente porque los imperios buscan el control puro y escueto de los conquistados.&lt;br /&gt;Esta analogía me sirve para mostrarles que siempre hay que tener control (nosotros, el imperio) sobre lo que hacemos (soluciones de software). La estrategia de Julio César o Cortés se ha aplicado desde siempre en el desarrollo de software y se seguirá aplicando sin importar la metodología, el proceso, los avances tecnológicos o la cantidad y calidad de talento humano utilizado para crear un producto.&lt;br /&gt;Y cuando dividimos ese producto en piezas más pequeñas, controlables, ajustables, intercambiables, lo que nos queda son grupos cohesivos de código, fuente o ejecutable, con interfaces y comportamiento bien definidos que proporcionan un fuerte encapsulamiento de su contenido. Estos grupos forman la arquitectura basada en componentes de nuestro sistema. Una arquitectura así tiende a reducir el tamaño y la complejidad de la solución y, por supuesto, es más robusta y resistente.&lt;br /&gt;Hoy, las plataformas .Net o J2EE suministran las referencias arquitectónicas que necesitamos para diseñar y construir soluciones basadas en componentes. Como antes, ya se encuentra en preparación un artículo sobre la plataforma .Net que será publicado en el sitio Web de la Asociación.&lt;br /&gt;&lt;strong&gt;Desarrollar por Iteraciones&lt;br /&gt;&lt;/strong&gt;Pero la arquitectura y el producto no es lo único que dividimos al ejecutar un proyecto. El mismo proyecto está sujeto a un fraccionamiento que ha mostrado ser muy efectivo.&lt;br /&gt;La división de un proyecto en grupos continuos de proyectos más pequeños, sujetos a incesante revisión, dinámicos y evaluables, hace posible que tengamos completo control de todo el proyecto.&lt;br /&gt;En &lt;a href="http://gazafatonarioit.blogspot.com/2005/02/el-proceso-unificado-de-ibm-rational.html"&gt;El Proceso Unificado - Episodio IV&lt;/a&gt;, de hace un mes, expuse las razones por las cuales deberíamos adoptar esta práctica sin reparos. Antes de que volvamos a leerla, quisiera dejarlos con estas tres leyes que escribí hace pocos meses, luego de una discusión amena sobre manejo de proyectos:&lt;br /&gt;Ø Todo proyecto de menos de dos semanas, tarda dos semanas&lt;br /&gt;Ø Todo proyecto de entre dos semanas y un mes, tarda un mes&lt;br /&gt;Ø No hay tal cosa como un proyecto que tarde más de un mes&lt;br /&gt;Por supuesto, me refería a las iteraciones, que realmente pueden tardar más tiempo, algunos dicen que entre tres y nueve semanas, otros que entre dos y seis semanas. Bueno, esa fue mi conclusión, quince años de experiencia la soportan.&lt;br /&gt;La última de estas tres leyes también se puede leer así:&lt;br /&gt;Ø Todo proyecto que tarde más de un mes nunca termina&lt;br /&gt;Y el que esté libre de culpa que lance la primera piedra.&lt;br /&gt;&lt;strong&gt;Controlar los Cambios&lt;br /&gt;&lt;/strong&gt;Ya les dije antes que los requisitos de un sistema están sujetos a cambios “sin previo aviso”, sobre todo en proyectos a mediano y largo plazo. Pero primero lo primero, aclaración # 1: me refiero aquí a los cambios que sufren los requisitos luego de haber sido aprobados por los usuarios y de que posiblemente hayan sido implementados en alguna iteración, concluida o en ejecución, del proyecto.&lt;br /&gt;Los desarrolladores noveles son muy dados a engancharse en una carrera contra el tiempo, contra los recursos, contra el contrato, contra el producto, cuando de llevar a cabo una modificación se trata. Y permítanme decirles, damas y caballeros, que antes de hacerlo es necesario estudiar en detalle el impacto que un cambio tendrá sobre todo nuestro sistema.&lt;br /&gt;Un cambio en un requisito puede causar una dispersión de proporciones descomunales en un producto de software si no es definido claramente, evaluado y puesto a consideración de todo el equipo del proyecto. Por supuesto, el desarrollo iterativo y los componentes ayudan a mitigar los efectos ocasionados por los cambios en los requisitos y a que la implantación de estos se haga acorde a un plan establecido de manejo de cambios que no perturbe la ejecución del proyecto.&lt;br /&gt;En el Final&lt;br /&gt;Bueno, es realmente el final de una presentación efímera sobre estas prácticas. Como siempre, sostengo que los problemas más serios que he encontrado en los proyectos son de talento humano, en este caso, de comunicación entre quienes intervienen en un proyecto.&lt;br /&gt;La conclusión es que cada una de estas prácticas debe tener una buena comunicación como prerrequisito. Sin una buena comunicación, todas fallarán al tratar de alcanzar su objetivo, todos fracasaremos sin duda, y seguramente recibiremos una dosis adictiva de apremio para caer en los métodos tradicionales de cascada donde la comunicación real es substituida por montones de documentos que no contribuyen mucho a producir valor para nuestros usuarios.&lt;br /&gt;Ustedes qué creen? Compartan sus opiniones conmigo y con todos en AAII sobre este y otros temas. Pueden escribirme a &lt;a href="mailto:lucho.salazar@gmail.com"&gt;lucho.salazar@gmail.com&lt;/a&gt;.&lt;br /&gt;Referencias&lt;br /&gt;&lt;a href="http://www.rational.com/corpinfo/practices.jsp"&gt;http://www.rational.com/corpinfo/practices.jsp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aaii.org.co/html/modules.php?name=Content&amp;pa=showpage&amp;amp;pid=11"&gt;http://www.aaii.org.co/html/modules.php?name=Content&amp;pa=showpage&amp;amp;pid=11&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aaii.org.co/html/modules.php?name=Content&amp;pa=showpage&amp;amp;pid=24"&gt;http://www.aaii.org.co/html/modules.php?name=Content&amp;pa=showpage&amp;amp;pid=24&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aaii.org.co/html/modules.php?name=Sections&amp;op=viewarticle&amp;amp;artid=11"&gt;http://www.aaii.org.co/html/modules.php?name=Sections&amp;op=viewarticle&amp;amp;artid=11&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aaii.org.co/html/modules.php?name=Sections&amp;op=viewarticle&amp;amp;artid=18"&gt;http://www.aaii.org.co/html/modules.php?name=Sections&amp;op=viewarticle&amp;amp;artid=18&lt;/a&gt;&lt;br /&gt;El Proceso Unificado de Rational –RUP:&lt;br /&gt;&lt;a href="http://www.rational.com/products/rup/prodinfo.jsp"&gt;http://www.rational.com/products/rup/prodinfo.jsp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.rational.com/tryit/rup/index.jsp"&gt;http://www.rational.com/tryit/rup/index.jsp&lt;/a&gt;&lt;br /&gt;Luis Antonio Salazar Caraballo&lt;br /&gt;Medellín, Septiembre 29 de 2003&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10583243-110842181685105248?l=gazafatonarioit.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t7-KZwdGuO-BL_VK9VmFrCJK_x4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t7-KZwdGuO-BL_VK9VmFrCJK_x4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t7-KZwdGuO-BL_VK9VmFrCJK_x4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t7-KZwdGuO-BL_VK9VmFrCJK_x4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GazafatonarioIt/~4/Tyx411AVw9U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gazafatonarioit.blogspot.com/feeds/110842181685105248/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=10583243&amp;postID=110842181685105248" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/110842181685105248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10583243/posts/default/110842181685105248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GazafatonarioIt/~3/Tyx411AVw9U/las-seis-mejores-prcticas.html" title="Las Seis Mejores Prácticas" /><author><name>Gazafatonario</name><uri>http://www.blogger.com/profile/16970569346922510096</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gazafatonarioit.blogspot.com/2005/02/las-seis-mejores-prcticas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQns9eCp7ImA9WB5VEEo.&quot;"><id>tag:blogger.com,1999:blog-10583243.post-110798002157416926</id><published>2005-02-09T15:04:00.000-05:00</published><updated>2007-08-02T11:15:23.560-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-02T11:15:23.560-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Requisitos" /><category scheme="http://www.blogger.com/atom/ns#" term="Analista del Software" /><category scheme="http://www.blogger.com/atom/ns#" term="RUP" /><category scheme="http://www.blogger.com/atom/ns#" term="Proceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Caso de Uso" /><title>El Proceso Unificado de IBM Rational - "La Guerra de las Metodologías"</title><content type="html">&lt;p class="MsoNormal" style="TEXT-ALIGN: justify"&gt;&lt;span lang="ES-CO"  style="color:black;"&gt;La presentación de RUP que hice en el articulo &lt;span style="FONT-WEIGHT: bold"&gt;El Proceso Unificado de IBM Rational - "El Imperio de las Metodologías"&lt;/span&gt; suscitó algunos interrogantes. Un amigo, por ejemplo, quiere empezar “desde cero” y comprar una metodología para usar. Mi breve exposición lo inquietó pero y…, siempre hay un pero, la competencia, cuáles están en la lista de posibilidades. Desde mi punto de vista, le dije, una metodología debería, por lo menos, definir roles y responsabilidades específicas, con actividades o procedimientos detallados para cada uno, así como alguna clase de ciclo de vida completo del desarrollo de software y un conjunto de artefactos o entregables con algún tipo de resumen o de plantilla para cada uno de ellos. Por supuesto, debe ser algo ace
