JavaRush /Blog Java /Random-MS /UML: dari teori kepada amalan

UML: dari teori kepada amalan

Diterbitkan dalam kumpulan

pengenalan

Saya rasa semua orang pernah mendengar pada zaman kanak-kanak pepatah seperti " Ukur dua kali, potong sekali ." Ia sama dalam pengaturcaraan. Adalah lebih baik untuk memikirkan pelaksanaan sebelum anda meluangkan masa untuk melaksanakannya. Selalunya semasa pelaksanaan anda perlu membuat kelas dan mencipta interaksi mereka. Dan selalunya gambaran visual ini boleh membantu menyelesaikan masalah dengan cara yang paling betul. Di sinilah UML membantu kami .

Apakah UML?

Jika anda melihat gambar dalam enjin carian, ia akan menjadi jelas bahawa UML adalah sesuatu tentang gambar rajah, anak panah dan segi empat sama. Apa yang penting ialah UML diterjemahkan kepada Bahasa Pemodelan Bersepadu . Perkataan Unified adalah penting di sini. Maksudnya, gambar kita akan difahami bukan sahaja oleh kita, tetapi juga oleh orang lain yang mengenali UML. Ternyata ini adalah bahasa antarabangsa untuk melukis gambar rajah.

UML: dari teori kepada amalan - 1

Seperti kata Wikipedia

UML ialah bahasa penerangan grafik untuk pemodelan objek dalam pembangunan perisian, pemodelan proses perniagaan, reka bentuk sistem dan memaparkan struktur organisasi.
Perkara paling menarik yang tidak semua orang fikirkan atau sedar ialah UML mempunyai spesifikasi. Selain itu, terdapat juga spesifikasi UML2. Butiran lanjut tentang spesifikasi boleh didapati di laman web Kumpulan Pengurusan Objek . Sebenarnya, kumpulan ini sedang membangunkan spesifikasi UML. Menarik juga bahawa UML tidak terhad kepada menerangkan struktur kelas. Terdapat banyak jenis gambar rajah UML. Penerangan ringkas tentang jenis rajah UML boleh dilihat dalam Wikipedia yang sama: rajah UML atau dalam video oleh Timur Batyrshinov Kajian rajah UML . UML juga digunakan secara meluas untuk menerangkan pelbagai proses, contohnya di sini: Log masuk tunggal menggunakan JWT . Kembali kepada penggunaan gambar rajah kelas UML, perlu diperhatikan buku Head First: Design Patterns , yang mana coraknya digambarkan oleh gambar rajah UML yang sama. Ternyata UML memang digunakan. Dan ternyata pengetahuan dan pemahaman tentang aplikasinya adalah kemahiran yang berguna.

Permohonan

Mari lihat bagaimana anda boleh bekerja dengan UML yang sama ini daripada IDE. Mari kita ambil IntelliJ Idea sebagai IDE . Jika kami menggunakan IntelliJ Idea Ultimate , maka kami akan memasang pemalam " Sokongan UML " di luar kotak. Ia membolehkan anda menjana gambar rajah kelas yang cantik secara automatik. Contohnya, menggunakan Ctrl+N atau item menu "Navigate" -> "Class" kita pergi ke ArrayList class . Sekarang, melalui menu konteks untuk nama kelas, pilih "Diagram" -> "Tunjukkan gambar rajah pop timbul". Akibatnya, kami mendapat gambar rajah yang indah:
UML: dari teori kepada amalan - 2
Tetapi bagaimana jika anda mahu melukisnya sendiri, dan anda tidak mempunyai versi Idea Terunggul? Jika kami menggunakan IntelliJ Idea Community Edition, maka kami tidak mempunyai pilihan lain. Untuk melakukan ini, anda perlu memahami bagaimana gambarajah UML sedemikian distrukturkan. Pertama, kita perlu memasang Graphviz . Ini ialah satu set utiliti untuk menggambarkan graf. Ia digunakan oleh plugin yang akan kami gunakan. Selepas pemasangan, anda perlu menambah direktori bin daripada direktori pemasangan Graphviz ke pembolehubah persekitaran PATH anda . Selepas itu, dalam IntelliJ Idea, pilih Fail -> Tetapan dari menu. Dalam tetingkap "Tetapan", pilih kategori "Pemalam", klik butang "Semak imbas repositori" dan pasang pemalam penyepaduan PlantUML . Mengapa PlantUML begitu baik ? Ia menggunakan bahasa penerangan graf yang dipanggil " titik " untuk menerangkan UML dan ini membolehkannya menjadi lebih universal, kerana... Bahasa ini digunakan bukan sahaja oleh PlantUML. Selain itu, semua yang kami lakukan di bawah boleh dilakukan bukan sahaja dalam IDE, tetapi juga dalam perkhidmatan dalam talian planttext.com . Selepas memasang pemalam PlantUML, kami akan dapat membuat gambar rajah UML melalui "Fail" -> "Baharu". Mari buat gambar rajah jenis "kelas UML". Semasa proses ini, templat dengan contoh dijana secara automatik. Mari padamkan kandungannya dan buat sendiri, bersenjatakan artikel daripada Habr: Hubungan kelas - daripada UML kepada kod . Dan untuk memahami cara menggambarkan ini dalam teks, mari ambil manual PlantUML: plantuml class-diagram . Pada permulaannya terdapat jadual yang menunjukkan bagaimana sambungan harus diterangkan:
UML: dari teori kepada amalan - 3
Kita juga boleh melihat sambungan itu sendiri di sini: " Hubungan antara kelas dalam UML. Contoh ." Berdasarkan bahan-bahan ini, mari mula membuat gambar rajah UML kami. Mari tambah kandungan berikut yang menerangkan dua kelas:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Untuk melihat hasil dalam Idea, pilih "View" -> "Tool Windows" -> "PlantUML". Kami hanya akan mendapat dua petak yang mewakili kelas. Seperti yang kita ketahui, kedua-dua kelas ini melaksanakan antara muka Senarai. Hubungan kelas ini dipanggil pelaksanaan. Untuk menggambarkan sambungan sedemikian, gunakan anak panah dengan garis putus-putus. Mari kita gambarkan:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- salah satu kelas kanak-kanak Collection. Iaitu, ia mewarisi daripada Koleksi. Sambungan ini dipanggil generalisasi. Ia kelihatan seperti anak panah dengan garis berterusan biasa. Mari kita gambarkan:
interface Collection
Collection <|-- List
Untuk jenis sambungan berikut, tambahkan pada perihalan kelas ArrayListentri tentang susunan elemen peribadi pakej :
~Object[] elementData
Sekarang kami ingin menunjukkan apa yang ArrayListmengandungi beberapa objek. Dalam kes ini, jenis sambungan akan menjadi pengagregatan . Unit dalam kes ini ialah ArrayList, kerana ia mengandungi objek lain. Kami memilih pengagregatan kerana objek dalam senarai boleh hidup tanpa senarai: ia bukan sebahagian daripadanya. Seumur hidup mereka tidak terikat dengan seumur hidup senarai itu. Agregat diterjemahkan daripada bahasa Latin sebagai "berhimpun," iaitu sesuatu yang terdiri daripada sesuatu. Sebagai contoh, dalam kehidupan, terdapat unit pengepaman, yang terdiri daripada pam dan motor. Unit itu sendiri boleh dibongkar, meninggalkan beberapa komponennya. Sebagai contoh, untuk menjual atau dimasukkan ke dalam unit lain. Begitu juga senarainya. Dan ini dinyatakan dalam bentuk berlian kosong berhampiran unit dan garis berterusan. Mari kita gambarkan seperti ini:
class Object{
}
ArrayList o- Object
Sekarang kami ingin menunjukkan bahawa, tidak seperti ArrayList, kelas LinkedListmengandungi Nodebekas yang merujuk kepada data yang disimpan. Dalam kes ini, Nodemereka adalah sebahagian daripada diri mereka sendiri LinkedListdan tidak boleh hidup secara berasingan. Nodebukan kandungan yang disimpan secara langsung, tetapi hanya mengandungi pautan kepadanya. Sebagai contoh, apabila kami menambah pada LinkedListbaris, kami menambah baharu Node, yang mengandungi pautan ke baris itu, serta pautan ke sebelumnya dan seterusnya Node. Jenis komunikasi ini dipanggil komposisi . Untuk memaparkan komposit (yang terdiri daripada bahagian), berlian berwarna dilukis, dengan garisan berterusan menuju ke sana. Mari kita tulis ini sebagai paparan teks sambungan:
class Node{
}
LinkedList *-- Node
Dan sekarang kita perlu belajar cara memaparkan satu lagi jenis perhubungan yang penting - perhubungan pergantungan . Ia digunakan apabila satu kelas menggunakan yang lain, tetapi kelas itu tidak mengandungi kelas yang digunakan dan bukan keturunannya. Contohnya, LinkedListmereka ArrayListtahu cara mencipta ListIterator. Mari kita paparkan ini sebagai anak panah dengan garis putus-putus:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Selepas semua ini ia akan kelihatan seperti ini:
UML: dari teori kepada amalan - 4
Anda boleh pergi ke seberapa banyak perincian yang diperlukan. Semua sebutan ditunjukkan di sini: " PlantUML - Diagram Kelas ". Di samping itu, tiada perkara ghaib dalam melukis gambar rajah sedemikian, dan apabila mengerjakan tugas anda, anda boleh melukisnya dengan cepat dengan tangan. Ini akan mengembangkan kemahiran anda dalam berfikir melalui seni bina aplikasi dan membantu anda mengenal pasti kelemahan struktur kelas lebih awal, dan bukannya selepas anda menghabiskan hari melaksanakan model yang salah. Saya rasa itu sebab yang baik untuk mencubanya? )
UML: dari teori kepada amalan - 5

Automasi

Terdapat pelbagai cara untuk menjana gambar rajah PlantUML secara automatik. Contohnya, Idea mempunyai pemalam SketchIT , tetapi ia tidak melukisnya dengan betul. Sebagai contoh, pelaksanaan antara muka dilukis dengan salah (dipaparkan sebagai warisan). Terdapat juga contoh di Internet tentang cara membina ini ke dalam kitaran hayat binaan projek anda. Katakan terdapat contoh untuk Maven menggunakan uml-java-docklet . Untuk menunjukkan cara ini dilakukan, kami akan menggunakan Maven Archetype untuk mencipta projek Maven dengan cepat. Mari laksanakan arahan: mvn archetype:generate Apabila diminta untuk memilih penapis ( Pilih nombor atau gunakan penapis ), biarkan lalai dengan hanya menekan Enter. Ini akan sentiasa menjadi " maven-archetype-quickstart ". Pilih versi terkini. Seterusnya, kami menjawab soalan dan menyelesaikan penciptaan projek:
UML: dari teori kepada amalan - 6
Memandangkan Maven bukan fokus artikel ini, jawapan kepada soalan Maven anda boleh didapati di Pusat Pengguna Maven . Dalam projek yang dijana, buka fail penerangan projek, pom.xml, untuk mengedit . Mari salin kandungan daripada perihalan pemasangan uml-java-docklet ke dalamnya . Artifak yang digunakan dalam huraian tidak dapat ditemui dalam repositori Maven Central. Tetapi ia berfungsi untuk saya dengan ini: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Iaitu, dalam perihalan itu anda hanya perlu menggantikan groupId daripada “ info.leadinglight ” dengan “ com.chfourie ” dan tetapkan versi kepada “ 1.0.0 ”. Selepas ini, kita boleh melaksanakan arahan ini dalam direktori di mana fail pom.xmlmvn clean install terletak: dan mvn javadoc:javadoc. Sekarang, jika kita membuka dokumentasi yang dijana (explorer target\site\apidocs\index.html), kita akan melihat gambar rajah UML. By the way, pelaksanaan sudah dipaparkan dengan betul di sini)

Kesimpulan

Seperti yang anda lihat, UML membolehkan anda memvisualisasikan struktur aplikasi anda. Selain itu, UML tidak terhad kepada ini sahaja. Menggunakan UML, anda boleh menerangkan pelbagai proses dalam syarikat anda atau menerangkan proses perniagaan di mana fungsi yang anda tulis beroperasi. Sejauh mana UML berguna untuk anda secara peribadi terpulang kepada anda untuk membuat keputusan, tetapi meluangkan masa untuk membacanya dengan lebih terperinci akan berguna dalam apa jua keadaan. #Viacheslav
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION