(06)面向对象介绍

1.程序

  • 编写程序是为了让计算机解决现实生活中的实际问题
    (1)用一定的数据来表示
    (2)按照一定的逻辑来处理这些数据
    即:程序=算法(逻辑)+数据结构(数据)
    (3)更多的要站在机器的角度来考虑问题

2.结构化程序设计

  • 传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。
    这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。

  • 结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。
    其理念是将大型程序分解成小型、便于管理的任务。
    如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。

  • 结构化设计是以算法为中心,而不是以数据为中心
    (06)面向对象介绍

  • 结构化程序设计的缺点
    (1)程序难以管理
    (2)数据修改存在问题
    (3)程序可重用性差
    (4)用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
    (5)用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。

  • 面向过程程序设计缺点的根源在于数据与数据处理分离

3.面向对象程序设计

  • 面向将系统看成通过交互作用来完成特定功能的对象的集合。
    每个对象用自己的方法来管理数据。
    也就是说只有对象内部的代码能够操作对象内部的数据。
  • 程序=对象+对象+发送消息
    对象=算法+数据
  • 面向对象(Object Oriented )是认识事务的一种方法,是一种以对象为中心的思维方式
  • 面向对象的程序设计:
    (1)对象=(算法+数据结构),算法和数据结构是结合的
    (2)程序=对象+对象+……+对象
  • 面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object),同类对象还可抽象出共性,形成类(class )。
    一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。
    对象之间通过消息(message)进行通讯。

4.过程抽象与数据抽象

  • 结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
    (1)以算法为中心,以过程为中心。
    (2)操作数据的代码与数据是分离的。数据发生了变化,就会影响到这些代码。
  • 数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
    (1)先考虑系统由哪些功能的数据(对象)构成的;
    (2)代码与数据是紧密结合的;
    (3)对象与对象之间的流程(相互关系)没有考虑清除,该对象也是可以复用的

5.实体、对象、类之间的关系

-  现实世界中的实体可以抽象出类别的概念。
 对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存
 左图表达了计算机世界与现实世界之间的对应关系。
(06)面向对象介绍

6.从计算机的观点看对象

  • 对象是计算机内存中的一块区域。通过内存分块每个对象在功能上相对保持独立。
  • 这些内存不但存储数据,也存储代码。
    这保证对象是受保护的,只有对象中的代码能访问存储于对象中的数据。
    这清楚地限定了对象所具有的功能,并且使得对象不受未知外部事件的影响,从而使自己的数据和功能不会因此遭受破坏。
  • 对象之间只能通过函数调用也就是发送消息来实现相互通信。
  • 当对象的一个函数被调用时,对象执行内部的代码来响应该调用,从而使对象呈现一定的行为。
    这个行为及其呈现出来的结果就是该对象所具有的功能。

7.面向对象的基本特征

  • 抽象
  • 封装
  • 继承
  • 多态

8.抽象

  • 抽象是人们认识事物的一种方法
  • 抓住事物本质,而不是内部具体细节或具体实现
    从具体到一般的过程,就称之为抽象

9.封装

  • 封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。
  • 通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。
  • 封装性增加了对象的独立性,从而保证了数据的可靠性。
  • 外部对象不能直接操作对象的属性,只能使用对象提供的服务。
  • eg:我们不用关心电视机的内部工作原理,电视机提供了选台、调节音量等功能让我们使用。
    (06)面向对象介绍

10.继承

  • 继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。
  • 当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。
  • 继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
    从对象——>类(归类),从特殊到一般的过程;
    大类——>小类(分类),从一般到特殊的过程
  • eg:继承具有传递性,如汽车具有车的全部属性和行为。
    (06)面向对象介绍

11.多态

  • 多态性:同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。
  • 一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
  • eg:当向图形对象发送消息进行绘图服务请求后,图形对象会自动判断自己的所属类然后执行相应的绘图服务。
    (06)面向对象介绍

12.继承与多态

  • 继承和多态性组合,可以生成很多相似但又独一无二的对象。
  • 继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。

13.面向对象思想总结

  • 面向对象是一种认识世界的方法,也是一种程序设计方法
  • 面向对象的观点认为,客观世界是由各种各样的实体,也就是对象组成的。
  • 每种对象都有自己的内部状态和运动规律。
  • 不同的对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。

14.面向对象编程方法的特性

  • 程序设计的重点在数据而不是函数
  • 程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
  • 对象之间通过相互协作来完成功能
  • 函数与相关的数据紧密结合
  • 数据可以被隐藏
  • 很容易扩充新的数据和函数,开闭原则:对对象的行为增加开放,对修改删除关闭,这样使用该对象的原有系统就不会发生改变。

15.面向对象编程的优缺点

  • 面向对象编程的优点:
    (1)易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
    (2)质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
    (3)效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
    面向过程:站在问题空间,但是以算法为中心
    面向过程:站在问题空间,但是以对象为中心

    (4)易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
  • 面向对象编程的缺点:
    运行效率会下降10%左右