软件工程:面向对象技术

📌目录



⚖️ 面向对象技术:现代软件设计的核心范式

面向对象技术(Object-Oriented Technology)是现代软件开发的核心范式,它通过封装、继承、多态等机制,提供了更自然、更灵活的软件设计和实现方式。本文将全面介绍面向对象技术的基本概念、核心特性、设计原则和开发方法。

🎯 一、面向对象技术概述

(一)面向对象技术的定义

面向对象技术是一种以对象为核心的软件开发方法,它将数据和操作数据的方法封装在一起,通过对象之间的交互来实现系统功能。

技术概念
#mermaid-svg-zQVbrmLHLWB7Okod{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zQVbrmLHLWB7Okod .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zQVbrmLHLWB7Okod .error-icon{fill:#552222;}#mermaid-svg-zQVbrmLHLWB7Okod .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zQVbrmLHLWB7Okod .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zQVbrmLHLWB7Okod .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zQVbrmLHLWB7Okod .marker.cross{stroke:#333333;}#mermaid-svg-zQVbrmLHLWB7Okod svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zQVbrmLHLWB7Okod p{margin:0;}#mermaid-svg-zQVbrmLHLWB7Okod .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zQVbrmLHLWB7Okod .cluster-label text{fill:#333;}#mermaid-svg-zQVbrmLHLWB7Okod .cluster-label span{color:#333;}#mermaid-svg-zQVbrmLHLWB7Okod .cluster-label span p{background-color:transparent;}#mermaid-svg-zQVbrmLHLWB7Okod .label text,#mermaid-svg-zQVbrmLHLWB7Okod span{fill:#333;color:#333;}#mermaid-svg-zQVbrmLHLWB7Okod .node rect,#mermaid-svg-zQVbrmLHLWB7Okod .node circle,#mermaid-svg-zQVbrmLHLWB7Okod .node ellipse,#mermaid-svg-zQVbrmLHLWB7Okod .node polygon,#mermaid-svg-zQVbrmLHLWB7Okod .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zQVbrmLHLWB7Okod .rough-node .label text,#mermaid-svg-zQVbrmLHLWB7Okod .node .label text,#mermaid-svg-zQVbrmLHLWB7Okod .image-shape .label,#mermaid-svg-zQVbrmLHLWB7Okod .icon-shape .label{text-anchor:middle;}#mermaid-svg-zQVbrmLHLWB7Okod .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zQVbrmLHLWB7Okod .rough-node .label,#mermaid-svg-zQVbrmLHLWB7Okod .node .label,#mermaid-svg-zQVbrmLHLWB7Okod .image-shape .label,#mermaid-svg-zQVbrmLHLWB7Okod .icon-shape .label{text-align:center;}#mermaid-svg-zQVbrmLHLWB7Okod .node.clickable{cursor:pointer;}#mermaid-svg-zQVbrmLHLWB7Okod .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zQVbrmLHLWB7Okod .arrowheadPath{fill:#333333;}#mermaid-svg-zQVbrmLHLWB7Okod .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zQVbrmLHLWB7Okod .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zQVbrmLHLWB7Okod .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zQVbrmLHLWB7Okod .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zQVbrmLHLWB7Okod .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zQVbrmLHLWB7Okod .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zQVbrmLHLWB7Okod .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zQVbrmLHLWB7Okod .cluster text{fill:#333;}#mermaid-svg-zQVbrmLHLWB7Okod .cluster span{color:#333;}#mermaid-svg-zQVbrmLHLWB7Okod div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zQVbrmLHLWB7Okod .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zQVbrmLHLWB7Okod rect.text{fill:none;stroke-width:0;}#mermaid-svg-zQVbrmLHLWB7Okod .icon-shape,#mermaid-svg-zQVbrmLHLWB7Okod .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zQVbrmLHLWB7Okod .icon-shape p,#mermaid-svg-zQVbrmLHLWB7Okod .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zQVbrmLHLWB7Okod .icon-shape .label rect,#mermaid-svg-zQVbrmLHLWB7Okod .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zQVbrmLHLWB7Okod .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zQVbrmLHLWB7Okod .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zQVbrmLHLWB7Okod :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 面向对象技术
对象

封装
继承
多态
数据+方法
对象的模板
信息隐藏
代码重用
动态绑定

(二)面向对象技术的发展

发展历程

时间 事件 意义
1960s Simula语言 第一个面向对象语言
1970s Smalltalk语言 完整的面向对象环境
1980s C++语言 面向对象普及
1990s Java语言 面向对象主流
2000s C#、Python等 多语言支持

(三)面向对象技术的特点

技术特点

特点 说明
封装性 数据和操作封装
继承性 支持代码重用
多态性 支持动态绑定
抽象性 抽取本质特征

📦 二、面向对象的基本概念

(一)对象

对象是面向对象技术的基本单元,是属性(数据)和方法(操作)的封装体。

对象概念
#mermaid-svg-OtnH9Seh9fDjCb3r{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OtnH9Seh9fDjCb3r .error-icon{fill:#552222;}#mermaid-svg-OtnH9Seh9fDjCb3r .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OtnH9Seh9fDjCb3r .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OtnH9Seh9fDjCb3r .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OtnH9Seh9fDjCb3r .marker.cross{stroke:#333333;}#mermaid-svg-OtnH9Seh9fDjCb3r svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OtnH9Seh9fDjCb3r p{margin:0;}#mermaid-svg-OtnH9Seh9fDjCb3r .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster-label text{fill:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster-label span{color:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster-label span p{background-color:transparent;}#mermaid-svg-OtnH9Seh9fDjCb3r .label text,#mermaid-svg-OtnH9Seh9fDjCb3r span{fill:#333;color:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r .node rect,#mermaid-svg-OtnH9Seh9fDjCb3r .node circle,#mermaid-svg-OtnH9Seh9fDjCb3r .node ellipse,#mermaid-svg-OtnH9Seh9fDjCb3r .node polygon,#mermaid-svg-OtnH9Seh9fDjCb3r .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OtnH9Seh9fDjCb3r .rough-node .label text,#mermaid-svg-OtnH9Seh9fDjCb3r .node .label text,#mermaid-svg-OtnH9Seh9fDjCb3r .image-shape .label,#mermaid-svg-OtnH9Seh9fDjCb3r .icon-shape .label{text-anchor:middle;}#mermaid-svg-OtnH9Seh9fDjCb3r .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OtnH9Seh9fDjCb3r .rough-node .label,#mermaid-svg-OtnH9Seh9fDjCb3r .node .label,#mermaid-svg-OtnH9Seh9fDjCb3r .image-shape .label,#mermaid-svg-OtnH9Seh9fDjCb3r .icon-shape .label{text-align:center;}#mermaid-svg-OtnH9Seh9fDjCb3r .node.clickable{cursor:pointer;}#mermaid-svg-OtnH9Seh9fDjCb3r .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OtnH9Seh9fDjCb3r .arrowheadPath{fill:#333333;}#mermaid-svg-OtnH9Seh9fDjCb3r .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OtnH9Seh9fDjCb3r .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OtnH9Seh9fDjCb3r .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OtnH9Seh9fDjCb3r .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OtnH9Seh9fDjCb3r .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OtnH9Seh9fDjCb3r .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster text{fill:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r .cluster span{color:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OtnH9Seh9fDjCb3r .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OtnH9Seh9fDjCb3r rect.text{fill:none;stroke-width:0;}#mermaid-svg-OtnH9Seh9fDjCb3r .icon-shape,#mermaid-svg-OtnH9Seh9fDjCb3r .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OtnH9Seh9fDjCb3r .icon-shape p,#mermaid-svg-OtnH9Seh9fDjCb3r .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OtnH9Seh9fDjCb3r .icon-shape .label rect,#mermaid-svg-OtnH9Seh9fDjCb3r .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OtnH9Seh9fDjCb3r .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OtnH9Seh9fDjCb3r .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OtnH9Seh9fDjCb3r :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 对象
属性
方法
消息
数据成员
操作行为
对象交互

对象示例

python 复制代码
# 学生对象
class Student:
    def __init__(self, student_id, name, age):
        self.student_id = student_id  # 属性:学号
        self.name = name              # 属性:姓名
        self.age = age                # 属性:年龄
        self.courses = []             # 属性:课程列表
    
    def add_course(self, course):     # 方法:添加课程
        self.courses.append(course)
    
    def get_info(self):               # 方法:获取信息
        return f"{self.name}, {self.age}岁"

# 创建对象
student = Student("001", "张三", 20)
student.add_course("数学")
print(student.get_info())  # 输出:张三, 20岁

(二)类

是对象的模板,定义了对象的属性和方法。

类概念
#mermaid-svg-LaLocN6Vcj1Lx5Kk{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .error-icon{fill:#552222;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .marker.cross{stroke:#333333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk p{margin:0;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster-label text{fill:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster-label span{color:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster-label span p{background-color:transparent;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .label text,#mermaid-svg-LaLocN6Vcj1Lx5Kk span{fill:#333;color:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .node rect,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node circle,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node ellipse,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node polygon,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .rough-node .label text,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node .label text,#mermaid-svg-LaLocN6Vcj1Lx5Kk .image-shape .label,#mermaid-svg-LaLocN6Vcj1Lx5Kk .icon-shape .label{text-anchor:middle;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .rough-node .label,#mermaid-svg-LaLocN6Vcj1Lx5Kk .node .label,#mermaid-svg-LaLocN6Vcj1Lx5Kk .image-shape .label,#mermaid-svg-LaLocN6Vcj1Lx5Kk .icon-shape .label{text-align:center;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .node.clickable{cursor:pointer;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .arrowheadPath{fill:#333333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LaLocN6Vcj1Lx5Kk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LaLocN6Vcj1Lx5Kk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster text{fill:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .cluster span{color:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LaLocN6Vcj1Lx5Kk rect.text{fill:none;stroke-width:0;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .icon-shape,#mermaid-svg-LaLocN6Vcj1Lx5Kk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .icon-shape p,#mermaid-svg-LaLocN6Vcj1Lx5Kk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .icon-shape .label rect,#mermaid-svg-LaLocN6Vcj1Lx5Kk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LaLocN6Vcj1Lx5Kk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LaLocN6Vcj1Lx5Kk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LaLocN6Vcj1Lx5Kk :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类
定义属性
定义方法
创建对象
数据成员
操作方法
实例化

类示例

python 复制代码
# 定义类
class Person:
    # 类属性
    species = "人类"
    
    # 初始化方法
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age
    
    # 实例方法
    def introduce(self):
        return f"我是{self.name},{self.age}岁"
    
    # 类方法
    @classmethod
    def get_species(cls):
        return cls.species
    
    # 静态方法
    @staticmethod
    def is_adult(age):
        return age >= 18

# 使用类
person = Person("李四", 25)
print(person.introduce())  # 输出:我是李四,25岁
print(Person.get_species())  # 输出:人类
print(Person.is_adult(20))  # 输出:True

(三)消息

消息是对象之间交互的方式,通过发送消息来调用对象的方法。

消息概念
#mermaid-svg-fFL9XS9FE7TOzDdO{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fFL9XS9FE7TOzDdO .error-icon{fill:#552222;}#mermaid-svg-fFL9XS9FE7TOzDdO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fFL9XS9FE7TOzDdO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fFL9XS9FE7TOzDdO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fFL9XS9FE7TOzDdO .marker.cross{stroke:#333333;}#mermaid-svg-fFL9XS9FE7TOzDdO svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fFL9XS9FE7TOzDdO p{margin:0;}#mermaid-svg-fFL9XS9FE7TOzDdO .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster-label text{fill:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster-label span{color:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster-label span p{background-color:transparent;}#mermaid-svg-fFL9XS9FE7TOzDdO .label text,#mermaid-svg-fFL9XS9FE7TOzDdO span{fill:#333;color:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO .node rect,#mermaid-svg-fFL9XS9FE7TOzDdO .node circle,#mermaid-svg-fFL9XS9FE7TOzDdO .node ellipse,#mermaid-svg-fFL9XS9FE7TOzDdO .node polygon,#mermaid-svg-fFL9XS9FE7TOzDdO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fFL9XS9FE7TOzDdO .rough-node .label text,#mermaid-svg-fFL9XS9FE7TOzDdO .node .label text,#mermaid-svg-fFL9XS9FE7TOzDdO .image-shape .label,#mermaid-svg-fFL9XS9FE7TOzDdO .icon-shape .label{text-anchor:middle;}#mermaid-svg-fFL9XS9FE7TOzDdO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fFL9XS9FE7TOzDdO .rough-node .label,#mermaid-svg-fFL9XS9FE7TOzDdO .node .label,#mermaid-svg-fFL9XS9FE7TOzDdO .image-shape .label,#mermaid-svg-fFL9XS9FE7TOzDdO .icon-shape .label{text-align:center;}#mermaid-svg-fFL9XS9FE7TOzDdO .node.clickable{cursor:pointer;}#mermaid-svg-fFL9XS9FE7TOzDdO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fFL9XS9FE7TOzDdO .arrowheadPath{fill:#333333;}#mermaid-svg-fFL9XS9FE7TOzDdO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fFL9XS9FE7TOzDdO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fFL9XS9FE7TOzDdO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fFL9XS9FE7TOzDdO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fFL9XS9FE7TOzDdO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fFL9XS9FE7TOzDdO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster text{fill:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO .cluster span{color:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fFL9XS9FE7TOzDdO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fFL9XS9FE7TOzDdO rect.text{fill:none;stroke-width:0;}#mermaid-svg-fFL9XS9FE7TOzDdO .icon-shape,#mermaid-svg-fFL9XS9FE7TOzDdO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fFL9XS9FE7TOzDdO .icon-shape p,#mermaid-svg-fFL9XS9FE7TOzDdO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fFL9XS9FE7TOzDdO .icon-shape .label rect,#mermaid-svg-fFL9XS9FE7TOzDdO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fFL9XS9FE7TOzDdO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fFL9XS9FE7TOzDdO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fFL9XS9FE7TOzDdO :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 发送消息
返回结果
对象A
对象B

消息示例

python 复制代码
# 消息传递
class Calculator:
    def add(self, a, b):
        return a + b
    
    def subtract(self, a, b):
        return a - b

# 创建对象
calc = Calculator()

# 发送消息
result1 = calc.add(10, 5)      # 发送add消息
result2 = calc.subtract(10, 5) # 发送subtract消息

print(result1)  # 输出:15
print(result2)  # 输出:5

🌐 三、面向对象的三大特性

(一)封装

封装是将数据和操作数据的方法绑定在一起,并隐藏内部实现细节。

封装概念
#mermaid-svg-PGUtTqMxfgXuh6yi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PGUtTqMxfgXuh6yi .error-icon{fill:#552222;}#mermaid-svg-PGUtTqMxfgXuh6yi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PGUtTqMxfgXuh6yi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PGUtTqMxfgXuh6yi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PGUtTqMxfgXuh6yi .marker.cross{stroke:#333333;}#mermaid-svg-PGUtTqMxfgXuh6yi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PGUtTqMxfgXuh6yi p{margin:0;}#mermaid-svg-PGUtTqMxfgXuh6yi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster-label text{fill:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster-label span{color:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster-label span p{background-color:transparent;}#mermaid-svg-PGUtTqMxfgXuh6yi .label text,#mermaid-svg-PGUtTqMxfgXuh6yi span{fill:#333;color:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi .node rect,#mermaid-svg-PGUtTqMxfgXuh6yi .node circle,#mermaid-svg-PGUtTqMxfgXuh6yi .node ellipse,#mermaid-svg-PGUtTqMxfgXuh6yi .node polygon,#mermaid-svg-PGUtTqMxfgXuh6yi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PGUtTqMxfgXuh6yi .rough-node .label text,#mermaid-svg-PGUtTqMxfgXuh6yi .node .label text,#mermaid-svg-PGUtTqMxfgXuh6yi .image-shape .label,#mermaid-svg-PGUtTqMxfgXuh6yi .icon-shape .label{text-anchor:middle;}#mermaid-svg-PGUtTqMxfgXuh6yi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PGUtTqMxfgXuh6yi .rough-node .label,#mermaid-svg-PGUtTqMxfgXuh6yi .node .label,#mermaid-svg-PGUtTqMxfgXuh6yi .image-shape .label,#mermaid-svg-PGUtTqMxfgXuh6yi .icon-shape .label{text-align:center;}#mermaid-svg-PGUtTqMxfgXuh6yi .node.clickable{cursor:pointer;}#mermaid-svg-PGUtTqMxfgXuh6yi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PGUtTqMxfgXuh6yi .arrowheadPath{fill:#333333;}#mermaid-svg-PGUtTqMxfgXuh6yi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PGUtTqMxfgXuh6yi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PGUtTqMxfgXuh6yi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PGUtTqMxfgXuh6yi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PGUtTqMxfgXuh6yi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PGUtTqMxfgXuh6yi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster text{fill:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi .cluster span{color:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PGUtTqMxfgXuh6yi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PGUtTqMxfgXuh6yi rect.text{fill:none;stroke-width:0;}#mermaid-svg-PGUtTqMxfgXuh6yi .icon-shape,#mermaid-svg-PGUtTqMxfgXuh6yi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PGUtTqMxfgXuh6yi .icon-shape p,#mermaid-svg-PGUtTqMxfgXuh6yi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PGUtTqMxfgXuh6yi .icon-shape .label rect,#mermaid-svg-PGUtTqMxfgXuh6yi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PGUtTqMxfgXuh6yi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PGUtTqMxfgXuh6yi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PGUtTqMxfgXuh6yi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 封装
数据隐藏
接口暴露
保护数据
内部数据私有
提供公共接口
防止非法访问

封装示例

python 复制代码
class BankAccount:
    def __init__(self, account_no, balance=0):
        self.__account_no = account_no  # 私有属性
        self.__balance = balance        # 私有属性
    
    # 公共方法:存款
    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            return True
        return False
    
    # 公共方法:取款
    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            return True
        return False
    
    # 公共方法:查询余额
    def get_balance(self):
        return self.__balance
    
    # 私有方法:验证账户
    def __verify_account(self):
        return len(self.__account_no) == 10

# 使用封装
account = BankAccount("1234567890", 1000)
account.deposit(500)        # 调用公共方法
print(account.get_balance())  # 输出:1500
# account.__balance = 9999  # 无法直接访问私有属性

封装的好处

好处 说明
数据保护 防止非法访问
降低耦合 减少模块间依赖
提高复用 便于代码复用
易于维护 便于修改维护

(二)继承

继承是子类继承父类的属性和方法,实现代码重用。

继承概念
#mermaid-svg-XYMyDFFf3C9ID6Iy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XYMyDFFf3C9ID6Iy .error-icon{fill:#552222;}#mermaid-svg-XYMyDFFf3C9ID6Iy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XYMyDFFf3C9ID6Iy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .marker.cross{stroke:#333333;}#mermaid-svg-XYMyDFFf3C9ID6Iy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XYMyDFFf3C9ID6Iy p{margin:0;}#mermaid-svg-XYMyDFFf3C9ID6Iy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster-label text{fill:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster-label span{color:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster-label span p{background-color:transparent;}#mermaid-svg-XYMyDFFf3C9ID6Iy .label text,#mermaid-svg-XYMyDFFf3C9ID6Iy span{fill:#333;color:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .node rect,#mermaid-svg-XYMyDFFf3C9ID6Iy .node circle,#mermaid-svg-XYMyDFFf3C9ID6Iy .node ellipse,#mermaid-svg-XYMyDFFf3C9ID6Iy .node polygon,#mermaid-svg-XYMyDFFf3C9ID6Iy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .rough-node .label text,#mermaid-svg-XYMyDFFf3C9ID6Iy .node .label text,#mermaid-svg-XYMyDFFf3C9ID6Iy .image-shape .label,#mermaid-svg-XYMyDFFf3C9ID6Iy .icon-shape .label{text-anchor:middle;}#mermaid-svg-XYMyDFFf3C9ID6Iy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .rough-node .label,#mermaid-svg-XYMyDFFf3C9ID6Iy .node .label,#mermaid-svg-XYMyDFFf3C9ID6Iy .image-shape .label,#mermaid-svg-XYMyDFFf3C9ID6Iy .icon-shape .label{text-align:center;}#mermaid-svg-XYMyDFFf3C9ID6Iy .node.clickable{cursor:pointer;}#mermaid-svg-XYMyDFFf3C9ID6Iy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .arrowheadPath{fill:#333333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XYMyDFFf3C9ID6Iy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XYMyDFFf3C9ID6Iy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XYMyDFFf3C9ID6Iy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster text{fill:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy .cluster span{color:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XYMyDFFf3C9ID6Iy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XYMyDFFf3C9ID6Iy rect.text{fill:none;stroke-width:0;}#mermaid-svg-XYMyDFFf3C9ID6Iy .icon-shape,#mermaid-svg-XYMyDFFf3C9ID6Iy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XYMyDFFf3C9ID6Iy .icon-shape p,#mermaid-svg-XYMyDFFf3C9ID6Iy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XYMyDFFf3C9ID6Iy .icon-shape .label rect,#mermaid-svg-XYMyDFFf3C9ID6Iy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XYMyDFFf3C9ID6Iy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XYMyDFFf3C9ID6Iy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XYMyDFFf3C9ID6Iy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 父类
子类1
子类2
子类3
继承属性和方法
继承属性和方法
继承属性和方法

继承示例

python 复制代码
# 父类
class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def eat(self):
        print(f"{self.name}在吃东西")
    
    def sleep(self):
        print(f"{self.name}在睡觉")

# 子类:狗
class Dog(Animal):
    def __init__(self, name, age, breed):
        super().__init__(name, age)  # 调用父类初始化
        self.breed = breed           # 子类特有属性
    
    def bark(self):                  # 子类特有方法
        print(f"{self.name}在叫")
    
    def eat(self):                   # 方法重写
        print(f"{self.name}在吃狗粮")

# 子类:猫
class Cat(Animal):
    def __init__(self, name, age, color):
        super().__init__(name, age)
        self.color = color
    
    def meow(self):
        print(f"{self.name}在喵喵叫")

# 使用继承
dog = Dog("旺财", 3, "金毛")
dog.eat()    # 输出:旺财在吃狗粮(重写的方法)
dog.sleep()  # 输出:旺财在睡觉(继承的方法)
dog.bark()   # 输出:旺财在叫(子类方法)

cat = Cat("咪咪", 2, "白色")
cat.eat()    # 输出:咪咪在吃东西(继承的方法)
cat.meow()   # 输出:咪咪在喵喵叫(子类方法)

继承的类型

类型 说明 示例
单继承 一个子类一个父类 Java、C#
多继承 一个子类多个父类 Python、C++
多层继承 继承链 A→B→C
多级继承 多层继承 同上

(三)多态

多态是同一操作作用于不同对象,产生不同的行为。

多态概念
#mermaid-svg-AQhnDD9K9uZBG6AN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AQhnDD9K9uZBG6AN .error-icon{fill:#552222;}#mermaid-svg-AQhnDD9K9uZBG6AN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AQhnDD9K9uZBG6AN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AQhnDD9K9uZBG6AN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AQhnDD9K9uZBG6AN .marker.cross{stroke:#333333;}#mermaid-svg-AQhnDD9K9uZBG6AN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AQhnDD9K9uZBG6AN p{margin:0;}#mermaid-svg-AQhnDD9K9uZBG6AN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster-label text{fill:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster-label span{color:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster-label span p{background-color:transparent;}#mermaid-svg-AQhnDD9K9uZBG6AN .label text,#mermaid-svg-AQhnDD9K9uZBG6AN span{fill:#333;color:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN .node rect,#mermaid-svg-AQhnDD9K9uZBG6AN .node circle,#mermaid-svg-AQhnDD9K9uZBG6AN .node ellipse,#mermaid-svg-AQhnDD9K9uZBG6AN .node polygon,#mermaid-svg-AQhnDD9K9uZBG6AN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AQhnDD9K9uZBG6AN .rough-node .label text,#mermaid-svg-AQhnDD9K9uZBG6AN .node .label text,#mermaid-svg-AQhnDD9K9uZBG6AN .image-shape .label,#mermaid-svg-AQhnDD9K9uZBG6AN .icon-shape .label{text-anchor:middle;}#mermaid-svg-AQhnDD9K9uZBG6AN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AQhnDD9K9uZBG6AN .rough-node .label,#mermaid-svg-AQhnDD9K9uZBG6AN .node .label,#mermaid-svg-AQhnDD9K9uZBG6AN .image-shape .label,#mermaid-svg-AQhnDD9K9uZBG6AN .icon-shape .label{text-align:center;}#mermaid-svg-AQhnDD9K9uZBG6AN .node.clickable{cursor:pointer;}#mermaid-svg-AQhnDD9K9uZBG6AN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AQhnDD9K9uZBG6AN .arrowheadPath{fill:#333333;}#mermaid-svg-AQhnDD9K9uZBG6AN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AQhnDD9K9uZBG6AN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AQhnDD9K9uZBG6AN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AQhnDD9K9uZBG6AN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AQhnDD9K9uZBG6AN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AQhnDD9K9uZBG6AN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster text{fill:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN .cluster span{color:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AQhnDD9K9uZBG6AN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AQhnDD9K9uZBG6AN rect.text{fill:none;stroke-width:0;}#mermaid-svg-AQhnDD9K9uZBG6AN .icon-shape,#mermaid-svg-AQhnDD9K9uZBG6AN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AQhnDD9K9uZBG6AN .icon-shape p,#mermaid-svg-AQhnDD9K9uZBG6AN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AQhnDD9K9uZBG6AN .icon-shape .label rect,#mermaid-svg-AQhnDD9K9uZBG6AN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AQhnDD9K9uZBG6AN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AQhnDD9K9uZBG6AN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AQhnDD9K9uZBG6AN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 多态
编译时多态
运行时多态
方法重载
方法重写
动态绑定

多态示例

python 复制代码
# 父类
class Shape:
    def area(self):
        pass
    
    def display(self):
        print(f"面积是: {self.area()}")

# 子类:圆形
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):  # 方法重写
        return 3.14 * self.radius ** 2

# 子类:矩形
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def area(self):  # 方法重写
        return self.width * self.height

# 子类:三角形
class Triangle(Shape):
    def __init__(self, base, height):
        self.base = base
        self.height = height
    
    def area(self):  # 方法重写
        return 0.5 * self.base * self.height

# 多态使用
shapes = [
    Circle(5),
    Rectangle(4, 6),
    Triangle(3, 4)
]

# 同一方法,不同行为
for shape in shapes:
    shape.display()  # 多态调用

# 输出:
# 面积是: 78.5
# 面积是: 24
# 面积是: 6.0

多态的好处

好处 说明
代码复用 减少重复代码
扩展性好 易于添加新类
接口统一 统一调用接口
灵活性高 运行时动态绑定

📊 四、面向对象的设计原则

(一)SOLID原则

SOLID原则是面向对象设计的五大原则。
#mermaid-svg-Vp2rUeey1Gvk8vBi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Vp2rUeey1Gvk8vBi .error-icon{fill:#552222;}#mermaid-svg-Vp2rUeey1Gvk8vBi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Vp2rUeey1Gvk8vBi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .marker.cross{stroke:#333333;}#mermaid-svg-Vp2rUeey1Gvk8vBi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Vp2rUeey1Gvk8vBi p{margin:0;}#mermaid-svg-Vp2rUeey1Gvk8vBi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster-label text{fill:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster-label span{color:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster-label span p{background-color:transparent;}#mermaid-svg-Vp2rUeey1Gvk8vBi .label text,#mermaid-svg-Vp2rUeey1Gvk8vBi span{fill:#333;color:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .node rect,#mermaid-svg-Vp2rUeey1Gvk8vBi .node circle,#mermaid-svg-Vp2rUeey1Gvk8vBi .node ellipse,#mermaid-svg-Vp2rUeey1Gvk8vBi .node polygon,#mermaid-svg-Vp2rUeey1Gvk8vBi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .rough-node .label text,#mermaid-svg-Vp2rUeey1Gvk8vBi .node .label text,#mermaid-svg-Vp2rUeey1Gvk8vBi .image-shape .label,#mermaid-svg-Vp2rUeey1Gvk8vBi .icon-shape .label{text-anchor:middle;}#mermaid-svg-Vp2rUeey1Gvk8vBi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .rough-node .label,#mermaid-svg-Vp2rUeey1Gvk8vBi .node .label,#mermaid-svg-Vp2rUeey1Gvk8vBi .image-shape .label,#mermaid-svg-Vp2rUeey1Gvk8vBi .icon-shape .label{text-align:center;}#mermaid-svg-Vp2rUeey1Gvk8vBi .node.clickable{cursor:pointer;}#mermaid-svg-Vp2rUeey1Gvk8vBi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .arrowheadPath{fill:#333333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Vp2rUeey1Gvk8vBi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Vp2rUeey1Gvk8vBi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Vp2rUeey1Gvk8vBi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster text{fill:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi .cluster span{color:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Vp2rUeey1Gvk8vBi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Vp2rUeey1Gvk8vBi rect.text{fill:none;stroke-width:0;}#mermaid-svg-Vp2rUeey1Gvk8vBi .icon-shape,#mermaid-svg-Vp2rUeey1Gvk8vBi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Vp2rUeey1Gvk8vBi .icon-shape p,#mermaid-svg-Vp2rUeey1Gvk8vBi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Vp2rUeey1Gvk8vBi .icon-shape .label rect,#mermaid-svg-Vp2rUeey1Gvk8vBi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Vp2rUeey1Gvk8vBi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Vp2rUeey1Gvk8vBi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Vp2rUeey1Gvk8vBi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} SOLID原则
单一职责原则
开闭原则
里氏替换原则
接口隔离原则
依赖倒置原则

原则详解

原则 英文 说明
单一职责原则 SRP 一个类只有一个职责
开闭原则 OCP 对扩展开放,对修改关闭
里氏替换原则 LSP 子类可以替换父类
接口隔离原则 ISP 使用多个专门接口
依赖倒置原则 DIP 依赖抽象而非具体

(二)单一职责原则

单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因。

示例

python 复制代码
# 违反单一职责原则
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email
    
    def save_to_db(self):
        # 保存用户信息
        pass
    
    def send_email(self):
        # 发送邮件
        pass

# 遵循单一职责原则
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

class UserRepository:
    def save(self, user):
        # 保存用户信息
        pass

class EmailService:
    def send(self, user):
        # 发送邮件
        pass

(三)开闭原则

开闭原则(Open-Closed Principle, OCP):软件实体应该对扩展开放,对修改关闭。

示例

python 复制代码
# 违反开闭原则
class Discount:
    def calculate(self, price, type):
        if type == "VIP":
            return price * 0.8
        elif type == "NORMAL":
            return price * 0.9
        return price

# 遵循开闭原则
class Discount:
    def calculate(self, price):
        return price

class VIPDiscount(Discount):
    def calculate(self, price):
        return price * 0.8

class NormalDiscount(Discount):
    def calculate(self, price):
        return price * 0.9

# 添加新折扣类型不需要修改原有代码
class SVIPDiscount(Discount):
    def calculate(self, price):
        return price * 0.7

(四)里氏替换原则

里氏替换原则(Liskov Substitution Principle, LSP):子类应该能够替换父类。

示例

python 复制代码
# 违反里氏替换原则
class Rectangle:
    def set_width(self, width):
        self.width = width
    
    def set_height(self, height):
        self.height = height
    
    def get_area(self):
        return self.width * self.height

class Square(Rectangle):
    def set_width(self, width):
        self.width = width
        self.height = width  # 问题:改变了父类行为
    
    def set_height(self, height):
        self.width = height
        self.height = height

# 遵循里氏替换原则
class Shape:
    def get_area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def get_area(self):
        return self.width * self.height

class Square(Shape):
    def __init__(self, side):
        self.side = side
    
    def get_area(self):
        return self.side ** 2

(五)接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP):客户端不应该依赖它不需要的接口。

示例

python 复制代码
# 违反接口隔离原则
class Worker:
    def work(self):
        pass
    
    def eat(self):
        pass

class Robot(Worker):
    def work(self):
        pass
    
    def eat(self):
        pass  # 机器人不需要吃饭

# 遵循接口隔离原则
class Workable:
    def work(self):
        pass

class Eatable:
    def eat(self):
        pass

class HumanWorker(Workable, Eatable):
    def work(self):
        pass
    
    def eat(self):
        pass

class RobotWorker(Workable):
    def work(self):
        pass

(六)依赖倒置原则

依赖倒置原则(Dependency Inversion Principle, DIP):高层模块不应该依赖低层模块,两者都应该依赖抽象。

示例

python 复制代码
# 违反依赖倒置原则
class BusinessLogic:
    def __init__(self):
        self.database = MySQLDatabase()  # 依赖具体实现
    
    def process(self):
        self.database.query()

class MySQLDatabase:
    def query(self):
        pass

# 遵循依赖倒置原则
class Database:
    def query(self):
        pass

class MySQLDatabase(Database):
    def query(self):
        pass

class PostgreSQLDatabase(Database):
    def query(self):
        pass

class BusinessLogic:
    def __init__(self, database: Database):  # 依赖抽象
        self.database = database
    
    def process(self):
        self.database.query()

💡 五、面向对象的开发方法

(一)面向对象分析(OOA)

面向对象分析

分析系统需求,建立对象模型。

分析步骤
#mermaid-svg-cHYpBMbz6MaTCBzo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cHYpBMbz6MaTCBzo .error-icon{fill:#552222;}#mermaid-svg-cHYpBMbz6MaTCBzo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cHYpBMbz6MaTCBzo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cHYpBMbz6MaTCBzo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cHYpBMbz6MaTCBzo .marker.cross{stroke:#333333;}#mermaid-svg-cHYpBMbz6MaTCBzo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cHYpBMbz6MaTCBzo p{margin:0;}#mermaid-svg-cHYpBMbz6MaTCBzo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster-label text{fill:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster-label span{color:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster-label span p{background-color:transparent;}#mermaid-svg-cHYpBMbz6MaTCBzo .label text,#mermaid-svg-cHYpBMbz6MaTCBzo span{fill:#333;color:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo .node rect,#mermaid-svg-cHYpBMbz6MaTCBzo .node circle,#mermaid-svg-cHYpBMbz6MaTCBzo .node ellipse,#mermaid-svg-cHYpBMbz6MaTCBzo .node polygon,#mermaid-svg-cHYpBMbz6MaTCBzo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-cHYpBMbz6MaTCBzo .rough-node .label text,#mermaid-svg-cHYpBMbz6MaTCBzo .node .label text,#mermaid-svg-cHYpBMbz6MaTCBzo .image-shape .label,#mermaid-svg-cHYpBMbz6MaTCBzo .icon-shape .label{text-anchor:middle;}#mermaid-svg-cHYpBMbz6MaTCBzo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-cHYpBMbz6MaTCBzo .rough-node .label,#mermaid-svg-cHYpBMbz6MaTCBzo .node .label,#mermaid-svg-cHYpBMbz6MaTCBzo .image-shape .label,#mermaid-svg-cHYpBMbz6MaTCBzo .icon-shape .label{text-align:center;}#mermaid-svg-cHYpBMbz6MaTCBzo .node.clickable{cursor:pointer;}#mermaid-svg-cHYpBMbz6MaTCBzo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-cHYpBMbz6MaTCBzo .arrowheadPath{fill:#333333;}#mermaid-svg-cHYpBMbz6MaTCBzo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-cHYpBMbz6MaTCBzo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-cHYpBMbz6MaTCBzo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cHYpBMbz6MaTCBzo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-cHYpBMbz6MaTCBzo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cHYpBMbz6MaTCBzo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster text{fill:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo .cluster span{color:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-cHYpBMbz6MaTCBzo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-cHYpBMbz6MaTCBzo rect.text{fill:none;stroke-width:0;}#mermaid-svg-cHYpBMbz6MaTCBzo .icon-shape,#mermaid-svg-cHYpBMbz6MaTCBzo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-cHYpBMbz6MaTCBzo .icon-shape p,#mermaid-svg-cHYpBMbz6MaTCBzo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-cHYpBMbz6MaTCBzo .icon-shape .label rect,#mermaid-svg-cHYpBMbz6MaTCBzo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-cHYpBMbz6MaTCBzo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-cHYpBMbz6MaTCBzo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-cHYpBMbz6MaTCBzo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 需求分析
识别对象
识别类
识别关系
建立模型

(二)面向对象设计(OOD)

面向对象设计

设计系统结构,建立设计模型。

设计内容

内容 说明
类设计 设计类及其关系
接口设计 设计类接口
架构设计 设计系统架构

(三)面向对象编程(OOP)

面向对象编程

使用面向对象语言实现系统。

编程特点

特点 说明
封装 封装数据和操作
继承 实现代码重用
多态 支持动态绑定

(四)面向对象测试(OOT)

面向对象测试

测试面向对象系统。

测试内容

内容 说明
类测试 测试单个类
集成测试 测试类间交互
系统测试 测试整个系统

📋 六、UML建模

(一)UML概述

UML(Unified Modeling Language)是统一的建模语言,用于可视化、规格化、构建和记录软件系统的制品。

UML图类型

图类型 说明 用途
用例图 描述系统功能 需求分析
类图 描述类及其关系 结构设计
对象图 描述对象实例 静态结构
顺序图 描述对象交互顺序 动态行为
活动图 描述活动流程 业务流程
状态图 描述对象状态 状态变化

(二)类图

类图描述类及其关系。

类图示例
#mermaid-svg-sYy2RVdhEIUWjGC0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sYy2RVdhEIUWjGC0 .error-icon{fill:#552222;}#mermaid-svg-sYy2RVdhEIUWjGC0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sYy2RVdhEIUWjGC0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .marker.cross{stroke:#333333;}#mermaid-svg-sYy2RVdhEIUWjGC0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sYy2RVdhEIUWjGC0 p{margin:0;}#mermaid-svg-sYy2RVdhEIUWjGC0 g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-sYy2RVdhEIUWjGC0 g.classGroup text .title{font-weight:bolder;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster-label text{fill:#333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster-label span{color:#333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster-label span p{background-color:transparent;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster text{fill:#333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .cluster span{color:#333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .nodeLabel,#mermaid-svg-sYy2RVdhEIUWjGC0 .edgeLabel{color:#131300;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-sYy2RVdhEIUWjGC0 .label text{fill:#131300;}#mermaid-svg-sYy2RVdhEIUWjGC0 .labelBkg{background:#ECECFF;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-sYy2RVdhEIUWjGC0 .classTitle{font-weight:bolder;}#mermaid-svg-sYy2RVdhEIUWjGC0 .node rect,#mermaid-svg-sYy2RVdhEIUWjGC0 .node circle,#mermaid-svg-sYy2RVdhEIUWjGC0 .node ellipse,#mermaid-svg-sYy2RVdhEIUWjGC0 .node polygon,#mermaid-svg-sYy2RVdhEIUWjGC0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sYy2RVdhEIUWjGC0 .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 g.clickable{cursor:pointer;}#mermaid-svg-sYy2RVdhEIUWjGC0 g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-sYy2RVdhEIUWjGC0 g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-sYy2RVdhEIUWjGC0 .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-sYy2RVdhEIUWjGC0 .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-sYy2RVdhEIUWjGC0 .dashed-line{stroke-dasharray:3;}#mermaid-svg-sYy2RVdhEIUWjGC0 .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-sYy2RVdhEIUWjGC0 #compositionStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #compositionEnd,#mermaid-svg-sYy2RVdhEIUWjGC0 .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #dependencyStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #dependencyStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #extensionStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #extensionEnd,#mermaid-svg-sYy2RVdhEIUWjGC0 .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #aggregationStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #aggregationEnd,#mermaid-svg-sYy2RVdhEIUWjGC0 .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #lollipopStart,#mermaid-svg-sYy2RVdhEIUWjGC0 .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 #lollipopEnd,#mermaid-svg-sYy2RVdhEIUWjGC0 .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sYy2RVdhEIUWjGC0 .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-sYy2RVdhEIUWjGC0 .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sYy2RVdhEIUWjGC0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sYy2RVdhEIUWjGC0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sYy2RVdhEIUWjGC0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Animal
+String name
+int age
+eat()
+sleep()
Dog
+String breed
+bark()
Cat
+String color
+meow()

(三)用例图

用例图描述系统功能。

用例图示例
#mermaid-svg-i78Bbj4Yz34jRhNr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-i78Bbj4Yz34jRhNr .error-icon{fill:#552222;}#mermaid-svg-i78Bbj4Yz34jRhNr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-i78Bbj4Yz34jRhNr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-i78Bbj4Yz34jRhNr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-i78Bbj4Yz34jRhNr .marker.cross{stroke:#333333;}#mermaid-svg-i78Bbj4Yz34jRhNr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-i78Bbj4Yz34jRhNr p{margin:0;}#mermaid-svg-i78Bbj4Yz34jRhNr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster-label text{fill:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster-label span{color:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster-label span p{background-color:transparent;}#mermaid-svg-i78Bbj4Yz34jRhNr .label text,#mermaid-svg-i78Bbj4Yz34jRhNr span{fill:#333;color:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr .node rect,#mermaid-svg-i78Bbj4Yz34jRhNr .node circle,#mermaid-svg-i78Bbj4Yz34jRhNr .node ellipse,#mermaid-svg-i78Bbj4Yz34jRhNr .node polygon,#mermaid-svg-i78Bbj4Yz34jRhNr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-i78Bbj4Yz34jRhNr .rough-node .label text,#mermaid-svg-i78Bbj4Yz34jRhNr .node .label text,#mermaid-svg-i78Bbj4Yz34jRhNr .image-shape .label,#mermaid-svg-i78Bbj4Yz34jRhNr .icon-shape .label{text-anchor:middle;}#mermaid-svg-i78Bbj4Yz34jRhNr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-i78Bbj4Yz34jRhNr .rough-node .label,#mermaid-svg-i78Bbj4Yz34jRhNr .node .label,#mermaid-svg-i78Bbj4Yz34jRhNr .image-shape .label,#mermaid-svg-i78Bbj4Yz34jRhNr .icon-shape .label{text-align:center;}#mermaid-svg-i78Bbj4Yz34jRhNr .node.clickable{cursor:pointer;}#mermaid-svg-i78Bbj4Yz34jRhNr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-i78Bbj4Yz34jRhNr .arrowheadPath{fill:#333333;}#mermaid-svg-i78Bbj4Yz34jRhNr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-i78Bbj4Yz34jRhNr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-i78Bbj4Yz34jRhNr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-i78Bbj4Yz34jRhNr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-i78Bbj4Yz34jRhNr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-i78Bbj4Yz34jRhNr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster text{fill:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr .cluster span{color:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-i78Bbj4Yz34jRhNr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-i78Bbj4Yz34jRhNr rect.text{fill:none;stroke-width:0;}#mermaid-svg-i78Bbj4Yz34jRhNr .icon-shape,#mermaid-svg-i78Bbj4Yz34jRhNr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-i78Bbj4Yz34jRhNr .icon-shape p,#mermaid-svg-i78Bbj4Yz34jRhNr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-i78Bbj4Yz34jRhNr .icon-shape .label rect,#mermaid-svg-i78Bbj4Yz34jRhNr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-i78Bbj4Yz34jRhNr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-i78Bbj4Yz34jRhNr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-i78Bbj4Yz34jRhNr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户
登录
浏览商品
下单购买
管理员
管理商品
管理订单

(四)顺序图

顺序图描述对象交互顺序。

顺序图示例
数据库 服务器 客户端 数据库 服务器 客户端 #mermaid-svg-vSHmPAIrAZRM9dOE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vSHmPAIrAZRM9dOE .error-icon{fill:#552222;}#mermaid-svg-vSHmPAIrAZRM9dOE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vSHmPAIrAZRM9dOE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vSHmPAIrAZRM9dOE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vSHmPAIrAZRM9dOE .marker.cross{stroke:#333333;}#mermaid-svg-vSHmPAIrAZRM9dOE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vSHmPAIrAZRM9dOE p{margin:0;}#mermaid-svg-vSHmPAIrAZRM9dOE .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-vSHmPAIrAZRM9dOE text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-vSHmPAIrAZRM9dOE .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-vSHmPAIrAZRM9dOE .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-vSHmPAIrAZRM9dOE #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-vSHmPAIrAZRM9dOE .sequenceNumber{fill:white;}#mermaid-svg-vSHmPAIrAZRM9dOE #sequencenumber{fill:#333;}#mermaid-svg-vSHmPAIrAZRM9dOE #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-vSHmPAIrAZRM9dOE .messageText{fill:#333;stroke:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-vSHmPAIrAZRM9dOE .labelText,#mermaid-svg-vSHmPAIrAZRM9dOE .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .loopText,#mermaid-svg-vSHmPAIrAZRM9dOE .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-vSHmPAIrAZRM9dOE .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-vSHmPAIrAZRM9dOE .noteText,#mermaid-svg-vSHmPAIrAZRM9dOE .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-vSHmPAIrAZRM9dOE .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-vSHmPAIrAZRM9dOE .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-vSHmPAIrAZRM9dOE .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-vSHmPAIrAZRM9dOE .actorPopupMenu{position:absolute;}#mermaid-svg-vSHmPAIrAZRM9dOE .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-vSHmPAIrAZRM9dOE .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-vSHmPAIrAZRM9dOE .actor-man circle,#mermaid-svg-vSHmPAIrAZRM9dOE line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-vSHmPAIrAZRM9dOE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 登录请求 查询用户 返回用户信息 登录结果

📝 七、面向对象技术的优缺点

(一)优点

优点

优点 说明
可重用性 通过继承实现代码重用
可扩展性 易于添加新功能
可维护性 模块化设计,易于维护
可理解性 符合人类思维方式
灵活性 多态提供灵活性

(二)缺点

缺点

缺点 说明
学习成本高 需要学习面向对象思想
设计复杂 需要良好的设计能力
性能开销 可能影响性能
过度设计 可能过度设计

(三)适用场景

适用场景

场景 说明
复杂系统 结构复杂的系统
大型系统 规模较大的系统
需要重用 需要代码重用的系统
长期维护 需要长期维护的系统

📝 总结

面向对象技术是现代软件开发的核心范式。

🎯 基本概念

  • 对象:属性和方法的封装体
  • 类:对象的模板
  • 消息:对象之间的交互方式

📦 三大特性

  • 封装:数据和操作封装,隐藏内部细节
  • 继承:子类继承父类,实现代码重用
  • 多态:同一操作作用于不同对象,产生不同行为

🌐 设计原则(SOLID):

  • 单一职责原则(SRP):一个类只有一个职责
  • 开闭原则(OCP):对扩展开放,对修改关闭
  • 里氏替换原则(LSP):子类可以替换父类
  • 接口隔离原则(ISP):使用多个专门接口
  • 依赖倒置原则(DIP):依赖抽象而非具体

💡 开发方法

  • 面向对象分析(OOA):分析需求,建立对象模型
  • 面向对象设计(OOD):设计系统结构
  • 面向对象编程(OOP):实现系统
  • 面向对象测试(OOT):测试系统

📋 UML建模:类图、用例图、顺序图、活动图、状态图等。


核心启示:面向对象技术是现代软件开发的主流范式,"万物皆对象"是其核心思想。通过封装、继承、多态三大特性,面向对象技术提供了更自然、更灵活的软件设计和实现方式。在实际工作中,我们需要注意:第一,深入理解面向对象的基本概念和特性;第二,遵循SOLID设计原则,提高代码质量;第三,合理使用UML进行建模和沟通;第四,避免过度设计,保持简单;第五,结合项目实际情况,选择合适的设计方法。面向对象技术不仅是一种编程技术,更是一种思维方式。掌握面向对象技术,能够帮助我们更好地理解和解决复杂的软件问题,构建出高质量、可维护的软件系统。记住:好的面向对象设计是软件成功的关键。


相关推荐
嘟哩DuliDuli9 小时前
AI 短剧生成为什么要有角色库、场景库和镜头卡
android·人工智能·安全·ai·软件工程
老郑聊AI业财智造10 小时前
Qwen技术架构与源码深度剖析
人工智能·语言模型·架构·系统架构·软件工程
老郑聊AI业财智造14 小时前
DeepSeek技术架构与源码分析
人工智能·语言模型·架构·系统架构·软件工程
梁辰兴14 小时前
软件工程:面向对象分析的基本任务与分析过程
软件工程·分析工具·面向对象分析·分析方法·梁辰兴·基本任务·分析过程
@insist12316 小时前
系统集成项目管理工程师-启动过程组概述与制定项目章程
软件工程·软考·系统集成项目管理工程师·软考中项·软件水平考试
千维百策6662 天前
AI 软件开发中的人与智能体:软件工程循环、人在环路中与框架工程
大数据·人工智能·软件工程
老郑聊AI业财智造2 天前
TOGAF、DDD与微服务:软件架构的多维透视
spring boot·spring cloud·微服务·金融·架构·软件工程·制造
m0_547486663 天前
《软件工程与实践》 全套PPT课件2026
软件工程
梁辰兴3 天前
软件工程:类和实例
软件工程·实例··类的定义·梁辰兴·类的组成·类的类型