CodeGym /Blog Java /Ngẫu nhiên /Sơ đồ lớp UML

Sơ đồ lớp UML

Xuất bản trong nhóm

Giới thiệu

Tôi nghĩ mọi người đều đã nghe câu nói "Đo một lần, cắt một lần". Đó là lời khuyên thực sự trong lập trình. Luôn luôn tốt hơn nếu nghĩ về việc triển khai trước khi bạn dành thời gian thực hiện nó. Trong quá trình triển khai, bạn thường cần tạo các lớp và nghĩ cách chúng sẽ tương tác. Một biểu diễn trực quan về tất cả thường có thể giúp bạn đưa ra giải pháp chính xác nhất. Đây là nơi Sơ đồ lớp UML hỗ trợ chúng ta.

UML là gì?

Nếu bạn nhìn vào các hình ảnh có liên quan trong các công cụ tìm kiếm, bạn sẽ thấy rằng UML có liên quan đến sơ đồ, mũi tên và hình vuông. Bạn cần biết rằng UML là viết tắt của Unified Modeling Language. Thống nhất là từ quan trọng ở đây. Điều này có nghĩa là hình ảnh của chúng tôi sẽ không chỉ được hiểu bởi chúng tôi mà còn bởi bất kỳ ai khác biết UML. Nó là ngôn ngữ chung để vẽ sơ đồ.

Theo Wikipedia,

"UML là một ngôn ngữ mô hình hóa, có mục đích chung, phát triển trong lĩnh vực công nghệ phần mềm nhằm cung cấp một cách tiêu chuẩn để trực quan hóa thiết kế của một hệ thống."
Điều thú vị nhất mà không phải ai cũng đoán ra được là UML có các đặc tả. Và thậm chí còn có một đặc tả UML 2. Thông tin thêm về thông số kỹ thuật có sẵn trên trang web Nhóm quản lý đối tượng . Trên thực tế, nhóm này phát triển các đặc tả UML. Điều thú vị là UML không bị giới hạn trong việc mô tả cấu trúc của các lớp. Có nhiều loại sơ đồ UML. Wikipedia có một mô tả ngắn gọn về các loại sơ đồ UML khác nhau: Sơ đồ UML . Quay trở lại các sơ đồ lớp UML, điều đáng nói là cuốn sách "Các mẫu thiết kế đầu tiên" , sử dụng các sơ đồ UML để minh họa các mẫu thiết kế. Điểm mấu chốt là UML thực sự được sử dụng. Và hóa ra việc biết nó và hiểu cách sử dụng lại khá hữu ích.

Ứng dụng

Hãy hình dung rằng chúng ta có thể làm việc với UML trong một IDE. Chúng tôi sẽ sử dụng IntelliJ IDEA làm IDE của chúng tôi. Nếu bạn đang sử dụng IntelliJ IDEA Ultimate, thì chúng tôi sẽ cài đặt plugin "Hỗ trợ UML" "sẵn sàng". Nó cho phép bạn tự động tạo các sơ đồ lớp đẹp mắt. Ví dụ: sử dụng Ctrl+N hoặc mục menu "Điều hướng" -> "Lớp" để chuyển đến lớp ArrayList. Bây giờ trong menu ngữ cảnh của tên lớp, chọn "Sơ đồ" -> "Hiển thị cửa sổ bật lên sơ đồ". Kết quả là, chúng ta có được một sơ đồ đẹp. UML: từ lý thuyết đến thực hành - 2 Nhưng nếu bạn muốn tự vẽ sơ đồ thì sao? Và nếu bạn không có phiên bản Ultimate thì sao? Sử dụng Phiên bản cộng đồng IntelliJ IDEA, chúng tôi không có lựa chọn nào khác. Vì vậy, chúng ta cần hiểu sơ đồ UML được tổ chức như thế nào. Đầu tiên,. Đó là một bộ công cụ trực quan hóa đồ thị. Plugin chúng tôi sẽ sử dụng phụ thuộc vào nó. Sau khi cài đặt, bạn cần thêm thư mục bin từ thư mục cài đặt Graphviz vào biến môi trường PATH. Sau đó, trong IntelliJ IDEA, chọn Tệp -> Cài đặt trong menu. Trong cửa sổ "Cài đặt", chọn danh mục "Plugin", nhấp vào nút "Duyệt qua kho lưu trữ" và cài đặt plugin tích hợp PlantUML . PlantUML có gì hay? Nó mô tả UML bằng cách sử dụng ngôn ngữ mô tả biểu đồ có tên là "dấu chấm", làm cho ngôn ngữ này trở nên phổ biến hơn, vì ngôn ngữ dấu chấm không chỉ được sử dụng bởi PlantUML. Hơn nữa, mọi thứ chúng tôi làm dưới đây có thể được thực hiện không chỉ trong một IDE mà còn trực tuyến tại planttext.com. Sau khi cài đặt plugin PlantUML, chúng tôi sẽ có thể tạo sơ đồ UML bằng cách sử dụng "Tệp" -> "Mới". Hãy tạo sơ đồ "lớp UML". Điều này sẽ tự động tạo một mẫu với một ví dụ. Chúng tôi sẽ xóa nội dung của nó và thêm nội dung của chúng tôi. Để hiểu cách thể hiện điều này trong văn bản, hãy xem hướng dẫn sử dụng PlantUML: plantuml class-diagram. UML: từ lý thuyết đến thực hành - 3Dựa vào những tài liệu này, hãy bắt đầu tạo sơ đồ UML của chúng ta. Thêm nội dung sau, mô tả hai lớp:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Để xem kết quả trong IDEA, hãy chọn "Xem" -> "Công cụ Windows" -> "PlantUML". Chúng tôi chỉ nhận được hai hình vuông đại diện cho các lớp học. Chúng tôi biết rằng cả hai lớp này đều triển khai giao diện Danh sách . Mối quan hệ giai cấp này được gọi là hiện thực hóa. Mối quan hệ này được thể hiện bằng một mũi tên với một đường chấm chấm. Hãy vẽ nó:

interface List
List <|.. ArrayList
List <|.. LinkedList
List là một trong những lớp con của Collection . Tức là nó kế thừa Collection . Mối quan hệ này được gọi là khái quát hóa. Nó trông giống như một mũi tên với một đường liên tục thông thường. Hãy vẽ nó:

interface Collection
Collection <|-- List
Đối với kiểu quan hệ tiếp theo, hãy thêm vào mô tả lớp ArrayList một mục về một mảng phần tử riêng của gói :

~Object[] elementData
Bây giờ chúng tôi muốn chỉ ra rằng ArrayList chứa một số đối tượng. Trong trường hợp này, sẽ có một mối quan hệ tổng hợp. Lập danh sáchlà một tập hợp, vì nó chứa các đối tượng khác. Chúng tôi nói tập hợp vì các đối tượng của danh sách có thể tồn tại mà không có danh sách: chúng không phải là các phần không thể thiếu của danh sách. Thời gian tồn tại của chúng không gắn liền với thời gian tồn tại của danh sách. Từ "tổng hợp" đến với chúng tôi từ tiếng Latinh và được dịch là "tập hợp", nghĩa là một thứ được tạo thành từ một thứ gì đó. Ví dụ, trong cuộc sống, chúng ta có một cụm máy bơm (tổng hợp), bao gồm một máy bơm và một động cơ. Việc lắp ráp có thể được tháo rời và chúng ta có thể để nguyên một số thành phần của nó. Ví dụ, để bán hoặc đưa vào lắp ráp khác. Đó là cách tương tự trong một danh sách. Điều này được thể hiện bằng một hình thoi trống ở tổng hợp và một đường liên tục. Chúng tôi sẽ đại diện cho điều này như sau:

class Object{
}
ArrayList o- Object
Bây giờ chúng tôi muốn chỉ ra rằng không giống như ArrayList , lớp LinkedList chứa Node s — các thùng chứa tham chiếu dữ liệu được lưu trữ. Trong trường hợp này, Node s là một phần của LinkedList và không tồn tại độc lập. Bản thân nút không phải là nội dung. Nó chỉ chứa một tham chiếu đến nội dung. Ví dụ: khi chúng tôi thêm một chuỗi vào LinkedList , chúng tôi đang thêm một Nút mới chứa tham chiếu đến chuỗi, cũng như liên kết đến Nút trước đó và Nút tiếp theo. Mối quan hệ này được gọi là thành phần. Nó được mô tả bằng cách vẽ một đường liên tục với một hình thoi được lấp đầy trên vật liệu tổng hợp (thứ được tạo thành từ các bộ phận cấu thành). Bây giờ chúng ta sẽ biểu diễn mối quan hệ dưới dạng văn bản:

class Node{
}
LinkedList *-- Node
Và bây giờ bạn cần học cách mô tả một loại quan hệ quan trọng khác: sự phụ thuộc. Nó được sử dụng khi một lớp sử dụng lớp khác, nhưng lớp này không chứa hoặc không kế thừa lớp đã sử dụng. Ví dụ: LinkedListArrayList biết cách tạo ListIterator . Chúng tôi biểu thị điều này dưới dạng các mũi tên có đường chấm chấm:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Sau khi thực hiện tất cả những điều này, chúng tôi nhận được: UML: từ lý thuyết đến thực hành - 4Bạn có thể thêm nhiều chi tiết nếu cần. Tất nhiên, không có gì siêu nhiên khi vẽ một sơ đồ như vậy. Khi làm việc riêng, bạn có thể nhanh chóng vẽ ra bằng tay. Điều này sẽ giúp bạn phát triển khả năng suy nghĩ thông qua kiến ​​trúc của ứng dụng và sớm xác định những thiếu sót trong cấu trúc lớp, chứ không phải sau khi bạn đã dành cả ngày để triển khai mô hình sai. Đó có vẻ là một lý do tốt để thử nó, phải không? :)

tự động hóa

Có nhiều cách khác nhau để tự động tạo sơ đồ PlantUML. Ví dụ: IDEA có plugin SketchIT nhưng nó không vẽ sơ đồ hoàn toàn chính xác. Giả sử việc triển khai các giao diện được vẽ không chính xác (nó được hiển thị dưới dạng kế thừa). Internet có các ví dụ về cách tích hợp điều này vào quy trình xây dựng dự án của bạn. Ví dụ: bạn có thể tìm cách sử dụng uml-java-docklet với Maven. Để chứng minh, chúng tôi sẽ sử dụng Maven Archetype để nhanh chóng tạo một dự án Maven. Chạy

mvn archetype:generate
Để trả lời Chọn một số hoặc áp dụng bộ lọc, hãy để mặc định — chỉ cần nhấn Enter. Nó sẽ luôn là "maven-archetype-quickstart". Chọn phiên bản mới nhất. Tiếp theo, chúng tôi sẽ trả lời một số câu hỏi và hoàn tất việc tạo dự án: UML: từ lý thuyết đến thực hành - 5Maven không phải là chủ đề của bài viết này, vì vậy bạn có thể tìm thấy câu trả lời cho các câu hỏi của mình về Maven trong Trung tâm người dùng Maven . Trong dự án đã tạo, hãy mở tệp mô tả dự án, pom.xml, để chỉnh sửa. Chúng tôi sẽ sao chép nội dung từ mô tả cài đặt uml-java-docklet vào tệp này. Không thể tìm thấy vật phẩm được sử dụng trong mô tả trong kho lưu trữ Maven Central. Nhưng những điều sau đây hiệu quả với tôi: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. Nói cách khác, trong phần mô tả, bạn chỉ cần thay thế groupId từ "info.leadinglight" thành "com.chfourie" và đặt phiên bản thành "1.0.0". Sau đó, chúng ta có thể thực hiện các lệnh sau trong thư mục chứa tệp pom.xml:

mvn clean install

mvn javadoc: javadoc
Nếu bây giờ chúng ta mở tài liệu đã tạo (explorer target\site\apidocs\index.html), chúng ta sẽ thấy các sơ đồ UML. Nhân tiện, mối quan hệ triển khai hiện được hiển thị chính xác :)

Phần kết luận

Như bạn có thể thấy, UML cho phép bạn trực quan hóa cấu trúc ứng dụng của mình. Nhưng UML có thể làm được nhiều hơn thế. Bạn có thể sử dụng UML để mô tả các quy trình khác nhau trong công ty của mình hoặc để mô tả quy trình kinh doanh bao gồm một chức năng mà bạn đang viết. Bạn sẽ cần phải tự quyết định mức độ hữu ích của UML đối với cá nhân bạn, nhưng bất kể bạn quyết định thế nào, sẽ rất hữu ích nếu bạn dành thời gian để tìm hiểu thêm về nó.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION