首页 > 编程语言 >【Java】Java UML 类图绘制解析:结构与工具类型详解

【Java】Java UML 类图绘制解析:结构与工具类型详解

时间:2025-01-19 17:54:26浏览次数:1  
标签:PlantUML Java String startuml void 类图 UML class


        前言
        常用UML绘图工具
            1、Visual Paradigm
            2. Lucidchart
            3. Draw.io (现名diagrams.net)
            4. PlantUML(推荐)
            5. StarUML
        类与类之间的关系
            UML中的关系是面向对象关系。
            PlantUML类之间的关系符号定义
        UML 类图实战
            1、类 (Class)
            2、接口 (Interface)
            3、实现 (Implementation)
            4、继承 (Inheritance)
            5、关联 (Association)
            6、聚合 (Aggregation)
            7、组合 (Composition)
            8、依赖 (Dependency)
        Java代码UML综合演示
        结语

前言

在Java开发中,UML(统一建模语言)类图是设计和理解系统架构的重要工具。本文将详细介绍Java UML类图中不同结构的表示方法及其对应的绘图工具类型,帮助各位大大更高效地进行系统设计。

常用UML绘图工具

1、Visual Paradigm

特点:功能强大,支持多种UML图,界面友好。
适用场景:适合大型项目和团队协作。

2. Lucidchart

特点:在线工具,易于上手,支持多人协作。
适用场景:适合快速绘制和分享UML图。

3. Draw.io (现名diagrams.net)

特点:免费且开源,支持离线使用,有丰富的模板和符号库。
适用场景:适用于个人和小型团队。

4. PlantUML(推荐)

PlantUML是一个通用性很强的工具,可以快速、直接地创建各种图表。
利用简单直观的语言,用户可以毫不费力地绘制各种类型的图表。 如需详细了解该语言的功能和语法,请参阅《PlantUML 语言参考指南》。
如果您是 PlantUML 的新用户,我们建议您从我们的快速入门页面开始 并快速运行。如果您有任何问题,我们的常见问题页面是一个很有价值的资源。 此外,PlantUML 可以与其他各种工具无缝集成,以增强您的工作流程
特点:基于文本描述生成UML图,可以集成到各种IDE中。
适用场景:适合喜欢编程方式绘制UML图的开发者。

5. StarUML

特点:开源、轻量级,具有良好的扩展性和自定义能力。
适用场景:适合中小型项目的快速原型设计。

类与类之间的关系

UML中的关系是面向对象关系。

PlantUML类之间的关系用以下符号定义

UML类图实战

以下我将使用分别介绍类、接口、实现、继承、关联、聚合、组合、依赖等集中UML主要组成元素,并使用PlantUML演示画出UML实战。

1、类 (Class)

定义:类是面向对象编程的基本单位,包含属性和方法。
表示方式:矩形框,分为三个部分:
顶部:类名
中部:属性(成员变量)
底部:方法(成员方法)

PlantUML

@startuml
class A {
  +int a
  +String b
  +void foo()
  +void bar()
}
@enduml

2、接口 (Interface)

定义:接口是一组抽象方法的集合。
表示方式:矩形框,顶部用 <> 标记,列出所有方法。

PlantUML


@startuml
interface Animal {
  +void eat()
  +void sleep()
}
@enduml

3、实现 (Implementation)

定义:一个类实现一个或多个接口。
表示方式:带空心箭头的虚线,从实现类指向接口。

PlantUML

@startuml
interface Animal {
  +void eat()
  +void sleep()
}
class Dog implements Animal {
  +void eat()
  +void sleep()
}
@enduml

4、继承 (Inheritance)

定义:一个类继承另一个类,获得其属性和方法。
表示方式:带空心箭头的实线,从子类指向父类。

PlantUML

@startuml
interface Animal {
  +void eat()
  +void sleep()
}
class Dog implements Animal {
  +void eat()
  +void sleep()
}
class smallDog extends Dog {
  +void play()
}
@enduml

5、关联 (Association)

定义:两个类之间的关系,被关联方作为成员变量,如“订单”和“顾客”。
表示方式:一条直线连接两个类,可标注角色名、多重性等信息。

PlantUML

@startuml
@startuml
class Order{
  +Customer customer
  +void createOrder()
}
class Customer{
  +String name
  +String address
  +String phone
}
Order --> Customer
@enduml

6、聚合 (Aggregation)

定义:一种特殊的关联,表示整体与部分的关系,但部分可以独立存在。被关联方作为成员变量,如”车辆“和”轮子“。
表示方式:带空心菱形的线段,菱形靠近整体一方。

PlantUML

@startuml
class Car{
  +List<Wheel> wheels
  +void buyCar()
}
class Wheel{
  +String name
}
Car o-- Wheel
@enduml

7、组合 (Composition)

定义:一种特殊的关联,更强的聚合形式,部分不能脱离整体而单独存在。被关联方作为成员变量,如“房子”和“房间”。
表示方式:带实心菱形的线段,菱形靠近整体一方。

PlantUML

@startuml
class House{
  +List<Room> rooms
  +void myHouse()
}
class Room{
  +String name
  +String size
}
House *-- Room
@enduml

8、依赖 (Dependency)

定义:一个类依赖于另一个类,比如作为参数传递或局部变量使用。
表示方式:带箭头的虚线,箭头指向被依赖的类。

PlantUML

@startuml
class House{
  +void myHouse(Color color)
}
class Color{
  +String name
}
House ..> Color
@enduml

Java 代码UML综合演示

PlantUML

@startuml
class Customer{
-String name
-String address
-String phone
}
class Goods{
-String name
-String price
}
class Order{
-String name
-String serial
  -List<Goods> goodsList
}
class MessageType{
-Stringtype
}
class MessageUtils{
  +List<MessageType> messageTypes
  +sendMessage(String message)
}
interface CustomerService{
  +Customer getCustomerById(String id)
}
class CustomerServiceImpl implements CustomerService{
  +Customer getCustomerById(String id)
}
interface OrderService{
  +Order createOrder(Goods goods)
}
class OrderServiceImpl implements OrderService{
  +CustomerServiceImpl customerServiceImpl
  +Order createOrder(Goods goods)
}
class MinProgramOrder extends OrderServiceImpl{
  +MessageUtils messageUtils
  +addMinProgramOrderLog()
  +sendMinProgramMessage()
}
Order o-- Goods
CustomerService ..>Customer
CustomerServiceImpl ..>Customer
OrderService ..>Order
OrderService ..>Goods
OrderServiceImpl ..> CustomerServiceImpl
OrderServiceImpl ..>Order
OrderServiceImpl ..>Goods
MinProgramOrder --> MessageUtils
MessageUtils *--> MessageType
@enduml

结语

通过上述介绍,我们了解了Java UML类图中的基本元素及其表示方式。合理使用这些元素可以帮助更好地理解系统的架构和设计,希望这篇文章能够帮助你在实际开发过程中更有效地运用UML类图进行设计和交流。

原创 senfel 架构集结号

标签:PlantUML,Java,String,startuml,void,类图,UML,class
From: https://www.cnblogs.com/o-O-oO/p/18675367

相关文章

  • Java流程控制
    scanner对象之前学的基本语法没有实现程序与人的交互,现在可以使用scanner类来获取用户的输入(之前都是我们在输出程序,现在可以搞个程序然后输入数据得到结果)基本语法Scanners=newScanner(System.in);通过scanner类的next()和nextLine()获取输入字符串,在读取前一般需要使用hasNex......
  • java基本运算符
    在运算中:运算时定义不同的类型时,结果都自动升为混合运算类型中最高类型关系运算符:返回的结果:正确,错误,布尔值关系运算符%:模运算,取余+,-,*,/++:自增(b=a++即b=a+1,先执行a+1在赋值)(b=++a即b=a+1,a+1后在赋值)--:自减(b=a--即b=a-1,先执行a-1在赋值)(b=--a即b=a-1,a-1后在赋值)幂运算:2的三......
  • Java线程相关知识及线程池学习二
    阻塞队列定义在Java中,阻塞队列(BlockingQueue)是一种线程安全的队列。阻塞队列是Java并发包(java.util.concurrent)中的一个重要组件,常用于生产者-消费者模式中,一个线程产生数据放入队列,另外一个从队列取出数据进行消费。主要有两种情况在尝试添加元素到队列中时,如果队列已......
  • java类型转换
    由于java是强类型语言,所以在运算的时候需要用到类型转换低(byte、short、char——>int——>long——>float——>double)高运算中不同类型的数据先转化为同一类型,然后在进行运算强制转换:(类型)变量名(高——>低)/自动转换(低——>高)注意点不能对布尔值进行转换不能对象类型转换......
  • 深入理解 Java 双列集合:Map 家族的探索与实践
    在Java编程的世界里,集合框架是组织和操作数据的强大工具。其中,双列集合以独特的键值对存储方式,为我们处理数据提供了别样的思路。本文将深入探讨Java双列集合的核心概念、常见实现类及其应用场景。双列集合的基本特性双列集合,区别于单列集合,它一次存储一对数据,即键(Key)和......
  • 偷偷的学Java
    序章:为何要偷偷学Java?•Java,不仅仅是一种编程语言• 偷偷学Java,快速提升你的竞争力•Java学习秘籍第一章:Java的神秘面纱•Java的起源与发展历程•Java的生态系统与应用场景•Java与其他编程语言的比较第二章:搭建你的Java秘密基地•安装Java开发工具包(JDK):不被发现......
  • java变量及八大基本数据类型的定义
    变量变量是什么:就是可以变化的量!java是一种强类型语言,每个变量都必须声明其类型java变量是程序中最基本的存储单元,其中要素包括变量名,变量类型,作用域注意事项每个变量都有类型,类型可以是基本类型,也可以是引用类型变量名必须是合法的标识符变量声明是一条完整的语句,因此......
  • 【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-第k个排列100分(python、java、c++、js、c)】题目给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列的情况,并一一标记,当n=3时,所有排列如下:“123”“132”“213”“231”“312”“321”给......
  • 咱们继续学Java——高级篇 第一百八十三篇:之Java高级Swing编程之JEditorPane组件与进
    咱们继续学Java——高级篇第一百八十三篇:之Java高级Swing编程之JEditorPane组件与进度指示器在Java编程的学习旅程中,我们始终保持着积极探索、共同成长的态度。今天,我们将深入学习Java高级Swing编程中关于JEditorPane组件与进度指示器的部分,包括JEditorPane组件的功能特性......
  • Java学习,删除集合指定元素
    Java删除集合中指定元素,通常依赖于集合具体类型。不同的集合类型(如ArrayList,HashSet,LinkedList等)提供了不同的方法来执行此操作。使用ArrayList:importjava.util.ArrayList;importjava.util.List; publicclassMain{  publicstaticvoidmain(String[]ar......