﻿
{"id":4311,"date":"2016-05-06T15:16:45","date_gmt":"2016-05-06T15:16:45","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4311"},"modified":"2016-05-06T15:16:45","modified_gmt":"2016-05-06T15:16:45","slug":"bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip\/","title":{"rendered":"Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n Ters \u00c7evrilmesi Prensibi(Dependency Inversion Principle &#8211; DIP)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip\/\" rel=\"attachment wp-att-4313\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-4313 size-medium\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-300x300.jpg\" alt=\"Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n Ters \u00c7evrilmesi Prensibi(Dependency Inversion Principle - DIP)\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-300x300.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-150x150.jpg 150w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-160x160.jpg 160w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-320x320.jpg 320w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP.jpg 350w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Merhaba,<\/p>\n<p>\u00d6nceki yaz\u0131lar\u0131mda\u00a0<em><strong>SO<\/strong><strong>L<\/strong><strong>I<\/strong><\/em>D prensiplerinden <em><strong>S<\/strong><\/em>&#8211;<a href=\"http:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/\" target=\"_blank\">Tek Sorumluluk Prensibi(Single Responsibility Principle \u2013 SRP)<\/a>\u2018ni,\u00a0<em><strong>O<\/strong><\/em>&#8211;<a href=\"http:\/\/www.gencayyildiz.com\/blog\/acik-kapali-prensibiopen-closed-principle-ocp\/\" target=\"_blank\">A\u00e7\u0131k Kapal\u0131 Prensibi(Open Closed Principle \u2013 OCP)<\/a>,\u00a0<em><strong>L-<\/strong><\/em><a href=\"http:\/\/www.gencayyildiz.com\/blog\/liskovun-yerine-gecme-prensibiliskov-substitution-principle-lsp\/\" target=\"_blank\">Liskov&#8217;un Yerine Ge\u00e7me Prensibi(Liskov Substitution Principle &#8211; LSP)<\/a>\u00a0ve <em><strong>I<\/strong><\/em>&#8211;<a href=\"http:\/\/www.gencayyildiz.com\/blog\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/\" target=\"_blank\">Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle \u2013 ISP)<\/a>\u00a0incelemi\u015ftik. Bu i\u00e7eri\u011fimizde ise s\u0131radaki ve sonuncu olan\u00a0D<em><strong>\u00a0<\/strong><\/em>harfine denk gelen Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n Ters \u00c7evrilmesi Prensibi(Dependency Inversion Principle &#8211; DIP) ele alaca\u011f\u0131z.<\/p>\n<blockquote><p><em><strong>Dependency Inversion prensibine g\u00f6re yazd\u0131\u011f\u0131m\u0131z program soyutlama \u00fczerine dayand\u0131r\u0131lmal\u0131d\u0131r, kat\u0131la\u015ft\u0131rma \u00fczerine de\u011fil.<\/strong><\/em><\/p><\/blockquote>\n<p>\u0130\u00e7eri\u011fimize b\u00f6yle bir giri\u015f yapmay\u0131 uygun g\u00f6rd\u00fcm. Bunun sebebi, tasarlad\u0131\u011f\u0131m\u0131z kodun ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 implementation(uygulama) Class&#8217;lara de\u011fil, Interface&#8217;lere olmas\u0131 gerekti\u011fini makalemizin ba\u015f\u0131nda vurgulamakt\u0131r.<\/p>\n<p>Daha a\u00e7\u0131k bir \u015fekilde ifade etmek gerekirse, \u00fcst seviye s\u0131n\u0131flar alt seviye s\u0131n\u0131f implementasyonlar\u0131n\u0131 de\u011fil Interface uygulamalar\u0131n\u0131 kullanmal\u0131d\u0131rlar.<\/p>\n<p><em><strong>Neden mi?<\/strong><\/em><br \/>\n\u00dcst seviyeli i\u015flem yapan s\u0131n\u0131flar<em>(High Level Class &#8211; Y\u00fcksek Dereceli S\u0131n\u0131f)<\/em>, alt seviyeli i\u015flem yapan s\u0131n\u0131flara<em>(Low Level Class &#8211; D\u00fc\u015f\u00fck Dereceli S\u0131n\u0131f)<\/em> ba\u011f\u0131ml\u0131 olmaktad\u0131rlar. Bir ba\u015fka a\u00e7\u0131dan bakarsak, \u00fcst seviyeli i\u015flem yapan metodlar, alt seviyeli i\u015flem yapan metodlar\u0131 kullanmaktad\u0131rlar. Haliyle alt seviye metodlarda olas\u0131 her de\u011fi\u015fiklik \u00fcst seviye metodlarda de\u011fi\u015fikli\u011fe sebep olmas\u0131 \u00fcst seviyenin alt seviyeye ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Haliyle DIP bize bu ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n ters \u00e7evrilmesini prensip edinmemizi \u00f6nermektedir.<\/p>\n<p>A\u015fa\u011f\u0131da \u00f6rnek bir ba\u011f\u0131ml\u0131l\u0131k senaryosu payla\u015f\u0131lmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Imalat\r\n    {\r\n        \/\/High Level Class\r\n        public void Olustur()\r\n        {\r\n            Kek kek = new Kek();\r\n            kek.KekYap(true);\r\n        }\r\n    }\r\n\r\n    class Kek\r\n    {\r\n        \/\/Low Level Class\r\n        public void KekYap(bool Kakao)\r\n        {\r\n            \/\/Process\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki &#8220;Imalat&#8221; s\u0131n\u0131f\u0131 i\u00e7erisindeki &#8220;Olustur&#8221; metodu, &#8220;Kek&#8221; s\u0131n\u0131f\u0131 i\u00e7erisindeki &#8220;KekYap&#8221; isimli metoda ba\u011f\u0131ml\u0131d\u0131r. Bunun sebebi &#8220;KekYap&#8221;&#8216;\u0131n &#8220;Olustur&#8221; i\u00e7erisinde kullan\u0131lmas\u0131d\u0131r. \u0130lgili metotda yap\u0131lacak t\u00fcm de\u011fi\u015fiklikler &#8220;Olustur&#8221; i\u00e7erisinde de de\u011fi\u015fiklik gerektirecektir.<\/p>\n<p>Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 a\u015fa\u011f\u0131daki diyagramdan da net bir \u015fekilde g\u00f6rebilmekteyiz.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip-2\/\" rel=\"attachment wp-att-4325\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-1.jpg\" alt=\"Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n Ters \u00c7evrilmesi Prensibi(Dependency Inversion Principle - DIP)\" width=\"201\" height=\"296\" class=\"aligncenter size-full wp-image-4325\" \/><\/a><\/p>\n<p>Nesne tabanl\u0131 yakla\u015f\u0131mlarda bu tarz ba\u011f\u0131ml\u0131l\u0131klar soyutlama kullan\u0131larak minimize edilebilmektedirler.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IGida\r\n    {\r\n        void Yap(bool Kakao);\r\n    }\r\n\r\n    class Imalat\r\n    {\r\n        \/\/High Level Class\r\n        IGida gida;\r\n        public Imalat()\r\n        {\r\n            gida = new Kek();\r\n        }\r\n        public void Olustur()\r\n        {\r\n            gida.Yap(true);\r\n        }\r\n    }\r\n\r\n    class Kek : IGida\r\n    {\r\n        \/\/Low Level Method\r\n        public void Yap(bool Kakao)\r\n        {\r\n            \/\/Process\r\n        }\r\n    }\r\n<\/pre>\n<p>Yapt\u0131\u011f\u0131m\u0131z bu i\u015flemi a\u015fa\u011f\u0131daki diyagramda ele alal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip\/bagimliligin-ters-cevrilmesi-prensibidependency-inversion-principle-dip-3\/\" rel=\"attachment wp-att-4327\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-2.jpg\" alt=\"Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n Ters \u00c7evrilmesi Prensibi(Dependency Inversion Principle - DIP)\" width=\"408\" height=\"372\" class=\"aligncenter size-full wp-image-4327\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-2.jpg 408w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n-Ters-\u00c7evrilmesi-PrensibiDependency-Inversion-Principle-DIP-2-300x274.jpg 300w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/a><br \/>\nDikkat ederseniz yapt\u0131\u011f\u0131m\u0131z i\u015flem neticesinde alt seviye s\u0131n\u0131f\u0131m\u0131z\u0131 Interface sayesinde soyutla\u015ft\u0131rarak, \u00fcst seviye s\u0131n\u0131f\u0131m\u0131zda alt seviye s\u0131n\u0131f\u0131na dair olan ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 tersine \u00e7evirmi\u015f bulunmaktay\u0131z. Yani g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi alt seviye s\u0131n\u0131f\u0131m\u0131z, Interface&#8217;e ba\u011f\u0131ml\u0131 bir hale gelmi\u015ftir. Ee ilgili Interface&#8217;de \u00fcst seviye s\u0131n\u0131f taraf\u0131ndan refere edildi\u011finden dolayl\u0131 yoldan ba\u011f\u0131ml\u0131l\u0131k alt seviyeden \u00fcst seviyeye do\u011fru olmu\u015ftur diyebiliriz.<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, \u00d6nceki yaz\u0131lar\u0131mda\u00a0SOLID prensiplerinden S&#8211;Tek Sorumluluk Prensibi(Single Responsibility Principle \u2013 SRP)\u2018ni,\u00a0O&#8211;A\u00e7\u0131k Kapal\u0131 Prensibi(Open Closed Principle \u2013 OCP),\u00a0L-Liskov&#8217;un Yerine Ge\u00e7me Prensibi(Liskov Substitution Principle &#8211; LSP)\u00a0ve I&#8211;Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle \u2013 ISP)\u00a0incelemi\u015ftik. Bu i\u00e7eri\u011fimizde ise&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":4313,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1154],"tags":[1189,1190,1160,1191,1193,1187,1188,1192],"class_list":["post-4311","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-principles","tag-bagimliligin-ters-cevrilmesi-prensibi","tag-dependency-inversion-principle","tag-design-principles","tag-dip","tag-dusuk-dereceli-sinif","tag-high-level-class","tag-low-level-class","tag-yuksek-dereceli-sinif"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=4311"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4311\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/4313"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}