面向对象的设计思想.ppt

上传人:sccc 文档编号:5372187 上传时间:2023-06-30 格式:PPT 页数:37 大小:756.51KB
返回 下载 相关 举报
面向对象的设计思想.ppt_第1页
第1页 / 共37页
面向对象的设计思想.ppt_第2页
第2页 / 共37页
面向对象的设计思想.ppt_第3页
第3页 / 共37页
面向对象的设计思想.ppt_第4页
第4页 / 共37页
面向对象的设计思想.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《面向对象的设计思想.ppt》由会员分享,可在线阅读,更多相关《面向对象的设计思想.ppt(37页珍藏版)》请在三一办公上搜索。

1、面向对象的设计思想,第二章,2,回顾,C+中的数据类型引用类型函数重载函数参数默认值C+中的动态内存分配,3,本章内容,程序设计思想面向对象编程(OOP)面向过程与面向对象的区别OOP的特性类的定义类的访问控制,4,程序设计方法,传统的结构化程序设计SP(Structured Programming)面向对象的程序设计OOP(Object Oriented Programming),5,结构化程序设计2-1,传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。结构化程序设计的基本思

2、想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。,6,结构化程序设计2-2,7,面向过程方法分析问题,结构化程序设计是面向过程(procedure-oriented)的,8,结构化程序设计的缺点,结构化程序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷:程序难以管理数据修改存在问题难以适应大型软件的设计程序可重用性差面向过程程序设计缺点的根源在于数据与数据处理分离,9,面向对象程序设计,面向

3、对象(Object Oriented)是认识事务的一种方法,是一种以对象为中心的思维方式面向对象的程序设计:对象=(算法+数据结构)程序=对象+对象+对象面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体对象(object),同类对象还可抽象出共性,形成类(class)。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。面向对象程序设计不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式。,1

4、0,基本概念对象,世界上所有的事物都可以称为对象(Object)。对象可以是有形的如:一台电视机等。也可以是无形的如:帐户、一项记录等。一个对象就是一个独立存在的客观事物,它由一组属性和对属性进行操作的一组操作构成。属性是对象静态特征的描述操作是对象动态特征的描述属性和操作是对象的两大要素。如电视的属性有:品牌、尺寸、重量等。操作有:收视、选台、音量调节等。,11,基本概念类,是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和类行为根据抽象的原则对客观事物进行归纳和划分,12,类和对象的区别,如何区分类和对象以“人”和“张三”为例“人”描述了所有人(包括“张三”)都具有的属性和行为,如

5、有姓名、身高、体重,有鼻子、眼睛、四肢,能交流、有思维等等类(“人”)描述的概念是抽象的“人”的姓名是什么?“人”的身高是什么?对象(“张三”)是具体的“张三”的姓名是“张三”“张三”的身高是185CM类和对象的例子:教室五楼多媒体教室、四楼语音教室国家中国、美国学校福州大学、厦门大学,13,基本概念消息,对象可以响应消息我们把对象之间产生相互作用所传递的信息称做消息。C+将“向对象发消息”处理成“调用对象的某个成员函数”,14,面向对象编程方法的特性,程序设计的重点在数据而不是函数程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。对象之间通

6、过相互协作来完成功能大多数对象的定义以数据为中心函数与相关的数据紧密结合数据可以被隐藏很容易扩充新的数据和函数,15,面向对象编程的优缺点,面向对象编程的优点:易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易

7、扩展,而且成本较低。面向对象编程的缺点:运行效率会下降10%左右,16,面向对象的基本特征,抽象封装和数据隐藏继承多态,17,抽象的设计思路,数据抽象化为属性 处理过程抽象化为操作(方法)例如:当建立一个图书管理系统时,通过直觉知道系统里一定要有图书管理员/读者/书这些对象,而其中读者的行为含有借书/还书,学生还有其相应的学号/姓名/班级等内容用面向对象方法来认识青蛙,青蛙属性.颜色重量行为.跳捉害虫,18,封装和数据隐藏,封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只

8、能通过接口对对象进行操作。封装性增加了对象的独立性,从而保证了数据的可靠性。外部对象不能直接操作对象的属性,只能使用对象提供的服务。,我们不用关心电视机的内部工作原理,电视机提供了选台、调节音量等功能让我们使用。,19,类的定义2-1,C+通过建立数据类型类来支持封装和数据隐藏。一个定义完好的类可以作为独立模块使用。类的定义格式分为说明部分和实现部分说明部分包含数据成员和成员函数说明实现部分是用来对成员函数的定义类的一般定义格式如下:,class public:;protected:;private:;,20,类的定义2-2,class是定义类的关键字是数据类型说明符,是一个标识符,用于唯一地

9、标识一个类(新的数据类型),类名后面花括号扩起来的部分是类体(Class Body)。类体中定义了类成员表(Class Member List)数据成员(Data Member)成员函数(Member Function)public、protected和private是访问限定符(access specifier)一般在类体内先说明公有成员,它们是用户所关心的,后说明私有成员,它们是用户不感兴趣的,但此顺序并不是必须的。在类的说明部分之后必须加分号“;”。类的定义放在一个头文件中(.h),供其它需要使用该类的文件包含类的实现部分放在一个源文件中(.cpp),该文件需要包含定义类的头文件类的定义

10、和实现可以放在一个文件里,但不提倡,因为结构不清晰,影响了程序的可读性,21,学生类Student的定义,/student.h文件class CStudentpublic:void SetStudent(char*name,int age,int score5);void PrintStudent();int GetTotal();float GetAvg();private:char m_no4,m_name21;int m_age,m_score5;/分号不能省略/CStudent.cpp文件include“student.h”int CStudent:GetTotal()/实现省略Flo

11、at CStudent:GetAvg()/实现省略,22,数据成员(属性),类中的数据成员的类型可以是任意的,可以定义各种类型的变量、指针、数组等,甚至是其他类的对象。但不能用自动(auto)、寄存器(register)或外部(extern)的存储类型进行说明。在说明数据成员时,一般按数据成员的类型大小,由小到大说明,这样可提高空间利用率。在类的定义中只能声明数据成员,不允许对所定义的数据成员进行初始化。类的数据成员只能在类里声明,类的数据成员最好都是私有的外部函数需要修改它,一般也只给它提供公有函数接口,让它通过类的公有成员函数访问类的私有数据数据成员也可以放在public部分,但不提倡,2

12、3,成员函数(方法),成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用成员函数。类的成员函数定义通常可采取两种方式,即外部定义和内部定义(不推荐!影响到了程序的可读性)。成员函数的实现一般放在类的外面,在类里面对函数的原型进行声明成员函数的实现在类的定义外面时,必须声明其所属,在函数名前加类名和作用域运算符“:”,用来表示某个成员函数属于哪个类的,定义格式如下:返回类型 类名:成员函数名(参数说明)函数体 类成员函数的实现也可以放在类里,不需要加类名和作用域运算符,24,头文件的包含问题2-1,头文件会被其他头文件或源文件包含一个源文件可能会多次包含一个头文件b.h 包含 a

13、.hc.h 包含 a.hd.cpp 包含 b.h 和 c.ha.h中的内容被重定义使用预处理指令#define、#ifndef和#endif等,防止重复定义,25,头文件的包含问题2-2,#ifndef STUDENT_H_/判断标识符STUDENT_H_是否被定义,如果没有则编译后续程序,/否则跳过后续语句直到指令#endif#define STUDENT_H_/定义标识符STUDENT_H_class CStudentprivate:/省略public:/省略;#endif/第一次包含头文件student.h时,STUDENT_H_没被定义,类CStudent的定/义被编译,STUDENT

14、_H_被定义。第二次包含头文件student.h时,/STUDENT_H_已经被定义,类CStudent的定义被跳过,防止重复定义,26,访问控制3-1,类定义了函数(方法)和数据(属性)的访问控制属性哪些成员可被外界直接访问哪些成员只能被自己的成员函数访问封装和信息隐藏技术使类变得很安全私有数据成员只有类自己的成员函数能访问只要确保成员函数操作的合理合法性,对象就是安全的提高了程序的可维护性,27,访问控制3-2,三个访问说明符:public、private和protected作用:控制对类的成员的访问在用class定义的类中,默认的访问方式是private在类的定义中,三个访问说明符都可以

15、使用多次(不提倡)。它们的作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束。,28,访问控制3-3,private:类的私有成员只能被类的成员函数、友元函数、友元类访问,类外无法访问他们protected:类的受保护成员能被类的成员函数、友元函数、友元类和派生类成员函数访问public:类的公有成员可以被类的成员函数、友元函数、友元类所有能访问到类的对象的外部程序代码直接访问,这部分往往是一些操作(即成员函数)类的公有成员是类的对外接口,29,对象的定义,对象是类的实例。对象是属于某个已知的类。定义对象之前,一定要先定义好该对象的类。定义好的类可以作为新的数据类型来使用声明的语法

16、:类的名称 对象的名称;例如:Stack oneStack;/Stack类型的对象Stack arrayOfStack10;/Stack类型的对象数组Stack*pStack;/Stack类型的指针Stack/引用一个Stack对象,30,对象成员的表示,通过.运算符使用类的成员对象名.数据成员名对象名.成员函数名(参数列表)例如:Reader tom;tom.returnBook(12);指向对象的指针通过-运算符使用类的成员对象指针名-数据成员名对象指针名-成员函数名(参数列表)例如:Reader tom,*p=,31,雇员类Employee3-1,/employee.h文件class C

17、Employee public:void setName(char*name);void printSalary();void whoAreYou();void setEmployee(char*name,double salary);private:char*m_name21;double m_salary;/CEmployee.cpp文件#include#include#include“employee.h”,32,雇员类Employee3-2,void CEmployee:printSalary()coutMy salary is$”m_salary!endl;void CEmploye

18、e:whoAreYou()coutendlMy name is“m_name.n;void CEmployee:setSalary(double s)m_salary=s;void CEmployee:setName(char*name)strcpy(m_name,name);void setEmployee(char*name,double salary)m_salary=salary;strcpy(m_name,name);,33,雇员类Employee3-3,/main.cpp文件include“employee.h”int main()CEmployee a,b,c,*p;/声明类Em

19、ployee的对象a,b和ca.setEmployee(“Zhang Shan”,123.4);b.setSalary(123.4);b.setName(“Li Si”);p=/对象如何进行初始化?,34,C+中的类和结构体,在结构中也可以定义成员函数。定义结构时只要把关键字class 改为struct即可结构和类的区别:在未指定访问权限时,结构中的成员被默认为公有的而类中的成员被默认为私有的一般在描述数据时使用结构,在描述数据及对数据的操作时用类,struct S int X;/公有的.,class C int X;/私有的.,35,继承,继承表达了对象的一般与特殊的关系。特殊类的对象具有一

20、般类的全部属性和服务。当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。,继承具有传递性,如汽车具有车的全部属性和行为。,36,多态,多态性:同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。,当向图形对象发送消息进行绘图服务请求后,图形对象会自动判断自己的所属类然后执行相应的绘图服务。,37,总结,面向对象程序设计的特点面向对象程序设计方法类和对象的概念C+类的声明和对象的定义类的定义中使用访问控制策略类的成员函数的定义方法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号