{"id":527,"date":"2026-08-14T08:16:11","date_gmt":"2026-08-14T08:16:11","guid":{"rendered":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/"},"modified":"2026-09-03T15:28:09","modified_gmt":"2026-09-03T15:28:09","slug":"1106-2","status":"publish","type":"post","link":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/","title":{"rendered":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi"},"content":{"rendered":"<h2>Pendahuluan<\/h2>\n<p>Dalam rekayasa perangkat lunak berorientasi objek, <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/uml-class-diagram-tutorial\/\">Diagram Kelas<\/a> adalah artefak yang paling umum namun sering disalahgunakan. Seringkali direduksi menjadi sekadar skema basis data dalam notasi UML atau diperlakukan sebagai pemetaan langsung 1:1 dari struktur kode, Diagram Kelas yang sebenarnya adalah spesifikasi ketat dari <strong>struktur statis, kontrak tipe, dan hubungan semantik<\/strong>. Ini adalah cetak biru arsitektur yang menjembatani kesenjangan antara konsep domain bisnis dan desain perangkat lunak yang dapat dieksekusi.<\/p>\n<p>Terlepas dari dominasi metodologi agile dan pengembangan berbasis pengujian, <a href=\"https:\/\/www.visual-paradigm.com\/guide\/uml-unified-modeling-language\/what-is-class-diagram\/\">Diagram Kelas<\/a> tetap menjadi standar emas untuk mendefinisikan kontrak API, memvalidasi model domain dengan para pemangku kepentingan, dan memastikan integritas struktural sebelum implementasi dimulai. Namun, menghasilkan Diagram Kelas tingkat profesional memerlukan lebih dari sekadar menggambar kotak dan panah. Hal ini menuntut kepatuhan ketat terhadap tingkat abstraksi (Konseptual, Logis, Fisik), pemahaman yang tepat tentang semantik hubungan (asosiasi vs. agregasi vs. komposisi), dan penerapan disiplin prinsip SOLID untuk mencegah kemerosotan struktural.<\/p>\n<p id=\"LTosBzR\"><img loading=\"lazy\" alt=\"Diagram yang menunjukkan bagaimana diagram kelas menjembatani konsep bisnis dan kode melalui tingkat abstraksi dan semantik hubungan.\" class=\"alignnone size-full wp-image-1107\" decoding=\"async\" height=\"572\" loading=\"lazy\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-300x168.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185-768x429.png 768w\" width=\"1024\"\/><\/p>\n<p>Panduan ini menyediakan referensi komprehensif untuk kosakata Diagram Kelas, hierarki abstraksi, aturan hubungan, dan invarian kualitas. Baik Anda memodelkan domain Manajemen Pesanan yang kompleks atau merancang kontrak API mikro layanan, bagian-bagian berikut menetapkan kerangka kerja yang tepat yang diperlukan untuk membuat Diagram Kelas yang secara analitis valid, secara arsitektural kuat, dan secara praktis bermanfaat. Semua contoh dirender menggunakan PlantUML, menyediakan spesifikasi yang dapat dieksekusi yang dapat dikontrol versinya dan diintegrasikan ke dalam pipa CI\/CD.<\/p>\n<hr\/>\n<h2>1. Blok Bangunan Inti: Kosakata Diagram Kelas<\/h2>\n<p>Sebelum membahas tingkat abstraksi, Anda harus menguasai elemen-elemen dasar. Elemen-elemen ini konsisten di seluruh standar UML 2.x, namun berbeda secara signifikan dalam <em>maksud semantik<\/em>tergantung pada tingkat abstraksi.<\/p>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Elemen<\/th>\n<th align=\"left\">Tujuan<\/th>\n<th align=\"left\">Notasi<\/th>\n<th align=\"left\">Batasan Utama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Kelas<\/strong><\/td>\n<td align=\"left\">Cetak biru untuk objek; mengenkapsulasi keadaan (atribut) dan perilaku (metode)<\/td>\n<td align=\"left\">Persegi panjang dengan 3 kompartemen (Nama, Atribut, Operasi)<\/td>\n<td align=\"left\">Nama harus berupa kata benda tunggal; atribut bertipe; visibilitas ditandai (+, -, #)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Antarmuka<\/strong><\/td>\n<td align=\"left\">Kontrak yang menentukan perilaku tanpa implementasi<\/td>\n<td align=\"left\">Persegi panjang dengan stereotip \u00abinterface\u00bb atau notasi lollipop<\/td>\n<td align=\"left\">Tidak ada atribut (kecuali konstanta); semua operasi bersifat publik dan abstrak<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Enumerasi<\/strong><\/td>\n<td align=\"left\">Himpunan tetap nilai yang diberi nama<\/td>\n<td align=\"left\">Persegi panjang dengan stereotip \u00abenumeration\u00bb<\/td>\n<td align=\"left\">Nilai yang tercantum dalam kompartemen nama; biasanya tidak ada operasi<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Asosiasi<\/strong><\/td>\n<td align=\"left\">Hubungan struktural yang menunjukkan bahwa objek-objek terhubung<\/td>\n<td align=\"left\">Garis solid dengan multiplisitas opsional<\/td>\n<td align=\"left\">Harus memiliki nama peran di kedua ujungnya untuk kejelasan; multiplisitas wajib<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Agregasi<\/strong><\/td>\n<td align=\"left\">Hubungan \u201cmemiliki\u201d yang lemah; bagian dapat eksis secara mandiri<\/td>\n<td align=\"left\">Garis solid dengan berlian kosong di ujung keseluruhan<\/td>\n<td align=\"left\">Siklus hidup bagian independen dari keseluruhan; kepemilikan bersama dimungkinkan<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Komposisi<\/strong><\/td>\n<td align=\"left\">Hubungan \u201cmemiliki\u201d yang kuat; bagian tidak dapat eksis tanpa keseluruhan<\/td>\n<td align=\"left\">Garis solid dengan berlian terisi di ujung keseluruhan<\/td>\n<td align=\"left\">Siklus hidup bagian terikat pada keseluruhan; kepemilikan eksklusif<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Pewarisan<\/strong><\/td>\n<td align=\"left\">Hubungan \u201cadalah-a\u201d; subkelas mewarisi struktur\/perilaku<\/td>\n<td align=\"left\">Garis solid dengan segitiga kosong yang menunjuk ke induk<\/td>\n<td align=\"left\">Prinsip Substitusi Liskov harus berlaku; hindari hierarki yang dalam<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Realisasi<\/strong><\/td>\n<td align=\"left\">Hubungan \u201cmengimplementasikan\u201d; kelas memenuhi kontrak antarmuka<\/td>\n<td align=\"left\">Garis putus-putus dengan segitiga kosong yang menunjuk ke antarmuka<\/td>\n<td align=\"left\">Kelas harus mengimplementasikan semua operasi antarmuka<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Ketergantungan<\/strong><\/td>\n<td align=\"left\">Hubungan \u201cmenggunakan\u201d; kopling sementara atau lemah<\/td>\n<td align=\"left\">Panah terbuka putus-putus<\/td>\n<td align=\"left\">Minimalkan; menunjukkan target refactoring potensial<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Konvensi Penamaan (Krusial untuk Kejelasan)<\/h3>\n<ul>\n<li>\n<p><strong>Kelas:<\/strong>Kata benda tunggal PascalCase \u2192<code data-backticks=\"1\">Urutan<\/code>,\u00a0<code data-backticks=\"1\">ProfilPelanggan<\/code>,\u00a0<code data-backticks=\"1\">GerbangPembayaran<\/code>. Jangan pernah bentuk jamak (<code data-backticks=\"1\">Pesanan<\/code>) atau berbasis kata kerja (<code data-backticks=\"1\">ProsesPesanan<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>Atribut:<\/strong>\u00a0camelCase + tipe \u2192 <code data-backticks=\"1\">orderId: UUID<\/code>,\u00a0<code data-backticks=\"1\">createdAt: DateTime<\/code>. Awalan visibilitas wajib: <code data-backticks=\"1\">+<\/code>\u00a0public, <code data-backticks=\"1\">-<\/code>\u00a0private, <code data-backticks=\"1\">#<\/code>\u00a0protected.<\/p>\n<\/li>\n<li>\n<p><strong>Operasi:<\/strong>\u00a0camelCase frasa kata kerja + tipe pengembalian \u2192 <code data-backticks=\"1\">+calculateTotal(): Decimal<\/code>,\u00a0<code data-backticks=\"1\">-validateAddress(): Boolean<\/code>. Parameter bertipe: <code data-backticks=\"1\">(quantity: Integer, price: Decimal)<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Relasi:<\/strong>\u00a0Nama peran di kedua ujung \u2192 <code data-backticks=\"1\">Pelanggan [1] membuat [0..*] Pesanan<\/code>. Multiplisitas selalu ditentukan: <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>2. Hierarki Abstraksi: Konseptual, Logis, Fisik<\/h2>\n<p>Dimensi paling kritis dalam pemodelan Diagram Kelas adalah <strong>tingkat abstraksi<\/strong>. Membingungkan tingkat-tingkat ini adalah sumber utama kegagalan model. Setiap tingkat melayani pemangku kepentingan dan tujuan yang berbeda. Tingkat-tingkat ini bukan langkah-langkah berurutan yang harus dibuang, melainkan pandangan paralel yang dipelihara sepanjang siklus hidup.<\/p>\n<h3>2.1 Diagram Kelas Konseptual: Kebenaran Domain<\/h3>\n<ul>\n<li>\n<p><strong>Fokus:<\/strong>Entitas bisnis, hubungan, dan aturan <em>bebas dari teknologi atau implementasi apa pun<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Sengaja Mengabaikan:<\/strong>Bahasa pemrograman, basis data, kerangka kerja, API, kekhawatiran kinerja, format serialisasi.<\/p>\n<\/li>\n<li>\n<p><strong>Atribut:<\/strong>Hanya properti yang bermakna secara bisnis. Tidak ada ID kecuali relevan secara bisnis (misalnya, <code data-backticks=\"1\">ssn<\/code>,\u00a0<code data-backticks=\"1\">isbn<\/code>). Tidak ada kunci asing.<\/p>\n<\/li>\n<li>\n<p><strong>Metode:<\/strong>\u00a0Jarang ditampilkan. Jika ada, merepresentasikan\u00a0<em>perilaku bisnis<\/em>\u00a0(<code data-backticks=\"1\">calculateDiscount()<\/code>,\u00a0<code data-backticks=\"1\">isEligibleForRenewal()<\/code>), bukan getter\/setter.<\/p>\n<\/li>\n<li>\n<p><strong>Relasi:<\/strong>\u00a0Merefleksikan semantik dunia nyata. Multiplisitas mencerminkan aturan bisnis, bukan batasan penyimpanan.<\/p>\n<\/li>\n<li>\n<p><strong>Pemangku Kepentingan:<\/strong>\u00a0Ahli domain, analis bisnis, pemilik produk, auditor.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilitas:<\/strong>\u00a0Tinggi. Berubah hanya ketika pemahaman bisnis berkembang.<\/p>\n<\/li>\n<\/ul>\n<h4>Contoh: Domain Konseptual Pesanan<\/h4>\n<p id=\"wgJeAyU\"><img loading=\"lazy\" alt=\"Diagram kelas konseptual untuk Domain Pesanan yang menunjukkan hubungan antara Pelanggan, Pesanan, Produk, dan Alamat Pengiriman.\" class=\"alignnone size-full wp-image-1109\" decoding=\"async\" height=\"874\" loading=\"lazy\" sizes=\"auto, (max-width: 1916px) 100vw, 1916px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a.png 1916w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-300x137.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1024x467.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-768x350.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7eceeeeee6a-1536x701.png 1536w\" width=\"1916\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">Plantuml<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit Plantuml di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLHBRjim4DqBq1sctZH9uI3P6cWHnt9G8R4Zs4hsj3IsM5EaIWvRk4M17g903z2ZTDz3z2GTKix7GLUS6GxV_Dxmmf6mv5i5bT4LTkI56XfRentMfXLIfyahQh15w5JKt5RgJbZHWf8QQTSX64kDUNvJAU7ScCZAbIVC6Naflo2SfKaZQuHAsahXNccH7zSkJTA492c4J8fD0Bb6He5hersV5Vpz_WEoc1CKw8GM6evAqNPIiNGfdPRkEC34w33nZaoB5hwc2S3QApKNNCK8bfoMtWGZCfPYopISuxgsw5omjzYkqBf6TgLaW1648qs-FO7VXWRroB5NcQ007OvWuvwITso8Vike1VkRIgZAA_Og3GbrTCmkCwDn5o-bMtB8JgmKnfjBOnGAVH2uiARs5VMXzSk2tDO7_VekA5vBAgoiy2d8Cw0OYf_jo-u17Lb4Ee2i9EqE3SPhii4swQM9gN4FZTgtpslkKRF5-AeCmkHsVfKlPjCiACltUL7qOZQzoU-dYrwPZEUJwSrDK9umunmYsB8SpxFn8heMY-ailvi5yJulzlwleHIUc14yGYPZ4wRPeLq9kPNGeTunhQnW-e3pjITmk94aDo9D7XapE1_0qCfDGyDtC3WxFJqPx2S-2bjG8G-pruFdoP0tvRCEhkVHzM56ex1In7GzS1ygN4TSbbyEOGI1TAuqBvDv2C2v_FTPZMlX5JroE4sqOKR66i2i--pJ9DUVX9MXDt5RHcaIUGXluS-leqROZG19sCBld_2HTd6PIYkqaqu-SBgMV5X84-Pc0qAnl4NxGN1hMnvL4_YAkeOGFqqkMEI_vHy0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml conceptual-order-domain\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\nhide circle\r\nhide methods\r\n\r\ntitle Diagram Kelas Konseptual \u2014 Domain Pesanan (Tampilan Bisnis)\r\n\r\nclass Customer {\r\n  fullName : String\r\n  email : EmailAddress\r\n  membershipTier : Tier\r\n}\r\n\r\nclass Order {\r\n  orderDate : Date\r\n  status : OrderStatus\r\n  +calculateTotal() : Money\r\n  +isShippable() : Boolean\r\n}\r\n\r\nclass Product {\r\n  name : String\r\n  sku : SKU\r\n  unitPrice : Money\r\n}\r\n\r\nclass ShippingAddress {\r\n  street : String\r\n  city : String\r\n  country : CountryCode\r\n}\r\n\r\nenum OrderStatus {\r\n  DRAFT\r\n  CONFIRMED\r\n  SHIPPED\r\n  DELIVERED\r\n  CANCELLED\r\n}\r\n\r\nenum Tier {\r\n  STANDARD\r\n  PREMIUM\r\n  VIP\r\n}\r\n\r\n' Tautan berarah memperbaiki penyelarasan sudut segitiga\r\nCustomer \"1\" -right-&gt; \"0..*\" Order : places\r\nOrder \"1\" *--down-&gt; \"1..*\" Product : contains\r\nOrder \"1\" -left-&gt; \"1\" ShippingAddress : shipsTo\r\nCustomer \"1\" -down-&gt; \"0..1\" ShippingAddress : defaultAddress\r\n\r\nnote right of Order\r\nInvarian bisnis:\r\nTotal = \u03a3(harga item \u00d7 qty)\r\n\r\nTransisi status diatur \r\noleh alur kerja pemenuhan\r\nend note\r\n@enduml\r\n\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLHBRjim4DqBq1sctZH9uI3P6cWHnt9G8R4Zs4hsj3IsM5EaIWvRk4M17g903z2ZTDz3z2GTKix7GLUS6GxV_Dxmmf6mv5i5bT4LTkI56XfRentMfXLIfyahQh15w5JKt5RgJbZHWf8QQTSX64kDUNvJAU7ScCZAbIVC6Naflo2SfKaZQuHAsahXNccH7zSkJTA492c4J8fD0Bb6He5hersV5Vpz_WEoc1CKw8GM6evAqNPIiNGfdPRkEC34w33nZaoB5hwc2S3QApKNNCK8bfoMtWGZCfPYopISuxgsw5omjzYkqBf6TgLaW1648qs-FO7VXWRroB5NcQ007OvWuvwITso8Vike1VkRIgZAA_Og3GbrTCmkCwDn5o-bMtB8JgmKnfjBOnGAVH2uiARs5VMXzSk2tDO7_VekA5vBAgoiy2d8Cw0OYf_jo-u17Lb4Ee2i9EqE3SPhii4swQM9gN4FZTgtpslkKRF5-AeCmkHsVfKlPjCiACltUL7qOZQzoU-dYrwPZEUJwSrDK9umunmYsB8SpxFn8heMY-ailvi5yJulzlwleHIUc14yGYPZ4wRPeLq9kPNGeTunhQnW-e3pjITmk94aDo9D7XapE1_0qCfDGyDtC3WxFJqPx2S-2bjG8G-pruFdoP0tvRCEhkVHzM56ex1In7GzS1ygN4TSbbyEOGI1TAuqBvDv2C2v_FTPZMlX5JroE4sqOKR66i2i--pJ9DUVX9MXDt5RHcaIUGXluS-leqROZG19sCBld_2HTd6PIYkqaqu-SBgMV5X84-Pc0qAnl4NxGN1hMnvL4_YAkeOGFqqkMEI_vHy0\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:RLJ1RXf13BsljF_WSccIYYYv8hKAsIKgQg08IEx3he4HipFR6MyehIhr8ohr0_eflVSZ-YMrPma9KI-CxNtpR8-VkGgaF3MLWSBP0cjgbEawNwBlbgvIsgR9ArfZXL2Rw8MDjhNogWAZBTAkHd2UrkxvbyAe4Ff4NYyQmY4pp_GNX8iqMUiIeT2-CBXtAkJBPKYJD25D1Y4xr06Py42krKfO_tx_0H-bCiXZPN1otGIkWI7t6hUdGX4pGzO4SXK3lwO9mB8nPgouWnxCk2IxaY0oW-78GCv-MNgcaNY5rG9zMEjwhfcW1tAaoRSdyhQ4o1pVALSar798ZD-Jci21Y9j5J-9l2cMAnZ1gxaYParE6Z9p5NVoemunJrcfXC7wvTiwWiaU99zwLJK5jQlkoeR1fnFzm9qvZDKsyBl0foJEYc8glxTjk2GDvH3gYB3JjZWEkiUGbbhLMvahSKwDjgkSzjwpvj7yp5oFxEBuPJaU3N9pP--5aqfhvu7PuFvYsJjOVPuFRMt6UEECS8jbitX_d_Mc4JgQ3qV1k9ERzSBB7lsQjU2n8EylgONrk0YprPs010pUXx8hrjVyrUcKhj9Gc1xLqBZlGzNgrfkuxw5oSdvzrzjFkYVeBv46slY3FkhmXMolGomXzd4zFLebOe4Vmhi5bv6NxvG1w888BS_UocCS4NCj_hvMuL8sXWtxJn3fMO-m1tBAjFaqEUwBjWv9te5wQH1d2M_ZpwqGsUKXOdTTHCxz_mYVQnNtQpvAyia7BkmPOkGVq5aj8ayLEbckfZP6NXAtpcwLnMnbS2L99cbonoVyk_m00\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit Plantuml di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p id=\"QCXQrCz\"><img loading=\"lazy\" alt=\"Diagram kelas konseptual untuk Domain Pesanan yang menunjukkan hubungan antara Pelanggan, Pesanan, dan Produk.\" class=\"alignnone size-full wp-image-1111\" decoding=\"async\" height=\"539\" loading=\"lazy\" sizes=\"auto, (max-width: 771px) 100vw, 771px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a.png 771w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-300x210.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf322af0a-768x537.png 768w\" width=\"771\"\/><\/p>\n<p><strong>Pengamatan Utama:<\/strong><\/p>\n<ul>\n<li>\n<p>Tidak ada ID, tidak ada FK, tidak ada anotasi persistensi.<\/p>\n<\/li>\n<li>\n<p>Metode mengekspresikan logika bisnis, bukan akses data.<\/p>\n<\/li>\n<li>\n<p>Multiplisitas mencerminkan aturan bisnis (<code data-backticks=\"1\">Pesanan<\/code>\u00a0<em>harus<\/em>\u00a0memuat setidaknya satu\u00a0<code data-backticks=\"1\">Produk<\/code>).<\/p>\n<\/li>\n<li>\n<p>Komposisi (<code data-backticks=\"1\">*--<\/code>) digunakan di mana semantik bisnis menuntutnya (item baris tidak dapat ada tanpa pesanan).<\/p>\n<\/li>\n<li>\n<p>Enumerasi menangkap kosakata bisnis, bukan kode teknis.<\/p>\n<\/li>\n<\/ul>\n<h3>2.2 Diagram Kelas Logis: Spesifikasi Perangkat Lunak<\/h3>\n<ul>\n<li>\n<p><strong>Fokus:<\/strong>  Desain perangkat lunak yang independen terhadap platform. Mendefinisikan tipe, antarmuka, dan kontrak <em>tanpa mengikat pada teknologi tertentu<\/em>.<\/p>\n<\/li>\n<li>\n<p><strong>Termasuk:<\/strong>  Kelas abstrak, antarmuka, tipe generik, pola desain, tipe penanganan kesalahan.<\/p>\n<\/li>\n<li>\n<p><strong>Atribut:<\/strong>  Bertipe dengan tipe netral platform (<code data-backticks=\"1\">String<\/code>,\u00a0<code data-backticks=\"1\">Decimal<\/code>,\u00a0<code data-backticks=\"1\">DateTime<\/code>,\u00a0<code data-backticks=\"1\">UUID<\/code>). Termasuk atribut identitas (<code data-backticks=\"1\">id<\/code>) dan atribut turunan (<code data-backticks=\"1\">\/total<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>Metode:<\/strong>  Tanda tangan lengkap termasuk parameter, tipe pengembalian, dan pengecualian. Getter\/setter dikecualikan kecuali secara perilaku signifikan.<\/p>\n<\/li>\n<li>\n<p><strong>Hubungan:<\/strong>  Multiplisitas yang presisi, panah navigabilitas, nama peran. Antarmuka diwujudkan secara eksplisit.<\/p>\n<\/li>\n<li>\n<p><strong>Pemangku Kepentingan:<\/strong>Arsitek, pengembang senior, perancang API.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilitas:<\/strong>Sedang. Berkembang seiring penyempurnaan desain, namun stabil di berbagai pilihan implementasi.<\/p>\n<\/li>\n<\/ul>\n<h4>Contoh: Desain Layanan Pemesanan Logis<\/h4>\n<p id=\"ClcVxRL\"><img loading=\"lazy\" alt=\"Diagram kelas logis untuk Layanan Pesanan yang menunjukkan antarmuka, DTO, dan entitas domain.\" class=\"alignnone size-full wp-image-1113\" decoding=\"async\" height=\"869\" loading=\"lazy\" sizes=\"auto, (max-width: 1917px) 100vw, 1917px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6.png 1917w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-300x136.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1024x464.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-768x348.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecf61242e6-1536x696.png 1536w\" width=\"1917\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLNRRXD137sFb7ymvQMbtG2l4Ofw2GzH8nNHyW7EZadDpiviPxmLuIBn4NmXNu9dBqasX3maNllC7X_Rurn6mI1rQS7wDUTeCnyCXInIUEQSngCNyaWbGMMHtNWK2tOL1Yp1iYFPL0G-oAFVZ-GMOxmI2RogXHQvT_VyZU3DU3GU2Oibc3Ek4_AM50fB9OxmvzTlME867Jhue8oniKxdQh23XJDKaNvfqA9yzg4yI-zZ9nG-Oqwmk4jvtxTfm_Vn2FHpdWT2eIPqcfTc2ZSxnuqlItJcR0hDuy9qPzOaxG4ssr0FcZ_STQYwClgYUq6fupxo0cBZwnmjG8y_UrQ2dobfN4K9c4jRARZ6IE-TLcRJf_sI3KpXqwV5l7j-fX3PEtKklLjtpbQRkH9rpzLwu9AwK9lSOQWXRpcRt82-YjRqM0PPNaVnPH8qo2HhnS50NHTA4x4GAbDqoL7UBJl7h3_xo5N5RdrbJA2OO9tLnb-B5xGfOygvHDkt46rUsoGYXK_F3kDOLNOpvvZxsicfwGn5TTQmzgtyFhEjt2fuK-TogFQfnhOiKvr0eJM5Bb0xbWyXJTfXEh5UoJ-9xb7tuhzl2ng8Kf_kzSBqlStobdJeIsf2Sj-qreqtrEVljJ4sEVPExR7-E_QxAtAyq-UytyfskDNpaPvgYZBhrVw_fOVJfbTdo-dRkp8a_FzedH-V33usR4epwyY7A-7TZya41fuf6EQoihfjd63a0dN33H2JoQoxAbDGq9gijzXXuEJj2RpAClsTJ5wTx6Pg2YiA71bc-yWicpM_kqePBZXmUKixOE8xqgg4NTKeSmoy3ztMDG5qX3TKD2fkASbtNWYAPeqQFJZSaAc4rwYgeV0wIrXCnw1xLmT7y15AZ7Ln0UdL1TaQmqJXTwilL83nPLh8mWOBg2WuXQzyxXMYkmGIwNXqgQR-f_m5\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml logical-order-service\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitle Diagram Kelas Logis \u2014 Layanan Pemesanan (Desain Independen Platform)\r\n\r\ninterface IOrderService {\r\n    +createOrder(cmd: CreateOrderCommand): OrderId\r\n    +getOrder(id: OrderId): OrderDTO\r\n    +updateStatus(id: OrderId, status: OrderStatus): void\r\n}\r\n\r\nabstract class BaseEntity {\r\n    #id : UUID\r\n    #version : Long\r\n    #createdAt : DateTime\r\n    #updatedAt : DateTime\r\n}\r\n\r\nclass Order extends BaseEntity {\r\n    -customerId : UUID\r\n    -status : OrderStatus\r\n    -lineItems : List&lt;LineItem&gt;\r\n    -shippingAddress : Address\r\n    \/total : Decimal\r\n    +calculateTotal(): Decimal\r\n    +applyDiscount(discount: Discount): void\r\n}\r\n\r\nclass LineItem {\r\n    -productId : UUID\r\n    -quantity : Integer\r\n    -unitPrice : Decimal\r\n    +subtotal(): Decimal\r\n}\r\n\r\nclass Address {\r\n    -street : String\r\n    -city : String\r\n    -country : CountryCode\r\n    -postalCode : String\r\n}\r\n\r\nclass CreateOrderCommand {\r\n    +customerId : UUID\r\n    +items : List&lt;OrderItemRequest&gt;\r\n    +shippingAddress : Address\r\n}\r\n\r\nclass OrderDTO {\r\n    +orderId : UUID\r\n    +status : OrderStatus\r\n    +total : Decimal\r\n    +items : List&lt;LineItemDTO&gt;\r\n}\r\n\r\nIOrderService &lt;|.. OrderService : diimplementasikan\r\nOrderService ..&gt; Order : mengelola\r\nOrder \"1\" *-- \"1..*\" LineItem : berisi &gt;\r\nOrder \"1\" --&gt; \"1\" Address : dikirimKe &gt;\r\nOrder ..&gt; CreateOrderCommand : dibuatDari\r\nOrder ..&gt; OrderDTO : diproyeksikanKe\r\n\r\nnote kanan dari IOrderService\r\n  Batas kontrak:\r  Perintah masuk, DTO keluar.\n  Objek domain tidak pernah bocor.\nend note\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLNRRXD137sFb7ymvQMbtG2l4Ofw2GzH8nNHyW7EZadDpiviPxmLuIBn4NmXNu9dBqasX3maNllC7X_Rurn6mI1rQS7wDUTeCnyCXInIUEQSngCNyaWbGMMHtNWK2tOL1Yp1iYFPL0G-oAFVZ-GMOxmI2RogXHQvT_VyZU3DU3GU2Oibc3Ek4_AM50fB9OxmvzTlME867Jhue8oniKxdQh23XJDKaNvfqA9yzg4yI-zZ9nG-Oqwmk4jvtxTfm_Vn2FHpdWT2eIPqcfTc2ZSxnuqlItJcR0hDuy9qPzOaxG4ssr0FcZ_STQYwClgYUq6fupxo0cBZwnmjG8y_UrQ2dobfN4K9c4jRARZ6IE-TLcRJf_sI3KpXqwV5l7j-fX3PEtKklLjtpbQRkH9rpzLwu9AwK9lSOQWXRpcRt82-YjRqM0PPNaVnPH8qo2HhnS50NHTA4x4GAbDqoL7UBJl7h3_xo5N5RdrbJA2OO9tLnb-B5xGfOygvHDkt46rUsoGYXK_F3kDOLNOpvvZxsicfwGn5TTQmzgtyFhEjt2fuK-TogFQfnhOiKvr0eJM5Bb0xbWyXJTfXEh5UoJ-9xb7tuhzl2ng8Kf_kzSBqlStobdJeIsf2Sj-qreqtrEVljJ4sEVPExR7-E_QxAtAyq-UytyfskDNpaPvgYZBhrVw_fOVJfbTdo-dRkp8a_FzedH-V33usR4epwyY7A-7TZya41fuf6EQoihfjd63a0dN33H2JoQoxAbDGq9gijzXXuEJj2RpAClsTJ5wTx6Pg2YiA71bc-yWicpM_kqePBZXmUKixOE8xqgg4NTKeSmoy3ztMDG5qX3TKD2fkASbtNWYAPeqQFJZSaAc4rwYgeV0wIrXCnw1xLmT7y15AZ7Ln0UdL1TaQmqJXTwilL83nPLh8mWOBg2WuXQzyxXMYkmGIwNXqgQR-f_m5\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:TLLHRjim3FqFa3jmtK_IrjdsQnH1ksG30WHeiQG7K2pMqIfBhaGNoxe1EyHEk9ECikp4JjDyn0eVwST7Kior9-6eAZHecwjCwCGwYIxnw9vLXiF1EzfYWL1geSnmu1-LAOKJ1MXba7ObWdMqjLqaqyBx6oAdDXNX8hDcfNuYV1mEXWDIf16MaGfcmHFcIkGXxj-Vlt0Ro64LoM5qfmKzM5Sa2oEnHFuo17FqAZVZy3fb2Ds3ODT57Ta6lWm7m9-BpA4WhA5HLiWKPWV3p1Q5C7ASHjA5R69of1YWv1vgdURhsyQhAYM_Q4M2Aj_rl0HVsnf3TE3mPwkOu7T8McmyEP5HB1Hy5Xw_62xChatxlPAGmltzOjxyVaRdbJLiN5gJDyQeJTuGc-TyMgi26oWcTmpLv94pbXb_49VqL0P9LdcoHH3KooI9ug2dhe72G2m8Yu0kbQUhPMEOjh5RLPRAv3TIElJ1hJb5_0DPufdWZ35JXT1j2uNEAXr417WqFiP5MUhTNFdCLeP6iZcmLtFgrpxARpFRoosTbLL6nsgVAX7BaiA29or7rm2LKNJdmgGTf-Eh3RrAj4FTYd_P5zGXXZwj-BwqlKsoIDgt1JKkc6VnDBCIs_mjDqO7GoUgm_fwx0zNv7IdBrItbN6usV8DdohqD6tLljtIusdZgxFdjF6kz0dV7gsBqvEXJWqRqqmRylvAkFercK3FaW9NHVDgOfeUC9bCcnkI0jTAv7iFEFjq1kT9mi_9vFpiC4Wfy9eZNf4UfbtV99dMpqE1GidysXxS0jk9_l0RumN_wcpHzTrNCmKUs--OiS_Q1i764e9J-PR0FlGtOYZPZ3Eizyw6vqSAjqkZjURpeCmby6izs8ec0PdRWWM1tGGE3mPv3O56ySWexmq8TCF1DH_vx-C_\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Pengamatan Kunci:<\/strong><\/p>\n<ul>\n<li>\n<p>Antarmuka mendefinisikan kontrak layanan; implementasi disembunyikan.<\/p>\n<\/li>\n<li>\n<p>Pola Command\/DTO memisahkan input\/output dari model domain.<\/p>\n<\/li>\n<li>\n<p>Entitas dasar menyediakan identitas dan versi yang melintasi aspek.<\/p>\n<\/li>\n<li>\n<p>Atribut turunan <code data-backticks=\"1\">\/total<\/code>menandakan nilai yang dihitung.<\/p>\n<\/li>\n<li>\n<p>Panah navigasi menunjukkan arah ketergantungan.<\/p>\n<\/li>\n<li>\n<p>Tidak ada anotasi ORM, tidak ada tipe basis data, tidak ada ketergantungan framework.<\/p>\n<\/li>\n<\/ul>\n<h3>2.3 Diagram Kelas Fisik: Realitas Implementasi<\/h3>\n<ul>\n<li>\n<p><strong>Fokus:<\/strong>Realisasi spesifik teknologi. Termasuk framework, ORM, serialisasi, dan kekhawatiran infrastruktur.<\/p>\n<\/li>\n<li>\n<p><strong>Termasuk:<\/strong>Anotasi (<code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">@JsonProperty<\/code>,\u00a0<code data-backticks=\"1\">@Autowired<\/code>), tipe koleksi konkret (<code data-backticks=\"1\">ArrayList<\/code>,\u00a0<code data-backticks=\"1\">HashSet<\/code>), tipe yang dipetakan ke basis data (<code data-backticks=\"1\">VARCHAR(255)<\/code>,\u00a0<code data-backticks=\"1\">BIGINT<\/code>), kelas dasar kerangka kerja.<\/p>\n<\/li>\n<li>\n<p><strong>Atribut:<\/strong> Tipe khusus kerangka kerja, penanda pemuatan lambat, konfigurasi cache.<\/p>\n<\/li>\n<li>\n<p><strong>Metode:<\/strong> Panggilan balik siklus hidup (<code data-backticks=\"1\">@PostConstruct<\/code>kaitan serialisasi, titik integrasi kerangka kerja.<\/p>\n<\/li>\n<li>\n<p><strong>Relasi:<\/strong> Strategi pengambilan (<code data-backticks=\"1\">LAZY<\/code>,\u00a0<code data-backticks=\"1\">EAGER<\/code>), aturan kaskade, pemetaan tabel gabung.<\/p>\n<\/li>\n<li>\n<p><strong>Pemangku kepentingan:<\/strong> Pengembang, DBA, DevOps, QA.<\/p>\n<\/li>\n<li>\n<p><strong>Stabilitas:<\/strong> Rendah. Berubah seiring setiap peningkatan atau optimasi teknologi.<\/p>\n<\/li>\n<\/ul>\n<h4>Contoh: Implementasi Fisik JPA\/Spring<\/h4>\n<p id=\"rvEprlH\"><img loading=\"lazy\" alt=\"Diagram kelas fisik JPA\/Spring Boot yang menunjukkan entitas Pesanan dengan anotasi dan hubungan.\" class=\"alignnone size-full wp-image-1114\" decoding=\"async\" height=\"814\" loading=\"lazy\" sizes=\"auto, (max-width: 1726px) 100vw, 1726px\" src=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png\" srcset=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314.png 1726w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-300x141.png 300w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1024x483.png 1024w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-768x362.png 768w, https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecfb078314-1536x724.png 1536w\" width=\"1726\"\/><\/p>\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n<div class=\"vpascode-viewer-container vpascode-fancy-active\">\n<div class=\"vpascode-header\">\n<span class=\"vpascode-lang-label\">PlantUML<\/span><br \/>\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 8px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<div class=\"vpascode-code-wrapper\">\n            <div class=\"vpascode-viewer-container vpascode-fancy-active\">\r\n                                <div class=\"vpascode-header\">\r\n                    <span class=\"vpascode-lang-label\">PlantUML<\/span>\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRRSXf747sdYd-OyBIo19Ryg38K22ak51Af17PLyk8QTXfeCvVDRAySugJA7v4loAVvIzAp5tP1a4fuWDtfqvSvtNE6OKhIKsQqIDRR56EfkyuhyDrFYMotlgCr6129bcZRhNI3Df5U6g7H0cqJ4CxJsZKjiPPfEYBokCW89h6pC_mTn6MxrMuHaWPnYt8La3y0GyNtcE96VFlwbxYpREULXv1UHFUFezUpnADTYHldw2m46EQOBJ_CvK93PAM1VYUlD-qm8azU1lZIRWd-32TA3D-11Iy9r0UfCoWCNLJYMhn_FxajWHyu23fRMf-BDuPCdLsLaB7JcR6HpRGE-VjBgLCuAptYB2Ldm4yEujxPp1JPezdyQVBJkyg1cQSiPN1Uy2n_AtqUBCpTZz9k8oEJ1DJDjjncvqB4CesbWlveEhrW_fErj4zWtBFKVVBPhfpGeWc12GbcG6-dvVkWAiiiG2bGLJ5hJ18cUwIKXpGubKybVEwbJH4i5U-loP7KZBh1rIt4QAGk3ESyGN6cURlpW8ZEzY5_dcvZAFWZXehhLbP5__zk1lBcZdcCba3nkZyT_V9pIStmtg6jMbbFq4TKpExntkQ0gbF_PHWIxrGMq-4i_AlFhvdCUM6NYILO7MPAFBCOXh9_TNaXU0Wum9lAERD8ZnvZ44S9pviTKbRCLdt-ifz3WrtHkl_cyhAUKWz0OOWe7CQZyAiQ7XSRs0EVF06noopvW1yNJsEdu4H1EsOTdniTW8qqnIvdu9-PWJ1NOLfbJ4nM8A6X2oLcOX8jaBzOtYobOj8qxaWPPUG-ezyTadmCdY1nrIY4vnJ9-Uq93tZcy8_PGcEwpYTeb2IQLJPKThTdguwF1oOg3nx5HZ4pzSBO6IEjEckErFaAg42ZAjRFojfkvmyLCSqoaKVBBoNlyc070duZi2eLzuciLz_cg8iyyg0Yvdo9bZLfl5Eyg1Q_NH5JJAdm7knv5K8N5Ugt9txiz2XNi7FAYo_Kl7FL4Q-wNVxjzLvrQbsu5eS2QHlwQ5_AOpDWjpl8VslDQwZYYsdfzGOlABlUw_XHbvCDF-RS2Dth_J7ORmKxb2qAl5X781QEc7RXbhKoZILpAQtW6ndy9taTrhvz_LlKzu52aqaIGH4hOw7c2jT86L-u2eLXpZnMzXjKajVBAvADTYKtXCiD9t89eU5UypMkNRp9poCNAKA1F7lyoFyk_W40\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 8px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n                                <div class=\"vpascode-code-wrapper\">\r\n                    <pre class=\"lang-plantuml\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml physical-order-jpa\r\n!theme plain\r\nskinparam linetype ortho\r\nskinparam classAttributeIconSize 0\r\n\r\ntitle Diagram Kelas Fisik \u2014 Entitas Order (JPA\/Spring Boot)\r\n\r\n@Entity\r\n@Table(name=\"orders\")\r\nclass Order {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @Version\r\n    -version : Long\r\n    @Column(nullable=false)\r\n    -customerId : UUID\r\n    @Enumerated(STRING)\r\n    -status : OrderStatus\r\n    @OneToMany(mappedBy=\"order\", cascade=ALL, orphanRemoval=true)\r\n    -lineItems : Set&lt;LineItem&gt;\r\n    @Embedded\r\n    -shippingAddress : Address\r\n    @Transient\r\n    \/total : BigDecimal\r\n    +calculateTotal(): BigDecimal\r\n}\r\n\r\n@Entity\r\n@Table(name=\"line_items\")\r\nclass LineItem {\r\n    @Id @GeneratedValue\r\n    -id : UUID\r\n    @ManyToOne(fetch=LAZY)\r\n    @JoinColumn(name=\"order_id\", nullable=false)\r\n    -order : Order\r\n    @Column(nullable=false)\r\n    -productId : UUID\r\n    @Column(nullable=false)\r\n    -quantity : Integer\r\n    @Column(precision=10, scale=2)\r\n    -unitPrice : BigDecimal\r\n}\r\n\r\n@Embeddable\r\nclass Address {\r\n    @Column(length=200)\r\n    -street : String\r\n    @Column(length=100)\r\n    -city : String\r\n    @Enumerated(STRING)\r\n    -country : CountryCode\r\n    @Column(length=20)\r\n    -postalCode : String\r\n}\r\n\r\n@Service\r\n@Transactional\r\nclass OrderServiceImpl implements IOrderService {\r\n    @Autowired\r\n    -orderRepo : OrderRepository\r\n    @Autowired\r\n    -eventPublisher : ApplicationEventPublisher\r\n    +createOrder(cmd: CreateOrderCommand): UUID\r\n    +getOrder(id: UUID): OrderDTO\r\n}\r\n\r\n@Repository\r\ninterface OrderRepository extends JpaRepository&lt;Order, UUID&gt; {\r\n    +findByCustomerId(customerId: UUID): List&lt;Order&gt;\r\n    +findByStatus(status: OrderStatus): Page&lt;Order&gt;\r\n}\r\n\r\nOrder \"1\" *-- \"1..*\" LineItem : mappedBy=\"order\"ncascade=ALLnorphanRemoval=true\r\nOrder \"1\" --&gt; \"1\" Address : @Embedded\r\nOrderServiceImpl ..&gt; OrderRepository : @Autowired\r\nOrderServiceImpl ..&gt; ApplicationEventPublisher : @Autowired\r\nOrderRepository ..|&gt; JpaRepository : extends\r\n\r\nnote bottom of Order\r\n  Catatan kinerja:\r\n  \u2022 lineItems dimuat LAZY\r\n  \u2022 total dihitung di memori\r\n  \u2022 Bidang Version mengaktifkan optimistik locking\r\nend note\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRRSXf747sdYd-OyBIo19Ryg38K22ak51Af17PLyk8QTXfeCvVDRAySugJA7v4loAVvIzAp5tP1a4fuWDtfqvSvtNE6OKhIKsQqIDRR56EfkyuhyDrFYMotlgCr6129bcZRhNI3Df5U6g7H0cqJ4CxJsZKjiPPfEYBokCW89h6pC_mTn6MxrMuHaWPnYt8La3y0GyNtcE96VFlwbxYpREULXv1UHFUFezUpnADTYHldw2m46EQOBJ_CvK93PAM1VYUlD-qm8azU1lZIRWd-32TA3D-11Iy9r0UfCoWCNLJYMhn_FxajWHyu23fRMf-BDuPCdLsLaB7JcR6HpRGE-VjBgLCuAptYB2Ldm4yEujxPp1JPezdyQVBJkyg1cQSiPN1Uy2n_AtqUBCpTZz9k8oEJ1DJDjjncvqB4CesbWlveEhrW_fErj4zWtBFKVVBPhfpGeWc12GbcG6-dvVkWAiiiG2bGLJ5hJ18cUwIKXpGubKybVEwbJH4i5U-loP7KZBh1rIt4QAGk3ESyGN6cURlpW8ZEzY5_dcvZAFWZXehhLbP5__zk1lBcZdcCba3nkZyT_V9pIStmtg6jMbbFq4TKpExntkQ0gbF_PHWIxrGMq-4i_AlFhvdCUM6NYILO7MPAFBCOXh9_TNaXU0Wum9lAERD8ZnvZ44S9pviTKbRCLdt-ifz3WrtHkl_cyhAUKWz0OOWe7CQZyAiQ7XSRs0EVF06noopvW1yNJsEdu4H1EsOTdniTW8qqnIvdu9-PWJ1NOLfbJ4nM8A6X2oLcOX8jaBzOtYobOj8qxaWPPUG-ezyTadmCdY1nrIY4vnJ9-Uq93tZcy8_PGcEwpYTeb2IQLJPKThTdguwF1oOg3nx5HZ4pzSBO6IEjEckErFaAg42ZAjRFojfkvmyLCSqoaKVBBoNlyc070duZi2eLzuciLz_cg8iyyg0Yvdo9bZLfl5Eyg1Q_NH5JJAdm7knv5K8N5Ugt9txiz2XNi7FAYo_Kl7FL4Q-wNVxjzLvrQbsu5eS2QHlwQ5_AOpDWjpl8VslDQwZYYsdfzGOlABlUw_XHbvCDF-RS2Dth_J7ORmKxb2qAl5X781QEc7RXbhKoZILpAQtW6ndy9taTrhvz_LlKzu52aqaIGH4hOw7c2jT86L-u2eLXpZnMzXjKajVBAvADTYKtXCiD9t89eU5UypMkNRp9poCNAKA1F7lyoFyk_W40\" \r\n                       target=\"_blank\" \r\n                       rel=\"noopener noreferrer\" \r\n                       class=\"vpascode-fancy-btn\">\r\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"margin-right: 6px;\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg>\r\n                        <span>Edit PlantUML in VPasCode<\/span>\r\n                    <\/a>\r\n                <\/div>\r\n            <\/div>\r\n            \n<\/p><\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"vpascode-actions\">\n<a class=\"vpascode-fancy-btn\" href=\"https:\/\/www.vpascode.com\/editor\/#plantuml:bLRTRXf75Bwtn3jCkLfYG-nSee30s8gmQ8qCYTGgKZJi762Q-UlCMRSqhPI7w1FqqV8aFRC_x8AXQhc0tPtl_CntllcMKK3kCTEAkUqko9IhhlK2VFTdnriNt-4MD32dk3IjY_1P6iSzrqn90xXpmAp7hMskf8g7C4RqSfKXJ5Dh5l9tODUjYzO5IbJ0vcKTDebGTYVv9WP--_eNUuoLsRqXu8ub3_FnwuNpqcpOhRNOYIb6nI9TBFbAGMAuXa4xxpYq2P6NB_DyQLqm-eocWetUWG7F4SG7hZ8e5hfIi3vx_tvwLm8_K19fJRdwNDmHP6RDfeHChCgqIKocLAm_M7CLe5D6f5b0gy5FZ_BUcqmNrPF5ycdwmxigWBZ7B10uRtYHtvKnZmQMzdjkTedcpe6utPNRR5-nb8UK2nYCPxChce3RSlC4sZvpDK2VxTk9GveYw5XW0VXsLjuFgxRq2eG0KJMpbSuHsMCXF8GOL5wLyANd9aWmMDo_Heiqn3wxbPixIANcgbYufDcccQBjBYCYwHn2_Zm_njZm9naxhaTPDVt_fnd9MrhYCLa3fjl1RFpJZoKremShJJNAMa6Vf21sJyys1rIJ-YzYSDwABCLZBVnhp2yPBxJVPrE3i3ckv3on64KvkBc-OYG2Il2c2iwCnBcNAR2JXEV3ZYKhPgivVpcieS1iS3juStrTgzG3O1GHniDu4dvJmzDY0mVWioSWjPb17_6JucfY1PnfQC-ifNEZ8h1HfjZb0lmpCH1r5TNAKoIo8WaDNoWnK-qKa_H51cSmi6bpSK_AE4Fxg_JxGvBBu0cShQGGhuD4wtTd8k2Pqi-pbP9Xcojex9mY_ukTtH-iLSV70n6L9qzIBOYP-i74QisDw3GbTRa1BD1I5CyxPMztoyUAc6QRagJbrvnsURG31hyX617OW-FrqxSvwYhFFAo8kLnBGvuqsJjUKflVlecP35X43m-Y2gDB2lSxC3yAclCDx8FovWitRz-qsQjkbtvxlLVjsXVwxDWWFvg6GNuqBmsocRBR7UQ_jUirVF65NdgzuGlI-WSpFnboTkIdWXkfUxq_XeV3e81oI94POn7OoY8Hp-owzgOvpTTwKWhDE692FpxzzlLlLhyJeXqoPNdv0eYBXQEdLZjwTGic3TF4Mg7ik5w-7zbQWX8CJ7IJmAn3gMdICgLqwUVyD5A3UM5I7btIluj_0000\" rel=\"noopener noreferrer\" target=\"_blank\"><br \/>\n<svg fill=\"none\" height=\"14\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.5\" style=\"margin-right: 6px;\" viewbox=\"0 0 24 24\" width=\"14\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"><\/path><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"><\/path><\/svg><br \/>\n<span>Edit PlantUML di VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><strong>Observasi Utama:<\/strong><\/p>\n<ul>\n<li>\n<p>Anotasi JPA mendefinisikan pemetaan persistensi secara eksplisit.<\/p>\n<\/li>\n<li>\n<p>Strategi pengambilan dan aturan kaskade didokumentasikan pada relasi.<\/p>\n<\/li>\n<li>\n<p>Stereo tipe Spring (<code data-backticks=\"1\">@Service<\/code>,\u00a0<code data-backticks=\"1\">@Repository<\/code>) menandai peran infrastruktur.<\/p>\n<\/li>\n<li>\n<p>Tipe konkret (<code data-backticks=\"1\">BigDecimal<\/code>,\u00a0<code data-backticks=\"1\">Set<\/code>,\u00a0<code data-backticks=\"1\">Page<\/code>) menggantikan abstraksi.<\/p>\n<\/li>\n<li>\n<p>Repository memperluas antarmuka kerangka\u2014ketergantungan teknologi dinyatakan secara eksplisit.<\/p>\n<\/li>\n<li>\n<p>Keputusan kritis kinerja (lazy loading, bidang transient) ditandai dengan anotasi.<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>3. Semantik Relasi: Presisi Itu Penting<\/h2>\n<p>Penyalahgunaan tipe relasi adalah kesalahan struktural yang paling umum. Setiap relasi memiliki semantik siklus hidup, kepemilikan, dan kardinalitas yang spesifik.<\/p>\n<h3>3.1 Matriks Keputusan<\/h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Pertanyaan<\/th>\n<th align=\"left\">Asosiasi<\/th>\n<th align=\"left\">Agregasi<\/th>\n<th align=\"left\">Komposisi<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">Apakah bagian dapat eksis tanpa keseluruhan?<\/td>\n<td align=\"left\">Tidak Berlaku<\/td>\n<td align=\"left\">Ya<\/td>\n<td align=\"left\">Tidak<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Apakah kepemilikan bersifat eksklusif?<\/td>\n<td align=\"left\">Tidak<\/td>\n<td align=\"left\">Tidak<\/td>\n<td align=\"left\">Ya<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Apakah siklus hidup dikelola oleh keseluruhan?<\/td>\n<td align=\"left\">Tidak<\/td>\n<td align=\"left\">Tidak<\/td>\n<td align=\"left\">Ya<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Kardinalitas tipikal di ujung bagian<\/td>\n<td align=\"left\">Sembarang<\/td>\n<td align=\"left\">0..*<\/td>\n<td align=\"left\">1..* (biasanya)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Contoh<\/td>\n<td align=\"left\">Peminjam meminjam Buku<\/td>\n<td align=\"left\">Departemen memiliki Profesor<\/td>\n<td align=\"left\">Pesanan mengandung ItemBaris<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Kaskade penghapusan?<\/td>\n<td align=\"left\">Tidak pernah<\/td>\n<td align=\"left\">Opsional<\/td>\n<td align=\"left\">Wajib<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">Referensi bersama diizinkan?<\/td>\n<td align=\"left\">Ya<\/td>\n<td align=\"left\">Ya<\/td>\n<td align=\"left\">Tidak<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3.2 Kesalahan Umum dan Koreksinya<\/h3>\n<p>\u274c\u00a0<strong>Menggunakan komposisi untuk referensi bersama:<\/strong>\u00a0<code data-backticks=\"1\">Perpustakaan *-- Buku<\/code>Salah jika buku dapat dipinjam\/dipindahkan. Gunakan agregasi atau asosiasi.<br \/>\n\u2705\u00a0<strong>Koreksi:<\/strong>\u00a0<code data-backticks=\"1\">Library o-- Book<\/code> (agregasi) atau <code data-backticks=\"1\">Library -- Book<\/code> (asosiasi dengan peran <code data-backticks=\"1\">memegang<\/code>).<\/p>\n<p>\u274c\u00a0<strong>Menggunakan agregasi ketika siklus hidup terikat:<\/strong>\u00a0<code data-backticks=\"1\">Order o-- LineItem<\/code>salah jika item baris tidak bermakna tanpa pesanan.<br \/>\n\u2705\u00a0<strong>Koreksi:<\/strong>\u00a0<code data-backticks=\"1\">Order *-- LineItem<\/code> (komposisi).<\/p>\n<p>\u274c\u00a0<strong>Melewatkan multiplisitas:<\/strong> Setiap ujung relasi harus menentukan kardinalitas. Asumsi default bervariasi berdasarkan alat dan menyebabkan ambiguitas.<br \/>\n\u2705\u00a0<strong>Koreksi:<\/strong> Selalu beri anotasi: <code data-backticks=\"1\">1<\/code>,\u00a0<code data-backticks=\"1\">0..1<\/code>,\u00a0<code data-backticks=\"1\">0..*<\/code>,\u00a0<code data-backticks=\"1\">1..*<\/code>,\u00a0<code data-backticks=\"1\">n..m<\/code>.<\/p>\n<p>\u274c\u00a0<strong>Navigasi bidireksional tanpa pembenaran:<\/strong>Asosiasi bidireksional menciptakan keterikatan yang ketat dan siklus serialisasi.<br \/>\n\u2705\u00a0<strong>Koreksi:<\/strong>Gunakan arah tunggal sebagai default. Tambahkan navigasi balik hanya ketika permintaan bisnis membutuhkannya. Dokumentasikan alasannya.<\/p>\n<p>\u274c\u00a0<strong>Pewarisan untuk penggunaan ulang kode:<\/strong>Menggunakan pewarisan semata-mata untuk berbagi atribut\/metode melanggar LSP dan menciptakan kelas dasar yang rapuh.<br \/>\n\u2705\u00a0<strong>Koreksi:<\/strong>Utamakan komposisi daripada pewarisan. Ekstrak perilaku yang dibagikan ke dalam strategi\/visitor\/layanan yang disuntikkan melalui antarmuka.<\/p>\n<hr\/>\n<h2>4. Pemetaan Tingkat Abstraksi ke Siklus Pengembangan<\/h2>\n<table>\n<thead>\n<tr>\n<th align=\"left\">Fase<\/th>\n<th align=\"left\">Diagram Utama<\/th>\n<th align=\"left\">Diagram Sekunder<\/th>\n<th align=\"left\">Aktivitas Utama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\"><strong>Penemuan<\/strong><\/td>\n<td align=\"left\">Konseptual<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Wawancara domain, ekstraksi bahasa umum, validasi aturan bisnis<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Analisis<\/strong><\/td>\n<td align=\"left\">Konseptual \u2192 Logis<\/td>\n<td align=\"left\">\u2014<\/td>\n<td align=\"left\">Identifikasi konteks terbatas, definisikan batas layanan, ekstrak antarmuka<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Desain<\/strong><\/td>\n<td align=\"left\">Logis<\/td>\n<td align=\"left\">Konseptual (referensi)<\/td>\n<td align=\"left\">Terapkan pola desain, definisikan kontrak, validasi terhadap SOLID<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Implementasi<\/strong><\/td>\n<td align=\"left\">Fisik<\/td>\n<td align=\"left\">Logis (ketertelusuran)<\/td>\n<td align=\"left\">Hasilkan kode\/skema, konfigurasikan kerangka kerja, tulis uji coba<\/td>\n<\/tr>\n<tr>\n<td align=\"left\"><strong>Pemeliharaan<\/strong><\/td>\n<td align=\"left\">Fisik \u2194 Logis \u2194 Konseptual<\/td>\n<td align=\"left\">Semua<\/td>\n<td align=\"left\">Refaktor dengan ketertelusuran, perbarui model bisnis ketika domain bergeser<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Aturan Kritis:<\/strong>Jangan pernah melewatkan tingkat Konseptual. Tim yang langsung melompat ke Logis\/Fisik menghasilkan sistem yang secara teknis benar tetapi salah secara bisnis. Diagram Konseptual adalah polis asuransi Anda untuk mencegah pembangunan hal yang salah secara efisien.<\/p>\n<hr\/>\n<h2>5. Invarian Kualitas: Aturan yang Tidak Dapat Ditawar<\/h2>\n<h3>5.1 Integritas Struktural<\/h3>\n<ol>\n<li>\n<p><strong>Tanggung Jawab Tunggal:<\/strong>Setiap kelas memetakan tepat satu alasan untuk diubah. Jika Anda perlu menggunakan \u201cdan\u201d untuk menjelaskan tujuannya, pecahlah.<\/p>\n<\/li>\n<li>\n<p><strong>Kepatuhan Liskov:<\/strong>Subkelas harus dapat diganti untuk kelas induk tanpa merusak kode klien. Uji dengan koleksi polimorfik.<\/p>\n<\/li>\n<li>\n<p><strong>Pemisahan Antarmuka:<\/strong>Tidak ada klien yang dipaksa bergantung pada metode yang tidak digunakan. Pecah antarmuka yang berat menjadi antarmuka yang kohesif dan spesifik peran.<\/p>\n<\/li>\n<li>\n<p><strong>Inversi Ketergantungan:<\/strong>Modul tingkat tinggi bergantung pada abstraksi, bukan konkretisasi. Diagram Fisik harus menampilkan ini melalui antarmuka, bukan kelas konkret.<\/p>\n<\/li>\n<li>\n<p><strong>Multiplisitas Eksplisit:<\/strong>Setiap ujung asosiasi diberi anotasi. Tidak ada default implisit.<\/p>\n<\/li>\n<li>\n<p><strong>Navigabilitas yang Dibenarkan:<\/strong>Arah tunggal secara default. Arah ganda hanya dengan persyaratan kueri bisnis yang didokumentasikan.<\/p>\n<\/li>\n<\/ol>\n<h3>5.2 Disiplin Abstraksi<\/h3>\n<ol start=\"7\">\n<li>\n<p><strong>Kemurnian Tingkat:<\/strong>Tidak ada teknologi dalam Konseptual. Tidak ada jargon bisnis dalam Fisik tanpa tautan glosarium. Logis tetap netral terhadap platform.<\/p>\n<\/li>\n<li>\n<p><strong>Ketertelusuran Dijaga:<\/strong>Setiap elemen Fisik ditelusuri hingga leluhur Logis. Setiap elemen Logis ditelusuri hingga leluhur Konseptual. Kesenjangan menunjukkan persyaratan yang hilang atau penambahan fitur yang tidak perlu.<\/p>\n<\/li>\n<li>\n<p><strong>Pemeliharaan Paralel:<\/strong> Pembaruan merambat ke seluruh tingkatan. Identifikasi versi disinkronkan. Log perubahan merujuk pada semua diagram yang terpengaruh.<\/p>\n<\/li>\n<li>\n<p><strong>Penyelarasan Pemangku Kepentingan:<\/strong> Konsep divalidasi oleh bisnis. Logis ditinjau oleh arsitek. Fisik disetujui oleh tim pengembang. Tinjauan lintas tingkatan pada titik integrasi.<\/p>\n<\/li>\n<\/ol>\n<h3>5.3 Kendala Pragmatis<\/h3>\n<ol start=\"11\">\n<li>\n<p><strong>Batas Ukuran Diagram:<\/strong> Maksimal 15-20 kelas per diagram. Uraikan ke dalam subdomain\/paket. Gunakan diagram paket untuk navigasi.<\/p>\n<\/li>\n<li>\n<p><strong>Selektivitas Atribut\/Operasi:<\/strong> Tampilkan hanya yang relevan dengan tujuan diagram. Sembunyikan getter\/setter kecuali bersifat perilaku. Abaikan anggota yang diwariskan kecuali jika ditimpa.<\/p>\n<\/li>\n<li>\n<p><strong>Catatan di Atas Kerumitan:<\/strong> Gunakan catatan untuk invarian, kendala, dan alasan. Jangan mengkodekan aturan bisnis dalam nama atribut atau tanda tangan metode.<\/p>\n<\/li>\n<li>\n<p><strong>Spesifikasi yang Dapat Dieksekusi:<\/strong> PlantUML\/YAML\/Mermaid lebih disukai daripada alat GUI. Dikendalikan versi. Dapat dibandingkan perbedaannya. Terintegrasi dengan CI.<\/p>\n<\/li>\n<li>\n<p><strong>Dokumentasi yang Hidup:<\/strong> Diagram diperbarui bersama kode. Diagram yang kadaluarsa lebih buruk daripada tidak ada. Otomatiskan generasi dari kode jika memungkinkan (rekayasa terbalik), tetapi kurasi secara manual untuk kejelasan konseptual\/logis.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2>6. Anti-Pola: Mengenali dan Memperbaiki Kegagalan Umum<\/h2>\n<h3>6.1 Model Domain Anemis<\/h3>\n<p><strong>Gejala:<\/strong> Kelas hanyalah wadah data murni dengan hanya getter\/setter. Logika bisnis tersebar di seluruh layanan\/utilitas.<br \/>\n<strong>Penyebab:<\/strong> Pemikiran prosedural yang disamarkan sebagai OO; ketakutan terhadap model domain yang kaya; kesalahpahaman tentang pemisahan kepedulian.<br \/>\n<strong>Dampak:<\/strong> Hilangnya enkapsulasi; logika yang diduplikasi; pengujian yang sulit; aturan bisnis tidak terlihat dalam model.<br \/>\n<strong>Perbaikan:<\/strong> Pindahkan perilaku ke dalam kelas domain. Layanan mengoordinasikan, bukan mengimplementasikan. Validasi dengan pakar domain: &#8220;Apakah orang bisnis akan mengenali perilaku ini sebagai milik entitas ini?&#8221;<\/p>\n<h3>6.2 Fisikalisasi Dini<\/h3>\n<p><strong>Gejala:<\/strong> Diagram konseptual mencakup <code data-backticks=\"1\">@Entity<\/code>,\u00a0<code data-backticks=\"1\">VARCHAR<\/code>,\u00a0<code data-backticks=\"1\">Foreign Key<\/code>. Pemangku kepentingan bingung oleh kebisingan teknis.<br \/>\n<strong>Penyebab:<\/strong>  Analis cenderung menggunakan teknologi yang sudah dikenal; tekanan untuk &#8220;menjadi praktis&#8221;; kurangnya disiplin abstraksi.<br \/>\n<strong>Dampak:<\/strong>  Persyaratan terikat pada tumpukan teknologi; evaluasi ulang tidak mungkin; keterlibatan bisnis berkurang.<br \/>\n<strong>Perbaikan:<\/strong>  Terapkan larangan kosakata selama sesi konseptual. Tinjau dengan pemangku kepentingan non-teknis sebelum melanjutkan. Pertahankan file terpisah untuk setiap tingkat abstraksi.<\/p>\n<h3>6.3 Penyalahgunaan Warisan<\/h3>\n<p><strong>Gejala:<\/strong>  Hierarki yang dalam (&gt;3 tingkat); subkelas menimpa perilaku induk secara tidak konsisten; kelas dasar dengan logika kondisional berdasarkan subjenis.<br \/>\n<strong>Penyebab:<\/strong>  Motivasi penggunaan ulang kode; pemikiran taksonomi; kesalahpahaman tentang polimorfisme.<br \/>\n<strong>Dampak:<\/strong>  Masalah kelas dasar yang rapuh; pelanggaran LSP; kompleksitas pengujian yang eksponensial.<br \/>\n<strong>Perbaikan:<\/strong>  Ratakan hierarki. Ekstrak perilaku yang bervariasi ke dalam strategi\/kebijakan. Utamakan komposisi. Terapkan prinsip &#8220;Beri Tahu, Jangan Tanya&#8221;.<\/p>\n<h3>6.4 Kelas Dewa \/ Gumpalan<\/h3>\n<p><strong>Gejala:<\/strong>  Satu kelas dengan &gt;20 atribut, &gt;30 metode, ketergantungan pada &gt;10 kelas lain.<br \/>\n<strong>Penyebab:<\/strong>  Penambahan fitur secara bertahap tanpa refactoring; kurangnya metrik kohesi; pola anti &#8220;manajer&#8221; yang terpusat.<br \/>\n<strong>Dampak:<\/strong>  Tidak dapat dipelihara; tidak dapat diuji; menghambat pengembangan paralel; beban kognitif berlebihan.<br \/>\n<strong>Perbaikan:<\/strong>  Terapkan refactoring Ekstrak Kelas\/Metode. Identifikasi kluster atribut\/metode yang kohesif. Delegasikan ke kolaborator khusus. Ukur kompleksitas siklomatik dan LCOM4.<\/p>\n<h3>6.5 Peluruhan Terkoordinasi<\/h3>\n<p><strong>Gejala:<\/strong> Kode berevolusi tetapi diagram mandek. Karyawan baru belajar dari model yang sudah usang. Audit gagal.<br \/>\n<strong>Penyebab:<\/strong> Diagram diperlakukan sebagai hasil akhir, bukan artefak yang hidup. Tidak ada integrasi CI. Beban pembaruan manual.<br \/>\n<strong>Dampak:<\/strong> Kehilangan pengetahuan; pergeseran arsitektur; risiko ketidakpatuhan.<br \/>\n<strong>Perbaikan:<\/strong> Integrasikan validasi diagram ke dalam CI. Hasilkan tampilan fisik secara otomatis dari kode. Wajibkan pembaruan diagram dalam daftar periksa PR. Perlakukan diagram sebagai artefak sumber utama.<\/p>\n<hr\/>\n<h2>7. Daftar Periksa Sebelum Anda Menerbitkan Diagram Kelas<\/h2>\n<p>Gunakan gerbang ini sebelum menganggap Diagram Kelas selesai:<\/p>\n<h3>Pemeriksaan Universal<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Tingkat abstraksi dinyatakan secara eksplisit dalam judul\/header<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Semua kelas dinamai dengan kata benda tunggal<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Semua relasi memiliki multiplisitas di kedua ujungnya<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Nama peran hadir pada semua asosiasi<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Modifikasi visibilitas ditentukan untuk semua atribut\/operasi<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Diagram sesuai dengan batas kognitif (&lt;20 kelas) atau diuraikan<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Catatan digunakan untuk invarian\/kendala, bukan untuk kerumitan<\/p>\n<\/li>\n<\/ul>\n<h3>Pemeriksaan Spesifik Tingkat<\/h3>\n<p><strong>Konseptual:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Nol referensi teknologi<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Perilaku bisnis dimodelkan, bukan CRUD<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Divalidasi oleh tanda tangan pakar domain<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Bahasa universal konsisten dengan glosarium<\/p>\n<\/li>\n<\/ul>\n<p><strong>Logis:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Hanya tipe yang netral terhadap platform<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Antarmuka didefinisikan untuk semua batas layanan<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Pola desain diterapkan secara sengaja (didokumentasikan)<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Dapat ditelusuri ke model konseptual<\/p>\n<\/li>\n<\/ul>\n<p><strong>Fisik:<\/strong><\/p>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Anotasi teknologi lengkap dan akurat<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Strategi fetch\/cascade telah ditentukan<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Dapat dilacak ke model logis<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Implikasi kinerja telah didokumentasikan<\/p>\n<\/li>\n<\/ul>\n<h3>Pemeriksaan lintas tingkat<\/h3>\n<ul>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Perubahan disebarkan ke semua tingkat yang terpengaruh<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Identifikasi versi telah disinkronkan<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Tautan glosarium dijaga antara istilah bisnis dan teknis<\/p>\n<\/li>\n<li class=\"task-list-item\" data-task=\"\">\n<p>Pemangku kepentingan yang sesuai untuk setiap tingkat telah dikonfirmasi<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>8. Kesimpulan: Nilai Strategis dari Pemodelan yang Terdisiplin<\/h2>\n<p>Diagram Kelas yang dibangun dengan baik<a href=\"https:\/\/online.visual-paradigm.com\/diagrams\/solutions\/free-class-diagram-tool\/\">Diagram Kelas<\/a>lebih dari sekadar dokumentasi\u2014ini adalah spesifikasi yang dapat dieksekusi dari niat arsitektur. Dengan secara ketat mempertahankan tiga tingkat abstraksi, menegakkan semantik hubungan, dan menerapkan invarian SOLID, Anda mengubah Diagram Kelas dari gambar statis menjadi artefak teknik dinamis yang mencegah pekerjaan ulang yang mahal, memastikan keselarasan bisnis, dan memungkinkan evolusi berkelanjutan.<\/p>\n<p>Perbedaan antara Konseptual, Logis, dan Fisik bukanlah hal akademis\u2014ini adalah pertahanan utama terhadap dua kegagalan paling mahal dalam proyek perangkat lunak: membangun hal yang salah dengan benar, dan membangun hal yang benar dengan salah. Model Konseptual memastikan Anda memahami masalahnya. Model Logis memastikan Anda telah merancang solusi yang sehat. Model Fisik memastikan Anda dapat membangun dan mengoperasikannya dengan andal.<\/p>\n<p><a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">PlantUML<\/a>mengangkat praktik ini dari seni menjadi teknik. Berbasis teks, terkendali versi, dapat dibandingkan perbedaannya, dan terintegrasi dengan CI,<a href=\"https:\/\/www.visual-paradigm.com\/features\/vpascode\/\">diagram PlantUML<\/a>adalah kode sumber\u2014bukan hiasan. Mereka berpartisipasi dalam siklus hidup yang sama dengan kode aplikasi Anda, tunduk pada disiplin tinjauan, pengujian, dan pemeliharaan yang sama.<\/p>\n<p>Saat Anda menerapkan konsep-konsep ini, ingatlah: ukuran utama dari sebuah<a href=\"https:\/\/w3.cs.jmu.edu\/bernstdh\/web\/common\/labs\/skills_visualparadigm_class-diagrams\/index.php\">Diagram Kelas<\/a>keberhasilannya bukanlah keanggunan estetisnya atau kepatuhannya terhadap UML, melainkan utilitas analitisnya. Apakah ini mengungkapkan kompleksitas tersembunyi? Apakah ini mengekspos invarian yang dilanggar? Apakah ini menyelaraskan berbagai pemangku kepentingan di sekitar pemahaman bersama? Apakah ini bertahan saat bersentuhan dengan realitas?<\/p>\n<p class=\"\">Gunakan daftar periksa sebagai gerbang. Perlakukan<a href=\"https:\/\/www.vpascode.com\/tw\/why-vpascode-is-the-best-software-for-editing-plantuml-and-how-others-compare\/\">templat PlantUML<\/a>sebagai standar yang hidup. Jaga keterlacakan tanpa kompromi. Dan jangan pernah lupa: tujuannya bukan diagram yang sempurna, tetapi perangkat lunak yang lebih baik. Ketika dieksekusi dengan disiplin, pemodelan Diagram Kelas tetap menjadi salah satu alat paling ampuh untuk menaklukkan kompleksitas dan mengirimkan sistem yang tidak hanya dibangun dengan baik tetapi benar-benar sesuai dengan tujuannya<\/p>\n<h3>Referensi<\/h3>\n<ol>\n<li>\n<p><a href=\"https:\/\/blog.visual-paradigm.com\/from-concept-to-code-a-comprehensive-uml-class-diagram-guide-case-study\/\"><strong>Dari Konsep ke Kode: Panduan Komprehensif Diagram Kelas UML &amp; Studi Kasus<\/strong><\/a>: Panduan ekstensif yang mencakup sintaks diagram kelas UML, hubungan, dan studi kasus nyata dari platform pengiriman makanan.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/tw\/docs\/mastering-uml-2-5-a-use-case-driven-approach-to-agile-modeling\/module-3-the-skeleton-the-7-structural-uml-diagrams\/practical-3-structural-implementation\/\"><strong>Praktikum 3: Implementasi Struktural<\/strong><\/a>: Sesi praktis tentang membangun diagram kelas model domain, termasuk menggunakan generasi AI dan penyempurnaan manual di Visual Paradigm.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/skills.visual-paradigm.com\/docs\/uml-basics-diagrams-for-beginners\/mastering-class-diagrams-beginner\/class-diagram-example-simple-uml-project\/\"><strong>Contoh Praktis: Membangun Diagram Kelas Sederhana<\/strong><\/a>: Tutorial ramah pemula yang memandu langkah demi langkah dalam membangun diagram kelas sederhana untuk sistem manajemen perpustakaan, mendefinisikan kelas, atribut, dan hubungan.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/tutorials.visual-paradigm.com\/how-to-generate-complex-class-diagrams-visual-paradigm-ai\/\"><strong>Cara Menghasilkan Diagram Kelas Kompleks Menggunakan Generator UML AI Visual Paradigm<\/strong><\/a>: Sebuah tutorial yang berfokus pada penggunaan alat AI untuk menghasilkan diagram kelas kompleks untuk aplikasi perusahaan, dengan instruksi langkah demi langkah dan praktik terbaik.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/pt\/docs\/streamlining-the-software-lifecycle-integrating-ai-use-case-modeling-with-visual-paradigms-all-in-one-platform\/5-behavioral-and-structural-design\/5-3-static-structure-class-diagrams\/\"><strong>5.3 Struktur Statis (Diagram Kelas)<\/strong><\/a>: Sebuah panduan tentang cara menurunkan diagram kelas secara otomatis dari spesifikasi kasus penggunaan dan diagram urutan menggunakan AI, dengan contoh praktis seperti aplikasi reservasi restoran.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/guides.visual-paradigm.com\/ja\/docs\/mastering-uml-visual-modeling-in-the-visual-paradigm-ai-ecosystem\/module-4-mastery-of-structural-modeling-the-static-view\/ai-class-diagram-generation\/\"><strong>Pembuatan Diagram Kelas AI<\/strong><\/a>: Sebuah artikel mendalam tentang penggunaan Chatbot AI untuk menghasilkan diagram kelas yang sesuai dengan UML 2.5 dari deskripsi bahasa alami dan menyempurnakannya secara iteratif.<\/p>\n<\/li>\n<li>\n<p class=\"\"><a href=\"https:\/\/blog.visual-paradigm.com\/fr\/beginners-guide-to-class-diagrams\/\"><strong>Panduan Pemula untuk Diagram Kelas<\/strong><\/a>: Sebuah panduan dasar (tersedia dalam beberapa bahasa) yang memperkenalkan komponen diagram kelas dan menunjukkan cara membuatnya menggunakan Visual Paradigm Online.<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Pendahuluan Dalam rekayasa perangkat lunak berorientasi objek, Diagram Kelas adalah artefak yang paling umum namun sering disalahgunakan. Seringkali direduksi menjadi sekadar skema basis data dalam notasi UML atau diperlakukan sebagai&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","inline_featured_image":false,"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","_fifu_image_alt":"","fifu_alt":"","_fifu_alt":"","fifu_image_title":"","_fifu_image_title":"","fifu_input_alt":"","vp_image_hash":"","footnotes":""},"categories":[1],"tags":[],"asset-category":[],"class_list":["post-527","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"source_url":"","source_h1_title":"","fifu_image_url":"","fifu_image_alt":"","vp_image_hash":"","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"og:description\" content=\"Pendahuluan Dalam rekayasa perangkat lunak berorientasi objek, Diagram Kelas adalah artefak yang paling umum namun sering disalahgunakan. Seringkali direduksi menjadi sekadar skema basis data dalam notasi UML atau diperlakukan sebagai&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\" \/>\n<meta property=\"og:site_name\" content=\"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-14T08:16:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-03T15:28:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\" \/>\n<meta name=\"author\" content=\"curtis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\"},\"author\":{\"name\":\"curtis\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\"},\"headline\":\"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\"},\"wordCount\":2680,\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"id\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\",\"name\":\"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\",\"isPartOf\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"datePublished\":\"2026-08-14T08:16:11+00:00\",\"dateModified\":\"2026-09-03T15:28:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage\",\"url\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.ai-diagrams.com\/id\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#website\",\"url\":\"https:\/\/www.ai-diagrams.com\/id\/\",\"name\":\"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.ai-diagrams.com\/id\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#organization\",\"name\":\"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\",\"url\":\"https:\/\/www.ai-diagrams.com\/id\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.ai-diagrams.com\/id\/wp-content\/uploads\/sites\/20\/2026\/03\/ai-diagram-logo.png\",\"contentUrl\":\"https:\/\/www.ai-diagrams.com\/id\/wp-content\/uploads\/sites\/20\/2026\/03\/ai-diagram-logo.png\",\"width\":648,\"height\":648,\"caption\":\"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News\"},\"image\":{\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1\",\"name\":\"curtis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g\",\"caption\":\"curtis\"},\"url\":\"https:\/\/www.ai-diagrams.com\/id\/author\/curtis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/","og_locale":"id_ID","og_type":"article","og_title":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","og_description":"Pendahuluan Dalam rekayasa perangkat lunak berorientasi objek, Diagram Kelas adalah artefak yang paling umum namun sering disalahgunakan. Seringkali direduksi menjadi sekadar skema basis data dalam notasi UML atau diperlakukan sebagai&hellip;","og_url":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/","og_site_name":"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","article_published_time":"2026-08-14T08:16:11+00:00","article_modified_time":"2026-09-03T15:28:09+00:00","og_image":[{"url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","type":"","width":"","height":""}],"author":"curtis","twitter_card":"summary_large_image","twitter_misc":{"Ditulis oleh":false,"Estimasi waktu membaca":"12 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#article","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/"},"author":{"name":"curtis","@id":"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1"},"headline":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/"},"wordCount":2680,"publisher":{"@id":"https:\/\/www.ai-diagrams.com\/id\/#organization"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","articleSection":["Uncategorized"],"inLanguage":"id"},{"@type":"WebPage","@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/","url":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/","name":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi - AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","isPartOf":{"@id":"https:\/\/www.ai-diagrams.com\/id\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","datePublished":"2026-08-14T08:16:11+00:00","dateModified":"2026-09-03T15:28:09+00:00","breadcrumb":{"@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ai-diagrams.com\/id\/1106-2\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#primaryimage","url":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png","contentUrl":"https:\/\/www.ai-diagrams.com\/wp-content\/uploads\/2026\/08\/img_6a7ecd54b7185.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ai-diagrams.com\/id\/1106-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ai-diagrams.com\/id\/"},{"@type":"ListItem","position":2,"name":"Menguasai Pemodelan Diagram Kelas: Abstraksi, Hubungan, dan Aturan Kohesi"}]},{"@type":"WebSite","@id":"https:\/\/www.ai-diagrams.com\/id\/#website","url":"https:\/\/www.ai-diagrams.com\/id\/","name":"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","description":"","publisher":{"@id":"https:\/\/www.ai-diagrams.com\/id\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ai-diagrams.com\/id\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.ai-diagrams.com\/id\/#organization","name":"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News","url":"https:\/\/www.ai-diagrams.com\/id\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/logo\/image\/","url":"https:\/\/www.ai-diagrams.com\/id\/wp-content\/uploads\/sites\/20\/2026\/03\/ai-diagram-logo.png","contentUrl":"https:\/\/www.ai-diagrams.com\/id\/wp-content\/uploads\/sites\/20\/2026\/03\/ai-diagram-logo.png","width":648,"height":648,"caption":"AI Diagrams Indonesia\u2013 Explore Artificial Intelligence Trends &amp; News"},"image":{"@id":"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/7799982e6b83f10fb8a41071b61608d1","name":"curtis","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.ai-diagrams.com\/id\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6910084565fcc601ec03c6693bb8ea480c1e52ccaa0efb299eb038bb6a1edc87?s=96&d=mm&r=g","caption":"curtis"},"url":"https:\/\/www.ai-diagrams.com\/id\/author\/curtis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/posts\/527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/comments?post=527"}],"version-history":[{"count":0,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/posts\/527\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/media?parent=527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/categories?post=527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/tags?post=527"},{"taxonomy":"asset-category","embeddable":true,"href":"https:\/\/www.ai-diagrams.com\/id\/wp-json\/wp\/v2\/asset-category?post=527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}