追逐OO(一)-OOD理论指导

2024-03-24 11:48
文章标签 oo ood 追逐 理论指导

本文主要是介绍追逐OO(一)-OOD理论指导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

面向对象设计的理论以前也零零碎碎的看过。不过始终觉的自己像个门外汉,2010年刚刚开始,打算今年系统的探索和实践OOD的方方面面!

看到园子里张逸的一个OOD的PDF。感觉总结的很好。这个总结就像是一个提纲,每一个地方都值的深入学习。

我呢,站在巨人的肩膀上,把这个提纲照搬过来,作为学习OOD的指引。

下面所说的封装、继承和多态,个人感觉关键是在“抽象”二字,此处的“抽象”也可以理解为“抽象能力”。

封装是对数据和行为的抽象,合理的隐藏(数据、实现、变化)+合理的公开会产生出一个合理的对象。

从对象的构建到对象的优化无处不在的就是“抽象”。

类继承或是接口继承,抽象类是对一类事物的高度聚合,而接口是对行为的统一规范。所以设计超类或接口,本身就是对系统的高度抽象

面向对象设计 OOD
三要素:封装、继承、多态
五原则:单一职责原则、开放-封闭原则、Liskov替换原则、依赖倒置原则、接口隔离原则
六观点:复用、扩展、分离、变化、简约、一致
一、面向对象三要素
封装(Encapsulation)
     即合理的隐藏
          数据的隐藏(隐藏在方法背后)
          实现的隐藏(隐藏在接口背后)
          变化的隐藏(隐藏在抽象背后)
     优点
         提供对象的复用性
         降低对象的耦合度
    良好的封装=对象的高内聚
继承(Inheritance)
     基于差异式编程
     继承与合成/聚合
         合成/聚合复用原则
     继承方式
         类的继承
         接口继承
    继承与实现
多态(Polymorphism)
     多态是指对象在不同时刻体现为不同类型的能力
     抽象与多态
     多态的形式:
          基类继承式多态
          接口实现式多态
二、面向对象五原则
单一职责原则(SRP)
     单一职责原则保证了:
         对象的细粒度——便于复用
         对象的单一性——利于稳定
     单一职责原则分离了不变与变
     不要创建“上帝”类,Facade类除外
开放-封闭原则(OCP)
    对于扩展是开放的,对于更改是封闭的
    开放-封闭原则的关键是“抽象”
    多态保证了扩展的开放性
    开放意味着实现是可替换的
Liskov替换原则(LSP)
    子类型必须能够完全替换其父类型
    Liskov替换原则关注的是行为的可替换
    Liskov替换原则:
        可以作为验证继承关系(is-a)正确性的准则
        体现了多个实现在接口的一致性
        如果违背该原则,通常的做法是引入一个新的超类,将父子关系修改为兄弟关系
依赖倒置原则(DIP)
     面向接口编程
     抽象不应该依赖于细节。细节应该依赖于抽象。
     高层模块和低层模块以及客户端模块和服务模块都应该依赖于接口,而不是具体实现
     依赖倒置原则的核心是“抽象”和“间接”
接口隔离原则(ISP)
    接口尽量小,防止接口污染;
    接口若要稳定,就应承担较少责任,本原则同时符合单一职责原则。
    使用多个专门的接口比使用单一的总接口好;
    可以合理利用接口的继承;
    同一个类可以同时实现多个接口,站在调用者的角度,不同的接口代表不同的关注点,不同的职责,甚至是不同的角色。
三、面向对象六观点
复用(Reusibility)
    软件设计最大的敌人是重复。
    重复的代码会导致解决方案蔓延。
    细粒度、封装复用、高内聚
    相关模式:
       Prototype模式
       Proxy模式
    如何提高软件的复用性?
        方法级
             重构之方法提取
             辅助方法
             利用静态工厂复用对象的创建逻辑
       对象级
            遵循单一职责原则
            合理的封装
            辅助类
            AOP(面向方面编程)
      模块级
           根据依赖关系划分包
           复用的粒度就是发布的粒度
          一个包中的所有类应该是共同复用的
扩展(Extensibility)
      不修改原有代码增加新的功能,谓之扩展
      实现扩展的方式:
           利用继承实现扩展
           利用组合实现扩展
           利用继承和组合实现扩展
           利用抽象实现扩展
     相关设计模式
           Decorator模式
           Visitor模式
           Proxy模式
分离(Separability)
      软件设计需重视职责的分离
      分离需与抽象结合,实现依赖的解耦
      职责分离体现了
           单一职责原则
           接口隔离原则
     职责分离表现为
          如何定义职责
          如何分解职责
          如何抽象职责
    分离的目标
         分离变与不变
         分离接口与实现
         分离数据与行为
    相关设计模式
         Factory Method模式
         Bridge模式
         Iterator模式
变化(Change)
     封装变化是解决之道
     封装变化的核心是抽象
          封装创建的变化
          封装结构的变化
          封装行为的变化
     解决变化应遵循:
          开放-封闭原则
          依赖倒置原则
     封装变化的本质是隔离变化
     隔离变化
          通过分离
          通过抽象
         依赖注入
     相关模式
          Factory Method模式
          Abstract Factory模式
          Strategy模式
简约(Simplicity)
     简约需遵循:
          KISS原则
          场景驱动设计
          避免设计过度
     如何实现简约:
          封装有利于简约:职责的封装
          继承有利于简约:职责的复用
          多态有利于简约:职责的委托
     简约不等于简陋,等于简单加优雅
     简约需要重构和精益求精
     如何考量简约?
          可复用性
          可扩展性
          可测试性
     相关模式
          Facade模式
          Singleton模式
          Composite模式
          Template Method模式
          Strategy模式
一致(Coherance)
      一致体现了软件结构的和谐与平衡
      一致体现为:
           接口的一致——对于实现可替换
           形式的一致——窥一斑而知全豹
           调用的一致——客户可透明访问
     相关模式:
          Composite模式
          Adapter模式

这篇关于追逐OO(一)-OOD理论指导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841490

相关文章

2015年多校联合训练第一场OO’s Sequence(hdu5288)

题意:给定一个长度为n的序列,规定f(l,r)是对于l,r范围内的某个数字a[i],都不能找到一个对应的j使得a[i]%a[j]=0,那么l,r内有多少个i,f(l,r)就是几。问所有f(l,r)的总和是多少。 公式中给出的区间,也就是所有存在的区间。 思路:直接枚举每一个数字,对于这个数字,如果这个数字是合法的i,那么向左能扩展的最大长度是多少,向右能扩展的最大长度是多少,那么i为合法的情况

面向对象设计(OOD)的SOLID 原则

SOLID 原则是面向对象设计(OOD)中的一组核心概念,旨在促进软件的可维护性、灵活性和可扩展性。下面为每个原则提供一个简单的代码示例来阐明其意义和应用方式。 S:单一职责原则(Single Responsibility Principle) 单一职责原则指一类应该只有一个改变的理由,即该类只负责一件事。 示例:一个日志记录类,仅负责日志记录功能。 class Logger:def lo

OO原则

在看《HeadFirst》的过程中发现了OO原则和之前学过的《大话设计模式》有点不一样的的地方。总结一下,分享给大家。 首先我们来看《大话设计模式》里的六大原则。也可以访问之前的博客《23种设计模式》。 1、开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。 2、单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。 3、依赖倒转原则:A.

嵌入式C语言OO编程方法

原文转自:http://blog.csdn.net/ice1224/article/details/4414183 嵌入式C语言OO编程方法 目前嵌入式系统的代码量也在逐渐增加,即使对于不是非常复杂的嵌入式系统,单板执行代码量在1M以下,源代码往往也会在两三万行以上。因此代码重用的要求也渐渐迫切。   本文参考OO与组件技术,提出嵌入式C语言组件编程方法,针对没有内建专业OS的

函数式编程和OO编程02——二者的等价性

我:理论上这两种方式可以等价吗?(FP 和 OOP) -ChatGPT 理论上,函数式编程(FP)和面向对象编程(OO)可以在功能上达到等价的效果,但它们的实现方式、代码结构以及思维模式有所不同。 功能等价性 从功能角度来看,两种编程范式都可以用来解决相同的问题,并实现相同的计算或逻辑。无论是用OO编程中的类和对象,还是用FP中的函数和不可变数据,都可以构建相同的应用程序或系统。 例如,

OO U4 博客

文章目录 正向建模与开发单元架构设计与追踪关系单元架构设计追踪关系 架构设计思维进化测试思维演进课程收获 正向建模与开发 在本单元中,我学习了UML这一建模工具。UML具备相当多种类的图,通过先设计UML图再进行开发,能够避免架构的重大调整,提前察觉当前设计存在的问题。 通过状态图,可以清晰地捕捉和表达系统需求,确保我们在开发的时候充分理解需求。类图有助于系统的详细设计,提供了

追逐自己的梦想----------辅助制作第三十八课:物品出售的分析和实现

首先是找到出售物品的call007A97E7 898D 0AD8FFFF MOV DWORD PTR SS:[EBP-27F6],ECX007A97ED 8B0D 8048F300 MOV ECX,DWORD PTR DS:[F34880]007A97F3 52 PUSH EDX007A97F4 C785 EED7FFFF 0>MOV

追逐自己的梦想----------辅助制作第三十七课:物品购买实现

本次我们将对上次找到的物品商店进行遍历,然后实现物品购买功能 具体代码如下: #define nSizeGoodsList 60typedef struct TGoodsShopList{TBACK_PACK_OBJ mtGoodlist[nSizeGoodsList];TGoodsShopList* TGoodsShopList::GetData(); //初始化函数void TGo

追逐自己的梦想----------辅助制作第三十六课:物品购买分析

要分析物品购买功能,可以通过bp WSASend 来找到购买物品的call找到这个缓冲区 :db显示0018A488 00 00 92 00 80 00 01 00 00 00 00 00 00 00 65 CA ..?€........e?0018A498 9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 00 00 ?.............0

追逐自己的梦想----------辅助制作第三十五课:从仓库取出N个物品分析与实现

首先 还是通过发包函数来判断取物品call发现 存取物品都是同一个call007A98DD 8DB3 8C170000 LEA ESI,DWORD PTR DS:[EBX+178C] ; ebx+178C+2a-0a007A98E3 A1 BCA31C03 MOV EAX,DWORD PTR DS:[31CA3BC]007A98E8 8B15