UML 是一种分析设计语言,也就是一种建模语言。
UML其结构主要包括以下几个部分:
类图(Class Diagram)主要用来描述不同的类以及它们之间的关系。
类图的三段式结构为:
类图示例:
对应的Java示例代码:
观察后发现,示例类图和示例代码的差别不大,无非是类型写在变量后面而已。
UML规定类属性的表示方式为:
UML规定类操作的表示方式为: 注意:如果是构造方法,则无返回类型。
其中:可见性表示该属性对于类外的元素而言是否可见,包括:
可见性
+
-
#
*
一共九种关联关系,他们的符号可以记不住,这个没关系,用到再回来查。但是,他们各个图间的关系概念得分辨明晰,不要有含混不明的地方。
类图之间最重要的关系主要有以下4种:
例如,顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系,如下图。
public class Customer { private Product[] products;}public class Product { private Customer customer;}
public class Customer {
private Product[] products;
}
public class Product {
private Customer customer;
public class Customer { private Address address;}public class Address {}
private Address address;
public class Address {}
public class Node { private Node node;}
public class Node {
private Node node;
这个应该是最复杂的,需要好好看看;
用一个数字或一个数字范围表示, 这里的数字范围一遍指符号,下面有说明表格。 符号说明:
例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如下图:
对应的Java代码:
public class Form { private Button[] buttons; //定义一个集合对象} public class Button {}
public class Form {
private Button[] buttons; //定义一个集合对象
public class Button {}
注意: 类之间的多重性有时会直接在关系连线上用一个数字表示,这应该是一种简化的表达式;
在代码实现聚合关系时,成员对象通常作为构造方法、Setter\Getter方法或业务方法的参数注入到整体对象中,对应的Java代码片段如下:
成员对象
构造方法
Setter\Getter方法
业务方法的参数
public class Car { private Engine engine; //构造注入 public Car(Engine engine) { this.engine = engine; } //设值注入 public void setEngine(Engine engine) { this.engine = engine; }} public class Engine { // ...}
public class Car {
private Engine engine;
//构造注入
public Car(Engine engine) {
this.engine = engine;
//设值注入
public void setEngine(Engine engine) {
public class Engine {
// ...
例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。
public class Head { private Mouth mouth; public Head() { this.mouth = new Mouth(); //实例化成员类 }} public class Mouth { // ...}
public class Head {
private Mouth mouth;
public Head() {
this.mouth = new Mouth(); //实例化成员类
public class Mouth {
在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
对应的Java代码:
public class Driver { public void drive(Car car){ car.move(); }}public class Car { public void move(){ // ... }}
public class Driver {
public void drive(Car car){
car.move();
public void move(){
在UML中,泛化关系用带空心三角形的直线来表示。
//父类public class Person ( protected String name; protected int age; public void move( ) { // ... } public void say( ) { // ... }}//子类public class Student extends Person { private String teacherNo; public void study( ) { // ... }}//子类public class Teacher extends Person { private String teacherNo; public void teach() { // ... }}
//父类
public class Person (
protected String name;
protected int age;
public void move( ) {
public void say( ) {
//子类
public class Student extends Person {
private String teacherNo;
public void study( ) {
public class Teacher extends Person {
public void teach() {
在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。 对应的Java代码
public interface Vehicle { public void move() }public class Ship implements Vehicle { public void move(){ // ... }}public class Car implements Vehicle { public void move() { // ... }}
public interface Vehicle {
public void move()
public class Ship implements Vehicle {
public class Car implements Vehicle {
public void move() {
Can you recognize them?
原文链接:https://www.cnblogs.com/mysticbinary/p/17695993.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728