JavaRush /Java Blog /Random-ID /UML: dari teori ke praktik
Viacheslav
Level 3

UML: dari teori ke praktik

Dipublikasikan di grup Random-ID

Perkenalan

Saya rasa semua orang di masa kanak-kanak pernah mendengar pepatah seperti “ Ukur dua kali, potong sekali .” Hal yang sama terjadi dalam pemrograman. Itu selalu lebih baik untuk memikirkan penerapannya sebelum Anda menghabiskan waktu untuk melaksanakannya. Seringkali selama implementasi Anda harus membuat kelas dan menciptakan interaksinya. Dan seringkali representasi visual dari hal ini dapat membantu memecahkan masalah dengan cara yang paling tepat. Di sinilah UML membantu kita .

Apa itu UML?

Jika Anda melihat gambar di mesin pencari, akan terlihat jelas bahwa UML adalah sesuatu tentang diagram, panah, dan kotak. Yang penting adalah UML diterjemahkan ke dalam Unified Modeling Language . Kata Unified penting di sini. Artinya, gambar kita tidak hanya akan dipahami oleh kita sendiri, tetapi juga oleh orang lain yang mengetahui UML. Ternyata ini adalah bahasa internasional untuk menggambar diagram.

UML: dari teori ke praktik - 1

Seperti yang dikatakan Wikipedia

UML adalah bahasa deskripsi grafis untuk pemodelan objek dalam pengembangan perangkat lunak, pemodelan proses bisnis, desain sistem, dan menampilkan struktur organisasi.
Hal paling menarik yang tidak semua orang pikirkan atau sadari adalah UML memiliki spesifikasi. Apalagi ada spesifikasi UML2. Rincian lebih lanjut tentang spesifikasi dapat ditemukan di situs web Object Management Group . Sebenarnya kelompok ini sedang mengembangkan spesifikasi UML. Menarik juga bahwa UML tidak terbatas pada mendeskripsikan struktur kelas. Ada banyak jenis diagram UML. Penjelasan singkat tentang jenis-jenis diagram UML dapat dilihat di Wikipedia yang sama: Diagram UML atau di video oleh Timur Batyrshinov Review diagram UML . UML juga banyak digunakan untuk menggambarkan berbagai proses, misalnya di sini: Sistem masuk tunggal menggunakan JWT . Kembali ke penggunaan diagram kelas UML, perlu diperhatikan buku Head First: Design Patterns , di mana polanya diilustrasikan oleh diagram UML yang sama. Ternyata UML memang digunakan. Dan ternyata pengetahuan dan pemahaman penerapannya merupakan keterampilan yang cukup bermanfaat.

Aplikasi

Mari kita lihat bagaimana Anda dapat bekerja dengan UML yang sama dari IDE. Mari kita ambil IntelliJ Idea sebagai IDE . Jika kita menggunakan IntelliJ Idea Ultimate , maka kita akan menginstal plugin “ Dukungan UML ”. Ini memungkinkan Anda untuk secara otomatis menghasilkan diagram kelas yang indah. Misalnya, menggunakan Ctrl+N atau item menu "Navigate" -> "Class" kita pergi ke kelas ArrayList . Sekarang, melalui menu konteks untuk nama kelas, pilih “Diagram” -> “Tampilkan diagram popup”. Hasilnya, kami mendapatkan diagram yang indah:
UML: dari teori ke praktik - 2
Namun bagaimana jika Anda ingin menggambarnya sendiri, dan Anda bahkan tidak memiliki Idea versi Ultimate? Jika kami menggunakan IntelliJ Idea Community Edition, maka kami tidak punya pilihan lain. Untuk melakukan ini, Anda perlu memahami bagaimana diagram UML disusun. Pertama, kita perlu menginstal Graphviz . Ini adalah seperangkat utilitas untuk memvisualisasikan grafik. Ini digunakan oleh plugin yang akan kita gunakan. Setelah instalasi, Anda perlu menambahkan direktori bin dari direktori instalasi Graphviz ke variabel lingkungan PATH Anda . Setelah itu, di IntelliJ Idea, pilih File -> Settings dari menu. Di jendela "Pengaturan", pilih kategori "Plugin", klik tombol "Jelajahi repositori" dan instal plugin integrasi PlantUML . Mengapa PlantUML begitu bagus ? Ia menggunakan bahasa deskripsi grafik yang disebut " dot " untuk mendeskripsikan UML dan ini memungkinkannya menjadi lebih universal, karena... Bahasa ini tidak hanya digunakan oleh PlantUML. Selain itu, semua yang kami lakukan di bawah ini dapat dilakukan tidak hanya di IDE, tetapi juga di layanan online planttext.com . Setelah menginstal plugin PlantUML, kita akan dapat membuat diagram UML melalui “File” -> “New”. Mari kita membuat diagram tipe "kelas UML". Selama proses ini, templat dengan contoh dibuat secara otomatis. Mari kita hapus isinya dan buat sendiri, berbekal artikel dari Habr: Hubungan kelas - dari UML ke kode . Dan untuk memahami bagaimana menggambarkan hal ini dalam teks, mari kita lihat manual PlantUML: plantuml class-diagram . Pada awalnya ada tabel yang menunjukkan bagaimana koneksi harus dijelaskan:
UML: dari teori ke praktek - 3
Kita juga dapat melihat koneksinya sendiri di sini: " Hubungan antar kelas di UML. Contohnya ." Berdasarkan bahan-bahan ini, mari kita mulai membuat diagram UML kita. Mari tambahkan konten berikut yang menjelaskan kedua kelas:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Untuk melihat hasilnya di Idea, pilih "View" -> "Tool Windows" -> "PlantUML". Kita hanya akan mendapatkan dua kotak yang mewakili kelas. Seperti yang kita ketahui, kedua kelas ini mengimplementasikan antarmuka Daftar. Hubungan kelas ini disebut implementasi. Untuk menggambarkan hubungan seperti itu, gunakan panah dengan garis putus-putus. Mari kita gambarkan:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- salah satu kelas anak Collection. Artinya, ia mewarisi dari Collection. Hubungan ini disebut generalisasi. Bentuknya seperti panah dengan garis kontinu beraturan. Mari kita gambarkan:
interface Collection
Collection <|-- List
Untuk jenis koneksi berikut, tambahkan ke deskripsi kelas ArrayListentri tentang paket array elemen pribadi:
~Object[] elementData
Sekarang kami ingin menunjukkan apa yang ArrayListberisi beberapa objek. Dalam hal ini, jenis koneksinya adalah agregasi . Satuan dalam hal ini adalah ArrayList, karena itu berisi objek lain. Kami memilih agregasi karena objek dalam daftar dapat hidup tanpa daftar: objek tersebut bukan bagian integral darinya. Masa hidup mereka tidak terikat dengan masa hidup daftar tersebut. Agregat diterjemahkan dari bahasa Latin sebagai “berkumpul”, yaitu sesuatu yang terdiri dari sesuatu. Misalnya dalam kehidupan ada unit pompa yang terdiri dari pompa dan motor. Unitnya sendiri bisa dibongkar, menyisakan beberapa komponennya. Misalnya untuk dijual atau dimasukkan ke unit lain. Begitu juga daftarnya. Dan ini dinyatakan dalam bentuk berlian kosong di dekat satuan dan garis kontinu. Mari kita gambarkan seperti ini:
class Object{
}
ArrayList o- Object
Sekarang kami ingin menunjukkan bahwa, tidak seperti ArrayList, kelas LinkedListberisi Nodewadah yang merujuk ke data yang disimpan. Dalam hal ini, Nodemereka adalah bagian dari dirinya sendiri LinkedListdan tidak dapat hidup terpisah. Nodebukan konten yang disimpan secara langsung, tetapi hanya berisi link ke sana. Misalnya, saat kita menambahkan LinkedListsebuah baris, kita menambahkan yang baru Node, yang berisi link ke baris tersebut, serta link ke baris sebelumnya dan berikutnya Node. Jenis komunikasi ini disebut komposisi . Untuk menampilkan komposit (yang terdiri dari bagian-bagian), digambar berlian berwarna, dengan garis kontinu mengarah ke sana. Sekarang mari kita tulis ini sebagai tampilan teks dari koneksi:
class Node{
}
LinkedList *-- Node
Dan sekarang kita perlu belajar bagaimana menampilkan jenis hubungan penting lainnya - hubungan ketergantungan . Ini digunakan ketika satu kelas menggunakan kelas lain, dan kelas tersebut tidak berisi kelas yang digunakan dan bukan merupakan turunannya. Misalnya, LinkedListmereka ArrayListtahu cara membuat ListIterator. Mari kita tampilkan ini sebagai panah dengan garis putus-putus:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Setelah semuanya, tampilannya akan seperti ini:
UML: dari teori ke praktik - 4
Anda dapat menjelaskannya sedetail yang diperlukan. Semua sebutan ditunjukkan di sini: " PlantUML - Diagram Kelas ". Selain itu, tidak ada yang supernatural dalam menggambar diagram seperti itu, dan saat mengerjakan tugas Anda, Anda dapat dengan cepat menggambarnya dengan tangan. Hal ini akan mengembangkan keterampilan Anda dalam memikirkan arsitektur aplikasi dan membantu Anda mengidentifikasi kelemahan struktur kelas sejak dini, dibandingkan setelah Anda menghabiskan waktu seharian untuk menerapkan model yang salah. Saya pikir itu alasan bagus untuk mencobanya? )
UML: dari teori ke praktik - 5

Otomatisasi

Ada berbagai cara untuk menghasilkan diagram PlantUML secara otomatis. Misalnya, Idea memiliki plugin SketchIT , tetapi plugin tersebut tidak menggambarnya dengan benar. Misalnya, implementasi antarmuka digambar secara tidak benar (ditampilkan sebagai warisan). Ada juga contoh di Internet tentang cara memasukkannya ke dalam siklus hidup proyek Anda. Katakanlah ada contoh untuk Maven menggunakan uml-java-docklet . Untuk menunjukkan bagaimana hal ini dilakukan, kita akan menggunakan Maven Archetype untuk membuat proyek Maven dengan cepat. Mari kita jalankan perintah: mvn archetype:generate Ketika diminta untuk memilih filter ( Pilih nomor atau terapkan filter ), biarkan default hanya dengan menekan Enter. Ini akan selalu menjadi " maven-archetype-quickstart ". Pilih versi terbaru. Selanjutnya, kami menjawab pertanyaan dan menyelesaikan pembuatan proyek:
UML: dari teori ke praktik - 6
Karena Maven bukan fokus artikel ini, jawaban atas pertanyaan Anda tentang Maven dapat ditemukan di Pusat Pengguna Maven . Dalam proyek yang dihasilkan, buka file deskripsi proyek, pom.xml, untuk diedit . Mari kita salin isi dari deskripsi instalasi uml-java-docklet ke dalamnya . Artefak yang digunakan dalam deskripsi tidak dapat ditemukan di repositori Maven Central. Tapi itu berhasil bagi saya dengan ini: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . Artinya, pada deskripsi tersebut Anda hanya perlu mengganti groupId dari “ info.leadinglight ” dengan “ com.chfourie ” dan mengatur versinya menjadi “ 1.0.0 ”. Setelah ini, kita dapat menjalankan perintah berikut di direktori tempat file pom.xmlmvn clean install berada: dan mvn javadoc:javadoc. Sekarang, jika kita membuka dokumentasi yang dihasilkan (explorer target\site\apidocs\index.html), kita akan melihat diagram UML. Omong-omong, implementasinya sudah ditampilkan dengan benar di sini)

Kesimpulan

Seperti yang Anda lihat, UML memungkinkan Anda memvisualisasikan struktur aplikasi Anda. Selain itu, UML tidak terbatas pada hal ini saja. Dengan menggunakan UML, Anda dapat mendeskripsikan berbagai proses dalam perusahaan Anda atau mendeskripsikan proses bisnis di mana fungsi yang Anda tulis beroperasi. Seberapa berguna UML bagi Anda secara pribadi terserah Anda untuk memutuskan, tetapi meluangkan waktu untuk membacanya secara lebih rinci akan berguna dalam hal apa pun. #Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION