我曾经问过很多前辈,OO是什么?但是他们给我的回答都很模棱两可,You know?

解决方案 »

  1.   

    大的理论性的东西你去google搜有很多~
    个人感觉OO就是取决于你对现实事物或行为的抽象!
    你抽象的好,你就OO了,抽象的不太好或不好,可能就不OO了就面向过程了~
      

  2.   

    OO(Object–Oriented )面向对象 
      OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
      面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,它被誉为"研究高技术的好方法",更是当前计算机界关心的重点。十多年来,在对OO方法如火如荼的研究热潮中,许多专家和学者预言:正象70年代结构化方法对计算机技术应用所产生的巨大影响和促进那样,90年代OO方法会强烈地影响、推动和促进一系列高技术的发展和多学科的综合。
      一、面向对象方法的由来与发展
      回顾历史可激励现在,以规划将来。
      OO方法起源于面向对象的编程语言(简称为OOPL)。50年代后期,在用FORTRAN语言编写大型程序时,常出现变量名在程序不同部分发生冲突的问题。鉴于此,ALGOL语言的设计者在ALGOL60中采用了以"Begin……End"为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。这是编程语言中首次提供封装(保护)的尝试。此后程序块结构广泛用于高级语言如Pascal 、Ada、C之中。
      60年代中后期,Simula语言在ALGOL基础上研制开发,它将ALGOL的块结构概念向前发展一步,提出了对象的概念,并使用了类,也支持类继承。70年代,Smalltalk语言诞生,它取Simula的类为核心概念,它的很多内容借鉴于Lisp语言。由Xerox公司经过对Smautalk72、76持续不断的研究和改进之后,于1980年推出商品化的,它在系统设计中强调对象概念的统一,引入对象、对象类、方法、实例等概念和术语,采用动态联编和单继承机制。
      从80年代起,人们基于以往巳提出的有关信息隐蔽和抽象数据类型等概念,以及由Modula2、Ada和Smalltalk和等语言所奠定的基础,再加上客观需求的推动,进行了大量的理论研究和实践探索,不同类型的面向对象语言(如:Object-c、Eiffel、c++、Java、Object-Pascal等)逐步地发展和建立起较完整的和雨后春笋般研制开发出来,OO方法的概念理论体系和实用的软件系统。
      面向对象源出于Simula,真正的OOP由Smalltalk奠基。Smalltalk现在被认为是最纯的OOPL。
      正是通过Smalltalk80的研制与推广应用,使人们注意到OO方法所具有的模块化、信息封装与隐蔽、抽象性、继承性、多样性等独特之处,这些优异特性为研制大型软件、提高软件可靠性、可重用性、可扩充性和可维护性提供了有效的手段和途径。
      80年代以来,人们将面向对象的基本概念和运行机制运用到其它领域,获得了一系列相应领域的面向对象的技术。面向对象方法已被广泛应用于程序设计语言、形式定义、设计方法学、操作系统、分布式系统、人工智能、实时系统、数据库、人机接口、计算机体系结构以及并发工程、综合集成工程等,在许多领域的应用都得到了很大的发展。1986年在美国举行了首届"面向对象编程、系统、语言和应用(OOPSLA'86)"国际会议,使面向对象受到世人瞩目,其后每年都举行一次,这进一步标志OO方法的研究已普及到全世界。
      二、面向对象的基本概念与特征
      用计算机解决问题需要用程序设计语言对问题求解加以描述(即编程),实质上,软件是问题求解的一种表述形式。显然,假如软件能直接表现人求解问题的思维路径(即求解问题的方法),那么软件不仅容易被人理解,而且易于维护和修改,从而会保证软件的可靠性和可维护性,并能提高公共问题域中的软件模块和模块重用的可靠性。面向对象的机能念和机制恰好可以使得按照人们通常的思维方式来建立问题域的模型,设计出尽可能自然地表现求解方法的软件。
      面向对象的基本概念
      对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。 
      类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
      消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。
      面向对象主要特征:
      封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。 
      继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。
      继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
      多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
      综上可知,在OO方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
      三、面向对象的新方法论、新范型、新技术
      OO方法的作用和意义决不只局限于编程技术,它是一种新的程序设计范型--面向对象程序设计范型;是信息系统开发的新方法论--面向对象方法学;是正在兴起的新技术--面向对象技术。
      面向对象程序设计范型:程序设计范型(以下简称程设范型)具体指的是程序设计的体裁,正如文学上有小说、诗歌、散文等体裁,程序设计体裁是用程序设计语言表达各种概念和各种结构的一套设施。
      目前,程设范型分为:过程式程设范型、函数式程设范型,此外还有进程式程设范型、事件程设范型和类型系统程设范型。每一程设范型都有多种程序设计语言支持(如:FORTRAN、PASCAL、C均体现过程式程设范型,用来进行面向过程的程序设计),而某些语言兼备多种范型(如:Lisp属过程与函数混合范型,C++则是进程与面向对象混合范型的语言)。
      过程式程设范型是流行最广泛的程序设计范型(人们平常所使用的程序设计语言大多属于此类型一笔勾销它们为面向过程的语言),这一程设范型的中心点是设计过程,所以程序设计时首先要决定的是问题解所需要的过程,然后设计过程的算法。这类范型的语言必须提供设施给过程(函数)传送变元和返回的值,如何区分不同种类的过程(函数)、如何传送变元是这类程序设计中关心的主要问题。 
      面向对象程设范型是在以上范型之上发展起来的,它的关键在于加入了类及其继承性,用类表示通用特性,子类继承父类的特性,并可加入新的特性。对象以类为样板被创建。所以在面向对象程设范中,首要的任务是决定所需要的类,每个类应设置足够的操作,并利用继承机制里二地共享共同的特性。
      简而言之,面向对象程设范型具有其它范型所缺乏或不具备的特点,极富生命力,能够适应复杂的大型的软件开发。可以肯定地说,这种新的程设范型必将有力地推动软件开发的新的进展。限于篇幅,其它程设范型在此不作细述。
      面向对象方法学:OO方法遵循一般的认知方法学的基本概念(即有关演绎--从一般到特殊和归纳--从特殊到一般的完整理论和方法体系)而建立面向对象方法等基础。面向对象方法学要点之一:认为客观世界是由各种"对象"所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象"类",都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式而构成的。不同对象的组合及相互作用就构成了我们要研究、分析和构造的客观系统。面向对象方法学要点之二:是通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的依据。在?quot;类"、"父类"、"子类"的概念构成对象类的层次关系时,若不加特殊说明,则处在下一层次上的对象可自然地继承位于上一层次上的对象的属性。面向对象方法学龄前要点之三:认为对已分成类的各个对象,可以通过定义一组"方法"来说明该对象的功能,即允许作用于该对象上的各种操作。对象间的相互联系是通过传递"消息"来完成的,消息就是通知对象去完成一个允许作用于该对象的操作,至于该对象将如何完成这个操作的细节,则是封装在相应的对象类的定义中的,细节对于外界是隐蔽的。 
      可见,OO方法具有很强的类的概念,因此它就能很自然地直观地模拟人类认识客观世界的方式,亦即模拟人类在认知进程中的由一般到特殊的演绎功能或由特殊到一般的归纳功能,类的概念既反映出对象对象的本质属性,又提供了实现对象共享机制的理论根据。
      当我们遵照面向对象方法学的思想进行软件系统开发时,首先要行面向对象的分析(OOA――Object Oriented Analysis),其任务是了解问题域所涉及的对象、对象间的关系和作用(即操作),然后构造问题的对象模型,力争该模型能真实地反映出所要解决的"实质问题"。在这一过程中,抽象是最本质、最重要的方法。针对不同的问题性质选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。
      其次就是进行面向对象的设计(OOD――Object Oriented Design),即设计软件的对象模型。根据所应用的面向对象软件开发环境的功能强弱不等,在对问题的对象模型的分析基础上,可能要对它进行一定的改造,但应以最少改变原问题域的对象模型为原则。然后就在软件系统内设设计各个对象、对象间的关系(如层次关系、继承关系等)、对象间的通信方式(如消息模式)等,总之是设计各个对?quot;应做些什么"。
      最后阶段是面向对象的实现(OOI-- Object Oriented Zmplementation),即指软件功能的编码实现,它包括:每个对象的内部功能的实现;确立对象哪一些处理能力应在哪些类中进行描述;确定并实现系统的界面、输出的形式及其它控制机理等,总之是实现在OOD阶段所规定的各个对象所应完成的任务。
      用OO方法进行面向对象程序设计,其基本步骤如下:
      (1) 分析确定在问题空间和解空间出现的全部对象及其属性;
      (2) 确定应施加于每个对象的操作,即对象固有的处理能力;
      (3) 分析对象间的联系,确定对象彼此间传递的消息; 
      (4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
      (5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
      (6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
      (7) 设计每个类关于对象外部特性的描述;
      (8) 设计每个类的内部实现(数据结构和方法);
      (9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。
      面向对象技术:技术"泛指根据生产实践经验和自然科学原理
      而发展起来的各种工艺操作方法与技能";"广义地讲,还包括相应的生产工具和其它物质设备,以及生产的工艺过程或作业程序、方法"。OO方法既是程序设计新范型、系统开发的新方法学,作为一门新技术它就有了基本的依据,事实上,OO方法可支持种类不同的系统开发地,已经或正在许多方面得以应用,因此,可以说OO方法是一门新的技术――面向对象技术。
      近十多年来,除了面向对象的程序设计以外,OO方法已发展应用到整个信息系统领域和一些新兴的工业领域,包括:用户界面(特别是图形用户界面――GUI)、应用集成平台、面向对象数据库(OODB)、分布式系统、网络管理结构、人工智能领域以及并发工程、综合集成工程等。人工智能是和计算机密切相关的新领域,在很多方面已经采用面向对象技术,如知识的表示,专家系统的建造、用户界面等。人工智能的软件通常规模较大,用面向对象技术有可能更好地设计并维护这类程序。
      80年代后期形成的并发工程,其概念要点是在产品开发初期(即方案设计阶段)就把结构、工艺、加工、装配、测试、使用、市场等问题同期并行地启动运行,其实现必须有两个基本条件:一是专家群体,二是共享并管理产品信息(将CAD、CAE、CIN紧密结合在一起)。显然,这需要面向对象技术的支持。目前,一些公司采用并发工程组织产品的开发,已取得显著效益:波音公司用以开发巨型777运输机,比开发767节省了一年半时间;日本把并发工程用于新型号的汽车生产,和美国相比只用一半的时间。产业界认为它们念后的生存要依靠并发工程,而面向对象技术是促进并发工程发展的重要支持。
      综合集成工程是开发大型开放式复杂统的新的工程概念,和并发工程相似,专家群体的组织和共享信息,是支持这一新工程概念的两大支柱。由于开放式大系统包含人的智能活动,建立数学模型非常困难,而OO方法能够比较自然地刻划现实世界,容易达到问题空间和程序空间的一致,能够在多种层次上支持复杂系统层次模型的建立,是研究综合集成工程的重要工具。 
      面向对象技术对于并发工程和综合集成工程的作用,一方面说明了这一新技术应用范围的宽广,同时也说明了它的重要影响,更证明了面向对象技术是一门新兴的值得广泛重视的技术。
      综上所述,可归纳出OO方法用于系统开发有如下优越性:
      (1) 强调从现实世界中客观存在的事物(对象)出发来认识问
      题域和构造系统,这就使系统开发者大大减少了对问题域的理解难度,从而使系统能更准确地反映问题域。
      (2) 运用人类日常的思维方法和原则(体现于OO方法的抽
      象、分类、继承、封装、消息通讯等基本原则)进行系统开发,有益于发挥人类的思维能力,并有效地控制了系 统复杂性。 
      (3) 对象的概念贯穿于开发过程的终,使各个开发阶段的系统
      成分具良好的对应,从而显著地提高了系统的开发效率与质量,并大大降低系统维护的难度。
      (4) 对象概念的一致性,使参与系统开发的各类人员在开发的各所段具有共同语言,有效地改善了人员之间的 交流和协作。
      (5) 对象的相对稳定性和对易变因素隔离,增强了系统的应变能力。
      (6) 对象类之间的继承关系和对象的相对独立性,对软件复用提供了强有力的支持。
      

  3.   

    个人理解,oo编程就是把生活中常见的事物用语言描述出来
    比如:
    有着一双大眼睛的黄种人张三在吃饭
    人是类,说明张三是人而不是动物
    张三是具体的对象,
    黄种,大眼睛是张三的属性,
    吃饭是方法
    当然还可以换一种思路:
    黄种人是类,
    张三是对象,
    大眼睛是属性,
    吃饭是方法,
    抽象的方法可以多种多样,按照具体情况选择,那么我们把这种抽象描述用程序语言写出来,加上不同语言特定的格式和语法,就是oo编程了,呵呵
      

  4.   

      
                                面向对象的基本设计原则=>一
        里氏替换原则:
        子类必须能够替换掉它们的父类(如果不行,那么该子类就没有继承这个父类的必要了)
    =>二
        开放封闭原则:
            对于扩展它是开放的,对于修改它是封闭的
    =>三
        单一职责原则
        就一个类而言,应该仅有一个引起它变化的原因(否则就因该考虑这个类的职责分离)
    =>四
        接口分离原则
        1>使用多个专门的接口要比使用单一的接口好(就是把多个单一接口组合成一个接口工厂---抽象工厂)
        2>一个类对另外一个类的依赖性就当建立在最小的接口上
            3>避免接口污染
    =>五
        迪米特应法则:
        1>如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互关系.
            2>如果其中一个类需要调用另外一个类的某一个方法的话,可以通过第三者转发这个调用
    =>六
        组合/聚合复用原则
            要尽量使用组合/聚合,而不是使用继承来达到复用目的
                  (继承的主要目的不是为了继承代码,而是以继承类型为目的)
    =>七
        依赖倒置原则
        1>抽象不应该依赖于细节.
            2>细节应该依赖于抽象     如果你能都做到,那么你就彻底OO了
      

  5.   

    oo简单说就是面向对象(Object–Oriented),你要体会的是它的思想,也就是写程序的思路,应当把万事万物都当成对象,然后进行方法和属性的设计,如果有一定基础,请看《编程者思想》,相信你会有所得。 
      

  6.   

    OO就是Object–Oriented(面向对象编程)的意思。
    它是一种编程方法,是一种思考问题的模式。
    它是相对于以前汇编、C语言等面向过程编程而说的。面向对象编程就是把自然生活中的观念带入你写程序的过程。初次转向面向对象可能不太习惯,但面向对象编程方法可以提高开发效率,易于修改复用,在大型软件工程开发中优势明显。