您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 第1章 面向对象程序设计概述
C++面向对象程序设计任课教师:张地联系方式:13580128603changnuode@163.com第1章面向对象程序设计概述1.1什么是面向对象程序设计1.1.1新的程序设计范型面向过程程序设计范型(C,...)函数式程序设计范型(LISP,...)模块程序设计范型(Modula,..)逻辑式程序设计范型(PROLOG,...)面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是:程序=对象+消息•将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象•对象与对象之间通过消息进行通信1.1.2面向对象程序设计的基本概念1.对象2.类3.消息4.方法(算法)1.对象在现实世界中,任何事物都是对象,对象是现实世界中一个实际存在的事物.可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划).对象是构成世界的一个独立单位,具有静态特征:可以用数据来描述的属性动态特征:对象所表现的行为或具有的功能因此,对象一般可以表示为:属性+行为1.对象现实世界中的对象具有以下特性:每一个对象必须有一个名字以区别于其他对象;用属性来描述它的某些特征;有一组操作,每个操作决定对象的一种行为;对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。1.对象在面向对象程序设计中,对象可以认为是:数据+操作(方法)图1-1具有3个操作的对象(录音机)用户对象是面向对象方法的主体。当一个对象映射为软件实现时由三个部分组成:(1)数据结构。它用于描述对象的内部状态。(2)处理。也称为操作或方法,它施加于数据结构之上。(3)接口。这是对象可被共享的部分,消息通过接口调用相应的操作。接口规定哪些操作是允许的。它不提供操作是如何实现的信息。C++语言中的对象由描述对象状态的数据结构和作用于这个数据结构上的方法(操作)构成,它们都可以分为私有的和公有的两个部分,私有部分从对象的外部不可直接访问,而公有部分可以由对象的外部访问。C++语言中对象之间的相互联系和作用通过对公有数据和方法(操作)的访问来实现。例如对于某个人,它的状态可能是:身高:175cm年龄:20性别:男肤色:黄色它的公共操作可能是:回答身高回答年龄回答性别回答肤色其它对象不能直接访问它的内部状态信息,只能通过调用这些公共操作来访问该对象。客观世界的同一对象在不同的应用系统中,由于考察对象的角度不同,对其抽象的数据结构和操作都可能是不同的。例如对于一个学生,在学籍管理系统与户籍管理系统两个不同的应用系统中,抽象出的表示内部状态的数据结构和对数据结构进行的操作都是不同的。因此,在对实际应用系统中的对象进行分析时,应注意该系统的要求,区分哪些是该对象的本质特征。2.类人们在认识客观世界的事物时总是采取分类思想,即人们在认识事物时总是将具有相同特征的事物归为一类,属于某类的一个事物具有该类事物的共同特征。在现实世界中,“类”是一组具有相同属性和行为的对象的抽象。类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。对于学籍管理系统,学生是一个类,而一个具体的学生则是学生类的一个实例。一个类的不同实例具有相同的操作和相同的属性定义,但属性值可以不同;不同的实例具有不同的对象标识。对于学生类中的每一个对象,描述它们所使用的数据结构相同,但是其值不同。一个类的定义至少包含以下两个方面的描述:(1)该类所有实例的属性定义或结构的定义。(2)该类所有实例的操作(或行为)的定义。在面向对象程序设计中,“类”是具有相同数据和操作的一组对象的集合.在C++语言中,一个类的定义包含数据成员和函数成员两部分内容。数据成员定义该类对象的属性,不同的对象属性的值可以不同;函数成员定义了该类对象的操作。在程序设计中,总是先声明类,再由类生成对象.类是建立对象的“模板”,按照这个模板所建立的一个个具体的对象,就是类的实际例子,通常称为实例.3.消息在面向对象程序设计中,实现一个对象与另一个对象之间的交互的机制是“消息传递”.一个对象向另一个对象发出的请求称为“消息”。消息具有以下3个性质:—同一个对象可以接收不同形式的消息,作出不同的响应—相同形式的消息可以传递给不同的对象,作出不同的响应—对消息的响应不是必需的,对象可以不响应消息在面向对象程序设计中,消息可分为两类:—公有消息—私有消息4.方法方法就是对象所能执行的操作。方法包括:界面—消息的模式,即方法的调用协议方法体—实现某种操作的一系列计算步骤,也就是一段程序在C++中,方法是通过函数来实现的.1.1.3面向对象程序设计的基本特征1.抽象2.封装3.继承4.多态1.抽象忽略事物中与当前目标无关的的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,得出一个抽象的概念。例如,汽车、房屋、学生等都是人们在长期的实践中抽象出的概念。抽象的内容:属性抽象(数据抽象)行为抽象(代码抽象)汽车司机(1)共同的属性:换档方式,排量,速度,......(2)共同的行为:加油,刹车,转向,......乘客(1)共同的属性:乘员数,音响设备,空间大小,......(2)共同的行为:坐着达到目的地,......学生学生成绩管理程序(1)共同的属性:姓名,学号,成绩,......(2)共同的行为:数据录入,数据修改,数据输出,......学生健康档案程序(1)共同的属性:姓名,学号,身高,体重,......(2)共同的行为:数据录入,数据修改,数据输出,......2.封装封装是一种信息隐藏技术,对象内部对用户是隐藏的,不可直接访问;用户只能见到对象封装界面上的信息,通过对象的外部接口访问对象。用户向对象发送消息,对象根据收到的消息调用内部方法作出响应。封装的目的在于将对象的使用者和对象的设计者分开,使用者无须知道对象内部实现的细节,只需要知道对象接收的消息即可。封装应该具有的3个条件:(1)一个清楚的边界。所有对象的内部软件的范围被限定在这个边界内。(2)一个接口。该接口用以描述这个对象和其它对象之间的相互作用。(3)受保护的内部实现。这个实现给出了由软件对象提供的功能的实现细节,实现细节不能在定义这个对象的类的外面访问。对象的封装特性可以提高模块之间的独立性,使得系统易于调试和维护。下面举一个简单的例子。假设应用系统中有两个模块:一个模块从计算机的串行通讯口接收数据,放入缓冲区;另一个为数据处理模块以处理缓冲区中的数据。数据处理模块可以直接访问缓冲区,从缓冲区中读取数据。此时这两个模块之间的关联程度密切,模块独立性很差。传统的处理方法缓冲区模块1模块2我变!我也要变!我错!我也错了?如果接收数据的模块改变缓冲区的管理方法,则第二个模块必须作相应的改变。如果数据处理模块对缓冲区操作有误,将影响数据接收模块,在程序调试时难以确定错误发生在哪一个模块中。就算两个模块各自都处于正常操作状态,在实际运行过程中还必须处理好它们之间的协调同步问题.其实,数据处理模块并不需要缓冲区的管理信息,它只需知道缓冲区中有没有数据以及有什么样的数据。上面的处理方法违反了软件工程中的信息隐藏原则,数据处理模块访问了它不需要的信息。将数据接收模块封装为一个对象,缓冲区的管理信息作为其私有数据,即可避免上面的问题。数据接收模块只要提供一个从缓冲区获得数据的接口即可。数据处理模块只能访问该接口,而不能直接操作缓冲区。此时两个模块之间的独立性提高,如需改变缓冲区的管理方法,只需修改数据接收模块,数据处理模块将不受任何影响,因为数据接收模块提供的外部接口没有改变。对象封装的处理方法模块1缓冲区获取数据的外部接口模块23.继承我的父母我图1-2两个对象的相互关系狗(有犬牙,食肉,...)柯利狗(尖鼻,红白相间,...)图1-3三个对象的相互关系哺乳动物(热血,奶哺育幼仔)基类/父类派生类/子类直接基类间接基类ABC若各个类之间具有继承关系,则它们之间具有以下三个特征:•类间具有共享特征•类间具有差别或新增部分•类间具有层次结构继承的目的1.现实世界的目的2.面向对象程序设计的目的利用继承机制可以提高软件代码的可重用性。在设计一个新类时,不必从头设计编写全部的代码,可以通过从已有的具有类似特性的类中派生出一个类,继承原有类中的部分特性,再加上所需的新的特性。另外,人们在对客观世界的事物分类时,一个事物可能属于多个类,具有多个类的特性。例如一个黑人学生,他既属于学生类,又属于黑人类。这种情形在面向对象方法中称为多继承,即一个类同时从多个类中派生出来,此时类的层次结构是网状的。多继承在有些面向对象的程序设计语言中是不允许的,C++语言允许多继承。只允许派生类有一个基类称为单继承。玩具玩具车图1-5多继承示意图车4.多态现实世界的多态性:一个词可具有多种语义时产生多种不同的行为方式C++语言支持两种多态性:编译时的多态性(重载)运行时的多态性确(虚函数)(如:do......)面向对象系统的多态性:不同的对象收到相同的信息重载voidPrint(inti){...}voidPrint(floatf){...}voidPrint(constchar*c){...}1.2为什么要使用面向对象程序设计1.2.1传统程序设计方法的局限性(1)传统程序设计开发软件的生产效率低下(软件的重用性,复杂性,可维护性)(2)传统程序设计难以应付日益庞大的信息量和多样的信息类型(3)传统的程序设计难以适应各种新环境1.2.2面向对象程序设计的主要优点(1)可提高程序的重用性(2)可控制程序的复杂性(3)可改善程序的可维护性(4)能够更好地支持大型程序设计(5)增强了计算机处理信息的范围(6)能很好地适应新的硬件环境1.3面向对象程序设计的语言1.3.1面向对象程序设计语言的发展概况其它程序设计范型面向对象程序设计范型纯面向对象程序设计范型混合程序设计范型SimulaSmalltalk1.3.2几种典型的面向对象程序设计语言1.Smalltalk语言(1970)2.Simula语言(1967)3.C++语言(1980)4.Java语言(1990)*1.5面向对象的系统开发方法1.5.1概述计算机应用系统的开发过程是一个相当复杂的过程,使用面向对象方法进行系统开发,首要任务是采用面向对象的概念及其抽象机制将开发的系统对象化和模型化,建立应用系统模型;然后使用面向对象的程序设计语言来实现系统中的对象。面向对象的开发到完成可分为六个阶段:(1)系统调查和需求分析。即对应用系统将要实现的功能以及用户对系统开发的需求进行调查研究。这是所有开发方法都必须进行的。(2)分析问题的性质和求解问题。在繁杂的问题域中抽象地识别出对象及其属性、结构、行为、方法等。这一阶段称为面向对象分析,简称为OOA。(3)整理问题。即对分析的结果作进一步的抽象、归类、整理,最终以规范的形式描述对象和类。这一步称为面向对象设计,简称为OOD。(4)程序实现。即用面向对象的程序设计语言将上一步整理的对象和类的描述映射为应用程序软件。这一步一般称为面向对象程序设计,简称为OOP。(5)面向对象的测试(OOT)(6)面向对象的软件维护(OOSM)面向对象开发方法的几个阶段的最主要工作是系统的对象化和模型化,使用对象模型来描述系统。OOA阶段建立初步的对象模型,然后在OOD阶段对对象或类进行归类,对类及对象的属性、结构和方法等进行归类,抽象出它们的共同部分,使类的层次结构更为合理。下面简单介绍一下在面向对象分析与设计阶段建立对象模型的基本步骤。1.5.2分析与设计的基本步骤面向对象方法分析与设计可采取下面的步骤:1.标识对象和它们的属性标识应用系统的对象和它们的属性是面向对象设计方法中最艰难的工作。首先要搞清楚系统要解决的问题到底涉及到哪些事物以及它们在系统中的作用。现实世界中的事物可以分成以下五大类:(1)有形物:指那些看得见摸得着的东西,例如人、书、汽车等。这一部分事物很容易识别。当要解决的问题确定下来以后,很容易将与此问题有关的有形物都找出来。(2)人或
本文标题:第1章 面向对象程序设计概述
链接地址:https://www.777doc.com/doc-4275571 .html