{"id":11811,"date":"2026-05-21T15:55:49","date_gmt":"2026-05-21T07:55:49","guid":{"rendered":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"},"modified":"2026-05-30T16:11:21","modified_gmt":"2026-05-30T08:11:21","slug":"mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml","status":"publish","type":"post","link":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","title":{"rendered":"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML"},"content":{"rendered":"<h2 data-nodeid=\"111\"><strong data-nodeid=\"293\">Pendahuluan<\/strong><\/h2>\n<p data-nodeid=\"112\">Dalam lingkungan pengembangan perangkat lunak yang kompleks saat ini, komunikasi yang jelas dan pemodelan sistem yang tepat sangat penting bagi keberhasilan proyek. Di antara alat-alat paling kuat dalam toolkit arsitek perangkat lunak adalah\u00a0<strong data-nodeid=\"303\">Diagram Kelas UML<\/strong>\u2014bahasa visual yang menghubungkan kesenjangan antara kebutuhan abstrak dan implementasi yang nyata.<\/p>\n<p data-nodeid=\"113\">Studi kasus ini mengeksplorasi bagaimana diagram kelas berfungsi sebagai tulang punggung desain berorientasi objek, memungkinkan tim untuk memodelkan struktur sistem statis, mendefinisikan hubungan antar entitas, dan menetapkan kontrak yang jelas untuk pengembangan. Melalui contoh sistem manajemen pesanan e-commerce yang praktis, kami akan menunjukkan bagaimana secara bertahap menyempurnakan diagram kelas dari tiga perspektif pengembangan\u2014konseptual, spesifikasi, dan implementasi\u2014sambil memanfaatkan\u00a0<strong data-nodeid=\"311\">PlantUML<\/strong>\u00a0untuk dokumentasi yang dapat dieksekusi dan terkelola versinya.<\/p>\n<p data-nodeid=\"114\">Apakah Anda seorang analis bisnis yang memodelkan konsep domain, seorang pengembang yang merancang API, atau seorang kepala tim yang memastikan konsistensi arsitektur, panduan ini memberikan wawasan yang dapat diambil tindakan untuk membuat diagram kelas yang mendorong kejelasan, mengurangi ambiguitas, dan mempercepat pengiriman.<\/p>\n<hr data-nodeid=\"115\"\/>\n<h2 data-nodeid=\"116\"><strong data-nodeid=\"318\">Memahami Diagram Kelas: Ringkasan Konsep Inti<\/strong><\/h2>\n<p data-nodeid=\"117\"><em data-nodeid=\"322\">(Ringkasan dari pengetahuan dasar)<\/em><\/p>\n<p data-nodeid=\"118\">Sebuah\u00a0<strong data-nodeid=\"328\">Diagram Kelas<\/strong>\u00a0dalam UML adalah diagram struktur statis yang memvisualisasikan:<\/p>\n<ul data-nodeid=\"119\">\n<li data-nodeid=\"120\">\n<p data-nodeid=\"121\"><strong data-nodeid=\"333\">Kelas<\/strong>: Gambaran rancangan yang mendefinisikan objek dengan atribut (keadaan) dan operasi (perilaku)<\/p>\n<\/li>\n<li data-nodeid=\"122\">\n<p data-nodeid=\"123\"><strong data-nodeid=\"338\">Hubungan<\/strong>: Pewarisan, asosiasi, agregasi, komposisi, dan ketergantungan<\/p>\n<\/li>\n<li data-nodeid=\"124\">\n<p data-nodeid=\"125\"><strong data-nodeid=\"357\">Kendala<\/strong>: Visibilitas (<code data-backticks=\"1\" data-nodeid=\"343\">+<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"345\">-<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"347\">#<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"349\">~<\/code>), multiplicity (<code data-backticks=\"1\" data-nodeid=\"351\">1<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"353\">0..*<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"355\">1..5<\/code>), dan kemampuan navigasi<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"126\"><strong data-nodeid=\"361\">Elemen Notasi Kunci<\/p>\n<p><\/strong><\/h3>\n<p id=\"UHnOxfB\"><img alt=\"\" class=\"alignnone size-full wp-image-24654\" decoding=\"async\" height=\"184\" loading=\"lazy\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png 424w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-300x130.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-150x65.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8-400x174.png 400w\" width=\"424\"\/><\/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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" 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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" \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\" data-nodeid=\"127\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass Order {\r\n  -orderId: String\r\n  -orderDate: Date\r\n  +calculateTotal(): Double\r\n  +addItem(item: Product, qty: int): void\r\n}\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" \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#plantuml:HOwn2W8n44JxGFvXonFr1r9TONELWlx0cWqIsCjYiZaGyT_TO64ppBoPOkQcMBMlx5raR0tEbLA5jtS0Hnb-eG1NhRay_ko4cW8C7MmVaMDdIpTHv6bdbVGx_qeaMZIjKpO9SAb2FUe1dleAa8lQU9DCtdsycrCXk_85\" 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<h3 data-nodeid=\"128\"><strong data-nodeid=\"365\">Referensi Cepat Jenis Hubungan<\/strong><\/h3>\n<table data-nodeid=\"130\">\n<thead data-nodeid=\"131\">\n<tr data-nodeid=\"132\">\n<th data-nodeid=\"134\">Tipe<\/th>\n<th data-nodeid=\"135\">Simbol<\/th>\n<th data-nodeid=\"136\">Makna<\/th>\n<th data-nodeid=\"137\">Contoh<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"142\">\n<tr data-nodeid=\"143\">\n<td data-nodeid=\"144\"><strong data-nodeid=\"373\">Pewarisan<\/strong><\/td>\n<td data-nodeid=\"145\">`\u2013<\/td>\n<td data-nodeid=\"146\">&gt;`<\/td>\n<td data-nodeid=\"147\">\u201cadalah-a\u201d<\/td>\n<\/tr>\n<tr data-nodeid=\"150\">\n<td data-nodeid=\"151\"><strong data-nodeid=\"384\">Asosiasi<\/strong><\/td>\n<td data-nodeid=\"152\"><code data-backticks=\"1\" data-nodeid=\"385\">--<\/code><\/td>\n<td data-nodeid=\"153\">Tautan struktural<\/td>\n<td data-nodeid=\"154\"><code data-backticks=\"1\" data-nodeid=\"387\">Order -- Customer<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"155\">\n<td data-nodeid=\"156\"><strong data-nodeid=\"391\">Agregasi<\/strong><\/td>\n<td data-nodeid=\"157\"><code data-backticks=\"1\" data-nodeid=\"392\">o--<\/code><\/td>\n<td data-nodeid=\"158\">\u201cmemiliki-a\u201d (lemah)<\/td>\n<td data-nodeid=\"159\"><code data-backticks=\"1\" data-nodeid=\"397\">Gudang o-- Produk<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"160\">\n<td data-nodeid=\"161\"><strong data-nodeid=\"401\">Komposisi<\/strong><\/td>\n<td data-nodeid=\"162\"><code data-backticks=\"1\" data-nodeid=\"402\">*--<\/code><\/td>\n<td data-nodeid=\"163\">\u201cmemiliki-a\u201d (kuat)<\/td>\n<td data-nodeid=\"164\"><code data-backticks=\"1\" data-nodeid=\"407\">Order *-- ItemPesanan<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"165\">\n<td data-nodeid=\"166\"><strong data-nodeid=\"411\">Ketergantungan<\/strong><\/td>\n<td data-nodeid=\"167\"><code data-backticks=\"1\" data-nodeid=\"412\">..&gt;<\/code><\/td>\n<td data-nodeid=\"168\">\u201cmenggunakan\u201d (sementara)<\/td>\n<td data-nodeid=\"169\"><code data-backticks=\"1\" data-nodeid=\"417\">PaymentService ..&gt; Logger<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"170\"\/>\n<h2 data-nodeid=\"171\"><strong data-nodeid=\"421\">Studi Kasus: Sistem Manajemen Pesanan E-Commerce<\/strong><\/h2>\n<h3 data-nodeid=\"172\"><strong data-nodeid=\"425\">Persyaratan Bisnis<\/strong><\/h3>\n<p data-nodeid=\"173\">Seorang penjual online membutuhkan sistem untuk:<\/p>\n<ol data-nodeid=\"174\">\n<li data-nodeid=\"175\">\n<p data-nodeid=\"176\">Kelola pelanggan, produk, dan pesanan<\/p>\n<\/li>\n<li data-nodeid=\"177\">\n<p data-nodeid=\"178\">Dukung item pesanan dengan kuantitas dan harga<\/p>\n<\/li>\n<li data-nodeid=\"179\">\n<p data-nodeid=\"180\">Kelola berbagai metode pembayaran<\/p>\n<\/li>\n<li data-nodeid=\"181\">\n<p data-nodeid=\"182\">Lacak status pesanan melalui siklus hidup<\/p>\n<\/li>\n<li data-nodeid=\"183\">\n<p data-nodeid=\"184\">Izinkan produk termasuk dalam kategori<\/p>\n<\/li>\n<li data-nodeid=\"185\">\n<p data-nodeid=\"186\">Dukung checkout sebagai tamu (asosiasi pelanggan opsional)<\/p>\n<\/li>\n<\/ol>\n<h3 data-nodeid=\"187\"><strong data-nodeid=\"436\">Fase 1: Model Konseptual (Perspektif Domain)<\/strong><\/h3>\n<p data-nodeid=\"188\"><em data-nodeid=\"440\">Tidak tergantung bahasa, fokus pada konsep dunia nyata<\/em><\/p>\n<\/p>\n<p id=\"AjOBHwj\"><img alt=\"\" class=\"alignnone size-full wp-image-24655\" decoding=\"async\" height=\"688\" loading=\"lazy\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb.png 865w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-300x239.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-768x611.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-150x119.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb958147eb-400x318.png 400w\" width=\"865\"\/><\/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#plantuml:VLDDJyCm3BrNwd-mUa526cBN7X3Jne730F4FtCHiaV95uXmcn7_7QJj61U9KEtb-VdvExpDZuk9isx1XIx0DNb7aWXRsGPFjuM6r3SvHKWIxuD3ujcaRPJ5ds9RCGQxWesq0F3ggNnAGhK4-cXYDFsoqJfHpstnUIbzIq4Nnib9JLib4Di7NTC1CByaeMbHkaUaGqkcVqX_evwJF-a8DdueRA7sdEo4RfJ9ooJNYm6WtBXJFluaUcTn4zbxGYsEd6XTlUDOfJ6KOAPRJuicHdwUDKx8dFWOzjapeCwgg_N4ymBczN1b7eit5cUuANibYHLPpHV3t2hfr1wiLTBStDzVTF7OFqQAY37TjCvrKr7M5hI-mSQWULF0isnt1v-tyGJgZCKR2bC7u1Nu2ZWswowPw6CW6VyZYxbBBHShPeXuoiRn43SEfOjl61oP8vd1a26-JY6hDnizJ9eholAGs0uAQ_RWQbnbBKaTvHIAJApbw_TFjjY4vgForpxqayYTy0G00\" 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#plantuml:TLBBQkH03BmR_0_2buN0XEGwXn2O13Q4i8Ra1-HfnTQw7wPRpJ8i---h7dl66PASh5PNLPTAla-2KRApTIKibk0b6BBm77oYIJBQBJm4X-pXSRCBpb7SKrtLrTvYIh3BIOBsu6zT0NXqLBwaU5iAjEXGMl8zHtRew-hVocrZC7albrH3QOmy9Iw70MEF3vWmNX1tADI7UFYM-G7xAvgpk-12R2cXBqO017tVe_tGqIWafrBzra1mU0k2zhFSav2R9SUCNbF3T7RxgWgBMExa4x_5WoE_pEn8DEkMN8S7Z3EBpPjM2SSvWTd7qIqxKdzkMlH-mC_SPTyNsdaBpMq3cmqqDzVNLyqo-nRKxeGoeeUxkfgR1NXLaBShyZZM5ZgAdBX0JmlwGdN1kkptsO8fUxvWpD3Z0yswhs8bEanvN2chdzNEAQKj64vaTK5St0TBGw7KbGz24BaV1CBxxAXaz4fTnW6MZMg-Vt1ao-0P1IRDcIpFCHkzbbFGUcMF_u9UaJTGrCihzthG_Fy3\" \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\" data-nodeid=\"189\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitle Model Konseptual: Domain E-Commerce\r\n\r\nclass Customer {\r\n  name\r\n  email\r\n  alamatPengiriman\r\n}\r\n\r\nclass Product {\r\n  name\r\n  deskripsi\r\n  hargaDasar\r\n}\r\n\r\nclass Category {\r\n  name\r\n  deskripsi\r\n}\r\n\r\nclass Order {\r\n  nomorPesanan\r\n  tanggalPesanan\r\n  status\r\n  jumlahTotal\r\n}\r\n\r\nclass OrderItem {\r\n  kuantitas\r\n  hargaSatuan\r\n  subtotal\r\n}\r\n\r\nclass Payment {\r\n  metodePembayaran\r\n  idTransaksi\r\n  jumlah\r\n  timestamp\r\n}\r\n\r\n' Hubungan\r\nCustomer \"1\" -- \"0..*\" Order : tempatkan &gt;\r\nOrder \"1\" *-- \"1..*\" OrderItem : berisi &gt;\r\nProduct \"1\" -- \"0..*\" OrderItem : muncul dalam &gt;\r\nProduct \"0..*\" -- \"1\" Category : termasuk dalam &gt;\r\nOrder \"1\" -- \"1..*\" Payment : diselesaikan oleh &gt;\r\n\r\nnote right of Order\r\n  Sebuah Pesanan mewakili niat pembelian\r\n  dan transaksi pelanggan\r\nend note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLBBQkH03BmR_0_2buN0XEGwXn2O13Q4i8Ra1-HfnTQw7wPRpJ8i---h7dl66PASh5PNLPTAla-2KRApTIKibk0b6BBm77oYIJBQBJm4X-pXSRCBpb7SKrtLrTvYIh3BIOBsu6zT0NXqLBwaU5iAjEXGMl8zHtRew-hVocrZC7albrH3QOmy9Iw70MEF3vWmNX1tADI7UFYM-G7xAvgpk-12R2cXBqO017tVe_tGqIWafrBzra1mU0k2zhFSav2R9SUCNbF3T7RxgWgBMExa4x_5WoE_pEn8DEkMN8S7Z3EBpPjM2SSvWTd7qIqxKdzkMlH-mC_SPTyNsdaBpMq3cmqqDzVNLyqo-nRKxeGoeeUxkfgR1NXLaBShyZZM5ZgAdBX0JmlwGdN1kkptsO8fUxvWpD3Z0yswhs8bEanvN2chdzNEAQKj64vaTK5St0TBGw7KbGz24BaV1CBxxAXaz4fTnW6MZMg-Vt1ao-0P1IRDcIpFCHkzbbFGUcMF_u9UaJTGrCihzthG_Fy3\" \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#plantuml:VLDDJyCm3BrNwd-mUa526cBN7X3Jne730F4FtCHiaV95uXmcn7_7QJj61U9KEtb-VdvExpDZuk9isx1XIx0DNb7aWXRsGPFjuM6r3SvHKWIxuD3ujcaRPJ5ds9RCGQxWesq0F3ggNnAGhK4-cXYDFsoqJfHpstnUIbzIq4Nnib9JLib4Di7NTC1CByaeMbHkaUaGqkcVqX_evwJF-a8DdueRA7sdEo4RfJ9ooJNYm6WtBXJFluaUcTn4zbxGYsEd6XTlUDOfJ6KOAPRJuicHdwUDKx8dFWOzjapeCwgg_N4ymBczN1b7eit5cUuANibYHLPpHV3t2hfr1wiLTBStDzVTF7OFqQAY37TjCvrKr7M5hI-mSQWULF0isnt1v-tyGJgZCKR2bC7u1Nu2ZWswowPw6CW6VyZYxbBBHShPeXuoiRn43SEfOjl61oP8vd1a26-JY6hDnizJ9eholAGs0uAQ_RWQbnbBKaTvHIAJApbw_TFjjY4vgForpxqayYTy0G00\" 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 data-nodeid=\"190\"><strong data-nodeid=\"444\">Keputusan Desain Utama:<\/strong><\/p>\n<ul data-nodeid=\"191\">\n<li data-nodeid=\"192\">\n<p data-nodeid=\"193\">Komposisi (<code data-backticks=\"1\" data-nodeid=\"446\">*--<\/code>) antara\u00a0<code data-backticks=\"1\" data-nodeid=\"448\">Pesanan<\/code>\u00a0dan\u00a0<code data-backticks=\"1\" data-nodeid=\"450\">ItemPesanan<\/code>: Item tidak dapat ada tanpa pesanan<\/p>\n<\/li>\n<li data-nodeid=\"194\">\n<p data-nodeid=\"195\">Asosiasi antara\u00a0<code data-backticks=\"1\" data-nodeid=\"453\">Produk<\/code>\u00a0dan\u00a0<code data-backticks=\"1\" data-nodeid=\"455\">Kategori<\/code>: Produk dapat dikategorikan ulang<\/p>\n<\/li>\n<li data-nodeid=\"196\">\n<p data-nodeid=\"197\">Multiplikasi\u00a0<code data-backticks=\"1\" data-nodeid=\"458\">0..*<\/code>\u00a0untuk Pesanan-Pelanggan: Mendukung checkout sebagai tamu<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"198\"\/>\n<h3 data-nodeid=\"199\"><strong data-nodeid=\"463\">Fase 2: Model Spesifikasi (Perspektif Antarmuka)<\/strong><\/h3>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">Fokus pada kontrak perangkat lunak, menyembunyikan detail implementasi<\/em><\/p>\n<\/p>\n<p id=\"fNvtqQK\"><img alt=\"\" class=\"alignnone size-full wp-image-24656\" decoding=\"async\" height=\"436\" loading=\"lazy\" sizes=\"auto, (max-width: 1632px) 100vw, 1632px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04.png 1632w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-300x80.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-1030x275.png 1030w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-768x205.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-1536x410.png 1536w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-150x40.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9a2b0b04-400x107.png 400w\" width=\"1632\"\/><\/p>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">\u00a0<\/em><\/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#plantuml:TLHBRkCm3DqRy1suQu89SW1Z47I0R0nCqIBf1LIPJeJAb4UY0XZ5t7resSuaZhipoSV7tvEV0olFiR5vneOjmh55RMgZ5Hj7yE8gj0KSqL-CHYY9qTTAOyYpF3EJ1UMhhz1FgAyy0_YXFIh655Zf6DWrwCjAkDWREct0C3QXWDycyC-4AiMnVt_ThGj8jdmdeXFomE8IwaennyMscWeUMN4CyuGDXEGVymQGi7muPr7HqBMoEjg9vzsniWjrNnnXbsT_PrjuKrs3n6_UoOQ2y-Ccsi4UeuzTjKDWZwoCbUv6eCorlXe73D5oelDOHwecDlQAWjBzjMuvLUCYyTYfq1nIqiGoRxoaYt0vtyrEU4Rz-UiYNQaFOmrtAncbYfflA_s9YaGwNG52EDkcno24s5zsuHgt2ZWaP19TZzuz4Cbdm1lKmbKkpbJZRDgg4Axo6CUPPGmZFYWpkRyLPufoBukh2iIneAl7HaQA_wAutsJotYrpK3KP4PJSv5vrJx375gb2qgP_ZVSlSBlTBHorW1Wmm6uH_Q3T0hIJZHcIn_1DqdM_1NZaw2dXyemSevoFPRFWwlk_Gp_K7cj3Gifdb28a4jOCjTHC5u96aJfXtyssHvTDQvELxXuatC55-GvMZT7UXO5t0uqZ9o8zRm1PRzTv9kk1lfM-fMSnv2_t3m00\" 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#plantuml:TLHBZjim3DqRy1suQu86EO1H13D0DWOcc44o5s1i9bKjIwv41J2AthsKxAI9uzcPrEFZxvaldj5nQ7MUiM9DiBCrQJXqvDL9DUXL0Qz6C6re4DwmHuCcp_9C6IPtmegWV7SrkGEvYnBhJvu1VAyS8LDwM5J1ist9bNK11tRAd5UWc5fVm9lo_2EXId5iFzytomAIBT-9w4myiDY4kb5CSQ6hhmaFZ1pyD605Fld7k04aB4ThDSMMOjMegw2lF9-MKS_atLb3VPxzdKpX0_kM37yuMv7tresJw0PxV7skgXiUjiIej5Gt0gMlvStOam-Q4vsZKp3rbOqT6eyLAslkER6rmV1OgT3iKz2LPLfuQIx2PLq_MU5FgfhNYrI5HwKLzmjffGuLtsVw7T28Rle2X70oJKTU22bkTcORzmhO9oIcDiIzUIAIJqztg9cjNAognzugZTxVv36sCuaOMdnIPd9_ASxqob4MDnM8OqPNpuMC5Fz5yJZ9v7qOvg1geqHGifD7rNs3BNLaQZAL8ads-0UkrvkPfHPGgtCmsA21pMp8au0B4FjiPNBAo27uCl8swI60sYFgAphFZ6MITR9C6kpfyLh49dTa96k8-COQKNG38ThGogdvHS88SepYsLb7UDbsEZfPAe8QEsGuHbau5HsBLbNE-e5z1QqrLgIxWbhhzJBFP6OGwubrlOWXT-yV\" \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\" data-nodeid=\"201\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitle Model Spesifikasi: Antarmuka Layanan\r\n\r\ninterface IOrderService {\r\n  +createOrder(customerId: String, items: List&lt;OrderItemDTO&gt;): OrderDTO\r\n  +getOrder(orderId: String): OrderDTO\r\n  +updateOrderStatus(orderId: String, status: OrderStatus): boolean\r\n  +calculateOrderTotal(orderId: String): Money\r\n}\r\n\r\ninterface IPaymentProcessor {\r\n  +processPayment(orderId: String, paymentDetails: PaymentDTO): PaymentResult\r\n  +refundPayment(transactionId: String, amount: Money): RefundResult\r\n}\r\n\r\ninterface IInventoryService {\r\n  +checkAvailability(productId: String, quantity: int): boolean\r\n  +reserveItems(orderId: String, items: List&lt;ReservationItem&gt;): boolean\r\n  +releaseReservation(orderId: String): void\r\n}\r\n\r\nclass OrderDTO {\r\n  +orderId: String\r\n  +customerId: String\r\n  +items: List&lt;OrderItemDTO&gt;\r\n  +total: Money\r\n  +status: OrderStatus\r\n}\r\n\r\nclass OrderItemDTO {\r\n  +productId: String\r\n  +quantity: int\r\n  +unitPrice: Money\r\n}\r\n\r\n' Dependencies\r\nIOrderService ..&gt; IInventoryService : digunakan &gt;\r\nIOrderService ..&gt; IPaymentProcessor : mengoordinasikan &gt;\r\nIOrderService ..&gt; OrderDTO : mengembalikan &gt;\r\n\r\nnote bottom of IOrderService\r\n  Menentukan kontrak untuk manajemen pesanan.\r\n  Implementasi dapat bervariasi (microservice, monolit, dll.)\r\nend note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLHBZjim3DqRy1suQu86EO1H13D0DWOcc44o5s1i9bKjIwv41J2AthsKxAI9uzcPrEFZxvaldj5nQ7MUiM9DiBCrQJXqvDL9DUXL0Qz6C6re4DwmHuCcp_9C6IPtmegWV7SrkGEvYnBhJvu1VAyS8LDwM5J1ist9bNK11tRAd5UWc5fVm9lo_2EXId5iFzytomAIBT-9w4myiDY4kb5CSQ6hhmaFZ1pyD605Fld7k04aB4ThDSMMOjMegw2lF9-MKS_atLb3VPxzdKpX0_kM37yuMv7tresJw0PxV7skgXiUjiIej5Gt0gMlvStOam-Q4vsZKp3rbOqT6eyLAslkER6rmV1OgT3iKz2LPLfuQIx2PLq_MU5FgfhNYrI5HwKLzmjffGuLtsVw7T28Rle2X70oJKTU22bkTcORzmhO9oIcDiIzUIAIJqztg9cjNAognzugZTxVv36sCuaOMdnIPd9_ASxqob4MDnM8OqPNpuMC5Fz5yJZ9v7qOvg1geqHGifD7rNs3BNLaQZAL8ads-0UkrvkPfHPGgtCmsA21pMp8au0B4FjiPNBAo27uCl8swI60sYFgAphFZ6MITR9C6kpfyLh49dTa96k8-COQKNG38ThGogdvHS88SepYsLb7UDbsEZfPAe8QEsGuHbau5HsBLbNE-e5z1QqrLgIxWbhhzJBFP6OGwubrlOWXT-yV\" \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#plantuml:TLHBRkCm3DqRy1suQu89SW1Z47I0R0nCqIBf1LIPJeJAb4UY0XZ5t7resSuaZhipoSV7tvEV0olFiR5vneOjmh55RMgZ5Hj7yE8gj0KSqL-CHYY9qTTAOyYpF3EJ1UMhhz1FgAyy0_YXFIh655Zf6DWrwCjAkDWREct0C3QXWDycyC-4AiMnVt_ThGj8jdmdeXFomE8IwaennyMscWeUMN4CyuGDXEGVymQGi7muPr7HqBMoEjg9vzsniWjrNnnXbsT_PrjuKrs3n6_UoOQ2y-Ccsi4UeuzTjKDWZwoCbUv6eCorlXe73D5oelDOHwecDlQAWjBzjMuvLUCYyTYfq1nIqiGoRxoaYt0vtyrEU4Rz-UiYNQaFOmrtAncbYfflA_s9YaGwNG52EDkcno24s5zsuHgt2ZWaP19TZzuz4Cbdm1lKmbKkpbJZRDgg4Axo6CUPPGmZFYWpkRyLPufoBukh2iIneAl7HaQA_wAutsJotYrpK3KP4PJSv5vrJx375gb2qgP_ZVSlSBlTBHorW1Wmm6uH_Q3T0hIJZHcIn_1DqdM_1NZaw2dXyemSevoFPRFWwlk_Gp_K7cj3Gifdb28a4jOCjTHC5u96aJfXtyssHvTDQvELxXuatC55-GvMZT7UXO5t0uqZ9o8zRm1PRzTv9kk1lfM-fMSnv2_t3m00\" 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 data-nodeid=\"202\"><strong data-nodeid=\"471\">Manfaat Arsitektur:<\/strong><\/p>\n<ul data-nodeid=\"203\">\n<li data-nodeid=\"204\">\n<p data-nodeid=\"205\">Pemisahan antarmuka memungkinkan penyebaran independen<\/p>\n<\/li>\n<li data-nodeid=\"206\">\n<p data-nodeid=\"207\">DTOs memisahkan model internal dari kontrak API<\/p>\n<\/li>\n<li data-nodeid=\"208\">\n<p data-nodeid=\"209\">Ketergantungan dengan jelas menunjukkan batas layanan untuk microservices<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"210\"\/>\n<h3 data-nodeid=\"211\"><strong data-nodeid=\"478\">Fase 3: Model Implementasi (Perspektif Kode)<\/strong><\/h3>\n<p data-nodeid=\"212\"><em data-nodeid=\"482\">Detail khusus teknologi untuk implementasi Java\/Spring Boot<\/em><\/p>\n<p id=\"ZSqOdQO\"><img alt=\"\" class=\"alignnone size-full wp-image-24657\" decoding=\"async\" height=\"959\" loading=\"lazy\" sizes=\"auto, (max-width: 1738px) 100vw, 1738px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a.png 1738w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-300x166.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-1030x568.png 1030w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-768x424.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-1536x848.png 1536w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-150x83.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9e55e69a-400x221.png 400w\" width=\"1738\"\/><\/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#plantuml:TLLBRzf04BuZyHz6kTG9uAfNgur2WBQk2450Ufzu9x2AxNNsGOIg_FVEsklmIYwBvptppOCROr5RL-JTZfKs9qYBAgU2IejMgXBkbA0yWJ-unQ_BIijo3RTAMHZbQ0oPRgVRgJ1xnZL1fegO-2b8PnGhBKZ7x4VQ7VphTW0oRmBtdjym00OtgO1QCnK9F3oauvP_X-LkfUvBTkkCLUmpWL7uQdLOkb9UCShGP2Zent0wlGHfgJ09JAMnt-jeAJEkWr4TR8oMM45bcFlFbImeY1aDwzYujblMH91OPJ4V5igLDe5RkHvJ9WlC6sdpzb087okgj18kOxrvyz675xjBG9RsCe6jaYBeS_pCvJu3xpowF7VSAr0_3yro8wkAH7HW_kQV4rXzy2DeFHIV8rjZ4MezbvuM4JHU7DOzhSi9F5TAEzSoeq-HMPDTkaVxSPdlfL3fYaFesrhcazaudVrgYD7zx6Uwk9k4WfQ_q_cy9SQJQVfticZ9qN0scaod3SbHtZuVrmftVkXZGthBXHnExBmHBGyb7ggXi-fLQX8GZ7zn9r-HaPaVqUVwDV0BgfIHLkbTQC6USGGTzo4ZOuBFw6XR-Y2iUe-te1T7ni_OEyDKgZJjS6ynbu9p2j8nMPIvYJvsiH_JWQkyLPrZYqNTdjDSskKvKlfeP7boI3yXWtcCL8jjBzkWNbE4P-lMXmmr1npn6_Bd02kDfS7C7omksULXBdkQdbmf8hiN-sINrf-nFfnxPrUBscJlfPsQBop9wvDeU1VvA3HtxEBR1LmD1lmRnrSN1rkO-Fcg--clw7Mh7yVNf_EKWA2AIc6WKJmH7rYqAF7gjKVQm5QYj-fsIcK9j5nlBAYdVIQ-Y9j9SuQnPANchXTO6R0AkBFuY8Q0VtAAlVPeVqnv8utJP9gR2XLfmrSLNgNTD4FC1fmw-DW-Xnic-B_aFm00\" 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#plantuml:TLLPRzf047v7uZ-Cyb8Im5LVhJQ204tT4eA0z7tmJiWAUzVP8n6gyjyxwoDSoSlYkMU-EHXOXyRvF6ktd7GPmPqMb46I5ndbf1nQ6SCVoj32Rtp1hyl2IBM16wrTkzLk5PXkSKEGwZmYVd8oAKNQ238HMqktWt_j5a3A3YpS1tx50EWF4W6bPY9YU7X8nWt_3jLkfUyLk_NMQVOPmwZ-QdHOkj91iPEYJL7GZ-5qUWdIKMvZc4hhlfVH4cPSrqPbi34wOWMTOXO-LpAdMin8EC_6fTso96g9qmwpOQwzSZ7SoCsOKfbZLachjuj2X5YTmcZXKzQRLnyzU7Qx6AHobp6yQ2bgVOwV-Yna49ntBiyTTtCqsw5TFicY8D4vC7yBpmci8VWHj06Apv4jiQXhFPUU5b5hF7iiUrgMK_EyacvkP4gV8hCXj_Hhzt6PxwMGylaXz4qjyybidCnkAs9qF_kPBEucTK7BNybytX3ZoJJvEraqv6Wu6qscquhaA6-VZsk1kp3gaINpmeKSJkoy4YqF9G6geNVwLHeIK1lVSYTVaP6P7z7d-YNm2ogqbKwRNTs2FUC8Ekv3IjRMFZj7sz83uVHxl0KzUx9XnjuPjj3ADiFzWfaKd5Cj7PD3cTdEnoxsOzhtHR0gSsomADjpcakpF4TA7uqiJmwPHsGmZv5giEscJsWsrC6pTUj1YeO3ZlYjy-S0AuFAOkgaLboop-gvx1fwz4fqt5uSabswSBvwSEwTNIrAaxsNPcg-i8GtbLrOtaK-2jKTk_Xs0LVzFlz6qTN5mHR6iDLvwAULSDreHz7rwJJ5m51iUAKyNzG21GRj4vq3imQe68IK1_TvYmfoJZ3pPRXsIsb7OEJcoO5-tESLIXgoZ4rWCAcEiv058nayR0aShldqSxznZPQYe3_Q7rUEaQDrPRXmMpXvXqKemN8sp5pp5-O81LbKgDYUb82GJ4Xgm0J_pVm7\" \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\" data-nodeid=\"213\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\ntitle Model Implementasi: Kelas Java\/Spring Boot\r\n\r\npackage com.ecommerce.order.entity {\r\n  class Order {\r\n    -@Id orderId: UUID\r\n    -@ManyToOne customer: Customer\r\n    -@OneToMany(cascade=ALL) items: List&lt;OrderItem&gt;\r\n    -orderDate: LocalDateTime\r\n    -status: OrderStatus\r\n    -totalAmount: BigDecimal\r\n    \r\n    +addItem(product: Product, qty: int): void\r\n    +calculateTotal(): BigDecimal\r\n    +markAsShipped(): void\r\n  }\r\n  \r\n  class OrderItem {\r\n    -@Id itemId: UUID\r\n    -@ManyToOne order: Order\r\n    -@ManyToOne product: Product\r\n    -quantity: int\r\n    -unitPrice: BigDecimal\r\n    \r\n    +getSubtotal(): BigDecimal\r\n  }\r\n  \r\n  enum OrderStatus {\r\n    PENDING\r\n    CONFIRMED\r\n    SHIPPED\r\n    DELIVERED\r\n    CANCELLED\r\n  }\r\n}\r\n\r\npackage com.ecommerce.payment.service {\r\n  class PaymentService {\r\n    -@Autowired paymentGateway: PaymentGateway\r\n    -@Autowired orderRepository: OrderRepository\r\n    \r\n    +processPayment(orderId: UUID, dto: PaymentRequest): PaymentResponse\r\n    -validatePaymentDetails(dto: PaymentRequest): void\r\n    -updateOrderPaymentStatus(orderId: UUID, status: PaymentStatus): void\r\n  }\r\n  \r\n  interface PaymentGateway {\r\n    +charge(amount: BigDecimal, card: CardDetails): TransactionResult\r\n    +refund(transactionId: String, amount: BigDecimal): RefundResult\r\n  }\r\n}\r\n\r\n' Relationships\r\nOrder \"1\" *-- \"1..*\" OrderItem : komposisi &gt;\r\nOrder ..&gt; PaymentService : tergantung pada &gt;\r\nPaymentService ..&gt; PaymentGateway : diimplementasikan melalui &gt;\r\n\r\nnote right of OrderItem\r\n  Anotasi @Entity dipetakan ke tabel database.\r\n  Cascade=ALL memastikan item tetap tersimpan bersama pesanan.\r\nend note\r\n\r\n@enduml\r\n<\/code><\/pre>                <\/div>\r\n                <div class=\"vpascode-actions\">\r\n                    <a href=\"https:\/\/www.vpascode.com#plantuml:TLLPRzf047v7uZ-Cyb8Im5LVhJQ204tT4eA0z7tmJiWAUzVP8n6gyjyxwoDSoSlYkMU-EHXOXyRvF6ktd7GPmPqMb46I5ndbf1nQ6SCVoj32Rtp1hyl2IBM16wrTkzLk5PXkSKEGwZmYVd8oAKNQ238HMqktWt_j5a3A3YpS1tx50EWF4W6bPY9YU7X8nWt_3jLkfUyLk_NMQVOPmwZ-QdHOkj91iPEYJL7GZ-5qUWdIKMvZc4hhlfVH4cPSrqPbi34wOWMTOXO-LpAdMin8EC_6fTso96g9qmwpOQwzSZ7SoCsOKfbZLachjuj2X5YTmcZXKzQRLnyzU7Qx6AHobp6yQ2bgVOwV-Yna49ntBiyTTtCqsw5TFicY8D4vC7yBpmci8VWHj06Apv4jiQXhFPUU5b5hF7iiUrgMK_EyacvkP4gV8hCXj_Hhzt6PxwMGylaXz4qjyybidCnkAs9qF_kPBEucTK7BNybytX3ZoJJvEraqv6Wu6qscquhaA6-VZsk1kp3gaINpmeKSJkoy4YqF9G6geNVwLHeIK1lVSYTVaP6P7z7d-YNm2ogqbKwRNTs2FUC8Ekv3IjRMFZj7sz83uVHxl0KzUx9XnjuPjj3ADiFzWfaKd5Cj7PD3cTdEnoxsOzhtHR0gSsomADjpcakpF4TA7uqiJmwPHsGmZv5giEscJsWsrC6pTUj1YeO3ZlYjy-S0AuFAOkgaLboop-gvx1fwz4fqt5uSabswSBvwSEwTNIrAaxsNPcg-i8GtbLrOtaK-2jKTk_Xs0LVzFlz6qTN5mHR6iDLvwAULSDreHz7rwJJ5m51iUAKyNzG21GRj4vq3imQe68IK1_TvYmfoJZ3pPRXsIsb7OEJcoO5-tESLIXgoZ4rWCAcEiv058nayR0aShldqSxznZPQYe3_Q7rUEaQDrPRXmMpXvXqKemN8sp5pp5-O81LbKgDYUb82GJ4Xgm0J_pVm7\" \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#plantuml:TLLBRzf04BuZyHz6kTG9uAfNgur2WBQk2450Ufzu9x2AxNNsGOIg_FVEsklmIYwBvptppOCROr5RL-JTZfKs9qYBAgU2IejMgXBkbA0yWJ-unQ_BIijo3RTAMHZbQ0oPRgVRgJ1xnZL1fegO-2b8PnGhBKZ7x4VQ7VphTW0oRmBtdjym00OtgO1QCnK9F3oauvP_X-LkfUvBTkkCLUmpWL7uQdLOkb9UCShGP2Zent0wlGHfgJ09JAMnt-jeAJEkWr4TR8oMM45bcFlFbImeY1aDwzYujblMH91OPJ4V5igLDe5RkHvJ9WlC6sdpzb087okgj18kOxrvyz675xjBG9RsCe6jaYBeS_pCvJu3xpowF7VSAr0_3yro8wkAH7HW_kQV4rXzy2DeFHIV8rjZ4MezbvuM4JHU7DOzhSi9F5TAEzSoeq-HMPDTkaVxSPdlfL3fYaFesrhcazaudVrgYD7zx6Uwk9k4WfQ_q_cy9SQJQVfticZ9qN0scaod3SbHtZuVrmftVkXZGthBXHnExBmHBGyb7ggXi-fLQX8GZ7zn9r-HaPaVqUVwDV0BgfIHLkbTQC6USGGTzo4ZOuBFw6XR-Y2iUe-te1T7ni_OEyDKgZJjS6ynbu9p2j8nMPIvYJvsiH_JWQkyLPrZYqNTdjDSskKvKlfeP7boI3yXWtcCL8jjBzkWNbE4P-lMXmmr1npn6_Bd02kDfS7C7omksULXBdkQdbmf8hiN-sINrf-nFfnxPrUBscJlfPsQBop9wvDeU1VvA3HtxEBR1LmD1lmRnrSN1rkO-Fcg--clw7Mh7yVNf_EKWA2AIc6WKJmH7rYqAF7gjKVQm5QYj-fsIcK9j5nlBAYdVIQ-Y9j9SuQnPANchXTO6R0AkBFuY8Q0VtAAlVPeVqnv8utJP9gR2XLfmrSLNgNTD4FC1fmw-DW-Xnic-B_aFm00\" 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 data-nodeid=\"214\"><strong data-nodeid=\"486\">Highlight Implementasi:<\/strong><\/p>\n<ul data-nodeid=\"215\">\n<li data-nodeid=\"216\">\n<p data-nodeid=\"217\">Anotasi JPA (<code data-backticks=\"1\" data-nodeid=\"488\">@Entity<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"490\">@ManyToOne<\/code>) untuk pemetaan ORM<\/p>\n<\/li>\n<li data-nodeid=\"218\">\n<p data-nodeid=\"219\">Injeksi ketergantungan (<code data-backticks=\"1\" data-nodeid=\"493\">@Autowired<\/code>) untuk keterikatan longgar<\/p>\n<\/li>\n<li data-nodeid=\"220\">\n<p data-nodeid=\"221\">Enum untuk manajemen status pesanan yang aman tipe<\/p>\n<\/li>\n<li data-nodeid=\"222\">\n<p data-nodeid=\"223\">Metode bantuan pribadi (<code data-backticks=\"1\" data-nodeid=\"497\">-validasiDetailPembayaran<\/code>) mengemas logika<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"224\"\/>\n<h2 data-nodeid=\"225\"><strong data-nodeid=\"504\">Pola Lanjutan &amp; Praktik Terbaik<\/strong><\/h2>\n<h3 data-nodeid=\"226\"><strong data-nodeid=\"508\">1. Penanganan Visibilitas dan Enkapsulasi<\/strong><\/h3>\n<p id=\"CXceEyL\"><img alt=\"\" class=\"alignnone size-full wp-image-24658\" decoding=\"async\" height=\"229\" loading=\"lazy\" sizes=\"auto, (max-width: 975px) 100vw, 975px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b.png 975w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-300x70.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-768x180.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-150x35.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba223951b-400x94.png 400w\" width=\"975\"\/><\/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#plantuml:PL7DIiH03BuN-Wu1Bolg2nIHxRA81P62uZsTPhjXfncOoQmkeizkseeAUqlcIxwVp3efHisZBmldCINOe1ngvq8MXO-o0BZ2fNlAOqUnWcUDBCEC3AGRz2YELfSLR7ZOakCH_GJUT0jozguH9Q5J3lB0IKCyLV1enUtB7t0tJLuuz2vxL6f4ALBILRIcWZxapjEPuXTFOuA-pZthvEWOk2-Bpx8e2mbA47dOAuJT_v1p46YDaLq5TTl0BaIWzuKAd6SIJRDpQ2CVPmVDZnBOzPIkmTZ1paGfiJdxtVQdEOVjcRfJwYkuD_AKk-NMqvmaoplRXnRT0GUZV-M5vurrpm89Hu8nzDbJMP3qavnLQoljuxu1\" 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#plantuml:PL7HIWCn47m_o3yi-59HV-0GQKiVB8WSM3zWBrclItARaco48lhj9bT4mRVTdStCpcIT5PEMEPZE1imPjYX-Osqiel1XEe0Rl7JFPHufzV2YYMLQa8bqYm75qkgwXorFEx8yOsZWtNX1_iqreMIqob4UEMjCvnwUQd5_-0KUskQLnM1BGAMzA2NAkagrwS75CWRwf_Z5RKqmR8fZRHUzHtQc-pITwIGgGUBfg13V_ffSZC1G6Tdti1dsK8V5WmzC0kJpXNCv7OR48pfk8Q2M33-Ajw3iq8F34oeuHfyfrounX89fSGCx3Yoko5JVlouQ9qeLpYZWgOOFMb8HbCKC3EX9UpZK7Jusrfhd37Dq9S0PPOACCvgEn44pPxfrBUj7VWC0\" \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\" data-nodeid=\"227\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass BankAccount {\r\n  +accountNumber: String\r\n  +getBalance(): BigDecimal\r\n  -balance: BigDecimal\r\n  -transactionHistory: List&lt;Transaction&gt;\r\n  #calculateInterest(rate: double): BigDecimal\r\n  ~internalAudit(): void\r\n}\r\n\r\nnote right of BankAccount\r\n  + Publik: API untuk klien eksternal\r\n  - Pribadi: Status internal, tidak dapat diakses dari luar\r\n  # Dilindungi: Untuk perluasan kelas turunan\r\n  ~ Paket: Terlihat dalam modul yang sama\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#plantuml:PL7HIWCn47m_o3yi-59HV-0GQKiVB8WSM3zWBrclItARaco48lhj9bT4mRVTdStCpcIT5PEMEPZE1imPjYX-Osqiel1XEe0Rl7JFPHufzV2YYMLQa8bqYm75qkgwXorFEx8yOsZWtNX1_iqreMIqob4UEMjCvnwUQd5_-0KUskQLnM1BGAMzA2NAkagrwS75CWRwf_Z5RKqmR8fZRHUzHtQc-pITwIGgGUBfg13V_ffSZC1G6Tdti1dsK8V5WmzC0kJpXNCv7OR48pfk8Q2M33-Ajw3iq8F34oeuHfyfrounX89fSGCx3Yoko5JVlouQ9qeLpYZWgOOFMb8HbCKC3EX9UpZK7Jusrfhd37Dq9S0PPOACCvgEn44pPxfrBUj7VWC0\" \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#plantuml:PL7DIiH03BuN-Wu1Bolg2nIHxRA81P62uZsTPhjXfncOoQmkeizkseeAUqlcIxwVp3efHisZBmldCINOe1ngvq8MXO-o0BZ2fNlAOqUnWcUDBCEC3AGRz2YELfSLR7ZOakCH_GJUT0jozguH9Q5J3lB0IKCyLV1enUtB7t0tJLuuz2vxL6f4ALBILRIcWZxapjEPuXTFOuA-pZthvEWOk2-Bpx8e2mbA47dOAuJT_v1p46YDaLq5TTl0BaIWzuKAd6SIJRDpQ2CVPmVDZnBOzPIkmTZ1paGfiJdxtVQdEOVjcRfJwYkuD_AKk-NMqvmaoplRXnRT0GUZV-M5vurrpm89Hu8nzDbJMP3qavnLQoljuxu1\" 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<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">2. Multiplicity dalam Skenario Dunia Nyata<\/p>\n<p><\/strong><\/h3>\n<p id=\"TInrWNg\"><img alt=\"\" class=\"alignnone size-full wp-image-24659\" decoding=\"async\" height=\"572\" loading=\"lazy\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0.png 441w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-231x300.png 231w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-116x150.png 116w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba3fdcfe0-400x519.png 400w\" width=\"441\"\/><\/p>\n<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">\u00a0<\/strong><\/h3>\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#plantuml:NPB1JiCm38RlbVeELYziOwlMQoNG1kom0m9fJn1IiqKaSKdSYGeXyImy6a-2sswmSOj__VxzsSeYiWhSE9icsgeOOREZkZP-UoiolAS9mAMggZMZ6zM1gaPp2O_3Omglt9PWF8zBs9EfUdT0HtiyRLXN9MmuIAZudeWiAfyc7sbod7d8Euppok6neHVgOBGeDsPxXzeuPNlL-0sJVlcVU05Bq1sxLXvsQeym1oPmohTW12fsbfNIkxw2WCyOq6kCW6zAissXW0DtcfmT8oiocCncaCtpV9BzGfUWoRCoFi9r1-29KPYOoNMSzurbKrkZ3RSG6eknxEJlpo_eSk0A7cesv9MT3f0ZHr7eoJdouwEr4D_gm4SUnQHyfPX2Epv9AyxIee1RiMA-pQVTJiz6ojfeRWB-9GyGImOveWpkquSM2XM6uMXYHrz1jrkQBEGfF-O7\" 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#plantuml:PPBTIiD048Nl0tc78JUcjItDRK2fnPiYeb1VO9AiSPhzYPlPIX71P_7HV19tqwQjUZSPpldsd26BZj6oKpAEIebT1tV2ejwWhfT2XW7UumZW4gjgnKAbhJMLApc7n_qmWLVUvK2QHpbi3LMzsWfbjkBSiAfoMBCbNNjTOOmKgEFe8uw6Tm-ymtCQbHWC_QArLFhDakfRKP92sMz9hzcKpL_YnQa5LDWYWnAA93K4StZno1gXGBt31iXd38QrOCAs__HYwpQk0HR1sWZ8e6_HnD6_woHP0kFf59BvR3PEZYry8c6f8xWEURHXuICo6nLYtx3p551EChMIIl8N3Fllpoy86BY2XxOZer5EXfnfYz871wUS6WtYp2kV-f0TieFq3JTKZCvGsIyKkz1SGggeG-cnKACgq8PspoHFs7s6UzBXq0VsqTEVg1KTQjJU8dG5eLySBVpeVwGV\" \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\" data-nodeid=\"229\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nclass KeranjangBelanja {\r\n  +addItem(product: Product, qty: int): void\r\n  +removeItem(productId: String): boolean\r\n}\r\n\r\nclass Product {\r\n  +name: String\r\n  +price: BigDecimal\r\n  +inStock: boolean\r\n}\r\n\r\n' Keranjang dapat memiliki 0 hingga banyak item\r\n' Setiap item merujuk tepat ke 1 produk\r\nKeranjangBelanja \"1\" *-- \"0..*\" Product : berisi &gt;\r\n\r\nnote bottom\r\n  Aturan multiplicity:\r\n  \u2022 0..* = Opsional, banyak (paling umum)\r\n  \u2022 1 = Tepat satu (wajib)\r\n  \u2022 0..1 = Opsional, tunggal (misalnya gambar profil)\r\n  \u2022 1..* = Minimal satu (misalnya item pesanan)\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#plantuml:PPBTIiD048Nl0tc78JUcjItDRK2fnPiYeb1VO9AiSPhzYPlPIX71P_7HV19tqwQjUZSPpldsd26BZj6oKpAEIebT1tV2ejwWhfT2XW7UumZW4gjgnKAbhJMLApc7n_qmWLVUvK2QHpbi3LMzsWfbjkBSiAfoMBCbNNjTOOmKgEFe8uw6Tm-ymtCQbHWC_QArLFhDakfRKP92sMz9hzcKpL_YnQa5LDWYWnAA93K4StZno1gXGBt31iXd38QrOCAs__HYwpQk0HR1sWZ8e6_HnD6_woHP0kFf59BvR3PEZYry8c6f8xWEURHXuICo6nLYtx3p551EChMIIl8N3Fllpoy86BY2XxOZer5EXfnfYz871wUS6WtYp2kV-f0TieFq3JTKZCvGsIyKkz1SGggeG-cnKACgq8PspoHFs7s6UzBXq0VsqTEVg1KTQjJU8dG5eLySBVpeVwGV\" \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#plantuml:NPB1JiCm38RlbVeELYziOwlMQoNG1kom0m9fJn1IiqKaSKdSYGeXyImy6a-2sswmSOj__VxzsSeYiWhSE9icsgeOOREZkZP-UoiolAS9mAMggZMZ6zM1gaPp2O_3Omglt9PWF8zBs9EfUdT0HtiyRLXN9MmuIAZudeWiAfyc7sbod7d8Euppok6neHVgOBGeDsPxXzeuPNlL-0sJVlcVU05Bq1sxLXvsQeym1oPmohTW12fsbfNIkxw2WCyOq6kCW6zAissXW0DtcfmT8oiocCncaCtpV9BzGfUWoRCoFi9r1-29KPYOoNMSzurbKrkZ3RSG6eknxEJlpo_eSk0A7cesv9MT3f0ZHr7eoJdouwEr4D_gm4SUnQHyfPX2Epv9AyxIee1RiMA-pQVTJiz6ojfeRWB-9GyGImOveWpkquSM2XM6uMXYHrz1jrkQBEGfF-O7\" 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<h3 data-nodeid=\"230\"><strong data-nodeid=\"516\">3. Kelas Abstrak vs. Antarmuka<\/strong><\/h3>\n<p id=\"qaBNIMo\"><img alt=\"\" class=\"alignnone size-full wp-image-24660\" decoding=\"async\" height=\"374\" loading=\"lazy\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" src=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4.png\" srcset=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4.png 916w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-300x122.png 300w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-768x314.png 768w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-150x61.png 150w, https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eba595e5e4-400x163.png 400w\" width=\"916\"\/><\/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#plantuml:ZPBDIiGm4CVlWRp3W1UbxWiK3olemOEBq2UOfjDs95yaamLHtzsqu69tz-0jpCTl_ZF_xBDWakAiLjXdIMW4ZCMSuH24HpOe73nyQWLmayXmPFBIGYU9_RH67UMC4_sDDITM9Z_SthNGXs09_PgqONeYoqTA7qlg67ZGwbihhTWBfH4DmRD3jfSIcbpwTp8R0St5Z3DMzzfT8SKvU3eKrrFw1sq3UFZQxIuLNYiw6xsGV122nDCi44ROPW4UDoPKOJCc6g2wLBiQYDKiHWlieYLNdJWrlloksy9RIGGc-1Lq3wvOuLeEx6TABEZhJNA9CIJHgcuBYoIjzlLPFy8F\" 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#plantuml:ZP51JiGm34NtaN87Isn0PIumOZ4iM8r0IEK2RkiMqyIf4XSMmDr9PX3gj1jsYV_F-uvzI8fHP--imIPfn5QXTPWIF0NbdaTC39_M05nD91JPunvgZIp3Rp6XB2lL7sRaxBw-sKCJWYEKazgYeZwJ34L4AV9xuCwQRskiOL6AFRO43nxPhLkeqjoyqNWHjqrPaUh7UiEHu4Dy8KTJaF_G5e2xhzrktTtMS15Q21AK8FBmgX1wM6e0Hye3X_FSJf_3x6qe9lG85R2V77aIBVH43Gvy7kPzBaK_ZtaZno3bCVWv2jz2Du-p32WmqGT6pYk2VElG6f8EIY_M7F8nx_q7\" \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\" data-nodeid=\"231\"><code class=\"language-plantuml\" data-language=\"plantuml\" class=\"language-plantuml\">@startuml\r\nabstract class Notifikasi {\r\n  #penerima: String\r\n  #pesan: String\r\n  +abstract kirim(): boolean\r\n  +catatPengiriman(): void\r\n}\r\n\r\ninterface EmailNotifikasi {\r\n  +subjek: String\r\n  +kirim(): boolean\r\n}\r\n\r\ninterface SMSNotifikasi {\r\n  +nomorTelepon: String\r\n  +kirim(): boolean\r\n}\r\n\r\nNotifikasi &lt;|-- EmailNotifikasi\r\nNotifikasi &lt;|-- SMSNotifikasi\r\n\r\nnote right of Notifikasi\r\n  Kelas abstrak: State bersama + implementasi sebagian\r\n  Antarmuka: Kontrak murni, dukungan pewarisan ganda\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#plantuml:ZP51JiGm34NtaN87Isn0PIumOZ4iM8r0IEK2RkiMqyIf4XSMmDr9PX3gj1jsYV_F-uvzI8fHP--imIPfn5QXTPWIF0NbdaTC39_M05nD91JPunvgZIp3Rp6XB2lL7sRaxBw-sKCJWYEKazgYeZwJ34L4AV9xuCwQRskiOL6AFRO43nxPhLkeqjoyqNWHjqrPaUh7UiEHu4Dy8KTJaF_G5e2xhzrktTtMS15Q21AK8FBmgX1wM6e0Hye3X_FSJf_3x6qe9lG85R2V77aIBVH43Gvy7kPzBaK_ZtaZno3bCVWv2jz2Du-p32WmqGT6pYk2VElG6f8EIY_M7F8nx_q7\" \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#plantuml:ZPBDIiGm4CVlWRp3W1UbxWiK3olemOEBq2UOfjDs95yaamLHtzsqu69tz-0jpCTl_ZF_xBDWakAiLjXdIMW4ZCMSuH24HpOe73nyQWLmayXmPFBIGYU9_RH67UMC4_sDDITM9Z_SthNGXs09_PgqONeYoqTA7qlg67ZGwbihhTWBfH4DmRD3jfSIcbpwTp8R0St5Z3DMzzfT8SKvU3eKrrFw1sq3UFZQxIuLNYiw6xsGV122nDCi44ROPW4UDoPKOJCc6g2wLBiQYDKiHWlieYLNdJWrlloksy9RIGGc-1Lq3wvOuLeEx6TABEZhJNA9CIJHgcuBYoIjzlLPFy8F\" 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<hr data-nodeid=\"232\"\/>\n<h2 data-nodeid=\"233\"><strong data-nodeid=\"522\">Kesalahan Umum &amp; Cara Menghindarinya<\/strong><\/h2>\n<table data-nodeid=\"235\">\n<thead data-nodeid=\"236\">\n<tr data-nodeid=\"237\">\n<th data-nodeid=\"239\">Kesalahan<\/th>\n<th data-nodeid=\"240\">Gejala<\/th>\n<th data-nodeid=\"241\">Solusi<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"245\">\n<tr data-nodeid=\"246\">\n<td data-nodeid=\"247\"><strong data-nodeid=\"529\">Over-engineering<\/strong><\/td>\n<td data-nodeid=\"248\">Diagram dengan 50+ kelas, sulit dibaca<\/td>\n<td data-nodeid=\"249\">Mulai dengan model konseptual; bagi menjadi beberapa diagram berdasarkan konteks terbatas<\/td>\n<\/tr>\n<tr data-nodeid=\"250\">\n<td data-nodeid=\"251\"><strong data-nodeid=\"535\">Membingungkan antara agregasi\/komposisi<\/strong><\/td>\n<td data-nodeid=\"252\">Manajemen siklus hidup objek yang tidak jelas<\/td>\n<td data-nodeid=\"253\">Tanya: \u201cJika seluruhnya dihancurkan, apakah bagian-bagiannya tetap hidup?\u201d Jika tidak \u2192 gunakan komposisi (<code data-backticks=\"1\" data-nodeid=\"542\">*--<\/code>)<\/td>\n<\/tr>\n<tr data-nodeid=\"254\">\n<td data-nodeid=\"255\"><strong data-nodeid=\"547\">Mengabaikan navigabilitas<\/strong><\/td>\n<td data-nodeid=\"256\">Panah dua arah di mana-mana<\/td>\n<td data-nodeid=\"257\">Hanya tambahkan panah navigabilitas di tempat yang diperlukan dalam kode<\/td>\n<\/tr>\n<tr data-nodeid=\"258\">\n<td data-nodeid=\"259\"><strong data-nodeid=\"553\">Mencampur tingkat abstraksi<\/strong><\/td>\n<td data-nodeid=\"260\">DTOs dicampur dengan kelas entitas dalam diagram yang sama<\/td>\n<td data-nodeid=\"261\">Pisahkan diagram berdasarkan perspektif (konseptual\/spesifikasi\/implentasi)<\/td>\n<\/tr>\n<tr data-nodeid=\"262\">\n<td data-nodeid=\"263\"><strong data-nodeid=\"559\">Mengabaikan kontrol versi<\/strong><\/td>\n<td data-nodeid=\"264\">Diagram menjadi usang<\/td>\n<td data-nodeid=\"265\">Gunakan file teks PlantUML di Git; hasilkan gambar dalam pipeline CI\/CD<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"266\"\/>\n<h2 data-nodeid=\"267\"><strong data-nodeid=\"565\">Rekomendasi Alat: Mengapa PlantUML?<\/strong><\/h2>\n<p data-nodeid=\"268\">Untuk studi kasus di atas,\u00a0<strong data-nodeid=\"595\">PlantUML<\/strong>\u00a0dipilih karena:<br \/>\n\u2705\u00a0<strong data-nodeid=\"596\">Berdasarkan teks<\/strong>: Diagram adalah kode\u2014dapat dikelola versi, dapat dibandingkan perbedaannya, dapat ditinjau<br \/>\n\u2705\u00a0<strong data-nodeid=\"597\">Portabel<\/strong>: Dapat dirender secara lokal atau melalui layanan cloud; terintegrasi dengan Confluence, GitHub, VS Code<br \/>\n\u2705\u00a0<strong data-nodeid=\"598\">Dapat dipelihara<\/strong>: Perbarui logika diagram tanpa menggambar ulang kotak<br \/>\n\u2705\u00a0<strong data-nodeid=\"599\">Kolaboratif<\/strong>: Non-desainer dapat berkontribusi melalui sintaks sederhana<\/p>\n<p data-nodeid=\"269\"><strong data-nodeid=\"603\">Alur Kerja Contoh:<\/strong><\/p>\n<pre class=\"lang-bash\" data-nodeid=\"270\"><code data-language=\"bash\"># 1. Tulis diagram sebagai teks\r\necho '@startumlnclass User { +name: String }n@enduml' &gt; UserDiagram.puml\r\n\r\n# 2. Hasilkan PNG\/SVG\r\nplantuml -tpng UserDiagram.puml\r\n\r\n# 3. Komit kedua file .puml dan gambar yang dihasilkan ke Git\r\ngit add UserDiagram.puml UserDiagram.png\r\n<\/code><\/pre>\n<hr data-nodeid=\"271\"\/>\n<h2 data-nodeid=\"272\"><strong data-nodeid=\"607\">Kesimpulan<\/strong><\/h2>\n<p data-nodeid=\"273\">Diagram kelas jauh lebih dari sekadar latihan akademis\u2014mereka adalah artefak hidup yang mendorong keselarasan, mengurangi utang teknis, dan mempercepat onboarding di seluruh siklus pengembangan perangkat lunak. Seperti yang ditunjukkan dalam studi kasus e-commerce kami, kekuatan sejati dari diagram kelas muncul ketika mereka berkembang melalui tiga perspektif kritis:<\/p>\n<p data-nodeid=\"274\">\ud83d\udd39\u00a0<strong data-nodeid=\"626\">Konseptual<\/strong>: Menyelaraskan para pemangku kepentingan dalam pemahaman domain bersama<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"627\">Spesifikasi<\/strong>: Menentukan antarmuka bersih untuk arsitektur modular<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"628\">Implementasi<\/strong>: Memandu pengembang dengan gambaran rinci dan sadar teknologi<\/p>\n<p data-nodeid=\"275\">Dengan mengadopsi\u00a0<strong data-nodeid=\"638\">PlantUML<\/strong>\u00a0untuk praktik diagram sebagai kode, tim mendapatkan fleksibilitas untuk mengulang desain bersamaan dengan kode, memastikan dokumentasi tidak pernah tertinggal dari implementasi. Ingat: diagram kelas terbaik bukan yang paling rinci\u2014tapi yang menjawab pertanyaan yang tepat bagi audiensnya pada waktu yang tepat.<\/p>\n<p data-nodeid=\"276\"><strong data-nodeid=\"643\">Poin Terakhir<\/strong>: Mulai sederhana, validasi dengan pemangku kepentingan, perbaiki secara bertahap, dan selalu kaitkan elemen diagram kembali dengan nilai bisnis yang nyata. Ketika diagram kelas menjadi alat kolaboratif daripada hasil akhir, mereka berubah dari beban menjadi pemicu bagi perangkat lunak yang lebih baik.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pendahuluan Dalam lingkungan pengembangan perangkat lunak yang kompleks saat ini, komunikasi yang jelas dan pemodelan sistem yang tepat sangat penting bagi keberhasilan proyek. Di antara alat-alat paling kuat dalam toolkit arsitek perangkat lunak adalah\u00a0Diagram Kelas UML\u2014bahasa visual yang menghubungkan kesenjangan antara kebutuhan abstrak dan implementasi yang nyata. Studi kasus ini mengeksplorasi bagaimana diagram kelas berfungsi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[65,36],"tags":[],"class_list":["post-11811","post","type-post","status-publish","format-standard","hentry","category-ai","category-uml","loop-entry","clr"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog<\/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:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog\" \/>\n<meta property=\"og:description\" content=\"Pendahuluan Dalam lingkungan pengembangan perangkat lunak yang kompleks saat ini, komunikasi yang jelas dan pemodelan sistem yang tepat sangat penting bagi keberhasilan proyek. Di antara alat-alat paling kuat dalam toolkit arsitek perangkat lunak adalah\u00a0Diagram Kelas UML\u2014bahasa visual yang menghubungkan kesenjangan antara kebutuhan abstrak dan implementasi yang nyata. Studi kasus ini mengeksplorasi bagaimana diagram kelas berfungsi [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:site_name\" content=\"Visual Paradigm Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T07:55:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-30T08:11:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\" \/>\n<meta name=\"author\" content=\"Admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"url\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"name\":\"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\",\"datePublished\":\"2026-05-21T07:55:49+00:00\",\"dateModified\":\"2026-05-30T08:11:21+00:00\",\"author\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\",\"url\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\",\"contentUrl\":\"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.visual-paradigm.com\/id\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/#website\",\"url\":\"https:\/\/blog.visual-paradigm.com\/id\/\",\"name\":\"Visual Paradigm Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.visual-paradigm.com\/id\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g\",\"caption\":\"Admin\"},\"url\":\"https:\/\/blog.visual-paradigm.com\/id\/author\/vpadminuser\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog","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:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_locale":"id_ID","og_type":"article","og_title":"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog","og_description":"Pendahuluan Dalam lingkungan pengembangan perangkat lunak yang kompleks saat ini, komunikasi yang jelas dan pemodelan sistem yang tepat sangat penting bagi keberhasilan proyek. Di antara alat-alat paling kuat dalam toolkit arsitek perangkat lunak adalah\u00a0Diagram Kelas UML\u2014bahasa visual yang menghubungkan kesenjangan antara kebutuhan abstrak dan implementasi yang nyata. Studi kasus ini mengeksplorasi bagaimana diagram kelas berfungsi [&hellip;]","og_url":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_site_name":"Visual Paradigm Blog","article_published_time":"2026-05-21T07:55:49+00:00","article_modified_time":"2026-05-30T08:11:21+00:00","og_image":[{"url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","type":"","width":"","height":""}],"author":"Admin","twitter_card":"summary_large_image","twitter_misc":{"Ditulis oleh":"Admin","Estimasi waktu membaca":"5 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","url":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","name":"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML - Visual Paradigm Blog","isPartOf":{"@id":"https:\/\/blog.visual-paradigm.com\/id\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","datePublished":"2026-05-21T07:55:49+00:00","dateModified":"2026-05-30T08:11:21+00:00","author":{"@id":"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/a649c442f11a53040710ddec750926c6"},"breadcrumb":{"@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage","url":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png","contentUrl":"https:\/\/blog.visual-paradigm.com\/wp-content\/uploads\/2026\/05\/img_6a0eb9275d5e8.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.visual-paradigm.com\/id\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.visual-paradigm.com\/id\/"},{"@type":"ListItem","position":2,"name":"Menguasai Diagram Kelas UML: Studi Kasus Praktis dalam Desain Sistem dengan PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/blog.visual-paradigm.com\/id\/#website","url":"https:\/\/blog.visual-paradigm.com\/id\/","name":"Visual Paradigm Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.visual-paradigm.com\/id\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Person","@id":"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/a649c442f11a53040710ddec750926c6","name":"Admin","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/blog.visual-paradigm.com\/id\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6b756c36f5e9132f6067fb4d22bef2e3?s=96&d=mm&r=g","caption":"Admin"},"url":"https:\/\/blog.visual-paradigm.com\/id\/author\/vpadminuser\/"}]}},"modified_by":"Admin","_links":{"self":[{"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/posts\/11811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/comments?post=11811"}],"version-history":[{"count":0,"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/posts\/11811\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/media?parent=11811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/categories?post=11811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/id\/wp-json\/wp\/v2\/tags?post=11811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}