《面向对象的设计与分析》(邵维忠著)读书笔记

        1、面向对象方法的基本思想包括两个主要方面:1)、强调从现实世界中客观存在的事物(即对象)出发来构造软件系统;2)、另一方面是在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称为该软件的问题域。面向对象方法强调直接以问题域中的事务为中心来思考问题和认识问题,并根据这些事物的本质特征,将它们抽象地表示为系统中的对象。以对象作为系统的基本构成单位,而不是一些与现实世界中的事物相差较远且没有对象关系的概念来构造系统。这可以使系统能够直接地映射问题域,保持问题域中事务及其相互关系的本来面貌。

        2、面向对象方法的主要特点:1)从问题域中客观存在的事物出发来构造软件系统,用对象作为这些事物的抽象表示,并以此作为系统的基本构成单位;2)用对象的属性表示事物的级静态特征(即可以用一些数据来表达的特征),用对象的操作表示事物的动态特征(即事物的行为);3)对象的属性和操作结合在一起构成一个独立的实体,对外屏屏蔽其内部细节(封装);4)对事物进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。5)通过在不同程度上运用抽象的原则,可以得到较一般的类和比较特殊的类,特殊类继承一般类的属性与操作,从而简化了系统的构造过程;6)复杂的对象可以用简单的对象作为其构成部分(聚合);7)对象之间通过消息通信,以实现对象之间的动态联系;8)用关联表达某些类之间对用户业务有特定意义的关系。

        3、在运用面向对象方法开发的系统中,对象是系统的基本构成单位,而对象是通过类进行描述和创建的。系统中的对象对应着问题域中的事物,其内部的属性与操作刻画了事物的静态特征与动态特征。对象之间的继承、聚合、关联和消息登关系如实的表达了问题域中事物之间实际存在的各种关系。

        4、面向对象的编程语言认为:客观世界中每一个事务都是一个相对独立的实体,它的许多内部细节是外部不必关心的。OOPL的封装机制把对象的属性和操作结合为一体,并屏蔽了对象的内部细节

        5、面向对象的软件工程方法设计面向对象理论在软件工程领域的全面运用,它包括面向对象的分析OOA、面向对象的设计OOD、面向对象的编程OOP、面向对象的测试OOT和面向对象的软件维护OOSM等主要阶段。如下图所示:

        5.1、OOA:OOA强调直接从问题域中客观存在的事物来识别系统中的对象,用对象的属性和操作描述事物的静态特征和动态特征。问题域中有哪些与需求有关的事物,OOA模型中就应该有哪些对象。对象及其属性和操作的命名都强调与客观事物保持一致。此外OOA模型也保持了问题域中事物分类以及它们之间关系的本来面貌,包括:把具有相同属性和相同操作的对象归结为一类;用一般——特殊结构描述一般类与特殊类之间的关系,即继承关系;用关联表示事物之间的静态联系;用消息表示事物之间的动态联系

        5.2、OOA与OOD的职责划分是:OOA针对问题域和系统责任,旨在建立一个能直接映射问题域的OOA模型,不考虑与系统实现条件有关的因素,从而使OOA模型独立于具体的实现。OOD则是在OOA模型的基础上,针对具体的实现条件,运用OOD方法进行系统设计,既包括全局性的设计决策,也包括对象细节的完善。根据具体的实现条件,一方面既要对OOA模型做某些必要的修改和调整,将其结果作为OOD的一个组成部分,另一方面要增加若干新的组成部分,以解决人机交互。控制驱动和数据存储等方面的问题。

        5.3、OOP:识别对象的工作已经在OOA和OOD阶段完成,OOP只是用一种面向对象的编程语言把OOD模型中的每个类编写为程序代码罢了。

        5.4、一个理想的面向对象开发过程,要求在OOA和OOD阶段产生清晰而完整的系统模型,对系统中需设立的每一个类,其内部构成和外部关系都应该给出明确的定义,而不是把这些问题留给程序员去思考。OOA和OOD模型中定义的每个类以及它们之间的各种关系决定了程序的基本结构。对象属性及其数据类型也应该在分析与设计阶段基本确定,程序员一般不需要去重新定义这些信息,而只是需要把它们翻译成源程序代码。在编程工具的支持下,这部分信息可以自动转换为源程序代码。程序员需要动脑筋的工作主要是实现模型中所定义的操作。

        5.5、面向对象方法可提高软件维护效率的另一个重要原因是:系统中最容易变化的因素——功能,被作为对象的操作封装在对象的内部。对象的封装性使一个对象的修改对其他对象影响很少,避免了一处修改波及全局的“波动效应”

        6、面向对象方法的基本概念

        6.1、对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和施加于这组属性的一作操作构成,属性和操作是构成对象的两个主要因素,属性是用来描述对象静态特征的一个数据项,操作是用来描述对象动态特征(行为)的一个动作序列。一个对象的全部属性和操作结合成一个整体,对象的属性值只能由这个对象的操作存取。需要注意的是,从问题域中抽象出来的对象只描述客观事物本质的、与系统目标有关的特征,而不考虑那些非本质的,与系统目标无关的特征——即对象是对事物的抽象描述。基于上述几点,对象可以有一个更为广泛的定义:对象是问题域中或实现域中事物的抽象,它反映了该事物在系统中需要保存的信息和能够发挥的作用,它是由一组属性和对这些属性进行存取和修改的一组操作所构成的封装体

        6.2、类:把众多事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法,分类所依据的原则就是抽象,即忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有相同性质的事物划分成一类,得出一个抽象的概念,被称为类。面向对象方法从人类的日常思维中吸取了抽象的思维方法,即:所有具有相同属性和操作的对象抽象为一个类,在这个类中给出这些对象所共同拥有的属性和操作,而不是针对每个单独的对象分别取进行一番描述。类是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,由一个类名、一组属性名和一组操作构成。一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体,因此一个对象又称为类的一个实例。事务(对象)既具有共同性也具有特殊性。运用抽象的原则,舍弃对象的特殊性,抽取其共同性,则得到一个适应一批对象的类。

        6.3、封装的两层含义:1)把对象的全部属性和全部操作结合在一起形成一个不可分割的独立单位,即对象;2)信息隐藏,即尽可能隐藏对象的内部细节,对外形成一个边界(或者说是形成一道屏障),只保留有限的对外接口使之与外部发生联系,这主要是指对象的外部不能直接地存取对象的属性,只能通过几个对外开放的操作与之发生联系。封装的定义:封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。对象的属性和操作紧密结合反映了这样一个基本事实:事物的静态特征和动态特征是事物不可分割的两个侧面。系统中把对象看成它的属性和操作的结合体,就使对象能够集中而完整地描述并对应一个具体的事务。封装的原则在软件中的反映的是:对象以外的系统成分不能随意存取对象内部的数据(属性),从而有效地避免了外部错误对它的“交叉感染”

        6.4、特殊类拥有其一般类的全部属性与操作,称为特殊类对一般类的继承。如果限定每个特殊类只能继承单独一个一个类的属性与操作,则这种继承被称为单继承。如果允许一个特殊类同时集成多个一般类的属性与操作,则这种继承称为多继承。

        6.5、现实世界中许多复杂的事物是由若干比较简单的事物构成的,前者是一个整体,后者是它的组成部分。如果只是看到一个庞大的整体而不区分它的各个组成部分,则整体的复杂性可能达到难以掌握的程度。人们在日常的思维中形成了这样一种思想方法:认识事物之间的组成关系,把具有这种关系的事物组织在一起,由零散的部分构成一个完整地整体,而当面临一个复杂的事物时,则分析它是由哪些比较简单的事物构成,用这些事物作为它的组成部分,从而降低整体事物的复杂性。这种思想方法反映在面向对象方法中就是聚合。聚合是面向对象方法的基本概念之一。一方面,它是一种系统构造原则,即由比较简单的对象构成比较复杂的对象,从这个角度来看,聚合的定义是:一个复杂的对象以若干比较简单的对象作为其组成部分。另一方面,聚合也是对象之间的一种关系,即整体对象和部分对象之间的关系。整体对象和部分对象也是相对而言的,前者描述了一个复杂事物的整体,后者则描述复杂事物中一个相对独立的局部。整体对象和部分对象之间的关系便是聚合,又称为整体——部分关系,这种关系时类的抽象层次上定义的。聚合的定义如下:聚合是两个类之间的一个二元关系,它表示一个类的对象实例以另一个类的对象实例作为其组成部分。在现实世界中,有些事物之间的组成关系是紧密而固定的,UML中把紧密而固定的聚合关系称为组合,而聚合则泛指所有的情况组合方式下,部分对象作为整体对象的一个属性从而构成一个嵌套对象,一个部分对象只能隶属于唯一的整体对象,且二者同生同灭。聚合方式下可以独立地定义和创建整体对象和部分对象,并在整体对象中设置一个属性,它的值是一个指向部分对象的指针,从而在逻辑上表明对象是另一个对象的组成部分。聚合方式下整体和部分可以有不同的生存周期,且整体对象中的一个部分可以在不同的时刻更换成不同的对象,一个部分对象可以在不同的时刻属于不同的整体,并可以同时属于多个整体,这是一种松散、灵活地聚合关系

        6.6、关联:关联是两个或者多个类上的一个关系(即这些类的对象实例集合的笛卡尔积的一个自己和),其中的元素提供了被开发的应用领域中一组有意义的信息。

        6.7、消息:在面向对象方法中把向对象发出的服务请求称为消息,通过消息进行对象之间的通信是面向对象方法的原则之一,它与封装的原则有密切的关系。封装使得消对象称为一些各司其职、互不干扰的独立单位,消息则为它们提供了一种合法的动态联系途径消息的实现手段,在顺序程序中主要是函数调用或者其他类似于函数调用的机制,在并发程序和分布式系统中,可以采用进程通信IPC、远程过程调用RPC等其他通信机制。因此,消息可以被定义为:消息是对象之间在一次交互中所传送的信息。

        6.8、持久对象和主动对象:1)持久对象是指生存周期可以超越程序的执行时间而长期存在的对象,实现途径可以采用面向对象数据库管理系统。2)主动对象是至少有一个不操作不需要接收消息就能主动执行的对象。主动对象中能够主动执行的操作称为主动操作。在系统分析阶段,主动对象的作用是表示问题域中具有主动行为的事物,在系统设计阶段,主动对象除了表示有主动行为的事物之外,还用来表示为实现系统并发而设计的控制流.。在系统实现阶段,主动对象的每个主动操作所描述的控制流将被实现为一个可并发执行的、主动的程序单位,即进程或者线程

        7、实体——关系法的核心是实体和关系。实体描述问题域中一个事务,它包含一组描述事物信息数据的信息的属性。关系描述问题域中各个事物之间在数据方面的联系。信息建模法只是对问题域的半直接映射,因为它忽略了事物的行为特征。

        8.1、OOA:运用面向对象的概念对问题域进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,将问题域中与系统责任有关的事物抽象为类和对象,定义这些类和对象的属性与操作,以及它们之间所形成的各种关系。最终的目的是产生一个符合用户需求,并能直接映射问题域的OOA模型及其规约。通常的做法是先以用况的概念进行需求分析,然后以面向对象的概念进行系统分析,此时OOA既包括了需求分析也包括了系统分析。(以参与者与系统对话的方式来描述一项系统功能的使用情况,并把每一项系统功能都用一个用况来描述,并以用况作为系统的需求模型。)

        8.2、OOD:面向对象的设计OOD就是在OOA模型基础上运用面向对象方法进行系统设计,其目标是产生一个可实现的OOD模型。问题域是指被开发系统的应用领域,即在现实世界中油这个系统进行处理的业务范围,系统责任即所开发的系统应该所具备的职能

        8.3、需求变化:当需求发生变化时,系统中最容易发生变化的部分是功能部分(即执行部分,对对象而言则是对象的操作部分),其次是与外部系统或者设备的接口,再者是系统中的数据,最稳定的部分是对象。应变能力的强弱是衡量开发方法优劣的重要标准。为了适应需求的不断变化,要求把需求变化所引起的影响尽可能局部化,具体而言就是把系统中最容易变化的部分尽可能隔离起来,并且是系统的各个单元成分之间的接口尽可能少。面向对象方法对需求变化比较有弹性,主要原因是或抑郁封装原则。它以最稳定的成分——对象作为构成系统的基本单位,把最容易变化的部分——操作及属性封装在对象之中。属性与操作的变化主要影响到对象内部,只通过有限的对外接口(消息)对外部发生影响,从而有效地限制了一处修改处处牵连的“波动效应”。OOA以对象作为系统的基本构成单位,对象的稳定和相对独立性使系统具有一种宏观的稳定效果。即使需要增加或者减少某些对象,其余的对象仍能保持相对稳定。

        8.4、分析必须产生关于系统“做什么”的阐述,而不是解决“怎么做”的问题。任何关于“怎么做”的陈述只有当它有助于揭示系统行为时才是有用的。在这一点上分析和设计很不相同,分析是通过识别形成问题域词汇的类及对象(以及它们的作用、责任和协作),为现实世界建模,设计是创造一种能够提供分析模型所需行为的人工制品

        9、用况图:是由用况、参与者以及它们之间的各种关系构成的图。每个用况是对一项系统功能使用情况的描述,参与者是在系统边界以外与系统进行交互的人或物。用况之间也可以有延伸、包含和泛化等关系。在软件开发过程中,一用况图作为系统的需求模型可以为面向对象的系统分析与设计提供良好的基础。用况图的描述方式,是陈述参与者在使用一项系统功能时如何与系统进行对话,即具体地说明参与者像系统输入什么信息,系统进行什么处理以及返回什么信息等。从本质上来说,用况并非面向对象的概念,但是它清晰地表达了用户对系统的功能需求,为面向对象的分析提供了良好的基础。

        10、面向对象建模的主要原则:

        10.1、抽象,从许多事务中舍弃个别的、非本质性特征,抽象出共同的、本质性的特征就叫做抽象。抽象是形成概念的必要手段。抽象原则具有两方面的意义,第一,尽管问题域中的事物时很复杂的,但是模型开发者并不需要了解和描述它们的一切,只需要研究它们其中与系统目标有关的事物及其本质性特征。对于那些与系统目标无关的事物或者特征,即使有所了解也应该舍弃;第二,通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批事事物的抽象概念。抽象是面向对象方法中使用最为广泛的原则,如:系统中的对象是对现实世界中事物的抽象;类是对象的抽象;一般类是对特殊类的进一步抽象;属性是事物静态特征的抽象;操作是事物动态特征的抽象。早在面向对象方法出现之前,软件开发领域中就已经开始运用抽象的原则,主要是过程抽象和数据抽象。过程抽象是指任何一个完成确定功能的操作序列,其使用者都可以把它看成一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。运用过程抽象,开发者可以把一个复杂的功能分解成一些子功能,如果子功能仍然比较复杂则可以进一步分解。这使得开发者可以在不同的抽象层次上考虑问题,在较高层次上思考时可以不必关系较低层次的实现细节——即只在意一个过程完成什么功能而不必注意它是怎样完成的。过程抽象不是面向对象方法的主要抽象形式,但是在通过消息相互调用各个对象的操作之间,实际上就是一种过程抽象的关系。数据抽象是在根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。数据抽象是面向对象方法的核心原则,它强调把数据(属性)和操作结合为一个不分的系统单位(即对象),对象的外部只需要知道它做什么而不不必知道它怎么做

        10.2、分类就是白具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述。分类原则是抽象原则运用于对象描述时的一种表现形式。在面向对象方法中所有的对象都是通过类来描述的,用一个类来描述它所代表的全部兑现,这也意味着需要在类的抽象层次上建立系统模型。

        10.3、封装原则强调对象的完整性和独立性,通过一种机制,把对象的属性和操作结合为一个不可分割的系统单位,并尽可能隐蔽对象的内部细节。封装实际上也是抽象原则的一种具体应用,它既体现了过程抽象也体现了数据抽象

        10.4、聚合原则:把一个复杂的事物看成是由若干比较简单的事物组成的,从而简化了对复杂事物的描述,并使系统模型能够清晰描述问题域中事物之间的组成关系。聚合原则可以在以下几种情况下使复杂性得到控制:1)对象过于复杂,从中分离出一些独立部分,则简化了对整体的描述;2)如果一个已经定义了的类恰好可以描述当前考虑对象的一个局部,提供了该对象所含的一部分属性和操作,则可以用已定义类的对象作为当前考虑的整体对象的一个部分对象,从而不必在整体对象中再重复地描述这些属性与操作;3)整体对象的某些部分在数量上时可变的,把它们独立出来则更容易进行处理;3)对象的某些部分在描述方式上是动态变化的,把它们分离出来作为部分对象有益于适应这种变化。

        10.5、消息通信原则:要求对象之间只能通过消息来传递信息,而不允许在对象之外直接的存取对象内部的属性。通过消息进行通信是由于封装原则引起的。在面向对象的系统中,数据被封装的对象内部不允许外部直接访问,因此消息通信就成了实现对象之间动态联系的唯一渠道。在面向对象建模中要求用消息表示出对象之间在行为上的依赖关系以及它们之间的信息交互。消息通信是在系统运行时发生的,更确切的说,它总是在某个对象的某个操作执行时发生的。

        10.6、模型是指某一抽象级别上的系统描述,构成这种描述的任何资料都是模型的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值