目录
类图是UML模型中静态视图。它用来描述系统中的有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等。静态视图包括类图和对象图。
类图(Class Diagram)是描述类、接口、协同以及他们之间关系的图,用来显示系统中这些概念的静态结构。
类图是其它图的基础。我们可以在类图的基础上,使用状态图、协作图、组件图和配置图等。
类图的主要作用包括:
类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。
建模的内容包括:
在UML中,一个类通常由名称(Name)、属性(Attribute)和操作(Operation)构成。除此之外,类的构成还包含类的职责(Responsibility)、约束(Constraint)和注释(Note)等信息。
类图一般如下图所示:
也有只表达类名、或者单独加上属性或者方法(操作)的模式。
?
类的名称应该是一个名词,类名应该准确清晰的反映出问题域中的概念。按照UML的约定,类的名称中的每个词的首字母应大写,且使用正体名称来表示可实例化的类,使用斜体名称表示抽象的类。
包的名字,可以在类名字的下面,换行,加上(from Animals),或者类名的前面,直接加上双冒号,表达命名空间,以区别类。如
Animals::Dog
抽象类,用斜体字表示,是不可以直接被实例化的,可实例化的类与抽象类的区别如下。
1. 定义
2. 主要区别
3. 代码例子
// 可实例化的类
public class Car {
public void drive() {
System.out.println("Driving the car.");
}
}
// 抽象类
public abstract class Vehicle {
public abstract void move(); // 抽象方法,没有具体实现
}
再看实例化的过程:
// 抽象类
public abstract class Vehicle {
public abstract void move(); // 抽象方法,没有具体实现
}
// 继承抽象类的具体类
public class Car extends Vehicle {
// 实现抽象方法
@Override
public void move() {
System.out.println("Driving the car.");
}
// 添加具体类自己的方法
public void honk() {
System.out.println("Beep beep!");
}
}
// 主类,进行实例化操作
public class Main {
public static void main(String[] args) {
// 创建 Car 类的实例
Car myCar = new Car();
// 调用 Car 类的方法
myCar.move(); // 输出 "Driving the car."
myCar.honk(); // 输出 "Beep beep!"
}
}
给出一段Python的语法实现:
复制代码
# 抽象基类
from abc import ABC, abstractmethod
class Vehicle(ABC):
@abstractmethod
def move(self):
pass # 抽象方法,没有具体实现
# 继承抽象基类的具体类
class Car(Vehicle):
# 实现抽象方法
def move(self):
print("Driving the car.")
# 添加具体类自己的方法
def honk(self):
print("Beep beep!")
# 主程序,进行实例化操作
if __name__ == "__main__":
# 创建 Car 类的实例
my_car = Car()
# 调用 Car 类的方法
my_car.move() # 输出 "Driving the car."
my_car.honk() # 输出 "Beep beep!"
在上述示例中,Car
?是一个可实例化的类,因为它提供了drive
?方法的具体实现。而?Vehicle
?是一个抽象类,因为它包含了一个没有实现的抽象方法?move
。任何继承?Vehicle
?的类都必须提供?move
?方法的具体实现。
总之,可实例化的类和抽象类在面向对象编程中都有其特定的用途。可实例化的类代表具体的实体和操作,而抽象类主要用于定义和组织接口以及提供部分实现。
(未完待续,后续文章将从3.3 属性开始,不再重新命名目录。)