网站内链调整,做网站常用的软件,天津门头设计制作价格,thinkphp手机网站模板文章目录 前言一、职责驱动设计二、职责驱动设计-案例 前言
面向对象设计目标#xff1a;在面向对象分析建立的领域模型的基础上#xff0c;定义对象操作#xff08;职责#xff09;。为对象分配职责的方法有#xff1a;
职责驱动设计遵循GRASP设计原则#xff08;Gene… 文章目录 前言一、职责驱动设计二、职责驱动设计-案例 前言
面向对象设计目标在面向对象分析建立的领域模型的基础上定义对象操作职责。为对象分配职责的方法有
职责驱动设计遵循GRASP设计原则General Responsibility Assignment Software Pattern 通用职责分配软件模式使用软件设计模式
一、职责驱动设计
设计阶段的关键问题 应该如何为对象分配职责即什么类做什么事情 对象之间应该如何协作 软件设计模式何时用如何用
面向对象设计方法-职责驱动设计Responsibility Driven DesignRDD 职责驱动设计一个对象的职责是指它知道或者拥有的信息以及它能执行的操作。职责驱动设计要求每个对象都有明确的职责而且职责应该是单一的。 职责包括认知职责和行为职责。 认知职责 关于私有封装数据关于相关对象关于可以推导或计算的东西 行为职责 自己做什么对其他对象发起行动控制和协调其他对象的工作
职责驱动设计的基本原则
高内聚相关的职责应该放在同一个对象中。低耦合对象之间应该尽量减少直接的依赖关系。封装确保对象的内部实现细节不被外部访问只通过公共接口进行交互。单一职责原则一个对象应该只承担一个职责这样对象才会更加健壮和可维护。
软件设计模式 软件设计模式是指在软件工程中用于解决常见问题的经典解决方案最佳实践。它们代表了经过验证的、可重用的设计经验可以帮助程序员编写出可维护、可扩展且高效的代码。 软件设计模式通常用于软件的设计阶段。 通过使用合适的设计模式使得在软件设计方案更合理、更高效。
二、职责驱动设计-案例
废品回收机-职责驱动设计
私有封装数据Item类的number和value属性相关对象用户界面UI类知道系统把信息发送到哪里可以推导或计算的东西ReceiptBasis类知道所有放入回收机器的物品可以计算总价。因此添加add_item()和compute_sum()方法自己做什么ReceiptPrinter类添加打印方法print()对其他对象发起行动用户可在操作界面UI类发起分类和收据打印动作。因此添加item_received()和print_receipt()方法控制和协调其他对象的工作DepositReceiver类控制着整个系统负责将任务分配给其他对象。因为添加classify_item()、create_receipt_basis()和print_receipt()方法 #mermaid-svg-1O0bYV8xSgazg2zY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1O0bYV8xSgazg2zY .error-icon{fill:#552222;}#mermaid-svg-1O0bYV8xSgazg2zY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1O0bYV8xSgazg2zY .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1O0bYV8xSgazg2zY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1O0bYV8xSgazg2zY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1O0bYV8xSgazg2zY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1O0bYV8xSgazg2zY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1O0bYV8xSgazg2zY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1O0bYV8xSgazg2zY .marker.cross{stroke:#333333;}#mermaid-svg-1O0bYV8xSgazg2zY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1O0bYV8xSgazg2zY g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-1O0bYV8xSgazg2zY g.classGroup text .title{font-weight:bolder;}#mermaid-svg-1O0bYV8xSgazg2zY .nodeLabel,#mermaid-svg-1O0bYV8xSgazg2zY .edgeLabel{color:#131300;}#mermaid-svg-1O0bYV8xSgazg2zY .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-1O0bYV8xSgazg2zY .label text{fill:#131300;}#mermaid-svg-1O0bYV8xSgazg2zY .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-1O0bYV8xSgazg2zY .classTitle{font-weight:bolder;}#mermaid-svg-1O0bYV8xSgazg2zY .node rect,#mermaid-svg-1O0bYV8xSgazg2zY .node circle,#mermaid-svg-1O0bYV8xSgazg2zY .node ellipse,#mermaid-svg-1O0bYV8xSgazg2zY .node polygon,#mermaid-svg-1O0bYV8xSgazg2zY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1O0bYV8xSgazg2zY .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-1O0bYV8xSgazg2zY g.clickable{cursor:pointer;}#mermaid-svg-1O0bYV8xSgazg2zY g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-1O0bYV8xSgazg2zY g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-1O0bYV8xSgazg2zY .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-1O0bYV8xSgazg2zY .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-1O0bYV8xSgazg2zY .dashed-line{stroke-dasharray:3;}#mermaid-svg-1O0bYV8xSgazg2zY #compositionStart,#mermaid-svg-1O0bYV8xSgazg2zY .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #compositionEnd,#mermaid-svg-1O0bYV8xSgazg2zY .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #dependencyStart,#mermaid-svg-1O0bYV8xSgazg2zY .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #dependencyStart,#mermaid-svg-1O0bYV8xSgazg2zY .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #extensionStart,#mermaid-svg-1O0bYV8xSgazg2zY .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #extensionEnd,#mermaid-svg-1O0bYV8xSgazg2zY .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #aggregationStart,#mermaid-svg-1O0bYV8xSgazg2zY .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY #aggregationEnd,#mermaid-svg-1O0bYV8xSgazg2zY .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-1O0bYV8xSgazg2zY .edgeTerminals{font-size:11px;}#mermaid-svg-1O0bYV8xSgazg2zY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 捕获 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版》专栏关注不迷路~