精华内容
下载资源
问答
  • UML建模

    千次阅读 2020-11-17 10:59:44
    UML建模图实战笔记 一、前言 UML:Unified Modeling Language(统一建模语言),使用UML进行建模的作用有哪些: 可以更好的理解问题 可以及早的发现错误或者被遗漏的点 可以更加方便的进行组员之间的沟通 支持面向...

    UML建模图实战笔记

    一、前言

    UML:Unified Modeling Language(统一建模语言),使用UML进行建模的作用有哪些:

    可以更好的理解问题
    可以及早的发现错误或者被遗漏的点
    可以更加方便的进行组员之间的沟通
    支持面向对象软件开发建模,可以更好的描述显示编程的情景。
    对于复杂的系统来说,如果概要模型做的好,那么整个系统的模型也就很清晰明了。

    二、 UML介绍

    UML 规格定义了两大类UML图:结构图( structure diagrams )和行为图(behavior diagrams)

    结构图( structure diagrams )
    结构图从不同的抽象和实现程度上描述了一个系统和系统构建的静态结构,并且描述了他们直接是如何关联到一起的。

    行为图(behavior diagrams)
    行为图展示了一个系统中的对象的动态行为,它描述了一个系统中的对象如何随着时间变化而变化。

    下面借用下UML2.5官方图说明下UML图分类:
    image.png

    领域模型也叫概念模型,是对现实世界概念类的描述,并非软件对象描述,领域模型不是数据模型。在uml中领域模型被描述为一组没有操作的类图,具体说不是Java里面的软件对象或者具有职责行为的对象。他可以展现领域对象或概念类,概念类之间关联,概念类的属性。
    三个要素,类名,属性 ,关联。
    任何属性都不表示外键,应该直接使用关联关联到外键所在类。

    三、用例图

    在软件生命周期的整个过程中,用例图是软件需求分析到软件交付的第一步,用例图的主要目的是说明这个软件的使用者是谁,使用者要使用那些功能,以及使用者需要向软件提供什么功能。通过用例视图一来可以让使用者清楚的理解这个软件到底能提供什么功能,是不是满足自己的需求,另外一方面对应开发者来说,可以更好地理解需求,从而能更好的去实现这些需求。

    用例图主要有六个元素,分别是:参与者(Actor)、用例(Use Case)、关联关系(Association)、包含关系(Include)、扩展关系(Extend)以及泛化关系(Generalization)。

    参与者(Actor)
    参与者在uml中用下面带有名字的小人来标示,主要表示与您的软件系统交互的人,组织或者外部软件系统。
    image.png

    用例(Use Case)
    用例在uml中用使用椭圆标示,主要说明你的软件系统的功能,是使用文字描述的形式说明你的系统的功能。
    image.png

    关联关系(Association)
    在uml中用例图中用箭头来标示,主要描述参与者与用例之间的关系。
    【箭头指向】:指向用例
    image.png

    包含关系(Include)
    在uml中包含关系表示为虚线箭头交<>字样,有时候一个用例很大,那么我们可以把用例分块,把复杂的用例分解为几个小用例来描述
    【箭头指向】:箭头指向被包含的用例
    image.png

    扩展(Extend)
    在uml中扩展关系表示为虚线箭头加<>字样,扩展是指在基础用例功能的基础上插入新的功能点,新的功能点可以看做是对基础用例的扩展。
    【箭头指向】:箭头指向基础用例
    image.png

    泛化(Inheritance)
    在uml中用例泛化用一个空心三角箭头从子用例指向父用例,泛化就是继承关系,子用例可以使用父亲用例中的属性,行为和关系。
    【箭头指向】:箭头指向父用例
    image.png

    Include、Extend、Inheritance总结对比
    包含关系强调整体与部分之间关系,也就是说整体的功能是由一个个子用例功能叠加起来的,比如上图庭审功能就包含了线上视频庭审,线上语音庭审,线下语音庭审功能,庭审用例本身是对子功能的汇总标示,具体功能点在子用例实现。

    扩展关系则强调是在基础功能的基础上添加新的功能,基础功能本身是提供功能的,基础功能和扩展功能直接是不可见的,但是扩展功能是要在基础功能的某一个条件下才会发生,例如上面基础服务视频庭审已经提供了庭审的功能,现在有加了了扩展的语音识别功能来识别用户说的话为文字。之所以说是扩展功能是因为即便没有语音识别功能,视频庭审功能还是照样可以正常运转,之所以说扩展功能是有条件发生是因为只有开通了语音识别的视频庭审才能回有语音识别的扩展功能

    泛化关系则强调复用的关系,也就是说子用例基础了父用例的一部分功能并且自己有新增了或者覆盖了父用例的功能,具体说比如上图视频庭审有个记录笔录的功能,这个本身是个独立的功能点,而书记员和法官都可以复用这个功能并对其定制化。

    一个案例
    image.png

    四、时序图

    时序图建模工具,推荐一个工具 https://www.zenuml.com/

    时序图是一种强调消息时序的交互图,他由对象(Object)、消息(Message)、生命线(Lifeline)和Combined Fragments组成,它主要描述系统中对象和对象之间的交互,它将这些交互建模成消息交换。

    时序图将交互关系展示成了一个平面二维图,其中纵向标示时间轴,时间沿竖线从上向下进行。横向轴标示了交互中各各个对象。对象的的用生命线表示。消息从一个对象的生命线到另一个对象生命线的箭头表示,箭头以时间顺序在图中从上到下排列,从左到右排列。

    对象(Object)和生命线(Lifeline)
    生命线头上那个方正的框里面存放的就是对象,对象有自己的名字,生命线其实就是从上到下的一个虚线。生命线标示一个对象存在的生命周期,两条生命线中间通过消息连接起来,
    image.png

    消息(Message)

    消息用于对象间传递信息,对象之间的信息互通就是通过消息,消息按照分类可分为:同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message) 自关联消息(Self-Message)

    • 同步消息:发送消息的对象在发送消息后会挂住,等消息接受对象接受消息返回后才会解除挂住的状态继续自己的工作。
    • 异步消息:发送消息的对象在发送消息后会继续自己的工作,而不等消息接受对象接受消息返回。
    • 返回消息:标示发送消息后返回的动作
    • 自关联消息:一个对象内自调用的情况。

    image.png

    Combined Fragments
    标示有一定条件的消息发送,

    • Alternative fragment(denoted “alt”) 标示 if…then…else
    • Option fragment (denoted “opt”) 标示Switch
    • Parallel fragment (denoted “par”) 标示同时发生
    • Loop fragment(denoted “loop”) 标示for Break标示退出循环

    1.loop:
    当没有指定循环边界默认范围为[0,无穷大]:
    image.png

    如果只指定了一个值,那么默认执行该值次数:
    image.png

    指定了循环边界,则最少执行最小值值,最多执行最大值次数:
    image.png

    实现dowhile方式,至少执行一次,如果size<0则退出:
    image.png

    2. alt:
    条件判断,如果n>0则执行agree函数否者执行reject函数
    image.png

    3. opt:
    switch,当满足不同条件执行不同方法:
    image.png

    4. break:
    n=10时候执行save并退出循环
    image.png

    5. par:
    同时进行,比如多个线程同时执行任务
    image.png

    一个例子

    image.png

    五、类图

    类图是面向对象系统建模中重要的图,是定义其它图的基础。类图主要是用来展现软件系统中的类、接口以及它们之间的静态结构。

    在uml类图中,类之间关系有如下: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

    5.1.泛化:
    泛化是继承关系的一种,子类继承父类的所有行为和属性,子类可以新增新的功能或者重写父类功能。
    uml中使用带空心三角箭头的实线标示
    【箭头指向】:箭头指向父类
    image.png

    5.2.实现:
    实现是接口和类的关系,是指类实现了接口中定义的接口,uml中用带空心三角箭头的虚线
    【箭头指向】:箭头指向接口类
    5.3.关联:
    在建模过程中必然存在类之间的联系,使类可以感知其他类的行为和属性,关联分为双向和单向关联

    双向关联(标准)
    对于双向关联来说被关联的两个类可以感知对方的存在
    image.png

    如图在线每端放置一个角色和多重值,对于Route来说我们应该看在bike端的角色和多重值,对于Route来说每个骑行路线对应0个或者多个自行车,0个是因为可能先制定了骑行路线但是还没有找到自行车,多个是因为可以有多个人骑行同一个路线。对于bike来说我们应该看route端的角色和多重值,对于一个bike来说每个自行车对于0个或者多个骑行路线,0个是因为虽然有一个自行车但是我可以不骑行,不指定骑行路线那,多个是因为我一个自行车可以指定多个骑行路线。
    上面多重值为0…*,其实还有其他多重值如下表:

    表示 含义
    0…1 0个或1个
    1 只能1个
    0…* 0个或多个
    * 0个或多个
    1…* 1个或多个
    3 只能3个
    0…5 0到5个
    5…15 5到15个

    单向关联
    对于一个单向关联来说也是两个类是相关的,但是只有一个类知道这种联系的存在
    image.png
    如图对于单向关联表示为一条带有指向已知类的开放箭头实线,单向关联只包含一个角色名和多重值,一个人可以有0个或者多个账户,人可以感知到账户的存在,但是账户却感知不到人的存在。
    聚合
    聚合是关联关系的一种,聚合主要描述整体与部分直接的关系,聚合有分为基本聚合和组合聚合,
    基本聚合:对应基本聚合来说部分类的生命周期独立于 整体类 的生命周期,uml中使用一条从整体类到部分类的实线,并在整体类的关联末端画一个未填充棱形标示:
    image.png

    一个汽车有4个轮子组成,轮子的生命周期不依赖与车的,因为车轮可以独立于车独立存在。

    组合聚合:组合聚合是聚合的一种情况,不同在于部分类的生命周期依赖整体类,uml中使用一条从整体类到部分类的实线,并在整体类的关联末端画一个填充棱形标示:
    image.png

    一个公司有至少一个部门组成,部门要依赖于公司的存在而存在,不会存在一个部门而它不属于某一个公司。

    自身关联
    自身关联涉及到一个类,是类自己关联自己的情况
    image.png

    一个雇员可以有0个或者多个管理者,而管理者本身也是雇员的一种。

    5.4.依赖:
    依赖即一个类的实现需要其他类的协助,通常代码表现为方法参数,局部变量,静态方法调用,util类调用,uml中使用一条箭头的虚线,从依赖方指向被依赖的类
    image.png

    一个例子
    从UML官方网站搞了个 域模型图
    image.png

    下面围绕类Library类分析下这个图,首先library通过组合方式关联到了Catalog类目类,这说明类目不能独立存在要依赖图书馆存在,所以这里没有使用聚合而使用了组合。另外library通过聚合关联到了Book Item 类和Account账号类,这说明图书馆是有0个或者多个图书和账户组成,这里使用聚合而不是用组合是因为书和账号可以独立于图书馆存在,比如我有学号账号,但是图书馆里面不是必然有你的账号。

    下面围绕Catalog分析,类目通过双向关联关联到bookitem,说明一个类目里面可能会有0个或者多个书籍,一个书籍对应着一个类目。另外类目有通过realization实现了search类和manage类的接口,让类目有搜索和管理功能。Search类搜索时候会依赖Patron类图书捐赠人的姓名地址或者Libraian类图书管理员的姓名地址,职位。 图书管理类时候会依赖图书管理员类的信息。

    而Patron图书捐赠人有可能是一个学生,学生有自己的账号,所以patron类会聚合到Account.
    bookItem类通过泛化继承Book中书的共性部分信息。有通过关联关联到了account,说明一个账户只能接到0本和最多12本书,最多可以预定3本书。

    最后Book类双向关联到Author类,数目一个作者至少写了1本书(严格说应该是0),一本书至少有一个作者编写,
    Account账户类有依赖一个AccountState的枚举值的类用来存放账号状态。

    6、活动图(Activity Diagrams)

    活动图是UML中一种行为图,它展示了控制流和对象流,并且强调它们的顺序和条件控制流。
    下面换种方法,通过引入uml官方例子同时介绍活动图里面元素。

    6.1 组元介绍

    开始(inital)和结束状态(final)
    image.png
    活动(action):标示动作
    image.png

    控制流(control flow):链接活动
    image.png

    决策(decison):条件判断
    image.png

    合并(merge):任意一个节点到达该点都继续往下走,不管其他分支
    image.png

    游泳道(swimlanes):模型中存在多个对象时候使用比较适合
    分为水平和垂直
    image.png

    分岔汇合(join):所有分支都到该点时候才继续往下走,类似CountDownLatch.await后在继续往下走
    image.png

    分流(fork):类似fork多个线程执行放入线程池执行。
    image.png

    接受信号(acceptsignal)
    image.png

    6.2 online shopping例子

    下面拿uml官方online shopping网上购物例子介绍
    image.png

    如图左上角黑色圆为活动开始,首先通过decision的条件判断是进行搜索还是浏览,如果是搜索则通过merge节点后搜索商品,然后通过decision节点判断搜到商品则进入在做决定是浏览商品信息还是加入购物车。加入购物车后可以选择进入B继续
    搜索其他商品,或者查看购物车内容,然后购物完后,进入C进行付款,然后流程结束。

    另外可以随时接受信号去查看进入A查看购物车信息,也可以随时收到信号去checkout商品。

    6.3 Activation of Trial Product例子
    下面拿uml官方Activation of Trial Product激活试用产品例子介绍

    image.png

    首先这个活动图里面由于模型涉及到了Order Management, Customer Service, Customer三个对象,所以使用了垂直的swimlanes。

    首先customer请求激活自己正在使用的试用期产品(估计试用期过了,不能使用了),然后顾客服务对象通过fork开启两个流程,一个流程是让Order Management创建产品订单,一个是让用户产生C2V文件。然后Customer Service在 join 处等待两者完成,这里都完成在拿着产品秘钥和C2v文件去激活产品,通过email等把文件传递给用户,用户拿到文件既可以激活,至此活动结束。

    7、组件图

    组件图是为了展示组元(components),组元提供的接口(provided inerfaces)和需要调用的接口(required interfaces),端口(ports)之间关系的一种图,组件图是主要被用于基于组件开发时候用来描述SOA系统。

    7.1 元素介绍

    组元(Component)
    组元是代表一个系统中一个模块的类,并且组元的表现(比如实现)在其所在的环境上下文中是可被替换的,组元有自己的行为,比如对外提供接口和使用其他组件接口,这些接口潜在的是通过端口(ports)暴露或者使用。
    image.png

    如图语音识别服务组元对外提供getPort接口供其他组元调用,网上法庭说明自己需要使用getPort接口来实现自己的功能。

    端口(port)
    端口表述了一个一个类与它所在的环境或者其他类的一个交互点,
    image.png

    如图Accounting组元内部的Customers提供Account服务,而Orders组元则使用Account服务。
    连接线(Connector)
    连接线是用来连接两个或者多个实例使他们直接能够进行交流协作。主要用来连接两个端口直接的交流
    image.png

    7.2 一个例子
    下面分析下uml官方一个例子
    image.png

    如图在网上商城系统有三个子系统组成:webstore,accounting,warehouses;
    WebStore子系统包含三个组员,搜索引擎,购物车,认证系统。搜索引擎组元通过对外提供了一个ProductSearch接口运行其他组件搜索和查看商品,另外这接口是搜索引擎组件使用库存组件提供的Search Inventory接口来实现。购物车组元则把调用订单组元的的Manage Orders接口的功能封装下自己对外提供了onllineShopping接口,认证组元则允许用户创建账号,登陆或者退出,并且绑定订单到具体用户。

    accounting子系统对外提供了Manage Orders 和 Manage Customers接口,并且通过代理连接到子系统内部的Orders和customers组元,。Orders组元调用了Customers组元的Manager customers接口,Customers调用了Accounts组元的Manager Accounts模块。

    Warehouses子系统提了Search Inventory and Manage Inventory组件,并且通过依赖方式是要了Accounting子系统的接口服务。

    8、状态图

    状态机图是一种行为图,它通过使用有限的状态转移展示了一个系统中一个模块的一些离散的行为,在UML2.4里面有两种状态机图:行为状态机(behavioral state machine),协议状态机(protocol state machine)。

    8.1 元素介绍
    行为状态(Behavioral State)

    简单状态(Simple State)
    简单状态没有子状态机和域,UML中使用带拐点的矩形标示简单状态,并且状态名字写在矩形内部。
    image.png

    组合状态(Composite State)
    组合状态被定义为用用子状态或者嵌套状态的状态行为,子状态可以是顺序发生的也可以是并发发生,组合状态里至少有一个域,如下图含有一个域
    image.png

    *__ 起始状态(Initial Pseudostate),终止状态(Final State),(行为转移)Behavioral Transition

    image.png

    如图黑色实心为起始状态,末端双环圆为终止状态,中间连接线为行为转移,其中isAuthed为一个guard说明满足该条件才会进行状态转移,然后执行函数auidt。

    8.2 行为状态机(behavioral state machine)
    使用有限状态转移表示一个系统中的离散行为的变换,行为被建模为通过一系列转移线连接起来的状态。
    一个简单的行为状态机:

    image.png

    8.2 协议状态机(Protocol State Machine)
    协议状态机是行为状态机的一个子类,是行为状态的扩展,用来描述一个类的生命周期和协议,他描述一个类的哪一个动作可以被哪一个状态下的规定条件下被调用。

    image.png

    8.3 官方例子
    如下图是一个Java线程状态机图(协议状态机图)

    image.png

    如图 New状态是一个线程被创建但是没有执行start()方法时候状态。
    在JVM看来当一个线程在Runnable时候它是在运行,但是在os看来却未必,因为线程可能没有获取到处理器。所以可以考虑把Runnable看为一个内部有两个子状态的组合状态,当一个线程状态进入Runnable时候,首先进入Ready状态(其他资源已经就绪,就差cpu),由线程调度策略决定何时把这个线程从Ready转变为running状态,函数Thread.yield() 则知识线程调度暂定当前线程执行,把线程从running状态转变为Ready状态…
    详情链接

    展开全文
  • 数据库建模&UML建模

    千次阅读 2013-09-11 11:13:30
    (1)数据库建模  1,ERWin:CA 公司出品的拳头产品, 强大的老牌数据库建模工具。它有一个兄弟是BPWin,这个是CASE工具的一个里程碑似的产品。目前的我使用的版本是4.0。ERWin界面相当简洁漂亮,也是采用ER模型,如果...
    (1)数据库建模
      1,ERWin:CA 公司出品的拳头产品, 强大的老牌数据库建模工具。它有一个兄弟是BPWin,这个是CASE工具的一个里程碑似的产品。目前的我使用的版本是4.0。ERWin界面相当简洁漂亮,也是采用ER模型,如果你是开发中小型数据库,极力推荐ERWin,它的Diagram给人的感觉十分清晰。在一个实体中,不同的属性类型采用可定制的图标显示,实体与实体的关系也一目了然。当然ERWin不仅是花花公子,它提供的功能如PowerDesian一样强大(不支持UML)。从我个人使用的感觉,ERWin不适合非常大的数据库的设计,因为它对Diagram欠缺更多层次的组织,而且不知什么原因,我感觉它对内存要求较高,使用到后期容易出现图标不能显示的情况,一如windows内存紧缺的表现。
      erwin支持idef1x即信息建模,就是我们常说的er图、实体关系图,也就是数据库结构图。bpwin支持idef0/idef3/dfd,是功能与流程建模,主要用来描述企业的业务流程,比uml的usecase/sequence更适合描述复杂逻辑。如果要全过程支持,请选择bpwin + PowerDesigner7.5/8 or erwin4 + rational rose 2001 (建议用于50~200个table的信息系统)
      ERWin 的不足:对中文支持不好。和Er/Studio比较:
      <1>在权限/版本管理方面 ER Studio 和 Rational Rose 有些
    相似,允许分模块 进行 check in /check out ,并发开发程度
    高, ERWin这一点就不行了!!
      <2>另外一个就是 ERWin 的逆向工程虽然和 ER Studio 一样提供一堆过滤条件,但却不能指定的对象(如:指定的数据表/视图/触发器)进行逆向工程,但ER Studio 却提供了这些功能。
      <3>此外ER Studio还提供了宏功能,把VB的一些功能以插件方式提供了 用户,但 ERWin 中却没有提供!!虽然这个功能一般的用户根本很少使用!
      看到ER Studio 的宏功能,很容易让人想到Winmap 的一堆插件,两者的公司都向用户提供了插件(宏)让用户下载使用!这种做法很值得很多软件公司参考!!
      当然 CA 公司也不是个废物,提供了几个重要的功能:提供了自家开发的 BPWin 的 接口,以及Oracle 这个数据库巨人的 Designer 的接口。另外同样提供了插件功能,只不过这个插件的接口需要使用他的标准,这一点有点象Rational Rose 的 Add in manager 一样(例如: delphi link )!!
      ER Studio 提供了针对 XML 的接口,但ERWin却没有!!
      2,MS Visio:
      3,Case Studio:性价比最高
      4,ER/Studio:很不错的数据库建模工具新势力, 非常不错. 结合Repository, 可进行VSS式的版本控制。erwin能做到的它都能做到..?
      5,modelmake
      6,DeZign for Databases:如果你是软件工程师或是软件产品经理等常常需要规划系统的话,势必会需要规划数据库的Table Schema。这套软件能够辅助你的规划,将各个Table之间Key的关连性表达出来,也提供有资料库栏位异动时的版本控制纪录与统计报表等功能。
      7,PowerDesign:Sybase推出的主打数据库设计工具。PowerDesign致力于采用基于 Entiry-Relation的数据模型,分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库进行设计。概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义。物理数据模型是在概念数据模型的基础上针对目标数据库管理系统的具体化。Sybase数据库在国内知名度可能不及Oracle,但是Sybase 的数据库前端开发工具PowerBuilder却是无可匹敌,再加上PowerDesign的确有过人之处,因而它在国内得到相当广泛的使用。我手里使用的是2001的PowerDesign8.0,这个版本我感觉上比早期的PowerDesign6.0-7.5都有了很大的改变。PowerDesign 功能强大,使用非常方便。首先它提供了概念模型和物理模型的分组,呈现在使使用区左边的是树状的概念模型和物理模型导航,你可以建立多个概念模型和物理模型,并且以Package的形式任意组织;它几乎能够产生到所有常用数据库管理系统的SQL脚本,当然你完全可以不经过SQL脚本直接在DBMS中生成数据库;它提供增量的数据库开发功发功能,支持局部更新,你可以在概念模型,物理模型,实际数据库三者间完成设计的同步。还有逆向工程,再工程支持,目前还支持UML建模.总体感觉PowerDesing发展到8.0已经非常成熟,许多使用上细微的感觉只有你用过它才好评价,我不多说了。
      8,Rational Rose

      (2)UML建模
       UML 不算是个新名词, 但是实际中还是用得很少(可能是因为都是做小项目的原因吧, 大项目就用得多了).
      UML 是个好东西, 但是过分的依赖于 UML 也不是一件好事, 因为有时候它会把简单的东西复杂化. 即使是代码的优良结构和可重用性也不能作为强制使用 UML 借口, 良好的算法完全可以替代部分不必要的设计模块, 或者说, 其实有更好的 UML 设计你没有发现.
      1,Rational Rose:大恐龙, 小项目中难以使用, 虽然是 UML 设计者做的。虽然这是一个推荐使用的高端工具,它使改进和维护设计、从模型生成报表、在平行协作环境中与他人共同进行建模工作变得很方便。 
      尽管Rose这个名称跟英文中玫瑰单词一摸一样,但是这里他代表Rational公司的面向对象分析和设计工具的一款力作。Rose目前在国内正被越来越多的公司所使用,其原因一方面是随着软件规模的扩大,面向对象分析和设计的优势突现出来,软件企业正在从面向过程向面向对象过渡。另一方面,Rose集中体现了统一软件建模(UML)的先进设计思想,能够通过一套统一的图形符号简洁有效地表达各种设计思想。当然, Rose本身在设计上的完善和与Rational CASE家族的完美集成也是作为一款最成功的CASE产品的基础。
      Rose 2002功能上可以完成UML的9种标准建模,即静态建模(用例图 类图 对象图 组件图 配置图 )和动态建模(合作图序列图 状态转移图 活动图),为了使静态建模可以直接作用于代码,Rose提供了类设计到多种程序语言代码自动产生的插件。
      同时,作为一款优秀的分析和设计工具,Rose具有强大的正向和逆向工程能力。正向工程这里指的是由设计产生代码,逆向工程指由代码归纳出设计。通过逆向工程Rose可以对历史系统作出分析,然后进行改进,再通过正向工程产生新系统的代码,这样的设计方式我们称之为再工程。
      下载地址:Rose2000和破解:http://id49479.my.u2i.net/
      Rose2003: http://www.nj13z.cn/2004/down_view.asp?action=download&id=14
      Rose2003破解:http://www.vchelp.net/ASP/cdf_pic/200405/reply_1_529068.rar
      2,XDE, 分别有4 vs.net和4 wsda的, 很不错, 值得使用.
      3,Borland Together:有很多版本, 其中4VS.Net不推荐使用, 用Jbuilder推荐使用, 只是实在不喜欢它的界面。(Java 开发的大,慢恐龙, 但是各项功能很爽,这也不能怪它,java做的东西慢是正常的)。但它的功能还是很强大的。尤其是逆向工程用起来很方便,只不过当时我们的EJB项目中EJB都非常大,动辄几千行,用它生成的sequence图实在太详细了,只有不停地删掉细节,留下框架。建议非不得已不要使用这个庞然大物,对你的机器和你的耐心都是个考验。它有for eclipse, vs.net等等插件,感觉也不错。
      4,MS Visio 2003 for Visual Studio:Visio Professional 2000开始提供内建的UML支持。Enterprise版更加完整。这是一个功能广泛强大的工具。和vs.net结合不错, 只是仅限于 VS.NET 的代码生成, 没意思,各方面都不舒服。
      5,PowerDesigner:是简练实用的建模工具、6.0支持数据流图,8.0支持UML的UseCase/sequence/class视图;
      6,Visual Paradigm:(http://www.visual-paradigm.com/vpuml.php)目前最合适也是最火的软件了(从这一年来网站的设计变化就可以看出来好卖), 强大, 非 Java. Community Edition 可以免费使用, 当然有功能限制.是一种UML建模和分析工具,出色的建模功能和代码同步。
      7,WithClass 2000:(http://www.microgold.com/)界面不是很好看, 而且也没有免费版本, 不过功能还不错, 特别是代码生成的能力.
      8,Poseidon (海神...):也是 Java 的, 很漂亮, 就是太慢。
      9,Jude:一个号称中日xp合作开发出来的小uml工具,只有几m的大小,功能也还不错。也是java做的,速度还是很快的。如果不需要使用逆向工程之类的高级功能的话,强烈推荐这个uml工具,并且它是免费的。
      10,MagicDraw:一个基于Java的廉价UML建模工具。 
      11,Objecteering UML:一个免费的个人UML产品。 
      12,System Architect:一个很受欢迎的高端UML建模工具,支持双向工程(Round-trip Engineering)。

    展开全文
  • 数据仓库常见建模方法与大数据领域建模实例综述

    千次阅读 多人点赞 2021-05-01 14:01:51
    为什么需要数据建模? 为什么要进行数据仓库建模? 随着DT时代互联网、智能设备等信息技术的发展,数据开始井喷式的增长,如何讲这些数据进行有序、有结构地分类组织存储是我们面临的一个挑战。 如果把数据看作图书...

    大家好,我是云祁,好久不见~

    今天来和大家聊聊数仓常见的一些建模方法和具体的实例演示,一起来看看吧。

    一、为什么需要数据建模?

    在开始今天的话题之前,我们不妨思考下,到底为什么需要进行数据建模?

    随着从IT时代到DT时代的跨越,数据开始出现爆发式的增长,这当中产生的价值也是不言而喻。如何将这些数据进行有序、有结构地分类组织存储,是我们所有数据从业者都要面临的一个挑战。

    如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置,而不是乱糟糟的堆砌在一起。

    大数据的数仓建模正是通过建模的方法,更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点,一般我们会从以下面四点考虑:

    • 性能:能够快速查询所需的数据,减少数据I/O的吞吐。
    • 成本:减少不必要的数据冗余,实现计算结果的复用,降低大数据系统中的存储成本和计算成本。
    • 效率:改善用使用数据的体验,提高使用效率。
    • 质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台。

    因此,毋庸置疑,大数据系统、数据平台都需要数据模型方法来帮助更好的组织和存储数据,数据建模的工作,也正是围绕上述四个指标取得最佳的平衡而努力。

    二、从 OLTP 和 OLAP 系统的区别看模型方法论的选择

    OLTP系统通常面向的主要数据操作是随机读写,主要采用3NF的实体关系模型存储数据,从而在事务处理中解决数据的冗余和一致性问题。

    OLAP系统面向的主要数据操作是批量读写,事务处理中的一致性不是OLAP所关注的,其主要关注数据的整合,以及在一次性的复杂大数据查询和处理的性能,因此它需要采用不同的建模方法,例如维度建模。

    如果大家想进一步了解 OLAP系统,可以学习这篇文章: 关于OLAP数仓,这大概是史上最全面的总结!

    三、典型的数据仓库建模方法论

    数据仓库本质是从数据库衍生出来的,所以数据仓库的建模也是不断衍生发展的。

    从最早的借鉴关系型数据库理论的范式建模,到逐渐提出维度建模等等,越往后建模的要求越高,越需满足3NF、4NF等。但是对于数据仓库来说,目前主流还是维度建模,会夹杂着范式建模。

    数据仓库建模方法论可分为:E-R模型、维度模型、Data Vault模型、Anchor模型。

    3.1 E-R模型

    将事物抽象为“实体”、“属性”、“关系”来表示数据关联和事物描述,这种对数据的抽象建模通常被称为E-R实体关系模型。

    数据仓库之父 Bill Inmon 提出的建模方法,从全企业的高度设计一个3NF模型,用实体关系(Entity Relationship)模型来描述企业业务,满足3NF。

    数据仓库的3NF与OLTP系统中的3NF的区别在于,它是站在企业角度面向主题的抽象,而不是针对某个具体的业务流程。

    采用 E-R模型建设数据仓库模型的出发点是整合数据,对各个系统的数据以整个企业角度按主题进行相似的组合和合并,并进行一致性处理,为数据分析决策服务,但是并不能直接用于分析决策。

    作为一种标准的数据建模方案,它的实施周期非常长,一致性和扩展性比较好,能经得起时间的考验。但是随着企业数据的高速增长、复杂化,数仓如果全部使用E-R模型进行建模就显得越来越不适合现代化复杂、多变的业务组织,因此一般只有在数仓底层ODS、DWD会采用E-R关系模型进行设计。

    E-R建模步骤分为三个阶段:

    • 高层模型:一个高度抽象的模型,描述主要的主题以及主题间的关系,用于描述企业的业务总体概况。
    • 中层模型:在高层模型的基础上,细化主题的数据项。
    • 物理模型(底层模型):在中层模型的基础上,考虑物理存储,同时基于性能和平台特点进行物理属性的设计,也可能做一些表的合并、分区的设计等。


    E-R模型在实践中最典型的代表是 Teradata 公司基于金融业务发布的 FS-LDM (Financial Services Logical Data Model ),它通过对金融业务的高度抽象和总结,将金融业务划分为10大主题,企业基于此模型适当调整和扩展就能快速实施落地。

    3.2 维度模型

    维度模型是数据仓库领域 Ralph Kimball 大师倡导的,是数据仓库工程领域最流行的数仓建模经典。

    维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。

    其中典型的代表就是使用星型模型,以及在一些特殊场景下使用的雪花模型。

    其设计主要分为以下几个步骤:

    1. 选择需要进行分析决策的业务过程。业务过程可以是单个业务事件,比如交易的支付、退款等;也可以是某个事件的状态,比如当前账户的余额;还有就是一系列相关业务事件组成的业务流程,具体需要我们分析的是某些事件发生的情况,还是当前状态,或是事件流转效率。
    2. 选择粒度。在事件分析中,我们要预判所有分析需要细分的程度,从而决定选择的粒度。粒度是维度的一个组合。
    3. 识别维表。选择好粒度之后,就需要基于这个粒度来设计维表,包括维度属性,用于分析时进行分组和筛选。
    4. 选择事实。确定分析需要衡量的指标。

    在 Ralph Kimball 提出对数据仓库维度建模,我们将数据仓库中的表划分为事实表、维度表两种类型。

    针对维度建模中事实表和维度表的设计,之前有详细介绍过,感兴趣的同学可以看:维度建模技术实践——深入事实表维度建模的灵魂所在——维度表设计

    在这里,我就以常见的电商场景为例:在一次购买的事件中,涉及主体包括客户、商品、商家,产生的可度量值会包括商品数量、金额、件数等。

    事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表等。

    1. 事务事实表:用于承载事务数据,任何类型的事件都可以被理解为一种事务,比如商家在交易过程中的常见订单、买家付款,物流过程中的揽货、发货、签收,退款中的申请退款。
    2. 周期快照事实表:快照事实表以预定的间隔采样状态度量,比如自然年至今或者历史至今的下单金额、支付金额、支付买家数、支付商品件数等等状态度量。
    3. 累计快照事实表:数据不断更新,选取多业务过程日期。用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。

    我们继续就上述的电商场景,聊聊在维表设计时需要关注的一些东西:

    1. 缓慢变化维度:例如会员表的手机号、地址、生日等属性。
    2. 退化维度 :订货单表的订单编号、物流表的物流编号等。
    3. 雪花维度:满足第三范式的维度关系结构。
    4. 非规范化扁平维度:商品维表众中产品、品牌、类目、品类等。
    5. 多层次维度:地区维度的省、市、区县,商品的类目层级。
    6. 角色维度:日期维度在物流中扮演发货日期、送货日期、收获日期等不同角色。

    接下来就是针对维度建模按照数据的组织类型,可以划分为星型模型、雪花模型、星座模型。

    1. 星型模型:星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。


    2. 雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面会差一些。


    3. 星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。实际上数仓模型建设后期,大部分维度建模都是星座模型。

    简单总结下就是:

    1. 星型模型和雪花模型主要区别就是对维度表的拆分。
    2. 对于雪花模型,维度表的涉及更加规范,一般符合3NF,有效降低数据冗余,维度表之间不会相互关联。
    3. 星型模型,一般采用降维的操作,反规范化,不符合3NF,通过利用冗余来避免模型过于复杂,提高易用性和分析效率,效率相对较高。

    3.3 DataVault 模型

    Data Vault 是 Dan Linstedt 发起创建的一种模型,它是 E-R 模型的衍生,其设计的出发点也是为了实现数据的整合,但不能直接用于数据分析决策。

    它强调建立一个可审计的基础数据层,也就是强调数据的历史性、可追溯性和原子性,而不要求对数据进行过度的一致性处理和整合。

    同时它基于主题概念将企业数据进行结构化组织,并引入了更进一步的范式处理来优化模型,以应对源系统变更的扩展性。 Data Vault 型由以下几部分组成:

    1. Hub - 中心表:是企业的核心业务实体,由实体 Key、数仓序列代理键、装载时间、数据来源组成,不包含非键值以外的业务数据属性本身。
    2. Link - 链接表:代表 Hub 之间的关系。这里与 ER 模型最大的区别是将关系作为一个独立的单元抽象,可以提升模型的扩展性。它可以直接描述 1:1、1:2和n:n的关系,而不需要做任何变更。它由 Hub的代理键、装载时间、数据来源组成。
    3. Satellite - 卫星表:数仓中数据的主要载体,包括对链接表、中心表的数据描述、数值度量等信息。

    Data Vault 模型比 E-R 模型更容易设计和产出,它的 ETL 加工可实现配置化。我们可以将 Hub 想象成人的骨架,那么 Link 就是连接骨架的韧带,而 SateIIite 就是骨架上面的血肉。

    3.4 Anchor 模型

    Anchor 对 Data Vault 模型做了进一步的规范化处理,它的核心思想是所有的扩展只是添加而不是修改,因此将模型规范到6NF,基本变成了 k-v 结构化模型。

    1. Anchors :类似于 Data Vault 的 Hub ,代表业务实体,且只有主键。
    2. Attributes :功能类似于 Data Vault 的 Satellite,但是它更加规范化,将其全部 k-v 结构化, 一个表只有一个 Anchors 的属性描述。
    3. Ties :就是 Anchors 之间的关系,单独用表来描述,类似于 Data Vault 的 Link ,可以提升整体模型关系的扩展能力。
    4. Knots :代表那些可能会在 Anchors 中公用的属性的提炼,比如性别、状态等这种枚举类型且被公用的属性。

    由于过度规范化,使用中牵涉到太多的Join操作,这里我们就仅作了解。

    四、总结

    以上为四种基本的建模方法,目前主流建模方法为: E-R模型、维度模型。

    E-R模型通常用于OLTP数据库建模,应用到构建数仓时就更偏向于数据整合,站在企业整体考虑,将各个系统的数据按相似性一致性、合并处理,为数据分析、决策服务,但并不便于直接用来支持分析。

    维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性强,主要应用于数据仓库构建和OLAP引擎低层数据模型。

    数据仓库模型的设计是灵活的,不会局限于某一种模型,需要以实际的需求场景为导向,需要兼顾灵活性、可扩展性以及技术可靠性及实现成本。

    我是「云祁」,一枚热爱技术、会写诗的大数据开发猿,欢迎大家关注呀!

    Respect ~

    展开全文
  • powerdesigner数据库建模

    2018-10-12 18:23:10
    在做系统数据库设计时,借助一款好的数据库建模工具可能让我们事半功倍,下面就我的一些经验做下分享,安装过程忽略; 下载地址:https://share.weiyun.com/54vgrKp 第一步:选择New Model 第二步:创建物理模型,...

    在做系统数据库设计时,借助一款好的数据库建模工具可能让我们事半功倍,下面就我的一些经验做下分享,安装过程忽略;
    下载地址:https://share.weiyun.com/54vgrKp

    第一步:选择New Model
    在这里插入图片描述
    第二步:创建物理模型,选择好数据库版本
    在这里插入图片描述
    第三步:按模块创建好不同的物理模型
    在这里插入图片描述

    第四步:创建表
    在这里插入图片描述

    第五步:新增字段
    在这里插入图片描述

    第六步:按照同样的方式创建好角色表和用户角色关联表
    在这里插入图片描述

    第七步、做表关联
    在这里插入图片描述

    第八步:生成数据库文件
    将表之间的关联,Generate选项去掉;
    在这里插入图片描述
    选择DataBase-》Generate DataBase,导出sql文件;
    在这里插入图片描述

    展开全文
  • 数仓建模

    千次阅读 2020-10-16 19:42:23
    数据库中二点数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为个用户共享。 常用的数据库有:Mysql、ORACLE、SQL Server等。作用不...
  • 本篇笔记对数学建模中常见的目标规划问题提供了解法:在建立传统的目标规划的常用模型的基础上,使用智能优化算法对目标规划问题进行求解,通过Pareto Front直观展现非劣解的分布情况,以解决传统的目标规划...
  • python建模地图

    千次阅读 2019-01-31 20:37:03
    python画地图代码,美赛建模 世界地图 话不说,上代码,超级简单。这个题把国家分为三类,每种类型的国家涂上不同的颜色,cn是中国,但是涂色时发现台湾没涂上颜色,于是把tw加上 图片如下 代码如下: import ...
  • 敏捷建模

    千次阅读 2007-07-08 17:59:00
    AM(敏捷建模)是一种态度,而不是一个说明性的过程。AM是敏捷建模者们坚持的价值观、敏捷建模者们相信的原则、敏捷建模者们应用的实践组成的集合。 AM描述了一种建模的风格。当它应用于敏捷的环境中时,能够提高...
  • 我的数学建模之路

    万次阅读 多人点赞 2018-07-09 11:59:04
    我的数学建模之路 作者:yooongchun 博客:https://blog.csdn.net/zyc121561 微信公众号:yooongchun小屋 摘要:这篇文章主要是记录自己参加数学建模比赛的一些心得及分享一点自己长期整理的资料。 ...
  • STRIDE威胁建模

    千次阅读 2020-03-18 15:12:02
    一、什么是威胁建模 简单的来说,威胁建模就是通过结构化的方法,系统的识别、评估产品的安全风险和威胁,并针对这些风险、威胁制定消减措施的一个过程。 威胁建模是一个非常有用的工具,它的核心是“像攻击者一样...
  • 谈谈领域建模

    2020-10-09 11:00:57
    这篇文章总结了我对领域建模的看法和方法论,也相当于汇总了各位大师对领域建模的不同思想。   领域建模的目标,是解决复杂业务中软件开发的一系列问题。领域建模也是实现这个目标的一条路径,一种方法论。在实践.
  • 3dsmax建模总结

    2019-10-25 15:16:15
    从入门到放弃,建模任务总算告一段落,写几个坑过的小技巧,用的是3dsmax2018。 道路生成插件SpeedRoad 3dsmax道路生成插件推荐SpeedRoad,一个国产插件,支持3dsmax的很版本,它生成的公路模型很不错,用之前看...
  • 下载地址:网盘下载AnyLogicTM是一种创新的建模工具,它是基于过去十年内建模科学和信息技术中出现的最新进展而创建的。使用AnyLogic进行建模能为你带来远远超出传统工具的收益,这都源于AnyLogic能够:²更快速地...
  • 用例建模

    千次阅读 2007-03-29 21:27:00
    用例建模(Use Case Modeling)是使用用例的方法来描述系统的功能需求的过程,用例模型主要包括以下两部分内容: 用例图(Use Case Diagram) 确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是...
  • Elasticsearch 数据建模

    千次阅读 2018-06-27 23:09:59
    数据建模:英文为Data Modeling,为创建数据模型的过程 数据模型(Data Model) 对现实世界进行抽象描述的一种工具和方法 通过抽象的实体及实体之间联系的形式去描述业务规则,从而实现对现实世界的映射 数据...
  • 最近看到很学弟学妹对数学建模有兴趣,但不知道如何开始准备,所以准备写一篇建模的“经验之谈”。 一、什么是数学建模   全国大学生数学建模竞赛是全国高校规模最大的课外科技活动之一。该竞赛每年9月(一般...
  • 对象建模还是E-R建模

    千次阅读 2006-12-25 09:17:00
    每个团队在进行设计时都必须得进行选择:是用纯OOD/OOA的思想进行对象建模或者用面向关系数据的思想进行E-R建模,这是个艰难的抉择!选择其中的每一种都会导致不同的开发流程,其中各有利弊。 下面是使用对象建模的...
  • 用例建模指南

    千次阅读 2006-03-15 10:11:00
    用例建模指南作者:傅纯一 来源:IBM http://www.csai.cn 2004年12月16日1. 什么是用例? 在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software
  • 数据挖掘建模过程

    千次阅读 2019-04-16 19:57:46
    数据挖掘建模过程 1.定义挖掘目标 2.数据取样 明确挖掘目标之后,取样本数据集 标准: 相关性 可靠性 有效性 样本并非是全部数据: 减少数据处理量 节省系统资源 使规律性更加凸显出来 注意:一定要好严格...
  • 平坦衰落信道建模

    千次阅读 2013-10-29 20:55:36
    原文地址:平坦衰落信道建模作者:buqifei071436 小尺度衰落根据信道的频率选择性,小尺度衰落可以分为平坦衰落信道和频率选择性衰落信道;根据信道的时间选择性,可以将信道分为块衰落信道和慢衰落信道;根据信道的...
  • BPM流程建模开发详解

    千次阅读 2019-04-23 13:36:41
    BPM建模开发指南 打开 jdeveloper,点击“New” ->”Application…” 选择”BPM Application” 点击ok 输入应用名称,以“App”为后缀即可 输入目录 包名 输入项目名称,点击“Finish” 此时会出现新建流程弹...
  • ER数据建模工具

    千次阅读 2018-11-22 18:18:55
    目录 PowerDesigner ER/Studio MySQL Workbench ...这个过程叫做数据建模。为了避免认为错误并且加快进度,我们需要使用专业的软件来帮助我们建立数据逻辑模型和物理模型、生成DDL,并且能够生...
  • 2019数学建模比赛总结

    千次阅读 多人点赞 2019-09-24 11:05:34
    真的非常的幸运能和他们一起组队建模,不仅学到了很东西, 更的是他们的那种永不放弃的精神真的给我很大的触动, 经历了第一次通宵,不是在玩手机,而是在学习工作。 在这里记录一下这3天半的收获。 3天半的...
  • 3D建模布线

    千次阅读 2019-05-04 20:12:52
    转载自:视频创作者鬼帝门徒的博客 原文地址:http://blog.sina.com.cn/s/blog_13d79fa8d0102wfcb.html 一、总述: 四边形布线具有可预测的方向流:四边面布线最好,在四边面布线...但这样的布线产生的是圆角...
  • 对于非软件工程专业的同学,写代码最痛苦事之一就是设计和建模问题。除了啃一啃《设计模式》,还有UML可以帮我们。UML是什么?能做什么?又如何使用UML建模呢?本文首先介绍UML,然后介绍一个建模器——StarUML的...
  • 【UML 建模】在线UML建模工具 ProcessOn 使用详解

    万次阅读 多人点赞 2015-08-17 22:33:22
    工具地址 :  https://www.processon.com/ ; 一. UML 使用流程 1. 创建 UML 图 创建 UML 图 : 点击主页的右上角的 "+" 按钮, 即可弹出创建页面; -- 创建按钮 :  -- 创建页面 :  -- 选择模板 :  -- 输入...
  • PowerDesigner V16.5 安装教程以及汉化(数据库建模

    万次阅读 多人点赞 2017-05-30 11:07:25
    power designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具。分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库进行设计。 概念数据模型...
  • 标准建模语言UML的静态建模机制

    千次阅读 2008-11-17 12:43:00
    任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外。UML的静态建模机制包括用例图(Use case diagram)、类图(Class diagram)、对象图(Object diagram )、包(Package)、构件图(Component diagram)和配置图...
  • 2018用户兴趣建模大赛总结

    千次阅读 2018-09-01 17:23:36
    # 2018用户兴趣建模大赛 我非常荣幸能够全程参与整个比赛,当然这次大赛对于我来说也不仅仅是一个比赛,更是一个角色的转变。记得两三年前我还是“赛圈”的一员,每天跟小伙伴们讨论到底是XGBoost更牛逼还是NN更好。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,941
精华内容 15,176
热门标签
关键字:

多地址选择建模