{"id":854,"date":"2023-03-20T20:56:54","date_gmt":"2023-03-20T19:56:54","guid":{"rendered":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/?p=854"},"modified":"2023-03-20T20:56:54","modified_gmt":"2023-03-20T19:56:54","slug":"s-o-l-i-d-5-dependency-inversion-principle-dip","status":"publish","type":"post","link":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/2023\/03\/20\/s-o-l-i-d-5-dependency-inversion-principle-dip\/","title":{"rendered":"S.O.L.I.D. 5 &#8211; Dependency Inversion Principle (DIP)"},"content":{"rendered":"\n<p><span style=\"text-decoration: underline;\">Dependency Inversion Principle (DIP) <\/span>\u2013 zasada odwr\u00f3cenia zale\u017cno\u015bci brzmi nast\u0119puj\u0105co:<\/p>\n\n\n\n<p><strong>Wysokopoziomowe modu\u0142y nie powinny zale\u017ce\u0107 od modu\u0142\u00f3w niskopoziomowych &#8211; zale\u017cno\u015bci mi\u0119dzy nimi powinny wynika\u0107 z\u00a0<a href=\"https:\/\/pl.wikipedia.org\/wiki\/Abstrakcja_(programowanie)\">abstrakcji<\/a>.<\/strong><\/p>\n\n\n\n<p>Ta zasada m\u00f3wi, \u017ce klasy nie powinny by\u0107 od siebie zale\u017cne. Podczas tworzenia aplikacji nale\u017cy pos\u0142ugiwa\u0107 si\u0119 interfejsami, a nie implementacjami (czyli klasy powinny by\u0107 zale\u017cne od abstrakcji). Klasy zawieraj\u0105ce logik\u0119 biznesow\u0105 (wysokopoziomowe modu\u0142y) nie powinny by\u0107 zale\u017cne od klas niskopoziomowych.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Przyk\u0142ad:<\/span> W ustawieniach drukarki mo\u017cemy wybra\u0107 opcj\u0119 drukowania w kolorze lub czarno-bia\u0142o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Printer {\r\n    private ColorPrint colorPrint;\r\n    private BlackPrint blackPrint;\r\n\r\n    public Printer(ColorPrint colorPrint, BlackPrint blackPrint) {\r\n        this.colorPrint = colorPrint;\r\n        this.blackPrint = blackPrint;\r\n    }\r\n\r\n    public void print(PrintType printType){\r\n        switch(printType){\r\n            case Black: blackPrint.print();\r\n                break;\r\n            case Color: colorPrint.print();\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n    }\r\n}\r\npublic enum PrintType {\r\n    Black,\r\n    Color\r\n}\r\npublic class BlackPrint {\r\n    public void print(){\r\n        System.out.println(\"black printing\");\r\n    }\r\n}\r\npublic class ColorPrint {\r\n    public void print(){\r\n        System.out.println(\"color printing\");\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p>W tym przypadku klasa Printer jest uzale\u017cniona od klas ni\u017cszego poziomu \u2013 BlackPrint i ColorPrint. Aby nie \u0142ama\u0107 zasady DIP nale\u017cy oprze\u0107 dzia\u0142anie tych klas na wsp\u00f3lnym interfejsie, do kt\u00f3rego obiektu b\u0119dziemy odwo\u0142ywa\u0107 si\u0119 w klasie Printer. Obiekt klas BlackPrint lub ColorPrint b\u0119dzie \u201ewstrzykiwany\u201d do klasy Printer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class PrinterDIP {\r\n\r\n   private IPrint print;\r\n\r\n    public PrinterDIP(IPrint print) {\r\n        this.print = print;\r\n    }\r\n\r\n    public void print(){\r\n        print.print();\r\n    }\r\n}\r\npublic interface IPrint {\r\n    void print();\r\n}\r\npublic class BlackPrint implements IPrint{\r\n    @Override\r\n    public void print() {\r\n        System.out.println(\"black printing\");\r\n    }\r\n}\r\npublic class ColorPrint implements IPrint{\r\n    @Override\r\n    public void print() {\r\n        System.out.println(\"color printing\");\r\n    }\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Dependency Inversion Principle (DIP) \u2013 zasada odwr\u00f3cenia zale\u017cno\u015bci brzmi nast\u0119puj\u0105co: Wysokopoziomowe modu\u0142y nie powinny zale\u017ce\u0107 od modu\u0142\u00f3w niskopoziomowych &#8211; zale\u017cno\u015bci mi\u0119dzy nimi powinny wynika\u0107 z\u00a0abstrakcji. Ta zasada m\u00f3wi, \u017ce klasy nie powinny by\u0107 od siebie zale\u017cne. Podczas tworzenia aplikacji nale\u017cy pos\u0142ugiwa\u0107 si\u0119 interfejsami, a nie implementacjami (czyli klasy powinny by\u0107 zale\u017cne od abstrakcji). Klasy zawieraj\u0105ce &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/2023\/03\/20\/s-o-l-i-d-5-dependency-inversion-principle-dip\/\"> <span class=\"screen-reader-text\">S.O.L.I.D. 5 &#8211; Dependency Inversion Principle (DIP)<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[14],"tags":[],"class_list":["post-854","post","type-post","status-publish","format-standard","hentry","category-solid"],"_links":{"self":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/comments?post=854"}],"version-history":[{"count":1,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/854\/revisions"}],"predecessor-version":[{"id":855,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/854\/revisions\/855"}],"wp:attachment":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/categories?post=854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/tags?post=854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}