{"id":704,"date":"2023-12-06T21:29:54","date_gmt":"2023-12-06T20:29:54","guid":{"rendered":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=704"},"modified":"2024-01-16T11:27:42","modified_gmt":"2024-01-16T10:27:42","slug":"solid-zasada-otwarte-zamkniete","status":"publish","type":"post","link":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=704","title":{"rendered":"SOLID &#8211; Zasada otwarte &#8211; zamkni\u0119te"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"704\" class=\"elementor elementor-704\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8da8e4f elementor-section-full_width elementor-section-stretched elementor-section-height-default elementor-section-height-default\" data-id=\"8da8e4f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-18d9547\" data-id=\"18d9547\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0487650 elementor-widget__width-initial elementor-widget elementor-widget-qi_addons_for_elementor_section_title\" data-id=\"0487650\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"qi_addons_for_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"qodef-shortcode qodef-m  qodef-qi-section-title  qodef-decoration--italic  qodef-link--underline-draw qodef-subtitle-icon--left\">\n\t\t\t\t\t\t<h2 class=\"qodef-m-title\">\n\t\tSOLID - zasada otwarte-zamkni\u0119te\t<\/h2>\n\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cbfcd17 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cbfcd17\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6bfc849\" data-id=\"6bfc849\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e8b7315 elementor-widget elementor-widget-text-editor\" data-id=\"e8b7315\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Zasada, w kt\u00f3rej nagrod\u0105 za jej przestrzeganie jest \u0142atwe wprowadzanie zmian i nowych funkcjonalno\u015bci do kodu bez nara\u017canie si\u0119 na b\u0142\u0119dy, niezgodno\u015bci i utrat\u0119 stabilno\u015bci.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-45b3dbb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"45b3dbb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-81c3a6c\" data-id=\"81c3a6c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8b94117 elementor-widget elementor-widget-text-editor\" data-id=\"8b94117\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=695\"><strong>S <\/strong>&#8211; Zasada pojedynczej odpowiedzialno\u015bci (Single Responsibility Principle &#8211; SRP)<\/a><\/p><p><strong>O<\/strong> <strong>&#8211; Zasada otwarte-zamkni\u0119te (Open-Close Principle &#8211; OCP)<\/strong><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=724\"><strong>L<\/strong> &#8211; Zasada podstawiania Liskov (Liskov Substitution Principle &#8211; LSP)<\/a><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=735\"><strong>I<\/strong> &#8211; Zasada segregacji interfejsu (Interface Segregation Principle &#8211; ISP)<\/a><\/p><p><a href=\"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/?p=749\"><strong>D<\/strong> &#8211; Zasada odwr\u00f3cenia zale\u017cno\u015bci (Dependency Inversion Principle &#8211; DIP)<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c8d3230 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c8d3230\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8f6f050\" data-id=\"8f6f050\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7e25a34 elementor-widget elementor-widget-heading\" data-id=\"7e25a34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Definicja<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-458de65 elementor-widget elementor-widget-text-editor\" data-id=\"458de65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Oprogramowanie powinno by\u0107 otwarte na rozszerzenia, ale zamkni\u0119te na modyfikacje.<\/p><p>Oznacza to, \u017ce dodaj\u0105c nowe funkcjonalno\u015bci nie powinni\u015bmy zmienia\u0107 istniej\u0105cych klas i metod, ale doda\u0107 nowy kod. Mo\u017cna to osi\u0105gn\u0105\u0107 za pomoc\u0105 dziedziczenia, polimorfizmu lub kompozycji.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-230b781 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"230b781\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-27d7b49\" data-id=\"27d7b49\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5f2b0f3 elementor-widget elementor-widget-heading\" data-id=\"5f2b0f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Przyk\u0142ad<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93c6764 elementor-widget elementor-widget-text-editor\" data-id=\"93c6764\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Za przyk\u0142ad pos\u0142u\u017cy nam klasa AreaCalculator, kt\u00f3ra oblicza pole powierzchni wszystkich figur danego typu (np. protok\u0105ty) podanych przy pomocy tabeli.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f61ee27 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f61ee27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class AreaCalculator {\n    public static double CalculateRectanglesAreas(Rectangle[] rectangles){\n        double area = 0;\n        for(Rectangle rectangle: rectangles){\n            area += rectangle.getHeight() * rectangle.getWidth();\n        }\n        return area;\n    }\n    public static double CalculateCirclesAreas(Circle[] circles){\n        double area = 0;\n        for(Circle circle: circles){\n            area += circle.getRadius() * circle.getRadius() * Math.PI;\n        }\n        return area;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2e7858 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b2e7858\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Rectangle {\n    private double height;\n    private double width;\n\n    public Rectangle(int height, int width) {\n        height = height;\n        width = width;\n    }\n\n    public double getHeight() {\n        return height;\n    }\n\n    public double getWidth() {\n        return width;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bae1cee elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"bae1cee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Circle {\n    private double radius;\n\n    public Circle(double radius) {\n        this.radius = radius;\n    }\n\n    public double getRadius() {\n        return radius;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efb9295 elementor-widget elementor-widget-text-editor\" data-id=\"efb9295\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Klasa ta \u0142amie zasad\u0119 OCP, poniewa\u017c gdyby\u015bmy chcieli doda\u0107 metod\u0119 obliczaj\u0105c\u0105 pole dla tr\u00f3jk\u0105t\u00f3w musieliby\u015bmy zedytowa\u0107 t\u0105 klas\u0119 przez co naraziliby\u015bmy j\u0105 na wyst\u0105pienie b\u0142\u0119d\u00f3w. Dodatkowo rozbudowuj\u0105c t\u0105 klas\u0119 sprawimy, \u017ce kod stanie si\u0119 w ko\u0144cu zbyt skomplikowany, trudny do testowania i \u0142atwo b\u0119dzie wywo\u0142a\u0107 w nim b\u0142\u0105d.<\/p><p>Aby naprawi\u0107 ten b\u0142\u0105d stworzymy interfejs o nazwie Shape do kt\u00f3rej przeniesiemy obliczanie pola powierzchni kszta\u0142tu i zaimplementujemy go w klasach, kt\u00f3re s\u0105 kszta\u0142tami. Zmodyfikuj\u0119 te\u017c klas\u0119 AreaCalculator<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cab876b elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"cab876b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public interface Shape {\n    public double calculateArea();\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f262f60 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f262f60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Rectangle implements Shape {\n    private double height;\n    private double width;\n\n    public Rectangle(int height, int width) {\n        this.height = height;\n        this.width = width;\n    }\n\n    public double getHeight() {\n        return height;\n    }\n\n    public double getWidth() {\n        return width;\n    }\n\n    @Override\n    public double calculateArea() {\n        return height * width;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7f13ff elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b7f13ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class Circle implements Shape{\n    private double radius;\n\n    public Circle(double radius) {\n        this.radius = radius;\n    }\n\n    public double getRadius() {\n        return radius;\n    }\n\n    @Override\n    public double calculateArea() {\n        return radius * radius * Math.PI;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38a5f44 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"38a5f44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-java'>public class AreaCalculator {\n    public static double CalculateAreas(Shape[] shapes){\n        double area = 0;\n        for(Shape shape: shapes){\n            area += shape.calculateArea();\n        }\n        return area;\n    }\n} <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-653e720 elementor-widget elementor-widget-text-editor\" data-id=\"653e720\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Teraz klasa AreaCalculator jest otwarta na rozszerzenia, np. dodanie nowego kszta\u0142tu. Wystarczy doda\u0107 now\u0105 klas\u0119, kt\u00f3ra b\u0119dzie implementowa\u0107 Shape i nadpisze metod\u0119 calculateArea. Dodatkowo nie b\u0119dziemy musiali zmienia\u0107 nic w dotychczasowym kodzie, kt\u00f3ry sta\u0142 si\u0119 bardziej czytelny i \u0142atwiejszy do testowania<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Jest to druga zasada wchodz\u0105ca w sk\u0142ad akronimu SOLID. Co ona oznacza?<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,33],"tags":[35,38,36],"class_list":["post-704","post","type-post","status-publish","format-standard","hentry","category-artykuly","category-czysty-kod","tag-java","tag-ocp","tag-solid"],"_links":{"self":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=704"}],"version-history":[{"count":16,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/704\/revisions"}],"predecessor-version":[{"id":905,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/704\/revisions\/905"}],"wp:attachment":[{"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/klaudia-bernat.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}