首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 UML 建模指導 Java 應用開發:從需求分析到代碼實現全流程

     編輯:Java 相關知識

前言

統一建模語言 (UML) 是軟件工程的標準建模語言,提供了一套圖形化符號系統,用於可視化、規範化、構建和文檔化軟件系統制品。本文以「圖書館借閱管理系統」為案例,完整演示從需求分析 → 面向對象分析 (OOA) → 架構設計 → 詳細設計 → Java 代碼實現的全生命周期建模過程,展示 UML 如何指導實際開發。

案例背景:圖書館系統需求

  • 支持圖書/雜志借閱、歸還、預訂
  • 讀者、圖書管理員雙角色
  • 書目、讀者、借閱記錄、預訂記錄增刪改查
  • 暢銷書多副本管理、舊書下架
  • 跨平台運行、友好 GUI、易擴展

階段一:需求分析與用例建模

參與者

  • 圖書管理員:系統主要操作者,代理讀者完成業務
  • 讀者:服務對象,不直接操作系統

用例圖

┌─────────────────────────────────────┐
│         圖書館管理系統               │
├─────────────────────────────────────┤
│  ◎ 借書        ◎ 還書               │
│  ◎ 生成預訂    ◎ 刪除預訂           │
│  ◎ 增加書目    ◎ 更新/刪除書目      │
│  ◎ 添加圖書    ◎ 刪除圖書           │
│  ◎ 添加讀者    ◎ 更新/刪除讀者      │
└─────────────────────────────────────┘
        ▲              ▲
        │              │
   ┌────┴────┐    ┌────┴────┐
   │圖書管理員│    │   讀者   │
   └─────────┘    └─────────┘

關鍵用例流程:借書 (無預訂)

  1. 識別書名
  2. 查找可借副本
  3. 識別讀者身份
  4. 辦理借出登記
  5. 記錄借閱信息

階段二:面向對象分析 (OOA) - 領域模型

核心領域類

類名職責關鍵屬性
BorrowerInformation讀者信息id, name, contact, status
Title書目 (邏輯書籍)isbn, name, type(書/雜志), status
BookTitle / Magazine具體類型 (可合併為 Title.type)-
Item實體副本barcode, title, status(在館/借出/預訂)
Loan借閱記錄borrower, item, borrowDate, dueDate
Reservation預訂記錄borrower, title, reserveDate, status

類圖關係

Title "1" ◄── "0..*" Item ──► "0..1" Loan
Title "1" ◄── "0..*" Reservation
BorrowerInformation "1" ◄── "0..*" Loan
BorrowerInformation "1" ◄── "0..*" Reservation

狀態圖:Item 生命周期

[在館] ──借出──► [借出] ──歸還──► [在館]
  ▲                          │
  └────────預訂滿足──────────┘
  ▲
  └────────預訂取消──────────┘

序列圖:借書交互

:Librarian    :UI窗口      :Title      :Item       :Borrower   :Loan
   │             │           │           │           │          │
   ├─借書請求──►│           │           │           │          │
   │           ├─查書目────►│           │           │          │
   │           │◄─書目信息──┤           │           │          │
   │           ├─查可借副本──────────►│           │          │
   │           │◄─副本列表────────────┤           │          │
   │           ├─驗證讀者──────────────────────►│          │
   │           │◄─讀者信息───────────────────────┤          │
   │           ├─創建借閱記錄────────────────────────────►│
   │           │◄─借閱記錄───────────────────────────────┤
   │◄─完成確認──┤           │           │           │          │

階段三:架構設計 - 分層與包結構

四層包架構

包名職責關鍵類依賴
User Interface (UI)Swing/AWT 界面、用戶交互LendDialog, ReturnDialog, TitleManager→ Business Object
Business Object (BO)領域邏輯、業務規則BorrowerInformation, Title, Item, Loan, Reservation→ Database
Database (DB)持久化服務Persistent (基類), ObjId, FileStorage← BO 繼承 Persistent
Utility通用工具ObjId (對象標識)被所有包使用

架構原則

  • 分層隔離:UI 不直接訪問 DB,通過 BO 中介
  • 單向依賴:UI → BO → DB,無循環依賴
  • 持久化抽象:BO 繼承 Persistent,屏蔽存儲細節 (文件/關係數據庫/OODB)
  • 對象標識:ObjId 統一引用持久對象,支持跨層傳遞

階段四:詳細設計 - 類規築與動態模型

BO 包詳細類圖

┌──────────────────┐       ┌──────────────────┐
│    Title         │       │    Item          │
├──────────────────┤       ├──────────────────┤
│ - isbn: String   │       │ - barcode: String│
│ - name: String   │       │ - status: Enum   │
│ - type: Type     │◄──────│ - title: ObjId   │
│ - status: Enum   │ 1..*  │ - loan: ObjId    │
│ - reservations   │       ├──────────────────┤
├──────────────────┤       │ + getTitle()     │
│ + addReservation()│       │ + setStatus()    │
│ + removeReservation()      │ + getLoan()      │
│ + getAvailableItems()      └──────────────────┘
└──────────────────┘

狀態圖細化:Title 狀態機

[正常] ──添加預訂──► [有預訂] ──預訂滿足/取消──► [正常]
  │                                      ▲
  └──────────所有副本借出────────────────┘

序列圖:添加書目

:Librarian → :TitleManagerUI → :TitleController → :Title (new) → :Persistent.store()

協作圖:添加書目 (替代視角)

[Librarian] → (1) TitleManagerUI → (2) TitleController → (3) new Title → (4) Persistent.store()

階段五:Java 代碼實現映射

組件圖:邏輯類到文件映射

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  Title.java │     │  Item.java  │     │  Loan.java  │
│  (BO包)     │     │  (BO包)     │     │  (BO包)     │
└─────────────┘     └─────────────┘     └─────────────┘
       │                   │                   │
       ▼                   ▼                   ▼
┌─────────────────────────────────────────────────┐
│           Persistent.java (DB包)                │
│  + store()  + update()  + delete()  + find()    │
└─────────────────────────────────────────────────┘

關鍵實現模式

1. 持久化基類模式

public abstract class Persistent implements Serializable {
    protected ObjId objId; // 對象標識
    
    public void store() { Database.store(this); }
    public void update() { Database.update(this); }
    public void delete() { Database.delete(this); }
    
    // 模板方法:子類實現具體查找邏輯
    public static Persistent getObject(ObjId id) { 
        return Database.find(id); 
    }
}

// 領域類繼承
public class Title extends Persistent {
    private String isbn;
    private String name;
    // 業務方法...
}

2. 對象標識模式

public class ObjId implements Serializable {
    private long id; // 全局唯一
    
    public static ObjId newId() { return new ObjId(IdGenerator.next()); }
    // 關聯引用存儲 ObjId 而非直接對象引用
}

3. 狀態模式實現 Item 狀態機

public enum ItemStatus { AVAILABLE, LOANED, RESERVED }

public class Item extends Persistent {
    private ItemStatus status;
    private ObjId titleId;
    private ObjId loanId; // 當前借閱記錄
    
    public void checkout(ObjId borrowerId) {
        if (status != AVAILABLE) throw new IllegalStateException();
        status = LOANED;
        Loan loan = new Loan(borrowerId, this.objId);
        loan.store();
        this.loanId = loan.getObjId();
        update();
    }
}

開發流程中的模型-代碼同步

  • 正向工程:模型 → 代碼骨架 (IDE/工具生成)
  • 逆向工程:代碼 → 模型 (重構後同步)
  • 圖表驅動編碼:編碼時參考類圖(結構)、狀態圖(行為)、序列圖(交互)
  • 持續同步:重構必須更新模型,模型變更必須反映代碼

現代視角:UML 在敏捷/微服務時代的定位

總結

本文通過圖書館系統案例,完整展示了 UML 從需求捕獲 (用例圖) → 領域分析 (類圖/狀態圖/序列圖) → 架構設計 (包圖/分層) → 詳細設計 (精化類/動態模型) → Java 實現 (持久化模式/對象標識/狀態機) 的全流程建模指導。UML 的核心價值在於 溝通語言標準化、設計決策顯性化、複雜性可視化管理。現代實踐中,建議採用「文本建模 + 關鍵圖表 + 演進式更新」的輕量級方式,讓 UML 服務於代碼而非成為負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
傳統重度使用現代輕量級實踐
完整 13 種圖表核心 3-5 圖:類圖、序列圖、組件圖、部署圖、狀態圖
大量前期設計 (BDUF)即時建模、演進式架構、架構決策記錄 (ADR)
CASE 工具強綁定PlantUML/Mermaid 文本建模、IDE 集成、版本控制友好
文檔為主代碼即文檔、測試即規格、圖表輔助溝通