信息系统207-面向对象的编程OOP.ppt
面面 向向 对对 象象 的的 编编 程程O Object bject O Oriented riented P Programmingrogramming王长军王长军什么是什么是“对象对象”?什么是什么是“对象对象”?OOA+OOD+OOP+OOT+世界太复杂了,简单点好思考方法思考方法归纳归纳从特殊到一般从不同的 dogs 到词汇“dog”思考方法思考方法演绎演绎从一般到特殊从词汇“dog”,你可以区别出一个动物 是还是不是一条狗狗好吧,我承认我们有点另类,但我们的确是狗狗,下面那个胖的不是!面向对象面向对象它是一种思考方法思考方法世界上的任何东西都是一个对象;任何系统都是由对象构成的(当然系统也是一个对象);系统的演化和开发就是通过系统内外的对象进行交互完成的Alan Kay-“世界是面向对象的世界是面向对象的”如果你对世界了解,那么你就了解了面向对象.所以,面向对象是容易的.世界上的任何东西都是一个对象世界上的任何东西都是一个对象花,树,动物学生,教授桌子,椅子,教室,建筑大学,城市,国家世界,宇宙学科,如计算机,信息系统,数学,历史 任何系统都是由对象构成的任何系统都是由对象构成的法律系统文化系统教育系统经济系统信息系统计算机系统系统开发就是定义对象间的交互系统开发就是定义对象间的交互东华内部东华内部东华外部东华外部东华大学是由下列对象的交互构成的:学生教师职员上海市政府教育部.设计方法学设计方法学面向对象首先是一种设计方法学(OOA/OOD)对象是程序的构成模块(接口对象(editor,menu,file,etc),数据管理对象(db),etc.).对象代表了在应用中对现实世界的抽象.设计方法学设计方法学面向对象支持归纳:对象-类类需要OOA/OOD工具.演绎:类类-对象编程者需要学习有关类库的知识类和对象类和对象对象对象归纳异性之间进行符合道德和法律规异性之间进行符合道德和法律规范的以婚姻为目的的交往范的以婚姻为目的的交往社会现象社会现象类类演绎对象对象类和对象类和对象类和对象类和对象类和对象类和对象对象对象归纳异性之间进行符合道德和法律规异性之间进行符合道德和法律规范的以婚姻为目的的交往范的以婚姻为目的的交往社会现象社会现象类类演绎对象对象合理设计类以适应需求的变化是多么的重要!出现了,怎么办?允许对类进行扩充允许对类进行扩充继承继承对象对象归纳两人之间进行符合道德和法律规两人之间进行符合道德和法律规范的以婚姻为目的的交往范的以婚姻为目的的交往社会现象社会现象基类基类演绎对象对象两人之间进行符合道德两人之间进行符合道德和法律规范的以婚姻为和法律规范的以婚姻为目的的交往目的的交往男女之间男女之间继承两人之间进行符合道德两人之间进行符合道德和法律规范的以婚姻为和法律规范的以婚姻为目的的交往目的的交往同性之间同性之间对象对象演绎继承类继承类将将“继承继承”进行到底进行到底-MFC-MFCCCmdTargetCWndCDocumentCFrameWndCObjectCWinTreadCWinAppCViewCDialog及控件CMDIChildWndCMDIFrameWndCMiniFrameWnd从从结构化结构化方法到方法到面向对象面向对象的方法的方法从从结构化结构化方法到方法到面向对象面向对象的方法的方法结构化方法Win32面向对象Main ProgramProcedure从从结构化结构化方法到方法到面向对象面向对象的方法的方法结构化方法Win32面向对象消息驱动消息驱动程序设计程序设计=算法算法+数据结构数据结构程序设计程序设计=对象对象+消息消息过程驱动过程驱动算法算法+数据结构数据结构面向对象的编程面向对象的编程在面向对象编程中,我们直接发送一个消息,而不是去调用一个程序来实现一个功能.粗略地说,每一个对象实现了自己的模块面向对象的编程面向对象的编程对象是由抽象数据类型来的面向对象编程是对象交互的一个网络,每一个对象保存自己的状态程序中的对象通过发送消息进行交互面向对象的编程面向对象的编程每一个对象负责正确地初始化和销毁自身.相应地,对对象而言,我们就不需要显式地创建和生成过程模块信息隐藏数据封装抽象数据类型对象面向对象的演化面向对象的演化DataMethods记住记住封装(Data&Operations)-信息隐藏的技术对象的用户不能看到对象的数据和操作的细节.数据抽象-从对象中发现类的过程抽象数据类型-类面向对象编程语言就是能够很方便地支持面向对象概念的语言Smalltalk:1972-1980.C+:1986.Java:1992(Smalltalk+C+).其它:Effile,Objective-C,Ada,.面向对象的语言面向对象的语言Smalltalk 是一个纯的面向对象语言.多数人认为Smalltalk 程序比 C+程序开发起来更快.SmalltalkSmalltalk丰富的类库,通过继承实现重用Smalltalk 拥有动态开发环境。它不是编译的,但是 C+是编译的.这使得开发过程更可变,你可以方便地对类和各种情形进行修改SmalltalkSmalltalk 编程者并不能象在C+中那样立即掌握OO概念.正因为如此,掌握Smalltalk需要更多地时间.但是多数时间是花在学习面向对象方法学和技术上,而不是编程语言上的。实际上,Smalltalk 比C和C+更为简单.SmalltalkSmalltalkC+是 C的面向对象版本.它与 C是一致的(它实际上是C的超集),所以现存的 C 代码能够包含在 C+程序中.C+程序速度快,效率高.这些特性已经使C成为很流行的语言.C+C+它牺牲了一些灵活性以提高效率.C+采用编译时绑定的方法。这使得程序运行时的效率很高,代码也较小,但是它影响了重用类的某些能力.C+C+C+已经非常流行,绝大多数新的 C 编译器实际上是 C/C+编译器.但是,如果想进行面向对象编程,你必须用C+编程(思考),而不是C.这些都将对有经验的C编程者带来挑战。他们认为他们是在运用C+编程,但实际上只用了很少的面向对象特点。C+C+C+C+C+是一个优秀的语言.利用它,你可以编出世界上最好的程序!C+是一个差的语言.使用它,你也可能编出世界上最差的程序所以,在学习和使用它时,注意它的OO特性和非OO特性。Java是 C+和Smalltalk古怪的混合.它具有 C+的语法,使它容易学习(也许是难以学习,这依赖于学习者的经验).它具有Smalltalk的结构,如虚拟机和字节码.JavaJavaC+的改进:取消指针垃圾回收运行在类似于 Smalltalk-风格的虚拟机上只要具有虚拟机,不同的机器上都可以运行JavaJavaJavaJavaJava 开发工具目前也已经有很多种了,如 Sun,Borland,IBM,MicrosoftThank you!Thank you!