首页 > 其他分享 >UML类图

UML类图

时间:2024-12-29 22:53:50浏览次数:4  
标签:+------------+ string void 类图 Book books UML public

在UML(统一建模语言)中,类是最基本的构造块之一,用于描述系统中的实体以及它们之间的关系。类图(Class Diagram)展示了系统中类的结构,包括类名、属性、操作(方法)以及类之间的关系。
一个典型的类在UML中的表示通常如下所示:

+------------------+
| 类名 |
+------------------+
| - 属性1 : 类型1 |
| - 属性2 : 类型2 |
| + 属性3 : 类型3 |
+------------------+
| + 方法1(参数) : 返回类型 |
| + 方法2(参数) : 返回类型 |
+------------------+
每个部分的含义如下:

类名:位于矩形的第一行,通常使用大写字母开头的名词来命名,表示类的主要职责或功能。
属性:位于矩形的第二行,列出了类的数据成员。属性前面的符号表示其可见性:
+ 表示公共(public),对外部可见;
- 表示私有(private),只在类内部可见;
# 表示受保护(protected),类自身及其子类可见。
方法:位于矩形的第三行,列出了类的行为或操作。方法的可见性与属性相同。
此外,类之间还可以定义不同的关系:

关联(Association):表示两个类之间的连接,可以通过箭头来表示导航方向。
聚合(Aggregation):一种特殊的关联,表示整体与部分的关系,但部分可以在多个整体之间共享。
组合(Composition):也是表示整体与部分的关系,但是部分不能脱离整体而存在。
泛化(Generalization):也称为继承,表示一个类(子类)从另一个类(父类)继承属性和操作。
依赖(Dependency):表示一个类使用另一个类的操作或属性,通常通过虚线箭头表示。
通过上述元素,你可以构建出详细的类图,用以描述系统的设计结构。

让我们通过一个具体的例子来展示如何使用UML类图来表示一个简单的图书管理系统中的类及其关系。

假设我们有一个简单的图书管理系统,包含以下几个类:

Book(书)
Author(作者)
Publisher(出版社)
Library(图书馆)

类定义
Book
+-------------+
| Book |
+-------------+
| - isbn: string |
| - title: string|
| - author: Author|
| - publisher: Publisher|
+-------------+
| + getIsbn(): string|
| + getTitle(): string|
| + setAuthor(author: Author): void|
| + setPublisher(publisher: Publisher): void|
+-------------+

Author
+------------+
| Author |
+------------+
| - name: string |
| - books: Set<Book> |
+------------+
| + getName(): string|
| + addBook(book: Book): void|
+------------+

Publisher
+--------------+
| Publisher |
+--------------+
| - name: string|
| - books: Set<Book> |
+--------------+
| + getName(): string|
| + addBook(book: Book): void|
+--------------+

Library
+------------+
| Library |
+------------+
| - name: string |
| - books: Set<Book> |
+------------+
| + getName(): string|
| + addBook(book: Book): void|
+------------+

类间关系
Book与Author之间是聚合关系(Aggregation),因为一本书可以有多个作者,一个作者也可以写多本书。
Book与Publisher之间是聚合关系,一本书只能由一个出版社出版,但一个出版社可以出版多本书。
Library与Book之间是聚合关系,一个图书馆可以收藏多本书。

UML类图表示
+------------+ +-------------+ +--------------+
| Author | | Book | | Publisher |
+------------+ +-------------+ +--------------+
| - name: string | | - isbn: string | | - name: string|
| - books: Set<Book>| | - title: string| | - books: Set<Book>|
+------------+ | - author: Author| +--------------+
| + getName(): string| | - publisher: Publisher|
| + addBook(book: Book): void| + getIsbn(): string|
+------------+ | + getTitle(): string|
| + setAuthor(author: Author): void|
| + setPublisher(publisher: Publisher): void|
+-------------+

+------------+
| Library |
+------------+
| - name: string |
| - books: Set<Book> |
+------------+
| + getName(): string|
| + addBook(book: Book): void|
+------------+

+------------+ o----------> +-------------+
| Author | | Book |
+------------+ +-------------+
(books)

+-------------+ o----------> +--------------+
| Book | | Publisher |
+-------------+ +--------------+
(publisher)

+------------+ o----------> +-------------+
| Library | | Book |
+------------+ +-------------+
(books)

在这个例子中,“o---------->”表示聚合关系,表明一个类拥有另一个类的对象集合。通过这种表示方式,我们可以清晰地看到各个类的属性和方法,以及它们之间的关系。这有助于理解和设计系统的整体结构。

让我们继续深入探讨这个图书管理系统中的类及其关系,并进一步完善类图和描述。

更详细的类图描述
1. Book 类
+-------------+
| Book |
+-------------+
| - isbn: string |
| - title: string|
| - author: Author|
| - publisher: Publisher|
+-------------+
| + getIsbn(): string|
| + getTitle(): string|
| + setAuthor(author: Author): void|
| + setPublisher(publisher: Publisher): void|
| + getAuthor(): Author|
| + getPublisher(): Publisher|
+-------------+

2. Author 类
+------------+
| Author |
+------------+
| - name: string |
| - books: Set<Book> |
+------------+
| + getName(): string|
| + addBook(book: Book): void|
| + removeBook(book: Book): void|
| + getBooks(): Set<Book>|
+------------+

3. Publisher 类
+--------------+
| Publisher |
+--------------+
| - name: string|
| - books: Set<Book> |
+--------------+
| + getName(): string|
| + addBook(book: Book): void|
| + removeBook(book: Book): void|
| + getBooks(): Set<Book>|
+--------------+

4. Library 类
+------------+
| Library |
+------------+
| - name: string |
| - books: Set<Book> |
+------------+
| + getName(): string|
| + addBook(book: Book): void|
| + removeBook(book: Book): void|
| + getBooks(): Set<Book>|
+------------+

类图更新
为了更详细地表示类之间的关系,我们可以更新类图如下:

+------------+ o----------> +-------------+
| Author | | Book |
+------------+ +-------------+
(books) (author, publisher)

+-------------+ o----------> +--------------+
| Book | | Publisher |
+-------------+ +--------------+
(publisher)

+------------+ o----------> +-------------+
| Library | | Book |
+------------+ +-------------+
(books)

在这个类图中:

Author 类与 Book 类之间是聚合关系,表示一个作者可以有多本书,每本书都有一个或多个作者。
Book 类与 Publisher 类之间是聚合关系,表示一本书属于一个出版社,而一个出版社可以出版多本书。
Library 类与 Book 类之间也是聚合关系,表示一个图书馆可以收藏多本书。
示例代码片段
为了更好地理解这些类是如何实现的,下面提供了一个简单的伪代码示例,展示了这些类的基本操作:

Author 类
public class Author {
private String name;
private Set<Book> books = new HashSet<>();

public Author(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void addBook(Book book) {
books.add(book);
}

public void removeBook(Book book) {
books.remove(book);
}

public Set<Book> getBooks() {
return Collections.unmodifiableSet(books);
}
}

Book 类
public class Book {
private String isbn;
private String title;
private Author author;
private Publisher publisher;

public Book(String isbn, String title) {
this.isbn = isbn;
this.title = title;
}

public String getIsbn() {
return isbn;
}

public String getTitle() {
return title;
}

public void setAuthor(Author author) {
this.author = author;
}

public void setPublisher(Publisher publisher) {
this.publisher = publisher;
}

public Author getAuthor() {
return author;
}

public Publisher getPublisher() {
return publisher;
}
}

Publisher 类
public class Publisher {
private String name;
private Set<Book> books = new HashSet<>();

public Publisher(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void addBook(Book book) {
books.add(book);
}

public void removeBook(Book book) {
books.remove(book);
}

public Set<Book> getBooks() {
return Collections.unmodifiableSet(books);
}
}

Library 类
public class Library {
private String name;
private Set<Book> books = new HashSet<>();

public Library(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void addBook(Book book) {
books.add(book);
}

public void removeBook(Book book) {
books.remove(book);
}

public Set<Book> getBooks() {
return Collections.unmodifiableSet(books);
}
}

标签:+------------+,string,void,类图,Book,books,UML,public
From: https://www.cnblogs.com/pinganxile/p/18639755

相关文章

  • 类图学习
    类图(ClassDiagram)是统一建模语言(UML,UnifiedModelingLanguage)中的一种静态结构图,用于描述系统的静态结构。它通过展示系统中的类、接口、协作和它们之间的关系来表示一个面向对象系统的设计或实现。类图是软件工程中非常重要的工具,因为它们可以帮助开发人员理解系统的组成部分......
  • 2024-12-12《UML类图》
    UML九图  1.类图类图(ClassDiagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。类图描述......
  • UML之关联
    关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关......
  • UML之集合类型
    无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。1.SetSet是一个不允许存在重复值且未排序的集合。例如一个骑行活动中,有......
  • uml类图总结
    类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统类图的基本元素1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标识示例: 3.......
  • uml上机实验 4
    一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执行过程中所完成工作(动作)的方法; 掌握描述对象内部工作的具体步骤; 掌握使用Rational......
  • uml上级实验 5
    一实验目的 了解系统物理体系结构模型和表示方法; 了解部署图的概念及其在系统设计中的作用; 掌握使用RationalRose绘制部署图的方法;二实验环境及实验准备 所需硬件环境为微机; 所需软件环境为RationalRose、MiscrosoftWord等; 熟悉RationalRose下部署图模型建模的方法和......
  • UML之属性与参数的多重性
    在UML中,多重性是指一个条目潜在的数量范围。多重性可被用于属性、操作参数、关联关系。UML元模型也使用多重性对元模型元素之间的关系进行约束。多重性总是包含基数值,它是相关条目在现实世界中的确切数量。本文将说明类属性和类操作参数的多重性。一、属性的多重性假设我们需要......
  • UML之属性与参数的多重性
    在UML中,多重性是指一个条目潜在的数量范围。多重性可被用于属性、操作参数、关联关系。UML元模型也使用多重性对元模型元素之间的关系进行约束。多重性总是包含基数值,它是相关条目在现实世界中的确切数量。本文将说明类属性和类操作参数的多重性。一、属性的多重性假设我们需......
  • 本地启动 PlantUML 服务并解除图片大小限制
    本地启动PlantUML服务配置Java环境,如已有忽略下载Java运行环境,如openjdk-11.0.2_windows-x64_bin.zip,将其解压。使用picoweb启动PlantUML服务在Releases·plantuml/plantuml上下载最新版plantuml.jar文件。使用以下命令启动PlantUML服务java-jarplantu......