文章目录
在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);
}
}
这些伪代码示例展示了如何使用这些类来表示图书管理系统的基本逻辑。你可以根据实际需要添加更多的功能和细节。
————————————————
最后我们放松一下眼睛