`
java_hanyu
  • 浏览: 71368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象设计第六话

阅读更多
系统对象和类分析

静态分析阶段(定义类的关系以及对象的关系)

关联和链接  
   1) 关联——针对类而言,表示类之间的使用关系。
      . 类的相互的使用关系称为双向关联。
      . 指类图中用直线表示的关系;
      . 线可以是水平也可以是垂直的;
      . 可以在关系线上给一个逻辑名称描述这个关系;
   2) 链接——针对对象而言
      . 指对象图中二个对象间的关系;

类的关联
   1)一个类中的属性是另一个类的对象,另一个类中也有这个类的对象作为其属性。(双向关联)"has a"(一对一关联)
   2)一个类中包含另一个类的多个对象(集合)作属性,另一个类中也有这个类的一个对象作为其属性。(一对多关联)
   3)一个类中包含有另一类的多个对象(集合)作属性,另一个类中同样也有这个类的多个对象作属性。(多对多关联),
以上所介绍的关联关系都是双向关联。

多对多关联是复杂的关联关系,要是用关联类来把多对多转变成两个一对多关系,也可以通过在多对多关联中的类中加上一个唯一标识对象的键值,

关联和多样性
   1) 多样性显示了一个类中对象和另一个类中对象联系的可能性;
   2) 在类图中,每个类只有一个矩形,因此联接会确定一个类有多少个对象链接于另一个类的对象;
   3) 联接线的末端有标记;

多样性的值
   1) 2: 刚好二个;(确定值)
   2) *: 0至多个; (不确定值)
   3) 5..15: 5到15个; (范围值)
   4) 2,4,6: 2、4、6个; (可选值)
   5) 10..*: 最少10个;
   6) 0..10: 最多10个;

复杂性的联接
   1) 多样性标记“*”出现在联接的两端;
   2) 你命名了类图中所有联接并分配了多样性后,是时候重新审视他们并尝试解决复杂联接。可使用联接类或符合条件联接。

关联类(类似于数据库中索引表)
   1) 这意味着联接它本身必须编码为一个类,这个类带有解决冲突的属性;
   2) 这种技术用于分析阶段解决多对多关系;

符合条件的联接
   1) 通过使用属性值可解决多对多问题;
   2) 分配一个唯一的属性值;

依赖,一个类,通过类中的方法包含另一个类的对象,并通过此对象调用另一个类中的方法,方法参数就是一个类对另一个类发送的消息(也可能是对象)。

分析阶段的逻辑关系

   1) 在一个系统中必须存在一些关系以便进行适当地操作;
   2) 逻辑关系表达了一个类和另一个类如何关联、一个对象怎样得到或使用另一个对象;
   3) 问下列问题:
      . 一个类依赖于另一个类的某些功能吗?
      . 是否存在一种非常强的关系以致一个对象缺少了另一个便不能存在?
   4) 在这个模块讨论的逻辑关系如下:
      . 继承(Inheritance):
        a. 一般,(泛化)父类,子类的泛化,也就是抽取共性,抽象
        b. 特殊,(特化)子类,父类的特化,也就是在泛化抽象中加上了某种特性,特化
      . 多态(Polymorphism)
      . 关联(Association)
        a. 聚合(Aggregation)
        b. 组合(Composition)
   
继承(Inheritance)
   1) 继承的概念描述了你如何在一组类似或相同目的类间共享或得到属性以及功能;
   2) 单继承和多重继承;
   3) 使用继承,我们能够 :
      . 降低全部系统的尺寸;
      . 改善设计和维护的功能;
   4) Car、Bus、Train、Airplane、Ship, 他们都是交通工具。他们可以移动以及驾驶,它们可以将人从A地运往B地。
   
子类和父类
   1) 当一个类继承自其它类,它被称为“子类”;
   2) 当一个类被继承自其它类,它被称为“父类”;

注意:如果继承关系没有处理好,在使用多态上就会出现问题,所以要正确的处理继承关系。

继承分析

继承的二种类型:
   . 一般继承:

      |ˉˉˉˉˉ|    |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
      |   Dog    |    |   Cat    |                |  Mammal  |
      |__________|    |__________|                |__________|
      |-numLegs  |    |-numLegs  |  ——>         |-numLegs  |
      |ˉˉˉˉˉ|    |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
      |+eat()    |    |+eat()    |                |+eat()    |
      |+bark()   |    |+meow()   |                |__________|
      |__________|    |__________|                     △
                                                       │
                                             |ˉˉˉˉˉˉˉˉˉˉ|
                                             |                    |
                                        |ˉˉˉˉˉ|        |ˉˉˉˉˉ|
                                        |   Dog    |        |   Cat    |
                                        |__________|        |__________|
                                        |ˉˉˉˉˉ|        |ˉˉˉˉˉ|
                                        |+bark()   |        |+meow()   |
                                        |__________|        |__________|

   . 特殊继承:

                  |ˉˉˉˉˉ|                                 |ˉˉˉˉˉ|
                  |  Mammal  |                                 |  Mammal  |
                  |__________|                                 |__________|
                  |-numLegs  |                                 |-numLegs  |
                  |ˉˉˉˉˉ|                                 |ˉˉˉˉˉ|
                  |+eat()    |                                 |+eat()    |
                  |__________|                                 |__________|
                       △                ——>                      △
                       │                                           │
             |ˉˉˉˉˉˉˉˉˉˉ|                   |ˉˉˉˉˉˉˉ|ˉˉˉˉˉˉ|
             |                    |                   |              |            |
        |ˉˉˉˉˉ|        |ˉˉˉˉˉ|         |ˉˉˉˉˉ|  |ˉˉˉˉˉ|  |ˉˉˉˉˉ|
        |   Dog    |        |   Cat    |         |   Dog    |  |   Cat    |  |  Sheep   |
        |__________|        |__________|         |__________|  |__________|  |__________|
        |ˉˉˉˉˉ|        |ˉˉˉˉˉ|         |ˉˉˉˉˉ|  |ˉˉˉˉˉ|  |ˉˉˉˉˉ|
        |+bark()   |        |+meow()   |         |+bark()   |  |+meow()   |  |+baa()    |
        |__________|        |__________|         |__________|  |__________|  |__________|

多态
   1) 是一个和继承关系密切的OO术语;
   2) 多态这个名字来源于希腊,意思是“多种形态”;
   3) 从分析透视图看来,多态意味着不同类型和多种属性可分配于类;
   4) Java和C++支持多态;
 
抽象类
   1) 是一些包含未实现功能的类,这些类不能实例化。一个类继承了一个抽象类继承了所有方法(包括抽象方法);
   2) 任何类继承了抽象类后除非实现了所有的抽象方法,否则也是抽象的;
 
UML中关于抽象类的符号
   1) 抽象类的类名为斜体;
   2) 抽象方法名也是斜体;

角色:表示一类数据结构的关系结构,角色可以是不同的类,可以通过角色来区别不同的对象的所能够使用的功能。

反身(反射)关联(加角色)

   1) 对象图中,相同类的二个实体间的联系;
   2) 但是在类图中只有一个类代表这些对象;
   3) 因此,这种关联回转到相同的类。这样的关联称为反身关联;
   4) 反身关联在关联线的末端必须存在角色名字。这明确地说明你是如何关联这个类的二个对象。

             wife
             |ˉˉˉˉˉˉ|
        |ˉˉˉˉˉ|      |
        |  Person  |      |
        |__________|      |married
        |ˉˉˉˉˉ|      |
        |__________|      |
            ↑____________|
             husband

关联(Association)
   1) 关联用于描述类图中二个类间的关系;
   2) 包括一些更紧密关系诸如:聚合(Aggregation)和组合(Composition)
      . 联系:厨师使用刀;
      . 聚合:一辆车有一个车载电台;
      . 组合:一辆车一般只包括一个发动机;

        |ˉˉˉˉˉ|     用刀    |ˉˉˉˉˉ|
        |   Chef   | chops with  |   Knife  |
        |___厨师___|------------>|____刀____|
        |ˉˉˉˉˉ|             |ˉˉˉˉˉ|
        |__________|             |__________|

聚合(Aggregation)
   1) 是关联中的一种;
   2) 更紧密的关联方式;
   3) 聚合是一种整体/部分关系,但“部分”可以被其它对象共享(“部分可以脱离整体存在”),因而有可能在“整体”外存活。
   4) 表现为“Has A”关系;

        |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
        |    Car   |     has a      | CarRadio |
        |__________| ◇-------------|__________|
        |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
        |__________|                |__________|

组合(Composition)
   1) 最紧密的关联方式;
   2) 表现为“always contains”关系,部分不能离开整体存在,整体也不能够缺少部分而使用 例如:车不能没有引擎
   3) 在UML图上表现为一黑色的菱形

        |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
        |   Car    |     driven by  | Enginee  |
        |__________| ◆-------------|__________|
        |ˉˉˉˉˉ|                |ˉˉˉˉˉ|
        |__________|                |__________|

方法的扩散

方法的扩散,是建立在聚合和组合的关系之上,类和类之间的方法的调用,会造成方法的扩散,也就是类中的方法通过关联的属性来调用这个属性的类型中定义的方法,方法扩散,可以导致整体的多个部分中的方法被连锁调用。

方法的扩散:
    . 代理,整体和部分的类型是同一个类别(同一父类,或实现统一接口),他们之间的方法传递叫代理 ,可以使用多态特性。
    . 委托,整体和部分的类型是不同类别,他们的方法传递叫作委托。

动态模型分析

在分析阶段创建动态模型
   1) 一旦在分析阶段完成对象模型建模,你可以开始对系统和对象在整个时间段内运作方式进行建模,这称为动态建模。
   2) 动态建模发生二次:
      . 在逻辑分析阶段(确信每个操作都是可能的)
        a. 时序图(Sequence diagrams)/协作图(Collaboration diagram);
        b. 状态转换图(State transition diagram);
        c. 活动图(Activity diagram);
      . 在物理设计阶段(分配方法描述给对应的类)
责任

在OOA&D中,“责任”指:
   . 一个类知道什么(状态);
   . 一个类做什么(行为);
   . 一个类型知道什么(状态);
   . 一个类型做什么(行为);

分配责任

在分配责任时,很重要去确定以及实现以下内容:
   . 专家(指你所分配责任的类完全可实现其责任,这减小了额外对象的依赖以及支持低耦合);
   . 创建者(谁应该创建一个实例);
   . 高聚合(一个类的属性一起完成得很好);
   . 低耦合(减少对象间的依赖性);

改变的必要
   1) 一个系统中的对象存在是因为它们完成一些作务帮助系统完成它们的目标;
   2) 每个任务需要一定时间完成以及需要在对象间传递一些信息;
   3) 系统中的每个对象代表一组特定的活动;
   4) 你也应该考虑一个操作中所调用的对象以及它们是如何交互去完成这个操作的, 一个对象所完成的每个操作或子操作是如何改变对象的内在状态的;


时序图
   1) 模仿一定时间内一个系统的单个操作;
   2) 每个时序图:
      . 和一个用例或一个用例中的一个情景直接联系;
      . 确定每个过程中所调用的对象;
      . 确定在一个过程中发现的行业或事件;
      . 确定在每个过程中必须传输什么信息;
      . 确定每个行为后需要什么响应;
      . 对于每个用例至少产生一个时序图
   3) 在分析阶段,他们仅影响交互。在设计阶段,每个交互将会转为一个方法调用。
   4) 一个用例至少一个时序图, 时序图可以制作得很复杂以显示一个用例的多个情景,但最好还是每个情景对应一个时序图。

协作图
   1) 可以作为时序图的可选对象;
   2) 对象通过标有序号的箭头连接,这些箭头显示了信息的流程;
   3) 箭头从动作源指向目标对象;
   4) 箭头标有序号显示了在一个情景中它们使用的顺序;
   5) 协作图看上去像对象图的子集。操作中被调用的对象在图中表现为装有对象名称的盒子。


状态转换图
   1) 时序图和协作图显示了在一定时间段内系统中对象是如何传递信息的;
   2) 状态转换图显示了在一定时间段内一个对象是如何改变的,它的方法是如何被其它对象所调用;
   3) 组成:状态和事件;
   4) 箭头用于显示对象各种状态间的路径;
   5) 每个箭头显示了该对象是如何完成特定事件;
   乏值,也就是状态转换的临界值,状态转换的临界条件也就叫作乏值条件。
状态
   1) 所有对象均有状态,任何对象的当前状态由存储于其属性中的值指示;
   2) 设想一台打印机,它要么闲置、要么忙碌,打印机只有二种状态:闲置和忙碌;

事件
   1) 事件是一个对象从一种状态转换到另一种状态的促进因素;
   2) 事件表现为方法调用。方法是一个对象的某些或一系列改变状态的任务;
   3) 当一些对象调用打印机的print()方法,状态由闲置改变为忙碌,print()方法的调用就是导致状态改变的事件;
   4) 一个对象通常处于它状态中的一种,这意味着他们是稳定的。同时也意味着状态的改变应该越快越好。

             |ˉˉˉˉˉ|      print     |ˉˉˉˉˉ|
             |   idle   |--------------->|   busy   |
     ●----->|          |                |          |
             |          |<---------------|          |
             |__________|      eof       |__________|
                  |
                  | delete
                  ↓
                  ◎

活动图
   1) 显示一个对象和工作流的关系以及描述了相应的处理方法;
   2) 每个用例只有一个活动图;
   3) 每个活动表现为一个圆,该圆上有连接线连到下一个活动。这个连接线被称为板机(trigger);
   4) 一个活动能产生多个板机,这依赖于活动的结果;
分享到:
评论

相关推荐

    面向对象设计UML实践课后答案

    面向对象设计(Object-Oriented Design,OOD)是一种软件开发方法,它基于“对象”的概念,将现实世界的问题域转化为计算机程序。UML(Unified Modeling Language)是面向对象设计的一种标准化建模语言,用于可视化...

    面向对象设计uml实践(第二版)课后题答案

    本书的第二版深入探讨了如何运用统一建模语言(UML)进行面向对象设计,提供了丰富的实例和课后习题以巩固理论知识。课后题答案是学习过程中的重要参考资料,它能帮助读者检验自己的理解和应用能力。 UML,全称为...

    c++面向对象程序设计第三版谭浩强教学大纲.pdf

    "C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...

    面向对象分析与设计.pdf

    面向对象设计是在分析的基础上进行的,它关注于如何将需求转化为软件系统的内部结构。设计阶段的输出通常包括更详细的类图、活动图、序列图、状态图和组件图等UML模型。设计过程还会确定系统组件的接口和协作方式。 ...

    c++面向对象程序设计(第6版)Walter Savitch 书中的 c++题库

    《C++面向对象程序设计(第6版)》是由Walter Savitch著,佟俐鹃改编的教材,这本书深入浅出地介绍了C++语言的面向对象编程思想。书中的"test bank"是配套的自测题库,包含了丰富的练习题和答案,旨在帮助读者巩固...

    UML面向对象设计与分析

    《UML面向对象设计与分析》是清华大学出版社出版的一本专著,由牛丽平编著,主要探讨了面向对象设计的重要工具——统一建模语言(UML)。这本书深入浅出地介绍了UML的各种图表及其在软件开发过程中的应用,为读者...

    Java面向对象程序设计(第二版)

    封装是面向对象设计的核心概念之一。它指的是将对象的状态(属性)和行为(方法)捆绑在一起,并对外隐藏对象的实现细节。封装可以通过访问修饰符来实现,比如public、protected和private,它们控制类成员的可见性和...

    C++面向对象程序设计第6版答案

    《C++面向对象程序设计第6版答案》是学习C++编程的重要参考资料,它涵盖了第六版教材中的关键概念和练习解答。这份资源包含了从Chapter02到Chapter18的各个章节习题答案,帮助读者深入理解和掌握面向对象编程的核心...

    Java面向对象程序设计

    Java面向对象程序设计是编程领域中的重要主题,尤其在企业级应用开发中占据主导地位。本教程涵盖了这一关键概念,旨在帮助学习者深入理解和掌握Java的面向对象特性。以下是相关知识点的详细说明: 1. **面向对象...

    C++面向对象程序设计(第6版)答案

    ### C++ 面向对象程序设计(第6版)答案:数组章节解析 #### 知识点概述 本章节主要介绍了数组在C++中的使用方法、初始化方式以及与面向对象编程的结合应用。通过具体示例——降雨量统计程序的设计与实现,进一步...

    C++面向对象程序设计教程——课件PPT

    第6章“多态性与虚函数”是面向对象的重要特性,虚函数使得基类指针可以调用派生类的重写函数,实现了动态绑定,增强了代码的灵活性。 最后,第11章“面向对象程序设计”可能是对整个课程的综合应用和总结,可能会...

    面向对象分析与设计 麻志毅的课件

    9. **OO设计**:这部分内容可能涵盖了面向对象设计的整体流程,包括分析结果的转化、类的设计原则、接口设计等。 通过这些课件,学习者可以深入了解面向对象分析与设计的全貌,掌握从需求分析到系统实现的关键步骤...

    面向对象分析与设计(第3版).pdf

    ### 面向对象分析与设计(第3版) #### 知识点概览 《面向对象分析与设计(第3版)》是一本全面介绍面向对象方法论的经典著作,由Grady Booch、Robert A. Maksimchuk、Michael W. Engle、Bobbi J. Young、Jim ...

    UML面向对象建模与设计答案

    《UML面向对象建模与设计答案》是一个包含详尽解答的资源,旨在帮助学习者理解和掌握UML(Unified Modeling Language)在面向对象设计中的应用。面向对象建模是软件开发过程中至关重要的一环,它通过可视化的方式...

    C++面向对象程序设计第六版(Walter Savitch)

    《C++面向对象程序设计第六版》是由著名计算机科学家Walter Savitch编著的一本经典教材,这本书深入浅出地介绍了C++编程语言的核心概念,特别是面向对象编程(OOP)的思想和技术。作为第六版,它包含了最新的C++标准...

    面向对象程序设计第一次离线作业作业.doc

    面向对象程序设计第一次离线作业 面向对象程序设计(Object-Oriented Programming,OOP)是一种编程范式,它将程序看作是一组对象的集合,对象之间通过消息进行交互。在这个离线作业中,我们将学习到面向对象程序...

    C++面向对象程序设计PDF电子书与参考答案

    以下是对"**C++面向对象程序设计PDF电子书与参考答案**"中的关键知识点的详细阐述: 1. **封装**:封装是面向对象编程的基础,它将数据(属性)和操作这些数据的方法(函数)捆绑在一起,形成一个独立的实体——...

Global site tag (gtag.js) - Google Analytics