การแนะนำ
ฉันคิดว่าทุกคนคงเคยได้ยินคำพูดที่ว่า “ วัดสองครั้ง ตัดครั้งเดียว ” มันเหมือนกันในการเขียนโปรแกรม ควรคำนึงถึงการใช้งานก่อนที่จะใช้เวลาดำเนินการจะดีกว่าเสมอ บ่อยครั้งในระหว่างการนำไปใช้งาน คุณจะต้องสร้างคลาสและประดิษฐ์ปฏิสัมพันธ์ระหว่างคลาสเหล่านั้น และบ่อยครั้งที่การแสดงภาพสิ่งนี้สามารถช่วยแก้ไขปัญหาด้วยวิธีที่ถูกต้องที่สุด นี่คือจุดที่ UMLช่วยเราUML คืออะไร?
หากคุณดูภาพในเครื่องมือค้นหา จะเห็นได้ชัดว่าUMLเป็นเรื่องเกี่ยวกับไดอะแกรม ลูกศร และสี่เหลี่ยม สิ่งสำคัญคือ UML แปลเป็นภาษา Unified Modeling คำว่า Unified มีความสำคัญที่นี่ นั่นคือรูปภาพของเราไม่เพียงแต่เราจะเข้าใจเท่านั้น แต่ยังรวมถึงผู้อื่นที่รู้จัก UML ด้วย ปรากฎว่านี่เป็นภาษาสากลสำหรับการวาดไดอะแกรม
ดังที่วิกิพีเดียกล่าวไว้
UML เป็นภาษาคำอธิบายกราฟิกสำหรับการสร้างแบบจำลองออบเจ็กต์ในการพัฒนาซอฟต์แวร์ การสร้างแบบจำลองกระบวนการทางธุรกิจ การออกแบบระบบ และการแสดงโครงสร้างองค์กรสิ่งที่น่าสนใจที่สุดที่ทุกคนไม่ได้คิดหรือตระหนักก็คือ UML มีข้อกำหนดเฉพาะ นอกจากนี้ยังมีข้อกำหนด UML2 ด้วย รายละเอียดเพิ่มเติมเกี่ยวกับข้อกำหนดสามารถพบได้บนเว็บไซต์กลุ่มการจัดการวัตถุ จริงๆแล้วกลุ่มนี้กำลังพัฒนาข้อกำหนด UML สิ่งที่น่าสนใจคือ UML ไม่ได้จำกัดอยู่เพียงการอธิบายโครงสร้างของคลาสเท่านั้น ไดอะแกรม UML มีหลายประเภท คำอธิบายโดยย่อเกี่ยวกับประเภทของไดอะแกรม UML สามารถดูได้ใน Wikipedia เดียวกัน: ไดอะแกรม UMLหรือในวิดีโอโดย Timur Batyrshinov การทบทวนไดอะแกรม UML นอกจากนี้ UML ยังใช้กันอย่างแพร่หลายในการอธิบายกระบวนการต่างๆ ตัวอย่างเช่นที่นี่: Single sign-on โดยใช้ JWT เมื่อกลับมาใช้ไดอะแกรมคลาส UML อีกครั้ง เป็นเรื่องที่น่าสังเกตในหนังสือHead First: Design Patternsซึ่งรูปแบบต่างๆ จะแสดงด้วยไดอะแกรม UML เดียวกันเหล่านั้น ปรากฎว่ามีการใช้งาน UML อยู่จริง และปรากฎว่าความรู้และความเข้าใจในการใช้งานนั้นเป็นทักษะที่มีประโยชน์ทีเดียว
แอปพลิเคชัน
มาดูกันว่าคุณสามารถทำงานกับ UML เดียวกันนี้จาก IDE ได้อย่างไร ลองใช้ IntelliJ Ideaเป็น IDE กัน หากเราใช้IntelliJ Idea Ultimateเราจะติดตั้งปลั๊กอิน “ UML Support ” ทันที ช่วยให้คุณสร้างไดอะแกรมคลาสที่สวยงามได้โดยอัตโนมัติ ตัวอย่างเช่น การใช้ Ctrl+N หรือรายการเมนู "Navigate" -> "Class" เราจะไปที่คลาสArrayList ตอนนี้ผ่านเมนูบริบทสำหรับชื่อคลาส ให้เลือก "ไดอะแกรม" -> "แสดงป๊อปอัปไดอะแกรม" เป็นผลให้เราได้แผนภาพที่สวยงาม:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
หากต้องการดูผลลัพธ์ใน Idea ให้เลือก "ดู" -> "เครื่องมือ Windows" -> "PlantUML" เราจะได้สี่เหลี่ยมสองอันที่แสดงถึงคลาส ดังที่เราทราบ ทั้งสองคลาสนี้ใช้อินเทอร์เฟซรายการ ความสัมพันธ์ในชั้นเรียนนี้เรียกว่าการนำไปปฏิบัติ หากต้องการแสดงการเชื่อมต่อดังกล่าว ให้ใช้ลูกศรที่มีเส้นประ ลองพรรณนามัน:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- หนึ่งในชั้นเรียนCollection
เด็ก นั่นคือสืบทอดมาจากคอลเลกชัน การเชื่อมต่อนี้เรียกว่าลักษณะทั่วไป ดูเหมือนลูกศรที่มีเส้นต่อเนื่องสม่ำเสมอ ลองพรรณนามัน:
interface Collection
Collection <|-- List
สำหรับการเชื่อมต่อประเภทต่อไปนี้ ให้เพิ่มArrayList
รายการเกี่ยวกับอาร์เรย์ ส่วนตัวของแพ็คเกจ ลงในคำอธิบายคลาส:
~Object[] elementData
ตอนนี้เราต้องการแสดงสิ่งที่ArrayList
ประกอบด้วยวัตถุบางอย่าง ในกรณีนี้ ประเภทการเชื่อมต่อจะเป็นแบบรวมกลุ่ม หน่วยในกรณีนี้คือArrayList
, เพราะ มันมีวัตถุอื่นอยู่ เราเลือกการรวมกลุ่มเนื่องจากวัตถุในรายการสามารถอยู่ได้โดยไม่มีรายการ: พวกมันไม่ได้เป็นส่วนหนึ่งของมัน อายุการใช้งานไม่ได้เชื่อมโยงกับอายุการใช้งานของรายการ Aggregate แปลจากภาษาละตินว่า "ประกอบ" นั่นคือบางสิ่งที่ประกอบด้วยบางสิ่ง ตัวอย่างเช่นในชีวิตมีหน่วยสูบน้ำซึ่งประกอบด้วยปั๊มและมอเตอร์ สามารถถอดประกอบตัวเครื่องได้ โดยเหลือส่วนประกอบบางส่วนไว้ เช่น ขายหรือเอาไปลงยูนิตอื่น. รายการก็เช่นกัน และแสดงเป็นรูปเพชรว่างใกล้หน่วยและเป็นเส้นต่อเนื่องกัน ลองพรรณนามันดังนี้:
class Object{
}
ArrayList o- Object
ตอนนี้เราต้องการแสดงให้เห็นว่าArrayList
คลาสนี้LinkedList
มีNode
คอนเทนเนอร์ที่อ้างถึงข้อมูลที่เก็บไว้ ซึ่ง ต่างจาก ในกรณีนี้Node
พวกเขาเป็นส่วนหนึ่งของตนเองLinkedList
และไม่สามารถอยู่แยกกันได้ Node
ไม่ใช่เนื้อหาที่จัดเก็บโดยตรง แต่มีเพียงลิงก์ไปยังเนื้อหานั้น ตัวอย่างเช่น เมื่อเราเพิ่มในLinkedList
แถว เราจะเพิ่ม ใหม่Node
ซึ่งมีลิงก์ไปยังแถวนั้น รวมถึงลิงก์ไปยังแถวก่อนหน้าและถัดNode
ไป การสื่อสารประเภทนี้เรียกว่าองค์ประกอบ . ในการแสดงคอมโพสิต (ส่วนที่ประกอบด้วยชิ้นส่วนต่างๆ) จะต้องวาดเพชรสีโดยมีเส้นต่อเนื่องนำไป ตอนนี้เรามาเขียนสิ่งนี้เป็นการแสดงข้อความของการเชื่อมต่อ:
class Node{
}
LinkedList *-- Node
และตอนนี้เราต้องเรียนรู้วิธีแสดงความสัมพันธ์ที่สำคัญอีกประเภทหนึ่ง - ความสัมพันธ์แบบพึ่งพา มันถูกใช้เมื่อคลาสหนึ่งใช้อีกคลาสหนึ่ง และคลาสนั้นไม่มีคลาสที่ถูกใช้และไม่ใช่คลาสที่สืบทอด ตัวอย่างเช่นLinkedList
พวกเขาArrayList
รู้วิธีสร้างไฟล์ListIterator
. เรามาแสดงสิ่งนี้เป็นลูกศรที่มีเส้นประ:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
หลังจากทั้งหมดนี้จะเป็นดังนี้:


ระบบอัตโนมัติ
มีหลายวิธีในการสร้างไดอะแกรม PlantUML โดยอัตโนมัติ ตัวอย่างเช่นIdeaมี ปลั๊กอิน SketchITแต่ไม่ได้วาดอย่างถูกต้องนัก ตัวอย่างเช่น การใช้งานอินเทอร์เฟซถูกวาดอย่างไม่ถูกต้อง (แสดงเป็นการสืบทอด) นอกจากนี้ยังมีตัวอย่างบนอินเทอร์เน็ตเกี่ยวกับวิธีสร้างสิ่งนี้ลงในวงจรการสร้างของโปรเจ็กต์ของคุณ สมมติว่ามีตัวอย่างสำหรับMavenที่ใช้ uml - java-docklet เพื่อแสดงให้เห็นว่าเราดำเนินการอย่างไร เราจะใช้Maven Archetypeเพื่อสร้างโปรเจ็กต์ Maven อย่างรวดเร็ว เรามาดำเนินการคำสั่ง:mvn archetype:generate
เมื่อระบบขอให้เลือกตัวกรอง ( เลือกตัวเลขหรือใช้ตัวกรอง ) ปล่อยให้เป็นค่าเริ่มต้นโดยเพียงแค่กด Enter นี่จะเป็น " maven-archetype-quickstart " เสมอ เลือกเวอร์ชันล่าสุด ต่อไปเราจะตอบคำถามและสร้างโครงการให้เสร็จสิ้น:

mvn clean install
: และmvn javadoc:javadoc
. ตอนนี้ ถ้าเราเปิดเอกสารที่สร้างขึ้น (explorer target\site\apidocs\index.html) เราจะเห็นไดอะแกรม UML อย่างไรก็ตาม การใช้งานจะแสดงอย่างถูกต้องแล้วที่นี่)
GO TO FULL VERSION