面向对象技术是一种广泛应用于软件工程中的方法论,旨在通过“对象”的概念来组织软件设计与开发。它贯穿于软件开发生命周期的分析、设计、编码和维护等各个阶段。其核心思想是将现实世界中的事物抽象为程序中的“对象”,每个对象包含数据(属性)和行为(方法),并通过类(Class)来定义对象的模板。
1. 面向对象分析(OOA, Object-Oriented Analysis)
面向对象分析侧重于理解问题域,识别系统中的关键对象及其关系,而不涉及具体实现细节。主要任务包括:
- 识别参与者(Actor)和用例(Use Case)
- 建立类图,识别实体类、边界类和控制类
- 分析对象之间的交互(如时序图、协作图)
2. 面向对象设计(OOD, Object-Oriented Design)
在分析基础上进行结构与行为的设计,关注如何实现系统功能。包括:
- 类的细化与职责分配
- 定义接口与继承关系
- 应用设计模式解决常见架构问题
- 优化性能、可扩展性和可维护性
3. UML(统一建模语言,Unified Modeling Language)
UML 是面向对象建模的标准可视化语言,用于描述系统的静态结构和动态行为。常用图示包括:
- 类图(Class Diagram):展示类、属性、方法及类间关系(继承、关联、聚合、组合等)
- 用例图(Use Case Diagram):描述系统功能与用户(参与者)之间的交互
- 时序图(Sequence Diagram):表现对象之间按时间顺序的消息传递
- 状态图(State Diagram):描述对象在其生命周期内的状态变化
- 活动图(Activity Diagram):类似流程图,表示业务流程或操作流程
4. 设计模式(Design Patterns)
设计模式是解决特定设计问题的可复用方案,分为三类:
- 创建型模式:处理对象创建机制(如单例模式、工厂方法模式、抽象工厂、建造者、原型)
- 结构型模式:处理类或对象的组合(如适配器、装饰器、代理、桥接、组合、外观、享元)
- 行为型模式:处理对象间的责任分配与通信(如观察者、策略、命令、状态、模板方法、中介者、迭代器)
这些技术共同构成了现代软件开发的核心基础,尤其在大型复杂系统中显著提升了代码的可读性、可维护性和可扩展性。
# 示例:使用单例模式确保一个类只有一个实例
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
def say_hello(self):
print("Hello from the Singleton instance!")
# 测试单例
s1 = Singleton()
s2 = Singleton()
print(s1 is s2) # 输出 True,说明是同一个实例
在UML(统一建模语言)类图中,继承、聚合和组合是三种重要的类间关系,用于描述对象之间的结构联系。它们通过不同的图形符号表示:
1. 继承(Inheritance)——“is-a”关系
表示一个类(子类)继承另一个类(父类)的属性和方法。
- 图形表示:带空心箭头的实线,箭头指向父类。
- 语法:
子类 ——▷ 父类
△
|
|
父类
/ \
/ \
子类 其他子类
示例:
+------------------+
| Animal |
+------------------+
| +eat() |
+------------------+
△
|
| extends
|
+------------------+
| Dog |
+------------------+
| +bark() |
+------------------+
Dog继承自Animal,即“Dog is an Animal”。
2. 聚合(Aggregation)——“has-a”关系(弱拥有)
表示整体与部分的关系,但部分可以独立于整体存在。
- 图形表示:空心菱形 + 实线,菱形指向整体。
- 语法:
整体 ◇—— 部分
示例:
+----------------+ +----------------+
| Classroom |◇--------▶| Student |
+----------------+ +----------------+
Classroom包含多个Student,但学生可以脱离教室而存在(比如转班或毕业)。
3. 组合(Composition)——“contains-a”关系(强拥有)
也是一种整体与部分的关系,但部分不能脱离整体独立存在,生命周期一致。
- 图形表示:实心菱形 + 实线,菱形指向整体。
- 语法:
整体 ▩—— 部分
示例:
+----------------+ +----------------+
| Car |▩--------▶| Engine |
+----------------+ +----------------+
Car和Engine是强关联,引擎不能脱离汽车独立存在(此处为逻辑建模,实际中可调整)。
再如:
+----------------+ +----------------+
| University |▩--------▶| Department |
+----------------+ +----------------+
大学由学院组成,若大学不存在,学院也随之消失。
总结对比表:
| 关系类型 | 中文含义 | UML符号 | 生命周期依赖 | 示例 |
|---|---|---|---|---|
| 继承 | is-a | 空心三角箭头 | 否 | Dog is an Animal |
| 聚合 | has-a(弱) | 空心菱形 + 实线 | 否 | Classroom has Students |
| 组合 | has-a(强) | 实心菱形 + 实线 | 是 | Car contains Engine |
# Python 示例:体现上述关系的代码结构
class Animal:
def eat(self):
print("Animal is eating")
class Dog(Animal): # 继承
def bark(self):
print("Dog is barking")
class Student:
def __init__(self, name):
self.name = name
class Classroom: # 聚合:包含 Student,但不控制其生命周期
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
class Engine:
def start(self):
print("Engine started")
class Car: # 组合:Car 创建并管理 Engine 的生命周期
def __init__(self):
self.engine = Engine() # 引擎随汽车创建
def start(self):
self.engine.start()
# 测试
d = Dog()
d.eat() # 来自父类
d.bark()
s1 = Student("Alice")
room = Classroom()
room.add_student(s1) # 聚合:学生可独立存在
my_car = Car()
my_car.start() # 组合:引擎由汽车创建和管理



被折叠的 条评论
为什么被折叠?



