类和对象的特性——面向对象程序设计方法概述

C语言——面向过程的程序设计思想

  • 自顶向下,逐步求精
  • 一个main函数+若干子函数

C++语言——面对对象的程序设计思想

  • 实现软件设计的产业化
  • 自然界是由实体(对象)组成的

面向对象程序设计方法概述

  • C++并不是一种纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型的语言。
  • 在基于过程的程序中,函数是构成程序的基本部分,程序面对的是一个个函数。每个函数都是独立存在于程序中,除了主函数只能被操作相同调用外,各函数可以相互调用。而在面向对象的程序中,除主函数外,其他函数基本上都是出现在"类"中的,只有通过类才能调用类中的函数,程序面对的是一个个的类和对象。
  • 凡是以类对象为基本构成单位的程序称为基于对象的程序。而面向对象程序设计则还有更多要求。面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。C++的类对象体现了抽象和封装的特性,在此基础上再利用继承和多态性,就成为真正的面向对象的程序设计。
  • 为了与基于过程作比较,往往把基于对象程序设计和面向对象程序设计统称为面向对象程序设计。

对象

  • 客观世界中任何一个事物都可以看成是一个对象。或者说,客观世界是由千千万万个对象组成的。任何一个对象都应当具有两个要素,即属性(静态特征)和行为(动态特征)。对象是由一组属性和一组行为构成的。
  • 在一个系统中多个对象之间通过一定的渠道相互联系。要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。
  • 在C++中,每个对象都是由数据函数(即操作代码)这两部分组成的。数据体现了"属性";函数是用来对数据进行操作的,以便实现某些功能。

封装与信息屏蔽

  • 可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的、甚至是不可知的。例如录像机里有电路板和机械控制部件,但是外面是看不到的,从外面看它只是一个"黑箱子",在它的表面有几个按键,这就是录像机与外界的接口,人们不必了解录像机里面的结构和工作原理,只须知道按下某一个键就能使录像机执行相应的操作。
  • 这样做的好处是大大降低了人们操作对象的复杂程度,使用对象的人完全可以不必知道对象内部的具体细节,只须了解其外部功能即可自如地操作对象。在设计一个对象时,要周密地考虑如何进行封装,把不必让外界知道的部分"隐蔽"起来。也就是说,把对象的内部实现和外部行为分隔开来。人们在外部进行控制,而具体的操作细节是在内部实现的,对外界是不透明的。
  • 面向对象程序设计方法的一个重要特点就是"封装性"(encapsulation),所谓"封装",指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为信息隐蔽(information hiding)。信息隐蔽还有利于数据安全,防止无关的人了解和修改数据。
  • C++类对象中的函数名就是对象的对外接口,外界可以通过函数名调用这些函数来实现某些行为(功能)。

抽象

  • 在程序设计方法中,常用到抽象(abstraction)这一名词。其实"抽象"这一概念并不抽象,而是很具体的。
  • 抽象的作用是表示同一类事物的本质。如果你会使用自己家里的电视机,你到别人家里看到即使是不同牌子的电视机,肯定也能对它进行操作,因为它具有所有电视机所共有的特性。C和C+中的数据类型就是对一批具体的数的抽象。例如,"整型数据"是对所有整数的抽象。
  • 对象是具体存在的,如一个三角形可以作为一个对象,10个不同尺寸的三角形是10个三角形对象。这10个三角形对象具有相同的属性和行为(只是具体边长值不同),可以将它们抽象为一种类型,称为三角形类型。在C++中,这种类型就称为"类(class)"。这10个三角形就是属于同一"类"的对象。类是对象的抽象,而对象则是类的特例,即类的具体表现形式。

继承与重用

  • 如果在软件开发中已经建立了一个名为A的"类",又想另外建立一个名为B"类",而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为,显然不必再从头设计一个新类,而只须在类A的基础上增加一些新内容即可。这就是面向对象
    序设计中的继承机制。利用继承可以简化程序设计的步骤。
  • "白马"继承了"马"的基本特征,又增加了新的特征(颜色),“马"是父类,或称为基类,“白马"是从"马"派生出来的,称为子类或派生类。如果还想定义"白公马”,只须说明"白公马是雄性的白马”。"白公马"又是"白马"的子类或派生类。
  • C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个的类,这就可以重用已有软件中的一部分甚至大部分,大大节省了编程工作量。这就是说的"软件重用"(software reusability)的思想,不仅可以利用自己过去所建立的类,而且可以利用别人使用的类或存放在类库中的类,对这些类作适当加工即可使用,大大缩短了软件开发周期,对于大型软件的开发具有重要意义。

多态性

  • 在C++中,所谓多态性(polymorphism)是指:由继承而产生的不同的派生类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。

面向对象程序设计的特点

  • 传统的基于过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。程序设计者必须考虑每一个细节,当程序规模较大、数据很多、操作种类繁多时程序设计者往往感到难以应付。
  • 面向对象程序设计采取的是另一种思路。 它面对的是一个个对象。实际上,每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。
  • 程序设计者的任务包括两个方面:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。

类和对象的作用

  • 类是C++中十分重要的概念,它是实现面向对象程序设计的基础。C++对C的改进,最重要的就是增加了"类"这样一种类型。所以C++开始时被称为"带类的C"。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。如果一种计算中不包含类,它就不能称为面向对象的语言。一个有一定规模的C++程序是由许多类所构成的。可以说,类是C++的灵魂,如果不真正掌握类,就不能真正掌握C++。
  • 基于对象程序设计所面对的是对象。所有的数据分别属于不同的对象。基于过程的程序中数据是公用的,或者说是共享的,这些数据是缺乏保护的。数据的交叉使用很容易出现程序的错误。而实际上,程序中的每一组数据都是特定用途的,是为某种操作而准备的,也就是说,一组数据是与一组操作相对应的。因此人们把相关的数据和操作放在一起,形成一个整体,与外界相对分隔。这就是面向对象的程序设计中的对象
基于过程的结构化程序设计基于对象和面向对象程序设计
程序=算法+数据结构对象=算法+数据结构
程序=(对象+对象+对象+…)+消息
  • 消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象以及确定向这些对象发出的命令,使各对象完成相应的操作

面向对象的软件开发

  • 面向对象的软件工程包括以下几个部分:面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)、面向对象测试(OOT)、面向对象维护(OOM)

面向对象分析(Object Oriented Analysis)

  • 软件工程中的系统分析阶段,系统分析员要和用户结合在一起,对用户的需求做出精确的分析和明确的描述,从宏观的角度概括出系统应该做什么(而不是怎么做)。面向对象的分析,要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类来表示。建立一个能反映真实工作情况的需求模型。在这个阶段所形成的模型是比较粗略的(而不是精细的)。

面向对象设计(Object Oriented Design)

  • 根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计,首先是进行类的设计,类的设计可能包含多个层次(利用继承与派生)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。在设计阶段,并不牵涉某一种具体的计算机语言,而是用一种更通用的描述工具(如伪代码或流程图)来描述。

面向对象编程(Object Oriented Programming)

  • 根据面向对象设计的结果,用一种计算机语言把它写成程序,显然应当选用面向对象的计算机语言(例如C++),否则是无法实现面向对象设计的要求的。

面向对象测试(Object Oriented Test)

  • 在写好程序后交给用户使用前,必须对程序进行严格的测试。测试的目的是发现程序的错误并改正。面向对象测试时用面向对象的方法进行测试,以类作为测试的基本单元。

面向对象维护(Object Oriented Maintenance)

  • 正如对任何产品都需要进行售后服务和维护一样,软件在使用中也会出现一些问题,或者软件商想改进软件的性能,这就需要修改程序。由于使用了面向对象的方法开发程序,使得程序的维护比较容易了。因为对象的封装性,修改一个对象对其他对象影响很小。利用面向对象方法的方法维护程序,大大提高了软件维护的效率。

  • 以上5个阶段,对于大规模的软件是缺一不可的。它们分别由不同的开发者完成,这样大大减小了开发者的工作量,同时也提高了软件开发的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值