面向对象分析与设计Python版 面向对象设计方法

发布于:2025-02-10 ⋅ 阅读:(23) ⋅ 点赞:(0)


前言

面向对象设计目标:在面向对象分析建立的领域模型的基础上,定义对象操作(职责)。为对象分配职责的方法有:

  • 职责驱动设计
  • 遵循GRASP设计原则(General Responsibility Assignment Software Pattern 通用职责分配软件模式)
  • 使用软件设计模式

一、职责驱动设计

设计阶段的关键问题

  • 应该如何为对象分配职责?即什么类做什么事情?

  • 对象之间应该如何协作?

  • 软件设计模式何时用?如何用?

面向对象设计方法-职责驱动设计(Responsibility Driven Design,RDD)

  • 职责驱动设计:一个对象的职责是指它知道或者拥有的信息,以及它能执行的操作。职责驱动设计要求每个对象都有明确的职责,而且职责应该是单一的。

  • 职责包括认知职责和行为职责

  • 认知职责

    • 关于私有封装数据
    • 关于相关对象
    • 关于可以推导或计算的东西
  • 行为职责

    • 自己做什么
    • 对其他对象发起行动
    • 控制和协调其他对象的工作

职责驱动设计的基本原则

  • 高内聚:相关的职责应该放在同一个对象中。
  • 低耦合:对象之间应该尽量减少直接的依赖关系。
  • 封装:确保对象的内部实现细节不被外部访问,只通过公共接口进行交互。
  • 单一职责原则:一个对象应该只承担一个职责,这样对象才会更加健壮和可维护。

软件设计模式

  • 软件设计模式是指在软件工程中用于解决常见问题的经典解决方案(最佳实践)。它们代表了经过验证的、可重用的设计经验,可以帮助程序员编写出可维护、可扩展且高效的代码。

  • 软件设计模式通常用于软件的设计阶段。

  • 通过使用合适的设计模式,使得在软件设计方案更合理、更高效。

二、职责驱动设计-案例

废品回收机-职责驱动设计

  • 私有封装数据:Item类的number和value属性
  • 相关对象:用户界面UI类知道系统把信息发送到哪里
  • 可以推导或计算的东西:ReceiptBasis类知道所有放入回收机器的物品,可以计算总价。因此添加add_item()和compute_sum()方法
  • 自己做什么:ReceiptPrinter类添加打印方法print()
  • 对其他对象发起行动:用户可在操作界面UI类发起分类和收据打印动作。因此添加item_received()和print_receipt()方法
  • 控制和协调其他对象的工作:DepositReceiver类控制着整个系统,负责将任务分配给其他对象。因为添加classify_item()、create_receipt_basis()和print_receipt()方法
捕获
1..*
1
创建和通知
发起操作
分类
打印
Item
number
value
Can
weight
size
Bottle
weight
size
Crate
weight
size
ReceiptBasis
add_item(item:Item)
compute_sum()
ReceiptPrinter
print()
DepositReceiver
classify_item()
create_receipt_basis()
print_receipt()
UI
item_received()
print_receipt()

您正在阅读的是《面向对象分析与设计Python版》专栏!关注不迷路~