📌目录
- [⚖️ 面向对象技术:现代软件设计的核心范式](#⚖️ 面向对象技术:现代软件设计的核心范式)
-
- [🎯 一、面向对象技术概述](#🎯 一、面向对象技术概述)
- [📦 二、面向对象的基本概念](#📦 二、面向对象的基本概念)
- [🌐 三、面向对象的三大特性](#🌐 三、面向对象的三大特性)
- [📊 四、面向对象的设计原则](#📊 四、面向对象的设计原则)
- [💡 五、面向对象的开发方法](#💡 五、面向对象的开发方法)
- [📋 六、UML建模](#📋 六、UML建模)
- [📝 七、面向对象技术的优缺点](#📝 七、面向对象技术的优缺点)
- [📝 总结](#📝 总结)

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