面向对象的编程ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.面向对象的基本概念—封装
封装(Encapsulation)是把对象的属性和服务结合成一个 独立的系统单位,并尽可能隐藏对象的内部细节。 封装是面向对象方法的一个重要原则,系统中把封装看 成是属性和对象的结合体,使对象能够集中而完整地描述一 个具体事物。封装的信息隐蔽作用反映了事物的相对独立性, 当我们从外部观察对象时,只需要了解对象所呈现的外部行 为(即做什么),而不必关心它的内部细节(即怎么做)。 与封装密切相关的概念是可见性,它是指对象的属性和
1.单一职责原则(单一功能原则); 2.开闭原则; 3.里氏替换原则; 4.接口分离原则; 5.依赖倒置原则; 6.迪米特法则(最少知道原则); 7.优先使用组合而不是继承原则。
单一职责原则(单一功能原则)
定义:规定一个类应该只有一个发生变化的原因。(高内聚、低耦合) 作用:用于控制类的粒度大小。 核心:解耦和增强内聚性。 好处:提高内聚、降低耦合。 总结 众所周知,面向对象编程语言可以提高程序的封装性、复用性、 可维护性,但仅仅是“可以”。能不能实现OOPL的这些优点,要 看具体怎么做。如果一个类的代码非常混乱,各种功能的代码都混 在一起,封装性、复用性、可维护性无从谈起。 SRP是所有原则中最简单的,也是最基本的一个。运用这个原则, 可以提高类的内聚性,有助于充分发挥面向对象编程语言的优势。 个人观点:该原则可以有效降低耦合,减少对不必要资源的引用。但 后果是造成源文件增多,给管理带来不便,所以在实际应用中,可 以对经常使用或经常需要改动的模块应用该原则。
匿名内部类:
1.定义:没有名字的内部类。 2.使用原则: <1>不能有构造方法; <2>不能定义任何静态成员,静态方法。 <3>不能是public、protected、private、 static; <4>只能创建匿名内部类的一个实例。
面向对象设计 原则
面向对象设计原则:
接口分离原则:
定义: 客户端不 应该依赖它不需要的接口; 应用: 一个类对另一个类的依赖应该建立在最小 的接口上。 结论: 使用多个专门的接口比使用单一的接口要好。
如何实现接口隔离原则 ?
(不应该强迫用户依赖于他们不用的方法。) 1、利用委托分离接口。
2、利用多继承分离接口。
依赖倒置原则:
1.解释说明: 高层模块不应该依赖低层模块,二者都应该依赖其 抽象;抽象不应该依赖细节,细节应该依赖抽象。 2.传递依赖关系的方式: 接口传递、构造方法传递 、setter方法传递。 3.应用: 要依赖抽象,不要依赖于具体。即针对接口编程, 不要针对实现编程。 4.关系:里氏代换原则是依赖倒转原则的基础,依赖倒 转原则是里氏代换原则的重要补充。
服务允许对象外部存取和引用的程度。
在软件上,封装要求对象以外的部分不能随意存取对象 的内部数据(属性),从而有效地避免了外部错误对它的"交 叉感染",使软件错误能够局部化,大大减少了查错和排错的 难度。另外,当对象内部需要修改时,由于它只通过少量的 服务接口对外提供服务,便大大减少了内部修改对外部的影 响,即减少了修改引起的"波动效应"。
开闭原则
1.定义:指的是软件实体对被扩展开放,对修改关闭。 (设计一个模块时,应对使这个模块可以在不被修改 的前提下被扩展)。 2.实现开闭原则的关键:抽象化(抽象层)。 3.满足开闭原则软件系统的优越性: <1>通过扩展已有的软件系统,可以提供新的行为, 以满足对软件的新需求,使变化中的软件系统有一定 的适应性和灵活性。 <2>已有的软件模块,特别是最重要的抽象层模块不 能再修改,这就使变化中的软件系统有一定的稳定性 和延续性。 <3>这样的系统同时也满足了可复用性与可维护性。
举例:
在父类"几何图形"中定义了一个服务"绘图", 但并不确定执行时绘制一个什么图形。子类" 椭圆"和"多边形"都继承了几何图形类的绘图服 务,但其功能却不相同:一个是画椭圆,一个 是画多边形。当系统的其他部分请求绘制一个 几何图形时,消息中的服务都是"绘图",但椭 圆和多边形接收到该消息时却各自执行不同的 绘图算法。
举例:
class Pet { //宠物类 }
class Master { //主人类 public void feed(Pet pet) { // 给宠物喂食 } }
关联关系:
定义
关联是类和类之间的一种强依赖关系 这种关系一般具有长期性 关联可以是单向、双向的 关联可分为一对一关联、一对多关联、多对多关联 表现在代码层面
总结 : 实现开闭原则的关键是抽象!抽象层相对稳定,不需修改,需求变化后通过 重新定义抽象层的新实现来完成。
里氏替换原则:
定义:所有引用基类的地方必须能透明的使用其子类的对象。(其子 类对象能代替父类对象,但其父类对象不能代替子类对象。) 好处 : 里氏替代原则是对开闭原则的扩展。如果要采用开闭原则必然 用到抽象和多态,而这又离不开继承,里氏替代原则就是对如何良 好继承提出了要求。 总结 : 里氏替代原则是对开闭原则的扩展。 1.“开 -闭”原则与依赖倒转原则是目标和手段的关系。 2.里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原 则的重要补充。
5.面向对象的基本概念—继承
继承对于软件复用是十分有益的, 如果将OO方法开发的类作为可复用构 件,那么在开发新系统时可以直接复用 这个类,还可以将其作为父类,通过继 承而实现复用,从而大大扩展了复用的 范围。
5.面向对象的基本概念—继承
性和服务。 继承:特殊类的对象拥有的其一般类的全部属性与服务,
5.面向对象的基本概念—继承
继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能, 并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在 设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从 子类指向父类,或者子接口指向父接口。
面向对象的编程
欢迎来到Java课堂!
软工2班 黄明
1. 什么是面向对象
软件工程学家Codd和Yourdon认为: 面向对象=对象+类+继承+通信 如果一个软件系统采用这些概念来建立模型 并予以实现,那么它就是面向对象的。
2.面向对象的基本概念-对象
对象:Baidu Nhomakorabea
对象从不同的角度有不同的含义,我们针对系统 开发来讨论对象的概念,其定义是: 对象(Object)是系统中用来描述客观事物的一个 实体,它是构成系统的一个基本单位,由一组属性和 对这组属性进行操作的一组服务组成。 在这里,属性和服务是构成对象的两个基本要素, 其定义是: 属性是用来描述对象静态特征的一个数据项。 服务是用来描述对象动态特征(行为)的一个操 作序列。
被关联类B以类的属性形式出现在关联类A中 关联类A引用了一个类型为被关联类B的全局变量
UML表示
用带箭头实线表示,箭头指向被关联类 若是双向关联,实线两端可不带箭头
举例:
class } class
Course { // 课程类 private int cid; // 课程编号 private String name; // 课程名
UML表示
类A依赖于类B,用由类A指向类B的带箭头虚线表示
耦合(或者依赖)关系的种类: 1.零耦合(Nil Coupling)关系: 两个类没有耦合关系 2.具体耦合(Concrete Coupling)关系: 发生在两个具体的(可实例化的)类 之间,经由一个类对另一个具体类的直接引 用造成。 3.抽象耦合(Abstract Coupling)关系: 发生在一个具体类和一个抽象类(或 接口)之间,使两个必须发生关系的类之间 存有最大的灵活性。
}
Student { //学生类 private int sid; // 学号 private String name; // 姓名 private String department; // 系别 private Course[ ] course; // 所选课程
继承(Inheritance)是指子类可以自动拥有父类的全部属
称作特殊类对一般类的继承。 继承简化了人们对现实世界的认识和描述,在定义子 类时不必重复定义那些已在父类中定义过的属性和服务, 只要说明它是某个父类的子类,并定义自己特有的属性和 服务即可。 一个类可以是多个父类的子类,它从多个父类中继承 了属性与服务,这称为多继承(Multiple Inheritance)。 举例:客轮既是一种轮船,又是一种客运工具,它可 以继承轮船和客运工具这两个类的属性和服务。
注:
多态性机制不但为软件的结构设计提供了 灵活性,减少了信息冗余,明显提高了软件的 可复用性和可扩充性。多态性的实现需要 OOPL提供相应的支持,与多态性实现有关的 语言功能包括:重载(overload)、动态绑定 (dynamic binding)、类属(generic)。
内部类
内部类:
1.内部类的分类 :成员内部类、静态嵌套类、 方法内部类、匿名内部类。 2.内部类的定义:放在一个类的内部的类。 3.作用:<1>可以很好的实现隐藏;<2>拥 有外围类的所有元素的访问权限;<3>可以实 现多重继承;<4>可以避免修改接口而实现同 一类中两种同名方法的调用。
6.面向对象的基本概念—多态
多态性(Polymorphism)是指在父类中定 义的属性或服务被子类继承后,可以具有不同 的数据类型或表现出不同的行为。 在体现一般与特殊关系的一个类层次结构 中,不同层次的类可以共享一个操作,但却有 各自不同的实现。当一个对象接收到一个请求 时,它根据其所属的类,动态地选用在该类中 定义的操作。
类的三大特点
3.面向对象的基本概念--类
把众多的事物归纳并划分成一些类是人类在认识客观世 界时经常采用的思维方法,分类的原则是抽象,从那些 与当前目标有关的本质特征中找出事物的共性,并将具 有共同性质的事物划分成一类,得出一个抽象的概念。 例如:人、房屋、树木等都是一些抽象的概念,它们是 一些具有共同特征的事物的集合,称为类。类的概念使 我们能对属于该类的全部个体事物进行统一的描述,"树 具有树根、树干、树枝和树叶,它能进行光合作用",这 个描述适合所有树,而不必对每一棵具体的树进行描述。 类的三大特点:封装、继承、多态
应用:高级语言中的接口与虚拟类。 好处:提高灵活性、可重用性、可维护性。
实现 : 实现开闭原则的关键是抽象,抽象是面向对象设计的一个核心特征。 对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东 西,从更高一层去思考,这降低了思考的复杂度,不用同时考虑太多的东西。 定义一个抽象层,只规定功能而不提供实现,实现通过定义具体类来完成。当需求变化 时,不是通过修改抽象层来完成,而是通过重新定义抽象层的新实现来完成,即通过扩展 来完成。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。 这样一来,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需修改, 从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对 扩展开放”。 即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统 的结构。另一方面,对于系统的每个部分都肆意地进行抽象也不是一个好主意,应该仅仅 对程序中需求频繁变化的部分进行抽象。拒绝不成熟的抽象和抽象本身一样重要。
4.面向对象的基本概念—封装
副作用: 封装也有副作用,如果强调严格的封装, 则对象的任何属性都不允许外部直接存取,因 此就要增加许多没有其他意义、只负责读或写 的服务,从而为编程工作增加了负担,增加了 运行开销。为了避免这一点,语言往往采取一 种比较灵活的做法,即允许对象有不同程度的 可见性。
迪米特法则(最少知道原则):
顾名思义,就是一个对象对其他对 象保持最少的了解。
类与类之间的 关系
目标:
掌握类和类之间依赖、关联、聚合、组合关系
依赖关系:
定义
可以简单的理解,类A依赖于类B就是类A使用到了类B, 类B的变化会影响到类A 这种关系一般是偶然性的、临时性的、非常弱的 依赖关系总是单向的 表现在代码层面,类B作为参数或局部变量被类A在某个 method方法中使用,此时类A依赖于类B