【软考】面向对象设计

1. 说明
  • 1.面向对象设计(Obiect-Oriented Design,OOD)是将 OOA 所创建的分析模型转化为设计模型,其目标是定义系统构造蓝图。
  • 2.通常的情况是,由概念模型生成的分析模型被装入到相应的执行环境中时,需要考虑实现问题加以调整和增补,如根据所用编程语言是否支持多继承或继承,而调整类结构。
  • 3.OOA 与 OOD之间不存在鸿沟,采用一致的概念和一致的表示法,OOD同样应遵循抽象、信息隐蔽、功能独立、模块化等设计准则。
2. 面向对象设计的活动
  • 1.OOD 在复用 OOA 模型的基础上,包含与 OOA 对应如下五个活动,识别类及对象定义属性定义服务识别关系识别包
  • 2.和所有其他设计活动一样,要使系统的结构好且效率高,做好相互间的平衡是困难的。
  • 3.分析模型已经提供了概念结构,它将试图长期保存。
  • 4.另外,设计期必须充分考虑系统的稳定性,如目标环境所需的最大存储空间、可靠性和响应时间等,所有这些都会影响系统的结构。
  • 5.对象标识期间的目标是分析对象,设计过程也是发现对象的过程,称之为再处理,并补充几个新的组成部分,即与实现有关的因素:图形用户界面系统硬件操作系统及网络数据管理系统以及编程语言可复用构件库等。
  • 6.OOD应该尽可能隔离实现条件对系统的影响,对不可隔离的因素按实现条件调整 OOA 模型。
  • 7.因此,必须有从分析模型到设计模型到程序设计语言的线性转换规则。
  • 8.对象可以用预先开发的源代码实现,称这样的部分为构件(Component)。
  • 9.由于这些构件是功能和数据的组装,因此,常常用于简化面向对象环境的产生。
3. 面向对象设计的原则
3.1 单一责任原则
  • 1.Single Responsibility Principle,SRP
  • 2.就一个类而言,应该仅有一个引起它变化的原因。
  • 3.当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
3.2 开放-封闭原则
  • 1.Open & Close Principle,OCP
  • 2.软件实体(类、模块、函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。
3.3 里氏替换原则
  • 1.Liskov Substitution Principle,LSP。
  • 2.子类型必须能够替换掉他们的基类型。
  • 3.在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。
  • 4.当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有是一个(is-a)关系。
3.4 依赖倒置原则
  • 1.Dependence Inversion Principle, DIP
  • 2.抽象不应该依赖于细节,细节应该依赖于抽象。
  • 3.高层模块不应该依赖于低层模块,二者都应该依赖于抽象
3.5 接口分离原则
  • 1.Interface Segregation Principle,ISP
  • 2.不应该强迫客户依赖于它们不用的方法。
  • 3.接口属于客户,不属于它所在的类层次结构。
  • 4.依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。
  • 5.这样做的好处就在于可以最大限度地应对可能的变化。
3.6 重用发布等价原则
  • 1.Release Reuse Equivalency Principle,REP
  • 2.重用的粒度就是发布的粒度。
3.7 共同封闭原则
  • 1.Common Closure Principle,CCP
  • 2.包中的所有类对于同一类性质的变化应该是共同封闭的。
  • 3.一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
3.8 共同重用原则
  • 1.Common Reuse Principle,CRP。
  • 2.一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
3.9 无环依赖原则
  • 1.Acyclic Dependencies Principle,ADP。
  • 2.在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的五环图形。
3.10 稳定依赖原则
  • 1.Stable Dependencies Principle,SDP。
  • 2.朝着稳定的方向进行依赖。
3.11 稳定抽象原则
  • 1.Stable Abstractions Principle,SAP。
  • 2.包的抽象程度应该和其稳定程度一致。
4. 例题
4.1 例题1
  • 1.问题
1.以下关于面向对象设计的叙述中,错误的是(D)
A.高层模块不应该依赖于底层模块
B.抽象不应该依赖于细书
C.细节可以依赖于抽象
D.高层模块无法不依赖于底层模块
  • 2.解析
依赖倒置原则,抽象不应该依赖于细节,细节应该依赖于抽象。
即,高层模块不应该依赖于低层模块,二者都应该依赖于抽象。所以选D
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
面向对象程序设计是一种基于对象概念的程序设计方法,是计算机编程中的一种重要范型,它将数据和操作数据的方法组合成对象,以封装的方式来进行编程,从而使得程序具有更好的可重用性、可维护性和可扩展性。 软考程序员面向对象程序设计主要包括以下内容: 1. 类和对象的概念:类是对一类事物的抽象描述,对象则是类的实例化。开发者需要掌握如何定义类和创建对象,如何使用类的属性和方法等基本概念。 2. 继承和多态:继承是指一个类可以从另一个类中继承属性和方法,多态是指不同的对象可以对相同的消息做出不同的响应。开发者需要掌握如何使用继承和多态,以实现代码的复用和扩展。 3. 抽象类和接口:抽象类是不能被实例化的类,它可以定义一些抽象方法和属性,子类必须实现这些抽象方法才能被实例化。接口是一种规范,它定义了一些方法和属性的签名,子类必须实现这些方法和属性才能被实例化。开发者需要掌握如何使用抽象类和接口,以实现代码的灵活性和可扩展性。 4. 封装和信息隐藏:封装是指将数据和操作数据的方法封装在一起,以保护数据的完整性和安全性。信息隐藏是指将数据和操作数据的方法隐藏在类的内部,只暴露必要的接口给外部使用。开发者需要掌握如何使用封装和信息隐藏,以保证代码的可靠性和安全性。 5. 设计模式设计模式是一种经过实践验证的面向对象设计思想,它提供了一些通用的解决方案,帮助开发者更好地解决问题。开发者需要掌握一些常见的设计模式,如单例模式、工厂模式、观察者模式等,以提高代码的可维护性和可扩展性。 总之,软考程序员面向对象程序设计是一个涉及广泛且复杂的领域,需要开发者具备扎实的理论基础和实践经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值