JavaRush /จาวาบล็อก /Random-TH /UML: จากทฤษฎีสู่การปฏิบัติ
Viacheslav
ระดับ

UML: จากทฤษฎีสู่การปฏิบัติ

เผยแพร่ในกลุ่ม

การแนะนำ

ฉันคิดว่าทุกคนคงเคยได้ยินคำพูดที่ว่า “ วัดสองครั้ง ตัดครั้งเดียว ” มันเหมือนกันในการเขียนโปรแกรม ควรคำนึงถึงการใช้งานก่อนที่จะใช้เวลาดำเนินการจะดีกว่าเสมอ บ่อยครั้งในระหว่างการนำไปใช้งาน คุณจะต้องสร้างคลาสและประดิษฐ์ปฏิสัมพันธ์ระหว่างคลาสเหล่านั้น และบ่อยครั้งที่การแสดงภาพสิ่งนี้สามารถช่วยแก้ไขปัญหาด้วยวิธีที่ถูกต้องที่สุด นี่คือจุดที่ UMLช่วยเรา

UML คืออะไร?

หากคุณดูภาพในเครื่องมือค้นหา จะเห็นได้ชัดว่าUMLเป็นเรื่องเกี่ยวกับไดอะแกรม ลูกศร และสี่เหลี่ยม สิ่งสำคัญคือ UML แปลเป็นภาษา Unified Modeling คำว่า Unified มีความสำคัญที่นี่ นั่นคือรูปภาพของเราไม่เพียงแต่เราจะเข้าใจเท่านั้น แต่ยังรวมถึงผู้อื่นที่รู้จัก UML ด้วย ปรากฎว่านี่เป็นภาษาสากลสำหรับการวาดไดอะแกรม

UML: จากทฤษฎีสู่การปฏิบัติ - 1

ดังที่วิกิพีเดียกล่าวไว้

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 ตอนนี้ผ่านเมนูบริบทสำหรับชื่อคลาส ให้เลือก "ไดอะแกรม" -> "แสดงป๊อปอัปไดอะแกรม" เป็นผลให้เราได้แผนภาพที่สวยงาม:
UML: จากทฤษฎีสู่การปฏิบัติ - 2
แต่ถ้าคุณต้องการวาดด้วยตัวเองแต่ไม่มี Idea เวอร์ชัน Ultimate ล่ะ? หากเราใช้ IntelliJ Idea Community Edition เราก็ไม่มีทางเลือกอื่น ในการทำเช่นนี้ คุณต้องเข้าใจว่าไดอะแกรม UML มีโครงสร้างอย่างไร ก่อนอื่นเราจะต้องติดตั้งGraphviz . นี่คือชุดยูทิลิตี้สำหรับการแสดงกราฟ มันถูกใช้โดยปลั๊กอินที่เราจะใช้ หลังการติดตั้ง คุณจะต้องเพิ่ม ไดเร็กทอรี bin จาก ไดเร็กทอรีการติดตั้งGraphviz ไปยัง ตัวแปรสภาพแวดล้อมPATH ของ คุณ หลังจากนั้นใน IntelliJ Idea ให้เลือก File -> Settings จากเมนู ในหน้าต่าง "การตั้งค่า" เลือกหมวดหมู่ "ปลั๊กอิน" คลิกปุ่ม "เรียกดูที่เก็บ" และติดตั้งปลั๊กอินการรวม PlantUML ทำไมPlantUML ถึงดี ? มันใช้ภาษาคำอธิบายกราฟที่เรียกว่า " จุด " เพื่ออธิบาย UML และช่วยให้เป็นภาษาสากลมากขึ้น เพราะ... ภาษานี้ใช้ไม่เพียงแต่โดย PlantUML เท่านั้น ยิ่งไปกว่านั้น ทุกสิ่งที่เราทำด้านล่างสามารถทำได้ไม่เพียงแต่ใน IDE เท่านั้น แต่ยังรวมถึงบริการออนไลน์planttext.comด้วย หลังจากติดตั้งปลั๊กอิน PlantUML เราจะสามารถสร้างไดอะแกรม UML ผ่าน "ไฟล์" -> "ใหม่" มาสร้างไดอะแกรมประเภท "คลาส UML" กัน ในระหว่างกระบวนการนี้ เทมเพลตพร้อมตัวอย่างจะถูกสร้างขึ้นโดยอัตโนมัติ มาลบเนื้อหาและสร้างบทความของเราเองพร้อมบทความจาก Habr: ความสัมพันธ์ของคลาส - จาก UML ไปจนถึงโค้ด และเพื่อทำความเข้าใจวิธีการพรรณนาสิ่ง นี้ในข้อความ ลองใช้คู่มือ PlantUML: plantuml class-diagram ในตอนเริ่มต้นจะมีตารางที่แสดงให้เห็นว่าควรอธิบายการเชื่อมต่ออย่างไร:
UML: จากทฤษฎีสู่การปฏิบัติ - 3
เรายังสามารถดูการเชื่อมต่อได้ที่นี่: “ ความสัมพันธ์ระหว่างคลาสใน UML ตัวอย่าง ” จากวัสดุเหล่านี้ มาเริ่มสร้างแผนภาพ UML ของเรากันดีกว่า มาเพิ่มเนื้อหาต่อไปนี้เพื่ออธิบายทั้งสองคลาส:

@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
หลังจากทั้งหมดนี้จะเป็นดังนี้:
UML: จากทฤษฎีสู่การปฏิบัติ - 4
คุณสามารถลงรายละเอียดได้มากเท่าที่จำเป็น การกำหนดทั้งหมดระบุไว้ที่นี่: " PlantUML - Class Diagram " นอกจากนี้การวาดไดอะแกรมดังกล่าวไม่มีอะไรเหนือธรรมชาติและเมื่อทำงานของคุณคุณสามารถวาดด้วยมือได้อย่างรวดเร็ว สิ่งนี้จะพัฒนาทักษะของคุณในการคิดผ่านสถาปัตยกรรมแอปพลิเคชัน และช่วยให้คุณระบุข้อบกพร่องของโครงสร้างคลาสได้ตั้งแต่เนิ่นๆ แทนที่จะใช้เวลาทั้งวันไปกับการนำโมเดลที่ไม่ถูกต้องไปใช้ ฉันคิดว่านั่นเป็นเหตุผลที่ดีที่จะลองดู? )
UML: จากทฤษฎีสู่การปฏิบัติ - 5

ระบบอัตโนมัติ

มีหลายวิธีในการสร้างไดอะแกรม PlantUML โดยอัตโนมัติ ตัวอย่างเช่นIdeaมี ปลั๊กอิน SketchITแต่ไม่ได้วาดอย่างถูกต้องนัก ตัวอย่างเช่น การใช้งานอินเทอร์เฟซถูกวาดอย่างไม่ถูกต้อง (แสดงเป็นการสืบทอด) นอกจากนี้ยังมีตัวอย่างบนอินเทอร์เน็ตเกี่ยวกับวิธีสร้างสิ่งนี้ลงในวงจรการสร้างของโปรเจ็กต์ของคุณ สมมติว่ามีตัวอย่างสำหรับMavenที่ใช้ uml - java-docklet เพื่อแสดงให้เห็นว่าเราดำเนินการอย่างไร เราจะใช้Maven Archetypeเพื่อสร้างโปรเจ็กต์ Maven อย่างรวดเร็ว เรามาดำเนินการคำสั่ง: mvn archetype:generate เมื่อระบบขอให้เลือกตัวกรอง ( เลือกตัวเลขหรือใช้ตัวกรอง ) ปล่อยให้เป็นค่าเริ่มต้นโดยเพียงแค่กด Enter นี่จะเป็น " maven-archetype-quickstart " เสมอ เลือกเวอร์ชันล่าสุด ต่อไปเราจะตอบคำถามและสร้างโครงการให้เสร็จสิ้น:
UML: จากทฤษฎีสู่การปฏิบัติ - 6
เนื่องจาก Maven ไม่ใช่จุดเน้นของบทความนี้ คุณจึงสามารถพบคำตอบสำหรับคำถามเกี่ยวกับ Maven ของคุณได้ในMaven Users Center ในโปรเจ็กต์ที่สร้างขึ้น ให้เปิดไฟล์คำอธิบายโปรเจ็กต์ pom.xmlเพื่อแก้ไข. มาคัดลอกเนื้อหาจากคำอธิบายของ uml-java-docklet ที่ติดตั้งลงไป ไม่พบสิ่งประดิษฐ์ที่ใช้ในคำอธิบายในพื้นที่เก็บข้อมูล Maven Central แต่มันได้ผลสำหรับฉันด้วยสิ่งนี้: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 นั่นคือในคำอธิบายนั้น คุณเพียงแค่ต้องแทนที่groupIdจาก “ info.leadinglight ” ด้วย “ com.chfourie ” และตั้งค่าเวอร์ชันเป็น “ 1.0.0 ” หลังจากนี้ เราสามารถรันคำสั่งเหล่านี้ ในไดเร็กทอรีที่มีไฟล์ pom.xmlmvn clean install : และmvn javadoc:javadoc. ตอนนี้ ถ้าเราเปิดเอกสารที่สร้างขึ้น (explorer target\site\apidocs\index.html) เราจะเห็นไดอะแกรม UML อย่างไรก็ตาม การใช้งานจะแสดงอย่างถูกต้องแล้วที่นี่)

บทสรุป

อย่างที่คุณเห็น UML ช่วยให้คุณเห็นภาพโครงสร้างของแอปพลิเคชันของคุณ นอกจากนี้ UML ไม่ได้จำกัดอยู่เพียงเท่านี้ การใช้ UML คุณสามารถอธิบายกระบวนการต่างๆ ภายในบริษัทของคุณ หรืออธิบายกระบวนการทางธุรกิจที่ฟังก์ชันที่คุณกำลังเขียนดำเนินการอยู่ UML มีประโยชน์สำหรับคุณเป็นการส่วนตัวเพียงใดนั้นขึ้นอยู่กับคุณในการตัดสินใจ แต่การใช้เวลาอ่านรายละเอียดเพิ่มเติมจะมีประโยชน์ในทุกกรณี #เวียเชสลาฟ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION