Giới thiệu
Tôi nghĩ thuở nhỏ ai cũng từng nghe câu nói “ Đo hai lần, cắt một lần ”. Trong lập trình cũng vậy. Tốt hơn hết bạn nên suy nghĩ về việc triển khai trước khi dành thời gian thực hiện nó. Thông thường trong quá trình triển khai, bạn phải tạo các lớp và tạo ra sự tương tác giữa chúng. Và thường thì sự thể hiện trực quan về điều này có thể giúp giải quyết vấn đề một cách chính xác nhất. Đây là nơi UML giúp chúng ta .UML là gì?
Nếu bạn nhìn vào hình ảnh trong các công cụ tìm kiếm, bạn sẽ thấy rõ rằng UML là một thứ gì đó về sơ đồ, mũi tên và hình vuông. Điều quan trọng là UML dịch sang Ngôn ngữ mô hình hóa thống nhất . Từ Thống nhất rất quan trọng ở đây. Nghĩa là, những bức ảnh của chúng ta sẽ không chỉ được chúng ta hiểu mà còn những người khác biết về UML sẽ hiểu được. Hóa ra đây là ngôn ngữ quốc tế để vẽ sơ đồ.
Như Wikipedia nói
UML là ngôn ngữ mô tả đồ họa để mô hình hóa đối tượng trong phát triển phần mềm, mô hình hóa quy trình nghiệp vụ, thiết kế hệ thống và hiển thị các cấu trúc tổ chức.Điều thú vị nhất mà không phải ai cũng nghĩ tới hay nhận ra là UML có các đặc tả. Hơn nữa, thậm chí còn có đặc tả UML2. Bạn có thể tìm thêm thông tin chi tiết về đặc tả trên trang web của Nhóm quản lý đối tượng . Trên thực tế, nhóm này đang 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. Bạn có thể xem mô tả ngắn gọn về các loại sơ đồ UML trong cùng một Wikipedia: Sơ đồ UML hoặc trong video của Timur Batyrshinov Đánh giá sơ đồ UML . UML cũng được sử dụng rộng rãi để mô tả các quy trình khác nhau, ví dụ ở đây: Đăng nhập một lần bằng JWT . Quay trở lại việc sử dụng sơ đồ lớp UML, điều đáng chú ý là cuốn sách Head First: Design Patterns , trong đó các mẫu được minh họa bằng chính các sơ đồ UML đó. Hóa ra UML thực sự đang được sử dụng. Và hóa ra kiến thức và sự hiểu biết về ứng dụng của nó lại là một kỹ năng khá hữu ích.
Ứng dụng
Hãy xem cách bạn có thể làm việc với cùng UML này từ IDE. Hãy lấy IntelliJ Idea làm IDE . Nếu chúng tôi sử dụng IntelliJ Idea Ultimate thì chúng tôi sẽ cài đặt plugin “ Hỗ trợ UML ” ngay lập tức. Nó cho phép bạn tự động tạo ra 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" chúng ta đi đến lớp ArrayList . Bây giờ, thông qua menu ngữ cảnh cho tên lớp, hãy 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 mắt:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Để xem kết quả trong Idea, chọn "View" -> "Tool Windows" -> "PlantUML". Chúng ta sẽ chỉ có hai hình vuông đại diện cho các lớp. Như chúng ta đã biết, cả hai lớp này đều triển khai giao diện List. Mối quan hệ lớp này được gọi là thực hiện. Để mô tả kết nối như vậy, hãy sử dụng mũi tên có đường chấm chấm. Hãy mô tả nó:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- một trong những lớp trẻ em Collection
. Tức là nó kế thừa từ Collection. Kết nối 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 đều đặn. Hãy mô tả nó:
interface Collection
Collection <|-- List
Đối với loại kết nối sau, hãy thêm vào mô tả lớp ArrayList
một mục về mảng phần tử riêng của gói :
~Object[] elementData
Bây giờ chúng tôi muốn hiển thị những gì ArrayList
chứa một số đối tượng. Trong trường hợp này, loại kết nối sẽ là tổng hợp . Đơn vị trong trường hợp này là ArrayList
, bởi vì nó chứa các đối tượng khác. Chúng tôi chọn tập hợp vì các đối tượng trong danh sách có thể tồn tại mà không cần danh sách: chúng không phải là một 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ổng hợp được dịch từ tiếng Latin là "được lắp ráp", nghĩa là một cái gì đó được tạo thành từ một cái gì đó. Ví dụ, trong cuộc sống có một bộ phận bơm, bao gồm một máy bơm và một động cơ. Bản thân thiết bị có thể được tháo rời, để lại một số bộ phận của nó. Ví dụ, để bán hoặc đưa vào một đơn vị khác. Danh sách cũng vậy. Và điều này được thể hiện dưới dạng một viên kim cương trống gần đơn vị và một đường liên tục. Hãy mô tả nó như thế này:
class Object{
}
ArrayList o- Object
Bây giờ chúng tôi muốn chứng minh rằng, không giống như ArrayList
, lớp này LinkedList
chứa Node
các thùng chứa tham chiếu đến dữ liệu được lưu trữ. Trong trường hợp này, Node
họ là một phần của chính họ LinkedList
và không thể sống tách biệt. Node
không phải là nội dung được lưu trữ trực tiếp mà chỉ chứa một liên kết đến nó. Ví dụ: khi chúng tôi thêm vào LinkedList
một hàng, chúng tôi thêm một hàng mới Node
chứa liên kết đến hàng đó cũng như liên kết đến hàng trước và hàng tiếp theo Node
. Kiểu giao tiếp này được gọi là thành phần . Để hiển thị một hỗn hợp (bao gồm các bộ phận), một viên kim cương màu được vẽ, với một đường liên tục dẫn đến nó. Bây giờ hãy viết điều này dưới dạng hiển thị văn bản của kết nối:
class Node{
}
LinkedList *-- Node
Và bây giờ chúng ta cần học cách thể hiện một loại mối quan hệ quan trọng khác - mối quan hệ phụ thuộc . Nó được sử dụng khi một lớp sử dụng lớp khác và lớp đó không chứa lớp đang được sử dụng và không phải là lớp con của nó. Ví dụ: LinkedList
họ ArrayList
biết cách tạo các tệp ListIterator
. Hãy hiển thị điều này dưới dạng mũi tên có đường chấm chấm:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Sau tất cả, nó sẽ trông như thế này:
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ẽ chúng một cách chính xác. Ví dụ: việc triển khai các giao diện được vẽ không chính xác (hiển thị dưới dạng kế thừa). Ngoài ra còn có các ví dụ trên Internet về cách đưa điều này vào vòng đời xây dựng dự án của bạn. Giả sử có một ví dụ về việc Maven sử dụng uml-java-docklet . Để hiển thị cách thực hiện điều này, chúng tôi sẽ sử dụng Maven Archetype để nhanh chóng tạo dự án Maven. Hãy thực hiện lệnh:mvn archetype:generate
Khi được yêu cầu chọn bộ lọc ( Chọn một số hoặc áp dụng bộ lọc ), hãy để mặc định bằng cách nhấn Enter. Đây sẽ luôn là " maven-archetype-quickstart ". Chọn phiên bản mới nhất. Tiếp theo, chúng tôi trả lời các câu hỏi và hoàn thành việc tạo dự án:
mvn clean install
: và mvn javadoc:javadoc
. Bây giờ, nếu 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, việc triển khai đã được hiển thị chính xác ở đây)
GO TO FULL VERSION