精华内容
下载资源
问答
  • 面向对象程序设计 # 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计...#面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一
  • 这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。 结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的...

    一、结构化程序设计

    传统的程序设计方法可以归结为“ 程序 = 算法 + 数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是 面向过程的,特点是数据与程序分离,即 数据与数据处理分离
    结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。如下图:

      但是,这种设计方式有着显著的一些问题:
    • 程序难以管理
    • 数据修改存在问题
    • 程序可重用性差
    • 用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
    • 用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。
      这种问题的根源在于数据和数据的处理不能分离。
    二、面向对象程序设计
    面向对象(ObjectOriented )是认识事务的一种方法,是一种以对象为中心的思维方式面向将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。
    面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体—— 对象( object ,同类对象还可抽象出共性,形成 类( class 。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的 接口。对象之间通过 消息( message 进行通讯。
      (1)、过程抽象和数据抽象
    结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
    数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
      (2)、面向对象的基本特征
    1、抽象:抽象是抓住事物的本质,不关心其具体实现
    2、封装:封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。封装性增加了对象的独立性,从而保证了数据的可靠性。外部对象不能直接操作对象的属性,只能使用对象提供的服务。
    3、继承:继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
    4、多态:从名字可以看出,多态指的是不同的行为。同一个消息被不同对象接收时,产生不同结果,即实现同一接口,用不同方法去实现。一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
    5、继承和多态:继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。
      (3)、面向对象程序设计优缺点
    面向对象编程的优点:
    • 易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
    • 质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
    • 效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
    • 易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
    面向对象编程的缺点:
    • 运行效率会下降10%左右
    • 继承的缺点:在客观的世界里有很多东西不能准确的划分类别,比如蝙蝠,即是鸟类,也是兽类。另一个例子假如我们定义了一个鸟类的抽象接口,里面有一个会飞的function,那么继承自鸟类的鸡就不能飞。解决这些问题的一个方法是降低抽象的粒度。

    展开全文
  • OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学...

    整理自网络。

    OO(Object–Oriented )面向对象

    OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。

     

    对象

    是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。

     

    继承性

    是对具有层次关系的类的属性和操作进行共享的一种方式。

     

    面向对象

    就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

     

    面向对象的基本概念与特征

    用计算机解决问题需要用程序设计语言对问题求解加以描述(即编程),实质上,软件是问题求解的一种表述形式。

    显然,假如软件能直接表现人求解问题的思维路径(即求解问题的方法),那么软件不仅容易被人理解,而且易于维护和修改,从而会保证软件的可靠性和可维护性,并能提高公共问题域中的软件模块和模块重用的可靠性。

    面向对象的机能念和机制恰好可以使得按照人们通常的思维方式来建立问题域的模型,设计出尽可能自然地表现求解方法的软件。

     

    面向对象的基本概念

    对象

    对象是要研究的任何事物。

    从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。

    对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。

    类是对象的模板。

    即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。

    类是在对象之上的抽象,对象则是类的具体化,是类的实例。

    类可有其子类,也可有其它类,形成类层次结构。

    消息

    消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。

     

    面向对象主要特征:

    封装性

    封装是一种信息隐藏技术,它体现于类的说明,使数据更安全,是对象的重要特性。

    封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。

    封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。

    继承性

    继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。

    继承具有传递性和单根性.

    如果B类继承了A类,而C类又继承了B类,则可以说,C类在继承了B类的同时,也继承了A类,C类中的对象,可以实现A类中的方法.

    一个类,只能够同时继承另外一个类,而不能同时继承多个类,通常所说的多继承是指一个类在继承其父类的同时,实现其他接口.

    类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承支持系统的可重用性,从而达到减少代码量的作用,而且还促进系统的可扩充性。

    多态性

    对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。

    利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。

    多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

    综上可知,在OO方法中,对象和传递消息分别表现事物及事物间相互联系的概念。

    类和继承是是适应人们一般思维方式的描述范式。

    方法是允许作用于该类对象上的各种操作。

    这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。

    通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。

     

    面向对象的要素

    (1)抽象。

    抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。

    类实现了对象的数据(即状态)和行为的抽象。

    (2)封装性(信息隐藏)。

    封装性是保证软件部件具有优良的模块性的基础。

    面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。

    对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。

    (3)共享性

    面向对象技术在不同级别上促进了共享

    同一类中的共享。同一类中的对象有着相同数据结构。这些对象之间是结构、行为特征的共享关系。

    在同一应用中共享。在同一应用的类层次结构中,存在继承关系的各相似子类中,存在数据结构和行为的继承,使各相似子类共享共同的结构和行为。使用继承来实现代码的共享,这也是面向对象的主要优点之一。

    在不同应用中共享。面向对象不仅允许在同一应用中共享信息,而且为未来目标的可重用设计准备了条件。通过类库这种机制和结构来实现不同应用中的信息共享。

     

    面向对象的新方法论、新范型、新技术

    OO方法的作用和意义决不只局限于编程技术,它是一种新的程序设计范型--面向对象程序设计范型;

    是信息系统开发的新方法论--面向对象方法学;

    是正在兴起的新技术--面向对象技术。

     

    程序设计范型

    (以下简称程设范型)具体指的是程序设计的体裁,正如文学上有小说、诗歌、散文等体裁,程序设计体裁是用程序设计语言表达各种概念和各种结构的一套设施。

     

    目前,程设范型分为:

    过程式程设范型、

    函数式程设范型、

    进程式程设范型、

    事件程设范型、

    类型系统程设范型。

     

    每一程设范型都有多种程序设计语言支持(如:FORTRAN、PASCAL、C均体现过程式程设范型,用来进行面向过程的程序设计),而某些语言兼备多种范型(如:Lisp属过程与函数混合范型,C++则是进程与面向对象混合范型的语言)。

     

    过程式程设范型

    是流行最广泛的程序设计范型(人们平常所使用的程序设计语言大多属于此类型一笔勾销它们为面向过程的语言),这一程设范型的中心点是设计过程,所以程序设计时首先要决定的是问题解所需要的过程,然后设计过程的算法。这类范型的语言必须提供设施给过程(函数)传送变元和返回的值,如何区分不同种类的过程(函数)、如何传送变元是这类程序设计中关心的主要问题。

     

    面向对象程设范型

    是在以上范型之上发展起来的,它的关键在于加入了类及其继承性,用类表示通用特性,子类继承父类的特性,并可加入新的特性。对象以类为样板被创建。所以在面向对象程设范中,首要的任务是决定所需要的类,每个类应设置足够的操作,并利用继承机制里二地共享共同的特性。

    简而言之,面向对象程设范型具有其它范型所缺乏或不具备的特点,极富生命力,能够适应复杂的大型的软件开发。可以肯定地说,这种新的程设范型必将有力地推动软件开发的新的进展。

     

    面向对象方法学

    OO方法遵循一般的认知方法学的基本概念(即有关演绎--从一般到特殊和归纳--从特殊到一般的完整理论和方法体系)而建立面向对象方法等基础。

     

     

    面向对象方法学要点

    面向对象方法学要点之一:

    认为客观世界是由各种"对象"所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象"类",都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式而构成的。不同对象的组合及相互作用就构成了我们要研究、分析和构造的客观系统。

    面向对象方法学要点之二:

    是通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的依据。在“类"、"父类"、"子类"的概念构成对象类的层次关系时,若不加特殊说明,则处在下一层次上的对象可自然地继承位于上一层次上的对象的属性。

    面向对象方法学要点之三:

    认为对已分成类的各个对象,可以通过定义一组"方法"来说明该对象的功能,即允许作用于该对象上的各种操作。对象间的相互联系是通过传递"消息"来完成的,消息就是通知对象去完成一个允许作用于该对象的操作,至于该对象将如何完成这个操作的细节,则是封装在相应的对象类的定义中的,细节对于外界是隐蔽的。

    可见,OO方法具有很强的类的概念,因此它就能很自然地直观地模拟人类认识客观世界的方式,亦即模拟人类在认知进程中的由一般到特殊的演绎功能或由特殊到一般的归纳功能,类的概念既反映出对象对象的本质属性,又提供了实现对象共享机制的理论根据。

     

     

    当我们遵照面向对象方法学的思想进行软件系统开发时,

    首先要进行面向对象的分析(OOA――Object Oriented Analysis),

    其任务是了解问题域所涉及的对象、对象间的关系和作用(即操作),然后构造问题的对象模型,力争该模型能真实地反映出所要解决的"实质问题"。在这一过程中,抽象是最本质、最重要的方法。针对不同的问题性质选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。

    其次就是进行面向对象的设计(OOD――Object Oriented Design),

    即设计软件的对象模型。根据所应用的面向对象软件开发环境的功能强弱不等,在对问题的对象模型的分析基础上,可能要对它进行一定的改造,但应以最少改变原问题域的对象模型为原则。然后就在软件系统内设设计各个对象、对象间的关系(如层次关系、继承关系等)、对象间的通信方式(如消息模式)等,总之是设计各个对?quot;应做些什么"。

    最后阶段是面向对象的实现(OOI-- Object Oriented Implementation),

    即指软件功能的编码实现,它包括:每个对象的内部功能的实现;确立对象哪一些处理能力应在哪些类中进行描述;确定并实现系统的界面、输出的形式及其它控制机理等,总之是实现在OOD阶段所规定的各个对象所应完成的任务。

     

    用OO方法进行面向对象程序设计,其基本步骤如下:

    (1) 分析确定在问题空间和解空间出现的全部对象及其属性;

    (2) 确定应施加于每个对象的操作,即对象固有的处理能力;

    (3) 分析对象间的联系,确定对象彼此间传递的消息;

    (4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;

    (5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;

    (6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;

    (7) 设计每个类关于对象外部特性的描述;

    (8) 设计每个类的内部实现(数据结构和方法);

    (9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。

     

    OO方法用于系统开发有如下优越性:

    (1) 强调从现实世界中客观存在的事物(对象)出发来认识问题域和构造系统这就使系统开发者大大减少了对问题域的理解难度,从

    而使系统能更准确地反映问题域。

    (2) 运用人类日常的思维方法和原则(体现于OO方法的抽象、分类、继承、封装、消息通讯等基本原则)进行系统开发,有益于发

    挥人类的思维能力,并有效地控制了系 统复杂性。

    (3) 对象的概念贯穿于开发过程的终,使各个开发阶段的系统成分具良好的对应,从而显著地提高了系统的开发效率与质量,并大

    大降低系统维护的难度。

    (4) 对象概念的一致性,使参与系统开发的各类人员在开发的各所段具有共同语言,有效地改善了人员之间的 交流和协作。

    (5) 对象的相对稳定性和对易变因素隔离,增强了系统的应变能力。

    (6) 对象类之间的继承关系和对象的相对独立性,对软件复用提供了强有力的支持。

     

     

     

    展开全文
  • 面向对象设计的一些原则

    千次阅读 2014-03-01 21:29:01
    看到一个面向对象设计的PPT设计的不错,分享给大家看看,内容如下: o第7章面向对象设计  4 学时 o引言à面向对象的设计 o第7章面向对象设计  1)面向对象设计方法和步骤 2)面向对象设计的概念 3)面向...

    看到一个面向对象设计的PPT设计的不错,分享给大家看看,内容如下:

    o第7章面向对象设计 

    4 学时

    o引言à面向对象的设计
    o第7章面向对象设计 

    1)面向对象设计方法和步骤

    2)面向对象设计的概念

    3)面向对象设计规格说明书的主要内容

    o7.1 面向对象设计的概念
    o面向对象设计强调定义软件对象,并且使这些软件对象相互协作来满足用户需求。
    o面向对象分析和设计的界限是模糊的,从面向对象分析到面向对象设计是一个逐渐扩充模型的过程。分析的结果通过细化直接生成设计结果,在设计过程中逐步加深对需求的理解,从而进一步完善需求分析的结果。
    o分析和设计活动是一个反复迭代的过程。
    o面向对象方法学在概念和表示方法上的一致性,保证了各个开发阶段之间的平滑性。
    o
    o面向对象设计的四个层次:
    n确定系统的总体结构和风格,构造系统的物理模型,将系统划分成不同的子系统。
    n中层设计:对每个用例进行设计,规划实现用例功能的关键类,确定类之间的关系。
    n进行底层设计:对每个类进行详细设计,设计类的属性和操作,优化类之间的关系。
    n补充实现非功能性需求所需要的类。
    o面向对象设计与结构化设计的过程和方法完全不同,要设计出高质量的软件系统,记住:
    n对接口进行设计
    n发现变化并且封装它
    n先考虑聚合然后考虑继承
    o强内聚
    o类内聚——设计类的原则是一个类的属性和操作全部都是完成某个任务所必须的,其中不包括无用的属性和操作。
    n例如设计一个平衡二叉树类,该类的目的就是要解决平衡二叉树的访问,其中所有的属性和操作都与解决这个问题相关,其他无关的属性和操作在这里都是垃圾,应该清除。
    o弱耦合
    o在面向对象设计中,耦合主要指不同对象之间相互关联的程度。如果一个对象过多地依赖于其它对象来完成自己的工作,则不仅使该对象的可理解性下降,而且还会增加测试、修改的难度,同时降低了类的可重用性和可移植性。
    o对象不可能是完全孤立的,当两个对象必须相互联系时,应该通过类的公共接口实现耦合,不应该依赖于类的具体实现细节。
    o耦合(续)
    o交互耦合——如果对象之间的耦合是通过消息连接来实现的,则这种耦合就是交互耦合。在设计时应该尽量减少对象之间发送的消息数和消息中的参数个数,降低消息连接的复杂程度。
    o耦合(续)
    o继承耦合——继承耦合是一般化类与特殊化类之间的一种关联形式,设计时应该适当使用这种耦合。在设计时要特别认真分析一般化类与特殊化类之间继承关系,如果抽象层次不合理,可能会造成对特殊化类的修改影响到一般化类,使得系统的稳定性降低。另外,在设计时特殊化类应该尽可能多地继承和使用一般化类的属性和服务,充分利用继承的优势。
    o可重用性
    o软件重用是从设计阶段开始的,所有的设计工作都是为了使系统完成预期的任务,为了提高工作效率、减少错误、降低成本,就要充分考虑软件元素的重用性。重用性有两个方面的含义:
    n尽量使用已有的类,包括开发环境提供的类库和已有的相似的类;
    n如果确实需要创建新类,则在设计这些新类时考虑将来的可重用性。
    o设计一个可重用的软件比设计一个普通软件的代价要高,但是随着这些软件被重用次数的增加,分摊到它的设计和实现成本就会降低。
    o框架
    o框架是一组可用于不同应用的类的集合。框架中的类通常是一些抽象类并且相互有联系,可以通过继承的方式使用这些类。例如,Java应用程序接口(API)就是一个成功的框架包,为众多的应用提供服务,但一个应用程序通常只需要其中的部分服务,可以采用继承或聚合的方式将应用包与框架包关联在一起来获得需要的服务。一般不会直接去修改框架的类,而是通过继承或聚合为应用创建合适的GUI类。
    o面向对象设计的活动
    o系统构架设计
    o用例设计
    o类设计
    o数据库设计
    o用户界面设计。
    o7.2 构架设计
    o构架设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的构架设计师主持完成。
    o该活动以用例模型、分析模型为输入。
    o输出:物理结构、子系统及其接口、概要的设计类。
    o第1步:构造系统的物理模型
    o首先用UML的配置图描述系统的物理构架
    o将需求分析阶段捕获的系统功能分配到这些物理节点上。
    o配置图上可以显示计算节点的拓扑结构、硬件设备配置、通信路径、各个节点上运行的系统软件配置、应用软件配置。
    o一个图书馆信息管理系统的物理模型如图示
    o配置图中
    n考虑到图书馆内部用户如果也通过互联网使用系统,效率会受影响。
    n这个系统中设计了三种访问模式:一种是远程读者,通过Internet访问系统,实现查询图书、预借图书的功能;第二种是本单位其他部门的读者,通过单位局域网查询、预借图书;第三种是图书馆内部工作人员,在局域网上完成日常的借还书、采编、图书管理等工作。
    o第2步设计子系统
    o对于一个复杂的软件系统来说,将其分解成若干个子系统,子系统内还可以继续划分子系统或包,这种自顶向下、逐步细化的组织结构非常符合人类分析问题的思路。
    o每个子系统与其它子系统之间应该定义接口,在接口上说明交互信息,注意这时还不要描述子系统的内部实现。

    1)划分各个子系统的方式:按照功能划分,将相似的功能组织在一个子系统中;按照系统的物理布局划分,将在同一个物理区域内的软件组织为一个子系统;按照软件层次划分子系统,软件层次通常可划分为用户界面层、专用软件层、通用软件层、中间层和数据层,具体的表达方式见图。

    o用户界面层是与用户应用有密切关系的内容,主要接受用户的输入信息,并且将系统的处理结果显示给用户。这部分变化通常比较大,所以建议将界面层剥离出来,用一些快捷有效的工具实现。
    o专用软件层是每个项目中特殊的应用部分,它们被复用的可能性很小。在开发时可以适当地减小软件元素的粒度,以便分离出更多的可复用构件,减少专用软件层的规模。
    o通用软件层是由一些公共构件组成,这类软构件的可复用性很好。在设计应用软件时首先要将软件的特殊部分和通用部分分离,根据通用部分的功能检查现有的构件库。如果有可用的构件,则复用已有的构件会极大地提高软件的开发效率和质量。如果没有可复用的构件,则尽可能设计可复用的构件并且添加到构件库中,以备今后复用。
    o数据层主要存放应用系统的数据,通常由数据库管理系统管理,常用的操作有更新、保存、删除、检索等。

    在图书馆图书信息管理系统层次划分:

    o系统层采用微软的Windows操作系统和SQLServer数据库。
    o数据层主要是建立应用数据库,包括数据库表、视图等。
    o中间层使用微软的ADO.NET,实现对数据库的插入、修改、删除的事务处理。
    o通用软件层实现权限管理、用户登录、通用查询类。
    o专用软件层实现读者查询、借书、还书、处罚、预订、通知等处理。
    o界面层实现查询界面、借书界面、还书界面、预订界面、通知界面等用户界面。

    2)定义子系统之间的关系:

    o划分子系统后,要确定子系统之间的关系。子系统之间的关系:
    n“请求-服务”关系,“请求”子系统调用“服务”子系统,“服务”子系统完成一些服务,并且将结果返回给“请求”子系统。
    n平等关系,每个子系统都可以调用其它子系统。
    n如果子系统的内容相互有关联,就应该定义它们之间的依赖关系。在设计时,相关的子系统之间应该定义接口,依赖关系应该指向接口而不要指向子系统的内容。
    o注意:
    o如果两个子系统之间的关系过于密切,则说明一个子系统的变化会导致另一个子系统变化,这种子系统理解和维护都会比较困难。
    o解决子系统之间关系过于密切的办法基本上有两个:
    n重新划分子系统,这种方法比较简单,将子系统的粒度减少,或者重新规划子系统的内容,将相互依赖的元素划归到同一个子系统之中;
    n定义子系统的接口,将依赖关系定义到接口上;

    3)定义子系统的接口。每个子系统的接口上定义了若干操作,体现了子系统的功能,而功能的具体实现方法应该是隐藏的,其他子系统只能通过接口间接地享受这个子系统提供的服务,不能直接操作它。

    o第3步非功能需求设计
    o分析阶段定义了整个系统的非功能需求,在设计阶段要研究这些需求,设计出可行的方案。非功能需求包括:
    n系统的安全性,错误监测和故障恢复,可移植性和通用性等等。
    o具有共性的非功能需求一般设计在中间层和通用应用层,目的是充分利用已有构件,减少重新开发的工作量。
    o7.3 进一步细化用例
    o根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。
    o检查每个用例功能,依靠当前的类能否实现,同时检查每个用例的特殊需求是否有合适的类来实现。
    o细化每个用例的类图,描述实现用例的类及其类之间的相互关系,其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。
    o第1步:通过扫描用例中所有的交互图识别参与用例解决方案的类。在设计阶段完善类、属性和方法。例如,每个用例至少应该有一个控制类,它通常没有属性而只有方法,它本身不完成什么具体的功能,只是起协调和控制作用。
    o每个类的方法都可以通过分析交互图得到,一般地检查所有的交互图发送给某个类的所有消息,这表明了该类必须定义的方法。例如“借书控制”类向“读者”类发送“检查读者(读者编号)”消息,那么“检查读者”就作为“读者”类应该提供的方法。
    o第2步:添加属性的类型、方法的参数类型和方法的返回类型。
    o第3步:添加类之间的关系,包括关联、依赖、继承。
    o“借书”用例中的各个类的关系图,因为类有三种类型即界面类、控制类和实体类,为了清晰起见,我们用粗线框表示控制类,斜体字表示界面类,正常的表示实体类。
    o7.4 详细设计一个类
    o由构件工程师详细设计每个类的属性、方法和关系。

    第1步:定义类的属性

    o用所选择的编程语言定义每个类的属性。类的属性反映类的特性,通常属性是被封装在类的内部,不允许外部对象访问
    o类属性设计的注意点:
    o分析阶段和概要设计阶段定义的一个类属性在详细设计时可能要被分解为多个,减小属性的表示粒度有利于实现和重用。但是一个类的属性如果太多,则应该检查一下,看能否分离出一个新的类。
    o如果一个类因为其属性的原因变得复杂而难于理解,那么就将一些属性分离出来形成一个新的类。
    o通常不同的编程语言提供的数据类型有很大差别,确定类的属性时要用编程语言来约束可用的属性类型。定义属性类型时尽可能使用已有的类型,太多的自定义类型会降低系统的可维护性和可理解性等性能指标。
    o类的属性结构要坚持简单的原则,尽可能不使用复杂的数据结构。
    o设计类的属性时必须要定义的内容:
    n属性的类型:设计属性时必须要根据开发语言确定每个属性的数据类型,如果数据类型不够,设计人员可以利用已有的数据类型定义新的数据类型。
    n属性的可见性。在设计属性时要确定公有属性、私有属性、受保护属性。
    o设计类的属性时主要的选择内容:
    n属性的初始值:如果默认值,用户在操作时会感觉很方便。例如在计算税费的程序中,如果定义了初始默认税率,用户就不必每次都重复输入税率值。
    n属性在类中的存放方式:①Byvalue(按数值)属性放在类中。②Byreference(引用)属性放在类外,类指向这个属性。后面这种情况一般是属性本身为一个对象,例如“教研室”类有一个属性是“教师”,而“教师”对象本身在“教研室”类之外已经定义了,这时“教研室”类中只保存一个指针指向这个外部对象。

    第2步:定义类的操作

    o由构件工程师为每个类的方法设计必须实现的操作,并用自然语言或伪代码描述操作的实现算法。一个类可能被应用在多个用例中,由于它在不同用例中担当的角色不同,所以设计时要求详细周到。
    o设计类操作的注意事项:
    o分析类的每个职责的具体含义,从中找出类应该具备的操作。
    o阅读类的非功能需求说明,添加一些必须的操作。
    o确定类的接口应该提供的操作。这关系到设计的质量,特别是系统的稳定性,所以确定类接口操作要特别小心。
    o逐个检查类在每个用例实现中是否合适,补充一些必须的操作。
    o设计时不仅要考虑到系统正常运行的情况,还要考虑一些特殊情况。
    o例如,一个对象结束前必须释放占用的资源,在并发系统中,一个任务结束前必须通知其它任务自己已经结束;出错是不可预见的系统终止,可能是应用错误、系统资源短缺或外部中断引起的。
    o经验丰富的设计者可以预见有规律的出错,但是不论多么完善的设计都不能保证系统中没有错误。好的设计通常在可能出现致命错误的地方设计一个良好的出口,在系统终止前尽可能清晰地保留当时的信息和环境,尽可能多的反应出错误信息。
    o设计类的操作时必须要定义的内容:
    o操作描述:说明操作的具体实现内容,可以用伪代码或者文字描述操作的处理逻辑。
    o定义操作的参数:说明每个参数名称和类型。
    o操作返回类型:可以是编程语言的内置数据类型,也可以是设计人员自定义的数据类型。
    o操作可见性:Public、Private和Protected。在UML中用+、-、#符号表示。
    o操作异常:说明每个操作中的异常处理。
    o说明操作运行之前要满足的条件和操作运行之后要满足的条件。
    o设计类的操作时主要的选择内容:
    o操作的版型:《Implementer》型实现业务逻辑功能。《Manager》型是实现构造器、析构器以及内存管理等管理性操作。《Access》型访问属性的操作,例如get或set。《Helper》型是完成自身任务的一些辅助操作。
    o第3步定义类之间个关系
    n设置基数:一个类的实例与另一个类的实例之间的联系。在图书馆信息管理系统中,“图书”类和“读者”类关联,如果需求说明中有“一位读者可借图书的数量为0至10本”,那么它们之间的基数为1:0..10。
    n使用关联类:可以放置与关联相关的属性。例如“图书”类和“读者”类,如果要反映读者的借书情况,该如何处理呢?可以创建一个关联类,这个类中的属性是“借书日期”。
    o设置限定:为了减小关联的范围。例如一个目录下虽有多个文件,但是在一个目录范围内确定惟一一个文件,用“文件名”限定目录与文件之间的关系。
    o7.5 图书馆图书信息管理系统的设计

    7.5.1图书馆图书信息管理系统的物理结构说明:

    节点说明:

    oWeb服务器:HPProLiantDL380G3  2.8GHz CPU,1GB内存,73GB*2硬盘;操作系统:Windows2000; Web服务器软件:MSIIS; Web接口软件:ASP。
    o应用服务器和数据库服务器:SunFire ™V480,900MHz CPU,4GB内存,36G*2硬盘;操作系统:Solaris8 2/02;数据库:MSSQL Server 2000;事务处理:MicrosoftTransaction Server。
    o客户端:奔腾IV2.0GHz CPU,512内存,80G硬盘;操作系统:Windows2000;浏览器:IE5.0。
    o交换机,路由器:略。
    o节点间的连接:TCP/IP协议。
    o节点的性能设计:有容错处理;数据库每月进行增量备份;图书馆工作人员具有操作权限管理和角色分配。一般读者进行用户名和口令登录检查。

    7.5.2设计子系统

    o划分四个子系统:界面层、专用软件层、通用软件层和数据层。通用软件层包括权限管理、用户登录、通用查询类。专用软件层包括读者查询、借书、还书、处罚、预借、通知等处理。界面层包括实现查询界面、借书界面、还书界面、预借界面、通知界面等用户界面。数据层包括实体类及其相应的服务。
    o界面层子系统与专用软件层和通用软件层之间是“请求—服务”关系,它不可以直接与数据层发生关系。
    o专用层与通用层有依赖关系和继承关系。
    o专用层、通用层与数据层之间是“请求—服务”关系。
    o7.5.3设计类图—借书类图说明
    o借书时,图书管理员打开借书窗口,这个窗口包含了三个对象:读者编号输入栏、图书编号输入栏和确认按钮。当单击了确认按钮后,由控制类分配任务,首先检查读者编号是否存在,读者借书量是否超出限制,如果不存在该读者编号,则显示“读者无效”,如果借阅量已超标,也显示“读者无效”。接着检查图书的有效性。如果图书已经被借出,则提示“图书已被借出”,同时预订图书按钮变为可操作,可以为该读者预订此书。如果检查读者和图书都有效,则进行借书处理,修改相应的图书记录,创建一条借书记录。
    o借书用例中的界面类包括:
    n借书窗口
    n读者无效对话框
    n图书无效对话框
    o
    o借书用例中的控制类包括:
    n借书处理
    n检查读者
    n检查图书
    n借书
    n预订图书
    o
    o借书用例中的实体类包括:
    n读者
    n图书
    n借还书记录
    n预订记录
    n借书规则
    o
    o
    o
    o顺序图说明
    o其中的借书处理、读者确认、图书确认和借书都是控制类。每个控制类还可以分别画出子顺序图,例如,检查读者是一个控制类,它不实现具体的功能,只是负责协调其他各个类的协作,可以进一部细化顺序图如下:
    o
    o
    o设计界面类
    o设计实体类

    读者类:映射到数据库的T-READER表上

    职责:保存读者信息。

    属性:

      项目              类型  长度 备注 

    读者编号(PK)CHAR  10 

    读者姓名          CHAR  10

    部门                CHAR  50

    E-MAIL           CHAR   20

    职称               CHAR   10

    操作:

    保存(SAVE)

    删除(DELETE)

    读取(READ)

    插入(INSERT)

    创建(CREAT)

    关系:与借还书记录相关,它的主键是借还书记录的外键之一。

    o
    o 检查读者类:检查读者的有效性
    n无效编号=0。
    n接收借书界面类传递来的读者编号和图书编号。
    n检索数据库的T-READDER表,如果不存在该读者编号,则无效编号=1(读者无效)。
    n检索T-LOAN表和借书规则表,如果借数量超过限制,则无效编号=2(超出借阅量)。
    n如果返回值大于0,则向读者无效窗口类发送消息“显示(无效编号)”。
    o本章要点
    o面向对象设计的三句经典名言①对接口进行设计②发现变化并且封装它③先考虑组合然后考虑继承。
    o面向对象设计中的主要内聚有:服务内聚和类内聚。耦合两类:交互耦合和继承耦合。
    o面向对象的设计活动主要有:系统构架设计、用例设计、类设计、数据库设计和用户界面设计。
    o构架设计是以分析模型为输入,生成系统的物理构架、逻辑构架(子系统)及其接口、概要的设计类。
    o根据分析阶段产生的高层类图和交互图,细化每个用例的类图,描述实现用例的类及其类之间的相互关系。
    o详细设计每个类的属性、方法和关系。

    展开全文
  • 1.1 面向过程程序设计的基本概念 面向过程的程序设计思想的核心是功能的分解。数据结构和过程的这种分离, 给软件人员 造成沉重的负担。 1.2 面向对象程序设计的基本概念 在面向对象的程序设计 中,着重点在那些将要被...

    C++面向对象:面向对象程序设计概述

    会有点长,不过读过就全学会喽!!!!!!
    会有点长,不过读过就全学会喽!!!!!!
    会有点长,不过读过就全学会喽!!!!!!

    1.什么是面向对象程序设计

    面向对象程序设计方法是通过增加软件的可扩充性和可重 性来提高程序员的编程能力的 。

    1.1 面向过程程序设计的基本概念

    面向过程的程序设计思想的核心是功能的分解。数据结构和过程的这种分离, 给软件人员 造成沉重的负担。

    1.2 面向对象程序设计的基本概念

    在面向对象的程序设计 中,着重点在那些将要被操作的数据, 而不是在实现这些操作的过程。数据构成了软件分 解的基础,而不是功能。
    不能将数据和相应操作看成两个分离的实体, 而是要把它们作为一个完 整的实体来对待。数据与定义在它上面的用户需要的操作构成一个整体。同时, 数据本身不能被外部程序和过程直接存取。
    面向对象程序设计的最大优点就是软件具有可重用性。当人们对软件系统的要求有 所改变时,并不需要程序员做大量的工作, 就能使系统做相应的变化。
    类与对象是面向对象程序设计中最重要的概念

    2.对象与类

    2.1 对象与类的概念

    在日常生活中对象就是我们认识世界的基本单元, 它可以是人,也可以是物, 还 可以是一件事。整个世界就是由形形色色的“对象”构成的。例如一辆车、一个球、一个小 学生、一次演出。对象既可以很简单, 也可以很复杂, 复杂的对象可以由若干简单的对象 构成。
    对象是现实世界中的一个实体,其特性是:

    1. 每一个对象必须有一个名字以区别于其它对象;
    2. 用属性( 或叫状态)来描述它的某些特征;
    3. 有一组操作,每一个操作决定对象的一种行为。

    在日常生活中“, 类”是对一组具有共同的属性特征和行为特征的对象的抽象。例如, 由一个个的人构成人类,而一个人是人类的一个实例。
    类和对象之间的关系是抽象和具体的关系。类是对多个对象进行综合抽象的结果, 对象又是类的个体实物,一个对象是类的一个实例。

    以面向对象程序设计的观点看, 一个对象是由描述其属性的数 据和定义在其上面的一组操作组成的实体, 是数据单元和过程单元的组合体。类是对一 组对象的抽象,这组对象具有相同的属性结构和操作行为, 在对象所属的类中要说明这些 结构和行为。一个对象是类的一个实例。有了类,才可以创建对象。
    现在我们给出类的更精确的定义:类是创建对象的样板, 它包含对创建对象的状态描 述和对操作行为的说明。

    在面向对象程序设计中,一个类只在源程序的代码中出现, 而并不会在一个正在内存 运行的程序中出现,即类只是在编译时存在; 对象作为类的实例在运行的程序中出现, 并 占有内存空间,它是在运行时存在的实体。所以一个类实际上是一种新的数据类型, 当我 们要使用一个新的数据类型时,首先要在源程序中说明, 而说明部分的代码是不在内存中 运行的。在程序中运行的是该类的对象,对象在内存中分配空间, 程序的计算任务由对象完成。注意,我们在此必须严格区分说明和定义。

    2.2 对象的状态

    在面向对象程序设计中,对象是类的实例。对象给类以生命, 类想要做的事必须通过 建立对象和在对象上进行操作而实现。创建类的对象的过程也叫实例化对象。对象知道 什么能做和什么不能做,并且有能力修改和维护定义在对象上的数据。
    我们可以将对象看成是一个带有状态和行为的活的实体。
    对象的状态通常不仅仅是初等的数据类型 (整型、实型、字符型等 ) , 而且许多对象将 另一个对象作为它们状态的一部分。例如,一辆车有发动机、车轮、座位, 发动机是另外一 个对象, 它可以作为车的状态的一部分
    在这里插入图片描述

    在面向对象程序设计中,对象之间也需要联系, 我们称为对象的交互。面向对象程序设计技术必须提供一种机制,允许一个对象与另一个对象的交互。这种机制叫消息传递

    一般情况下,我们称发送消息的对象为发送者或请求者, 接收消息的对象为接收者或 目标对象。对象中的联系只能通过消息传递来进行。接收者只有在接收到消息时, 才能 被激活,被激活的对象会根据消息的要求完成相应的功能。
    消息具有三个性质:

    1. 同一个对象可以接收不同形式的多个消息, 做出不同的响应;
    2. 相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;
    3. 消息的发送可以不考虑具体的接受者, 对象可以响应消息,也可以不响应。

    实际上, 对象之间的消息传递机制对应于面向过程程序设计的过程调用。消息传递并非真的传递信息,它的实质就是方法的调用。只不过方法的调用受到消息的控制, 而过程调用是直接的。
    在面向对象程序设计中,消息分为两类: 公有消息私有消息。假设有一批消息同属 于一个对象,其中一部分消息是由其它对象直接向它发送的, 称为公有消息; 另一部分消 息是它向自己发送的,称为私有消息

    公有消息私有消息的确定, 与消息要求调用的方法有关。如果被调用的方法在对象所属的类中是在 public 下说明的, 则为公有; 是在 private 下说明的 , 即为私有。当然, 私有消息只能发送调用属于它自己的方法

    2.4 类的确定与划分

    类的确定与划分是非常重要的, 是软件开发中关键的一步, 划分的结果直接影响到软件系统的质量。如果划分得当,既有利于对程序进行扩充, 又可提高代码的可重用性。

    值得注意的是,类的确定和划分并没有统一的标准和固定的方法, 基本 上依赖设计人员的经验、技巧以及对实际问题的把握。一个基本的原则是: 寻求一个大系 统中事物的共性,将具有共性的系统成分确定为一个类。
    不能把一组函 数组合在一起构成类。也就是说, 不能把一个面向过程的模块直接变成类。如果简单地 将模块中的函数变成成员函数而使其成为类是错误的。类不是函数的集合
    例如,考虑一个包含一组数学函数的模块, 现在我们定义一个类 Mathhelper:

    class Mathelper{ 
    	public: 
    		double sqrt( double aNumber) ; 
    		double Power( double aNumber, int raiseto ) ; 
    		double Inverse ( double aNumber) ; 
    	private : 
    	// 任何数据项,也可能没有 
    };
    

    确定 Mathelper 为一个类是错误的。问题在于该类中没有需要管理的私有数据。用 户只需要提供参数对成员函数进行调用。这与面向过程的程序设计的函数调用没有根本的区别。

    设计类要有一个明确的目标。一个好的类应该是容易理解和使用的。我们不能设计 一个 Color 类来表示鲜花的颜色,但是可以在图形处理系统中将颜色 Color 设计为类。因 为在两个系统中对颜色的要求不同。

    3.数据的抽象与封装

    面向对象系统中最突出的特性是封装性、继承性和多态性。我们首先来讨论封装性。 封装与数据抽象的概念密切相关。

    3.1 现实世界中的抽象与封装

    以录音机为例,录音机上有若干按键, 当人们使用录音机时,只要根据自己的需要, 如 放音、录音、停止、倒带等, 按下与之对应的键, 录音机就会完成相应的工作。这些按键安 装在录音机的表面,人们通过它们与录音机交互。我们无法( 当然也没必要) 操作录音机 的内部电路,因为它们被装在机壳里, 录音机的内部情况对于用户来说是隐蔽的, 不可见 的。这就是所谓封装的原理。

    以一般观点而言,抽象是通过特定的实例或例子抽取共同性质以后形成概念的过程。 抽象是对系统的简化描述或规范说明, 它强调了系统中的一部分细节和特性, 例如做什 么,而忽略了其它部分, 例如如何做。抽象的描述被称为它的规范说明, 例如录音机的操 作说明书,而对抽象的解释称为它的实现。

    3.2 数据的抽象与封装的基本概念

    将数据结构和作用于 数据结构上的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来, 用户 通过操作接口对数据进行操作。对于用户来说, 只知道如何通过操作接口对该数据进行操作,而并不知道是如何做的, 也不知道数据是如何表示的。这就是数据的封装。

    1. 数据的抽象是在确定类时强调对象的共同点而忽略它们的 不同点的结果。也可以说,在一个类的说明中我们只表示那些主要特性, 而忽略次要的、 引不起我们兴趣的东西。
    2. 数据的封装则是隐藏了抽象的内部实现细节的结果。封装是将数据抽象的外部接口 与内部的实现细节清楚地分离开。抽象和封装是互补的。

    好的抽象有利于封装, 封装的 实体则帮助维护抽象的完整性。重要的是抽象先于封装
    可以从下面几点来理解对象的封装:

    1. 对象具有一个清楚的边 界, 对 象的私有数据、成员函数的 细节被封装在该 边 界内;
    2. 具有一个描述对象与其它对象如何相互作用的接口, 该接口必须说明消息传递 的使用方法;
    3. 对象内部的代码和数据应受到保护,其它对象不能直接修改。

    从用户(或应用程序员) 的观点看,对象提供了一组服务, 并提供了请求服务的接口。从系统设计员的角度看,封装能够清楚地标明对象提供的服务界面, 而对象的行为和数据 是隐蔽的,看不见的。

    3.3 对象的特性

    (1 ) 封装性
    对象将私有元素和实现操作的内部细节隐藏起来, 并能管理自己的内部状态。外部 只能从对象所表示的具体概念、对象提供的服务和对象提供的外部接口来认识对象。通 过向对象发送消息来激活对象的自身动作,达到施加特定操作的目的。
    (2 ) 模块独立性
    一个对象是一个独立存在的模块,具有独立的计算能力; 并且其自身的变化不受外界 的干扰,也不会涉及到其它的模块; 模块间的依赖性极小或几乎没有; 各模块可以独立地 成为软件系统的组件,也可以被程序员重用。
    (3 ) 动态连接性
    对象的动态连接性是指对象通过消息传递机制将对象动态地联系在一起的特性。对 象能接收其它对象发送的消息,也能向其它对象发送消息。通过这种联系, 若干对象可协 同完成某项任务
    (4 ) 易维护性
    由于对象的功能被“隐蔽”,所以修改和完善的工作都被局限于对象的内部, 不会涉及 到外部,因此使得对象和整个系统变得非常容易维护。

    4.继 承 性

    4.1 继承的概念

    继承在现实生活中是一个很容易理解的概念。例如, 我们每一个人都从我们的父母 身上继承了一些特性,例如种族、血型、眼睛的颜色等, 我们身上的特性来自我们的父母, 也可以说,父母是我们所具有的属性的基础。
    以面向对象程序设计的观点来看, 继承所表达的是对象类之间相关的关系。这种关 系使得某类对象可以继承另外一类对象的特征和能力。
    若类之间具有继承关系,则它们之间具有下列几个特性:

    1. 类间具有共享特征( 包括数据和程序代码的共享) ;
    2. 类间具有差别或新增部分( 包括非共享的数据和程序代码) ;
    3. 类间具有层次结构。

    具体地说,继承机制允许派生类继承基类的数据和操作( 即数据成员和成员函数) , 也 就是说,允许派生类使用基类的数据和操作。同时, 派生类还可以增加新的操作和数据。 例如,子女类可以从父母类继承房子和汽车, 当然可以使用房子和汽车, 还可以对房子进 行再装修

    面向对象程序设计为什么要提供继承机制 ? 也就是说, 继承的作用是什么 ?
    继承的作用有两个:

    1. 避免公用代码的重复开发, 减少代码和数据冗余;
    2. 通过增强 一致性来减少模块间的接口和界面

    继承机制为程序员们提供了一种组织、构造和重用类的手段。

    继承机制以相关的关系来组织事物,可以减少我们对相似事物进行说明和记忆的规 模,为我们提供了一种简化的手段。

    4.2 继承的分类

    继承有两种分类方法,一种是从继承源上分, 另一种是从继承内容上分。
    继承源上分,继承分为单继承多继承

    • 单继承是指每个派生类只直接继承了一个基类的特征。
    • 多继承是指多个基类派生出一个派生类的继承关系, 多继承的派生类直接继承了不止一个基类的特征。

    继承内容上划分,继承可分为取代继承、包含继承、受限继承、特化继承。

    • 取代继承:例如徒弟从师傅那里学到的所有技术, 在任何需要师傅的地方都可以由徒 弟来替代,这就属于取代继承。
    • 包含继承:例如“柯利狗”继承了“狗”的所有特征, 任何一条“柯利狗”都是一条“狗”, 这就属于包含继承。
    • 受限继承:例如“鸵鸟”尽管继承了“鸟”的一些特征, 但不能继承鸟会飞的特征, 这就 属于受限继承。
    • 特化继承: 例如“运动员”是一类特殊的人, 比一般人具有更多体育特长, 这就属于特 化继承。

    4.3 继承与封装的关系

    在面向对象程序设计中, 对象具有封装性, 对象之间的联系只能通过消息传递来完 成,对象的私有数据和行为是被隐藏起来的。
    继承与封装不但没有实质性的冲突, 而且还 有一定的相似性。

    在面向对象系统中, 封装的单位是对象, 也就是说, 把一个属于某一类的对象封装起 来,使其数据和操作成为一个整体。如果该对象所属的类是一个派生类, 那么, 它只要把 从基类那里继承来的操作和数据与自己的操作和数据一并封装起来, 就可以了。对象依 然是封装好的整体,仍然只通过消息传递与其它的对象交互, 而不是直接调用。所以, 一 个对象,无论它是基类的实例, 还是派生类的实例,都是一个被封装的实体。因此, 我们得 出结论:继承机制的引入并不影响对象的封装性。

    从另一角度看, 继承与封装还有相似性, 那就是它们都提供了共享代码的手段, 因而 增加了代码的重用性。


    继承提供的代码共享是静态的,派生类对象在成为活动的实体以后, 自动地共享其基 类中定义的代码段,从而使基类对象与其派生类对象共享一段代码。
    封装提供的代码共享是动态的,例如我们在一个类中说明了一段代码, 那么属于该类 的多个实例在程序运行时共享在类中说明的那段代码。

    5.多 态 性

    5.1 什么是多态性

    多态性也是面向对象系统的重要特性。
    现实世界的多态性在自然语言中经常出现。假设一辆 汽车停在了属于别人的车位,司机可能会听到这样的要求“: 请把你的车挪开”,司机在听 到请求后, 所做的工作应该是把车开走。在家里, 一把凳子挡住了孩子的去路, 他可能会 请求妈妈“: 请把凳子挪开”, 妈妈过去搬起凳子,放在一边。在这两件事情中, 司机和妈妈 的工作都是“挪开”一样东西,但是他们在听到请求以后的行为是截然不同的, 这就是多态性。对于“挪开”这个请求,还可以有更多的行为与之对应。“挪开”从字面上看是相同的, 但由于用的对象不同,操作的方法就不同。

    **面向对象程序设计借鉴了现实世界的多态性。面向对象系统的多态性是指不同的对 象收到相同的的消息时产生多种不同的行为方式。**例如,我们有一个窗口 (Window)类对 象,还有一个棋子(ChessPiece )类对象, 现在我们来考虑对它们都发出“移动”的消息“, 移 动”操作在 Window 类对象和 ChessPiece 类对象上可以有不同的行为。
    C + + 语言支持两种多态性, 即编译时的多态性和运行时的多态性。

    • 编译时的多态 性是通过重载来实现的
    • 运行时的多态性是通过虚函数来 实现的,程序运行的到底是哪个函数版本, 需要在运行时通过对象发送的消息来确定。

    5.2 重载的概念

    重载一般包括函数重载和运算符重载。函数重载是指一个标识符可同时用于为多个 函数命名,而运算符重载是指一个运算符可同时用于多种运算。也就是说, 相同名字的函 数或运算符在不同的场合可以表现出不同的行为。
    下面我们给出一个函数重载的例子。

    class A{
    public: 
    	void Print(int i) {语句段 1 ; } 
    	void Print(float f) {语句段 2 ; } 
    	void Print( const char * c) {语句段 3 ; } 
    	// 其它语句 
    } ;
    

    在上面的类定义中我们重载了三个函数, 名字都是 Print 。它们有各自不同的功能, 分别用语句段 1、语句段 2、语句段 3 中的语句实现, 在此略去语句的细节。函数名相同, 而函数实现的功能不同。那么,当有要求使用 Print 函数的消息发送时, 到底应该执行函 数的哪一个呢 ? 这就要看消息传递的函数参数是什么,根据参数来调用不同的同名函数。 例如,发送的消息是 Print( 20 ) , 则执行的是语句段 1,而发送的消息是 Print (”welcome”) , 则执行的是语句段 3。

    为什么要使用重载 ?
    使用重载的目的是为了更好地表达行为共享, 这种行为共享就 像将相似的操作划分在一起。使用重载可以使程序员在只知道操作的一般含义, 而不知 道操作具体细节的情况下能正确地对某个对象使用一个操作。
    另外,使用重载的直接益处是减少了程序员记忆操作名字的负担。

    6.面向对象程序设计的语言

    面向对象程序设计语 言应该具备下述特征:

    1. 它支持对象的概念( 包括对象所有的特性,如封装等) ;
    2. 它要求对象属于类;
    3. 它提供继承机制。

    C + + 是对传统 C 语言进行面向对象的扩充, 是在 C 语言的基础上增加了对面向对 象程序设计的支持, 是在 80 年代早期由贝尔实验室设计的。C + + 又被称为混合型语 言,因为它可以支持传统的程序设计方法, 又支持面向对象程序设计方法, 有丰富的应用 基础和开发环境的支持,因而得到广泛的使用。

    展开全文
  • 面向对象程序设计读书笔记

    千次阅读 2017-10-17 23:33:02
    程序开发中面向对象的一些相关的读书笔记。面向对象概念相关 面向对象的三大特性:继承、封装和多态。继承,共性放到父类,特性放到子类。封装,对象有一个明确的边界,声明公开,实现隐藏,实现的更改,对对象的...
  • 面向对象设计

    千次阅读 2008-01-17 14:17:00
    面向对象设计的任务是对面向对象分析的结果作进一步的规范化整理,以便能够被面向对象编程直接接受。...概括地说,面向对象设计就是“根据需求决定所需的类、类的操作,以及类之间关联的过程”。从面
  • 面向对象设计面向对象设计一、 面向对象设计的准则(一) 模块化(二) 抽象(三) 信息隐藏(四) 弱耦合对象之间的耦合可分为两大类:(1) 交互耦合(2) 继承耦合(五)强内聚(六)可重用二、启发规则(一) 设计...
  • 面向对象程序设计

    千次阅读 2011-10-23 22:26:22
    面向对象程序设计 求助编辑百科名片 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象...
  • 面向对象程序设计方法

    千次阅读 2018-09-30 20:33:42
    面向对象方法学方程式=对象+类+继承+传递消息实现通讯 (一) 类、对象、封装、消息、继承、多态等基本概念 1、类:对具有相同状态和形同操作的一组相似对象的定义; 2、对象:对具有相同状态的一组操作的集合,...
  • JS-面向对象程序设计

    千次阅读 2017-10-30 15:59:28
    JavaScript 面向对象编程, 创建对象,属性类型,数据属性,访问器属性,继承
  • 1、类:具有相同或者相似性质的对象的抽象就是类。对象的抽象就是类,类的具体化就是对象。比如人类就是一个抽象类,具体到张三李四就是对象。 2、对象:将一组数据和这组数据有关的操作组装在一起,生成一个实体,...
  • 面向过程面向对象

    2018-09-29 20:18:54
    面向过程程序设计: 以事件为中心,以功能为导向,分析...面向对象程序设计: 对象:对象就是人们研究的任何一个事物,一件物品是一个对象,一个规则,计划,事件也是一个规则。对象具有状态,用数据来描述,还具有...
  • 面向功能的程序设计方法、结构化程序设计方法、面向数据流的处理方式与结构化分析(Structrued Analysis,即SA)、结构化编程... 面向对象程序分析(OOA)、面向对象程序设计(OOD)、面向对象程序开发(OOP)
  • 面向对象之于面向过程,面向接口之于面向实现。但基本上,面向接口和面向实现都基于面向对象的模式,也就是说面向接口并不能称为比面向对象的更高的一种编程模式。而是在面向对象中大的背景下的
  • 面向对象设计是一个逐渐扩充模型的过程,即面向对象设计就是用面向对象观点建立求解域模型的过程。 ​ 分类: 系统设计:确定实现系统的策略和目标高层结构 对象设计:确定解空间中的类、关联、接口形式及实现...
  •  在面向对象程序设计中,对象之间也需要联系,我们称作对象的交互。   2、类  >类是具有共同特征的对象的抽象。  >是对具有共同属性和行为的一类事物的抽象描述。  共同的属性被描述为类的数据成员,共同...
  • <一> 面向对象程序设计语言的三大原则 <br /> 一个面向对象的语言在处理对象时,必须遵循的三个原则是:封装、继承和多态。 (1)封装  所谓“封装”,就是用一个框架把数据和代码组合在一起...
  • C++面向对象程序设计

    千次阅读 多人点赞 2019-02-25 20:08:45
    面向对象程序设计共有四个主要特点:抽象,封装,继承和多态性。 抽象:类是用来定义对象的抽象类型 封装:函数名作为类对象的对外接口 继承:派生类继承基类的基本特征 多态性:由继承产生的不同的派生类...
  • 谭浩强《C++面向对象程序设计》知识点总结

    千次阅读 多人点赞 2018-06-16 22:05:53
    1 C++初步知识 1.1 C++的输入输出 ...输入:采用标准输入流对象istream和提取运算符cin&...输出:采用标准输出流对象...给功能相似的函数建立一个统一的模板 要求:函数的参数个数和原来的要相同 格式:
  • java面向对象程序设计总结

    千次阅读 2016-04-17 19:47:33
    系统学习面向对象语言设计,java是一门完全面向对象设计性语言,就连最基本的基本类型java自身也都包装了相应的类型与方法,那么什么是类,什么是对象,通俗点说 类就是对象的模板,就像工厂里面的模子,机器比对一...
  • 依赖倒置原则(Dependency Inversion Principle,DIP)也称依赖反转原则,是面向对象设计(OOD)中比较重要、常见的一种,总结知识点包括:1、什么是依赖倒置原则?2、为什么需要遵守依赖倒置原则?3、在面向对象...
  • 写了这么久代码你了解Java面向对象设计原则吗?

    千次阅读 多人点赞 2021-09-17 09:59:18
    面向对象设计原则是学习设计模式的基础,每一种设计模式都符合某一种或多种面向对象设计原则。通过在软件开发中使用这些原则,可以提高软件的可维护性和可复用性,让我们可以设计出更加灵活也更容易扩展的软件系统,实现...
  • 面向对象设计与分析

    千次阅读 2012-08-04 18:59:28
    面向对象设计与分析 2009-04-18 10:30 96人阅读 评论(0) 收藏 举报 面向对象  面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了...
  • 从面向过程面向对象

    千次阅读 2015-10-02 21:43:50
    改变思维 ...想了很久之后,我得出了另一个结论,在面向对象程序中,程序=对象&行为。这里我使用&,是为了说明对象与行为是关系的。行为是对象的行为,对象要对它自己的行为负责。 这种思维上的转换在从P
  • 基于过程面向对象

    2019-07-01 22:54:14
    C++是基于过程面向对象的混合型语言: 基于过程:基本部分为函数,程序由函数组成,除主函数外,均可互相调用。 面向对象:基本单位为类,函数封装在类里面,...面向对象程序设计的思路和人们日常生活中处理...
  • 面向对象设计框架

    千次阅读 2016-04-12 16:39:37
    复杂的设计模式是有简单的设计模式演化而来,解决了更复杂场景下简单设计模式解决不了的问题。设计原则:(通过设计模式实现设计原则) 单一职责原则(SRP),从职责来理解单一的概念是模糊的,因为一件事情的职责...
  • 第 15 章 面向对象程序设计 毫无疑问重要的一章。 1. oop 概述 面向对象程序设计的核心思想是:数据抽象(类),继承和动态绑定。 使用继承:可以定义相似的类型并对其相似关系建模。 使用动态绑定:可以在一定...
  • 面向对象程序设计上机练习十二(运算符重载) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 处理一个复数与一个double数相加的运算,结果存放在一个double型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,142
精华内容 32,856
关键字:

处理过程相似面向对象设计