版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、欢迎来到欢迎来到JavaJava课堂!课堂!软工软工2 2班班 黄明黄明 软件工程学家Codd和Yourdon认为: 面向对象对象类继承通信 如果一个软件系统采用这些概念来建立模型并予以实现,那么它就是面向对象的。对象:对象从不同的角度有不同的含义,我们针对系统开发来讨论对象的概念,其定义是:对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。在这里,属性和服务是构成对象的两个基本要素,其定义是:属性是用来描述对象静态特征的一个数据项。服务是用来描述对象动态特征(行为)的一个操作序列。 把众多的事物归纳并划分成一些类
2、是人类在认识客观世界时经常采用的思维方法,分类的原则是抽象,从那些与当前目标有关的本质特征中找出事物的共性,并将具有共同性质的事物划分成一类,得出一个抽象的概念。例如:人、房屋、树木等都是一些抽象的概念,它们是一些具有共同特征的事物的集合,称为类。类的概念使我们能对属于该类的全部个体事物进行统一的描述,树具有树根、树干、树枝和树叶,它能进行光合作用,这个描述适合所有树,而不必对每一棵具体的树进行描述。 类的三大特点:封装、继承、多态 封装(Encapsulation)是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。封装是面向对象方法的一个重要原则,系统中把封装看成是属
3、性和对象的结合体,使对象能够集中而完整地描述一个具体事物。封装的信息隐蔽作用反映了事物的相对独立性,当我们从外部观察对象时,只需要了解对象所呈现的外部行为(即做什么),而不必关心它的内部细节(即怎么做)。 与封装密切相关的概念是可见性,它是指对象的属性和服务允许对象外部存取和引用的程度。在软件上,封装要求对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的交叉感染,使软件错误能够局部化,大大减少了查错和排错的难度。另外,当对象内部需要修改时,由于它只通过少量的服务接口对外提供服务,便大大减少了内部修改对外部的影响,即减少了修改引起的波动效应。副作用:副作用: 封装也
4、有副作用,如果强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其他意义、只负责读或写的服务,从而为编程工作增加了负担,增加了运行开销。为了避免这一点,语言往往采取一种比较灵活的做法,即允许对象有不同程度的可见性。 继承对于软件复用是十分有益的,如果将OO方法开发的类作为可复用构件,那么在开发新系统时可以直接复用这个类,还可以将其作为父类,通过继承而实现复用,从而大大扩展了复用的范围。 继承继承(Inheritance)是指子类可以自动拥有父类的全部属性和服务。继承:特殊类的对象拥有的其一般类的全部属性与服务,称作特殊类对一般类的继承。 继承简化了人们对现实世界的认识和
5、描述,在定义子类时不必重复定义那些已在父类中定义过的属性和服务,只要说明它是某个父类的子类,并定义自己特有的属性和服务即可。 一个类可以是多个父类的子类,它从多个父类中继承了属性与服务,这称为多继承多继承(Multiple Inheritance)。举例:客轮既是一种轮船,又是一种客运工具,它可以继承轮船和客运工具这两个类的属性和服务。继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extendsextends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从
6、子类指向父类,或者子接口指向父接口。 5.面向对象的基本概念继承继承多态性(Polymorphism)是指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。在体现一般与特殊关系的一个类层次结构中,不同层次的类可以共享一个操作,但却有各自不同的实现。当一个对象接收到一个请求时,它根据其所属的类,动态地选用在该类中定义的操作。 在父类几何图形中定义了一个服务绘图,但并不确定执行时绘制一个什么图形。子类椭圆和多边形都继承了几何图形类的绘图服务,但其功能却不相同:一个是画椭圆,一个是画多边形。当系统的其他部分请求绘制一个几何图形时,消息中的服务都是绘图,但椭圆和多边形接收
7、到该消息时却各自执行不同的绘图算法。 多态性机制不但为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。多态性的实现需要OOPL提供相应的支持,与多态性实现有关的语言功能包括:重载(overload)、动态绑定(dynamic binding)、类属(generic)。 1.内部类的分类 :成员内部类、静态嵌套类、方法内部类、匿名内部类。 2.内部类的定义:放在一个类的内部的类。 3.作用:可以很好的实现隐藏;拥 有外围类的所有元素的访问权限;可以实现多重继承;可以避免修改接口而实现同一类中两种同名方法的调用。1.定义:没有名字的内部类。2.使用原则: 不能有构造
8、方法; 不能定义任何静态成员,静态方法。 不能是public、protected、private、static; 只能创建匿名内部类的一个实例。1.单一职责原则(单一功能原则);2.开闭原则;3.里氏替换原则;4.接口分离原则;5.依赖倒置原则;6.迪米特法则(最少知道原则);7.优先使用组合而不是继承原则。定义:规定一个类应该只有一个发生变化的原因。(高内聚、低耦合)作用:用于控制类的粒度大小。核心:解耦和增强内聚性。好处:提高内聚、降低耦合。总结总结 众所周知,面向对象编程语言可以提高程序的封装性、复用性、可维护性,但仅仅是“可以”。能不能实现OOPL的这些优点,要看具体怎么做。如果一个类
9、的代码非常混乱,各种功能的代码都混在一起,封装性、复用性、可维护性无从谈起。 SRP是所有原则中最简单的,也是最基本的一个。运用这个原则,可以提高类的内聚性,有助于充分发挥面向对象编程语言的优势。个人观点:该原则可以有效降低耦合,减少对不必要资源的引用。但后果是造成源文件增多,给管理带来不便,所以在实际应用中,可以对经常使用或经常需要改动的模块应用该原则。 1.定义:指的是软件实体对被扩展开放,对修改关闭。(设计一个模块时,应对使这个模块可以在不被修改的前提下被扩展)。2.实现开闭原则的关键:抽象化(抽象层)。3.满足开闭原则软件系统的优越性: 通过扩展已有的软件系统,可以提供新的行为,以满足
10、对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。 这样的系统同时也满足了可复用性与可维护性。应用:高级语言中的接口与虚拟类。 好处:提高灵活性、可重用性、可维护性。总结总结 : 实现开闭原则的关键是抽象!抽象层相对稳定,不需修改,需求变化后通过重新定义抽象层的新实现来完成。 实现实现 : 实现开闭原则的关键是抽象,抽象是面向对象设计的一个核心特征。 对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西,从更高一层去思考,这降低了思考的复杂度,不用同时考虑太多的
11、东西。 定义一个抽象层,只规定功能而不提供实现,实现通过定义具体类来完成。当需求变化时,不是通过修改抽象层来完成,而是通过重新定义抽象层的新实现来完成,即通过扩展来完成。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。 这样一来,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需修改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。 即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统的结构。另一方面,对于系统的每个部分都肆意地进行抽象也不是一个好主意,应该仅仅对程序中需求频繁变化的部分进行抽
12、象。拒绝不成熟的抽象和抽象本身一样重要。 定义:所有引用基类的地方必须能透明的使用其子类的对象。(其子类对象能代替父类对象,但其父类对象不能代替子类对象。)好处好处 : 里氏替代原则是对开闭原则的扩展。如果要采用开闭原则必然用到抽象和多态,而这又离不开继承,里氏替代原则就是对如何良好继承提出了要求。总结总结 : 里氏替代原则是对开闭原则的扩展。1.“开 -闭”原则与依赖倒转原则是目标和手段的关系。2.里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原则的重要补充。定义: 客户端不 应该依赖它不需要的接口;应用: 一个类对另一个类的依赖应该建立在最小的接口上。结论: 使用多个专门的接口比
13、使用单一的接口要好。如何实现接口隔离原则如何实现接口隔离原则 ?(不应该强迫用户依赖于他们不用的方法。) 1、利用委托分离接口。 2、利用多继承分离接口。 1.解释说明: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 2.传递依赖关系的方式: 接口传递、构造方法传递 、setter方法传递。3.应用: 要依赖抽象,不要依赖于具体。即针对接口编程,不要针对实现编程。 4.关系:里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原则的重要补充。 顾名思义,就是一个对象对其他对象保持最少的了解。掌握类和类之间依赖、关联、聚合、组合关系定义定义可以简单
14、的理解,类可以简单的理解,类A A依赖于类依赖于类B B就是类就是类A A使用到了类使用到了类B B,类,类B B的变化会影响到类的变化会影响到类A A这种关系一般是偶然性的、临时性的、非常弱的这种关系一般是偶然性的、临时性的、非常弱的依赖关系总是单向的依赖关系总是单向的表现在代码层面,类表现在代码层面,类B B作为参数或局部变量被类作为参数或局部变量被类A A在某个在某个methodmethod方法中使用,此时类方法中使用,此时类A A依赖于类依赖于类B BUMLUML表示表示类类A A依赖于类依赖于类B B,用由类,用由类A A指向类指向类B B的带箭头虚线表示的带箭头虚线表示耦合(或者依
15、赖)关系的种类耦合(或者依赖)关系的种类: 1.零耦合(Nil Coupling)关系: 两个类没有耦合关系 2.具体耦合(Concrete Coupling)关系: 发生在两个具体的(可实例化的)类之间,经由一个类对另一个具体类的直接引用造成。 3.抽象耦合(Abstract Coupling)关系: 发生在一个具体类和一个抽象类(或接口)之间,使两个必须发生关系的类之间存有最大的灵活性。 class Pet class Pet / /宠物类宠物类 class Master class Master / /主人类主人类public void feed(Pet pet) public void
16、 feed(Pet pet) / / 给宠物喂食给宠物喂食 举例:举例:定义定义关联是类和类之间的一种强依赖关系关联是类和类之间的一种强依赖关系这种关系一般具有长期性这种关系一般具有长期性关联可以是单向、双向的关联可以是单向、双向的关联可分为一对一关联、一对多关联、多对多关联关联可分为一对一关联、一对多关联、多对多关联表现在代码层面表现在代码层面被关联类被关联类B B以类的属性形式出现在关联类以类的属性形式出现在关联类A A中中关联类关联类A A引用了一个类型为被关联类引用了一个类型为被关联类B B的全局变量的全局变量UMLUML表示表示用带箭头实线表示,箭头指向被关联类用带箭头实线表示,箭头
17、指向被关联类若是双向关联,实线两端可不带箭头若是双向关联,实线两端可不带箭头class Course / class Course / 课程类课程类private private intint cid; / cid; / 课程编号课程编号private String name; / private String name; / 课程名课程名 class Student /class Student /学生类学生类private private intint sidsid; / ; / 学号学号private String name; / private String name; / 姓名姓名p
18、rivate String department; / private String department; / 系别系别private Course course; / private Course course; / 所选课程所选课程 定义定义关联关系的一种特例关联关系的一种特例体现的是整体与部分的关系,即体现的是整体与部分的关系,即has-ahas-a的关系,整体与部的关系,整体与部分之间可分离,具有各自的生命周期分之间可分离,具有各自的生命周期比如计算机与比如计算机与CPUCPU、公司与员工、班级和学生、比如航母、公司与员工、班级和学生、比如航母编队包括航空母舰、驱护舰艇、舰载飞机等编
19、队包括航空母舰、驱护舰艇、舰载飞机等表现在代码层面,和关联关系是一致的,只能从语义级别表现在代码层面,和关联关系是一致的,只能从语义级别来区分来区分UMLUML表示表示以空心菱形加实线箭头表示。(有些设计软件如以空心菱形加实线箭头表示。(有些设计软件如visiovisio中,中,实线不带箭头)实线不带箭头)举例:class Employeeclass Employee / /员工类员工类private String name;private String name;private private intint age; age; class Companyclass Company / /公司类公司类private String name;private String name;private String address;private String address;private Employee private Employee employees; employees; 定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋季大学新生军训 阅兵分列式训练
- 2026年秋季初中新生军训 军训中的感恩教育课件
- 2026年承德石油高专高职单招职业适应性测试考试模拟试卷含完整答案详解(夺冠)
- 2024年太原汾河职业学院高职单招职业适应性测试考试模拟试卷附答案详解【能力提升】
- 2026年西安海棠职业学院单招职业技能考试题库及答案详解【名师系列】
- 2024年山东雁山职业学院高职单招职业适应性测试考试题库及答案详解(考点梳理)
- 人工智能在保险理赔自动化中的实践
- 2026年秋季高中新生军训 军歌学唱与士气鼓舞教学方案
- 2025年汾河文旅职业学院高职单招职业技能考试模拟试卷完整参考答案详解
- 2026年山西阳泉市单招综合素质考试题库及答案详解【夺冠系列】
- 母婴保健技术服务考核标准与操作规范手册
- 关于农业防灾减灾工作落实情况的汇报
- 2025《煤矿安全规程》“一通三防”修订内容理解课件
- 委托审价合同范本
- GB/T 29485-2025船舶与海洋技术电气舵角指示器
- 食品快检考试题及答案
- T-CEMA 048-2025 体重管理门诊建设指南
- 2025年大连辅警协警招聘考试备考题库及答案详解一套
- 2025年中级经济师考试中级保险专业真题及答案
- 服装厂生产流程标准化操作手册
- ISO22000-2018食品安全管理体系管理手册、程序文件及前提性方案一整套
评论
0/150
提交评论