Presentation is loading. Please wait.

Presentation is loading. Please wait.

第一章 面向对象程序设计.

Similar presentations


Presentation on theme: "第一章 面向对象程序设计."— Presentation transcript:

1 第一章 面向对象程序设计

2 教学目标 比较面向对象与面向过程程序设计 类与对象 封装与信息隐藏 继承 多态性 面向对象的建模和UML

3 1.1比较面向对象与面向过程程序设计 面向过程程序设计 程序由多个模块构成 自顶向下的功能分解法 程序组成单位:过程或函数
一个要解决的问题被分解成若干个子问题,每个子问题又被划分成若干个子子问题。这种自顶向下的功能分解一直持续下去,直到子问题足够简单,可以在相应的子过程中解决。 存在问题:把数据和处理数据的过程分离 可复用性差 、开发和维护都很困难。

4 面向过程程序设计 int max(int num1,int num2) { if (num1>num2) return num1;
else return num2; { 图1-1:自顶向下的功能分解与程序结构

5 面向对象程序设计 将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。
程序由类组成:对相同类型的对象进行分类、抽象后,得出共同的特性而形成了类。 面向对象其实是现实世界模型的自然延伸。 对象之间通过消息相互作用,完成系统功能. 程序模块间的关系简单,程序的独立性高、数据安全。 面向对象方法的显著特性有:封装性、抽象性、继承性和多态性,使软件具有可重用性,开发和维护的代价小。

6 1.2 类与对象 面向对象的设计: 将客观事物(或实体)看作具有属性和行为(或称服务)的对象(object),通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),而形成类(class)的概念。 程序的执行,表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。 类是相同对象的集合的描述。 例如,类Human就是现实世界中人(对象)的集合,我、你、他都是Human的对象。 分析类Human的所有对象——人,得到对象的共同的数据属性和行为,如下所示: 数据属性:编号、姓名、年龄,… 行为:吃饭、走路、跳舞, …

7 1.2 类与对象(续) 定义Human类: class Human { int no; String name; int age; …
void eat() {…} } Human被称作类名。 no,name,age被称作变量或域(fields), eat()被称作方法(methods),它们都是类的成员。

8 1.2 类与对象(续) 在面向对象的编程语言中, 类是一个数据类型 对象是类的实例(instance)。
在Java中,具有类类型的变量在Java中被称作对象引用(object reference)。 例如,Human p1=new Human(1,“张三”,20,…); p1被称作对象引用变量,new Human(1,”张三“,20,…) 被称作Human的对象。

9 对象 面向对象系统中的对象:是用来描述现实世界中实际存在的事物的实体,它是用来构成系统的一个单位。对象由一组属性和一组行为构成。
具体地,对象是具有唯一对象名和固定对外接口的一组属性和操作的集合,用来模拟组成或影响现实世界问题的一个或一组因素。其中对象名是区别于其他对象的标志;对外接口是对象在约定好的运行框架和消息传递机制中与外界通信的通道; 对象的属性表示了它所处于的状态;而对象的操作则是用来改变对象状态达到特定的功能。

10 1.3 封装与信息隐藏 封装(Encapsulation)是面向对象方法的重要原则。
就是把对象的属性和操作(或服务)结合为一个独立的整体(系统单位),并尽可能隐藏对象的内部实现细节。 封装有两个含义: 其一,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位。 其二,“信息隐蔽”,尽可能隐蔽对象的内部细节,对外界形成一个边界,只保留有限的对外接口使之与外部发生联系。

11 1.3 封装与信息隐藏(续) 数据封装的作用: (1) 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作相容的负担。 (2)对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

12 1.3 封装与信息隐藏(续) Java语言中,定义类时通过大括号{ }封装了类的成员:域(变量)和方法,并使用private和public等关键字来控制对类的成员的访问,其中private修饰的成员是隐藏的,而public修饰的成员则定义了类对外的公共接口。 类作为一个抽象的数据类型,允许用户从底层实现细节中抽象出来,提供给用户的是在公共接口上的上层操作。这是抽象性的含义。

13 1.4 继承 继承(Inheritance)支持着软件代码的复用,是提高软件开发效率的重要因素之一。
继承是在已有类(父类或超类)的基础上派生出新的类(子类),新的类能够吸收已有类的属性和行为,并扩展新的能力。 继承机制中,往往从一组类中抽象出公共属性放在父类。例如,给定类Car、Motocycle和Truck,我们把它们的公共属性放在一个称为Vehicle的公共父类中。

14 1.4 继承(续) Java中的继承的一个例子:给定一个Window类,通过继承扩展它而得到一个子类MenuWin。 class Win {
} class MenuWin extends Win { … //MenuWin新增加成员的定义

15 1.4 继承(续) 继承分为单继承和多继承。 单继承是指一个子类最多只能有一个父类。
多继承是一个子类可有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。 如何设计继承并完成继承层次是面向对象设计和编程的核心问题。继承是多态性的前提条件。

16 object Win DialogWin 多继承,in C++ 单继承,in java Class 1 Class 2 Class 3

17 1.5 多态性 多态性(Polymorphism):指在超类中定义的属性或行为,被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在超类及其各个子类中具有不同的语义。

18 1.5 多态性(续) 例如:定义一个几何图形类Shape,它具有“画图”行为,用draw()表示。但具体画什么图并不确定; 定义Shape类的一些子类如Circle圆和Rectangle矩形。 在子类中“画图”的具体行为可重新定义为:圆类中draw()画圆,矩形类中draw()画矩形。定义Shape s;s作为引用变量可指向Circle圆类的对象,也可指向Rectangle矩形类的对象。通过执行下面的代码: s.draw(); //s调用draw()方法,s指向对象不同会画出不同的图形(圆或矩形)

19 本节小结 面向对象的设计特性:抽象性、封装性、多态性和继承性,必须在实际的面向对象系统设计中体现。
将面向对象设计方法应用于程序的开发工具和开发过程中,不仅可以加快开发的速度,还可极大地增强程序的可维护性和可扩展性,提高代码重用率。

20 1.6 面向对象的建模和UML 统一建模语言(Unified Modeling Language,UML)是一种流行的建模语言。

21 1.6 面向对象的建模和UML(续) 作为一个建模语言, UML由一个用于表达模型的词汇表和一个定义怎样组合词汇的语法规则构成,即:
UML = UML词汇表 + UML建模的语法规则 UML词汇表 = UML 事物+ 关系+ 模型图。 UML 事物(Thing)就是被模拟的实体或对象。事物可能是包、类、接口等等。 事物之间的语义上的联系用关系表示,UML中共有4种关系,它们是:依赖关系、关联关系、泛化关系和实现关系。 从软件的体系结构出发,UML把软件模型分成了四个视图:用例视图、逻辑视图、实现视图和分布视图。 在本书的有关章节中,案例分析和设计的结果用UML图形化表示,使读者对UML有一个感性化认识。

22 小结 比较了面向过程程序设计与面向对象程序设计方法各自的特点。 面向对象编程和设计关键性的概念: 类是一组对象集合的描述。
对象是类的一个特例,对象通过接口交互; 引用变量的类型是某个类的变量,其值是对象的地址(或称做指向一个对象)。 封装性、抽象性、继承性和多态性必须在以后的程序设计中体现。 UML是面向对象的建模语言。


Download ppt "第一章 面向对象程序设计."

Similar presentations


Ads by Google