Escolar Documentos
Profissional Documentos
Cultura Documentos
Probar inicialmente una herramienta CASE de UML gratuita. Compre una sólo
cuando haya agotado las opciones de las gratuitas.
Cuando haya elegido una, especialmente cuando sea para una compañía o
cuando implique una gran inversión económica, pruébela en un proyecto real
con tantos desarrolladores como le sea posible, antes de tomar una decisión.
Decida basándose en la opinión de los desarrolladores que la han utilizado por
un largo periodo, no en la opinión de arquitectos u otros que han hecho sólo
una investigación.
Escoja la herramienta UML que incluya las características que usted prefiera
en un ambiente integrado de desarrollo (IDE).
Elija una herramienta que soporte ingeniería en reversa a diagramas de
secuencia de código. O si una herramienta gratis no soporta esto, use la
herramienta gratuita para la mayoría de los desarrolladores y compre sólo
unas pocas copias de la herramienta que si lo hace.
Prefiera una herramienta que imprima los diagramas a plotter en papel grande
de plotter, en font grande, de forma que realmente se puedan visualizar
diagramas extensos.
Una lista de herramientas CASE útil puede encontrarse en:
www.objectsbydesign.com/tools/umltools_byCompany.html
Los diagramas de clases del diseño son el primer punto para generar el
código, ya que ellas indican las clases, superclases, firmas de las
operaciones, atributos de la clase, tipos de acceso a los atributos y
operaciones. Con esto es suficiente para crear una definición básica en un
lenguaje orientado a objetos.
Ya que en muchas metodologías no se incluyen en los diagramas de clases
constructores, destructores, operaciones get y set, deben agregarse al
esqueleto en Java.
En el siguiente ejemplo se puede observar el mapeo de los atributos a
campos de Java y de las operaciones a los métodos en Java.
También se han agregado los sets, gets y constructor(es).
Rectangulo
-ancho: int
-alto: int
+getAncho(): int
+setAncho(value:
int)
+getAlto(): int
+setAlto():int
Class Rectangulo {
private int ancho;
private int alto;
public Rectangulo(ancho int, alto int){…}
public int getAncho()
{
return ancho;
}
public void setAncho(int value)
{
ancho = value;
}
…
}
Cliente
*
Pedido LineaPedido
1 *
Cliente
class Cliente {
private Pedido[] 1 losPedidos;
}
class Pedido { *
} Pedido
Para el caso de asociaciones calificadas se tendría:
Pedido LineaPedido
0..1
Producto
class Pedido {
private Dictionary lineItems;
public LineaPedido linea (Producto unProducto);
public void agregaLinea (Numero cantidad, Producto elProducto;
}
Cuando se tiene una clase asociación entre dos clases, lo que ocurrirá en el
código es que se eliminará la asociación entre esas dos clases y quedará una
asociación de cada una de ellas con la clase asociación como se muestra en
el ejemplo.
Trabajo Trabajo
1..* *
DocumentoImpreso
Libro
Folleto
class DocumentoImpreso
{
// lista de propiedades y métodos.
};
// Libro se deriva de DocumentoImpreso.
class Libro extends DocuemntoImpreso
{
// lista de propiedades y métodos.
};
// Folleto se deriva de Libro.
class Folleto extends Libro
{
// lista de propiedades y métodos.
};
Pedido
Class Pedido {
procesar() void procesar{
Factura = new miFactura();
Factura }
}
class Producto {};
Pedido class Pedido {
public void agrega(Producto producto);
agrega(Producto&)
}
Producto
Métodos a partir de los diagramas de clases
crearRenta(video:Video, cliente:Cliente)
getClasificacion ( )
getCostoRenta ( )
getDiasRenta (argtype)
1
1 Sale
5
6
Register isComplete : Boolean 4
time : DateTime SalesLineItem
...
becomeComplete() quantity : Integer
endSale() 1 1..*
makeLineItem(...)
enterItem(...) getSubtotal()
makePayment(...)
makeNewSale()
getTotal()
makePayment(...)
...
1
* Payment
amount : Money
1
...
Manejo de Errores
De acuerdo con Stumpf (2005) al diseñar e implementar los módulos debe
considerarse que los valores de entrada son válidos. Es decir los módulos
deben confiar en lo que los otros les envían. Ya que de otra manera se
repetiría la validación de valores en cada módulo donde se utilizan, lo que
sería altamente redundante. Aquellos objetos que envían los valores deben
asegurarse que los datos que pasan son válidos.
Las operaciones para manejo de errores deben ubicarse en el primer punto
de la ejecución donde podría detectarse un error.
2004 Xavier Ferré Grau (Univ. Politécnica de Madrid - España) y María Isabel
Sánchez Segura (Univ. Carlos III de Madrid - España) Permiso para copiar, distribuir
y/o modificar este documento bajo los términos de la Licencia de Documentación
Libre GNU (GNU Free Documentation License), Versión 1.2 o cualquier otra versión
posterior publicada por la Free Software Foundation;
Tomado de:
http://www.clikear.com/manuales/uml/modelofisico.asp
Modelado Físico De Un Sistema OO
III.2.1 Componentes
Los componentes pertenecen al mundo físico, es decir, representan un bloque
de construcción al modelar aspectos físicos de un sistema.
Una característica básica de un componente es que:
“debe definir una abstracción precisa con una interfaz bien definida, y
permitiendo reemplazar fácilmente los componentes más viejos con otros más
nuevos y compatibles.”
En UML todos los elementos físicos se modelan como componentes. UML
proporciona una representación gráfica para estos como se puede ver en la
Figura 27, en la que XXXX.dll, es el nombre del componente.
PARECIDOS
Ambos tienen nombre
Ambos pueden realizar un conjunto de interfaces.
Pueden participar en relaciones de dependencia, generalización y asociación.
Ambos pueden anidarse
Ambos pueden tener instancias
Ambos pueden participar en interacciones
DIFERENCIAS
Las Clases Los Componentes
Representan abstracciones lógicas Representan elementos físicos
Es decir los componentes pueden estar en nodos y las clases no
Pueden tener atributos y operacionesdirectamente accesibles. Sólo tienen
operaciones y estas son alcanzables a través de la interfaz del componente.
III.2.1.1 Interfaces
Tanto los servicios propio de una clase como los de un componente, se
especifican a través de una Interfaz. Por ejemplo, todas las facilidades más
conocidas de los sistemas operativos, basados en componentes (COM+,
CORBA, etc.), utilizan las interfaces como lazo de unión entre unos
componentes y otros. La relación entre un componente y sus interfaces se
puede representar de dos maneras diferentes, de forma icónica como se
indica en la Figura 29, y de forma expandida como se muestra en la Figura
30.
III.2.2 Despliegue
III.2.2.1 Nodos
Al igual que los componentes los nodos pertenecen al mundo material. Vamos
a definir un nodo como un elemento físico, que existe en tiempo de ejecución
y representa un recurso computacional que generalmente tiene alguna
memoria y, a menudo, capacidad de procesamiento. Los nodos sirven para
modelar la topología del hardware sobre el que se ejecuta el sistema. Un nodo
representa normalmente un procesador o un dispositivo sobre el que se
pueden desplegar los componentes. Un nodo debe tener un nombre asignado
que lo distinga del resto de nodos. Además los nodos se representan
gráficamente como se indica en la Figura 31.
Figura 31 Nodos
PARECIDOS
Ambos tienen nombre
Pueden participar en relaciones de dependencia, generalización y asociación.
Ambos pueden anidarse
Ambos pueden tener instancias
Ambos pueden participar en interacciones
DIFERENCIAS
Los Nodos Los Componentes
Son los elementos donde se ejecutan los componentes. Son los elementos que
participan en la ejecución de un sistema.
Representan el despliegue físico de los componentes. Representan el
empaquetamiento físico de los elementos lógicos.
La relación entre un nodo y los componentes que despliega se pueden
representar mediante una relación de dependencia como se indica en la Figura
32.
Los nodos se pueden agrupar en paquetes igual que los las clases y los
componentes.
Los tipos de relación más común entre nodos es la asociación. Una asociación
entre nodos viene a representar una conexión física entre nodos como se
puede ver en la Figura 33.
III.2.5.4 Paquetes
La forma que tiene UML de agrupar elementos en subsistemas es a través del
uso de Paquetes, pudiéndose anidar los paquetes formando jerarquías de
paquetes. De hecho un sistema que no tenga necesidad de ser descompuesto
en subsistemas se puede considerar como con un único paquete que lo abarca
todo.
Gráficamente un paquete viene representado como se indica en la Figura 34.
Arquitectura software*
En los inicios de la informática, la programación se consideraba un arte, debido a
la dificultad que entrañaba para la mayoría de los mortales, pero con el tiempo se
han ido desarrollando metodologías y fórmulas o trucos para conseguir nuestros
propósitos. Y a todas estas técnicas se les ha dado en llamar Arquitectura Software.
Tabla de contenidos
• 2 Modelos o vistas
o 3.1 Bibliografía
• 4 Véase también
Modelos o vistas
Las vistas o modelos de una arquitectura pueden expresarse mediante uno o varios
lenguajes. El más obvio es el lenguaje natural, pero existen otros lenguajes
tales como los diagramas de estado, los diagramas de flujo de datos, etc.
Estos lenguajes son apropiados unicamente para un modelo o vista.
Afortunadamente existe cierto consenso en adoptar UML (Unified Modeling
Language, lenguaje unificado de modelado) como lenguaje único para todos los
modelos o vistas. Sin embargo, un lenguaje generalista corre el peligro de no ser
capaz de describir determinadas restricciones de un sistema de información (o
expresarlas de manera incomprensible).
• En pipeline.
• Entre pares.
• En pizarra.
• Orientada a servicios.
• Máquinas virtuales
*Tomado de : http://es.wikipedia.org/wiki/Arquitectura_de_software
Bibliografía
Level: Introductory
Mikko Kontio (mikko.kontio@softera.fi), Production
Manager, Softera
02 Feb 2005
The designing software architectures series continues
with a look at the 4+1 view model. The 4+1 view model
lets you separate a system into four essential views:
logical, process, physical, and development. Then, for
good measure, it gives you one more: a use case view
that describes the functional aspects of the system as a
whole.
This month you're being introduced to the 4+1 view
model, an architect's tool for viewing and documenting
application software. The 4+1 view model was originally
introduced by Philippe Kruchten in 1995 (see Resources).
Kruchten's new approach gave architects a way to
examine different parts of an architecture separately,
thus easing the complexity of the overall viewing.
Each of the five views in the 4+1 view model highlights
some elements of the system, while intentionally
suppressing others. The 4+1 view model is an excellent
way for both architects and other team members to learn
about a system's architecture. Architects use it to
understand and document the many layers of an
application in a systematic, standardized way.
Documents created using the 4+1 view process are
easily used by all members of the development team.
The first four views represent the logical, processing,
physical, and developmental aspects of the architecture.
The fifth view consists of use cases and scenarios that
might further describe or consolidate the other views.
Figure 1 shows the five views of the 4+1 view model.
In conclusion
The 4+1 view model is a useful, standardized method for
studying and documenting a software system from an
architectural perspective. In this fifth article in the
"Designing software architectures" series, I've introduced
you to the five views of the 4+1 model. Each view offers
a window into a different layer of the system. Taken
together they ensure that all of the important aspects of
the system are studied and documented.
Let's review the views:
• The logical view describes the (object-
oriented system) system in terms of abstractions,
such as classes and objects. The logical view
typically contains class diagrams, sequence
diagrams, and collaboration diagrams. Other
types of diagrams can be used where applicable.
• The development view describe the
structure of modules, files, and/or packages in the
system. The package diagram can be used to
describe this view.
• The process view describes the processes
of the system and how they communicate with
each other.
• The physical view describes how the
system is installed and how it executes in a
network of computers. Deployment diagrams are
often used to describe this view.
• The use case view describes the
functionality of the system. This view can be
described using case diagrams and use case
specifications.
Resources offers more links where you can learn about
the 4+1 view model, as well as other architectural views.
In next month's Architectural manifesto I will discuss the
evaluation of architecture prototypes.
Resources
• Mikko talked about use case diagramming
in his column on "How to write a requirements
specification" (developerWorks, December 2004).
• You can learn more about the 4+1 view
model by reading Phillipe Krutchen's "The "4+1"
View Model of Software Architecture" (in PDF
format).
• Phillipe Krutchen's "The Tao of the
Software Architect" is one of the Software
Engineering Institute's published essays on
software architecture.
• "Documenting Software Architectures," a
comprehensive handbook about software
documentation, includes an excellent section on
views.
• Visit the OMG's UML homepage to learn
more about the Unified Modeling Language
• Granville Miller's UML modeling workbook
(developerWorks, May 2001 through June 2002)
is a hands-on introduction to use case
development and the Unified Modeling Language.
• "Documenting software architectures" (The
Rational Edge, January 2004) is one architect's
account of the importance of good documentation
in large-scale development projects -- as well as a
review of a book worth reading.
• See the Architectural Manifesto column
page for a complete listing of Mikko's columns, as
well as all the articles in the Designing software
architectures series
Pruebas
Las pruebas deben llevarse a cabo durante todo el proceso de desarrollo de sistemas.
Varía su clasificación y características dependiendo del momento en que se lleven a
cabo.
Referencias
• Larman, Craig. 2005. “Applyling UML and Patterns: an
Introduction to Object Oriented Analysis and Design and Iterative
Development”, Prentice Hall, 3a edición
• Stumpf, Robert, et al. 2005. “Object Oriented Systems
Analysis and Design with UML”, Pearson Education.
• Schach, Stephen, 2005. “Análisis y diseño orientado a objetos
con UML y el Proceso Unificado”. Mc Graw Hill.
Refactorización
Según Martin Fowler refactorización es el método disciplinado, estructurado,
para reescribir o reestructurar código existente sin cambiar su
comportamiento externo, aplicando pequeños pasos o transformaciones sin
re-ejecutar pruebas a cada paso.
Cada refactorización es muy corta, sólo se aplica una transformación
pequeña que mantiene el comportamiento en un momento dado. Después
de la transformación se ejecutan las pruebas unitarias para probar que la
refactorización no causó una falla.
Los objetivos de la refactorización son [Larman, 2005]:
• Eliminar código duplicado
• Mejorar claridad
• Acortar métodos largos
• Corregir clases con mucho código o con muchas variables de
instancia
• Reducir acoplamiento
• Mejorar la cohesión
• En general, mejorar código mal escrito o de baja calidad.
El remedio es utilizar las refactorizaciones, similares a los patrones en
cuanto a que tienen un nombre y un objetivo para mejorar el diseño.
Para revisar el catálogo de refactorizaciones, se sugiere revisar el libro:
“Improving the Desing of Existing Code”, de Martin Fowler o el sitio
http://www.refactorización.com
Otras páginas con información válida sobre refactorizaciones:
www.junit.org
www.testdriven.com
Referencias
• Larman, Craig. 2005. “Applyling UML and Patterns: an
Introduction to Object Oriented Analysis and Design and Iterative
Development”, Prentice Hall, 3a edición
• Fowler, Martin. “Refactorización Home Page”.
http://www.refactorización.com/ consultado el 9 de junio de 2006.
A
Descripción de la organización, estructura y motivación de un sistema. Las
Arquitectura:
arquitecturas pueden tener varios niveles.
B
Es la colección de datos requeridos por una organización para manejar las
Base de datos: operaciones de la misma, mantenida y acomodada de tal forma en que es
acezada por diferentes aplicaciones.
C
Especifica la funcionalidad del sistema desde el punto de vista del usuario.
Caso de Uso: Detalla las interacciones entre un actor y el sistema para lograr una meta
específica.
D
Diagrama de
Diagrama de UML utilizado para modelar los detalles de procesos complejos.
actividad:
Diagrama de Diagrama utilizado para describir el comportamiento de instancias de un
Transición de elemento de un modelo tales como un objeto o una interacción, en respuesta
Estados: a eventos del sistema.
I
Implementación: Es la traducción del diseño del sistema a código.
P
Patrón: Solución probada a un problema de diseño común
R
Según Martin Fowler refactorización es el método disciplinado, estructurado,
para reescribir o reestructurar código existente sin cambiar su
Refactorización:
comportamiento externo, aplicando pequeños pasos o transformaciones sin
re-ejecutar pruebas a cada paso.