﻿
{"id":4291,"date":"2016-05-05T15:10:06","date_gmt":"2016-05-05T15:10:06","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4291"},"modified":"2016-05-05T15:10:06","modified_gmt":"2016-05-05T15:10:06","slug":"arayuz-ayrim-prensibiinterface-segregation-principle-isp","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/","title":{"rendered":"Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle &#8211; ISP)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/\" rel=\"attachment wp-att-4293\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-4293 size-medium\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-300x197.jpg\" alt=\"Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle - ISP)\" width=\"300\" height=\"197\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-300x197.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP.jpg 566w\" 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><\/em>ID 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>\u00a0ve\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> incelemi\u015ftik. Bu i\u00e7eri\u011fimizde ise s\u0131radaki <em><strong>I <\/strong><\/em>harfine denk gelen\u00a0Aray\u00fcz Ayr\u0131m Prensibini(Interface Segregation Principle &#8211; ISP) ele alaca\u011f\u0131z.<\/p>\n<p>Biliyoruz ki, Interface&#8217;ler s\u0131n\u0131flar\u0131n anla\u015fmalar\u0131d\u0131r. Haliyle bir s\u0131n\u0131f\u0131n implement etti\u011fi bir Interface zorunlu \u015fekilde ilgili s\u0131n\u0131fa uygulanmaktad\u0131r. Hal b\u00f6yleyken s\u00f6z konusu Interface yetersiz ya da fazla geliyorsa, o s\u0131n\u0131f\u0131 da\u011f\u0131tmak yerine yeni bir Interface olu\u015fturmak daha makbuld\u00fcr. \u0130\u015fte, ISP&#8217;nin de ortaya koydu\u011fu mant\u0131k budur.<\/p>\n<p>Bu mant\u0131kla yola \u00e7\u0131karak ISP&#8217;nin, hemen hemen her farkl\u0131 yetenek i\u00e7in farkl\u0131 bir aray\u00fcz tan\u0131mlamas\u0131n\u0131 \u00f6nerdi\u011fini s\u00f6yleyebiliriz.<\/p>\n<p>Bir yandan soyutlama maksatl\u0131 kullanaca\u011f\u0131m\u0131z Interface yap\u0131s\u0131 i\u00e7erisinde her t\u00fcrl\u00fc metodu ve i\u015flemi bar\u0131nd\u0131rmam\u0131z, o Interface&#8217;i implement eden baz\u0131 s\u0131n\u0131flarda uygulanan elemanlar\u0131n kimileri Dummy Code(Sahte Kod) dedi\u011fimiz bir vaziyette niteliksiz yer i\u015fgal edeceklerdir. Yani ISP, bir s\u0131n\u0131fa hi\u00e7 gere\u011fi yokken filanca metodlar\u0131 ve i\u015flevleri implemente etmenin \u00f6n\u00fcne ge\u00e7ecek bir prensiptir.<\/p>\n<p>Tabi ki de \u00e7o\u011fu konuda oldu\u011fu gibi bu konuda da \u00f6rnek bir senaryo \u00fczerinden mevzuyu ele alaca\u011f\u0131z. Haliyle benim \u00f6rneklendirmem ordu \u00fczerine bir senaryodan ibaret olacakt\u0131r. D\u00fc\u015f\u00fcnelim ki, elimizde birden fazla tank\u0131m\u0131z olsun. Ve bu tanklar\u0131n \u00f6zelliklerini bar\u0131nd\u0131racak bir Interface&#8217;imiz olsun.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/arayuz-ayrim-prensibiinterface-segregation-principle-isp-2\/\" rel=\"attachment wp-att-4299\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-1.jpg\" alt=\"Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle - ISP)\" width=\"518\" height=\"328\" class=\"aligncenter size-full wp-image-4299\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-1.jpg 518w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-1-300x190.jpg 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/a><br \/>\nEvet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi tek bir Interface ile elimizdeki tanklar\u0131n \u00f6zelliklerini \u015fablonize ettik. Lakin, &#8220;Tank2&#8221; isimli tank\u0131m\u0131z\u0131n ate\u015f etme \u00f6zelli\u011finin olmad\u0131\u011f\u0131n\u0131 ve &#8220;Tank3&#8221; isimli tank\u0131m\u0131z\u0131n ise d\u00fc\u015fman ile mesafe \u00f6l\u00e7me yetene\u011fi olmad\u0131\u011f\u0131n\u0131 varsayarsak bundan dolay\u0131 &#8220;Tank2&#8221; i\u00e7in &#8220;AtesEt&#8221; ve &#8220;Tank3&#8221; i\u00e7in &#8220;DusmanIleMesafeOlc&#8221; isimli metodlar i\u015flevsiz kalacakt\u0131r.<\/p>\n<p>Al\u0131n size Dummy Code(Sahte Kod) durumu.<\/p>\n<p>\u0130\u015fte b\u00f6yle bir durumda ilgili metodlar\u0131 farkl\u0131 Interface&#8217;lere alarak daha do\u011frusu &#8216;aray\u00fczleri ay\u0131rarak&#8217; bu soruna \u00e7\u00f6z\u00fcm bulabiliriz.<\/p>\n<p>Tabi \u00f6ncelikle yukar\u0131daki Class Diyagram\u0131n\u0131n kodlar\u0131n\u0131 a\u015fa\u011f\u0131da payla\u015farak durumu i\u00e7erikten daha net anlaman\u0131z\u0131 sa\u011flayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n        }\r\n    }\r\n    interface ITank\r\n    {\r\n        bool AtesEt();\r\n        bool HareketEt();\r\n        double DusmanIleMesafeOlc();\r\n    }\r\n    class Tank1 : ITank\r\n    {\r\n        public bool AtesEt() =&gt; true;\r\n        public double DusmanIleMesafeOlc()\r\n        {\r\n            \/\/Mesafa \u00f6l\u00e7me i\u015flemleri\r\n            return 100;\r\n        }\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n    class Tank2 : ITank\r\n    {\r\n        public bool AtesEt()\r\n        {\r\n            \/\/Tank2'nin ate\u015f etme \u00f6zelli\u011fi yoktur!\r\n            return false;\r\n        }\r\n        public double DusmanIleMesafeOlc()\r\n        {\r\n            \/\/Mesafa \u00f6l\u00e7me i\u015flemleri\r\n            return 230;\r\n        }\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n    class Tank3 : ITank\r\n    {\r\n        public bool AtesEt() =&gt; true;\r\n        public double DusmanIleMesafeOlc()\r\n        {\r\n            \/\/Tank3'\u00fcn mesafa \u00f6l\u00e7me \u00f6zelli\u011fi yoktur!\r\n            return -1;\r\n        }\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n<\/pre>\n<p>\u015eimdi tasar\u0131m\u0131m\u0131z\u0131 ISP&#8217;ye dikkat ederek yeniden \u015fekillendirelim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/arayuz-ayrim-prensibiinterface-segregation-principle-isp\/arayuz-ayrim-prensibiinterface-segregation-principle-isp-3\/\" rel=\"attachment wp-att-4305\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-2.jpg\" alt=\"Aray\u00fcz Ayr\u0131m Prensibi(Interface Segregation Principle - ISP)\" width=\"511\" height=\"446\" class=\"aligncenter size-full wp-image-4305\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-2.jpg 511w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/Aray\u00fcz-Ayr\u0131m-PrensibiInterface-Segregation-Principle-ISP-2-300x262.jpg 300w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/a><br \/>\nAsl\u0131nda bu Class Diyagram her\u015feyi \u00f6zetlemektedir. Genede biz ne olup bitti\u011fini a\u00e7\u0131k\u00e7a metine d\u00f6kelim.<\/p>\n<p>Birbirlerinden ba\u011f\u0131ms\u0131z birden fazla yetene\u011fi tek bir Interface&#8217;de tutmak yerine, her yetenek farkl\u0131 bir Interface yap\u0131s\u0131nda tutulmakta ve ihtiyac do\u011frultusunda ilgili s\u0131n\u0131fa ilgili aray\u00fczler uygulanmaktad\u0131r. Bu sayede l\u00fczumsuz metod ve i\u015flev uygulamas\u0131 yap\u0131lmamakta ve ilgili Derived Class&#8217;lar\u0131m\u0131z\u0131n nitelikleri neyse i\u00e7erikleride birebir ayn\u0131 olmaktad\u0131r.<\/p>\n<p>\u0130\u015fte Aray\u00fcz Ayr\u0131m olarak nitelendirilen bu faydal\u0131 ve olduk\u00e7a kullan\u0131\u015fl\u0131 manevra bo\u015funa prensip edinilmemi\u015ftir.<\/p>\n<p>Tasar\u0131m\u0131m\u0131z\u0131n son durumunu kod olarak a\u015fa\u011f\u0131da payla\u015fal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ITankAtesEt\r\n    {\r\n        bool AtesEt();\r\n    }\r\n    interface ITankMesafeOlc\r\n    {\r\n        double DusmanIleMesafeOlc();\r\n    }\r\n    interface ITankHareketEt\r\n    {\r\n        bool HareketEt();\r\n    }\r\n    interface ITank : ITankMesafeOlc, ITankHareketEt, ITankAtesEt\r\n    {\r\n    }\r\n    class Tank1 : ITank\r\n    {\r\n        public bool AtesEt() =&gt; true;\r\n        public double DusmanIleMesafeOlc()\r\n        {\r\n            \/\/Mesafa \u00f6l\u00e7me i\u015flemleri\r\n            return 100;\r\n        }\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n    class Tank2 : ITankHareketEt, ITankMesafeOlc\r\n    {\r\n        public double DusmanIleMesafeOlc()\r\n        {\r\n            \/\/Mesafa \u00f6l\u00e7me i\u015flemleri\r\n            return 230;\r\n        }\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n    class Tank3 : ITankAtesEt, ITankHareketEt\r\n    {\r\n        public bool AtesEt() =&gt; true;\r\n        public bool HareketEt() =&gt; true;\r\n    }\r\n<\/pre>\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)\u00a0ve\u00a0L-Liskov&#8217;un Yerine Ge\u00e7me Prensibi(Liskov Substitution Principle &#8211; LSP) incelemi\u015ftik. Bu i\u00e7eri\u011fimizde ise s\u0131radaki I harfine denk gelen\u00a0Aray\u00fcz Ayr\u0131m&#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":4293,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1154],"tags":[1183,1160,1171,1184,1185,1186],"class_list":["post-4291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-principles","tag-arayuz-ayrim-prensibi","tag-design-principles","tag-dummy-code","tag-interface-segregation-principle","tag-isp","tag-sahte-kod"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4291","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=4291"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/4293"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}