1. IBM Rational® Software Modeler

advertisement
Summary
1.
IBM Rational® Software Modeler.......................................................................................... 1
2.
Creating the GeoProfile ......................................................................................................... 2
3.
Applying OCL Constraints .................................................................................................... 10
4.
Applying Icons to Stereotypes ............................................................................................. 14
5.
Applying the GeoProfile ...................................................................................................... 14
1. IBM Rational® Software Modeler
The Rational® Software Modeler (RSM) is a commercial CASE tool that lets you create
UML diagrams and profiles; currently, RSM is part of the Rational® Software Architect
which is under IBM license. This tool was presented as a great alternative to the profile
specification, offering features such as language support for definition of OCL
constraints, including stereotypes and icons on the possibility of import and export in
various formats including XMI (XML Metadata Interchange).
Desktop of Rational® Sofware Architect
Another advantage of this tool is to be multilingual. This tutorial was made using the
version 8.0 of this tool with English language.
1
2. Creating the GeoProfile
Creating UML profiles in RSM tool is performed fairly intuitive. To create a new profile,
simply click: File -> New -> Project -> Modeling -> UML Extensibility ->
UML Profile Project.
A window is opened to set the project name. Clicking Next opens a new window, as
illustrated in the figure below, to add the name and other properties of the profile.
Type GeoProfile in the field Profile Name.
2
Then, simply click Finish, and the project profile will be created and available for
manipulation in the “Project Explorer”.
3
The following shall be added the elements of UML profile. To do this, simply select the
profile in the Project Explorer and click the right mouse button, and then click
Add Diagram -> Class Diagram.
With the class diagram created, you can add the elements of extension of the UML to
the profile, for example, metaclasses, stereotypes and tagged values.
First, let's create the stereotypes of theGeoProfile. Let's start with stereotypes for
network objects (NetworkObj, Arc, Node, UnidirectionalArc and BidirectionalArc).
Add the Stereotype elements, as shown in the figure below. Note that stereotypes
NetworkObj and Arc are abstract. To place a stereotype as abstract, simply select it on
the model and check the option Abstract on the tab General.
4
Then use the element Generalization, so leave the profile as shown below.
The next step is to extend the UML metaclass Class using stereotypes created, to add
the element Metaclass, in the window that appears, select the metaclass Class, add to
the project and click OK.
5
The metaclass "Class" will appear in the diagram, now let's extend the metaclass using
the stereotype created, and just use the element Extension.
Now let's extend the metaclass Association, creating stereotypes that deals with the
topological relationships between the classes. There are six different types of
topological relationships in GeoProfile, let's create just one for example.
First, create an element Stereotype and give it the name "Temporal". Now includes an
element Metaclass, but this time select the metaclass Association and then use the
6
element Extension to extend the metaclass Association with the stereotype created,
as shown in the figure below.
A stereotype can have properties, which can be referred to as tag definitions. When a
stereotype is applied to a model element, the values of the properties are listed in the
profile as tagged values, and can be handled in the model.
The next step is to create the stereotype TemporalObject, which refers to spatial
objects with temporal aspects, and their enumerations (tagged values). The GeoProfile
defines two kinds of enumeration, TemporalPrimitive and TemporalType. Includes at
the schema two elements of type enumeration, and name them as TemporalPrimitive
and TemporalType.
Add the Enumeration Literals (instant e interval) in TemporalPrimitive and
(valid_time, transaction_time and bitemporal) in TemporalType, see figure below.
7
Now, add to the schema the stereotype TemporalObj and includes two attributes with
types of enumerations created previously: temporalPrimitive of type
TemporalPrimitive and temporalType of type TemporalType.
To add the type of the attribute, just select it within the stereotype or in
Project Explorer tab, and in lower bar General click the Select Type button and select
the type in the window that appears, see figure below.
8
Just now we extend the metaclass Class again for the stereotype created; includes one
more Extension element from the stereotype TemporalObj to the metaclass Class.
This is enough to create the diagram of the profile to stereotypes of GeoProfile entirely
according to your specification; include other Stereotypes, Generalizations and
Extensions that are missing to leave the template as follows. Now, save the template.
Schema of GeoProfile
9
3. Applying OCL Constraints
The RSM supports OCL language for defining constraints, the same used to validate the
generated conceptual schema. This way, OCL constraints described in this section
always have as context a stereotype of GeoProfile, besides being invariant.
The constraints specified for GeoProfile basically avoiding the occurrence of three
types of errors: adding stereotypes incompatible within a single element; poor
construction of networks; and addition of topological relationships are impossible to
happen between two elements (e.g. Cross-relationship between two objects with
representation of geographic point). These three groups of constraints are analysed
below.
To declare Constraints, first right-click the stereotype to which to apply the constraint,
and, on the menu, choose Add UML -> Constraint.
In the edit box that appears, add the OCL constraint refers to the stereotype.
10
Adding constraints can also be done by the Project Explorer.
The properties of each restriction can be handled in General tab, by selecting the
object. In the field Nome, type the name of the constraint, and in the
Language and corresponding body field, type OCL. If there is any error in the
validation of the constraint error, a message will be shown.
GeoProfile restrictions are described below; add them to the profile created. The field
context refers to which stereotype the constraint is applied.
OCL constraints for verification of the existence of stereotypes incompatible in a same
schema class.
A
context GeoField
B
context Network
self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'Point' or s.name
= 'Line' or s.name = 'Polygon' or s.name = 'ComplexSpatialObj') -> isEmpty()
self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'Point' or s.name
= 'Line' or s.name = 'Polygon' or s.name = 'ComplexSpatialObj'
or s.name = 'TIN' or s.name = 'Isolines' or s.name = 'GridOfCells' or s.name =
'AdjPolygons' or s.name = 'GridOfPoints' or s.name = 'IrregularPoints'
or s.name = 'Node' or s.name = 'UnidirectionalArc' or s.name =
'BidirectionalArc') -> isEmpty()
context NetworkObj
self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'TIN' or s.name
= 'Isolines' or s.name = 'GridOfCells' or s.name = 'AdjPolygons'
or s.name = 'GridOfPoints' or s.name = 'IrregularPoints') -> isEmpty()
D
self.base_Class.getAppliedStereotypes()
->
select(s
|
'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
C
context Node
E
s.name
=
self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'BidirectionalArc')
-> isEmpty()
11
context UnidirectionalArc
OCL constraints for verification of the existence of stereotypes incompatible in a same
schema Association.
F
context Cross
G
context Disjoint
self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or
s.name = 'In' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Cross' or
s.name = 'In' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or
s.name = 'Cross' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
H
context In
I
context Overlap
J
context Touch
self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or
s.name = 'Cross' or s.name = 'In' or s.name = 'Touch') -> isEmpty()
self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or
s.name = 'Cross' or s.name = 'In' or s.name = 'Overlap') -> isEmpty()
OCL constraints for validation of the networks defined in the schema.
K
context Network
not
self.base_Class.ownedAttribute.association.memberEnd.class.getAppliedStereotyp
es() -> select(s | s.name = 'Node') -> isEmpty()
context Network
not self.base_Class.ownedAttribute.association.memberEnd.class
.getAppliedStereotypes() -> select(s | s.name = 'UnidirectionalArc' or s.name =
'BidirectionalArc') -> isEmpty()
M
not self.base_Class.ownedAttribute.association.memberEnd.class
.getAppliedStereotypes() -> select(s | s.name = 'Node') -> isEmpty()
L
context Arc
N
context Node
not self.base_Class.ownedAttribute.association.memberEnd.class
.getAppliedStereotypes() ->
select(s | s.name = 'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
OCL constraints for validation of topological relationships of type In and Disjoint.
O
context In
P
context Disjoint
self.base_Association.memberEnd.class -> forAll (c | c.getAppliedStereotypes() > select(s | s.name = 'Point' or s.name = 'Line' or s.name = 'Polygon') ->
notEmpty())
self.base_Association.memberEnd.class -> forAll (c | c.getAppliedStereotypes() > select(s | s.name = 'Point' or s.name = 'Line' or s.name = 'Polygon') ->
notEmpty())
OCL constraints for validation of topological relationships of type Cross, Overlap and
Touch.
Q
context Cross
let classes : OrderedSet(Class) = self.base_Association.memberEnd.class ->
asOrderedSet() in
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') ->
notEmpty() and (classes -> at(2)).getAppliedStereotypes() ->
12
select(s | s.name = 'Line') -> notEmpty() ) or
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') ->
notEmpty() and (classes -> at(2)).getAppliedStereotypes() ->
select(s | s.name = 'Polygon') -> notEmpty() ) or
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') ->
notEmpty() and (classes -> at(2)).getAppliedStereotypes() ->
select(s | s.name = 'Line') -> notEmpty() )
R
context Overlap
S
context Touch
let classes : OrderedSet(Class) = self.base_Association.memberEnd.class ->
asOrderedSet() in
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') ->
notEmpty() and (classes -> at(2)).getAppliedStereotypes() ->
select(s | s.name = 'Line') -> notEmpty() ) or
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') ->
notEmpty() and (classes -> at(2)).getAppliedStereotypes() ->
select(s | s.name = 'Polygon') -> notEmpty() )
let classes : OrderedSet(Class) = self.base_Association.memberEnd.class ->
asOrderedSet() in
((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty()
and (classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty() )
or ((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() and
(classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() ) or
((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() and
(classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty() )
or ((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty()
and (classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() ) or
((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Point') -> notEmpty() and
(classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty() )
or ((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty()
and (classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Point') -> notEmpty() ) or
((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Point') -> notEmpty() and
(classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() ) or
((classes ->
at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() and
(classes ->
at(2)).getAppliedStereotypes() -> select(s | s.name = 'Point') -> notEmpty() )
Recalling that the OCL constraints of the GeoProfile validate only the conceptual
schema; is valid to say that a topological relationship modeled between classes that
have multiple representation is conceptually correct if the type of topological
relationship can exist for at least one geographical representation of the classes
concerned. In this case, the application has to restrict which geographical
representation of the class will be involved in the relationship.
13
4. Applying Icons to Stereotypes
Icons can be associated with stereotypes for a clearer representation of diagram
elements.
To associate an icon to a stereotype, select the stereotype in the schema, or in the
Project Explorer, and in the General tab, click the Browse button on the Icon field to
add an icon to the stereotype.
Now you can add the other icons of other stereotypes: Point, Line, Polygon,
ComplexSpatialObj, TemporalObj, TIN, Isolines, GridOfCells, GridOfPoints,
IrregularPoints, AdjPolygons, Node, UniderctionalArc, BidirectionalArc, Touch, In,
Cross, Overlap, Disjoint, and Network.
After specifying all elements of GeoProfile, it can be used in modeling of spatial
database. The files related to profiles in this tool will be saved using the
extension .EPX.
5. Applying the GeoProfile
With the profile created, we can use it in our modeling of geographic classes. To use
the GeoProfile, start by creating a new model: File -> New -> Model Project.
14
To apply the GeoProfile to a template, just select it and go to the Properties tab, and in
the Profile tab, click Add Profile...”.
Then, select the profile in the workspace. Now the elements added to the model may
make use of stereotypes and constraints of GeoProfile.
15
Now, with the profile applied, you can apply the stereotypes of GeoProfile in UML
elements. For example, to include a class in the model, simply go to the Properties tab,
click Stereotypes and then “Apply Stereotypes...”. A window will be opened with all
the available stereotypes.
Now, select the stereotype you want and click OK. The stereotype is then applied to
the corresponding class.
Note: you can apply more than one stereotype to a same class, the OCL constraints
described above prevent incompatible stereotypes are applied in the same class.
16
With the stereotype applied to the class, you can change some properties, such as the
way you view the same. The tool provides several ways to view stereotypes:
Decoração e Texto, Decoração, Imagem da Forma, Texto e Nenhum. To accomplish
this, simply select the class, right-click it, and then click: Filters -> Stereotypes and
Visibility Style, and then select the desired shape.
Note: there are occurrences of problems when viewing more than one stereotype by
class. If are applied more than one stereotype to a class, can only be viewed the icon of
the first stereotype applied. To work around this problem, you should opt for the
visualization of stereotypes in textual form or text and icon.
As defined in GeoProfile, stereotypes can also be applied to relationships. Add another
class with a stereotype and an Association element between them.
17
Select the object Association added and add a stereotype to proceed in the same way
as shown for objects of type class.
Another type of geographical object that can be found in our applications are the
temporal objects, defined in GeoProfile as TemporalObj. For this type of object are
defined two tagged values, temporalType and temporalPrimitive. To define their
values, first we should add a class in the model with the stereotype TemporalObj.
18
The value of each tagged value for this type of object can be set in the Properties
window tab Stereotypes. The RSM considers the first value declared as the default
value.
Other UML elements can also be added to the model as packages, attributes,
operations, data types, etc. To add new elements to the schema, you can use the
Palette tab or in the Project Explorer by right-clicking on the schema; on the menu,
choice Add UML and all elements that can be added to the template will be shown.
19
This is enough to create a complete UML model for modeling spatial database using
GeoProfile in the RSM tool. An example of "School" by using this profile is shown
below.
Note that the classes City, School and District have stereotypes such as <<Point>> and
<<polygon>>, it shows how the class may be represented in a geographic application.
Disctrict, for example, can be represented as a point or a polygon, depending on the
scale. The class Student, in turn, has not stereotype, because it is a class without
20
geographic representation will thus be created as a common object class, without
applying any stereotype.
Note also that were applied stereotypes to relationships NARY. The stereotype <<in>>
between District and City topologically shows that every District element is within a
City element, the same goes for the relationship between School and District. There is
no topological relationship between Student and School, so we use only one common
relationship Association, without applying any stereotype.
The next step now is to validate our model using OCL constraints of GeoProfile. To do
this, right-click on the model in the Project Explorer and, on the menu, click Validate.
If any validation error occurs, an error message will appear in the Problems tab.
Otherwise, the confirmation of validation will appear on the Console tab.
21
The tool RSM also lets you import and export models in XMI (XML Metadata
Interchange) and other formats such as UML, Ecore, etc. To do this, go to: File > Import/Export.
For the option Export, a window will appear showing the possible formats for which
the model can be exported.
22
More information about this tool can be found at:
http://www.ibm.com/developerworks/rational/products/rsm/
23
Download