Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mastering UML with Rational Rose 2002.pdf
Скачиваний:
137
Добавлен:
02.05.2014
Размер:
9.68 Mб
Скачать

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

HeaderSourceFile

Filename for the .h file for this class.

<blank>

BodySourceFile

Filename for the .cpp file for this class.

<blank>

In addition to these properties, you can control the code generation through the ANSI C++ class specification window. To open this window, select one or more classes on a Class diagram, then right−click it, and select ANSI C++ → Class Customization. The customization window is shown in Figure 13.1.

Figure 13.1: ANSI C++ Class Customization window

On the Standard Operations tab, select the method(s) you would like Rose to generate for the selected classes. When you close this window, Rose will add the selected methods to the classes, and they will be included in the code−generation process.

On the Get and Set Operations tab, select the attribute(s) for which you would like to generate Get and Set operations. For each selected operation, check the Generate Get Operation and/or Generate Set Operation to control which operations are generated.

Attribute Properties

Attribute properties are the ANSI C++ properties that relate specifically to attributes. Using these properties, you can control whether the attribute will be included in code generation and reverse engineering and you can set the name of the attribute in the generated code.

421

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

There are two places to set these properties. To set them for all attributes, select Tools → Options, then click the ANSI C++ tab and select Attribute from the drop−down list box. To set them for only one attribute, select the ANSI C++ tab on the attribute specification window and edit the properties there.

In addition, stereotypes can be set on attributes to control whether a keyword, such as "static," is included for each attribute. Export control determines if an attribute is created as public or private. The default is to make all attributes private, which is good programming practice.

Table 13.2 lists the attribute properties, their purposes, and their default values.

Table 13.2: Attribute Code−Generation Properties

Property

Purpose

Default

Synchronize

Controls whether the attribute will

True

 

be included in code generation and

 

 

reverse engineering.

 

CodeName

Sets the attribute's name in the

<blank> (uses attribute name from

 

generated code.

the model)

Operation Properties

The operation properties are the ANSI C++ code−generation properties that are specific to operations. These properties will let you set the name of the operation, control whether the operation is inline, and set other code−generation specifications for each operation.

422

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

There are two places to set these properties. To set them for all operations, select Tools → Options, then click the ANSI C++ tab and select Operation from the drop−down list box. To set them for only one operation, select the ANSI C++ tab on the operation specification window and edit the properties there.

Table 13.3 lists the operation code−generation properties, their purposes, and their default values.

Table 13.3: Operation Code−Generation Properties

Property

Purpose

Default

Synchronize

Controls whether the operation will be included in

True

 

code generation and reverse engineering.

 

CodeName

Sets the name of the generated operation.

<blank> (uses the

 

 

operation name from the

 

 

model)

Generate FunctionBody

Determine if function body is to be generated. If true,

Default

(Rose 2002)

function body will be generated. If false, function

 

 

body will not be generated. If default, then a body will

 

 

be generated unless it is a non−inline friend or a

 

 

non−inline abstract operation other than a destructor.

 

InitialCodeBody

Code to include within the operation itself. This code

<blank>

 

will be generated within the operation the first time

 

 

the code−generation process is run. Subsequent

 

 

code−generation processes will not replace the

 

 

operation code with the value of the InitialCodeBody

 

 

property. You must include opening and closing

 

 

braces in this property.

 

Inline

Controls whether or not to inline the operation.

False

In addition to these, each parameter in the operation also has a property called CodeName. (The CodeName property in Table 13.3 applies to the overall operation, but there is also a CodeName property for each

423

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

parameter in the operation.) If you supply a value to this property, Rose will use that value as the parameter's name when generating code. If you do not supply a value, Rose will use the parameter name as it appears in the model.

Package (Class Category) Properties

The class category properties are those ANSI C++ properties that apply to packages of classes. To set these properties for all packages, select Tools → Options, then click the ANSI C++ tab and select Class Category from the drop−down list box. To set them for a single package, open the package specification window, select the ANSI C++ tab, and set the properties there.

Table 13.4 lists the package properties, their descriptions, and their default values.

Table 13.4: Package Code−Generation Properties

Property

Purpose

Default

CodeName

Namespace

<blank>

IsNameSpace

Indicates whether or not this package represents a

False

 

namespace

 

Component (Module Specification) Properties

The component properties are related to the .cpp and .h files generated and reverse engineered by Rose. These properties allow you to control items such as copyright statements and #include statements in the code.

To set these properties for all components, select Tools → Options, then click the ANSI C++ tab and select Module Specification from the drop−down list box. To set them for a single component, open the component specification window and select the ANSI C++ tab. Table 13.5 lists the component properties.

Table 13.5: Component Code−Generation Properties

Property

Purpose

Default

Synchronize

Controls whether this component will be

True

 

included in code generation and reverse

 

 

engineering.

 

Copyright

Copyright statement to include in the

<blank>

 

generated code.

 

RootPackage

Logical view package under which

C++ Reverse

 

reverse−engineered classes and packages

Engineered

 

will be placed.

 

InitialHeaderIncludes

#Include statements to include in the

<blank>

 

generated .h file.

 

InitialBodyIncludes

#Include statements to include in the

<blank>

 

generated .cpp file.

 

RevEngRootDirectory (Rose 2002)

Sets the default directory to search for files

<blank>

 

when reverse engineering

 

 

 

False

 

 

 

424

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

RevEngDirectoriesAsPackages (Rose

Creates a Logical view package to

 

2002)

correspond to each directory used in reverse

 

 

engineering

 

HeaderFileExtension (Rose 2002)

Sets the file extension to use when

.h

 

generating header files

 

ImplementationFileExtension (Rose

Sets the file extension to use when

.cpp

2002)

generating implementation files

 

NewHeaderFileDirectory (Rose 2002)

Subdirectory of root directory for generated

<blank>

 

header files

 

NewImplementationFileDirectory (Rose

Subdirectory of root directory for generated

<blank>

2002)

implementation files

 

FileCapitalization (Rose 2002)

Sets case to use in generated file names

Same as model

 

(upper case, lower case, lower case with

 

 

underscores, same as model)

 

CodeGenExtraDirectories (Rose 2002)

Controls what directories will be created on

<blank>

 

code generation

 

StripClassPrefix (Rose 2002)

Character(s) to strip from the class name

<blank>

 

when a file is generated

 

UseTabs (Rose 2002)

Indents the generated code with tabs rather

False

 

than spaces

 

TabWidth (Rose 2002)

Number of characters to indent for each tab

8

IndentWidth (Rose 2002)

Column width in spaces between indent

4

 

locations

 

AccessIndentation (Rose 2002)

Number of spaces that the public, private,

−2

 

and protected keywords will be indented

 

ModelIdCommentRules (Rose 2002)

Controls when model IDs are generated (on

Code generation only

 

code generation, on code generation and

 

 

reverse engineering, or never)

 

PageWidth (Rose 2002)

Number of characters in a line in the

80

 

generated file

 

ClassMemberOrder (Rose 2002)

Sets the order of the generated attributes

Public First

 

(public first, private first, order by kind,

 

 

unordered)

 

OneParameterPerLine (Rose 2002)

Controls whether or not each parameter in

False

 

an operation is written on a separate line

 

NamespaceBraceStyle (Rose 2002)

Sets the style for namespace braces. Use the

B2

 

ANSI C++ component specification

 

 

window for examples of the five available

 

 

styles.

 

ClassBraceStyle (Rose 2002)

Sets the style for class braces. Use the

B2

 

ANSI C++ component specification

 

 

window for examples of the five available

 

 

styles.

 

FunctionBraceStyle (Rose 2002)

Sets the style for function braces. Use the

B2

 

ANSI C++ component specification

 

 

window for examples of the five available

 

 

styles.

 

425

Chapter 13: ANSI C++ and Visual C++ Code Generation and Reverse Engineering

These properties and others can also be controlled through the C++ component specification window, shown in Figure 13.2. To open this window, right−click the component and select ANSI C++ → Open ANSI C++ Specification.

Figure 13.2: ANSI C++ component customization window's Files tab

In the first field on the Files tab, you enter the root directory of all the source files. In the Code Generation Root Directory field, enter the directory into which Rose should generate code. The Reverse Engineering Root Package field corresponds to the RootPackage property discussed above, and sets the package into which files will be reverse engineered. The Project Files section includes the .cpp, .h, and other source code files relevant to this component. Finally, the Documentation and Copyright fields are the places to enter comments and copyright information for the component.

In Rose 2002, there are additional fields available on the Files tab. The Reverse Engineer Directories As Packages check box controls whether or not directories are reverse engineered as Logical view packages. The Header and Implementation File Extension fields allow you to set the file extension that will be used for these types of files when generating code. In Rose 2002, you can generate source and body files into different directories. Use the Subdirectory of Root for Header Files field to set the directory for header files, and use the Subdirectory of Root for Implementation Files field to set the directory for implementation files. Filename Capitalization controls whether filenames are generated in upper or lower case. The Additional Directories field controls whether subdirectories will be created for namespaces or packages. Finally, the Prefix to Strip from Class Name When Constructing Filename field will strip specific characters from the class name to generate the header and implementation files.

The Style tab is shown in Figure 13.3. This tab controls formatting options for the component.

426