年1月号c第4次课面向对象设计思想_第1页
年1月号c第4次课面向对象设计思想_第2页
年1月号c第4次课面向对象设计思想_第3页
年1月号c第4次课面向对象设计思想_第4页
年1月号c第4次课面向对象设计思想_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

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

2、q 结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。4结构化程序设计结构化程序设计2-25模块模块 22.12.2模块模块 11.21.11.31.3.11.3.21.3.3模块模块 33.13.23.1.13.1.2 程程 序序面向过程方法分析问题面向过程方法分析问题q 结构化程序设计是面向过程(procedure-oriented)的6结构化程序设计的缺点结构化程序设计的缺点q结构化程序设计为处理复

3、杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷:q程序难以管理q数据修改存在问题q难以适应大型软件的设计q程序可重用性差q面向过程程序设计缺点的根源在于数据与数据处理分离7面向对象程序设计面向对象程序设计q 面向对象(Object Oriented )是认识事务的一种方法,是一种以对象为中心的思维方式q 面向对象的程序设计:q 对象=(算法+数据结构)q 程序=对象+对象+对象q 面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体对象(object),同类对象还可抽象出共性,形成类(class )。一个类中的数据通常只

4、能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。q 面向对象程序设计不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式。8基本概念基本概念对象对象q 世界上所有的事物都可以称为对象(Object)。对象可以是有形的如:一台电视机等。也可以是无形的如:帐户、一项记录等。q 一个对象就是一个独立存在的客观事物,它由一组属性和对属性进行操作的一组操作构成。q 属性是对象静态特征的描述q 操作是对象动态特征的描述q 属性和操作是对象的两大要素。如电视的属性有:品牌、尺寸

5、、重量等。操作有:收视、选台、音量调节等。9基本概念基本概念类类q 是一个抽象的概念,用来描述某一类对象所共有的、本质的属性和类行为q 根据抽象的原则对客观事物进行归纳和划分10类和对象的区别类和对象的区别q 如何区分类和对象以“人”和“张三”为例q “人”描述了所有人(包括“张三” )都具有的属性和行为,如有姓名、身高、体重,有鼻子、眼睛、四肢,能交流、有思维等等q 类(“人”)描述的概念是抽象的q “人”的姓名是什么?q “人”的身高是什么?q 对象(“张三”)是具体的q “张三”的姓名是“张三”q “张三”的身高是185CMq 类和对象的例子:q 教室五楼多媒体教室、四楼语音教室q 国家

6、中国、美国q 学校福州大学、厦门大学11基本概念基本概念消息消息q对象可以响应消息q我们把对象之间产生相互作用所传递的信息称做消息。 qC+将“向对象发消息”处理成“调用对象的某个成员函数”12面向对象编程方法的特性面向对象编程方法的特性q程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 q对象之间通过相互协作来完成功能q大多数对象的定义以数据为中心q函数与相关的数据紧密结合q数据可以被隐藏q很容易扩充新的数据和函数13面向对象编程的优缺点面向对象编程的优缺点q面向对象编程的优点:q 易维护:可读性高,即使改变需求,由于继承的存在,维护也只

7、是在局部模块,维护起来是非常方便和较低成本的。q 质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。q 效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。q 易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。q面向对象编程的缺点:运行效率会下降10%左右14面向对象的基本特征面向对象的基本特征q抽象q封装和数据隐藏q继承q多态15抽象的设计思路抽象的设计思路q数据抽象化为属性 q处理过程抽

8、象化为操作(方法)q例如:当建立一个图书管理系统时,通过直觉知道系统里一定要有图书管理员/读者/书这些对象, 而其中读者的行为含有借书/还书,学生还有其相应的学号/姓名/班级等内容q用面向对象方法来认识青蛙16青蛙属性 . 颜色重量行为 .跳捉害虫封装和数据隐藏封装和数据隐藏q 封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。q 通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。q 封装性增加了对象的独立性,从而保证了数据的可靠性。17JackTV我们不用关心电视机的内部工作原理,电视机提供了选

9、台、调节音量等功能让我们使用。 类的定义类的定义2-1q C+通过建立数据类型类来支持封装和数据隐藏。一个定义完好的类可以作为独立模块使用。q 类的定义格式分为说明部分和实现部分q 说明部分包含数据成员和成员函数说明q 实现部分是用来对成员函数的定义q 类的一般定义格式如下:18class public : ;protected: ;private : ;类的定义类的定义2-2q class是定义类的关键字是数据类型说明符,是一个标识符,用于唯一地标识一个类(新的数据类型),类名后面花括号扩起来的部分是类体(Class Body)。q 类体中定义了类成员表(Class Member List)

10、q 数据成员(Data Member)q 成员函数(Member Function)q public、protected和private是访问限定符(access specifier)q 一般在类体内先说明公有成员,它们是用户所关心的,后说明私有成员,它们是用户不感兴趣的,但此顺序并不是必须的。q 在类的说明部分之后必须加分号“;”。q 类的定义放在一个头文件中(.h),供其它需要使用该类的文件包含q 类的实现部分放在一个源文件中(.cpp),该文件需要包含定义类的头文件q 类的定义和实现可以放在一个文件里,但不提倡,因为结构不清晰,影响了程序的可读性19学生类学生类Student的定义的定义

11、/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()/实现省略Float CStudent:GetAvg()/实现省略20数据成员数据成员(属性属性)q 类中的数据成员的

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

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

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

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

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

17、可以作为新的数据类型来使用q声明的语法:类的名称 对象的名称;q例如:Stack oneStack;/Stack类型的对象Stack arrayOfStack10; /Stack类型的对象数组Stack *pStack;/Stack类型的指针Stack &s = oneStack; / 引用一个Stack对象28对象成员的表示对象成员的表示q 通过 . 运算符使用类的成员q 对象名.数据成员名q 对象名.成员函数名(参数列表)q 例如:Reader tom; tom.returnBook(12);q 指向对象的指针通过-运算符使用类的成员q 对象指针名-数据成员名q 对象指针名-成员函

18、数名(参数列表)q 例如:Reader tom,*p=&tom; p-returnBook(12);29雇员类雇员类Employee3-1/employee.h文件class CEmployee 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”30雇员类雇员类Employee3-2void CEmployee:printSalary()coutMy salary is $” m_salary!endl;void CEmployee:whoAreYou() coutendlMy name is “m_namewhoAreYou(); p-printSalary();c=b;c.setName(“Wang Wu”);c.whoAreYou(); c.printSalary();return 0;/对象如何进行初始化?32C+中

温馨提示

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

评论

0/150

提交评论