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

server/2025/1/15 7:00:28/

文章目录


前言

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

  • 职责驱动设计
  • 遵循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.ppmy.cn/server/158484.html

相关文章

面试题:Java中并发并行串行的区别

在 Java 中,并发、并行和串行是三个常见的概念,它们描述了程序中任务执行的不同方式。虽然它们之间存在某些相似之处,但它们的实现和用途有显著的区别。 1. 串行 (Serial) 串行是指任务按照顺序一个接一个地执行,前一个任务完成…

微服务之松耦合

参考:https://microservices.io/post/architecture/2023/03/28/microservice-architecture-essentials-loose-coupling.html There’s actually two different types of coupling: runtime coupling - influences availability design-time coupling - influences…

通信网络安全分层及关键技术解决

要实现信息化,就必须重视信息网络安全。信息网络安全绝不仅是IT行业的问题,而是一个社会问题,是一个包括多学科的系统安全工程问题,并直接关系到国家安全。因此,知名安全专家沈昌祥院士呼吁,要像重视两弹一…

【机器人】SceneGrasp 同时支持3D物体重建、6D位姿估计、抓取点估计

本文分享SceneGrasp,它来自IROS2023,同时支持物体分类、3D物体重建、6D位姿估计、抓取点估计。 它是一种快速、高效且同时处理多个任务的方法,能够使机器人更好地理解和操作其环境。 同时处理多个任务,实现任务之间共享信息&…

通过mysql的*.frm和*ibd文件恢复原有数据

背景:MySQL数据丢失,只剩下frm和ibd结尾的文件,由于先前没有备份也没开启binlog现在只能通过这两个文件来恢复数据。 如果也是MySQL数据丢失,但是有frm和ibd文件可以通过此文档来解决MySQL数据丢失的问题 安装MySQL Utilities …

用AI技术提升Flutter开发效率:ScriptEcho的力量

引言 在当今快速发展的技术时代,Flutter作为一种跨平台开发框架,正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案,还能帮助企业节省人力成本和开发时间。然而,对于新手开发…

(蓝桥杯)使用前缀和与二分查找解决子数组和问题——不太甜的糖果

题目描述 小Y走啊走啊,翻山越岭、跋山涉水,终于,小Y累了。虽然,糖果的诱惑强大,但他的两条腿已经不听使唤,只能坐在地上叹气,内心无比焦急…… 突然眼前一黑,小Y没有昏过去,但是眼前出现了一个糖人。在这无人之地,小Y没有别的办法,只得求助糖人。 善良的糖人没法拒绝…

Elasticsearch入门篇

1.介绍 Elasticsearch 1.1.什么是 Elasticsearch? Elasticsearch 是一种开源的搜索和分析引擎,专门用于处理大规模的数据,并以非常快的速度进行搜索和分析。它基于一个叫做 Apache Lucene 的库构建,但与 Lucene 相比,…