第三节课 面向对象程序设计——设计原则

面向对象设计原则

 

一、     教学目标

重复理解6个设计原则的概念

能够在程序设计中应用设计原则

二、     教学重点

 

7个原则的理解和应用环境

三、     教学难点

如何使用原则体现高内聚低耦合

泛化关系的滥用

什么情况下使用继承,什么情况下使用组合聚合。两者的区别

四、     教学过程

1、            什么是好的程序设计

设计不好的程序特点是:过于僵硬、过于脆弱、复用率低、粘度过高

设计好的程序特点是:可扩展、灵活性、可插入、可复用

好的程序设计的评价结果:高内聚低耦合(也是设计原则要达到的目标)

2、            设计原则介绍

从对象实体的角度出发尽量实现功能单一。达到高内聚的目的;(针对物对象)

从关系的角度出发减少和其他对象的关系,达到低耦合的目的。(针对事对象)

 

设计原则

单一职责原则 开闭原则 里氏代换原则 依赖倒转原则

接口隔离原则 合成复用原则 迪米特法则

 

1)单一职责原则:(如何分辨——具体的抽象对象,体现排他性)

定义:一个类,只有一个引起它变化的原因。应该只有一个职责。

     职责也可以看成是系统中担任的角色

特点:一个角色对应一个抽象对象(类)

现实中:

如果杯子看成喝水,杯子的职责就是喝水,不能插花、养鱼。

如果杯子看成花瓶,杯子的职责就是插花,不能喝水、养鱼。

如果杯子看成鱼缸,杯子的职责就是养鱼,不能插花、喝水。

代码中:

 

同一个人即是行政人员,有代课。要分成为两个对象

同一个人:学生—在学校的角色、运动员—在运动场角色、孩子—在家的角色

 

2)开闭原则:(如何限定好——混合对象、子模块或子系统的范围)

定义:软件实体应当对扩展开放,对修改关闭。

组件化、模块化。

扩展系统通过增加或替换类的形式,不能通过修改原代码来扩展系统。

子系统的修改不会影响其他子系统

 

四个独立的子模块组成考试成绩。

 

3)里氏代换原则:(如何实现好——泛化关系)

定义:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。而且它觉察不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。反过来的代换不成立,如果一个软件实体使用的是一个子类的话,那么它不一定适用于基类。

 

特点:子类必须要实现所有的父类声明的方法,并且子类的所有方法必须都要在父类中声明。

 

椅子继承凳子是不符合里氏代换原则

 

4)依赖倒转原则(如何实现好——接口实现关系)

定义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

特点:1、要针对接口编程,不要针对实现编程。

     2、依赖对象要从接口传递到实现对象

 

 

 

5)接口隔离原则(如何实现好——依赖关系)

定义:客户端不应该依赖那些它不需要的接口

特点:1、如何确定依赖关系

2、将大的接口分割成小的接口,使用接口的客户端仅需要知道与之相关的方法即可。

 

                                  

 

6)合成复用原则(如何实现好——聚合、组合关系)

定义:尽量使用合成/聚合,而不是使用继承来达到复用的目的。

特点:

继承和组合的区别

继承——等于从头实现,僵硬脆弱,成为一个整体

组合——灵活,部分和整体的关系

 

 
 

什么情况下使用继承,什么情况下使用组合聚合?

当对象的内涵没有变化,只是外延的扩大或变化——使用继承

当对象的内涵变化了,产生一种新的抽象对象——使用组合

7)迪米特法则(如何实现好——关联关系,做到点到为止)

定义:一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

特点:能够联系的对象只包括:

1) 当前对象本身(this2) 以参数的形式传入到当前对象方法中的对象(依赖关系)

3) 当前对象的成员对象(组合关系)

4) 当前对象的成员对象是一个集合,那么集合的元素都是朋友

5) 当前对象所创建的对象

 

学生学习那些课程。学生.班级.课程

 

迪迷特法则要求分成两步:学生.班级  班级.课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值