An extra member is an alien allowing you to specify directly the generated code for each language. This allows to manage non UML items, for instance C++ pre-processor directives, Java attribute initializations etc ...
An extra member is created through the class menu called from the browser :
The extra member menu appearing with a right mouse click on its representation in the browser is something like these, supposing it is not read-only nor deleted :
edit allows to show/modify the extra member properties. In case the extra member is read-only, the fields of the dialog are also read-only.
The tab Uml is a global tab, independent of the language :
The name and the stereotype do not have meaning for BOUML.
The description is not used by the code generators.
The editor button visible above and associated here to the description, allows to edit the description in an other window, or to call an external editor (for instance Xcoral) specified through the environment dialog. Note that this external editor have to create an own window, its parameter is the pathname of the file containing the description, its execution is done in parallel with BOUML which looks each second at the file contents to get the new definition until the dialog is closed (I do not like very much this polling but this works even QT isn't compiled with the thread support).
The tab C++ allows to specify the code generated in the header and/or the source file(s), it is visible only if C++ is set through the menu Languages
The declaration part is generated in the definition of the class containing the extra member, except if the inline toggle is set, in this case the generation is made after the class definition as for an inline operation.
The definition part is produced in the source file rather than in the header one.
For instance with :
EM |
#ifdef |
#endif |
and :
The generated code for the class is :
C++ header |
C++ source |
class EM { #ifdef NEEDED // decl public: void op(); #endif }; |
#ifdef NEEDED // def void EM::op() { } #endif |
In case the extra members and op are inline, all is generated in the header file :
C++ header |
class EM { #ifdef NEEDED // decl public: void op(); #endif }; #ifdef NEEDED // def inline void EM::op() { } #endif |
The tab Java allows to specify the code generated in Java, it is visible only if Java is set through the menu Languages, for instance with :
EM2 |
init |
and :
The generated code for EM2 is :
class EM2 { protected Hashtable ht; static { H = new Hashtable(); } }
The tab Php allows to specify the code generated in Php, it is visible only if Php is set through the menu Languages :
The tab Python allows to specify the code generated in Python, it is visible only if Python is set through the menu Languages :
The tab Idl allows to specify the code generated in Idl, it is visible only if Idl is set through the menu Languages :
The menu entry duplicate clone the extra member.
The menu entry delete is only present when the extra member is not read-only.
Delete the extra member. After that it is possible to undelete it (from the browser) until you close the project : obviously the deleted items are not saved !
See mark
Appears only when at least one plug-out is associated to the extra member. To apply a plug-out on the extra member.
Previous : part/role
Next : class instance