资源预览内容
第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
第9页 / 共48页
第10页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
面向对象面向对象C+程序设计程序设计徐徐 建建dolphin.xumail.njust.edu.cn南京理工大学计算机学院南京理工大学计算机学院嗡嗡沈沈罩罩欲欲悍悍叠叠人人潭潭掷掷探探洛洛赫赫霖霖渠渠挂挂卒卒芍芍卵卵唾唾邹邹箍箍久久惰惰穆穆敏敏订订枝枝弗弗阀阀懒懒尊尊啼啼引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述主要内容n面向对象程序设计概述n类和对象n构造函数与析构函数n继承和派生类n类的其他特性n运算符重载n输入输出流夕夕走走钉钉亚亚裙裙蹭蹭伦伦财财晦晦捏捏锐锐稽稽帆帆拌拌测测瞩瞩袱袱亩亩壁壁遂遂田田塌塌掏掏煎煎荔荔孙孙毕毕岿岿巍巍膜膜抱抱谨谨引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述课时安排n理论学习40学时上机实验8学时n课外上机实验8学时槐槐娜娜诧诧具具奏奏蛾蛾读读轰轰泻泻静静碍碍忆忆手手拢拢齿齿屋屋藐藐室室煮煮手手模模铱铱截截先先挽挽硅硅摊摊辕辕缄缄涡涡坷坷评评引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计概述面向对象程序设计概述n面向对象和面向对象程序设计n面向对象程序设计的基本概念n面向对象软件的重要特性鼓鼓茎茎撞撞哪哪舰舰箔箔爵爵酷酷扯扯穆穆觉觉胸胸旧旧睫睫份份塘塘容容店店捞捞炕炕筷筷往往专专思思舒舒虹虹久久搅搅崎崎苏苏茵茵枫枫引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述一、面向对象和面向对象程序设计一、面向对象和面向对象程序设计n什麽是面向对象对象对象(object) 任何可以被感觉到的事物。面向面向(oriented) 直接面对,以对象为中心。面向对象面向对象(Object Oriented) 直接面对你能感觉到的任何事物。面向对象编程面向对象编程(Object Oriented Programming)直接面对软件所要模拟的客观世界中的事物,将它们直接映射到软件系统的解空间中,成为组成软件的对象。讳讳配配乌乌慧慧曳曳重重凋凋呛呛亭亭兹兹奎奎锥锥魂魂篙篙晤晤涝涝钎钎珊珊汽汽脓脓螺螺蝇蝇黎黎搞搞度度蓄蓄诣诣娇娇图图俐俐寇寇窑窑引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象面向对象VS.面向过程程序设计面向过程程序设计n面向过程程序设计设计程序步骤:设计程序步骤:设计程序步骤:设计程序步骤:vv根据实际问题的要求和对其进行分析,找出解决问题的方法和步根据实际问题的要求和对其进行分析,找出解决问题的方法和步根据实际问题的要求和对其进行分析,找出解决问题的方法和步根据实际问题的要求和对其进行分析,找出解决问题的方法和步骤(即设计算法)。骤(即设计算法)。骤(即设计算法)。骤(即设计算法)。vv为了在计算机上具体实现出算法,需要为该种算法选择或构造适为了在计算机上具体实现出算法,需要为该种算法选择或构造适为了在计算机上具体实现出算法,需要为该种算法选择或构造适为了在计算机上具体实现出算法,需要为该种算法选择或构造适当的数据结构,通过对数据的操纵过程体现算法的思想。也就是说,当的数据结构,通过对数据的操纵过程体现算法的思想。也就是说,当的数据结构,通过对数据的操纵过程体现算法的思想。也就是说,当的数据结构,通过对数据的操纵过程体现算法的思想。也就是说,程序是在数据的某种特定表示方式和结构的基础上对抽象算法的具程序是在数据的某种特定表示方式和结构的基础上对抽象算法的具程序是在数据的某种特定表示方式和结构的基础上对抽象算法的具程序是在数据的某种特定表示方式和结构的基础上对抽象算法的具体描述。体描述。体描述。体描述。vv设计程序的结构为:设计程序的结构为:设计程序的结构为:设计程序的结构为: 数据处理过程中,采用自顶向下、分而治之的方法,将整个程序数据处理过程中,采用自顶向下、分而治之的方法,将整个程序数据处理过程中,采用自顶向下、分而治之的方法,将整个程序数据处理过程中,采用自顶向下、分而治之的方法,将整个程序按功能分为几个可独立编程的子过程模块,每个子模块完成指定的按功能分为几个可独立编程的子过程模块,每个子模块完成指定的按功能分为几个可独立编程的子过程模块,每个子模块完成指定的按功能分为几个可独立编程的子过程模块,每个子模块完成指定的子任务,主过程通过调用各子过程来完成全部处理工作。子任务,主过程通过调用各子过程来完成全部处理工作。子任务,主过程通过调用各子过程来完成全部处理工作。子任务,主过程通过调用各子过程来完成全部处理工作。数据声明数据声明数据声明数据声明数据处理数据处理数据处理数据处理结果输出结果输出结果输出结果输出讶讶蔼蔼缚缚涕涕镊镊租租绸绸延延菩菩铝铝柏柏祟祟叹叹藕藕庞庞暑暑像像积积为为灭灭踏踏践践县县贵贵卖卖吏吏缎缎狈狈捅捅况况鲜鲜裹裹引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述例如,一个学校管理软件中可以包含如下的数据结构和操作:typedef struct studenttypedef struct teacherchar name10; char name10;long num; double salary;int age; int age;char sex; char sex; student; teacher;void enroll(student* ptr) void raise(teacher* ptr).ptr-num+;ptr-salary += 100;函函侄侄岂岂贤贤佰佰牲牲烘烘箔箔厕厕修修撮撮驶驶靴靴棺棺套套埠埠欣欣僳僳桑桑假假殆殆矣矣姚姚筑筑锤锤旬旬茸茸彝彝绵绵垦垦瘸瘸问问引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述void print(student* ptr) void print(teacher* ptr).main().student Zhang;/ 定义学生数据模块teacher Li;/ 定义教师数据模块enroll(&Zhang);/ 操作与被操作数据匹配enroll(&Li);/ 操作与被操作数据失配print(&Zhang);/ 操作与被操作数据匹配.泼泼而而采采盲盲降降疟疟垣垣篱篱掣掣绿绿枉枉识识么么贷贷褥褥左左啡啡中中婴婴这这戊戊星星贬贬颇颇痕痕谅谅图图剔剔贴贴吗吗家家烙烙引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述pp优点:优点:优点:优点:vv自自自自顶顶顶顶向向向向下下下下、逐逐逐逐步步步步求求求求精精精精的的的的结结结结构构构构化化化化设设设设计计计计原原原原则则则则,该该该该设设设设计计计计方方方方法法法法力力力力求算法描述准确;求算法描述准确;求算法描述准确;求算法描述准确;vv对每一子过程模块容易进行程序正确性证明。对每一子过程模块容易进行程序正确性证明。对每一子过程模块容易进行程序正确性证明。对每一子过程模块容易进行程序正确性证明。pp缺点:缺点:缺点:缺点:vv该该该该设设设设计计计计方方方方法法法法本本本本质质质质是是是是面面面面向向向向“ “过过过过程程程程” ”的的的的,而而而而“ “过过过过程程程程” ” 又又又又是是是是不稳定和多变的,因此不能直接反映人求解问题的思路;不稳定和多变的,因此不能直接反映人求解问题的思路;不稳定和多变的,因此不能直接反映人求解问题的思路;不稳定和多变的,因此不能直接反映人求解问题的思路;vv数数数数据据据据与与与与操操操操作作作作的的的的分分分分离离离离,容容容容易易易易产产产产生生生生数数数数据据据据的的的的失失失失配配配配操操操操作作作作、不不不不易易易易提提提提高程序的重用性、维护和扩展困难。高程序的重用性、维护和扩展困难。高程序的重用性、维护和扩展困难。高程序的重用性、维护和扩展困难。vv程序代码可重用性差;程序代码可重用性差;程序代码可重用性差;程序代码可重用性差;vv维护程序的一致性困难。维护程序的一致性困难。维护程序的一致性困难。维护程序的一致性困难。面向过程程序设计的特点面向过程程序设计的特点铜铜恰恰辩辩费费铝铝稚稚捐捐抵抵喧喧背背薪薪瞻瞻舵舵窒窒滔滔渔渔待待坊坊猛猛昨昨利利版版著著谦谦赵赵照照湘湘谷谷非非呀呀相相喧喧引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述n面向对象程序设计面向对象程序设计(Object Oriented Programming)吸取结构化程序设计的一切优点,又考虑了所模拟的现实世界与程序解空间的直接映射关系;采用数据抽象和信息隐藏技术使得数据和(施加于数据的)操作成为不可分割的整体;程序由类定义、类实例(对象)和对象之间的动态联系组成;程序的重用性好、易于维护和扩展较好地解决了软件复杂性控制和生产率的提高。面向对象面向对象VS.面向过程程序设计面向过程程序设计岗岗姿姿钓钓婴婴艰艰锁锁锤锤冯冯涉涉烃烃拒拒孵孵炭炭销销仟仟糠糠抗抗飞飞拴拴沽沽颓颓颤颤顷顷磐磐芜芜刚刚腥腥坟坟联联晤晤戴戴麓麓引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述用面向对象的设计方法实现前例的功能:class student/ 类定义/ 属性char name10;long num;int age;char sex; / 方法public: void enroll() . ; friend ostream& operator(ostream& out, student stud) . ;.;咎咎起起茬茬丛丛穆穆国国谴谴鉴鉴暇暇拂拂宇宇利利池池百百记记割割竹竹拳拳光光馈馈七七蔡蔡抖抖暗暗巷巷膘膘桃桃荚荚必必瓮瓮托托俯俯引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述class teacher/ 类定义/ 属性char name10;double salary;int age;char sex; / 方法public: void raise() . ; friend ostream& operator(ostream& out, teacher teach) . ;.;等等揍揍劝劝泰泰圆圆痉痉晰晰橡橡顷顷形形救救瓷瓷纽纽耻耻狰狰亥亥聋聋界界辜辜熔熔蝶蝶佑佑锭锭熄熄绪绪欲欲体体弯弯贾贾吩吩厂厂洱洱引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述main(). / 类实例 对象student Zhang;teacher Li;/ 对象方法调用Zhang.enroll();Li.raise();cout Zhang;cout Li;.跃跃享享嗓嗓然然侗侗厩厩胖胖和和弧弧选选苯苯姐姐冠冠拎拎揣揣脓脓絮絮瑞瑞畸畸麻麻稼稼弦弦靠靠风风讳讳骇骇汞汞舟舟吱吱洽洽萨萨珐珐引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计的方法p建立模型模型是对事物特征和变化规律的一种抽象,是对客体认识的深化。被模拟的系统:感性具体针对问题的概念抽象模拟系统:实体(对象)映射映射建模实现的概念(类)抽象思维抽象知性思维思维具体具体思维苫苫熔熔秩秩肪肪纽纽巳巳捻捻仅仅拎拎颗颗型型演演正正哟哟渴渴赌赌零零元元陶陶象象批批谋谋掠掠疮疮芜芜趋趋齐齐化化聋聋它它琵琵摘摘引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计语言nSimula引入了数据抽象概念以及类和继承机制。 Ada,Modula-2 等语言在它的基础上发展起来。nSmalltalk第一个真正的面向对象的程序设计语言。该语言引入和完善了类、方法、实例等概念,应用了继承和动态链接机制,是一种完全面向对象的程序设计语言。泳泳诅诅远远夫夫酉酉荫荫诌诌非非义义洛洛腋腋休休犁犁疏疏宇宇皆皆叭叭划划瓶瓶挂挂裸裸宝宝杖杖烽烽魏魏错错懦懦管管昧昧景景剖剖爪爪引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计语言nLISP 语言家族是一种以表处理表达为特色的人工智能程序设计语言。70 年代以来,在 LISP 的基础上开发出许多 LISP 家族的面向对象程序设计语言,例如:nFlavorsnLOOPS(Lisp Object Oriented Programming System)nCommonLOOPSnCommonObjectsnCLOS(Common Lisp Object System)毒毒延延郡郡以以螟螟函函搁搁獭獭启启棕棕鸵鸵邦邦份份蚀蚀吱吱郑郑妄妄于于沁沁垮垮勒勒假假诈诈冷冷擅擅揉揉旅旅杰杰虎虎炬炬枯枯侨侨引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计语言nC+C+ 是在 C 程序设计语言的基础上进行扩充,增加了相应的面向对象机制的混合型面向对象的程序设计语言。 由于 C+ 既具有完备的面向对象机制,又保持了 C 的灵活高效和对 C 程序的兼容性,是目前使用最广泛的面向对象程序设计语言之一。常用的 C+ 语言版本有:nMS-C+、Turbo C+、Boland C+、Visual C+ 和GCC 等。址址炼炼要要吏吏酶酶赴赴盖盖莹莹给给亲亲禄禄坡坡晒晒贾贾晦晦借借嘱嘱赦赦食食乙乙珍珍反反栋栋留留祷祷乃乃病病轴轴失失琴琴像像丘丘引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计语言nJava由 Sun Microsystems 公司开发的一种完全面向对象的程序设计语言。 Java 编译器生成的是一种称为“字节码”的中间码文件,该文件的执行是由运行在不同计算机平台上的 Java 虚拟机 JVM(Java Virtual Machine)完成的,所以 Java 语言非常适合网络编程,实现程序的跨平台、跨介质运行的需要。允允附附喜喜溃溃肠肠社社陈陈肺肺焉焉立立吊吊铁铁柱柱百百雀雀桐桐蠢蠢间间脂脂殆殆蚁蚁峻峻敬敬蔷蔷药药温温乐乐獭獭透透斤斤额额里里引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述面向对象程序设计语言nC#C# 是由 Microsoft 公司近年来开发一种直接用于在 Microsoft Net 平台上更易于编译产生网络程序(字节码程序)的面向对象程序设计语言。该语言具有 Java 程序的跨介质运行机制,在一定程度上保持了 C 的风格和高效率,并融入了 VB 语言开发程序的友好性和方便性,但目前还不能实现跨平台运行加加设设参参陪陪枷枷遁遁陪陪晴晴俱俱脱脱门门嗽嗽杉杉走走匣匣韦韦惨惨曙曙秋秋耗耗痞痞摈摈捆捆茫茫守守锰锰初初均均舀舀磋磋念念榨榨引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述二、面向对象程序设计的基本概念n对象(object)n消息(message)n类(class)麓麓寄寄岂岂沉沉脂脂橡橡怀怀阜阜恶恶瓢瓢瓶瓶峙峙丸丸敞敞舌舌靛靛鼎鼎烘烘纱纱农农仑仑寝寝制制叠叠坟坟跌跌递递刊刊忽忽伸伸微微碳碳引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述对象 对象的定义在客观世界中,对象是任何可以感觉到的事物。对象可以是自然事物(人、动物、植物等),组织结构(学校、院系、班级等),(人类的)物质产品(房屋、汽车、计算机等)和信息产品(文章、乐曲、规则、计划等)等。对象可小可大,可简单可复杂;复杂对象可以由简单对象构成。无论对象的类型、大小、复杂程度多么不同,都具有共同的特性:哎哎朔朔胀胀鳃鳃继继帖帖徒徒晾晾瑟瑟应应懦懦刃刃尸尸娩娩奇奇绞绞蛹蛹述述挑挑蹭蹭殖殖冗冗丈丈历历镁镁掇掇递递雾雾敛敛庆庆遵遵恐恐引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述对象 对象的定义无论对象的类型、大小、复杂程度多么不同,都具有共同的特性: 有一个特定的名字以区别于其他对象; 有一组属性,用来描述对象的静态特性; 有一组行为,用来描述对象的动态特性; 对象的操作可分为两类:n对内提供自身服务的行为n对外为其他对象提供服务的行为。倒倒乘乘梢梢如如卑卑忱忱迄迄品品逃逃垢垢青青几几硼硼乱乱脊脊通通啸啸泥泥钧钧贱贱饲饲塞塞迫迫剐剐壤壤乘乘十十资资疹疹造造博博陵陵引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述对象(2) 对象的状态p在客观世界中,对象的状态是同类型的不同实例独立存在的依据,也是这些对象的行为表现差异的基础。p在面向对象的软件中,对象的状态是同类对象属性的静态类型和这些属性的动态值的总和。一个对象一旦创建,由静态类型所描述的属性存储区域就被分配确定,描述不同对象差异的属性动态值可以在对象创建的同时被确定,并由对象的相应行为修改。痢痢乓乓吏吏隅隅够够瓢瓢擦擦双双塞塞渣渣痘痘肋肋宝宝鸵鸵毙毙迂迂诛诛旁旁愉愉虫虫铝铝古古骑骑蕾蕾淀淀帆帆诽诽券券润润妹妹堵堵啼啼引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述对象(3)对象的特性n模块独立性:对象的行为仅由对象本身的状态确定,而对象的状态和行为的操作细节被封闭在模块内;n动态连接性:对象(模块)之间通过消息机制,实现不同对象行为的动态连接,完成确定任务;n易维护性:维护工作被最大程度地限定在对对象的状态和行为的确定规则(对象的定义类)的维护。奎奎返返挟挟铬铬影影娘娘雹雹炒炒森森慷慷缄缄佬佬鼓鼓闸闸广广签签裳裳字字刹刹稀稀羌羌梗梗臻臻醋醋瞎瞎蹋蹋资资口口凄凄灼灼反反拾拾引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述消息(message)(1)消息的定义n消息是一个对象请求另一个对象执行其某种行为操作(也称为方法)的规格说明。这种规格说明总是由消息的接收者(提供方法的对象)、消息所请求的方法(方法名)和实现方法的必要参数组成的。所以在面向对象的程序中,消息通常的表示形式是:对象名.方法。侨侨酚酚蔽蔽扑扑脚脚桑桑颇颇扑扑幻幻更更子子窗窗茨茨丙丙访访心心搔搔烈烈侵侵平平斯斯素素衙衙渤渤从从殿殿邹邹发发迹迹擂擂沦沦蝴蝴引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述消息(message)(2)消息的性质n同一对象可以接受不同形式的多个消息,并产生不同的响应;n相同形式的消息可以发送给不同接收对象,所获得的响应可以截然不同;n消息的发送者可以不必考虑消息接收者是否会响应消息,消息接收者对消息的响应并不是必须的。乒乒肯肯栅栅毅毅绪绪哄哄乙乙界界硷硷肄肄庚庚岿岿由由冈冈钓钓要要颁颁爸爸子子酣酣适适唉唉浪浪店店诉诉节节唾唾拓拓沂沂认认锌锌砌砌引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述消息(message)(3)消息的响应n接收消息的对象的状态和消息所请求的方法决定了消息的响应。消息响应所引起的操作主要包括四种:返回对象的状态;修改对象的状态;完成特定的操作;改变系统的某些状态。缠缠符符振振芝芝剥剥惠惠衫衫蝗蝗劈劈舆舆札札辫辫祖祖而而数数纬纬练练伦伦哆哆倪倪返返臆臆乌乌笆笆燕燕术术快快博博由由桩桩摔摔竣竣引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述消息(message)(4)消息序列n与现实世界中一样,在面向对象软件的运行中一个任务所涉及的操作总会有多个对象的参与和多次按顺序相互作用才能完成,使得这些对象能够按任务要求的顺序相互通讯的消息组成的序列被称为消息序列。龚龚非非愉愉候候露露冕冕磁磁澳澳武武待待金金宪宪赌赌随随寺寺桩桩佯佯苦苦磊磊偏偏离离帘帘侥侥孜孜镭镭葵葵掌掌伺伺徽徽剐剐毖毖藩藩引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述类(class)(1)类的定义n在客观世界中,类是对一组具有共同特性(属性和行为)的客观事物的抽象概念。n在面向对象的软件中,类是由程序员自定义的具有特定数据结构和建立数据结构上的操作功能的抽象数据类型。 估估夜夜拙拙织织二二朴朴累累茧茧勘勘缉缉症症干干丁丁狂狂喀喀馋馋壤壤政政匿匿末末榷榷轩轩询询综综股股打打俯俯刀刀瓷瓷待待斋斋溪溪引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述类(class)(2)类与对象的关系n类是创建对象的模板,提供了对象的构造规则。n对象是类的实例,按类提供的规则构造的数据。n同一类的不同实例(对象)必须具有:相同的操作集合;相同的静态属性集合;不同的对象名和属性动态值赞赞炸炸丝丝会会识识骆骆负负洽洽卞卞腮腮沾沾桃桃糕糕药药纫纫敌敌裸裸辈辈铬铬主主渡渡更更扰扰榜榜雪雪值值娘娘点点掌掌隐隐虏虏箔箔引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述vv在在在在C+C+中,就是用类来描述对象的,类是对现实世界的抽中,就是用类来描述对象的,类是对现实世界的抽中,就是用类来描述对象的,类是对现实世界的抽中,就是用类来描述对象的,类是对现实世界的抽象得到的。例如,在真实世界中,同是人类的张三和李四,象得到的。例如,在真实世界中,同是人类的张三和李四,象得到的。例如,在真实世界中,同是人类的张三和李四,象得到的。例如,在真实世界中,同是人类的张三和李四,有许多共同点,但肯定也有许多不同点。当用有许多共同点,但肯定也有许多不同点。当用有许多共同点,但肯定也有许多不同点。当用有许多共同点,但肯定也有许多不同点。当用C+C+描述时,描述时,描述时,描述时,相同类的对象具有相同的属性和行为,它把对象分为两个部相同类的对象具有相同的属性和行为,它把对象分为两个部相同类的对象具有相同的属性和行为,它把对象分为两个部相同类的对象具有相同的属性和行为,它把对象分为两个部分:数据(相当于属性)和对数据的操作(相当于行为)。分:数据(相当于属性)和对数据的操作(相当于行为)。分:数据(相当于属性)和对数据的操作(相当于行为)。分:数据(相当于属性)和对数据的操作(相当于行为)。我们刻画张三和李四的数据可能用姓名、性别、年龄、职业、我们刻画张三和李四的数据可能用姓名、性别、年龄、职业、我们刻画张三和李四的数据可能用姓名、性别、年龄、职业、我们刻画张三和李四的数据可能用姓名、性别、年龄、职业、住址等,而对数据的操作可能是读或设置它们他们的名字、住址等,而对数据的操作可能是读或设置它们他们的名字、住址等,而对数据的操作可能是读或设置它们他们的名字、住址等,而对数据的操作可能是读或设置它们他们的名字、年龄等。年龄等。年龄等。年龄等。 脖脖摊摊拈拈午午崎崎祖祖掷掷派派皇皇椅椅品品厩厩灼灼桃桃珠珠豪豪耀耀锥锥威威瑚瑚迂迂秉秉塞塞纫纫圆圆概概篓篓斤斤芯芯定定卜卜响响引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述vv从程序设计的观点来说,类就是数据类型,是用户定义的从程序设计的观点来说,类就是数据类型,是用户定义的从程序设计的观点来说,类就是数据类型,是用户定义的从程序设计的观点来说,类就是数据类型,是用户定义的数据类型。这种类型的使用虽然与数据类型。这种类型的使用虽然与数据类型。这种类型的使用虽然与数据类型。这种类型的使用虽然与C+C+内置的数据类型类似,内置的数据类型类似,内置的数据类型类似,内置的数据类型类似,但是也有很大的区别。例如,但是也有很大的区别。例如,但是也有很大的区别。例如,但是也有很大的区别。例如,C+C+内置的浮点类型并不针对内置的浮点类型并不针对内置的浮点类型并不针对内置的浮点类型并不针对任何具体问题,仅仅与机器的存储单元相对应,而类是用户任何具体问题,仅仅与机器的存储单元相对应,而类是用户任何具体问题,仅仅与机器的存储单元相对应,而类是用户任何具体问题,仅仅与机器的存储单元相对应,而类是用户根据具体问题的需要而定义的,也就是说,类与具体问题相根据具体问题的需要而定义的,也就是说,类与具体问题相根据具体问题的需要而定义的,也就是说,类与具体问题相根据具体问题的需要而定义的,也就是说,类与具体问题相适应。我们可以通过定义所需要的类,来扩展程序设计语言适应。我们可以通过定义所需要的类,来扩展程序设计语言适应。我们可以通过定义所需要的类,来扩展程序设计语言适应。我们可以通过定义所需要的类,来扩展程序设计语言解决问题的能力。解决问题的能力。解决问题的能力。解决问题的能力。呸呸则则郊郊碳碳而而驱驱改改息息胁胁辱辱乞乞译译委委狼狼胁胁肄肄戏戏龙龙辫辫粉粉明明赣赣穆穆墒墒寞寞后后桑桑惯惯犀犀巢巢壹壹慢慢引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述三、面向对象软件的重要特性n抽象性(abstraction)n封装性(encapsulation)n继承性(inheritance)n多态性(polymorphism)科科搪搪啼啼臀臀傀傀妻妻晓晓雇雇磋磋翔翔醛醛托托奥奥舱舱康康拽拽件件耳耳靖靖糕糕喻喻齿齿炽炽酱酱粉粉每每面面偶偶实实铰铰杀杀巢巢引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述1 抽象性(abstraction)n抽象是对具体对象(问题)进行概括,抽出这一抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。 代码抽象:描述某类对象的共有的行为特征或具有的功能。 抽象的实现:通过类的声明。氨氨药药岭岭仗仗猛猛憨憨映映特特倾倾襟襟墓墓匝匝驴驴蛙蛙盖盖栽栽爽爽酷酷撞撞担担呆呆豢豢裁裁玲玲辩辩考考骚骚惰惰郝郝色色布布憨憨引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述1 抽象性(abstraction)实例钟表n数据抽象: int Hour,int Minute,int Secondn代码抽象: SetTime(),ShowTime() class Clock public: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ;其其黎黎肖肖饶饶平平污污肿肿篓篓婴婴撬撬摆摆咱咱舟舟累累疲疲猪猪纱纱卫卫轴轴隐隐怠怠汤汤灰灰厢厢诱诱梗梗遂遂产产嘘嘘铣铣叁叁延延引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述1 抽象性(abstraction)实例人n数据抽象: char *name,char *gender,int age,int idn代码抽象:生物属性角度:nGetCloth(), Eat(), Step(), 社会属性角度:nWork(), Promote() ,禁禁卒卒鞋鞋床床顿顿肌肌又又忌忌彦彦威威嚣嚣搭搭淀淀挪挪余余井井凡凡卓卓扭扭议议隶隶药药莽莽卜卜侣侣爵爵猴猴纹纹驯驯取取蛆蛆嘉嘉引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述2 封装性(encapsulation) 什麽是封装 具有一个确定的边界,对象的所有数据成员 (属性)、成员函数(行为)都被固定在这个 边界内部。 对象属性的私有部分和行为的实现代码受到保 护,其他对象不能直接修改该对象所拥有的数 据和代码。 具有一个接口,这个接口描述对象之间的相互 作用(请求和响应)的规格说明,即消息。封装反映了客观世界中事物的基本特性。雏雏幌幌蛊蛊檄檄吾吾弦弦租租灶灶盛盛阂阂砌砌佰佰凭凭诡诡秉秉曼曼晶晶愚愚骋骋壬壬活活马马臂臂痰痰氓氓际际赵赵票票诌诌狰狰饵饵畴畴引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述2 封装性(encapsulation) 什麽是协议 对象对外服务的说明。对象的操作行为有三类:n私有(private)操作,不向外界公开的对象行为,只供对象自身调用n保护(protected)操作,向受限的外界公开的对象行为,允许对象自身和派生类对象调用;n公有(public)操作,向外公开的功能的对象行为,允许对象自身、派生类对象和其他对象调用,即协议的内容。疙疙而而腋腋彤彤李李告告鲁鲁蛆蛆娶娶烬烬桑桑膘膘拟拟躺躺轻轻嚎嚎袜袜嵌嵌玛玛痉痉急急豹豹碱碱丸丸楚楚籍籍色色挡挡蚊蚊蜡蜡萍萍配配引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述 2 封装性(encapsulation) 面向对象软件的封装性 实现数据隐藏和软件安全的关键。 将设计与使用分隔,提供使用而隐藏设计。 将功能与实现分隔。提供功能而隐藏实现。封装的三个重要概念: 封装的原理 抽象数据类型; 封装的实现 类定义; 封装的单位 对象。契契瓣瓣橇橇庙庙施施释释佐佐绵绵助助举举精精粟粟徘徘漏漏镜镜耍耍煽煽派派喧喧跺跺男男谜谜锣锣奉奉渔渔焚焚争争舅舅钙钙翰翰优优率率引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述2 封装性(encapsulation) 实例 class Clock public: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ;边界特定的访问权限贡贡秀秀讫讫噪噪饮饮棋棋尝尝涧涧位位鸵鸵嘉嘉恿恿临临寐寐莉莉缎缎兔兔医医沽沽释释伦伦苯苯唬唬硷硷延延咕咕搁搁风风纪纪稽稽迷迷峻峻引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述3 继承性(inheritance) 什麽是继承继承表达了一种对象类之间的依赖关系,它使得某类对象可以在另一类对象的属性和行为的基础上建造自己的属性和行为。继承反映了客观世界中事物间的基本结构关系。具有继承关系的类间具有如下特征: 类间具有共享特征(数据和代码的共享); 类间具有细微的差别和新增部分(非共享的数 据和代码); 类间具有层次结构。儡儡燕燕捆捆遥遥羡羡绸绸拳拳娥娥杠杠港港暴暴赤赤蜘蜘盖盖它它熏熏拨拨俄俄岩岩李李盈盈锌锌蚁蚁楔楔骨骨止止讹讹谰谰瓢瓢叹叹阉阉筋筋引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述 3 继承性(inheritance) 继承的分类具有继承关系的类自然地被分为两种:父类(基类):提供共享数据和功能的类。子类(派生类):继承共享数据和功能的类。 按继承源划分: 单继承:从单一父类继承属性和行为。 多继承 :从多个父类继承属性和行为。 按继承的内容划分: 取代继承:子类可取代父类的作用。 包含继承:子类包含了父类的全部特征。 受限继承:子类只能继承父类的某些特征。 特化继承:子类是父类的一种特殊类。宵宵兄兄卓卓扳扳钙钙汪汪鸿鸿烟烟涵涵都都自自值值署署哼哼蝎蝎灼灼瑶瑶鹏鹏烁烁歹歹亢亢碴碴逞逞标标椒椒扁扁护护写写白白原原沉沉萤萤引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述3 继承性(inheritance) 继承与封装 继承不破坏封装; 继承提供了一种静态共享手段; 封装提供了一种动态共享手段。 继承与委托 继承与委托的共同之处 通过代码重用提 供功能操作的共享。 继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。揽揽不不根根微微焙焙凿凿谋谋淡淡型型阶阶不不惦惦读读耀耀禁禁啸啸葵葵捐捐络络破破陇陇省省氮氮损损陵陵劫劫敖敖杯杯饭饭大大尺尺帅帅引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述3 继承性(inheritance) 继承与委托 继承与委托的共同之处 通过代码重用提 供功能操作的共享。 继承使得类之间的共享操作都由基类对象完 成,提供了从一般类构造特殊类的手段。继承 提供的共享是静态实现的,即类之间的共享是 在类定义的编译时确定的。 委托是将一个对象的操作或操作的一部分交给 另一个特定对象去完成。委托提供的共享既可 以静态实现又可以动态实现,即在类对象的操 作执行时确定委托对象。姿姿诫诫鸦鸦瘩瘩浓浓逾逾癌癌澜澜膀膀鹃鹃袜袜亲亲硫硫划划则则层层仰仰哨哨吭吭觉觉能能掀掀茵茵蛔蛔肖肖疥疥暇暇驴驴隅隅禁禁做做者者引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述 3 继承性(inheritance) 面向对象软件的继承性 实现软件代码重用和结构化的重要手段。 能清晰体现类之间的层次结构关系; 能减小代码和数据的重复冗余度,大大提高 了程序的代码重用性; 能通过增加一致性来减少模块间的接口和界 面,大大提高程序的易维护性; 继承是能自动传播代码的有力工具; 继承是在一些具有一般特征的类的基础上扩 充属性和行为,建立新类的最有效的手段。埋埋荚荚心心衰衰曾曾矗矗拳拳师师盛盛收收纱纱暴暴斩斩瞥瞥舍舍茧茧举举苹苹袭袭抱抱醇醇栓栓贰贰摩摩圈圈功功矮矮粮粮讯讯蓉蓉形形赖赖引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述4 多态性(polymorphism) 多态表现了不同对象在接收到同一消息时,调用不 同操作,作出不同响应的现象。例如,不同类对象 的标准输入、输出、算术运算操作;具有继承关系 的不同类对象的统一接口操作。 多态反映了客观世界中事物之间的通讯特征。 实现多态性的重要机制和概念: 重载(overlaod) 为函数或运算符创建附加定义,使具有相同名字的函数或运算符在不同的场合可以表现出不同的行为,是静态实现多态性的方法。染染盛盛悄悄谎谎字字铝铝您您曾曾萄萄亲亲潞潞戏戏督督略略潘潘黑黑油油买买叫叫露露箱箱睬睬施施腕腕监监踊踊语语瘟瘟纳纳一一斟斟仔仔引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述 4 多态性(polymorphism) 虚函数(vitual function) 在具有继承层次结构的基类中定义虚函数的原始版本,在派生类中重定义该虚函数的新版本。运行时,根据接收消息的对象,确定虚函数的哪个版本被调用,是动态实现多态性的方法。 抽象类(abstrct class) 抽象类是一个公共基类; 抽象类刻划了所有由它派生的类的公有行为的 统一接口(协议),而行为的操作实现由派生 类确定; 抽象类不能创建对象; 在 C+ 语言中,用声明纯虚函数的原型来实现 定义抽象类。金金陇陇氓氓瘸瘸甭甭乡乡放放千千谱谱桂桂讫讫踏踏态态锦锦食食互互陀陀岔岔肉肉亢亢册册褂褂薄薄董董殃殃搪搪沫沫致致瓷瓷济济蒜蒜篷篷引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述4 多态性(polymorphism) 面向对象软件的多态性 实现了操作的多样性和编程灵活性。根据实现机制不同,多态性分为两种: 静态多态性:通过重载实现,即程序在编译时 确定执行操作的哪一个重载版本,故又称为编 译多态性; 动态多态性:通过虚函数和继承实现,即在程 序运行时依据接收消息的对象来确定执行操作 的哪一个虚函数版本,故又称为运行多态性。茬茬斑斑奸奸麦麦氟氟象象筒筒颁颁值值搀搀鸣鸣刨刨其其顺顺劲劲悄悄杜杜禄禄滋滋效效斤斤对对京京腮腮磊磊课课赊赊粳粳溉溉迟迟掣掣谋谋引引言言面面向向对对象象程程序序设设计计概概述述引引言言面面向向对对象象程程序序设设计计概概述述
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号