- MD OL by Jimbowhy, 2016/4/1 22:26
概要
本文从精简的篇幅来讲述 StarUML 建模工具在面向对象编程中的应用,力求向编程人员提供一个Minute级的 StarUML 使用教程。
基本概念
设计模式上有几个重要的概念:泛化(Generalization) 聚合(Aggregation)组合(Composition)依赖(Dependency)
泛化(Generalization)使用空心的三角表示继承关系(类继承)。在UML的术语中,这种关系被称为泛化(Generalization)。比如 Animal 是基类,Man、Bird和Dog是子类。
在逻辑上基类 Animal 是子类的基础或起源,并且基类所有功能和属性对子类都有意义,也表示为B是A的一种(a kind of )。
聚合(Aggregation)逻辑上表示A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生(继承)而成。
组合(composition)它代表了一种更为坚固的聚合关系——组合(composition)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。
依赖(Dependency) 这种关系表明,如果类A被修改,那么类B会受到影响。
基本操作
打开你的StarUML,新建一个工程。使用 Model Explorer 来添加包(Namespace),类及其属性设置,类成员方法及其参数也通过右键弹出菜单来操作。
然后将这些包、类拖到左边工作区上的 Main 图表上,并设置类继承等关系。注意不能在 Model Explorer 中设置继承关系,如果将 Man 拖到 Animal 下级则表示为它的内部类。
以上操作就完成了 Model -> View -> Diagram 的转换。
Model, View and Diagram
StarUML™ makes a clear conceptual distinction between models, views and diagrams. AModel is an element that contains information for a software model. AView is a visual expression of the information contained in a model, and aDiagram is a collection of view elements that represent the user’s specific design thoughts.
同样,生成代码也是在右键弹出菜单操作,选择 C++ 项目,其子项 Generate Code 用来生成 C++ 项目代码。使用 Tools -> C++ -> Generate Code 也可以同样的事。
在向导界面中选择需要的包或类,指定一个导出目录,并设置好导出参数,如代码注解、包转Namespace、缩进等等。
PS:第一张图的桌面水珠图片是不是挺不错的,自己拍的,链接在乐乎这。
CODE展示
/*
*
* Generated by StarUML(tm) C++ Add-In
*
* @ Project : Untitled
* @ File Name : Animal.h
* @ Date : 2016/1/5
* @ Author : Jimbowhy
*
*/
#if !defined(_ANIMAL_H)
#define _ANIMAL_H
class Animal
{
public:
void Motion(int Speed);
};
#endif //_ANIMAL_H
/*
*
* Generated by StarUML(tm) C++ Add-In
*
* @ Project : Untitled
* @ File Name : Animal.cpp
* @ Date : 2016/1/5
* @ Author : Jimbowhy
*
*/
#include "Animal.h"
void Animal::Motion(int Speed)
{
}
/*
*
* Generated by StarUML(tm) C++ Add-In
*
* @ Project : Untitled
* @ File Name : Dog.h
* @ Date : 2016/1/5
* @ Author : Jimbowhy
*
*/
#if !defined(_DOG_H)
#define _DOG_H
#include "Animal.h"
class Dog : public Animal
{
public:
int Name;
int Age;
void Barking(int moon);
void Bite(Animal target);
};
#endif //_DOG_H</pre>
/*
*
* Generated by StarUML(tm) C++ Add-In
*
* @ Project : Untitled
* @ File Name : Dog.cpp
* @ Date : 2016/1/5
* @ Author : Jimbowhy
*
*/
#include "Dog.h"
#include "Animal.h"
void Dog::Barking(int moon)
{
}
void Dog::Bite(Animal target)
{
}