240 likes | 345 Views
c++ 面向对象程序设计. 第二章 类和对象. 编程中的错误及解决方法. 主要的错误类型 编译错误--主要是语法错误引起 现象:发生逻辑错误,则程序不能编译通过; 运行错误--主要是指针、数组错误 现象:程序能够编译运行,但在运行时期发生异常,导致程序中断; 逻辑错误--主要是算法错误 现象:程序运行正常,但结果与预想不同. 编程中的错误及解决方法. 解决方法: 1 、编译错误,应该:打好理论基本功;根据错误提示,逐个解决;加强调试程序,寻找错误的能力,并积累经验; 2 、运行错误,应该:注意指针的动态分配和回收内存的匹配;考察数组下标是否越界;
E N D
c++面向对象程序设计 第二章 类和对象
编程中的错误及解决方法 主要的错误类型 • 编译错误--主要是语法错误引起 现象:发生逻辑错误,则程序不能编译通过; • 运行错误--主要是指针、数组错误 现象:程序能够编译运行,但在运行时期发生异常,导致程序中断; • 逻辑错误--主要是算法错误 现象:程序运行正常,但结果与预想不同
编程中的错误及解决方法 解决方法: 1、编译错误,应该:打好理论基本功;根据错误提示,逐个解决;加强调试程序,寻找错误的能力,并积累经验; 2、运行错误,应该:注意指针的动态分配和回收内存的匹配;考察数组下标是否越界; 3、逻辑错误,应该:仔细编辑,防止编辑错误;提高算法分析设计能力;
课堂演示 • 观察下列程序的运行情况: #include<iostream> #include<string> string reverse(string a) { string b; for(int i=0;i<a.length();i++) { b[a.length()-1-i]=a[i]; } return b; } int main() { cin>>a; cout<<reverse(a); }
本节要点 • 面向对象方法的几个基本概念 • 面向对象的程序设计的特点 • 面向对象的软件开发
面向对象方法的几个基本概念 • 类和对象 • 封装与信息隐蔽 • 抽象 • 继承与重用 • 多态性
类和对象 • 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。程序中,对象相当与某个类型的变量,每个对象都占实际的存储空间。 对象=属性(attribute)+行为(behavior) • 类是一组有相同特性(数据元素)和相同行为(函数)的对象的抽象描述。程序中的类实际上就是数据类型。
封装 • 封装:把对象的属性和行为结合成一个独立的系统单位,尽可能隐蔽对象的内部细节,对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。 • c++中对象的函数名就是对象的对外接口,外界可以通过函数名来调用这些函数实现某些功能。
抽象 • 抽象:将几个有区别的物体的共同性质抽取出来,行成某一类事物的描述。 • 类是对象的抽象,对象则是类的具体表现形式。 • 抽象及分类的能力是学习面向对象所要求的基本能力。
继承与重用 • 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 • 继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 • 例如:轮船是一般类,客轮和渡轮都是特殊类;汽车是一般类,卡车和轿车是特殊类。
多态性 • 多态性:由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。 • 例如:中国军人和美国军人都是军人,当他们听到“敬礼”时,响应方式是不同的。
消息 对象1 对象2 对象3 对象4 • 消息就是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。服务通常被称为方法或函数。 • 处于封闭状态的各种对象,通过消息相互联系。
面向对象方法 面向对象(object oriented) =对象(object) +消息(message) +继承(inheritance)
课堂练习 1、路边正在谈话的两名学生,一个叫张煜,是莱农的学生,另一个叫江南,是青大的学生。 寻找上述描述中的类和对象。 类:学生 属性: 姓名 所在学校 行为: 说话 学生对象:a 属性: 姓名:张煜 所在学校:莱农 行为: 说话 学生对象:b 属性: 姓名:江南 所在学校:青大 行为: 说话
课堂练习 2、描述一个电脑类,并描述该类的两个对象。
面向对象方法的特点 • 设计思路 • 将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。 • 对同类型对象抽象出其共性,形成类。 • 类通过一个简单的外部接口,与外界发生关系。 • 对象与对象之间通过消息进行通讯。
面向对象方法的特点 • 优点: • 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。 • 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。 • 使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
面向对象的软件工程 • 面向对象的分析(OOA) • 面向对象的设计(OOD) • 面向对象的编程(OOP) • 面向对象的测试(OOT) • 面向对象的软件维护(OOSM)
面向对象的分析(OOA) • 系统分析阶段应该扼要精确地抽象出系统必须做什么,但是不关心如何去实现。 • 面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射客观事物。
面向对象的设计(OOD) • 针对系统的一个具体实现运用面向对象的方法。其中包括两方面的工作: • 把OOA 模型直接搬到OOD , 作为OOD 的一部分 • 针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。
面向对象的编程(OOP) • OOP工作就是用一种面向对象的编程语言把OOD模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。
面向对象的测试(OOT) • 测试的任务是发现软件中的错误。 • 在面向对象的软件测试中继续运用面向对象的概念与原则来组织测试,以对象的类作为基本测试单位,可以更准确的发现程序错误并提高测试效率。
面向对象的软件维护(OOSM) • 将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户的需求,不断改进系统。 • 使用面向对象的方法开发的软件,其程序与问题域是一致的,因此,在维护阶段运用面向对象的方法可以大大提高软件维护的效率。
课后练习 • 1、描述一个电子邮箱类,并实例化一个对象。