UML之类图

       类图,英文明曰:Class  diagram,那么类是经过怎样神奇的蜕变,变成了类图呢?大家都知道,类是具有相似结构、行为和关系的一组对象的描述符,类是面向对象系统中最重要的构造块,类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构件这些类从而实现系统,类加上他们之间的关系就构成了类图,类图中还可以包括接口、包等元素,也可以包含对象等实例。

     现在我们一起来学习一下类图,首先我们一起来看看,类图之间存在哪些关系:

     

    下面我们一起来对类图之间的关系进行逐层分解,首先,我们来看一下关联中的聚合,聚合,从她的字面上的意思就是大家伙聚到一起没有特别强的约束力,强调的是整体与部分之间的关系,下面我们来看一张聚合的图:

      

    大雁和大雁群她们之间的关系就属于聚合关系,大雁进行迁徙的时候,一只大雁属于一个大雁群,一个雁群可以有很多大雁,大雁离开了雁群还是大雁,雁群离开了其中某一只大雁,照样还有其他的大雁,大雁可以脱离雁群独立存在。接下来,关联中的组合关系,从她的字面上,我们很容易理解,大家伙组装在一起,具有很强的约束力,下面我们来看一张组合的图:

        

       大雁与羽毛和翅膀之间的关系就是组合,没有大雁就没有翅膀和羽毛,只有翅膀和羽毛也不可能是大雁,翅膀和羽毛离开大雁没有了存在的意义,大雁离开了翅膀和羽毛也不能构成大雁,翅膀和羽毛不能脱离大雁独立存在。组合是聚合的一种形式,她具有更强的拥有关系,强调整体与部分的生命周期是一致的,整体负责部分的生命周期的管理,如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。

        接下来,我们一起来看看依赖,先看下面这张图:

         

        依赖,描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之未必,一如我们上图所示,顾客和超市构成一种依赖关系,特别需要注意的是,箭头指向被依赖的一方。接下来,我们一起来看看泛化关系,如下图:

         

       泛化,简单的来说,A是B和C的父类,B、C具有公共类也就是父类A,说明A是B和C的一般化,在我们的UML当中,对于泛化关系有三个要求,首先,子类和父类应该完全一致,父类所具有的属性、操作,子类应该都有,再者,子类中除了与父类一致的信息以外,还包括额外的信息;最后可以使用父类实例的地方,也可以使用子类的实例。现在让我们一起来看看最后一种关系,实现,如下图:

       

       实现关系,指定两个实体之间的一种合约,换言之,一个实体定义一个合约,而另一个实体保证履行合约。下面我们一起来看看这四种关系之间具有怎样的关系呢,如下图:

       

弄清了类图中的四种关系,我们再来一起学习一下,深入类图讨论以及类图的构成:

    
    下面,是我根据机房机房系统画的类图:

    

       类图是用来显示模型的静态结构,特别是模型中存在的类、类的内部结构以及他们与其他类的关系等,还有一点需要特别注意,类图不显示暂时性信息。在UML这个大家族中,类图同样也占据着重要的地位,她不但是设计人员关心的核心,更是实现人员关注的核心,建模工具也主要根据类图来产生代码。简单的来说类就是多个对象共同的属性方法、比如羽衣甘蓝、三色堇、蝴蝶兰、风信子、天堂鸟她们都是类,她们的共同属性是根茎叶,共同的方法就是开花结果。

       学习类图的过程中,首先我们要做的工作就是确定类,抽象出我们需要的类,然后根据实际情况确定类的属性和操作,确定他们之间的关系,UML之旅,未完,待续.......

### UML静态的概念 UML静态是一种结构化建模工具,主要用于描述系统的静态结构。它通过形化的方式展示系统中的及其相互关系,帮助开发者理解并设计复杂的软件架构[^2]。 #### 的主要构成要素 1. **(Class)** 表示系统中的实体或概念,通常由三个部分组成:名称、属性和方法。这些元素共同定义了一个的行为和状态。 2. **关联(Association)** 描述两个之间存在的逻辑连接,可以是一对一、一对多或多对多的关系。例如,“订单”与“客户”的关系可能表示为“一个客户可以有多个订单”。 3. **继承(Inheritance)** 子从父派生出来的机制,子会自动获得父的所有属性和行为。这种层次化的组织方式有助于减少重复代码。 4. **聚合/组合(Composition and Aggregation)** 聚合表示一种弱依赖关系;而组合则更强调强耦合性,即当整体被销毁时,部分也会随之消失。 --- ### 示例解释 以下是基于上述理论的一个简单例子: 假设我们正在开发一款电子商务平台,其中涉及几个核心业务对象:“Product(产品)”, “Category(别)” 和 “OrderDetail(订单详情)”。下面是一个简单的UML静态的设计方案: ```plaintext +-------------------+ | Category | +-------------------+ | - id: int | | - name: string | +-------------------+ | + addProduct() | | + removeProduct()| +-------------------+ ▲ / \ / \ v v +------------------+ +--------------------+ | Product |<----------------| OrderDetail | +------------------+ +--------------------+ | - productId: int | | - quantity: int | | - name: string | | - price: double | | - category: ref | | - product: ref | +------------------+ +--------------------+ | + getPrice() | | + setPrice() | +------------------+ ``` 在这个模型中: - `Category` 是产品的分容器,具有自己的 ID 和 名字,并且能够管理属于它的 Products 列表; - `Product` 包含基本信息比如名字、价格以及所属的 Category 参考; - `OrderDetail` 记录了某个特定数量的产品实例,同时还持有该产品的引用以便计算总价等操作。 以上就是如何利用 UML 静态表征实际应用领域内的某些方面的方法之一[^1]。 --- ###
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值