Specification Window
Figura 4.15: Diagrama de Estados
4.5. Representación textual de un modelo
La información representada en un modelo especificado con la aplicación CASE Rational Rose, se almacena en archivos con extensión .mdl o .ptl. Estos tipos de archivos utilizan el formato ASCII para representar la información gráfica y textual contenida en los modelos, y se los denomina petals (pétalos). Debido al formato ASCII utilizado, es posible transferir modelos y componentes de modelos con independencia de plataformas.
Mediante la opción File>Save o File>Save as... del menú principal, se puede almacenar el modelo actual en la aplicación en un archivo con extensión .mdl. Si se selecciona uno o varios elementos del modelo y se elige File>Export en el menú principal, se pueden almacenar determinados items, en un archivo con extensión .ptl.
Este tipo de archivos también contiene información sobre la posible generación de código en algún lenguaje. Gran parte de la información especificada no es de interés para este trabajo. En la siguiente sección se describirá en forma incompleta la gramática del contenido de un archivo .mdl. Se destacará la estructura principal del texto del archivo y la especificación de los elementos de modelado de relevancia descriptos anteriormente.
4.5.1. Gramática de un archivo .mdl
4.5.1.1. Estructura principal
La estructura del archivo .mdl (<PetalFile>) se divide, en principio, en dos partes principales:
<PetalFile>
<PetalVersion> <Design> PetalVersion
Contiene datos sobre la versión de la herramienta con la que fue generado el archivo. Propiedades adicionales, varían en distintas versiones.
<PetalVersion> (object Petal
version 40) Design
Contiene toda la información del modelo y sus vistas. Esto comprende la especificación de los elementos de modelado y la representación textual de sus correspondientes íconos gráficos.
<Design>
(object Design "Logical View"
is_unit <Boolean> is_loaded <Boolean>
file_name <FilePath> {Path completo del archivo .mdl}
quid <Identity>
defaults (...{Datos referentes a la visión de la aplicación: fuentes, ubicación, etc.}...) root_usecase_package (…{Datos referentes a la vista de casos de uso: modelos, diagramas, etc.}... ) root_category <Class_Category> {con nombre obligatorio "Logical View"}
root_subsystem (…{Datos relacionados con la vista de componentes}…) process_structure (…{Datos sobre la vista de despliegue}…)
properties (...{especificación de propiedades útiles para la generación de código}...) )
4.5.1.2. Elementos destacados
ClassCategoryRepresenta un ítem Package del Browser de Rational Rose. Contiene la representación textual de
características propias, diagramas de clases, clases, asociaciones y otros paquetes.
<ClassCategory>
(object Class_Category <String> {nombre}
quid <Identity> {identificación única para el modelo} exportControl <ExportEnum>
global <Boolean> subsystem <String>
logical_models ( list unit_reference_list <Class|Association|Class_Category>* ) logical_presentations (…{Propiedades gráficas de los diagramas de clases}...) ) Class
Su representación contiene propiedades específicas a una clase, y eventualmente puede contener representaciones de atributos, operaciones, referencias a superclases y un diagrama de estados.
<Class>
(object Class <String> {nombre}
quid <Identity> {identificación única para el modelo} abstract <Boolean>
concurrency <ConcurrencyType>
operations ( list Operations <Operation>* )
class_attributes ( list class_attribute_list <ClassAttribute>* )
superclasses ( list inheritance_relationship_list <InheritanceRelationship>* ) …...
statediagram (…{Datos sobre la representación gráfica del diagrama de estados}. . . ) . . . ) Operation
Describe las propiedades del ítem Operation y puede contener la especificación de varios parámetros.
<Operation>
(object Operation <String>
quid <Identity>
parameters ( list Parameters <Parameter>* ) result <String> concurrency <ExportEnum> pre_condition <SemanticInfo> post_condition <SemanticInfo> semantics <SemanticInfo> …) ClassAttribute
Representación del elemento Attribute. También utilizada para Qualifiers.
<ClassAttribute>
(object ClassAttribute <String>
quid <Identity> type <String> initv <String> exportControl <ExportEnum> static <Boolean> …..) InheritanceRelationship
Contiene la información necesaria para representar una Generalization en el modelo.
<InheritanceRelationship> (object Inheritance_Relationship
quid <Identity>
label <String>
supplier <String> {nombre de superclase}
quidu <Identity> {de la superclase} …)
Association
Especifica propiedades de la relación Association y contiene la especificación de sus dos roles.
<Association>
(object Association <String>
quid <Identity>
roles (list role_list <Role>*) Constraints <Text>
AssociationClass <String> {si es AssociationClass} …) Role
Especificación de las propiedades de un AssociationEnd. Incluye la representación de una lista de
Attributes, que actúan como Qualifiers.
<Role>
(object Role <String>
quid <Identity>
label <String> {nombre}
supplier <String> {nombre declase que conecta} quidu <Identity> {de la clase que conecta} client_cardinality <Cardinality> s_navigable <Boolean> is_aggregate <Boolean> Containment <ContainmentEnum> is_principal <Boolean> friend <Boolean> static <Boolean>
StateMachine
Describe información referente a la máquina de estados representada en un StateDiagram. Contiene una lista con las especificaciones de los estados que la conforman.
<StateMachine> (object State_Machine
states (list States <State>* ) State
Describe propiedades de State, StartState o EndState. Contiene las especificaciones de las transiciones que parten desde el estado.
<State>
(object State <String>
quid <Identity>
transitions (list transition_list <StateTransition>* )
type <StateType>
statemachine <StateMachine>
actions (…{Acciones internas al estado}. . . ). . . ) StateTransition
Especificación de las propiedades de una Transition, del evento que la dispara, su condición y la acción que ejecuta.
<StateTransition> (object State_Transition
quid <Identity>
supplier <String> {nombre del estado destino}
quidu <Identity> {del estado destino}
Event <Event> condition <String> action <Action>
sendEvent (…{Datos sobre un evento que envía la transición}... ) ....) Event y Action
<Event>
(object Event <String>
parameters <String>) <Action>
(object action <String>
quid <Identity>)
Tipos básicos
<ExportEnum> ::= "Public" | "Private" | "Protected" | "Implementation" <ConcurrencyType> ::= "Guarded" | "Active" | "Synchronous"
<StateType> ::= "StartState" | "Normal" | "EndState" <ContainmentEnum> ::= "By Reference" | "By Value"
<Cardinality> ::= (value cardinality <String>) {Ver tabla de Multiplicidad} <SemanticInfo> ::= (object Semantic_Info
PDL <Text>)
<Boolean> ::= TRUE | FALSE
<Identity> ::= " {Número hexadecimal} " <Text> ::= <String> | ( | <String>)+
<String> ::= " {Secuencia de caracteres ASCII} " <FilePath> ::= " {Ubicación en un sistema de archivos} "