什么是面向对象

什么是面向对象
09-12-10  匿名提问 发布
5个回答
时间
投票
  • 0

    jkjkss

    "面向对象  面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
      谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。许多有关面向对象的文章都只是讲述在面向对象的开发中所需要注意的问题或所采用的比较好的设计方法。看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地对自己有所裨益。这一点,恐怕对初学者甚至是从事相关工作多年的人员也会对它们的概念模糊不清。


    目录[隐藏]

    一、传统开发方法存在问题
    二、面向对象的基本概念
    三、面向对象的特征
    四、面向对象的要素
    五、面向对象的模型
    六、面向对象的分析
    七、面向对象的设计
    八、面向对象的实现
    九、面向对象和基于对象的区别
    十、面向对象的例子 一、传统开发方法存在问题
    二、面向对象的基本概念
    三、面向对象的特征
    四、面向对象的要素
    五、面向对象的模型
    六、面向对象的分析
    七、面向对象的设计
    八、面向对象的实现
    九、面向对象和基于对象的区别十、面向对象的例子  
      
    [编辑本段]一、传统开发方法存在问题
      1.软件重用性差
      重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。
      2.软件可维护性差
      软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。
      3.开发出的软件不能满足用户需要
      用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。
      用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层的分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用相应的工具来描述各个最低层的处理。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的 ,用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价才能实现这种变化。
    [编辑本段]二、面向对象的基本概念
      (1)对象。
      对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
      (2)对象的状态和行为。
      对象具有状态,一个对象用数据值来描述它的状态。
      对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
      对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
      (3)类。
      具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
      类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
      类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
      (4)类的结构。
      在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。
      ①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
      ②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。
      (5)消息和方法。
      对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
      类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
    [编辑本段]三、面向对象的特征
      (1)对象唯一性。
      每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
      (2)抽象性。
      分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
      (3)继承性。
      继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
      继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
      在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
      在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
      在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
      采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
      (4)多态性(多形性)
      多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
      多态性允许每个对象以适合自身的方式去响应共同的消息。
      多态性增强了软件的灵活性和重用性。
    [编辑本段]四、面向对象的要素
      (1)抽象。
      抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。
      类实现了对象的数据(即状态)和行为的抽象。
      (2)封装性(信息隐藏)。
      封装性是保证软件部件具有优良的模块性的基础。
      面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。
      对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。
      (3)共享性
      面向对象技术在不同级别上促进了共享
      同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。
      在同一应用中共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。
      在不同应用中共享。面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。
      4.强调对象结构而不是程序结构
      四、面向对象的开发方法
      目前,面向对象开发方法的研究已日趋成熟,国际上已有不少面向对象产品出现。面向对象开发方法有Coad方法、Booch方法和OMT方法等。
      1.Booch方法
      Booch最先描述了面向对象的软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解的设计方法。面向对象的软件分解更接近人对客观事务的理解,而功能分解只通过问题空间的转换来获得。
      2.Coad方法
      Coad方法是1989年Coad和Yourdon提出的面向对象开发方法。该方法的主要优点是通过多年来大系统开发的经验与面向对象概念的有机结合,在对象、结构、属性和操作的认定方面,提出了一套系统的原则。该方法完成了从需求角度进一步进行类和类层次结构的认定。尽管Coad方法没有引入类和类层次结构的术语,但事实上已经在分类结构、属性、操作、消息关联等概念中体现了类和类层次结构的特征。
      3.OMT方法
      OMT方法是1991年由James Rumbaugh等5人提出来的,其经典著作为“面向对象的建模与设计”。
      该方法是一种新兴的面向对象的开发方法,开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计,面向对象的建模和设计促进了对需求的理解,有利于开发得更清晰、更容易维护的软件系统。该方法为大多数应用领域的软件开发提供了一种实际的、高效的保证,努力寻求一种问题求解的实际方法。
      4.UML(Unified Modeling Language)语言
      软件工程领域在1995年~1997年取得了前所未有的进展,其成果超过软件工程领域过去15年的成就总和,其中最重要的成果之一就是统一建模语言(UML)的出现。UML将是面向对象技术领域内占主导地位的标准建模语言。
      UML不仅统一了Booch方法、OMT方法、OOSE方法的表示方法,而且对其作了进一步的发展,最终统一为大众接受的标准建模语言。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发全过程。
    [编辑本段]五、面向对象的模型
      ·对象模型
      对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。
      1.对象和类
      (1) 对象。
      对象建模的目的就是描述对象。
      (2) 类。
      通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力。
      (3) 属性。
      属性指的是类中对象所具有的性质(数据值)。
      (4) 操作和方法。
      操作是类中对象所使用的一种功能或变换。类中的各对象可以共享操作,每个操作都有一个目标对象作为其隐含参数。
      方法是类的操作的实现步骤。
      2.关联和链
      关联是建立类之间关系的一种手段,而链则是建立对象之间关系的一种手段。
      (1) 关联和链的含义。
      链表示对象间的物理与概念联结,关联表示类之间的一种关系,链是关联的实例,关联是链的抽象。
      (2) 角色。
      角色说明类在关联中的作用,它位于关联的端点。
      (3) 受限关联。
      受限关联由两个类及一个限定词组成,限定词是一种特定的属性,用来有效的减少关联的重数,限定词在关联的终端对象集中说明。
      限定提高了语义的精确性,增强了查询能力,在现实世界中,常常出现限定词。
      (4) 关联的多重性。
      关联的多重性是指类中有多少个对象与关联的类的一个对象相关。重数常描述为“一”或“多”。
      3.类的层次结构
      (1) 聚集关系。
      聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。
      聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。
      (2)一般化关系。
      一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为你类,具体类又能称为子类,各子类继承了交类的性质,而各子类的一些共同性质和操作又归纳到你类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形 。
      4.对象模型
      (1)模板。模板是类、关联、一般化结构的逻辑组成。
      (2)对象模型。
      对象模型是由一个或若干个模板组成。模板将模型分为若干个便于管理的子块,在整个对象模型和类及关联的构造块之间,模板提供了一种集成的中间单元,模板中的类名及关联名是唯一的。
      ·动态模型
      动态模型是与时间和变化有关的系统性质。该模型描述了系统的控制结构,它表示了瞬间的、行为化的系统控制
      性质,它关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现了对象的相互行为。
      该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。使用状态图作为描述工具。它涉及到事件、状态、操作等重要概念。
      1.事件
      事件是指定时刻发生的某件事。
      2.状态
      状态是对象属性值的抽象。对象的属性值按照影响对象显著行为的性质将其归并到一个状态中去。状态指明了对象
      对输入事件的响应。
      3.状态图
      状态图是一个标准的计算机概念,他是有限自动机的图形表示,这里把状态图作为建立动态模型的图形工具。
      状态图反映了状态与事件的关系。当接收一事件时,下一状态就取决于当前状态和所接收的该事件,由该事件引起的状态变化称为转换。
      状态图是一种图,用结点表示状态,结点用圆圈表示;圆圈内有状态名,用箭头连线表示状态的转换,上面标记事件名,箭头方向表示转换的方向。
      ·功能模型
      功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。图10-15给出了一个窗口系统的图标显示的数据流图。
      数据流图中包含有处理、数据流、动作对象和数据存储对象。
      1.处理
      数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。
      2.数据流
      数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。
      3.动作对象
      动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。
      4.数据存储对象
      数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。
    [编辑本段]六、面向对象的分析
      面向对象分析的目的是对客观世界的系统进行建模。本节以上面介绍的模型概念为基础,结合“银行网络系统”的具体实例来构造客观世界问题的准确、严密的分析模型。
      分析模型有三种用途:用来明确问题需求;为用户和开发人员提供明确需求;为用户和开发人员提供一个协商的基础,作为后继的设计和实现的框架。
      (一) 面向对象的分析
      系统分析的第一步是:陈述需求。分析者必须同用户一块工作来提炼需求,因为这样才表示了用户的真实意图,其中涉及对需求的分析及查找丢失的信息。下面以“银行网络系统”为例,用面向对象方法进行开发。
      银行网络系统问题陈述: 设计支持银行网络的软件,银行网络包括人工出纳站和分行共享的自动出纳机。每个分理处用分理处计算机来保存各自的帐户,处理各自的事务;各自分理处的出纳站与分理处计算机通信,出纳站录入帐户和事务数据;自动出纳机与分行计算机通信,分行计算机与拨款分理处结帐,自动出纳机与用户接口接受现金卡,与分行计算机通信完成事务,发放现金,打印收据;系统需要记录保管和安全措施;系统必须正确处理同一帐户的并发访问;每个分处理为自己的计算机准备软件,银行网络费用根据顾客和现金卡的数目分摊给各分理处。
      图10-18给出银行网络系统的示意图。
      (二)建立对象模型
      首先标识和关联,因为它们影响了整体结构和解决问题的方法,其次是增加属性,进一步描述类和关联的基本网络,使用继承合并和组织类,最后操作增加到类中去作为构造动态模型和功能模型的副产品。
      1.确定类
      构造对象模型的第一步是标出来自问题域的相关的对象类,对象包括物理实体和概念。所有类在应用中都必须有意义,在问题陈述中,并非所有类都是明显给出的。有些是隐含在问题域或一般知识中的。
      按图10-19所示的过程确定类
      查找问题陈述中的所有名词,产生如下的暂定类。
      软件 银行网络 出纳员 自动出纳机 分行
      分处理 分处理计算机 帐户 事务 出纳站
      事务数据 分行计算机 现金卡 用户 现金
      收据 系统 顾客 费用 帐户数据
      访问 安全措施 记录保管
      根据下列标准,去掉不必要的类和不正确的类。
      (1) 冗余类:若两个类表述了同一个信息 ,保留最富有描述能力的类。如""用户""和""顾客""就是重复的描述,因为""顾客""最富有描述性,因此保留它。
      (2) 不相干的类:除掉与问

    09-12-10 | 添加评论 | 打赏

    评论读取中....

  • 0

    xh话费

    什么是面向对象 收藏
    Alan Kay 大牛 总结过“纯粹”的面向对象程序设计方法是什么样的:

    (1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
    (2) 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。
    (3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
    (4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
    (5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。

    心得: 一切都是对象在Java中很好的体现出来 对象有自己的属性和方法,他更加真实,更加符合我们人的思想,

    就像电灯最经典的例子,但我们看到电灯就可以知道他的一些属性和知道他用途,但有的东西可能需要看说明书才能

    知道 说明书可就是这类灯的一个库,他可以返回一些我们看到电灯却无法得知的属性,需要调用库知道他的属性

    对象的统一抽像 就算是一万中等肯定都有 “打开”,“关掉”这两种方法 所以这灯的一万种子类都有共同性

    这一万种子类”打开“,“关掉” 的方法名是一样的 至于怎么实现就是这些类的创建者要关心的了,我们只要知道

    “按开关”(调用函数)就好了

    发表于 @ 2009年09月21日 22:04:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:字符编码等问题之 cout 与 wcout 区别及 wchar_t、CharSet、CodePage 等相关概念解析 | 新一篇:MFC中CString类与其他类型的转换

    09-12-10 | 添加评论 | 打赏

    评论读取中....

精华知识
更多  
意见反馈 帮助