当前位置: 首页 > news >正文

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

文章目录

    • 前言
    • 一、职责驱动设计
    • 二、职责驱动设计-案例


前言

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

  • 职责驱动设计
  • 遵循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版》专栏!关注不迷路~

http://www.lryc.cn/news/519696.html

相关文章:

  • GB/T 19582.1-2008主要内容
  • [石榴翻译] 维吾尔语音识别 + TTS语音合成
  • 算法题(32):三数之和
  • webpack03
  • 组会 | SNN 的 BPTT(backpropagation through time)
  • CDA数据分析师一级经典错题知识点总结(3)
  • django基于Python的电影推荐系统
  • JVM与Java体系结构
  • 网络授时笔记
  • 【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky
  • spark汇总
  • 【Rust自学】11.5. 在测试中使用Result<T, E>
  • Sping Boot教程之五十四:Spring Boot Kafka 生产者示例
  • 设计模式-结构型-组合模式
  • 基于Java的推箱子游戏设计与实现
  • Spark vs Flink分布式数据处理框架的全面对比与应用场景解析
  • python_excel列表单元格字符合并、填充、复制操作
  • nums[:]数组切片
  • 【Arthas 】Can not find Arthas under local: /root/.arthas/lib 解决办法
  • 录用率23%!CCF推荐-B类,Early Access即可被SCI数据库收录,中美作者占比过半
  • IP 地址与蜜罐技术
  • Vue_API文档
  • WebSocket 设计思路
  • Jenkins持续集成与交付安装配置
  • ESP32作为Wi-Fi AP模式的测试
  • 【爬虫】单个网站链接爬取文献数据:标题、摘要、作者等信息
  • Android RIL(Radio Interface Layer)全面概述和知识要点(3万字长文)
  • leetcode_2816. 翻倍以链表形式表示的数字
  • 【论文阅读】MAMBA系列学习
  • MySQL教程之:批量使用mysql