小南伴你学-応用情報-第8期:系统开发之面向对象

什么,你的对象其实不是人类?

对于已经学习过面向对象编程的人来说,面向对象的思想还是挺容易理解的:类实例化后之后是对象,子类可以继承父类的属性和方法,而通过调用不同对象的方法可以实现各自特定的功能。
然而,学习编程本身非常耗时,因此我们可以通过比喻来快速理解面向对象的概念。
一些有趣的事情:
从文化和语言的角度来看
  • 英语圈文化
    • 人们普遍具有较强的边界意识。
    • 语言上也体现出这种边界感,例如交流中会区分 类(class)用复数,对象(object)用单数,以明确抽象集合与具体个体。
  • 中文文化
    • 边界意识相对较弱。
    • 语言上也不明确的说是类还是对象。
因此,可能在一定程度上,英语好的人会更容易理解面向对象的概念,因为英语本身就强化了类与对象、集合与个体的边界意识。

学前小菜

notion image

引入

比如人类只真正经验过“有”,对“无”的想象,本质上仍然是对“有”的变形。
比如宇宙的尽头、时间的起点、完全的虚无……都是从“有”的认知延伸出来的抽象概念。
面向对象也是一种方法论:它让计算机理解人类的事物和事件。要模拟现实,必须先抽象成类(Class),再生成对象(Object)去操作。
  • 创造新的事物,也同样依赖已有认知的抽象。
  • 所以,人类特别喜欢搞抽象——搞抽象本身就是创造力的体现。

Thing time

Video preview
Video preview
为什么?
 
张三丰让张无忌“忘掉招式”,本质上是在把“具体实现”抽象成“内在原理”。
notion image
关于AI的知识扩展:
ドロップアウト【dropout】
notion image
notion image
 

在此前内容中,我们已经学习了面向过程与面向数据两种程序设计思想。
接下来,引入面向对象:
面向过程 + 面向数据 = 面向对象
面向对象思想认为,现实世界中的事物、概念和事件可以抽象为类(Class),再通过类实例化生成对象(Object),用以模拟其行为和状态。

面向对象,其实就是字面意思

先用日常语言来理解:
“我有对象了。”
1️⃣ “有”的意思
  • 并不是组成关系(part-of)——对象不是你身体的一部分
  • 正确理解是建立关系 / 关联(Association)
  • 对象是独立的实体,可以与你互动,但生命周期不完全依赖你
💡 OOP 对应概念:Association(关联)
2️⃣ 对象的意思
  • 并不是“我养了一条狗”那样的依赖关系
  • 对方是独立存在的
  • 可以与我互动 → 对应 方法调用(Method Call)
  • 拥有自己的状态,信息,隐私 → 对应 属性(Attribute)
  • 会一些技能,可以提供点什么 → 对应 方法(Method)
  • 并非凭空出现,而是从人类(DNA 实例化)而来的 → 对应 类(Class)
  • 人类也不是凭空出现,而是从动物类继承而来 → 对应 父类(Superclass)

严格区分对象与类

  • 口语中,你可能说“我对象是人类”,但严格来说:
    • 我对象是人类的实例化实体
    • 类是定义该实体属性和方法的模板
    • 父类是上级模板,被子类继承
用面向对象的语言可以总结为:

知识check
人类属于动物叫继承 人类是从动物继承而来 这个叫抽象化
我女朋友属于人类叫实例化 对象是从人类实例化而来,叫具体化
油门属于汽车,我的上半身属于我 叫part of 关系,上半身是我的一部分,油门是汽车的一部分
我的女朋友(另一半)属于我 叫调用关系 可以互相提供某些价值
你属于你爸妈 说明来源
顾客的公司名,顾客的家庭住址,电话属于顾客,只是在说明所有权
虽然都是从属关系,
但是是不一样的概念哈!
notion image
notion image
抽象化是从具体事物中提取共通特征以形成模型的过程,
其中,泛化是其典型形式之一。
还是不懂?
notion image
 

面向对象的核心特性

1️⃣ 封装(Encapsulation)カプセル化

  • 定义:把对象的属性(数据)和方法(功能)封装在一起,对外只暴露必要接口。
  • 图中体现:
    • “我的对象”有属性:姓名、年龄、体重、技能列表
    • 方法:听()、读()、看()、说()等等
    • 外部对象(比如“我”)通过调用方法获取信息或行为,比如调用我的对象.说("你在想什么呢")会返回"好饿啊!"
    • 但是我不能直接查看其隐私,比如她的前男友列表

2️⃣ 继承(Inheritance)

  • 定义:子类自动拥有父类的属性和方法,可以复用或扩展。
  • 图中体现:
    • 动物类 是父类,人类 和 狗类 是子类
    • 动物类有进食()、呼吸()、移动()、繁殖(),人类和狗类自动拥有这些方法

3️⃣ 多态(Polymorphism)

  • 定义:同一个方法在不同对象上可以有不同表现形式。
  • 图中体现:
    • 吠叫() 方法:
      • 小黑(狗类)调用 → 返回“汪汪”
      • 其他狗对象调用 → 可以返回不同叫声
    • 看() 方法:
      • 我的对象.看("我家猫会后空翻”)会返回 你家猫描好厉害哦!
      • 大哥的对象.看("我家猫会后空翻”)会返回 你别忘了我可是你大哥的女人哦!

4️⃣ 抽象(Abstraction)

  • 定义:只关注对象的外部行为和特征,不关心内部实现细节。
  • 图中体现:
    • “我”调用“我的对象”的方法 读("莎士比亚名言")
    • 不需要知道内部怎么读取文本,只关心返回结果
  • 比喻:你按下咖啡机按钮,不关心水如何加热、咖啡如何滴落,只关心最后得到咖啡。

5️⃣ 对象的独立性

  • 定义:每个对象都是独立的实体,有自己的属性和状态。
  • 图中体现:
    • “我”、“我的对象”、“小黑”各自有独立属性:
      • 我:年龄=19、体重=60kg
      • 我的对象:年龄=18、体重=50kg、技能=摄影、跳舞,前男友列表=小张,小王
      • 小黑:年龄=1、体重=5kg、叫声=汪汪
  • 比喻:每个人、每只狗都是独立的个体,有自己的信息和行为能力。

💡 总结表格

特性
定义
图中例子
比喻
封装
属性和方法捆绑,对外只暴露接口
我的对象的方法:拍照()、读()、说话()
手机可以打电话拍照,但内部芯片封装了
继承
子类继承父类属性和方法
人类和狗类继承动物类的进食()、呼吸()
狗和猫都是动物,都会吃饭、呼吸
多态
同方法不同对象表现不同
吠叫() → 小黑:汪汪;说话() → 我的对象:“你在想什么呢”
每个人说“你好”,声音和语气不同
抽象
只关心行为,不关心实现
读() 方法 → 返回莎士比亚名言
按咖啡机按钮得到咖啡,不管内部怎么滴落
独立性
每个对象有自己状态
我、我的对象、小黑各自属性不同
每个人、每只宠物都是独立个体
知识check
notion image
notion image
notion image
notion image
notion image
notion image
notion image
  • 父类声明方法 → “我告诉你能做什么”
  • 子类实现方法 → “我实际怎么做”
  • 动态绑定 → “调用方法的时候,看我实际是什么子类,再执行对应动作”
  • 如果子类没有覆盖父类方法 → 就执行父类的方法
notion image

UML2.0

UML(UnifiedModelingLanguage)统一建模语言,是面向对象软件的标准化建模语言。由于面向对象软件开发需要经过OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象编程)三个阶段,每个阶段都需要统一的符号设计描述和交流,而UML就是这种统一的符号表示。
カテゴリ
UML 図
簡単説明
構造図
クラス図(Class Diagram)
クラスやインターフェース、関係を静的に表現
ㅤ
オブジェクト図(Object Diagram)
ある時点でのオブジェクトと属性の状態を表現
ㅤ
パッケージ図(Package Diagram)
システム要素のグループ化と依存関係を表現
ㅤ
コンポーネント図(Component Diagram)
システムコンポーネントとインターフェースの依存関係
ㅤ
配置図(Deployment Diagram)
システムのハードウェアノードと配置関係を表現
ㅤ
複合構造図(Composite Structure Diagram)
オブジェクト内部構造と接続関係を表現
振る舞い図
ユースケース図(Use Case Diagram)
システム機能とユーザーとの相互作用を表現
ㅤ
アクティビティ図(Activity Diagram)
業務フローや処理の流れを表現
ㅤ
ステートマシン図(State Machine Diagram)
オブジェクトの状態と状態遷移を表現
相互作用図
シーケンス図(Sequence Diagram)
オブジェクト間のメッセージの時間順序を表現
ㅤ
コミュニケーション図(Communication Diagram)
オブジェクト間のメッセージ関係を表現
ㅤ
タイミング図(Timing Diagram)
オブジェクトの状態変化を時間軸で表現
ㅤ
相互作用概要図(Interaction Overview Diagram)
活動図とシーケンス図を組み合わせて交互作用フローを表現
太多了,我们只具体学习6种

クラス図(Class Diagram)

项目
内容
目的
将软件或系统中的“类”及其关系(继承、关联、依赖等)可视化。用于设计阶段理解系统结构和共享设计规范。
主要元素
- 类(Class):包含属性(数据)和操作(方法) - 属性(Attribute):类所持有的数据 - 操作(Operation / Method):类可以执行的功能 - 关联(Association):类与类之间的联系 - 继承(Generalization):父类与子类的关系 - 依赖(Dependency):一个类受另一个类影响的关系 - 多重性(Multiplicity):1对多、多对多等关系
特点
- 面向对象设计的基础- 明确类之间的关系- 表示系统的静态结构- UML标准图,广泛使用
使用示例
- 系统设计文档中说明结构- 面向对象程序的设计- 理解和重构现有系统- 数据库设计(整理实体和属性)
notion image
notion image

オブジェクト図(Object Diagram)

notion image

ユースケース図(Use Case Diagram)

項目
説明
目的
システムの機能と利用者(アクター)の相互作用を可視化
主な要素
- アクター(Actor):システム外部の人・他システム - ユースケース(Use Case):システムの提供機能 - 関係(Relationships):関連(Association)、包含(Include)、拡張(Extend)
特徴
- 利用者視点でシステムの機能を整理できる- システム境界を明確にできる- 技術実装に依存せず、抽象的に表現可能
使用例
- ログイン機能の整理- ECサイトでの購入フローの把握- 図書館システムの貸出・返却機能整理
notion image
notion image
notion image

アクティビティ図(Activity Diagram)

项目
内容
目的
表示系统或业务流程中的活动(动作)及其顺序,强调控制流和并发流。用于分析业务逻辑、工作流程或用例执行过程。
主要元素
- 活动(Activity / Action):具体执行的操作或任务 - 初始节点(Initial Node):流程开始点 - 结束节点(Final Node):流程结束点 - 控制流(Control Flow):活动之间的顺序连接 - 分支(Decision / Merge):根据条件选择路径 - 并行/合并(Fork / Join):表示并发执行和同步 - 对象流(Object Flow):数据在活动间流动 - 泳道(Swimlane):表示责任分区(谁执行)
特点
- 强调活动顺序和流程逻辑- 可以表示条件分支和并发- 用于业务建模、用例流程描述和系统内部流程- UML标准图,常用于需求分析和系统设计
使用示例
- 用户登录、购物下单等业务流程描述- 系统内部操作流程- 工作流管理和审批流程- 用例执行的详细流程建模
notion image
notion image

ステートマシン図(State Machine Diagram)

项目
内容
目的
描述对象在生命周期中可能的状态及状态之间的转换,强调事件触发和状态变化。用于建模对象行为和动态特性。
主要元素
- 状态(State):对象所处的某种条件或阶段- 初始状态(Initial State):对象生命周期开始状态- 结束状态(Final State):对象生命周期结束状态- 转换(Transition):从一个状态到另一个状态的移动,由事件触发- 事件(Event):引发状态变化的外部或内部事件- 动作(Action / Activity):状态进入、退出或转换时执行的操作- 条件/守卫(Guard):转换发生的条件限制
特点
- 描述对象的动态行为- 强调事件驱动的状态变化- 可以捕捉复杂生命周期和异常处理- UML标准图,适用于面向对象设计和嵌入式系统建模
使用示例
- 订单状态管理(创建 → 支付 → 发货 → 完成)- 自动售货机状态(等待投币 → 投币完成 → 选择商品 → 出货)- 登录状态管理(未登录 → 登录中 → 已登录 → 登出)- 设备控制系统(开启 → 运行 → 故障 → 关闭)
notion image

シーケンス図(Sequence Diagram)

项目
内容
目的
描述对象之间随时间发生的消息交互,显示系统运行时的动态行为。
主要元素
- 对象/角色(Object / Actor):参与交互的实体- 生命线(Lifeline):对象存在的时间轴- 消息(Message):对象之间传递的信息或调用- 激活条(Activation / Execution):对象执行操作的时间段- 返回消息(Return Message):操作执行完成后的返回
特点
- 强调时间顺序- 显示对象间交互细节- 动态行为建模工具- UML标准图,常用于用例分析和系统设计
使用示例
- 用户登录流程- 订单处理流程- 客户端-服务器交互- API调用顺序展示
notion image
notion image

コミュニケーション図(Communication Diagram)

项目
内容
目的
描述对象之间的消息传递及对象间的关系,强调对象间的结构连接和交互顺序。
主要元素
- 对象(Object / Actor):参与交互的实体- 连接(Link):对象之间的关联或通信通路- 消息(Message):通过连接传递的信息或方法调用- 序号(Sequence Number):标示消息的发送顺序
特点
- 强调对象间的结构关系 - 显示消息的发送顺序 - 与时序图类似,但更关注对象关系而非时间轴 - UML标准图,适合分析系统交互和协作
使用示例
- 客户端与服务器交互- 订单处理各对象之间的协作- 系统模块间的调用流程- 用例执行的对象间消息流
notion image
知识check
notion image
notion image
notion image
notion image
notion image
notion image
小南伴你学-応用情報-第10期:企业统治小南伴你学-応用情報-第7期:系统开发之面对过程与数据
Loading...