四、面向对象介绍 结构化程序设计、面向对象程序设计、面向对象设计的特征和优缺点

一、结构化程序设计

传统的程序设计方法可以归结为“ 程序 = 算法 + 数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是 面向过程的,特点是数据与程序分离,即 数据与数据处理分离
结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。如下图:

  但是,这种设计方式有着显著的一些问题:
  • 程序难以管理
  • 数据修改存在问题
  • 程序可重用性差
  • 用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
  • 用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。
  这种问题的根源在于数据和数据的处理不能分离。
二、面向对象程序设计
面向对象(ObjectOriented )是认识事务的一种方法,是一种以对象为中心的思维方式面向将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。
面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体—— 对象( object ,同类对象还可抽象出共性,形成 类( class 。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的 接口。对象之间通过 消息( message 进行通讯。
  (1)、过程抽象和数据抽象
结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
  (2)、面向对象的基本特征
1、抽象:抽象是抓住事物的本质,不关心其具体实现
2、封装:封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。封装性增加了对象的独立性,从而保证了数据的可靠性。外部对象不能直接操作对象的属性,只能使用对象提供的服务。
3、继承:继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
4、多态:从名字可以看出,多态指的是不同的行为。同一个消息被不同对象接收时,产生不同结果,即实现同一接口,用不同方法去实现。一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
5、继承和多态:继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。
  (3)、面向对象程序设计优缺点
面向对象编程的优点:
  • 易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
  • 质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
  • 效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
  • 易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
面向对象编程的缺点:
  • 运行效率会下降10%左右
  • 继承的缺点:在客观的世界里有很多东西不能准确的划分类别,比如蝙蝠,即是鸟类,也是兽类。另一个例子假如我们定义了一个鸟类的抽象接口,里面有一个会飞的function,那么继承自鸟类的鸡就不能飞。解决这些问题的一个方法是降低抽象的粒度。

你可能感兴趣的:(C++基础)