{"id":817,"date":"2022-02-22T21:28:19","date_gmt":"2022-02-22T20:28:19","guid":{"rendered":"https:\/\/wojciechsiwek.pl\/?p=817"},"modified":"2025-02-02T11:13:08","modified_gmt":"2025-02-02T10:13:08","slug":"zasada-odwrocenia-zaleznosci","status":"publish","type":"post","link":"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/","title":{"rendered":"Dependency inversion principle"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis Tre\u015bci<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a8d7b69bbe41\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a8d7b69bbe41\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/#Szybka_definicja\" >Short definition<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/#Krotki_przyklad\" >Some example<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"szybka-definicja\"><span class=\"ez-toc-section\" id=\"Szybka_definicja\"><\/span>Short definition<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The last principle resulting from the SOLID acronym is the title Dependency Inversion Principle. This rule is:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote\"><blockquote><p>The principle of inversion of dependency assumes that high-level modules should not depend on low-level modules, but on abstraction.<\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To quickly understand what is going on here, let's use an example.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotki-przyklad\"><span class=\"ez-toc-section\" id=\"Krotki_przyklad\"><\/span>Some example<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We will create our high-level module, which will be the Computer class. The computers we use every day have some pointing devices. These can be mice, touchpads and probably a few more. Their goal is to control the operation of the computer, so simplified our classes will look like this:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">public class Computer {\n    private Mouse mouse;\n\n    public Computer(Mouse mouse) {\n        this.mouse = mouse;\n    }\n\n    public void enterTheFolder(){\n        mouse.makeDoubleClick();\n    }\n}<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">public class Mouse {\n    void makeDoubleClick() {\n        \/\/do something\n    }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Note that in the example above, our Computer class, which is a high-level module, depends on the Mouse class, which is a low-level module. To avoid this dependency, we will introduce the Pointer interface owned by the Computer class. Then the code will look like this:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">public class Computer {\n    private Pointer pointer;\n\n    public Computer(Pointer mouse) {\n        this.pointer = mouse;\n    }\n\n    public void enterTheFolder() {\n        pointer.makeDoubleClick();\n    }\n}<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">public interface Pointer {\n    public void makeDoubleClick();\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">public class Mouse implements Pointer {\n    @Override\n    public void makeDoubleClick() {\n        \/\/do something\n    }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">And this is how our high level module is no longer dependent on the low level module. Now we can create a new class that implements the Pointer interface and pass it in the constructor of the Computer class without any problems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph translation-block\">If you haven't looked at my other SOLID posts yet, please click <a href=\"https:\/\/wojciechsiwek.pl\/en\/tag\/solid\/\" target=\"_self\"> here <\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>The last article in a series of entries about SOLID in object-oriented programming. This time we will look at the principle of dependency reversal.s<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[26],"tags":[25,23,77],"class_list":["post-817","post","type-post","status-publish","format-standard","hentry","category-programowanie","tag-java","tag-programowanie","tag-solid"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek<\/title>\n<meta name=\"description\" content=\"Ostatni artyku\u0142 z cyklu wpis\u00f3w o SOLID w programowaniu obiektowym. Tym razem przyjrzymy si\u0119 zasadzie odwr\u00f3cenia zale\u017cno\u015bci.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek\" \/>\n<meta property=\"og:description\" content=\"Ostatni artyku\u0142 z cyklu wpis\u00f3w o SOLID w programowaniu obiektowym. Tym razem przyjrzymy si\u0119 zasadzie odwr\u00f3cenia zale\u017cno\u015bci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/\" \/>\n<meta property=\"og:site_name\" content=\"Wojciech Siwek\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-22T20:28:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-02T10:13:08+00:00\" \/>\n<meta name=\"author\" content=\"Wojciech Siwek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wojciech Siwek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/\"},\"author\":{\"name\":\"Wojciech Siwek\",\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#\\\/schema\\\/person\\\/eb4246ee83fb20ed02fc723e28258677\"},\"headline\":\"Zasada odwr\u00f3cenia zale\u017cno\u015bci\",\"datePublished\":\"2022-02-22T20:28:19+00:00\",\"dateModified\":\"2025-02-02T10:13:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/\"},\"wordCount\":237,\"publisher\":{\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#\\\/schema\\\/person\\\/eb4246ee83fb20ed02fc723e28258677\"},\"keywords\":[\"java\",\"programowanie\",\"SOLID\"],\"articleSection\":[\"Programowanie\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/\",\"url\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/\",\"name\":\"Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#website\"},\"datePublished\":\"2022-02-22T20:28:19+00:00\",\"dateModified\":\"2025-02-02T10:13:08+00:00\",\"description\":\"Ostatni artyku\u0142 z cyklu wpis\u00f3w o SOLID w programowaniu obiektowym. Tym razem przyjrzymy si\u0119 zasadzie odwr\u00f3cenia zale\u017cno\u015bci.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/zasada-odwrocenia-zaleznosci\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/wojciechsiwek.pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zasada odwr\u00f3cenia zale\u017cno\u015bci\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#website\",\"url\":\"http:\\\/\\\/wojciechsiwek.pl\\\/\",\"name\":\"Wojciech Siwek\",\"description\":\"Programista na pocz\u0105tku swojej \u015bcie\u017cki w IT\",\"publisher\":{\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#\\\/schema\\\/person\\\/eb4246ee83fb20ed02fc723e28258677\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\\\/\\\/wojciechsiwek.pl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\\\/\\\/wojciechsiwek.pl\\\/#\\\/schema\\\/person\\\/eb4246ee83fb20ed02fc723e28258677\",\"name\":\"Wojciech Siwek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/cropped-logo.png\",\"url\":\"https:\\\/\\\/wojciechsiwek.pl\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/cropped-logo.png\",\"contentUrl\":\"https:\\\/\\\/wojciechsiwek.pl\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/cropped-logo.png\",\"width\":313,\"height\":306,\"caption\":\"Wojciech Siwek\"},\"logo\":{\"@id\":\"https:\\\/\\\/wojciechsiwek.pl\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/cropped-logo.png\"},\"sameAs\":[\"https:\\\/\\\/wojciechsiwek.pl\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek","description":"The last article in a series of entries about SOLID in object-oriented programming. This time we will look at the principle of dependency reversal.s","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:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/","og_locale":"en_GB","og_type":"article","og_title":"Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek","og_description":"Ostatni artyku\u0142 z cyklu wpis\u00f3w o SOLID w programowaniu obiektowym. Tym razem przyjrzymy si\u0119 zasadzie odwr\u00f3cenia zale\u017cno\u015bci.","og_url":"https:\/\/wojciechsiwek.pl\/en\/zasada-odwrocenia-zaleznosci\/","og_site_name":"Wojciech Siwek","article_published_time":"2022-02-22T20:28:19+00:00","article_modified_time":"2025-02-02T10:13:08+00:00","author":"Wojciech Siwek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wojciech Siwek","Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/#article","isPartOf":{"@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/"},"author":{"name":"Wojciech Siwek","@id":"http:\/\/wojciechsiwek.pl\/#\/schema\/person\/eb4246ee83fb20ed02fc723e28258677"},"headline":"Zasada odwr\u00f3cenia zale\u017cno\u015bci","datePublished":"2022-02-22T20:28:19+00:00","dateModified":"2025-02-02T10:13:08+00:00","mainEntityOfPage":{"@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/"},"wordCount":237,"publisher":{"@id":"http:\/\/wojciechsiwek.pl\/#\/schema\/person\/eb4246ee83fb20ed02fc723e28258677"},"keywords":["java","programowanie","SOLID"],"articleSection":["Programowanie"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/","url":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/","name":"Zasada odwr\u00f3cenia zale\u017cno\u015bci &#8211; Wojciech Siwek","isPartOf":{"@id":"http:\/\/wojciechsiwek.pl\/#website"},"datePublished":"2022-02-22T20:28:19+00:00","dateModified":"2025-02-02T10:13:08+00:00","description":"The last article in a series of entries about SOLID in object-oriented programming. This time we will look at the principle of dependency reversal.s","breadcrumb":{"@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wojciechsiwek.pl\/zasada-odwrocenia-zaleznosci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wojciechsiwek.pl\/"},{"@type":"ListItem","position":2,"name":"Zasada odwr\u00f3cenia zale\u017cno\u015bci"}]},{"@type":"WebSite","@id":"http:\/\/wojciechsiwek.pl\/#website","url":"http:\/\/wojciechsiwek.pl\/","name":"Wojciech Siwek","description":"Software developer at the beginning of his career in IT","publisher":{"@id":"http:\/\/wojciechsiwek.pl\/#\/schema\/person\/eb4246ee83fb20ed02fc723e28258677"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/wojciechsiwek.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"http:\/\/wojciechsiwek.pl\/#\/schema\/person\/eb4246ee83fb20ed02fc723e28258677","name":"Wojciech Siwek","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wojciechsiwek.pl\/wp-content\/uploads\/2021\/03\/cropped-logo.png","url":"https:\/\/wojciechsiwek.pl\/wp-content\/uploads\/2021\/03\/cropped-logo.png","contentUrl":"https:\/\/wojciechsiwek.pl\/wp-content\/uploads\/2021\/03\/cropped-logo.png","width":313,"height":306,"caption":"Wojciech Siwek"},"logo":{"@id":"https:\/\/wojciechsiwek.pl\/wp-content\/uploads\/2021\/03\/cropped-logo.png"},"sameAs":["https:\/\/wojciechsiwek.pl"]}]}},"_links":{"self":[{"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/posts\/817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/comments?post=817"}],"version-history":[{"count":4,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/posts\/817\/revisions"}],"predecessor-version":[{"id":822,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/posts\/817\/revisions\/822"}],"wp:attachment":[{"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/media?parent=817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/categories?post=817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wojciechsiwek.pl\/en\/wp-json\/wp\/v2\/tags?post=817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}