300 U ML与软件建模
class Aircraft { public: Aircraft( ); virtual ~Aircraft( ) = 0; virtual void takeoff( ) = 0; virtual void fly( ) = 0; virtual void land( ) = 0; ... };
// File: Airplane.h #include \...
class Airplane : virtual public Aircraft { public: void takeoff( ); void fly( ); void land( ); void bank(int degrees); ... };
//File: Pilot.h
#include \...
class Pilot { public: ...
private: Aircraft* myAircraft; };
12.7.4 实用工具类的映射
<
// File: Math.h ...
301 第12章 UML模型的C++实现
class Math { public: static double random( ); static double sin(const Angle&); static double cos(const Angle&); protected: private: Math( ); };
12.8 包的映射
User InterfaceBusiness LogicDatabase
图12-34 UML包示例
namespace Database { }
class Query {...}; class Table {...}; ...
namespace BusinessLogic { }
namespace UserInterface { using namespace BusinessLogic;
class DialogBox {...}; class Menu {...};
using namespace Database; class Transaction {...}; class Customer {...}; ...
302 U ML与软件建模
}
...
12.9 项目管理系统实例
添加项目分配资源 管理项目项目经理
更新项目项目经理释放资源删除项目
图12-35 项目管理系统的用案图(初始版) 图12-36 项目管理系统的用案图(详细版)
12.9.1 类图的映射
WorkEffortProject11..*Activity1..*1..*WorkProductResourceXSkill- YearsExpr : float11..*Task0..51Assigned toResource**Skill
图12-37 项目管理系统的类图
template
class CollectionByVal { ... };
303 第12章 UML模型的C++实现
template
class CollectionByRef { ... };
class WorkEffort; class Project; class Activity; class Task;
class WorkProduct; class Resource; class Skill;
class ResourceXSkill; class WorkEffort { ... };
class Project : public WorkEffort { private:
CollectionByVal theActivity; };
class Activity : public WorkEffort { private: Project *theProject;
CollectionByVal
CollectionByRef
};
class Task: public WorkEffort { private: Resource *theResource; };
class WorkProduct {
... };
class Resource { private: Task *theTask[6]; CollectionByRef
class Skill { private: CollectionByRef
class ResourceXSkill { private:
304 U ML与软件建模
Resource *theResource; Skill *theSkill;
float YearsExpr; };
Project Name : char * {private} ? Descr : char * ? StartDate : Date ? NumberOfProjects : int = 0 + <
template
public: addToCollection(T *elementRef); };
class Date;
class Project;
class Activity;
class Date { ... };
removeFromCollection(char *criteria);