2022年陈天华-面向对象程序设计C第三版-第一章完整_第1页
2022年陈天华-面向对象程序设计C第三版-第一章完整_第2页
2022年陈天华-面向对象程序设计C第三版-第一章完整_第3页
2022年陈天华-面向对象程序设计C第三版-第一章完整_第4页
2022年陈天华-面向对象程序设计C第三版-第一章完整_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程概述《面向对象程序设计》是计算机专业必修的基础课程,也是一门核心课程。本课程以C++语言为平台,在介绍面向对象的程序设计的思想和方法的同时,着重开展对学生的编程技能的训练。培养学生利用计算机程序解决实际问题的意识、思路和能力,为后续课程和计算机在各领域中的应用打下基础。3/24/20251内容选取C++基础(简单讲解:C++概述、数据类型、运算符、表达式、简单的输入输出、算法及其表示、流程控制等)面向对象程序设计(重点讲解:类、对象、继承、派生、友元、虚函数、运算符重载、I/O流类库、模板、异常处理等)3/24/20252其他参考书目《C++程序设计教程》,钱能,清华大学出版社;C++Primer中文版;《面向对象程序设计导论》王申康、朱晓芸著,浙江大学出版

3/24/20253第一章

面向对象程序设计概述3/24/20254本章主要内容

程序设计语言的发展1.1

面向对象程序设计的基本概念1.2

面向对象程序设计的特点1.3

面向对象程序设计语言1.4

面向对象软件开发1.53/24/202551.1计算机程序语言的发展机器语言汇编语言高级语言面向对象语言3/24/20256面向对象程序设计语言面向对象程序设计(ObjectOrientedProgramming,OOP)直接地描述客观世界存在的事物(即对象)及事物之间的相互关系思维方法不同对客观事物本身进行抽象,将人类的思维方式与表达方式直接应用在软件设计中3/24/202571.2面向对象的基本概念采用面向对象程序设计,可以将客观世界直接映射到面向对象程序方法中,为软件设计和信息技术带来了深远的影响。3/24/202581.2.1面向对象方法的产生面向过程的程序设计的范型是:程序=算法+数据结构数据与对数据操作的分离导致软件维护(包括软件的测试、调试和升级)的困难。一旦数据结构改变,与之相关的所有操作都必须改动,代码修改量大。一种新型的程序设计方法——面向对象的程序设计方法应运而生,它很好地解决了以上问题。3/24/202591.2.2面向对象与面向过程的区别面向对象程序设计吸取面向过程程序设计的一切优点,又考虑了所模拟的现实世界与程序解空间的直接映射关系;采用数据抽象和信息隐藏技术使得数据和(施加于数据的)操作成为不可分割的整体;程序由类定义、类实例(对象)和对象之间的动态联系组成;程序的重用性好、易于维护和扩展有望解决软件的复杂性控制和生产率的提高。3/24/2025101.什么是面向对象?对象(Object):任何可以被感觉到的事物面向(oriented):直接面对面向对象(Objectoriented):直接面对你能感觉到的任何事物面向对象编程(Objectorientedprogramming):将软件视为是由一群相互关联对象组成的整体:这些对象具有足够的智能,能理解从其他对象发出的消息,并以适当的行为作出响应,从而实现软件的整体功能。面向对象编程就是直接面对软件所模拟的客观世界中的事物,将它们直接映射到软件系统的解空间中成为软件的组成对象。3/24/202511面向对象模拟人类习惯的解决问题的方法让我们观察一个日常生活中常见的事例理发厨师理发师我要剃光头N个步骤厨师餐馆鱼香肉丝N个步骤肉丝细节未知提问:该例有几个类?类的属性是怎么样的?2.类和对象的关系类与对象是抽象与具体的关系类包含:对象必然属于某一个类,且各有一个名字,有不同的数据成员值,可以进行相同的行为。成员函数:数据成员:

一类对象的静态特性

一类对象的动态特性

3/24/202513自行车类示例3/24/2025143.面向对象程序设计范型①程序的组成:类定义集合+主程序类定义集合:每个类定义确定了一类对象的属性和行为的创建规则,类定义之间具有层次结构。主程序:创建所需要类的实例(对象),并在确定的程序结构中进行对象之间的相互通讯,实现程序所要完成的功能。②程序的运行:各对象之间以消息(发送与接收)的方式进行的通讯,实现对对象方法(行为的执行)的调用。3/24/202515面向对象程序设计中最重要的两个概念:类和对象面向对象程序设计中最突出的特征是:封装性、继承性和多态性面向对象的程序设计围绕类的定义和类的使用展开的3/24/2025161.2.3类与对象的概念在客观世界中,类这一术语是对一组相似对象的抽象和描述;类是对一组具有相同属性特征和行为特征的一类对象的高度抽象。3/24/2025171.关于对象(object)对象的定义在客观世界中,对象是任何可以感觉到的事物。对象可以是自然事物(人、动物、植物等),组织结构(学校、院系、班级等),(人类的)物质产品(房屋、汽车、计算机等)和信息产品(文章、乐曲、规则、计划等)等。对象可小可大,可简单可复杂;复杂对象可以由简单对象构成。无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:3/24/202518对象的特征有一个特定的名字以区别于其他对象;有一组属性,用来描述对象的静态特性;有一组行为,用来描述对象的动态特性;在面向对象的软件中:对象是可以用名字标识的存储区域。对象的属性以固定或可变数目的确定类型数值(或数值的集合)的形式保存在该存储区域中,而实现一类对象的行为的操作(代码)被保存在另外相关的存储器区域中。3/24/202519

2.关于类(class)类的定义在客观世界中,类是对一组具有共同特性(属性和行为)的客观事物的抽象概念。在面向对象的软件中,类是由程序员自定义的具有特定数据结构和建立数据结构上的操作功能的抽象数据类型。类与对象的关系类是创建对象的模板,是对象的抽象,提供了对象的构造规则。对象是类的实例,按类提供的规则构造的数据。3/24/202520同一类的不同实例(对象)必须具有:

相同的操作集合;相同的静态属性集合;不同的对象名和属性动态值。3/24/202521张三李四王五赵六黄皮肤、黑头发、黑眼睛。。。中国人把具有相似特征的事物归为一类,分类是人类认识客观世界的基本方法。关于类的例子1半径为3cm半径为4cm半径为1cm不同之处?共同之处?关于类的例子2汽车类状态:品牌、时速、马力、耗油量、座椅数

行为:启动、行驶、加速、减速、刹车、停车用数据来描述用函数来实现关于类的例子33/24/2025241.2.4消息与事件什么是消息消息是一个对象请求另一个对象执行其某种行为操作(也称为方法)的规格说明。这种规格说明总是由消息的接收者(提供方法的对象)、消息所请求的方法(方法名)和实现方法的必要参数组成的。所以在面向对象的程序中,消息通常的表示形式是:对象名.方法。3/24/202525消息的三个性质同一个对象可以接受不同形式的多个消息,产生的消息各不相同;相同形式的消息可以发送给不同的对象,产生的响应可以各不相同;一个对象可以立即响应发送给它的消息,也可以暂时不予响应消息。3/24/202526消息的响应接收消息的对象的状态和消息所请求的方法决定了消息的响应。消息响应所引起的操作主要包括四种:

返回对象的状态;修改对象的状态;完成特定的操作;改变系统的某些状态。3/24/202527消息序列(事件)

与现实世界中一样,在面向对象软件的运行中一个任务所涉及的操作总会有多个对象的参与和多次按顺序相互作用才能完成,使得这些对象能够按任务要求的顺序相互通讯的消息组成的序列被称为“消息序列”,也称为事件。3/24/2025281.3面向对象语言的特点抽象性:抽象是指分析和提取事物中与当前目标有关的本质特征、忽略非本质特征,找出事物的共同特性,将具有共性的事物分为一类。封装性:即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节。3/24/202529继承性:派生类对象自动地拥有父类的全部属性与行为。多态性:在父类中定义的属性或行为,被派生类继承之后,可以具有不同的数据类型或表现出不同的行为特性。

C++语言全面支持面向对象特性3/24/202530封装性是面向对象程序设计的第一大特征,这一特性使得面向对象程序设计具有安全性和可靠性。生活中的封装例:MP4对外接口:面板上的各种控制按钮如:电源开关、菜单选择按钮、调节音量按钮等封装起来的:各种元器件、按下某按钮时其内部的元器件状态如何改变、如何参与工作等细节1.封装性(encapsulation)3/24/202531什么是封装:在程序设计中,封装则是指将数据与数据有关的操作集合到一起,形成一个类(或类的实例对象)具有一个确定的边界,对象的所有数据成员(属性)、成员函数(行为)都被固定在这个边界内部。对象属性的私有部分和行为的实现代码受到保护,其他对象不能直接修改该对象所拥有的数据和代码。具有一个接口,这个接口描述对象之间的相互作用(请求和响应)的规格说明,即消息。封装反映了客观世界中事物的基本特性。3/24/202532关于封装的例子接口边界隐藏的细节:私有部分和行为3/24/202533类中封装的成员:private属性的数据成员和成员函数protected属性的数据成员和成员函数public属性的成员函数具体实现代码类中未被封装的成员:public属性的数据成员public属性的成员函数原型对于类中封装的成员不可以用形如对象名.成员的形式直接访问,这种形式只可以访问未被封装的成员。3/24/202534继承性是面向对象程序设计的第二大特征,是面向对象的程序设计提高代码重用性的重要措施。什么是继承继承表达了一种对象类之间的依赖关系,它使得某类对象可以在另一类对象的属性和行为的基础上建造自己的属性和行为。继承反映了客观世界中事物间的基本结构关系。具有继承关系的类间具有如下特征:

类间具有共享特征(数据和代码的共享);类间具有细微的差别和新增部分(非共享的数据和代码)类间具有层次结构。2.继承性(inheritance)3/24/202535继承的分类,具有继承关系的类自然地被分为两种:父类(基类):提供共享数据和功能的类。子类(派生类):继承共享数据和功能的类。按继承源划分:单一继承:从单一父类继承属性和行为。多重继承:从多个父类继承属性和行为。按继承的内容划分:取代继承:子类可取代父类的作用。包含继承:子类包含了父类的全部特征。受限继承:子类只能继承父类的某些特征。特化继承:子类是父类的一种特殊类。3/24/202536派生类中成员的构成:从基类直接继承的数据成员和成员函数派生类中新增加的数据成员和成员函数对基类中某些成员的改造继承的优点:可以避免公共代码的重复开发,减少代码和数据冗余。

3/24/202537类继承关系举例:以上为一个多层次的类继承关系,从继承源上分,可以有单一继承(如图中大学生类对学生类的继承)和多重继承(如图中在职大学生类是从大学生类和职工类多重继承)两种。学生类大学生类职工类在职大学生类3/24/202538多态性是面向对象程序设计的第三大重要特征。面向对象程序设计的多态性指的是一种行为对应着多种不同的实现。多态表现了不同对象在接收到同一消息时,调用不同操作,作出不同响应的现象。生活中的多态性举例:发动汽车发动火车发动公民义务献血多态性有两种:静态多态性(也称为编译时的多态性)和动态多态性(也称运行时的多态性)。3.多态性(polymorphism)3/24/202539多态性的意义:用同一个接口实现不同的操作,直接使用类来进行程序开发非常方便。例如,为求面积,在三角形类、圆形类、正方形类、长方形类中都定义了函数getArea()。显然,为求相应图形的面积,实现的代码不一样。但用户在使用这些类的对象求面积时不必关心实现细节,直接调用该成员函数就可以了。3/24/202540函数重载的例子classnumber{inti;floatx;char*s1;public:intmax(inta){returna>i?a:i;}floatmax(floatb){returnb>x?b:x;}charmax(char*c){returnstremp(c,s1)>0?c:s1;}};问:假如发送的消息为max(10),调用哪个函数?3/24/2025411.4面向对象程序设计语言面向对象程序设计语言并非今天才有;

20世纪60年代,Simula67等语言就具有了类和对象的概念;●

Smalltalk语言是世界上第一个真正面向对象程序设计工具;●

CLU、Ada、Modula-2、LOOPS、Flavors、CLOS、Java、C++等都是面向对象程序设计语言。3/24/2025421.C++语言混合型面向对象程序设计语言;

20世纪80年代在C语言的基础上开发而来;●

C++是对C的革命,既兼容C的语法,又全面支持面向对象;●广泛流行,并有各种版本的C++编译系统;3/24/2025432.Java语言1995年6月由SUN推出;●一种纯粹的面向对象程序设计语言;

避免了C、C++中的不合理因素;●真正实现了与平台无关,可运行于各种操作系统和芯片;3/24/2025441.5面向对象软件开发面向对象的软件工程包括:面向对象分析(OOA);面向对象设计(OOD);面向对象编程(OOP);面向对象测试(OOT);面向对象软件维护(OOSM);3/24/2025451.5.1面向对象分析软件开发的开始阶段。该阶段由系统分析员和用户一起使用面向对象分析(OOA)方法,对问题域(用户需求)的进行精确地分析和描述,并从问题域的描述中找出关键抽象。1.确定问题域和设计策略。在对用户需求进行初步分析的基础上绘制用例图包括用例说明(对每个用例的详细文字描述)。借助用例图与用户和相关领域的专家进行交互,对用例图进行修改和补充,直至确定软件需求,从而确定问题域。在已经确定的问题域基础上,考虑软件的应变性和稳定性,确定软件设计策略。3/24/202546例如一个网上拍卖系统的拍卖过程用例图:3/24/2025472.问题域的关键抽象从用例图中归纳所有相互作用的对象以及与对象相关的数据。例如本例中的“销售者”、“购买者”和“拍卖师”,以及拍卖活动所需要的信息数。3.类的抽象通过对对象和相关数据的分析和归纳,抽象出所设计软件中的类。例如本例中可以抽象出:销售者类Seller、购买者类Buyer、拍品项目类AuctionItem、拍品集合(列表)类AuctionList、拍卖成交文书类SalesDoc等。3/24/2025481.5.2

面向对象设计基本准则包括:●模块化;●抽象;●信息隐蔽;●低偶合度与高内聚性;●可扩充性;●可重用性;3/24/202549设计阶段的目的和任务是在需求分析结果的基础上,使用面向对象设计(OOD)方法,确定所设计软件中每个类的属性和行为,类对象之间的相互关系和相互作用,每个类对象的状态转换,所有活动的相互关系和作用。1.初步设计对象类的属性、行为和相互关系为每个所设计的类绘制类图和它们之间的继承、关联、聚合关系图。类图的描述能力和绘制方法如下:3/24/202550类的一般描述:(1)属性的一般表示:visibility:属性的可视性有三种:+表示public;#表示protected;-表示private。name:属性的名称。N:属性的多值性:[2..*]表示属性能接受多值;如果无此项表示属性只允许接受一个值。type:属性的实现类型(依赖实现语言的规范)initialValue:属性的缺省值。property-string:表示属性无法由语法的其他部分来表现的那些特性。例如,一个只读属性(如C++的const成员或Java的final成员),property-string将可以设置为frozen。3/24/202551(2)操作的一般表示:visibility和name的含义与属性的语法含义相同。parameter-list:由逗号分隔的形式参数列表,每个参数的表示语法:kind:in表示传递一个值;out表示提取一个值;inout表示可以同时充当两个角色。name、type和defaultValue分别表示形参名、形参类型和缺省值。return-type:操作的返回类型(因编译器而异)。property-string:表示一些操作的特性(例如一个操作是否为抽象的等)。3/24/202552(3)类图还用于描述不同类之间的静态结构关系:归纳(Generalization)关系:表示两个类之间的继承关系。例如,下图中Employee是Manager的父类:关联(Association)关系:表示两个类之间的关联关系。例如,下图描述了Employee和Corporation之间的关联关系:3/24/202553(4)类之间的聚合和合成关系:表示对象之间“整体”和“部分”的关系,即在对象整体和对象组成部分之间可能存在着生命期的依赖关系。其中合成关系表示当整体不复存在时,部分同时被销毁的紧密关系。例如,下图中的Window与Slider、TitleBar和Panel之间的关系就是典型的合成关系:3/24/202554聚合关系表示当对象整体被销毁之后,对象的组成部分还会继续存在的关系。例如,下图中的Orchestra和Performer之间的关系是典型的聚合关系。显然,聚合关系也可以用关联关系表示。但是,聚合关系可以更清晰、恰当地说明一些概念。正如本例所说明的“乐队由演奏人员所组成的,但乐队的生存期与演奏人员的寿命之间不存在紧密依赖关系”。3/24/2025552.进一步设计对象类的属性、行为和相互作用绘制实现一个用例或相关用例的小型集合的交互图(InteractionDiagram)描述参与对象之间的操作。由于交互图清楚地说明了一个类的对象是怎样与其他类的对象进行通讯的,因此通过交互图能更好地理解一个类应有哪些行为,清晰地刻画每个类在软件中的角色,进一步确定每个类的属性和方法3.确定类对象的状态使用状态图(StatechartDiagram)绘制每个类的对象在它所参与的(用例)活动中的状态图,确定类对象在程序活动中各个阶段的属性变化和方法的调用。3/24/202556状态图符号状态图描述从状态到状态的控制流初态:实心圆表示终态:一对同心圆表示中间状态:圆角矩形状态转换:带箭头的连线触发事件:标注在连线上状态图中使用的主要符号3/24/202557系统的状态图4.确定软件中活动的相互关系和作用使用活动图(ActivityDiagram)描述程序中所有的活动,确定程序中完成各种功能所涉及的活动的相互作用关系和执行状况(顺序执行或并发运行)。下图显示了拍卖处理过程的活动图:3/24/2025593/24/2025601.5.3面向对象编程面向对象编程在面向对象分析和面向对象设计的基础上,使用面向对象程序设计语言实际进行程序代码编写,并最终实现一个可供实际使用的软件系统;基础和核心的工作是类的具体设计和实现等;程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤模块化;3/24/202561陈天华面向对象程序设计C第三ppt第一章内容选取C++基础(简单讲解:C++概述、数据类型、运算符、表达式、简单的输入输出、算法及其表示、流程控制等)面向对象程序设计(重点讲解:类、对象、继承、派生、友元、虚函数、运算符重载、I/O流类库、模板、异常处理等)3/24/202563其他参考书目《C++程序设计教程》,钱能,清华大学出版社;C++Primer中文版;《面向对象程序设计导论》王申康、朱晓芸著,浙江大学出版

3/24/202564第一章

面向对象程序设计概述3/24/202565本章主要内容

程序设计语言的发展1.1

面向对象程序设计的基本概念1.2

面向对象程序设计的特点1.3

面向对象程序设计语言1.4

面向对象软件开发1.53/24/2025661.1计算机程序语言的发展机器语言汇编语言高级语言面向对象语言3/24/202567面向对象程序设计语言面向对象程序设计(ObjectOrientedProgramming,OOP)直接地描述客观世界存在的事物(即对象)及事物之间的相互关系思维方法不同对客观事物本身进行抽象,将人类的思维方式与表达方式直接应用在软件设计中3/24/2025681.2面向对象的基本概念采用面向对象程序设计,可以将客观世界直接映射到面向对象程序方法中,为软件设计和信息技术带来了深远的影响。3/24/2025691.2.1面向对象方法的产生面向过程的程序设计的范型是:程序=算法+数据结构数据与对数据操作的分离导致软件维护(包括软件的测试、调试和升级)的困难。一旦数据结构改变,与之相关的所有操作都必须改动,代码修改量大。一种新型的程序设计方法——面向对象的程序设计方法应运而生,它很好地解决了以上问题。3/24/202570面向对象与面向过程的区别面向对象程序设计吸取面向过程程序设计的一切优点,又考虑了所模拟的现实世界与程序解空间的直接映射关系;采用数据抽象和信息隐藏技术使得数据和(施加于数据的)操作成为不可分割的整体;程序由类定义、类实例(对象)和对象之间的动态联系组成;程序的重用性好、易于维护和扩展有望解决软件的复杂性控制和生产率的提高。3/24/2025711.什么是面向对象?对象(Object):任何可以被感觉到的事物面向(oriented):直接面对面向对象(Objectoriented):直接面对你能感觉到的任何事物面向对象编程(Objectorientedprogramming):将软件视为是由一群相互关联对象组成的整体:这些对象具有足够的智能,能理解从其他对象发出的消息,并以适当的行为作出响应,从而实现软件的整体功能。面向对象编程就是直接面对软件所模拟的客观世界中的事物,将它们直接映射到软件系统的解空间中成为软件的组成对象。3/24/202572面向对象模拟人类习惯的解决问题的方法让我们观察一个日常生活中常见的事例理发厨师理发师我要剃光头N个步骤厨师餐馆鱼香肉丝N个步骤肉丝细节未知提问:该例有几个类?类的属性是怎么样的?2.类和对象的关系类与对象是抽象与具体的关系类包含:对象必然属于某一个类,且各有一个名字,有不同的数据成员值,可以进行相同的行为。成员函数:数据成员:

一类对象的静态特性

一类对象的动态特性

3/24/202574自行车类示例3/24/2025753.面向对象程序设计范型①程序的组成:类定义集合+主程序类定义集合:每个类定义确定了一类对象的属性和行为的创建规则,类定义之间具有层次结构。主程序:创建所需要类的实例(对象),并在确定的程序结构中进行对象之间的相互通讯,实现程序所要完成的功能。②程序的运行:各对象之间以消息(发送与接收)的方式进行的通讯,实现对对象方法(行为的执行)的调用。3/24/202576面向对象程序设计中最重要的两个概念:类和对象面向对象程序设计中最突出的特征是:封装性、继承性和多态性面向对象的程序设计围绕类的定义和类的使用展开的3/24/202577类与对象的概念在客观世界中,类这一术语是对一组相似对象的抽象和描述;类是对一组具有相同属性特征和行为特征的一类对象的高度抽象。3/24/2025781.关于对象(object)对象的定义在客观世界中,对象是任何可以感觉到的事物。对象可以是自然事物(人、动物、植物等),组织结构(学校、院系、班级等),(人类的)物质产品(房屋、汽车、计算机等)和信息产品(文章、乐曲、规则、计划等)等。对象可小可大,可简单可复杂;复杂对象可以由简单对象构成。无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:3/24/202579对象的特征有一个特定的名字以区别于其他对象;有一组属性,用来描述对象的静态特性;有一组行为,用来描述对象的动态特性;在面向对象的软件中:对象是可以用名字标识的存储区域。对象的属性以固定或可变数目的确定类型数值(或数值的集合)的形式保存在该存储区域中,而实现一类对象的行为的操作(代码)被保存在另外相关的存储器区域中。3/24/202580

2.关于类(class)类的定义在客观世界中,类是对一组具有共同特性(属性和行为)的客观事物的抽象概念。在面向对象的软件中,类是由程序员自定义的具有特定数据结构和建立数据结构上的操作功能的抽象数据类型。类与对象的关系类是创建对象的模板,是对象的抽象,提供了对象的构造规则。对象是类的实例,按类提供的规则构造的数据。3/24/202581同一类的不同实例(对象)必须具有:相同的操作集合;相同的静态属性集合;不同的对象名和属性动态值。3/24/202582张三李四王五赵六黄皮肤、黑头发、黑眼睛。。。中国人把具有相似特征的事物归为一类,分类是人类认识客观世界的基本方法。关于类的例子1半径为3cm半径为4cm半径为1cm不同之处?共同之处?关于类的例子2汽车类状态:品牌、时速、马力、耗油量、座椅数

行为:启动、行驶、加速、减速、刹车、停车用数据来描述用函数来实现关于类的例子33/24/202585消息与事件什么是消息消息是一个对象请求另一个对象执行其某种行为操作(也称为方法)的规格说明。这种规格说明总是由消息的接收者(提供方法的对象)、消息所请求的方法(方法名)和实现方法的必要参数组成的。所以在面向对象的程序中,消息通常的表示形式是:对象名.方法。3/24/202586消息的三个性质同一个对象可以接受不同形式的多个消息,产生的消息各不相同;相同形式的消息可以发送给不同的对象,产生的响应可以各不相同;一个对象可以立即响应发送给它的消息,也可以暂时不予响应消息。3/24/202587消息的响应接收消息的对象的状态和消息所请求的方法决定了消息的响应。消息响应所引起的操作主要包括四种:

返回对象的状态;修改对象的状态;完成特定的操作;改变系统的某些状态。3/24/202588消息序列(事件)

与现实世界中一样,在面向对象软件的运行中一个任务所涉及的操作总会有多个对象的参与和多次按顺序相互作用才能完成,使得这些对象能够按任务要求的顺序相互通讯的消息组成的序列被称为“消息序列”,也称为事件。3/24/2025891.3面向对象语言的特点抽象性:抽象是指分析和提取事物中与当前目标有关的本质特征、忽略非本质特征,找出事物的共同特性,将具有共性的事物分为一类。封装性:即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节。3/24/202590继承性:派生类对象自动地拥有父类的全部属性与行为。多态性:在父类中定义的属性或行为,被派生类继承之后,可以具有不同的数据类型或表现出不同的行为特性。

C++语言全面支持面向对象特性3/24/202591封装性是面向对象程序设计的第一大特征,这一特性使得面向对象程序设计具有安全性和可靠性。生活中的封装例:MP4对外接口:面板上的各种控制按钮如:电源开关、菜单选择按钮、调节音量按钮等封装起来的:各种元器件、按下某按钮时其内部的元器件状态如何改变、如何参与工作等细节1.封装性(encapsulation)3/24/202592什么是封装:在程序设计中,封装则是指将数据与数据有关的操作集合到一起,形成一个类(或类的实例对象)具有一个确定的边界,对象的所有数据成员(属性)、成员函数(行为)都被固定在这个边界内部。对象属性的私有部分和行为的实现代码受到保护,其他对象不能直接修改该对象所拥有的数据和代码。具有一个接口,这个接口描述对象之间的相互作用(请求和响应)的规格说明,即消息。封装反映了客观世界中事物的基本特性。3/24/202593关于封装的例子接口边界隐藏的细节:私有部分和行为3/24/202594类中封装的成员:private属性的数据成员和成员函数protected属性的数据成员和成员函数public属性的成员函数具体实现代码类中未被封装的成员:public属性的数据成员public属性的成员函数原型对于类中封装的成员不可以用形如对象名.成员的形式直接访问,这种形式只可以访问未被封装的成员。3/24/202595继承性是面向对象程序设计的第二大特征,是面向对象的程序设计提高代码重用性的重要措施。什么是继承继承表达了一种对象类之间的依赖关系,它使得某类对象可以在另一类对象的属性和行为的基础上建造自己的属性和行为。继承反映了客观世界中事物间的基本结构关系。具有继承关系的类间具有如下特征:

类间具有共享特征(数据和代码的共享);类间具有细微的差别和新增部分(非共享的数据和代码)类间具有层次结构。2.继承性(inheritance)3/24/202596继承的分类,具有继承关系的类自然地被分为两种:父类(基类):提供共享数据和功能的类。子类(派生类):继承共享数据和功能的类。按继承源划分:单一继承:从单一父类继承属性和行为。多重继承:从多个父类继承属性和行为。按继承的内容划分:取代继承:子类可取代父类的作用。包含继承:子类包含了父类的全部特征。受限继承:子类只能继承父类的某些特征。特化继承:子类是父类的一种特殊类。3/24/202597派生类中成员的构成:从基类直接继承的数据成员和成员函数派生类中新增加的数据成员和成员函数对基类中某些成员的改造继承的优点:可以避免公共代码的重复开发,减少代码和数据冗余。

3/24/202598类继承关系举例:以上为一个多层次的类继承关系,从继承源上分,可以有单一继承(如图中大学生类对学生类的继承)和多重继承(如图中在职大学生类是从大学生类和职工类多重继承)两种。学生类大学生类职工类在职大学生类3/24/202599多态性是面向对象程序设计的第三大重要特征。面向对象程序设计的多态性指的是一种行为对应着多种不同的实现。多态表现了不同对象在接收到同一消息时,调用不同操作,作出不同响应的现象。生活中的多态性举例:发动汽车发动火车发动公民义务献血多态性有两种:静态多态性(也称为编译时的多态性)和动态多态性(也称运行时的多态性)。3.多态性(polymorphism)3/24/2025100多态性的意义:用同一个接口实现不同的操作,直接使用类来进行程序开发非常方便。例如,为求面积,在三角形类、圆形类、正方形类、长方形类中都定义了函数getArea()。显然,为求相应图形的面积,实现的代码不一样。但用户在使用这些类的对象求面积时不必关心实现细节,直接调用该成员函数就可以了。3/24/2025101函数重载的例子classnumber{inti;floatx;char*s1;public:intmax(inta){returna>i?a:i;}floatmax(floatb){returnb>x?b:x;}charmax(char*c){returnstremp(c,s1)>0?c:s1;}};问:假如发送的消息为max(10),调用哪个函数?3/24/20251021.4面向对象程序设计语言面向对象程序设计语言并非今天才有;

20世纪60年代,Simula67等语言就具有了类和对象的概念;●

Smalltalk语言是世界上第一个真正面向对象程序设计工具;●

CLU、Ada、Modula-2、LOOPS、Flavors、CLOS、Java、C++等都是面向对象程序设计语言。3/24/20251031.C++语言混合型面向对象程序设计语言;

20世纪80年代在C语言的基础上开发而来;●

C++是对C的革命,既兼容C的语法,又全面支持面向对象;●广泛流行,并有各种版本的C++编译系统;3/24/20251042.Java语言1995年6月由SUN推出;●一种纯粹的面向对象程序设计语言;

避免了C、C++中的不合理因素;●真正实现了与平台无关,可运行于各种操作系统和芯片;3/24/20251051.5面向对象软件开发面向对象的软件工程包括:面向对象分析(OOA);面向对象设计(OOD);面向对象编程(OOP);面向对象测试(OOT);面向对象软件维护(OOSM);3/24/2025106面向对象分析软件开发的开始阶段。该阶段由系统分析员和用户一起使用面向对象分析(OOA)方法,对问题域(用户需求)的进行精确地分析和描述,并从问题域的描述中找出关键抽象。1.确定问题域和设计策略。在对用户需求进行初步分析的基础上绘制用例图包括用例说明(对每个用例的详细文字描述)。借助用例图与用户和相关领域的专家进行交互,对用例图进行修改和补充,直至确定软件需求,从而确定问题域。在已经确定的问题域基础上,考虑软件的应变性和稳定性,确定软件设计策略。3/24/2025107例如一个网上拍卖系统的拍卖过程用例图:3/24/20251082.问题域的关键抽象从用例图中归纳所有相互作用的对象以及与对象相关的数据。例如本例中的“销售者”、“购买者”和“拍卖师”,以及拍卖活动所需要的信息数。3.类的抽象通过对对象和相关数据的分析和归纳,抽象出所设计软件中的类。例如本例中可以抽象出:销售者类Seller、购买者类Buyer、拍品项目类AuctionItem、拍品集合(列表)类AuctionList、拍卖成交文书类SalesDoc等。3/24/2025109

面向对象设计基本准则包括:●模块化;●抽象;●信息隐蔽;●低偶合度与高内聚性;●可扩充性;●可重用性;3/24/2025110设计阶段的目的和任务是在需求分析结果的基础上,使用面向对象设计(OOD)方法,确定所设计软件中每个类的属性和行为,类对象之间的相互关系和相互作用,每个类对象的状态转换,所有活动的相互关系和作用。1.初步设计对象类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论