zoukankan      html  css  js  c++  java
  • 大象之UML (一) 准备

    开篇之言:
      老子说:大音希声,大象希形。我的理解大概是,音至极美,声之其次;象至极大,形之其次;器至极巧,工之其次。

    第一章:准备——需要了解
    一:面向过程还是面向对象。
    A:面向过程:
    1)前提:面向过程的前提假设是这个过程是稳定的且过程中的每一步都是设定好的。
    2)概念:面向过程的方法认为我们的世界是由一个个相互关联的小系统组成的。且这样的小系统依据严密的逻辑组成的,环环相扣,井然有序。每个小系统有着明确的开始与结束,构成这个系统的各个部分之间有着密不可分的因时关系。
    3)特点与困难:这种分析方法在需求复杂较低的时候非常管用,但当考虑的因素太多时,要把所有可能的因素都考虑到,把所有因素的因果关系都分析清楚,再把这个过程模拟出来实在是太困难了。而我们的精力有限,计算能力有限,只能放弃对整个过程的了解,得闲寻找一个方法,能够将复杂的系统转化成一个个我们 可以控制的小单元。如:如果一次成型一辆汽车太过困难,我们可以将汽车分解为很多零件,分步制造,再依据提前设计好的接口把它们安装起来,形成最终的产品


    二:面向对象:(Object Oriented)
    将世界看作一个个相互独立的对象,相互之间并无因果关系,它们平时是“鸡犬之声相闻,老死不相往来”的。只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。这些交互构成了这个生动世界的一个”过程“。

    1)一切都是对象

    在面向对象的眼里,一切有名字的东西都是对象,都应当使用对象的观点来看待它,分析它。哪怕这个东西的名字叫某某业务流程,它也仍然应当看作是一个对象,而不是一个过程。

    2)对象都是独立的

    独立性是面向对象的一大特点,承认对象的同时就接纳了这一观点。对象与对象之间是天然独立的,只是在某个特定的场景下,它们的某一个特定的实例才相互联系在一起。我们获取和分析对象的手段经常是通过分析某个场景,但是需要知道,对象是离散的,它不是因为该场景而存在的。场景中的对象只是对象“映射”到该场景中的一个侧面,我们称之为对象的实例。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息。

    3)对象都具有原子性
    无论在什么时候,在分析过程中都应当将对象视为一个不可分割的原子,哪怕这个对象的规模很大。例如在分析一商业过程的时候,对象的规模(粒度)大到如银行,工厂,商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互就是一具整体,不能分割。
    并且在分析过程中,对象总有一个边界,永远也不应该打破边界去窥探对象的内部。就像鸡蛋一样只从外面看你属性,而不应该打开去里边。

    4)对象都是可抽象的
    对象有着很多不同的方面。一般来说,对象参与一个场景时会展现出来某一个方面。总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。通常这种抽象会以接口来命名。在分析过程中,得到的任何一个对象都有特定的方面可作为抽象。因为对象总是从场景分析中得到的,它在场景中肯定展现了一个方面。对象所具有的方面,或者说对象所参与的场景越多,对象越有抽象价值,反之亦然。

    5)对象是有着抽象层次的。层次越高,其描述越粗略但适应能力越广;层次越低则描述越精确但适应能力越下降。
    面向对象与面向过程的根本不同就是:不再把世界看作是一个紧密关联的系统,而是看成一些相互独立的小零配件,这个零件依据某种规则组织起来,完成一个特定的功能。
    面向对象的困难:
    在现实世界与对象世界之间存在碰上一道鸿沟,它便是抽象:而抽象是面向对象的精髓所在【一种是:把现实世界映射到对象世界的方法。二是:一种从对象世界描述现实世界的方法。三:一种验证对象世界行为是否正确反映了现实世界的方法。】


    三:统一建模语言(Unified Modeling Language)
    特点:
    1)统一语言:就是形成标准,使得不同地域,不同文化,不同社会,不同组织的信息能够以所有人都明白的表述和所有人都遵从的格式在人群中无障碍地流通。让人和机器都能读懂。
    2)可视化,在这里的可视化含义并非指UML的图形是可以用眼睛看到的,可视化的含义是指,UML通过它的元模型和表示法,把那些通过文字或其他表达方法很难表达清楚的,隐晦的潜台词用简单直观的图形表达和蚶出来,准确而直观地撕碎复杂的含义。

    四:
    1)从现实世界到业务模型(解决了面向对象的第一个需要方法)
    建立模型是人们解决现实世界问题的一种常用手段。我们通常接触到的建模是为了解决某个问题而建立的一个数学模型,通过数学计算来分析和预测,找出解决问题的办法。从理论上说,建立模型是指通过对客观事物建立一种抽象的方法,用来表征事物并获得对事物本身的理解,再把这种理解概念化,并将这些逻辑概念组织起来,形成对所观察的对象的内部结构和工作原理的便于理解的表达。

      然而我们所处的这个现实世界充满了丰富多彩但杂乱无章的信息,要建立一个模型并不容易。建立模型的过程是一个抽象的过程,所以要建立模型,首先是知道如何抽象现实世界。如果我们部在很高手抽象层次,以高度归纳的视角来看这个世界的动作,就会发现现实世界无论多复杂,无论是哪个行业,进无论做什么业务,其本质无非是由人事物和规则组成的。人是一切的中心,人要做事,做事就会使用一些物并产生另一些物,同时做事需要新遵循一定的规则。人驱动系统,事体现过程,物记录结果,规则是控制。建立模型的关键就是弄明白有什么人,什么人做什么事,什么事产生什么物,中间有什么规则,再把人事物之间的关系定义贴出来,一个模型也就基本成型了。
    其实现过程:
    第一:UML采用被称之为参与者(Actor)的元模型作为信息来源提供者,参与者代表了现实世界中的“人”。参与者是模型信息来源的提供者,也是第一驱动者。换句话说,要建立模型的意义完全被参与者决定,所建立的模型也是完全为参与者服务的,参与者 是整个建模过程的中心。之所以这样做是最终计算机的设计结果如果不符合客户需求,再好的设计也就等于0.与其在建立计算机系统后因不符合驱动者的意愿而推倒重来,还不如一开始就从参与者的角度开始。
    第二:UML采用被称之为用例(use case) 的一种元模型来表示驱动者的业务目标,也就是参与者想要做什么并且获得什么。这个业务目标就是现实世界中的“事”.而这件事是怎么做,依据什么规则,则通过被称之为业务场景(business scenario)和用例场景(use case scenario)这些场景便是现实世界中的“规则”。最后,UML通过被称之为业务对象模型(business object model)的视图来说明这些业务目标的过程中涉及到的事物,用逻辑概念来表示它们,并定义它们之间的关系。这便是现实世界中的“物”

    2)从业务模型到概念模型(解决面向对象的第二个方法从对象世界描述现实世界)
    业务模型映射并且记录了现实世界,但这只是原始的需求信息,距离可执行代码还很遥远,必须把这些内容换成右以指导开发的表达方式。UML通过用被称之为概念化的过程来建立适合计算机理解和实现的模型,这个模型称为分析模型(Analysis Model)。
    分析需求介于原始需求和计算机实现之间,是一种过渡模型。分析模型向上映射了原始需求,计算机的右执行代码可以通过分析模型追溯到原始需求;同时,分析模型向下为计算机实现规定了一种高层次的抽象,这种抽象是一种指导,也是一种约束,

    分析模型最主要的元模型有:
    边界类(boundary)狭义上说:边界就是大家熟悉的界面,所有的对计算机的操作都要通过界面进行。从广义上说:任何一件事物都分为里面和外面,而外面对里的事物的任何交互都需要有一个边界。换句话说,边界决定了外面能对里面做什么“事”。
    实体类(entity)就是原始需求中业务模型中的业务实体映射了现实世界中参与者完成业务目标时所涉及的事物。
    控制类(Control)边界与实体都是静态的,本身并不会动作。UML采用控制类来表述原始需求中的动态信息,即业务或用例场景中的步骤和活动。

    由于所有的操作都通过边界类来进行,能做什么不能做什么由边界决定,所以边界类实际上代表了原始需求中的“事”;实体类则由业务模型中的领域模型转化而来,它代表了现实世界中的“物”;控制类则体现了现实世界中的“规则”,也就是定语;

    经过了概念模型的转换,业务模型看起来对计算机来说可理解了。但是要得到真正可执行的计算机代码,还要将概念模型实例化。

    三:从概念模型到设计模型

    在上边建立概念模型距离可执行代码已经非常接近了。概念模型使我们获得了软件的蓝图,获得了建设软件所需要的所有组成内容以及建设软件所需要的所有必要的细节。接下来就是设计模型就是要建造零部件,组装汽车的过程。

    四:统一过程简介
      严格来说UML并不是一个方法,非只是一种语言。UML定义了基本元素,定义了语法但是如果要做一个软件项目,还需要有方法的指导。正如写文章有方法,有五言律,有七言律一样,UML也需要有方法的指导来完成一个软件项目。RUP无疑是目前与UML集成和应用最好,最完整的软件方法。
    RUP(Rational Unified Process)统一过程。统一过程并非是因为UML才诞生的,也不是最近才出来的软件方法。如果说一曲美妙的乐意是作曲家根据音乐理论进行创作最后用标准的五线谱记录下来,相信不会有什么疑问。实际上RUP与UML的关系正类似音乐理论和五线谱的关系。相信有很多读者并没有考虑过这个问题,他们会觉的统一过程和UML就是一个东西,统一过程就是UML.但是从本质上说,统一过程和UML是不同的两个领域。UML是一种语言,用来描述软件生产过程中要产生的文档,统一过程则是指导如何产生这些文档以及这些文档要讲述什么的方法。

    五:建模


    一:从问题入手:怎么建和
    首要目标不是要弄清楚业务是如何一步一步完成的,而是要弄清楚有多少业务的参与者?每个参与者的目标是什么?
    模是什么
    一旦决定了抽象的角度,就确定了一个目标。现在,要做的事情便是找出那些能够满足这一目标的事物。这关不容易。有趣的是,我们找出这些事物的过程其实并不是面向对象的,而是过程化的,这是因为要达到一个目标必须要有动作附加在静态的事物上,并产生一定的效果。这样一来,我们必须要搞清楚 谁发出了什么动作,作用于什么事物,产生了怎样的后果。显然这种描述方式是过程化的。但是与面向过程方法不同的是,我们描述这个过程化的场景并不是最终目的。也就是说场景模拟帮助我们找出抽象的对象而场景本身则是这些对象在一定条件下交互的一个特定的结果。当条件变化的时候,场景就会随之改变。

    二:抽象层次:

    抽象层次是面向对象方法中极其重要,但是又非常难以掌握的技巧。要学会站在不同的抽象层次考虑问题。抽象层次越高,具体信息越少,但是概括能力越强;反之亦然。
    当我们认识一件事物时,如果描述它的信息非常之多,我们就不知从哪个主要的方面来了解它,于是一个概括的名词就会帮我们之了解,这便是抽象的作用。

    三:对象分析方法

    概念:要深入了解对象,我们经常需要分析很多个该对象的实例所参与的场景,以获得对象的多个侧面,再通过归纳整理这些对象的多个实例抽象出对象的一般特性。
    要使用UML,面向对象的思想和方法是不可回避的。
    1)一切都是对象

    在面向对象的眼里,一切有名字的东西都是对象,都应当使用对象的观点来看待它,分析它。哪怕这个东西的名字叫某某业务流程,它也仍然应当看作是一个对象,而不是一个过程。

    2)对象都是独立的

    独立性是面向对象的一大特点,承认对象的同时就接纳了这一观点。对象与对象之间是天然独立的,只是在某个特定的场景下,它们的某一个特定的实例才相互联系在一起。我们获取和分析对象的手段经常是通过分析某个场景,但是需要知道,对象是离散的,它不是因为该场景而存在的。场景中的对象只是对象“映射”到该场景中的一个侧面,我们称之为对象的实例。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息。

    3)对象都具有原子性
    无论在什么时候,在分析过程中都应当将对象视为一个不可分割的原子,哪怕这个对象的规模很大。例如在分析一商业过程的时候,对象的规模(粒度)大到如银行,工厂,商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互就是一具整体,不能分割。
    并且在分析过程中,对象总有一个边界,永远也不应该打破边界去窥探对象的内部。就像鸡蛋一样只从外面看你属性,而不应该打开去里边。

    4)对象都是可抽象的
    对象有着很多不同的方面。一般来说,对象参与一个场景时会展现出来某一个方面。总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。通常这种抽象会以接口来命名。在分析过程中,得到的任何一个对象都有特定的方面可作为抽象。因为对象总是从场景分析中得到的,它在场景中肯定展现了一个方面。对象所具有的方面,或者说对象所参与的场景越多,对象越有抽象价值,反之亦然。

    5)对象是有着抽象层次的。层次越高,其描述越粗略但适应能力越广;层次越低则描述越精确但适应能力越下降。


     

  • 相关阅读:
    linux下的crontab定时执行任务命令详解
    494. Target Sum
    347. Top K Frequent Elements
    5. Longest Palindromic Substring
    时间复杂度计算方法
    62. Unique Paths
    54. Spiral Matrix && 59. Spiral Matrix II
    57. Insert Interval
    53. Maximum Subarray
    42.Trapping rain water
  • 原文地址:https://www.cnblogs.com/haofaner/p/2306624.html
Copyright © 2011-2022 走看看