ObjectOriented面向对象技术与C++计算机学院ObjectOriented教材:C++面向对象程序设计,陈维兴,中国铁道出版社ObjectOriented参考书•面向对象的理论与C++实践,王燕,清华大学出版社•VisualC++实用教程,郑阿奇,电子工业出版社•VisualC++6.0技术内幕,DavidJ.Kruglinski著,北京希望电子出版社ObjectOriented课程性质与设置目的•性质–计算机专业的专业基础课学习目标:掌握面向对象程序设计的基本概念及基本思想;掌握类、对象的概念及C++语言实现方法;掌握继承的概念及C++语言实现方法;掌握多态的概念及C++语言实现方法;掌握C++语言模板、流类库的应用;——初步建立计算机专业必备的面向对象程序设计思想。ObjectOriented•理论学习–理解、掌握基本概念,多看例题–理论指导实践,实践提高认识•实践学习–勤思考,多动手–重视上机实习环境–坚持自学课程学习方法ObjectOriented成绩评定总成绩=平时成绩(10%)+实验(20%)+期末考试成绩(70%)–平时成绩包括考勤,作业,课堂小测验等–实验成绩根据考勤及实验内容完成的情况确定–期末考试指学期末学校安排的正式考试ObjectOriented第1章面向对象程序设计概述ObjectOriented面向对象概述●是一种全新的软件工程技术;●程序设计方法更符合人类的思维方式,更直接地描述客观世界;●通过提高代码的可重用性、可扩充性和程序自动生成功能来提高编程效率,大大减少软件维护的开销;●面向对象技术已经被越来越多的软件技术人员所接受和采用。ObjectOriented1.1面向对象程序设计概述OO思想的来源•需要:人们希望直接与计算机进行交互,而不必进行专门的学习和长时间训练。•目标:软件系统对现实世界的直接模拟,尽量实现世界中的事务直接映射到软件系统的接空间。它希望用户用最小的气力,最大程度地利用软件系统来解决问题。ObjectOriented•现实世界=物质+意识•OO世界=具体事务+抽象概念物质:一辆白色的自行车意识:自行车现实世界具体事务:一个对象(自行车实例)抽象概念:自行车类OO世界ObjectOriented•一切都是对象例题:编写一个开发票程序,需要对发票的名细栏进行计算。编号名称规格单位数量单价金额合计面向对象思路:对象一组属性操作:发票总计……非面向对象思路:•定义数据结构•定义函数ObjectOriented1.1面向对象程序设计概述从程序设计方法的角度看,面向对象是一种新的程序设计范型(paradigm),其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设计。自八十年代以来,面向对象方法已深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行系统构造的软件方法学。从这个意义上讲:面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。ObjectOriented1.1面向对象程序设计概述程序设计方法的演进1、程序设计语言:机器语言→汇编语言→高级语言(面向过程的高级语言→面向对象的编程语言→面向对象的可视化编程语言)。2、程序设计方法:程序设计的自然描述→结构化程序设计(面向过程的程序设计方法)→面向对象的程序设计方法→面向对象的可视化编程方法。ObjectOriented面向过程ObjectOrientedObjectOriented1.1面向对象程序设计概述3、结构化(面向过程)程序设计方法与面向对象程序设计方法的关系。观点1:面向过程的程序设计方法可以作为面向对象程序设计方法的基础,学习面向对象的程序设计应具备面向过程的程序设计方法方面的知识。观点2:面向对象的程序设计方法与面向过程的程序设计方法在思维方法上与面向过程程序设计方法相背离,是独立的程序设计体系。ObjectOriented1.1面向对象程序设计概述㈠面向过程程序设计的特点面向过程程序设计思想的核心:功能分解面向过程程序设计思想的主要特点:程序与数据相分离。即:程序=算法+数据结构面向过程程序设计思想的主要缺点:程序代码的可重用性差,维护代价高。ObjectOriented1.1面向对象程序设计概述㈡面向对象程序设计的特点面向对象程序设计将数据及数据的操作(算法)当成一个整体。即:程序=(算法+数据结构)其主要思想:面向对象程序设计,是把一些具有相同数据特性的实例抽象成为一个类,通过对类的定义和类的使用(即对象的使用)实现对实例的使用的——面向对象程序设计是一种新的程序设计范型。ObjectOriented1.1面向对象程序设计概述特点:程序由类的定义及类的使用两部分组成,通常在主程序定义各对象并规定对象间传递消息的规律;程序中的一切操作都是通过发送消息实现的,对象接收消息后,启动相应的消息完成相应的操作——对象内、对象间采用消息传递机制;面向对象的程序设计最主要的优点:软件的可重用性面向对象的程序设计最重要的的概念:类与对象。ObjectOriented对象名属性方法(操作)对象名属性方法(操作)…张三性别:男年龄:21学历:本科专业:计算机吃饭上课实验锻练…李四性别:女年龄:20学历:本科专业:计算机吃饭上课实验锻练……1.2面向对象程序设计的基本概念一、对象㈠对象的概念对象是我们认识世界的一些基本单元(人或物等)例【1.1】观察学生对象。如下表:ObjectOriented1.2面向对象程序设计的基本概念表中各对象都是现实世界中一个客观实体,其特性是:有一个名字来惟一标识该对象;有一组属性(或称状态)描述对象的特征;有一组操作来描述对象的各种行为(实现其功能)。例【1.2】观察WINDOWS下窗口的命令按钮:每个命令按钮都有一个名字,如:“确定”、“取消”;每个按钮都有一些属性,如:“长、高、颜色等”;对每个按钮均可实现一些操作,如:“改变焦点、单击、双击、按回车键等”总之:对象是现实世界一个个客观实体。ObjectOriented1.2面向对象程序设计的基本概念对象:是既包括属性(状态)数据,又包括作用于属性数据的一组操作的封装体。属性:对象的属性数据或状态数据通常称为属性。方法/服务:对象的能力(功能),即能实现的操作称为方法或服务。注:在C++语言中,属性称作数据成员,服务/方法称为成员函数。ObjectOriented1.2面向对象程序设计的基本概念㈡对象的特性1.封装性2.模块独立性:每个对象都是一个独立的模块,具有独立的计算能力,通过消息激活对象自身的动作;3.动态连接性:通过消息传递机制将对象动态地联接在一起,使多个对象共同完成某项任务。4.系统的易维护性ObjectOriented1.2面向对象程序设计的基本概念二、类如例【1.1】,对象“张三”、“李四”…,具有相同的一些属性、操作,将其抽取具体所描述的数据,可抽象为一个类别——类:即学生类。如例【1.2】,“确定”、“取消”按钮等可抽象为一个类——命令按钮类。类就是具有相同的属性和相同的操作的一组对象的抽象。ObjectOriented1.2面向对象程序设计的基本概念由此可知:类是对象的抽象(如“学生”是对张三、李四等的抽象,“命令按钮”是对确定、取消等的抽象);对象是类的实例(如张三是“学生”的一个实例,确定是“命令按钮”的一个实例)。在实际应用中,先定义一个类,然后再定义一个个具体对象。在面向对象程序设计中的定义:类是创建对象的样板,它包含对创建对象的状态描述及操作行为的说明;对象是类的实例化(对象变量、对象数组等)ObjectOriented1.2面向对象程序设计的基本概念三、消息㈠概念消息(Message):是描述事件发生的信息,是一个对象向另一个对象发出的请求。消息传递:面向对象程序设计技术所提供的一种允许一个对象与另一个对象交互的机制。㈡组成1.接受消息的对象;2.消息名;3.零个或若干个参数。ObjectOriented1.2面向对象程序设计的基本概念消息的三个性质同一个对象可以接受不同形式的多个消息,产生的消息各不相同;相同形式的消息可以发送给不同的对象,产生的响应可以各不相同;一个对象可以立即响应发送给它的消息,也可以暂时不予响应消息。数据成员对象成员函数对象消息ObjectOriented1.3面向对象程序设计的基本特性面向对象系统的最突出的特性:封装性、继承性、多态性。一、数据的抽象与封装例【1.3】现实社会中抽象与封装的例子:家电设备(电视机等)的使用;汽车的驾驶。㈠数据的抽象与封装的基本概念1.数据的抽象数据的抽象是对数据进行实例分析,抽取其共同性质的结果。如:“学生”对象,先对一些学生实例进行分析,确定他们的共同特性或主要特性(姓名、性别、年龄、专业等),忽略不同点或次要的引不起兴趣的那些特性(长相差异、性格差异等)。ObjectOriented1.3面向对象程序设计的基本特性2.数据的封装将数据结构以及作用于数据结构上的操作组成一个实体,把数据的表示方式及操作细节隐藏起来,用户通过接口对数据进行操作。这样,用户就只知道操作接口对该数据进行操作,而不知道内部是如何做的以及如何表示的—数据的封装。例【1.4】银行帐户的抽象与封装分析:用户关心的问题:存款、取款、转帐、查询、修改密码数据结构:业主、帐号、余额、利息、密码等ObjectOriented数据的抽象与封装WithDraw(取款)Transfer(转帐)Search(查询)Change_passwords(更改密码)…balance(余额)interestYTD(年利息)owner(业主)account_number(帐号)passwords(密码)….MakeDeposit(存款)WithDraw(取款)Transfer(转帐)Search(查询)Change_passwords(更改密码)接口实现细节(用户不可见)用户1.3面向对象程序设计的基本特性ObjectOriented1.3面向对象程序设计的基本特性结论:抽象是抽取数据共同性质的结果,而封装则是隐蔽了抽象的内部实现细节的结果,是将数据抽象的外部接口与内部实现细节清楚地分离开。ObjectOriented1.3面向对象程序设计的基本特性二、继承性㈠、继承的概念所表达的是对象类之间相互的关系。这种关系使的某一类可以继承另外一个类的特征和能力。例【1.4】现实社会中继承的实例由此可知:继承是将客观世界中一般和特殊关系模型化成层次结构;通过继承可实现和增强代码的可重用性——通过继承基类的属性、方法实现;在创见新的派生类时,只要指明了派生类是由哪个基类派生的便可自动继承基类的属性和方法。修改或扩充程序功能时不必修改原代码(增加新代码即可)。ObjectOriented1.3面向对象程序设计的基本特性㈡继承的几个名词:基类(父类)派生类(子类)直接基类及间接基类㈢继承的分类单继承多继承ObjectOriented1.3面向对象程序设计的基本特性三、多态性多态性:是指不同的对象在收到相同的消息时产生多种不同的行为。多态性的例子。“+”:2+3=5设复数a=2+3ib=3+4i则:a+b=5+7i(运算符重载)max()函数的调用:max(a,b)——求二个数之间的最大数;max(a,b,c)——求三个数之间的最大数;max(*p,n)——求n个数的最大数。(函数重载)ObjectOrientedObjectOriented1.4面向对象程序设计语言•要求:必须支持抽象数据类型和继承性。提供继承性、多态性和动态链接机制,使得类和类库成为可重用的程序模块。1、LISP家族:Flavors、LOOPS、CommonLOOPS、CommonObjects2、Simula3、