面向对象的编程ppt
合集下载
面向对象程序设计(Java)PPT课件
</HEAD>
<BODY> <APPLET CODE= "J_HelloApplet.class" WIDTH= 300 HEIGHT= 80> </APPLET>
</BODY>
</HTML>
2020/3/25
23
第1章 绪论
编译源文件 &运行小应用程序
J_HelloApplet.java
J_HelloApplet.class
•{
• public void paint(Graphics g)
•{
•
g.drawString("Hello Applet.", 25, 25);
•
g.drawString("您好, 今天是:"+new Date(), 50, 50);
• } // End of method: paint
• } // End of class: J_HelloApplet
第1章 绪论
面向对象程序设计(Java)
2020/3/25
1
第1章 绪论
第 1 章 绪论
• 第1部分: • 第2部分: • 第3部分:
Java简介 开发环境的建立 我会写 Java程序
2020/3/25
2
第1章 绪论
为什么选择学习Java?
识时务者为俊杰
全球市场调查显示:
• 已经有25亿部电子设备采用Java技术,Java智 能卡发行量已经达到10亿张;
结束
MacOS 工作台
2020/3/25
25
第1章 绪论
Java的基本语法
<BODY> <APPLET CODE= "J_HelloApplet.class" WIDTH= 300 HEIGHT= 80> </APPLET>
</BODY>
</HTML>
2020/3/25
23
第1章 绪论
编译源文件 &运行小应用程序
J_HelloApplet.java
J_HelloApplet.class
•{
• public void paint(Graphics g)
•{
•
g.drawString("Hello Applet.", 25, 25);
•
g.drawString("您好, 今天是:"+new Date(), 50, 50);
• } // End of method: paint
• } // End of class: J_HelloApplet
第1章 绪论
面向对象程序设计(Java)
2020/3/25
1
第1章 绪论
第 1 章 绪论
• 第1部分: • 第2部分: • 第3部分:
Java简介 开发环境的建立 我会写 Java程序
2020/3/25
2
第1章 绪论
为什么选择学习Java?
识时务者为俊杰
全球市场调查显示:
• 已经有25亿部电子设备采用Java技术,Java智 能卡发行量已经达到10亿张;
结束
MacOS 工作台
2020/3/25
25
第1章 绪论
Java的基本语法
面向对象编程课件
面向对象编程 面向对象编程概述 • 类和对象 • 封装和数据隐藏 • 抽象类和接口 • 异常处理 • 设计模式
01
面向对象编程概述
什么是面向对象编程
面向对象编程(OOP)是一种编程范 式,它使用“对象”来设计软件和应 用程序。对象是数据和与之相关的操 作的集合。
OOP通过封装、继承和多态等机制, 使代码更易于理解和维护,并提高了 软件的可重用性和可扩展性。
面向对象编程的特点
封装
将数据(属性)和操作数据的函 数捆绑在一起,形成对象。这有 助于隐藏对象的内部状态,并控 制对它的访问。
继承
允许创建一个新类(子类),它 继承了另一个类(父类)的属性 和方法。这有助于代码重用和实 现层次结构。
多态
允许使用不同的形式表示同一概 念。在运行时,可以根据对象的 实际类型来调用适当的方法。
面向对象编程的基本概念
类
定义对象的蓝图或模板,它定义了对象的属性和方法。
对象
类的实例,具有属性和方法。
消息传递
对象之间通过消息进行通信,以请求服务或传递数据。
接口
定义了一组方法,但不实现它们。类可以实现一个或多个接口。
02
类和对象
类的定义和属性
总结词
类是面向对象编程中的一个基本概念,它定义了一类事物的 属性和方法。属性是类的特征,而方法是类的行为。
继承和多态
要点一
总结词
继承是面向对象编程中的一个重要概念,它允许一个类继 承另一个类的属性和方法。多态则是允许一个接口被多种 数据类型实现。
要点二
详细描述
继承是面向对象编程中的一个重要概念,它允许一个类继 承另一个类的属性和方法。通过继承,子类可以继承父类 的所有属性和方法,并且可以添加自己的属性和方法。多 态则是允许一个接口被多种数据类型实现。这意味着一个 接口可以有多种实现方式,可以根据实际需要选择最适合 的实现方式。多态可以提高代码的灵活性和可扩展性。
01
面向对象编程概述
什么是面向对象编程
面向对象编程(OOP)是一种编程范 式,它使用“对象”来设计软件和应 用程序。对象是数据和与之相关的操 作的集合。
OOP通过封装、继承和多态等机制, 使代码更易于理解和维护,并提高了 软件的可重用性和可扩展性。
面向对象编程的特点
封装
将数据(属性)和操作数据的函 数捆绑在一起,形成对象。这有 助于隐藏对象的内部状态,并控 制对它的访问。
继承
允许创建一个新类(子类),它 继承了另一个类(父类)的属性 和方法。这有助于代码重用和实 现层次结构。
多态
允许使用不同的形式表示同一概 念。在运行时,可以根据对象的 实际类型来调用适当的方法。
面向对象编程的基本概念
类
定义对象的蓝图或模板,它定义了对象的属性和方法。
对象
类的实例,具有属性和方法。
消息传递
对象之间通过消息进行通信,以请求服务或传递数据。
接口
定义了一组方法,但不实现它们。类可以实现一个或多个接口。
02
类和对象
类的定义和属性
总结词
类是面向对象编程中的一个基本概念,它定义了一类事物的 属性和方法。属性是类的特征,而方法是类的行为。
继承和多态
要点一
总结词
继承是面向对象编程中的一个重要概念,它允许一个类继 承另一个类的属性和方法。多态则是允许一个接口被多种 数据类型实现。
要点二
详细描述
继承是面向对象编程中的一个重要概念,它允许一个类继 承另一个类的属性和方法。通过继承,子类可以继承父类 的所有属性和方法,并且可以添加自己的属性和方法。多 态则是允许一个接口被多种数据类型实现。这意味着一个 接口可以有多种实现方式,可以根据实际需要选择最适合 的实现方式。多态可以提高代码的灵活性和可扩展性。
《面向对象的》课件
多态
允许一个接口多种形态存 在,即一个接口可以有多 个实现方式,增强了代码 的灵活性和可扩展性。
面向对象与面向过程的区别
面向对象强调的是对象之间的交互和关系,注重的是系统的整体性和复用性;而面 向过程则更注重程序的执行流程和算法的实现。
面向对象编程将数据和操作封装在一起,形成具有特定属性和行为的对象,更符合 人类的思维习惯;而面向过程编程则更注重功能模块的划分和调用。
C#
总结词
C#是一种面向对象的编程语言,由微软公司开发,具有语法严谨、易于上手的特点。
详细描述
C#语言支持类和对象的概念,提供了丰富的API和库,广泛应用于Windows桌面应用程序开发、游戏 开发等领域。C#还支持跨平台开发,可以在其他操作系统上运行。
04
面向对象的应用领域
游戏开发
游戏策划
面向对象编程有助于更好地设计和组 织游戏策划,将游戏的各种元素(如 角色、物品、关卡等)视为对象,便 于管理和扩展。
详细描述
继承是面向对象编程中的重要概念,它允许创建分等级的类。基类(也称为父类 )定义了共享的属性和方法,派生类(也称为子类)继承这些属性和方法,并可用变量来引用子类对象,调用子类 重写的方法。
详细描述
多态允许一个接口被多个类实现,一个接口引用变量可以指 向任何实现该接口的类的对象。当通过接口引用变量调用方 法时,将根据实际对象的类型来决定调用哪个实现类的方法 。
面向对象编程通过类和对象的概念实现代码的重用和扩展,提高了软件的可维护性 和可复用性;而面向过程编程则更注重程序的执行效率和算法的优化。
02
面向对象的主要技术
类与对象
总结词
类是对象的抽象,对象是类的实 例。
详细描述
面向对象课件(第一章)
属性赋值
在创建对象时,可以为对 象的属性赋值,以初始化 对象的属性值。
方法调用
对象可以调用其所属类的 方法,以执行相应的操作。
属性和方法
属性
访问修饰符
属性是对象的状态信息,它描述了对 象的基本特征。
类的属性和方法可以通过访问修饰符 来控制它们的可见性和访问权限。
方法
方法是对象的行为,它定义了对象可 以执行的操作。
继承
继承是从已有的类派生出新的类,新类继承了父类的属性和方法,并且 可以添加或覆盖父类的行为。继承有助于代码的重用和扩展。
03
多态
多态是指一个接口可以有多种实现方式,或者一个对象可以有多种形态。
多态可以提高代码的灵活性和可扩展性,使程序能够更好地适应变化。
面向对象编程的基本概念
类(Class)
类是对象的模板或蓝图,它定义了对象的属性和方法。类是一种抽象 的概念,它描述了一组具有相似属性和行为的对象的共同特征。
封装的使用方式
使用访问修饰符
在面向对象编程语言中,可以使 用访问修饰符(如public、
private、protected)来控制对 象的属性和行为的可见性,实现
封装。
定义接口
通过定义接口,规定对象的行为 和属性,实现对象之间的交互和
通信。
继承和多态
通过继承和多态等面向对象特性, 可以在不改变原有代码的基础上 对对象进行扩展和维护,实现封
能。
增强代码可维护性
02
如果父类的代码发生变化,只需修改一处,即可影响所有继承
自该父类的子类。
实现多态性
03
通过继承,可以实现多态性,使得子类可以以自己的方式实现
父类的方法,提高代码的灵活性和可扩展性。
第6章面向对象的编程.ppt
S1=new String("ABCDEFG");
S2="ABCDEFG";
6.1 “小球随机碰撞方形边框”动
画
(2)string对象的属性就有一个,简介如下。 length:返回字符串的长度。例如,在舞台工作区内创建一个动态文本框, 它的变量名字为LN,在“图层1”图层第1帧内加入如下脚本程序,运行程 序后,文本框内会显示26。
1.数组(Array)对象 数组对象是一种很常用的Flash Actionscript内置对象,在数组元素“[”和 “]”之间的名称叫做“索引”(index),数组通常用来储存同一类的数据。 数组对象可以从“动作”面板命令列表区的“内置类”→“核心”目录中 找到。 (1)指定要使用对象属性的元素。例如move[1]="a"; ,move[2]="b"; , move[3]="c"; 等。 (2)使用new Array( )创建一个数组对象并赋值。举例如下。
S1=new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); LN=S1.charAt(3) //将返回字母D ② string.Concat方法:将两个字符串组合成一个新的字符串。例如,在舞 台工作区内创建一个动态文本框,它的变量名字为LN,在“图层1”图层第 1帧内加入如下脚本程序,运行程序后,文本框内会显示字母 “ABC123DEF456”。
6.1 “小球随机碰撞方形边框”动
画
在面向对象的编程中,对象拥有它的属性和方法。属性就是一些有特殊用 途的变量,方法实际上就是函数,是为了完成对对象属性进行操作的函数, 通过函数改变变量的值,就是改变了对象的属性。对象是类的实例,程序 是由对象组成的。面向对象的程序设计是将问题抽象成许多类,将对象属 性和方法封装成一个整体,供程序设计者使用。 Flash元件库中的元件就是“类”,由元件在舞台工作区内产生的影片剪辑 实例,通过实例的“属性”面板为一个影片剪辑实例起一个名字,这个过 程就是做一次new操作,将一个元件对象(类)实例化,产生对象。 2.创建对象 可以使用new操作符通过Flash内置对象类来创建一个对象。“myDate = new date();”这条语句就是使用了Flash MX 2004的日期内置类创建了一个新 对象(也叫实例化)。这里,对象myDate可以使用内置对象date()的 getDate()等方法和属性。 使用new 操作符来创建一个对象需要使用构造函数(构造函数是一种简单 的函数,它用来创建某一类型的对象)。Actionscript 的内置对象也是一种
S2="ABCDEFG";
6.1 “小球随机碰撞方形边框”动
画
(2)string对象的属性就有一个,简介如下。 length:返回字符串的长度。例如,在舞台工作区内创建一个动态文本框, 它的变量名字为LN,在“图层1”图层第1帧内加入如下脚本程序,运行程 序后,文本框内会显示26。
1.数组(Array)对象 数组对象是一种很常用的Flash Actionscript内置对象,在数组元素“[”和 “]”之间的名称叫做“索引”(index),数组通常用来储存同一类的数据。 数组对象可以从“动作”面板命令列表区的“内置类”→“核心”目录中 找到。 (1)指定要使用对象属性的元素。例如move[1]="a"; ,move[2]="b"; , move[3]="c"; 等。 (2)使用new Array( )创建一个数组对象并赋值。举例如下。
S1=new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); LN=S1.charAt(3) //将返回字母D ② string.Concat方法:将两个字符串组合成一个新的字符串。例如,在舞 台工作区内创建一个动态文本框,它的变量名字为LN,在“图层1”图层第 1帧内加入如下脚本程序,运行程序后,文本框内会显示字母 “ABC123DEF456”。
6.1 “小球随机碰撞方形边框”动
画
在面向对象的编程中,对象拥有它的属性和方法。属性就是一些有特殊用 途的变量,方法实际上就是函数,是为了完成对对象属性进行操作的函数, 通过函数改变变量的值,就是改变了对象的属性。对象是类的实例,程序 是由对象组成的。面向对象的程序设计是将问题抽象成许多类,将对象属 性和方法封装成一个整体,供程序设计者使用。 Flash元件库中的元件就是“类”,由元件在舞台工作区内产生的影片剪辑 实例,通过实例的“属性”面板为一个影片剪辑实例起一个名字,这个过 程就是做一次new操作,将一个元件对象(类)实例化,产生对象。 2.创建对象 可以使用new操作符通过Flash内置对象类来创建一个对象。“myDate = new date();”这条语句就是使用了Flash MX 2004的日期内置类创建了一个新 对象(也叫实例化)。这里,对象myDate可以使用内置对象date()的 getDate()等方法和属性。 使用new 操作符来创建一个对象需要使用构造函数(构造函数是一种简单 的函数,它用来创建某一类型的对象)。Actionscript 的内置对象也是一种
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.单一职责原则(单一功能原则); 2.开闭原则; 3.里氏替换原则; 4.接口分离原则; 5.依赖倒置原则; 6.迪米特法则(最少知道原则); 7.优先使用
定义:规定一个类应该只有一个发生变化的原因。(高内聚、低耦合) 作用:用于控制类的粒度大小。 核心:解耦和增强内聚性。 好处:提高内聚、降低耦合。 总结 众所周知,面向对象编程语言可以提高程序的封装性、复用性、 可维护性,但仅仅是“可以”。能不能实现OOPL的这些优点,要 看具体怎么做。如果一个类的代码非常混乱,各种功能的代码都混 在一起,封装性、复用性、可维护性无从谈起。 SRP是所有原则中最简单的,也是最基本的一个。运用这个原则, 可以提高类的内聚性,有助于充分发挥面向对象编程语言的优势。 个人观点:该原则可以有效降低耦合,减少对不必要资源的引用。但 后果是造成源文件增多,给管理带来不便,所以在实际应用中,可 以对经常使用或经常需要改动的模块应用该原则。
类的三大特点
3.面向对象的基本概念--类
把众多的事物归纳并划分成一些类是人类在认识客观世 界时经常采用的思维方法,分类的原则是抽象,从那些 与当前目标有关的本质特征中找出事物的共性,并将具 有共同性质的事物划分成一类,得出一个抽象的概念。 例如:人、房屋、树木等都是一些抽象的概念,它们是 一些具有共同特征的事物的集合,称为类。类的概念使 我们能对属于该类的全部个体事物进行统一的描述,"树 具有树根、树干、树枝和树叶,它能进行光合作用",这 个描述适合所有树,而不必对每一棵具体的树进行描述。 类的三大特点:封装、继承、多态
举例:
在父类"几何图形"中定义了一个服务"绘图", 但并不确定执行时绘制一个什么图形。子类" 椭圆"和"多边形"都继承了几何图形类的绘图服 务,但其功能却不相同:一个是画椭圆,一个 是画多边形。当系统的其他部分请求绘制一个 几何图形时,消息中的服务都是"绘图",但椭 圆和多边形接收到该消息时却各自执行不同的 绘图算法。
举例:
class Pet { //宠物类 }
class Master { //主人类 public void feed(Pet pet) { // 给宠物喂食 } }
关联关系:
定义
关联是类和类之间的一种强依赖关系 这种关系一般具有长期性 关联可以是单向、双向的 关联可分为一对一关联、一对多关联、多对多关联 表现在代码层面
开闭原则
1.定义:指的是软件实体对被扩展开放,对修改关闭。 (设计一个模块时,应对使这个模块可以在不被修改 的前提下被扩展)。 2.实现开闭原则的关键:抽象化(抽象层)。 3.满足开闭原则软件系统的优越性: <1>通过扩展已有的软件系统,可以提供新的行为, 以满足对软件的新需求,使变化中的软件系统有一定 的适应性和灵活性。 <2>已有的软件模块,特别是最重要的抽象层模块不 能再修改,这就使变化中的软件系统有一定的稳定性 和延续性。 <3>这样的系统同时也满足了可复用性与可维护性。
6.面向对象的基本概念—多态
多态性(Polymorphism)是指在父类中定 义的属性或服务被子类继承后,可以具有不同 的数据类型或表现出不同的行为。 在体现一般与特殊关系的一个类层次结构 中,不同层次的类可以共享一个操作,但却有 各自不同的实现。当一个对象接收到一个请求 时,它根据其所属的类,动态地选用在该类中 定义的操作。
被关联类B以类的属性形式出现在关联类A中 关联类A引用了一个类型为被关联类B的全局变量
UML表示
用带箭头实线表示,箭头指向被关联类 若是双向关联,实线两端可不带箭头
举例:
class } class
Course { // 课程类 private int cid; // 课程编号 private String name; // 课程名
注:
多态性机制不但为软件的结构设计提供了 灵活性,减少了信息冗余,明显提高了软件的 可复用性和可扩充性。多态性的实现需要 OOPL提供相应的支持,与多态性实现有关的 语言功能包括:重载(overload)、动态绑定 (dynamic binding)、类属(generic)。
内部类
内部类:
1.内部类的分类 :成员内部类、静态嵌套类、 方法内部类、匿名内部类。 2.内部类的定义:放在一个类的内部的类。 3.作用:<1>可以很好的实现隐藏;<2>拥 有外围类的所有元素的访问权限;<3>可以实 现多重继承;<4>可以避免修改接口而实现同 一类中两种同名方法的调用。
总结 : 实现开闭原则的关键是抽象!抽象层相对稳定,不需修改,需求变化后通过 重新定义抽象层的新实现来完成。
里氏替换原则:
定义:所有引用基类的地方必须能透明的使用其子类的对象。(其子 类对象能代替父类对象,但其父类对象不能代替子类对象。) 好处 : 里氏替代原则是对开闭原则的扩展。如果要采用开闭原则必然 用到抽象和多态,而这又离不开继承,里氏替代原则就是对如何良 好继承提出了要求。 总结 : 里氏替代原则是对开闭原则的扩展。 1.“开 -闭”原则与依赖倒转原则是目标和手段的关系。 2.里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原 则的重要补充。
应用:高级语言中的接口与虚拟类。 好处:提高灵活性、可重用性、可维护性。
实现 : 实现开闭原则的关键是抽象,抽象是面向对象设计的一个核心特征。 对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东 西,从更高一层去思考,这降低了思考的复杂度,不用同时考虑太多的东西。 定义一个抽象层,只规定功能而不提供实现,实现通过定义具体类来完成。当需求变化 时,不是通过修改抽象层来完成,而是通过重新定义抽象层的新实现来完成,即通过扩展 来完成。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。 这样一来,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需修改, 从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对 扩展开放”。 即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统 的结构。另一方面,对于系统的每个部分都肆意地进行抽象也不是一个好主意,应该仅仅 对程序中需求频繁变化的部分进行抽象。拒绝不成熟的抽象和抽象本身一样重要。
4.面向对象的基本概念—封装
副作用: 封装也有副作用,如果强调严格的封装, 则对象的任何属性都不允许外部直接存取,因 此就要增加许多没有其他意义、只负责读或写 的服务,从而为编程工作增加了负担,增加了 运行开销。为了避免这一点,语言往往采取一 种比较灵活的做法,即允许对象有不同程度的 可见性。
5.面向对象的基本概念—继承
继承对于软件复用是十分有益的, 如果将OO方法开发的类作为可复用构 件,那么在开发新系统时可以直接复用 这个类,还可以将其作为父类,通过继 承而实现复用,从而大大扩展了复用的 范围。
5.面向对象的基本概念—继承
性和服务。 继承:特殊类的对象拥有的其一般类的全部属性与服务,
迪米特法则(最少知道原则):
顾名思义,就是一个对象对其他对 象保持最少的了解。
类与类之间的 关系
目标:
掌握类和类之间依赖、关联、聚合、组合关系
依赖关系:
定义
可以简单的理解,类A依赖于类B就是类A使用到了类B, 类B的变化会影响到类A 这种关系一般是偶然性的、临时性的、非常弱的 依赖关系总是单向的 表现在代码层面,类B作为参数或局部变量被类A在某个 method方法中使用,此时类A依赖于类B
}
Student { //学生类 private int sid; // 学号 private String name; // 姓名 private String department; // 系别 private Course[ ] course; // 所选课程
接口分离原则:
定义: 客户端不 应该依赖它不需要的接口; 应用: 一个类对另一个类的依赖应该建立在最小 的接口上。 结论: 使用多个专门的接口比使用单一的接口要好。
如何实现接口隔离原则 ?
(不应该强迫用户依赖于他们不用的方法。) 1、利用委托分离接口。
2、利用多继承分离接口。
依赖倒置原则:
1.解释说明: 高层模块不应该依赖低层模块,二者都应该依赖其 抽象;抽象不应该依赖细节,细节应该依赖抽象。 2.传递依赖关系的方式: 接口传递、构造方法传递 、setter方法传递。 3.应用: 要依赖抽象,不要依赖于具体。即针对接口编程, 不要针对实现编程。 4.关系:里氏代换原则是依赖倒转原则的基础,依赖倒 转原则是里氏代换原则的重要补充。
服务允许对象外部存取和引用的程度。
在软件上,封装要求对象以外的部分不能随意存取对象 的内部数据(属性),从而有效地避免了外部错误对它的"交 叉感染",使软件错误能够局部化,大大减少了查错和排错的 难度。另外,当对象内部需要修改时,由于它只通过少量的 服务接口对外提供服务,便大大减少了内部修改对外部的影 响,即减少了修改引起的"波动效应"。
继承(Inheritance)是指子类可以自动拥有父类的全部属
称作特殊类对一般类的继承。 继承简化了人们对现实世界的认识和描述,在定义子 类时不必重复定义那些已在父类中定义过的属性和服务, 只要说明它是某个父类的子类,并定义自己特有的属性和 服务即可。 一个类可以是多个父类的子类,它从多个父类中继承 了属性与服务,这称为多继承(Multiple Inheritance)。 举例:客轮既是一种轮船,又是一种客运工具,它可 以继承轮船和客运工具这两个类的属性和服务。
UML表示
类A依赖于类B,用由类A指向类B的带箭头虚线表示
定义:规定一个类应该只有一个发生变化的原因。(高内聚、低耦合) 作用:用于控制类的粒度大小。 核心:解耦和增强内聚性。 好处:提高内聚、降低耦合。 总结 众所周知,面向对象编程语言可以提高程序的封装性、复用性、 可维护性,但仅仅是“可以”。能不能实现OOPL的这些优点,要 看具体怎么做。如果一个类的代码非常混乱,各种功能的代码都混 在一起,封装性、复用性、可维护性无从谈起。 SRP是所有原则中最简单的,也是最基本的一个。运用这个原则, 可以提高类的内聚性,有助于充分发挥面向对象编程语言的优势。 个人观点:该原则可以有效降低耦合,减少对不必要资源的引用。但 后果是造成源文件增多,给管理带来不便,所以在实际应用中,可 以对经常使用或经常需要改动的模块应用该原则。
类的三大特点
3.面向对象的基本概念--类
把众多的事物归纳并划分成一些类是人类在认识客观世 界时经常采用的思维方法,分类的原则是抽象,从那些 与当前目标有关的本质特征中找出事物的共性,并将具 有共同性质的事物划分成一类,得出一个抽象的概念。 例如:人、房屋、树木等都是一些抽象的概念,它们是 一些具有共同特征的事物的集合,称为类。类的概念使 我们能对属于该类的全部个体事物进行统一的描述,"树 具有树根、树干、树枝和树叶,它能进行光合作用",这 个描述适合所有树,而不必对每一棵具体的树进行描述。 类的三大特点:封装、继承、多态
举例:
在父类"几何图形"中定义了一个服务"绘图", 但并不确定执行时绘制一个什么图形。子类" 椭圆"和"多边形"都继承了几何图形类的绘图服 务,但其功能却不相同:一个是画椭圆,一个 是画多边形。当系统的其他部分请求绘制一个 几何图形时,消息中的服务都是"绘图",但椭 圆和多边形接收到该消息时却各自执行不同的 绘图算法。
举例:
class Pet { //宠物类 }
class Master { //主人类 public void feed(Pet pet) { // 给宠物喂食 } }
关联关系:
定义
关联是类和类之间的一种强依赖关系 这种关系一般具有长期性 关联可以是单向、双向的 关联可分为一对一关联、一对多关联、多对多关联 表现在代码层面
开闭原则
1.定义:指的是软件实体对被扩展开放,对修改关闭。 (设计一个模块时,应对使这个模块可以在不被修改 的前提下被扩展)。 2.实现开闭原则的关键:抽象化(抽象层)。 3.满足开闭原则软件系统的优越性: <1>通过扩展已有的软件系统,可以提供新的行为, 以满足对软件的新需求,使变化中的软件系统有一定 的适应性和灵活性。 <2>已有的软件模块,特别是最重要的抽象层模块不 能再修改,这就使变化中的软件系统有一定的稳定性 和延续性。 <3>这样的系统同时也满足了可复用性与可维护性。
6.面向对象的基本概念—多态
多态性(Polymorphism)是指在父类中定 义的属性或服务被子类继承后,可以具有不同 的数据类型或表现出不同的行为。 在体现一般与特殊关系的一个类层次结构 中,不同层次的类可以共享一个操作,但却有 各自不同的实现。当一个对象接收到一个请求 时,它根据其所属的类,动态地选用在该类中 定义的操作。
被关联类B以类的属性形式出现在关联类A中 关联类A引用了一个类型为被关联类B的全局变量
UML表示
用带箭头实线表示,箭头指向被关联类 若是双向关联,实线两端可不带箭头
举例:
class } class
Course { // 课程类 private int cid; // 课程编号 private String name; // 课程名
注:
多态性机制不但为软件的结构设计提供了 灵活性,减少了信息冗余,明显提高了软件的 可复用性和可扩充性。多态性的实现需要 OOPL提供相应的支持,与多态性实现有关的 语言功能包括:重载(overload)、动态绑定 (dynamic binding)、类属(generic)。
内部类
内部类:
1.内部类的分类 :成员内部类、静态嵌套类、 方法内部类、匿名内部类。 2.内部类的定义:放在一个类的内部的类。 3.作用:<1>可以很好的实现隐藏;<2>拥 有外围类的所有元素的访问权限;<3>可以实 现多重继承;<4>可以避免修改接口而实现同 一类中两种同名方法的调用。
总结 : 实现开闭原则的关键是抽象!抽象层相对稳定,不需修改,需求变化后通过 重新定义抽象层的新实现来完成。
里氏替换原则:
定义:所有引用基类的地方必须能透明的使用其子类的对象。(其子 类对象能代替父类对象,但其父类对象不能代替子类对象。) 好处 : 里氏替代原则是对开闭原则的扩展。如果要采用开闭原则必然 用到抽象和多态,而这又离不开继承,里氏替代原则就是对如何良 好继承提出了要求。 总结 : 里氏替代原则是对开闭原则的扩展。 1.“开 -闭”原则与依赖倒转原则是目标和手段的关系。 2.里氏代换原则是依赖倒转原则的基础,依赖倒转原则是里氏代换原 则的重要补充。
应用:高级语言中的接口与虚拟类。 好处:提高灵活性、可重用性、可维护性。
实现 : 实现开闭原则的关键是抽象,抽象是面向对象设计的一个核心特征。 对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东 西,从更高一层去思考,这降低了思考的复杂度,不用同时考虑太多的东西。 定义一个抽象层,只规定功能而不提供实现,实现通过定义具体类来完成。当需求变化 时,不是通过修改抽象层来完成,而是通过重新定义抽象层的新实现来完成,即通过扩展 来完成。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。 这样一来,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需修改, 从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对 扩展开放”。 即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统 的结构。另一方面,对于系统的每个部分都肆意地进行抽象也不是一个好主意,应该仅仅 对程序中需求频繁变化的部分进行抽象。拒绝不成熟的抽象和抽象本身一样重要。
4.面向对象的基本概念—封装
副作用: 封装也有副作用,如果强调严格的封装, 则对象的任何属性都不允许外部直接存取,因 此就要增加许多没有其他意义、只负责读或写 的服务,从而为编程工作增加了负担,增加了 运行开销。为了避免这一点,语言往往采取一 种比较灵活的做法,即允许对象有不同程度的 可见性。
5.面向对象的基本概念—继承
继承对于软件复用是十分有益的, 如果将OO方法开发的类作为可复用构 件,那么在开发新系统时可以直接复用 这个类,还可以将其作为父类,通过继 承而实现复用,从而大大扩展了复用的 范围。
5.面向对象的基本概念—继承
性和服务。 继承:特殊类的对象拥有的其一般类的全部属性与服务,
迪米特法则(最少知道原则):
顾名思义,就是一个对象对其他对 象保持最少的了解。
类与类之间的 关系
目标:
掌握类和类之间依赖、关联、聚合、组合关系
依赖关系:
定义
可以简单的理解,类A依赖于类B就是类A使用到了类B, 类B的变化会影响到类A 这种关系一般是偶然性的、临时性的、非常弱的 依赖关系总是单向的 表现在代码层面,类B作为参数或局部变量被类A在某个 method方法中使用,此时类A依赖于类B
}
Student { //学生类 private int sid; // 学号 private String name; // 姓名 private String department; // 系别 private Course[ ] course; // 所选课程
接口分离原则:
定义: 客户端不 应该依赖它不需要的接口; 应用: 一个类对另一个类的依赖应该建立在最小 的接口上。 结论: 使用多个专门的接口比使用单一的接口要好。
如何实现接口隔离原则 ?
(不应该强迫用户依赖于他们不用的方法。) 1、利用委托分离接口。
2、利用多继承分离接口。
依赖倒置原则:
1.解释说明: 高层模块不应该依赖低层模块,二者都应该依赖其 抽象;抽象不应该依赖细节,细节应该依赖抽象。 2.传递依赖关系的方式: 接口传递、构造方法传递 、setter方法传递。 3.应用: 要依赖抽象,不要依赖于具体。即针对接口编程, 不要针对实现编程。 4.关系:里氏代换原则是依赖倒转原则的基础,依赖倒 转原则是里氏代换原则的重要补充。
服务允许对象外部存取和引用的程度。
在软件上,封装要求对象以外的部分不能随意存取对象 的内部数据(属性),从而有效地避免了外部错误对它的"交 叉感染",使软件错误能够局部化,大大减少了查错和排错的 难度。另外,当对象内部需要修改时,由于它只通过少量的 服务接口对外提供服务,便大大减少了内部修改对外部的影 响,即减少了修改引起的"波动效应"。
继承(Inheritance)是指子类可以自动拥有父类的全部属
称作特殊类对一般类的继承。 继承简化了人们对现实世界的认识和描述,在定义子 类时不必重复定义那些已在父类中定义过的属性和服务, 只要说明它是某个父类的子类,并定义自己特有的属性和 服务即可。 一个类可以是多个父类的子类,它从多个父类中继承 了属性与服务,这称为多继承(Multiple Inheritance)。 举例:客轮既是一种轮船,又是一种客运工具,它可 以继承轮船和客运工具这两个类的属性和服务。
UML表示
类A依赖于类B,用由类A指向类B的带箭头虚线表示