{"id":11679,"date":"2026-05-21T15:55:49","date_gmt":"2026-05-21T07:55:49","guid":{"rendered":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"},"modified":"2026-05-30T16:12:56","modified_gmt":"2026-05-30T08:12:56","slug":"mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml","status":"publish","type":"post","link":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","title":{"rendered":"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML"},"content":{"rendered":"<h2 data-nodeid=\"111\"><strong data-nodeid=\"293\">Wprowadzenie<\/strong><\/h2>\n<p data-nodeid=\"112\">W dzisiejszych z\u0142o\u017conych warunkach rozwoju oprogramowania jasna komunikacja i dok\u0142adne modelowanie systemu s\u0105 kluczowe dla sukcesu projektu. Jednym z najpot\u0119\u017cniejszych narz\u0119dzi w arsenale architekta oprogramowania jest\u00a0<strong data-nodeid=\"303\">Diagram klas UML<\/strong>\u2014 j\u0119zyk wizualny, kt\u00f3ry zapewnia most mi\u0119dzy abstrakcyjnymi wymaganiami a konkretn\u0105 realizacj\u0105.<\/p>\n<p data-nodeid=\"113\">Ten przyk\u0142ad studium przypadku bada, jak diagramy klas stanowi\u0105 fundament projektowania obiektowego, umo\u017cliwiaj\u0105c zespo\u0142om modelowanie statycznej struktury systemu, definiowanie relacji mi\u0119dzy jednostkami oraz ustalanie jasnych kontrakt\u00f3w dla rozwoju. Przyk\u0142adowo, na przyk\u0142adzie systemu zarz\u0105dzania zam\u00f3wieniami w e-commerce, poka\u017cemy, jak stopniowo doskonali\u0107 diagramy klas z trzech perspektyw rozwoju \u2014 koncepcyjnej, specyfikacji i implementacji \u2014 wykorzystuj\u0105c\u00a0<strong data-nodeid=\"311\">PlantUML<\/strong>\u00a0do tworzenia wykonywalnej, kontrolowanej wersji dokumentacji.<\/p>\n<p data-nodeid=\"114\">Niezale\u017cnie od tego, czy jeste\u015b analitykiem biznesowym modeluj\u0105cym koncepcje domeny, programist\u0105 projektuj\u0105cym interfejsy API, czy liderem zespo\u0142u zapewniaj\u0105cym sp\u00f3jno\u015b\u0107 architektoniczn\u0105, ten przewodnik zapewnia praktyczne wskaz\u00f3wki do tworzenia diagram\u00f3w klas, kt\u00f3re zwi\u0119kszaj\u0105 przejrzysto\u015b\u0107, zmniejszaj\u0105 niepewno\u015b\u0107 i przyspieszaj\u0105 dostarczanie.<\/p>\n<hr data-nodeid=\"115\"\/>\n<h2 data-nodeid=\"116\"><strong data-nodeid=\"318\">Zrozumienie diagram\u00f3w klas: Przypomnienie podstawowych poj\u0119\u0107<\/strong><\/h2>\n<p data-nodeid=\"117\"><em data-nodeid=\"322\">(Zwi\u0119z\u0142e podsumowanie podstawowych wiadomo\u015bci)<\/em><\/p>\n<p data-nodeid=\"118\">Diagram\u00a0<strong data-nodeid=\"328\">klas<\/strong>\u00a0w UML to diagram struktury statycznej, kt\u00f3ry wizualizuje:<\/p>\n<ul data-nodeid=\"119\">\n<li data-nodeid=\"120\">\n<p data-nodeid=\"121\"><strong data-nodeid=\"333\">Klasy<\/strong>: Szablony definiuj\u0105ce obiekty z atrybutami (stanem) i operacjami (zachowaniem)<\/p>\n<\/li>\n<li data-nodeid=\"122\">\n<p data-nodeid=\"123\"><strong data-nodeid=\"338\">Relacje<\/strong>: Dziedziczenie, powi\u0105zanie, agregacja, kompozycja i zale\u017cno\u015b\u0107<\/p>\n<\/li>\n<li data-nodeid=\"124\">\n<p data-nodeid=\"125\"><strong data-nodeid=\"357\">Ograniczenia<\/strong>: Widoczno\u015b\u0107 (<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>), wielokrotno\u015b\u0107 (<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>), i nawigowalno\u015b\u0107<\/p>\n<\/li>\n<\/ul>\n<h3 data-nodeid=\"126\"><strong data-nodeid=\"361\">Kluczowe elementy notacji<\/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>Edytuj PlantUML w 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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"128\"><strong data-nodeid=\"365\">Szybki przewodnik po typach relacji<\/strong><\/h3>\n<table data-nodeid=\"130\">\n<thead data-nodeid=\"131\">\n<tr data-nodeid=\"132\">\n<th data-nodeid=\"134\">Typ<\/th>\n<th data-nodeid=\"135\">Symbol<\/th>\n<th data-nodeid=\"136\">Znaczenie<\/th>\n<th data-nodeid=\"137\">Przyk\u0142ad<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"142\">\n<tr data-nodeid=\"143\">\n<td data-nodeid=\"144\"><strong data-nodeid=\"373\">Dziedziczenie<\/strong><\/td>\n<td data-nodeid=\"145\">`\u2013<\/td>\n<td data-nodeid=\"146\">&gt;`<\/td>\n<td data-nodeid=\"147\">\u201ejest-rodzajem\u201d<\/td>\n<\/tr>\n<tr data-nodeid=\"150\">\n<td data-nodeid=\"151\"><strong data-nodeid=\"384\">Zwi\u0105zek<\/strong><\/td>\n<td data-nodeid=\"152\"><code data-backticks=\"1\" data-nodeid=\"385\">--<\/code><\/td>\n<td data-nodeid=\"153\">Po\u0142\u0105czenie strukturalne<\/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\">Agregacja<\/strong><\/td>\n<td data-nodeid=\"157\"><code data-backticks=\"1\" data-nodeid=\"392\">o--<\/code><\/td>\n<td data-nodeid=\"158\">\u201ema-rodzaj\u201d (s\u0142abe)<\/td>\n<td data-nodeid=\"159\"><code data-backticks=\"1\" data-nodeid=\"397\">Warehouse o-- Product<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"160\">\n<td data-nodeid=\"161\"><strong data-nodeid=\"401\">Kompozycja<\/strong><\/td>\n<td data-nodeid=\"162\"><code data-backticks=\"1\" data-nodeid=\"402\">*--<\/code><\/td>\n<td data-nodeid=\"163\">\u201ew\u0142a\u015bciwy-rodzaj\u201d (silne)<\/td>\n<td data-nodeid=\"164\"><code data-backticks=\"1\" data-nodeid=\"407\">Order *-- OrderItem<\/code><\/td>\n<\/tr>\n<tr data-nodeid=\"165\">\n<td data-nodeid=\"166\"><strong data-nodeid=\"411\">Zale\u017cno\u015b\u0107<\/strong><\/td>\n<td data-nodeid=\"167\"><code data-backticks=\"1\" data-nodeid=\"412\">..&gt;<\/code><\/td>\n<td data-nodeid=\"168\">\u201eu\u017cywa\u201d (tymczasowe)<\/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\">Studium przypadku: System zarz\u0105dzania zam\u00f3wieniami e-commerce<\/strong><\/h2>\n<h3 data-nodeid=\"172\"><strong data-nodeid=\"425\">Wymagania biznesowe<\/strong><\/h3>\n<p data-nodeid=\"173\">Internetowy sprzedawca potrzebuje systemu, kt\u00f3ry:<\/p>\n<ol data-nodeid=\"174\">\n<li data-nodeid=\"175\">\n<p data-nodeid=\"176\">Zarz\u0105dza\u0107 klientami, produktami i zam\u00f3wieniami<\/p>\n<\/li>\n<li data-nodeid=\"177\">\n<p data-nodeid=\"178\">Obs\u0142ugiwa\u0107 pozycje zam\u00f3wie\u0144 z ilo\u015bciami i cenami<\/p>\n<\/li>\n<li data-nodeid=\"179\">\n<p data-nodeid=\"180\">Obs\u0142ugiwa\u0107 wiele metod p\u0142atno\u015bci<\/p>\n<\/li>\n<li data-nodeid=\"181\">\n<p data-nodeid=\"182\">\u015aledzi\u0107 status zam\u00f3wienia w trakcie ca\u0142ego cyklu \u017cycia<\/p>\n<\/li>\n<li data-nodeid=\"183\">\n<p data-nodeid=\"184\">Zezwala\u0107 produktom na przynale\u017cno\u015b\u0107 do kategorii<\/p>\n<\/li>\n<li data-nodeid=\"185\">\n<p data-nodeid=\"186\">Obs\u0142uga zakupu jako go\u015b\u0107 (opcjonalne przypisanie klienta)<\/p>\n<\/li>\n<\/ol>\n<h3 data-nodeid=\"187\"><strong data-nodeid=\"436\">Faza 1: Model koncepcyjny (perspektywa domeny)<\/strong><\/h3>\n<p data-nodeid=\"188\"><em data-nodeid=\"440\">Niezale\u017cny od j\u0119zyka, skupia si\u0119 na poj\u0119ciach z rzeczywistego \u015bwiata<\/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>Edytuj PlantUML w 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:RPF1Qjmm48Rl1h_3u4iXiA6v-X02oQcXi9H2eRT1cYQoPOsHPOnLUbaeVOObZv5hRxNVgvAyctYNFLaQpJV_p3_uhdDeNT_eF7EZw-STV6P96cesWbenLcOiuO4RCWYq4TmqP0NbMPu9ZLq7ZrgHSV0ppm0C-W7ZWHfKEXvGMkeUE6WCOvxzUiUsbcLVdtFSgYv-HL3RiemOnvSL-8YEdjWgl8Yk4hzZy-zr2CqfEgJseVNtQA8aEZmB1L7NfoxctVHRU8FVWa4ylqn_JYTWFufgJIyoIXzobp4-aJHX_fgNDeTZhNi_xUSNeSxdsyuxT2QbBFKQSYpnBInK4f5VBPeEQr6bUpsmI_M5nwCD7-0BQHHLMDPXISLD0PiD51-lhw-A4uDAwEgW815kyspz496hoDmaviBG9NWCHvlGurfFbIvImzYvQT_s5S5mWYvCqYnMwox3hZNDVqUGVAdBLPCh2qkmxBKAjXY2rdhoaSqpmux0ggTd1_nZRKKqSLtQKcl91_TYeyeuCgAQzc7ckc_xP7to5e4jUd37hKpxF2CZ8Uf4lRjm2J_PVm00\" \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\ntytu\u0142 Model koncepcyjny: Domena e-commerce\r\n\r\nclass Klient {\r\n  nazwa\r\n  email\r\n  adresDostawy\r\n}\r\n\r\nclass Produkt {\r\n  nazwa\r\n  opis\r\n  cenaPodstawowa\r\n}\r\n\r\nclass Kategoria {\r\n  nazwa\r\n  opis\r\n}\r\n\r\nclass Zam\u00f3wienie {\r\n  numerZam\u00f3wienia\r\n  dataZam\u00f3wienia\r\n  status\r\n  \u0142\u0105cznaWarto\u015b\u0107\r\n}\r\n\r\nclass PozycjaZam\u00f3wienia {\r\n  ilo\u015b\u0107\r\n  cenaJednostkowa\r\n  warto\u015b\u0107Cz\u0119\u015bciowa\r\n}\r\n\r\nclass P\u0142atno\u015b\u0107 {\r\n  metodaP\u0142atno\u015bci\r\n  idTransakcji\r\n  kwota\r\n  czas\r\n}\r\n\r\n' Relacje\r\nKlient \"1\" -- \"0..*\" Zam\u00f3wienie : sk\u0142ada &gt;\r\nZam\u00f3wienie \"1\" *-- \"1..*\" PozycjaZam\u00f3wienia : zawiera &gt;\r\nProdukt \"1\" -- \"0..*\" PozycjaZam\u00f3wienia : wyst\u0119puje w &gt;\r\nProdukt \"0..*\" -- \"1\" Kategoria : nale\u017cy do &gt;\r\nZam\u00f3wienie \"1\" -- \"1..*\" P\u0142atno\u015b\u0107 : rozliczane przez &gt;\r\n\r\nnote right of Zam\u00f3wienie\r\n  Zam\u00f3wienie reprezentuje intencj\u0119 zakupu\r\n  klienta oraz transakcj\u0119\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:RPF1Qjmm48Rl1h_3u4iXiA6v-X02oQcXi9H2eRT1cYQoPOsHPOnLUbaeVOObZv5hRxNVgvAyctYNFLaQpJV_p3_uhdDeNT_eF7EZw-STV6P96cesWbenLcOiuO4RCWYq4TmqP0NbMPu9ZLq7ZrgHSV0ppm0C-W7ZWHfKEXvGMkeUE6WCOvxzUiUsbcLVdtFSgYv-HL3RiemOnvSL-8YEdjWgl8Yk4hzZy-zr2CqfEgJseVNtQA8aEZmB1L7NfoxctVHRU8FVWa4ylqn_JYTWFufgJIyoIXzobp4-aJHX_fgNDeTZhNi_xUSNeSxdsyuxT2QbBFKQSYpnBInK4f5VBPeEQr6bUpsmI_M5nwCD7-0BQHHLMDPXISLD0PiD51-lhw-A4uDAwEgW815kyspz496hoDmaviBG9NWCHvlGurfFbIvImzYvQT_s5S5mWYvCqYnMwox3hZNDVqUGVAdBLPCh2qkmxBKAjXY2rdhoaSqpmux0ggTd1_nZRKKqSLtQKcl91_TYeyeuCgAQzc7ckc_xP7to5e4jUd37hKpxF2CZ8Uf4lRjm2J_PVm00\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"190\"><strong data-nodeid=\"444\">Kluczowe decyzje projektowe:<\/strong><\/p>\n<ul data-nodeid=\"191\">\n<li data-nodeid=\"192\">\n<p data-nodeid=\"193\">Kompozycja (<code data-backticks=\"1\" data-nodeid=\"446\">*--<\/code>) mi\u0119dzy\u00a0<code data-backticks=\"1\" data-nodeid=\"448\">Zam\u00f3wienie<\/code>\u00a0i\u00a0<code data-backticks=\"1\" data-nodeid=\"450\">PozycjaZam\u00f3wienia<\/code>: Pozycje nie mog\u0105 istnie\u0107 bez zam\u00f3wienia<\/p>\n<\/li>\n<li data-nodeid=\"194\">\n<p data-nodeid=\"195\">Powi\u0105zanie mi\u0119dzy\u00a0<code data-backticks=\"1\" data-nodeid=\"453\">Produkt<\/code>\u00a0i\u00a0<code data-backticks=\"1\" data-nodeid=\"455\">Kategoria<\/code>: Produkty mog\u0105 by\u0107 przekategorizowane<\/p>\n<\/li>\n<li data-nodeid=\"196\">\n<p data-nodeid=\"197\">Wielokrotno\u015b\u0107\u00a0<code data-backticks=\"1\" data-nodeid=\"458\">0..*<\/code>\u00a0dla Zam\u00f3wienia-Klienta: obs\u0142uguje zakup jako go\u015b\u0107<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"198\"\/>\n<h3 data-nodeid=\"199\"><strong data-nodeid=\"463\">Faza 2: Model specyfikacji (perspektywa interfejsu)<\/strong><\/h3>\n<p data-nodeid=\"200\"><em data-nodeid=\"467\">Skupienie si\u0119 na kontraktach oprogramowania, ukrywanie szczeg\u00f3\u0142\u00f3w implementacji<\/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>Edytuj PlantUML w 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:TLHBRjim4DqBq1rcLnirV02XC58W6m4D4jXPTSTGOvUMHAhaq8PST1CWw1cA7YFRx6BVgoDATcrPtP7pUNmpypWtZeGbNnPnH3NvmpFScGmBS1NAUgbo8TSgWLGJsYMkNGtU7PxzAexYI1sDaDxR3Eq2xKP9X1zn1F1HMXI4mJ6Itf4fqQPP0WkoIgyce0XBby0NvUXJY4hPSFjuFnid4Evy3a0hf1R5XAWJH3_ELzdnmGK9ygwVC04Nx5rU6yGeJyOKA7JBMXJI5qUSHqEY67ZtpcYiu-XdhmiFeYvHquCr4fqpjkj4rTuxxpMhgdNS8WbLCBikaEiQdovpTBwW06TnwNLsH2Chj1EIbD7dcA8qNbF7b67c8Uc8qYUUwWrZ6LltHlWDPVvvmwp4aoeKrICk9VEIpb_wxeKczYN0WBrkMdGCYCra1wPnhe1vY1IX33RFhe3uwF0iQc0g6wEohZPP2ETEykZAwMMq9LufCvZ_AyxWfKOM9nMmOK1NrqGwY7-YkEnai5uqirMrLYmedicbwZx0Lr7WuKsRmn-fukZo1qwdiu6X9k0FR_LMm6mm_agz2UI6UrPhlyRXd5E34zXjhP01EeuqzuTo0HuomylYSZqqLTtYKcdLmEP6iu9pWfsmk_rBjXDQ2RwKxwzRXNmkrRJ9ICkgm8OUxoE4qgpsB-3K_ZVOzrVkWjh_Wb6xcGIKAhTcma7Qi6XPPjLq74Vyaa89BJVLqBn1dV7Y-mi0\" \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\ntytu\u0142 Model specyfikacji: Interfejsy us\u0142ug\r\n\r\ninterfejs 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\ninterfejs IPaymentProcessor {\r\n  +processPayment(orderId: String, paymentDetails: PaymentDTO): PaymentResult\r\n  +refundPayment(transactionId: String, amount: Money): RefundResult\r\n}\r\n\r\ninterfejs 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' Zale\u017cno\u015bci\r\nIOrderService ..&gt; IInventoryService : u\u017cywa &gt;\r\nIOrderService ..&gt; IPaymentProcessor : koordynuje &gt;\r\nIOrderService ..&gt; OrderDTO : zwraca &gt;\r\n\r\nnotatka u do\u0142u IOrderService\r\n  Definiuje kontrakt zarz\u0105dzania zam\u00f3wieniami.\r\n  Implementacje mog\u0105 si\u0119 r\u00f3\u017cni\u0107 (us\u0142uga mikro, monolit itp.)\r\nkoniec notatki\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:TLHBRjim4DqBq1rcLnirV02XC58W6m4D4jXPTSTGOvUMHAhaq8PST1CWw1cA7YFRx6BVgoDATcrPtP7pUNmpypWtZeGbNnPnH3NvmpFScGmBS1NAUgbo8TSgWLGJsYMkNGtU7PxzAexYI1sDaDxR3Eq2xKP9X1zn1F1HMXI4mJ6Itf4fqQPP0WkoIgyce0XBby0NvUXJY4hPSFjuFnid4Evy3a0hf1R5XAWJH3_ELzdnmGK9ygwVC04Nx5rU6yGeJyOKA7JBMXJI5qUSHqEY67ZtpcYiu-XdhmiFeYvHquCr4fqpjkj4rTuxxpMhgdNS8WbLCBikaEiQdovpTBwW06TnwNLsH2Chj1EIbD7dcA8qNbF7b67c8Uc8qYUUwWrZ6LltHlWDPVvvmwp4aoeKrICk9VEIpb_wxeKczYN0WBrkMdGCYCra1wPnhe1vY1IX33RFhe3uwF0iQc0g6wEohZPP2ETEykZAwMMq9LufCvZ_AyxWfKOM9nMmOK1NrqGwY7-YkEnai5uqirMrLYmedicbwZx0Lr7WuKsRmn-fukZo1qwdiu6X9k0FR_LMm6mm_agz2UI6UrPhlyRXd5E34zXjhP01EeuqzuTo0HuomylYSZqqLTtYKcdLmEP6iu9pWfsmk_rBjXDQ2RwKxwzRXNmkrRJ9ICkgm8OUxoE4qgpsB-3K_ZVOzrVkWjh_Wb6xcGIKAhTcma7Qi6XPPjLq74Vyaa89BJVLqBn1dV7Y-mi0\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"202\"><strong data-nodeid=\"471\">Zalety architektoniczne:<\/strong><\/p>\n<ul data-nodeid=\"203\">\n<li data-nodeid=\"204\">\n<p data-nodeid=\"205\">Oddzielanie interfejs\u00f3w umo\u017cliwia niezale\u017cne wdra\u017canie<\/p>\n<\/li>\n<li data-nodeid=\"206\">\n<p data-nodeid=\"207\">DTOs rozdzielaj\u0105 modele wewn\u0119trzne od kontrakt\u00f3w interfejsu API<\/p>\n<\/li>\n<li data-nodeid=\"208\">\n<p data-nodeid=\"209\">Zale\u017cno\u015bci jasno pokazuj\u0105 granice us\u0142ug dla mikroserwis\u00f3w<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"210\"\/>\n<h3 data-nodeid=\"211\"><strong data-nodeid=\"478\">Faza 3: Model implementacji (perspektywa kodu)<\/strong><\/h3>\n<p data-nodeid=\"212\"><em data-nodeid=\"482\">Szczeg\u00f3\u0142y specyficzne dla technologii implementacji 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>Edytuj PlantUML w 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:TLLBJzj04Bv7odyOSMc0uAfNgqM496tJ1eWIw7tO7S8cjjVihecSYakb_eZ-Zbwv5VvNP_qWBxXiFE-PRnuviGwDo-AesN2vovv_mPcM586AquXYIXoAcGhXUuGsXszuZ-ydgL7954wrTir6iv6YcEEKGEWu87vYCe82RIIPWCsLo-5dim4mPmy85vvVCW2EJWOI2is13E7gQj2h-MUOv9Vw8c6tcNMQVORGhRvg7PPUQg_O4cW5IlhK6GxtGJcARGX3PTt78jg06SULKH6iXuvOGGkC_EUbYgaICnOkO-F2Rb8GbSHfXr4drbdYGZXLqnu95MDKIilt4ANqiLgfqJ8Jh3SgFzfmv_8GLEBsGxZNIbRw75zaaS_0Es_jxpe-ZD7CEtPogzAKP6lD_C4_Mx3wu1lGUYZUHhR0egfrLxfTHALnbs7HqwASYfSboesC4lGcCbDoa-pQlLxcIocBF59YIOcYzGRK5Otwvxt1-PUIw5wSVnwCp_fLMPElWz6e9dhzuU17VroJtSvvjpySbYJ7UdXxQ5FC_SG7bimzbxC-jwDID5cNUC0wcTCBPKX2PVo5-xb0ncUqGU_g5_2FATLMEMtogX4hnWQ0t0r1rbO-MnixqmRfz4kyCTrbPFsalJ1igXDRZ_WzHafoJfMqHmvLP5klkrWDwr6MUgiYnngBeZtRkTGhjA7qsk3o_92vePdTGgh6zb3SefbI2tUMhWq23GViyblbpm4k3IOMXLCwuPApg9hEGqCtMI9RRYNsoKwSFs9jsFNEhiQ5oSfBFJNlM1BnFMGiopkszs4F3ewE-3S83lRMjZ24kOvJlSp53E6uLW-2u-r12c694Jq_vg2bLzmIhrdKy8IhqvpDU4zrQfQqzBRDHi8RvkR8JDvVND2Css7qoqBvr7mz7UaLVMed_V92nvXwPmc2mskAdlx0DIvpa7mEn6tWRRgh6yiffxH85BRX-P60ocHoi4-_mPa5r-Crb4K-8mQN3CUI6V6_lmlbbpjcVtEVb80oN-LJFw54yh_GVm00\" \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\ntytu\u0142 Model implementacji: Klasy Java\/Spring Boot\r\n\r\npackage com.ecommerce.order.entity {\r\n  klasa 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  klasa 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  wyliczenie 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  klasa 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  interfejs 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' Relacje\r\nOrder \"1\" *-- \"1..*\" OrderItem : kompozycja &gt;\r\nOrder ..&gt; PaymentService : zale\u017cy od &gt;\r\nPaymentService ..&gt; PaymentGateway : implementuje poprzez &gt;\r\n\r\nnotatka po prawej stronie OrderItem\r\n  Adnotacja @Entity mapuje na tabel\u0119 bazy danych.\r\n  Cascade=ALL zapewnia, \u017ce elementy s\u0105 trwale zapisane razem z zam\u00f3wieniem.\r\nkoniec notatki\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:TLLBJzj04Bv7odyOSMc0uAfNgqM496tJ1eWIw7tO7S8cjjVihecSYakb_eZ-Zbwv5VvNP_qWBxXiFE-PRnuviGwDo-AesN2vovv_mPcM586AquXYIXoAcGhXUuGsXszuZ-ydgL7954wrTir6iv6YcEEKGEWu87vYCe82RIIPWCsLo-5dim4mPmy85vvVCW2EJWOI2is13E7gQj2h-MUOv9Vw8c6tcNMQVORGhRvg7PPUQg_O4cW5IlhK6GxtGJcARGX3PTt78jg06SULKH6iXuvOGGkC_EUbYgaICnOkO-F2Rb8GbSHfXr4drbdYGZXLqnu95MDKIilt4ANqiLgfqJ8Jh3SgFzfmv_8GLEBsGxZNIbRw75zaaS_0Es_jxpe-ZD7CEtPogzAKP6lD_C4_Mx3wu1lGUYZUHhR0egfrLxfTHALnbs7HqwASYfSboesC4lGcCbDoa-pQlLxcIocBF59YIOcYzGRK5Otwvxt1-PUIw5wSVnwCp_fLMPElWz6e9dhzuU17VroJtSvvjpySbYJ7UdXxQ5FC_SG7bimzbxC-jwDID5cNUC0wcTCBPKX2PVo5-xb0ncUqGU_g5_2FATLMEMtogX4hnWQ0t0r1rbO-MnixqmRfz4kyCTrbPFsalJ1igXDRZ_WzHafoJfMqHmvLP5klkrWDwr6MUgiYnngBeZtRkTGhjA7qsk3o_92vePdTGgh6zb3SefbI2tUMhWq23GViyblbpm4k3IOMXLCwuPApg9hEGqCtMI9RRYNsoKwSFs9jsFNEhiQ5oSfBFJNlM1BnFMGiopkszs4F3ewE-3S83lRMjZ24kOvJlSp53E6uLW-2u-r12c694Jq_vg2bLzmIhrdKy8IhqvpDU4zrQfQqzBRDHi8RvkR8JDvVND2Css7qoqBvr7mz7UaLVMed_V92nvXwPmc2mskAdlx0DIvpa7mEn6tWRRgh6yiffxH85BRX-P60ocHoi4-_mPa5r-Crb4K-8mQN3CUI6V6_lmlbbpjcVtEVb80oN-LJFw54yh_GVm00\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<p data-nodeid=\"214\"><strong data-nodeid=\"486\">Wyr\u00f3\u017cnienia implementacji:<\/strong><\/p>\n<ul data-nodeid=\"215\">\n<li data-nodeid=\"216\">\n<p data-nodeid=\"217\">Adnotacje JPA (<code data-backticks=\"1\" data-nodeid=\"488\">@Entity<\/code>,\u00a0<code data-backticks=\"1\" data-nodeid=\"490\">@ManyToOne<\/code>) do mapowania ORM<\/p>\n<\/li>\n<li data-nodeid=\"218\">\n<p data-nodeid=\"219\">Wstrzykiwanie zale\u017cno\u015bci (<code data-backticks=\"1\" data-nodeid=\"493\">@Autowired<\/code>) do rozlu\u017anienia sprz\u0119\u017cenia<\/p>\n<\/li>\n<li data-nodeid=\"220\">\n<p data-nodeid=\"221\">Wyliczenie do bezpiecznego zarz\u0105dzania stanem zam\u00f3wienia pod wzgl\u0119dem typu<\/p>\n<\/li>\n<li data-nodeid=\"222\">\n<p data-nodeid=\"223\">Prywatne metody pomocnicze (<code data-backticks=\"1\" data-nodeid=\"497\">-validatePaymentDetails<\/code>) hermetyzuj\u0105 logik\u0119<\/p>\n<\/li>\n<\/ul>\n<hr data-nodeid=\"224\"\/>\n<h2 data-nodeid=\"225\"><strong data-nodeid=\"504\">Zaawansowane wzorce i najlepsze praktyki<\/strong><\/h2>\n<h3 data-nodeid=\"226\"><strong data-nodeid=\"508\">1. Obs\u0142uga widoczno\u015bci i hermetyzacji<\/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>Edytuj PlantUML w 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:PP5HJiCm38RVA_KEbdWP0YvG8RGD7fY4K2MuW9juNMZgJ8bBrI1uGE8GEmT7ODoBj7iOqfvYv__j-8ldGT1BrzeyKnP3W2Loir3ATIpmbcS05tZ87hks8b_0atZ3zQJK94kqo8fcvmKiJNr7ohHeH_6gEYWdz-AH0oenZkzD4EU70XvISFry56v6vvb2gpgBGYiMyXHavbDIW7PTPUdanGypsXZjejD6nebUdT5vzfvdUSPE2BofDm9k_Hzo0e4oTJGgSke-TLdJIu15kG9j4HfhYENdkuT8FUztuYCFQZFHGEc77cKiJ3_9q1yTby26j0kotsrvW7Ye_ahQH0Ut6-yumKv4u5qCaNn4DWXR7od2rkacxMIOuA34nf2uFjbxezquBFJWAh_VLOP0g7OGi1sFrkdkzxFBCs8D8tcUpLEOjlm7\" \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  + Publiczne: interfejs API dla klient\u00f3w zewn\u0119trznych\r\n  - Prywatne: stan wewn\u0119trzny, niedost\u0119pny z zewn\u0105trz\r\n  # Chronione: do rozszerzania przez podklasy\r\n  ~ Pakietowe: widoczne w obr\u0119bie tego samego modu\u0142u\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:PP5HJiCm38RVA_KEbdWP0YvG8RGD7fY4K2MuW9juNMZgJ8bBrI1uGE8GEmT7ODoBj7iOqfvYv__j-8ldGT1BrzeyKnP3W2Loir3ATIpmbcS05tZ87hks8b_0atZ3zQJK94kqo8fcvmKiJNr7ohHeH_6gEYWdz-AH0oenZkzD4EU70XvISFry56v6vvb2gpgBGYiMyXHavbDIW7PTPUdanGypsXZjejD6nebUdT5vzfvdUSPE2BofDm9k_Hzo0e4oTJGgSke-TLdJIu15kG9j4HfhYENdkuT8FUztuYCFQZFHGEc77cKiJ3_9q1yTby26j0kotsrvW7Ye_ahQH0Ut6-yumKv4u5qCaNn4DWXR7od2rkacxMIOuA34nf2uFjbxezquBFJWAh_VLOP0g7OGi1sFrkdkzxFBCs8D8tcUpLEOjlm7\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"228\"><strong data-nodeid=\"512\">2. Wielokrotno\u015b\u0107 w scenariuszach z rzeczywistego \u017cycia<\/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>Edytuj PlantUML w 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:NLAnRjim4Dq5w1yENkgaYH6l0Xe4RPQWGmDuwtOXhoubyOwLw1XIKQ3eqcymkkKNicQB_IFvaXuLAtMp7H_Vk_Vko8isOXDNliupKsFRmkAhXE1u-K5X-9vd06_Hsgj8VXeQiIiJ2xX-BaxWM-mAS1oF2hWLPmTsGrvkwL1mPGjOn4QRAkz6f2RaFFkHPwFdlj_UZj7JA1Y0q3YZo7ktl2JZFDO3wdWHnLIlExw1ZzBsNGLUTWy4FQuTDRZz3MBX3Ao0dkiLK4sUE3xUhmS9xXviDu9APMaTj6wxKKMr-uMM7ILnIPPfAJ1CLiLLdlsthyby0iUdfp0vcysE9ozp5MCCE4yHMI9fwXZ5fqa-Oujgdd99rKXasVqnhaXNJp_l8BM2T_0fc58OQwQJWKemPInDlzqaDfNG1ebTXKn7etAkiij_yLDsWUcwyxWyfAd1_9L142LtRFha4cRGstAxKPSqznTNo_h0v3dUTTDtciTpYh9tIieWVMVAz0vUT-s87QgKs4BQGfvTQAc_xoy0\" \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 ShoppingCart {\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' Koszyk mo\u017ce zawiera\u0107 od 0 do wielu element\u00f3w\r\n' Ka\u017cdy element odnosi si\u0119 dok\u0142adnie do jednego produktu\r\nShoppingCart \"1\" *-- \"0..*\" Product : zawiera &gt;\r\n\r\nnote bottom\r\n  Zasady wielokrotno\u015bci:\r\n  \u2022 0..* = Opcjonalne, wiele (najcz\u0119\u015bciej spotykane)\r\n  \u2022 1 = Dok\u0142adnie jedno (wymagane)\r\n  \u2022 0..1 = Opcjonalne, pojedyncze (np. zdj\u0119cie profilowe)\r\n  \u2022 1..* = Przynajmniej jedno (np. pozycje zam\u00f3wienia)\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:NLAnRjim4Dq5w1yENkgaYH6l0Xe4RPQWGmDuwtOXhoubyOwLw1XIKQ3eqcymkkKNicQB_IFvaXuLAtMp7H_Vk_Vko8isOXDNliupKsFRmkAhXE1u-K5X-9vd06_Hsgj8VXeQiIiJ2xX-BaxWM-mAS1oF2hWLPmTsGrvkwL1mPGjOn4QRAkz6f2RaFFkHPwFdlj_UZj7JA1Y0q3YZo7ktl2JZFDO3wdWHnLIlExw1ZzBsNGLUTWy4FQuTDRZz3MBX3Ao0dkiLK4sUE3xUhmS9xXviDu9APMaTj6wxKKMr-uMM7ILnIPPfAJ1CLiLLdlsthyby0iUdfp0vcysE9ozp5MCCE4yHMI9fwXZ5fqa-Oujgdd99rKXasVqnhaXNJp_l8BM2T_0fc58OQwQJWKemPInDlzqaDfNG1ebTXKn7etAkiij_yLDsWUcwyxWyfAd1_9L142LtRFha4cRGstAxKPSqznTNo_h0v3dUTTDtciTpYh9tIieWVMVAz0vUT-s87QgKs4BQGfvTQAc_xoy0\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<h3 data-nodeid=\"230\"><strong data-nodeid=\"516\">3. Klasy abstrakcyjne vs. interfejsy<\/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>Edytuj PlantUML w 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:ZP9DJiD038NtaN87Isn0eHU8M7G12uJefYTmfcxgT697CvDMAR3fBH37u0ZGUp5J94H_5bsCDFBpV7wsP-m3kj2tDi-myi6X2M0iUWyJ3JndWu5Lu2NF0AuS6UwO99Gm3OwbtaTRyXvh-Xyh_bYUP7PzKqAbQWbbBrgjxydoYjoGf9NoBC_UyYpFM0AvEHg2XnRPdbeeV5yrP0uC52SrZbZJv-aPKhTGeKdVLkGke1q0xbv7erE7vvAEIYUIQ21mN2y2w1mELO2dE7k4t_4jpT08bh3stTVdRZlRC5cL0UBA10emc-_ttOTXNIDmsrbgusRGD9WuZ_lkgV5bp1jy662fafZX5hJoksrV8wmJC67ZCHiIZazZzv0ivjauNkF7-040\" \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 Notification {\r\n  #recipient: String\r\n  #message: String\r\n  +abstract send(): boolean\r\n  +logDelivery(): void\r\n}\r\n\r\ninterface EmailNotification {\r\n  +subject: String\r\n  +send(): boolean\r\n}\r\n\r\ninterface SMSNotification {\r\n  +phoneNumber: String\r\n  +send(): boolean\r\n}\r\n\r\nNotification &lt;|-- EmailNotification\r\nNotification &lt;|-- SMSNotification\r\n\r\nnote right of Notification\r\n  Klasa abstrakcyjna: wsp\u00f3\u0142dzielony stan + cz\u0119\u015bciowa implementacja\r\n  Interfejs: czysty kontrakt, obs\u0142uga wielodziedziczenia\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:ZP9DJiD038NtaN87Isn0eHU8M7G12uJefYTmfcxgT697CvDMAR3fBH37u0ZGUp5J94H_5bsCDFBpV7wsP-m3kj2tDi-myi6X2M0iUWyJ3JndWu5Lu2NF0AuS6UwO99Gm3OwbtaTRyXvh-Xyh_bYUP7PzKqAbQWbbBrgjxydoYjoGf9NoBC_UyYpFM0AvEHg2XnRPdbeeV5yrP0uC52SrZbZJv-aPKhTGeKdVLkGke1q0xbv7erE7vvAEIYUIQ21mN2y2w1mELO2dE7k4t_4jpT08bh3stTVdRZlRC5cL0UBA10emc-_ttOTXNIDmsrbgusRGD9WuZ_lkgV5bp1jy662fafZX5hJoksrV8wmJC67ZCHiIZazZzv0ivjauNkF7-040\" \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>Edytuj PlantUML w VPasCode<\/span><br \/>\n<\/a>\n<\/div>\n<\/div>\n<hr data-nodeid=\"232\"\/>\n<h2 data-nodeid=\"233\"><strong data-nodeid=\"522\">Typowe pu\u0142apki i spos\u00f3b na ich unikni\u0119cie<\/strong><\/h2>\n<table data-nodeid=\"235\">\n<thead data-nodeid=\"236\">\n<tr data-nodeid=\"237\">\n<th data-nodeid=\"239\">Pu\u0142apka<\/th>\n<th data-nodeid=\"240\">Objaw<\/th>\n<th data-nodeid=\"241\">Rozwi\u0105zanie<\/th>\n<\/tr>\n<\/thead>\n<tbody data-nodeid=\"245\">\n<tr data-nodeid=\"246\">\n<td data-nodeid=\"247\"><strong data-nodeid=\"529\">Zbyt z\u0142o\u017cone projektowanie<\/strong><\/td>\n<td data-nodeid=\"248\">Diagramy z 50+ klasami, trudne do odczytania<\/td>\n<td data-nodeid=\"249\">Zacznij od modelu koncepcyjnego; podziel na wiele diagram\u00f3w wed\u0142ug kontekstu ograniczonego<\/td>\n<\/tr>\n<tr data-nodeid=\"250\">\n<td data-nodeid=\"251\"><strong data-nodeid=\"535\">Pomylenie agregacji i kompozycji<\/strong><\/td>\n<td data-nodeid=\"252\">Niejasne zarz\u0105dzanie cyklem \u017cycia obiektu<\/td>\n<td data-nodeid=\"253\">Zadaj pytanie: \u201eJe\u015bli ca\u0142o\u015b\u0107 zostanie usuni\u0119ta, czy cz\u0119\u015bci przetrwaj\u0105?\u201d Je\u015bli nie \u2192 u\u017cyj kompozycji (<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\">Ignorowanie nawigowalno\u015bci<\/strong><\/td>\n<td data-nodeid=\"256\">Strza\u0142ki dwukierunkowe wsz\u0119dzie<\/td>\n<td data-nodeid=\"257\">Dodawaj strza\u0142ki nawigowalno\u015bci tylko tam, gdzie jest to potrzebne w kodzie<\/td>\n<\/tr>\n<tr data-nodeid=\"258\">\n<td data-nodeid=\"259\"><strong data-nodeid=\"553\">Mieszanie poziom\u00f3w abstrakcji<\/strong><\/td>\n<td data-nodeid=\"260\">DTOs mieszane z klasami encji na tym samym diagramie<\/td>\n<td data-nodeid=\"261\">Rozdzielaj diagramy wed\u0142ug perspektywy (koncepcyjna\/specyfikacja\/realizacja)<\/td>\n<\/tr>\n<tr data-nodeid=\"262\">\n<td data-nodeid=\"263\"><strong data-nodeid=\"559\">Ignorowanie kontroli wersji<\/strong><\/td>\n<td data-nodeid=\"264\">Diagramy staj\u0105 si\u0119 przestarza\u0142e<\/td>\n<td data-nodeid=\"265\">U\u017cywaj plik\u00f3w tekstowych PlantUML w Git; generuj obrazy w pipeline CI\/CD<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr data-nodeid=\"266\"\/>\n<h2 data-nodeid=\"267\"><strong data-nodeid=\"565\">Rekomendacja narz\u0119dzi: Dlaczego PlantUML?<\/strong><\/h2>\n<p data-nodeid=\"268\">W przypadku studium przypadku powy\u017cej,\u00a0<strong data-nodeid=\"595\">PlantUML<\/strong>\u00a0zosta\u0142 wybrany, poniewa\u017c:<br \/>\n\u2705\u00a0<strong data-nodeid=\"596\">Oparte na tek\u015bcie<\/strong>: Diagramy to kod \u2014 wersjonowalny, por\u00f3wnywalny, podlegaj\u0105cy przegl\u0105dom<br \/>\n\u2705\u00a0<strong data-nodeid=\"597\">Przeno\u015bny<\/strong>: Renderuje lokalnie lub przez us\u0142ug\u0119 chmurow\u0105; integruje si\u0119 z Confluence, GitHub, VS Code<br \/>\n\u2705\u00a0<strong data-nodeid=\"598\">\u0141atwy w utrzymaniu<\/strong>: Aktualizuj logik\u0119 diagramu bez ponownego rysowania p\u00f3l<br \/>\n\u2705\u00a0<strong data-nodeid=\"599\">Wsp\u00f3\u0142pracuj\u0105cy<\/strong>: Nie-dizajnerzy mog\u0105 przyczynia\u0107 si\u0119 za pomoc\u0105 prostego sk\u0142adnia<\/p>\n<p data-nodeid=\"269\"><strong data-nodeid=\"603\">Przyk\u0142adowy przep\u0142yw pracy:<\/strong><\/p>\n<pre class=\"lang-bash\" data-nodeid=\"270\"><code data-language=\"bash\"># 1. Napisz diagram jako tekst\r\necho '@startumlnclass User { +name: String }n@enduml' &gt; UserDiagram.puml\r\n\r\n# 2. Wygeneruj PNG\/SVG\r\nplantuml -tpng UserDiagram.puml\r\n\r\n# 3. Zatwierd\u017a zar\u00f3wno plik .puml, jak i wygenerowany obraz w 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\">Wnioski<\/strong><\/h2>\n<p data-nodeid=\"273\">Diagramy klas s\u0105 znacznie wi\u0119cej ni\u017c akademickimi \u0107wiczeniami \u2014 s\u0105 \u017cyj\u0105cymi artefaktami, kt\u00f3re wspieraj\u0105 zgodno\u015b\u0107, zmniejszaj\u0105 d\u0142ug techniczny i przyspieszaj\u0105 onboardowanie na przestrzeni ca\u0142ego cyklu \u017cycia oprogramowania. Jak pokazano w naszym studium przypadku e-commerce, prawdziwa si\u0142a diagram\u00f3w klas pojawia si\u0119, gdy rozwijaj\u0105 si\u0119 przez trzy kluczowe perspektywy:<\/p>\n<p data-nodeid=\"274\">\ud83d\udd39\u00a0<strong data-nodeid=\"626\">Koncepcyjna<\/strong>: Ugruntuj stakeholder\u00f3w w wsp\u00f3lnej wiedzy o dziedzinie<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"627\">Specyfikacja<\/strong>: Zdefiniuj czyste interfejsy dla architektury modu\u0142owej<br \/>\n\ud83d\udd39\u00a0<strong data-nodeid=\"628\">Realizacja<\/strong>: Kieruj programist\u00f3w precyzyjnymi, \u015bwiadcz\u0105cymi o technologii projektami<\/p>\n<p data-nodeid=\"275\">Przyjmuj\u0105c\u00a0<strong data-nodeid=\"638\">PlantUML<\/strong>przy u\u017cyciu diagram\u00f3w jako kodu, zespo\u0142y zyskuj\u0105 elastyczno\u015b\u0107 na iterowanie projekt\u00f3w wraz z kodem, zapewniaj\u0105c, \u017ce dokumentacja nigdy nie op\u00f3\u017ania si\u0119 wobec implementacji. Pami\u0119taj: najlepszy diagram klas nie jest najbardziej szczeg\u00f3\u0142owy \u2014 to ten, kt\u00f3ry odpowiada na odpowiednie pytania dla swojej publiczno\u015bci w odpowiednim momencie.<\/p>\n<p data-nodeid=\"276\"><strong data-nodeid=\"643\">Ostateczny wniosek<\/strong>: Zaczynaj prosto, weryfikuj z stakeholderami, stopniowo doskonal, i zawsze \u0142\u0105cz elementy diagramu z rzeczywist\u0105 warto\u015bci\u0105 biznesow\u0105. Gdy diagramy klas staj\u0105 si\u0119 narz\u0119dziami wsp\u00f3\u0142pracy zamiast dokumentami ko\u0144cowymi, przekszta\u0142caj\u0105 si\u0119 z koszt\u00f3w nadmiarowych w katalizatory lepszego oprogramowania.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wprowadzenie W dzisiejszych z\u0142o\u017conych warunkach rozwoju oprogramowania jasna komunikacja i dok\u0142adne modelowanie systemu s\u0105 kluczowe dla sukcesu projektu. Jednym z najpot\u0119\u017cniejszych narz\u0119dzi w arsenale architekta oprogramowania jest\u00a0Diagram klas UML\u2014 j\u0119zyk wizualny, kt\u00f3ry zapewnia most mi\u0119dzy abstrakcyjnymi wymaganiami a konkretn\u0105 realizacj\u0105. Ten przyk\u0142ad studium przypadku bada, jak diagramy klas stanowi\u0105 fundament projektowania obiektowego, umo\u017cliwiaj\u0105c zespo\u0142om modelowanie [&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-11679","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>Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem 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\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML - Visual Paradigm Blog\" \/>\n<meta property=\"og:description\" content=\"Wprowadzenie W dzisiejszych z\u0142o\u017conych warunkach rozwoju oprogramowania jasna komunikacja i dok\u0142adne modelowanie systemu s\u0105 kluczowe dla sukcesu projektu. Jednym z najpot\u0119\u017cniejszych narz\u0119dzi w arsenale architekta oprogramowania jest\u00a0Diagram klas UML\u2014 j\u0119zyk wizualny, kt\u00f3ry zapewnia most mi\u0119dzy abstrakcyjnymi wymaganiami a konkretn\u0105 realizacj\u0105. Ten przyk\u0142ad studium przypadku bada, jak diagramy klas stanowi\u0105 fundament projektowania obiektowego, umo\u017cliwiaj\u0105c zespo\u0142om modelowanie [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.visual-paradigm.com\/pl\/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:12:56+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=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"url\":\"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\",\"name\":\"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML - Visual Paradigm Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/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:12:56+00:00\",\"author\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/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\/pl\/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\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/#website\",\"url\":\"https:\/\/blog.visual-paradigm.com\/pl\/\",\"name\":\"Visual Paradigm Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.visual-paradigm.com\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/#\/schema\/person\/a649c442f11a53040710ddec750926c6\",\"name\":\"Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/blog.visual-paradigm.com\/pl\/#\/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\/pl\/author\/vpadminuser\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem 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\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","og_locale":"pl_PL","og_type":"article","og_title":"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML - Visual Paradigm Blog","og_description":"Wprowadzenie W dzisiejszych z\u0142o\u017conych warunkach rozwoju oprogramowania jasna komunikacja i dok\u0142adne modelowanie systemu s\u0105 kluczowe dla sukcesu projektu. Jednym z najpot\u0119\u017cniejszych narz\u0119dzi w arsenale architekta oprogramowania jest\u00a0Diagram klas UML\u2014 j\u0119zyk wizualny, kt\u00f3ry zapewnia most mi\u0119dzy abstrakcyjnymi wymaganiami a konkretn\u0105 realizacj\u0105. Ten przyk\u0142ad studium przypadku bada, jak diagramy klas stanowi\u0105 fundament projektowania obiektowego, umo\u017cliwiaj\u0105c zespo\u0142om modelowanie [&hellip;]","og_url":"https:\/\/blog.visual-paradigm.com\/pl\/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:12:56+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":{"Napisane przez":"Admin","Szacowany czas czytania":"5 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","url":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/","name":"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML - Visual Paradigm Blog","isPartOf":{"@id":"https:\/\/blog.visual-paradigm.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#primaryimage"},"image":{"@id":"https:\/\/blog.visual-paradigm.com\/pl\/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:12:56+00:00","author":{"@id":"https:\/\/blog.visual-paradigm.com\/pl\/#\/schema\/person\/a649c442f11a53040710ddec750926c6"},"breadcrumb":{"@id":"https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.visual-paradigm.com\/pl\/mastering-uml-class-diagrams-a-practical-case-study-in-system-design-with-plantuml\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/blog.visual-paradigm.com\/pl\/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\/pl\/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\/pl\/"},{"@type":"ListItem","position":2,"name":"Opanowanie diagram\u00f3w klas UML: Praktyczny przyk\u0142ad studium przypadku w projektowaniu systemu z wykorzystaniem PlantUML"}]},{"@type":"WebSite","@id":"https:\/\/blog.visual-paradigm.com\/pl\/#website","url":"https:\/\/blog.visual-paradigm.com\/pl\/","name":"Visual Paradigm Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.visual-paradigm.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/blog.visual-paradigm.com\/pl\/#\/schema\/person\/a649c442f11a53040710ddec750926c6","name":"Admin","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/blog.visual-paradigm.com\/pl\/#\/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\/pl\/author\/vpadminuser\/"}]}},"modified_by":"Admin","_links":{"self":[{"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/posts\/11679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/comments?post=11679"}],"version-history":[{"count":0,"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/posts\/11679\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/media?parent=11679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/categories?post=11679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.visual-paradigm.com\/pl\/wp-json\/wp\/v2\/tags?post=11679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}