软件工程:面向对象技术

📌目录



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

面向对象技术(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进行建模和沟通;第四,避免过度设计,保持简单;第五,结合项目实际情况,选择合适的设计方法。面向对象技术不仅是一种编程技术,更是一种思维方式。掌握面向对象技术,能够帮助我们更好地理解和解决复杂的软件问题,构建出高质量、可维护的软件系统。记住:好的面向对象设计是软件成功的关键。


相关推荐
rolt1 小时前
智能机床-06 机械 ISO 23704-4-2026-用UML表示的行业标准
软件工程·产品经理·架构师·uml
️公子4 小时前
Claude Code 2.1.289 补上四个 deny 缺口:Agent 权限匹配器的规范化、分层裁决与回归语料
软件工程·ai agent·权限控制·claude code·安全工程
对讲机数码科普2 天前
数字集群对讲工程全流程拆解:DMR/ePDT 制式选型、组网落地与运维实战
运维·软件工程
硅谷秋水2 天前
EmbodiedSWE:面向长时程灵巧机器人的编程智能体
人工智能·机器学习·语言模型·机器人·软件工程
郝学胜-神的一滴2 天前
C++ Templates 03:手写一个Stack看透模板核心机制
开发语言·c++·产品运营·软件工程·产品经理
rolt2 天前
05 医学 ISO 13940-用UML表示的行业标准,健康信息学 — 支持照护连续性的概念体系
软件工程·架构师·uml
️公子2 天前
决策模型开战:Jev / Decisions API / Strands Decider 的 ClosedSet、置信度闸门与混合 Agent
人工智能·大模型·软件工程·agent·决策模型
蜗牛互联网3 天前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
rolt3 天前
3GPP-5G-用UML表示的行业标准-04电信移动通信
软件工程·ddd·uml·ontology
LEO的MATRIX4 天前
本体实施指南
人工智能·软件工程