欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    面向对象的程序设计.ppt

    • 资源ID:57946617       资源大小:867.50KB        全文页数:38页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向对象的程序设计.ppt

    面向对象的程序设计面向对象的程序设计C+中的中的OOPOOPC硬件(硬件(CPU,RAM,IO)Computer现实世界中需要解决的问题,包括:现实世界中需要解决的问题,包括:电信,电力,金融,政府,制造业,商电信,电力,金融,政府,制造业,商贸物流,医疗卫生,教育,交通贸物流,医疗卫生,教育,交通C+现实世界现实世界1.Adobe系统:Photoshop/Illustrator/Acrobat Reader.2.中移动/中电信/中联通/美国电话电报公司(AT&T)/Vodaphone/T-Mobile/Orange:移动电话基础设施,计费系统,800 service,及其他大量支撑平台和服务3.Nokia Symbian OS系统(从内核到外,用C+编写了所有代码),4.Linux操作系统5.Java VM core 6.MySQL数据库C+部分应用列表一7.微软:几乎所有操作系统和开发工具,xp,vista,office,IE浏览器,visual studio,SQL Server.8.Google:网络搜索引擎9.Apple:OS X部分内核/iPod内核10.IM即时通讯软件:MSN ,QQ大部分内核 ,飞鸽11.JPL(Jet Propulsion Lab,NASA):火星探测器自动驱动系统(包括场景分析和路线预测)以及很多地面支持软件。12.弹道导弹防御系统:TMD与NMDC+部分应用列表二13.游戏:.Blizzard:星际争霸I-II,暗黑I,暗黑破坏神II:毁灭之王,魔兽争霸III,魔兽世界。微软:所有游戏。EA:视频游戏引擎。末日三引擎,塞拉利昂,SWAT.Q:What do I need to know to become a programmer for Blizzard?A:Blizzard has several different programming positions available.Programmers are needed to work on B,individual games,3D and graphics,tools,and other areas.All of these positions require an extensive understanding of C and C+.Once you.C+部分应用列表三克莱斯勒,法国电力,CENA,北电网络,SAP,阿尔卡特公司,雷诺,Manugistics,Communaut urbaine(里昂交通管制),Parc科技有限公司,巴克莱全球投资(BGI),TLC(运输,Informatik,物流,GmbH咨询)Deutsche Bahn子公司,国防部的联合作战支援空运中心(JOSAC),Telefonica,思科,尼桑,浦项制铁,索尼银行,isMobile,美国西南航空公司,Novient,沃达丰 TeleCommerce,Sabre Holdings公司,法国电信,爱立信公司,德国电信,朗讯科技,MCI WorldCom,西门子,First Union Home Equity Bank,巴恩,惠普,Adonix,Peugeot,ARINC公司,McHugh 爱立信(Ericsson).lC+Primer PluslThe C+Programming LanguagelC+Primer(潘爱民 译)lEffective C+(侯捷 译)lMore Effective C+(侯捷 译)lC+标准程序库自修教程与参考手册(侯捷 译)l深度探索 C+对象模型(侯捷 译)C+参考书参考书三选一三选一阅读顺序阅读顺序C语言回顾语言回顾l变量,常量变量,常量 Page.21l分支判断分支判断if-else,switchl循环循环for,while,do-while Page.133l数组数组 Page.68l函数函数 Page.29l指针指针C+程序中的头文件程序中的头文件lC+头文件没有扩展名头文件没有扩展名.h include l原原C头文件被重新包裹成为没有扩展名的头文件头文件被重新包裹成为没有扩展名的头文件 stdio.h-cstdio#include math.h-cmath#include#include 正确,但不推荐正确,但不推荐#include 错误错误namespace 名称空间名称空间l解决的问题:名称冲突问题解决的问题:名称冲突问题不同组件库中可能存在同名的变量或函数。当在不同组件库中可能存在同名的变量或函数。当在某个软件开发过程中,同时使用这些组件库,将某个软件开发过程中,同时使用这些组件库,将导致名称冲突问题。导致名称冲突问题。l解决方案:用不同的名称空间来区分不同解决方案:用不同的名称空间来区分不同的开发库。的开发库。防止名称空间冲突的办法防止名称空间冲突的办法主要内容主要内容l设计并实现一个设计并实现一个“宠物诊所管理系统宠物诊所管理系统”l使用使用C+的类机制定义自己的数据类型的类机制定义自己的数据类型宠物诊所类宠物诊所类 PetClinic Class狗类狗类 Dog Class猫类猫类 Cat Classl理解面向对象中实现信息隐藏(理解面向对象中实现信息隐藏(information hiding)的封装()的封装(encapsulate)机制)机制面向对象方法学面向对象方法学机器机器语言语言汇编语言汇编语言面向过程面向过程方法方法C,Basic面向对象方法面向对象方法C+,Java8条指令1KB内存64KB内存l面向对象面向对象OO方法学的出现是软件开发历史中方法学的出现是软件开发历史中顺其自然的一步顺其自然的一步硬件的处理能力不断提升C+的类机制的类机制lC+类机制允许在代码中,由程序员增加自类机制允许在代码中,由程序员增加自己定义的数据类型。其作用是:己定义的数据类型。其作用是:我们在程序中无法将我们在程序中无法将C+内置的内置的int,short,char这些内置数据类型与现实世界中的物体(比如:这些内置数据类型与现实世界中的物体(比如:猫,狗,闹钟,汽车)建立起直接,自然,简单猫,狗,闹钟,汽车)建立起直接,自然,简单的映射的映射闹钟闹钟类类狗狗类类具有共通特征具有共通特征/创建一只狗string name1=旺财;int age1=5;string color1=黑;double weight1=10;bool guided=false;/创建一只猫string name2=汤姆;int age2=2;string color2=灰;double weight2=5;bool isMouseKiller=true;Dog wc;/创建一只狗wc.name=旺财;wc.age=5;wc.color=黑;wc.weight=10;wc.guided=false;Cat tom;/创建一只猫tom.name=汤姆;tom.age=2;tom.color=灰;tom.weight=5;tom.isMouseKiller=true;C语言版C+语言版类定义(一)类定义(一)l 类定义由类定义由两部分两部分组成组成类头类头(class head):C+关键字关键字class及其后面及其后面的类型名称构成的类型名称构成类体类体(class body):由一对花括号包围起来由一对花括号包围起来l类定义最后必须接一个分号表示定义结束类定义最后必须接一个分号表示定义结束 class alarm .;类定义(二)类定义(二)l现实世界的物体有两种特征:现实世界的物体有两种特征:属性(形状,大小,颜色,重量,名称等)属性(形状,大小,颜色,重量,名称等)动作(响铃,刹车,咬人等)动作(响铃,刹车,咬人等)l在在C+中用类来映射现实世界的同种物体,中用类来映射现实世界的同种物体,类中相应地用两种元素来表示现实世界物类中相应地用两种元素来表示现实世界物体的两种特征:体的两种特征:数据成员:比如表示大小,重量的变量数据成员:比如表示大小,重量的变量成员函数:设计者希望在该类对象上执行的各种成员函数:设计者希望在该类对象上执行的各种操作操作类定义示例类定义示例class Dogstring name;class Catstring name;Dog obj1;Cat obj2;/错误错误/obj1和和obj2是不同类型是不同类型/的两种对象的两种对象obj1=obj2;在在C+中引入新的自定义类:狗类中引入新的自定义类:狗类/Dog.h:狗类型狗类型class Dog public:Dog();virtual Dog();/以下是数据成员的声明以下是数据成员的声明stringname;/名字名字stringvariety;/品种品种intage;/年龄年龄stringcolor;/颜色颜色doubleweight;/重量重量boolisMouseKiller;/是否爱管闲事是否爱管闲事;使用使用Dog类类#include using namespace std;#include Dog.hvoid main()Dog wc;/创建一只狗wc.name=旺财;wc.age=5;wc.color=黑;wc.weight=10;wc.isMouseKiller=false;coutwc.name是一只wc.color色的狗。;宠物诊所管理系统宠物诊所管理系统1.0的缺陷的缺陷l缺陷缺陷 代码中的代码中的magic number(幻数)(幻数)问题:问题:i5 直接使用数字直接使用数字5,导致代码难,导致代码难以维护,难以理解以维护,难以理解l解决解决 在诊所在诊所PetClinic类中类中增加一个数增加一个数据成员(属性变量)据成员(属性变量)maxKeepingDogs,用于存放诊所能够同时治疗的狗的数量,用于存放诊所能够同时治疗的狗的数量(这种解决方案也存在缺陷,在后面的缺(这种解决方案也存在缺陷,在后面的缺陷列表中将继续讨论)陷列表中将继续讨论)l系统升级至系统升级至2.0版版数据成员初始化的错误形式!数据成员初始化的错误形式!l数据成员可以是任意类型(基本类型数据成员可以是任意类型(基本类型int,short等,或者是类类型等,或者是类类型string,Dog等)等)l除静态数据成员外,数据成员除静态数据成员外,数据成员不能不能在类体中被在类体中被显示初始化显示初始化class carstring model=BMW;/错误!错误!double length=6.0;/错误!错误!;宠物诊所管理系统宠物诊所管理系统2.0的缺陷的缺陷l缺陷缺陷 目前诊所中只收治了一只狗进行治目前诊所中只收治了一只狗进行治疗,该狗被放入疗,该狗被放入dogSet0。main程序将未程序将未初始化的初始化的dogSet1-dogSet4全部显示,全部显示,在屏幕上输出随机没有意义的数据。在屏幕上输出随机没有意义的数据。l解决方案解决方案 为诊所增加一个收容狗的计数为诊所增加一个收容狗的计数器器inKeepingDogs,用于记录当前收治的,用于记录当前收治的狗的数量。狗的数量。操作:为操作:为PetClinic类类增加新的增加新的数据成员数据成员 inKeepingDogsl系统升级至系统升级至3.0版版宠物诊所管理系统宠物诊所管理系统3.0的缺陷的缺陷l缺陷缺陷 诊所新接收了一条叫小明的狗,但是诊所新接收了一条叫小明的狗,但是忘记忘记同步增加诊所当前收治计数器同步增加诊所当前收治计数器inKeepingDogs 的值。的值。1)增加狗到增加狗到dogSet,2)增加增加inKeepingDogs 表面上看是两个分离表面上看是两个分离的操作,但在逻辑上又应该属于必须同时发生的操作,但在逻辑上又应该属于必须同时发生的一个整体操作。的一个整体操作。l解决方案解决方案 将两个操作视作一个整体,放入将两个操作视作一个整体,放入同一个函数中。把这个函数作为同一个函数中。把这个函数作为成员函数成员函数添加添加至至PetClinic类。类。PetClinic类的一个动作:类的一个动作:收治新的狗收治新的狗 addNewDog(.)l系统升级至系统升级至4.0版版public class PetClinic Dog dogSet;int maxKeepingDogs;int inKeepingDogs;/接收治疗一只新的狗接收治疗一只新的狗 void addDog(Dog d1)dogSet0=d1;inKeepingDogs+;class PetClinic public:PetClinic();virtual PetClinic();Dog dogSet5;int maxKeepingDogs;int inKeepingDogs;/接收治疗一只新的狗接收治疗一只新的狗void addDog(Dog d1);Java版:版:PetClinic.javaC+版版 PetClinic.h类成员函数的声明和定义代码在同一个文件中完成类成员函数的声明在头文件.h中完成,定义在同名的.cpp文件中完成信息隐藏信息隐藏 information hidinglOO的重要原则之一:所有数据都应该尽量的重要原则之一:所有数据都应该尽量隐藏在它所在的类的内部隐藏在它所在的类的内部l信息隐藏是现代软件开发过程中,保证软信息隐藏是现代软件开发过程中,保证软件可维护性的重要方法件可维护性的重要方法l当类的使用者直接使用类中的数据时,请当类的使用者直接使用类中的数据时,请仔细检查你的类设计:到底使用者会用这仔细检查你的类设计:到底使用者会用这个数据做什么?为什么不是类的方法来提个数据做什么?为什么不是类的方法来提供这个操作?供这个操作?getters and settersl基于信息隐藏原则,类的数据成员不应直基于信息隐藏原则,类的数据成员不应直接被外界读写接被外界读写l在在OO类设计时,时常应为类中的一个数据类设计时,时常应为类中的一个数据成员成员xxx提供两个方法提供两个方法getXxx()和和setXXX(),供类的使用者对,供类的使用者对xxx进行读写进行读写l为诊所类为诊所类PetClinic和狗类和狗类Dog的每一个数的每一个数据成员增加两个方法,系统升级至据成员增加两个方法,系统升级至5.0宠物诊所管理系统宠物诊所管理系统5.0的缺陷的缺陷l缺陷缺陷 创建诊所,初始化诊所数据成员创建诊所,初始化诊所数据成员MaxKeepingDogs和和InKeepingDogs是分是分离的步骤,可能导致离的步骤,可能导致PetClinic类使用者在类使用者在生成诊所时忘记其中的一步生成诊所时忘记其中的一步l解决方案解决方案 创建一个类的对象时,可能进创建一个类的对象时,可能进行一系列初始化操作,将这些操作放入类行一系列初始化操作,将这些操作放入类的的构造函数构造函数constructor,在构造函数中进,在构造函数中进行所有初始化。行所有初始化。l系统升级至系统升级至6.0类的构造函数类的构造函数constructorl构造函数与类同名构造函数与类同名class Xxx public:Xxx();Xxx(int,int);l多数类都提供一个没有参数的多数类都提供一个没有参数的缺省构造函缺省构造函数数。用途:如果需要定义一个类对象,但。用途:如果需要定义一个类对象,但暂时不清楚初始值,则使用暂时不清楚初始值,则使用default constructor来定义对象,表明对象已经生来定义对象,表明对象已经生成,但该对象中的数据成员还未被初始化成,但该对象中的数据成员还未被初始化宠物诊所管理系统宠物诊所管理系统6.0的缺陷的缺陷l缺陷缺陷 Haodk诊所生意兴旺,有不少狗慕诊所生意兴旺,有不少狗慕名前来治病,诊所不断收治名前来治病,诊所不断收治Haodk.addDog(xxx)狗。如果超出狗。如果超出maxKeepingDogs上限,上限,6.0系统中,未对系统中,未对此情况做任何处理,导致系统出错此情况做任何处理,导致系统出错l解决方案解决方案 在在addDog()中中增加增加检查诊所是检查诊所是否有剩余容量接收新狗的能力。如果空间否有剩余容量接收新狗的能力。如果空间已满,则拒绝接收,已满,则拒绝接收,修改修改addDog返回值返回值l系统升级至系统升级至7.0宠物诊所管理系统宠物诊所管理系统7.0的缺陷的缺陷l缺陷缺陷 PetClinic类中存放狗的数组,目前类中存放狗的数组,目前其大小固定为其大小固定为5。对于规模较小的诊所,比。对于规模较小的诊所,比如最多只能收治如最多只能收治3只狗,在定义诊所对象时,只狗,在定义诊所对象时,系统也会为其分配系统也会为其分配5个个Dog元素的数组,但元素的数组,但只有前三个只有前三个Dog元素需要被使用,造成内存元素需要被使用,造成内存资源浪费资源浪费l解决方案解决方案 使用可变大小的容器使用可变大小的容器vector替替代数组代数组,在程序运行时,于构造函数中用,在程序运行时,于构造函数中用maxKeepingDogs的值来动态生成的值来动态生成Vectorl系统升级至系统升级至8.0宠物诊所管理系统宠物诊所管理系统8.0版的启示版的启示l理解以下三种角色的定位,了解你是谁!理解以下三种角色的定位,了解你是谁!系统的最终用户系统的最终用户宠物诊所的工作人员宠物诊所的工作人员类的使用者类的使用者宠物诊所系统开发人员(比如宠物诊所系统开发人员(比如main的程序员)的程序员)类的开发者类的开发者PetClinic,Dog类的开发人员类的开发人员l类的开发者类的开发者用用vector替代数组,并非为了替代数组,并非为了方便方便宠物诊所的工作人员宠物诊所的工作人员。而是为。而是为PetClinic类的用户类的用户在编写系统时,提供可在编写系统时,提供可以定义任意容量诊所的能力以定义任意容量诊所的能力再次讨论构造函数(一)再次讨论构造函数(一)l对象构造对象构造的顺序的顺序1.执行该对象中所有成员对象的缺省构造执行该对象中所有成员对象的缺省构造函数函数2.执行该对象的构造函数执行该对象的构造函数l类的定义不引发任何内存分配。只有当定类的定义不引发任何内存分配。只有当定义一个类的对象时,才会为这个对象分配义一个类的对象时,才会为这个对象分配内存空间,然后再调用对象的构造函数进内存空间,然后再调用对象的构造函数进行初始化操作。(注意分配空间和调用构行初始化操作。(注意分配空间和调用构造函数的前后顺序)造函数的前后顺序)宠物诊所管理系统宠物诊所管理系统8.0的缺陷的缺陷l缺陷缺陷 尽管在尽管在8.0系统中,用系统中,用getter/setter/addDog 这些成员函数对类的使用这些成员函数对类的使用者隐藏了类的细节(数据成员),但是类者隐藏了类的细节(数据成员),但是类使用者依然可以在代码中绕过成员函数,使用者依然可以在代码中绕过成员函数,直接访问类的数据成员直接访问类的数据成员l解决方案解决方案 将数据成员从类体的将数据成员从类体的public部部分抽出,放入类体的分抽出,放入类体的private部分部分l系统升级至系统升级至9.0类成员访问限制(一)类成员访问限制(一)l定义类成员时,用访问限定符定义类成员时,用访问限定符 public,private,protected指定成员能被谁访问指定成员能被谁访问l公有成员公有成员 public:在类的外部和内部都可以:在类的外部和内部都可以被使用被使用l私有成员私有成员 private:只能在类的内部自己使用:只能在类的内部自己使用 (类的友员也可访问(类的友员也可访问private成员)成员)类成员访问限制(二)类成员访问限制(二)l类的私有区域(类的私有区域(private)中的数据成员或)中的数据成员或者成员函数者成员函数只能只能被该类自己的成员方法访被该类自己的成员方法访问问l类的公有区域(类的公有区域(public)中的数据成员或者)中的数据成员或者成员函数成员函数既可以既可以被该类自己的成员方法访被该类自己的成员方法访问,问,也可以也可以被类外的程序(比如主函数)被类外的程序(比如主函数)访问访问l不要在公有区域放置任何成员数据不要在公有区域放置任何成员数据,这会,这会导致类的使用者和实现者之间创建不良关导致类的使用者和实现者之间创建不良关系系类的析构函数类的析构函数-对象销毁的收尾工作!对象销毁的收尾工作!l析构函数析构函数destructor在类对象生命结束时,在类对象生命结束时,释放对象占用的资源,还用于类设计者希释放对象占用的资源,还用于类设计者希望在最后一次使用对象之后执行的任何操望在最后一次使用对象之后执行的任何操作作l析构函数与类同名,前面加上波浪线析构函数与类同名,前面加上波浪线。析。析构函数不返回任何值也没有任何参数。一构函数不返回任何值也没有任何参数。一个类可以定义多个构造函数,但只能有一个类可以定义多个构造函数,但只能有一个析构函数个析构函数lC+析构函数中,注意释放析构函数中,注意释放堆空间堆空间,否则由,否则由此出现的内存泄漏最终会导致系统崩溃此出现的内存泄漏最终会导致系统崩溃宠物诊所管理系统宠物诊所管理系统10.0版更新功能版更新功能l在在Dog类中增加类中增加double型数据成员型数据成员temperature,用于指示狗对象是否健康,用于指示狗对象是否健康temperature39.0,需要进行治疗,需要进行治疗l在诊所类在诊所类PetClinic类中增加成员函数类中增加成员函数治疗治疗cure(),每,每cure一次,狗的体温下降一度。一次,狗的体温下降一度。若体温下降至若体温下降至39度,继续度,继续cure不会再改变体温,不会再改变体温,表明该狗对象已经治愈表明该狗对象已经治愈出院出院removeDog(),送一只痊愈的狗出院。从,送一只痊愈的狗出院。从dogSet中删除这只狗,计数器减一。中删除这只狗,计数器减一。类的拷贝构造函数类的拷贝构造函数l用一个类对象初始化该类的另一个对象被用一个类对象初始化该类的另一个对象被称为缺省按成员初始化。也就是说,一个称为缺省按成员初始化。也就是说,一个类对象向该类的另一个对象作拷贝是依次类对象向该类的另一个对象作拷贝是依次拷贝每个非静态数据成员来实现拷贝每个非静态数据成员来实现l类的设计者也可以自行设计一个拷贝构造类的设计者也可以自行设计一个拷贝构造函数来改变缺省的行为。因为在现实环境函数来改变缺省的行为。因为在现实环境中,缺省初始化行为常常是不合适的中,缺省初始化行为常常是不合适的l不正确的拷贝构造函数,将引起不正确的拷贝构造函数,将引起C+程序中程序中常见的错误:常见的错误:空悬指针空悬指针

    注意事项

    本文(面向对象的程序设计.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开