{"id":241,"date":"2014-07-14T02:42:28","date_gmt":"2014-07-13T23:42:28","guid":{"rendered":"http:\/\/blog.okanacar.com.tr\/?p=241"},"modified":"2018-04-10T23:37:55","modified_gmt":"2018-04-10T20:37:55","slug":"soyutlama-absraction","status":"publish","type":"post","link":"https:\/\/okanacar.com.tr\/blog\/?p=241","title":{"rendered":"Soyutlama (Absraction)"},"content":{"rendered":"<p>PHP5 ile birlikte s\u0131n\u0131f soyutlama \u00f6zelli\u011fi de eklenmi\u015f oldu. S\u0131n\u0131flarda soyutlama ile ne denmek istedi\u011fini a\u00e7\u0131klayal\u0131m. Soyutlanm\u0131\u015f s\u0131n\u0131flar i\u00e7erisinde yer alan soyut metotlar var ise, bu soyut s\u0131n\u0131ftan t\u00fcreyen s\u0131n\u0131flarda da ayn\u0131 isimde metotlar mutlaka tan\u0131mlanmak zorundad\u0131r. Soyut s\u0131n\u0131f olu\u015fturmak i\u00e7in s\u0131n\u0131f\u0131n ba\u015f\u0131na ve soyut s\u0131n\u0131ftan t\u00fcreyen s\u0131n\u0131flarda bulunmas\u0131n\u0131n zorunlu olmas\u0131n\u0131 istedi\u011fimiz metotlar\u0131n ba\u015f\u0131na da <code>abstract<\/code> i\u015fleci eklenir.<\/p>\n<p>Baz\u0131 soyut s\u0131n\u0131flar sadece kendisinden t\u00fcreyen s\u0131n\u0131flar\u0131n \u00f6zetlerini tutabilece\u011fi gibi (hi\u00e7bir metot i\u015flem yapmayabilir), bazende ortak olarak kullan\u0131lacak \u00f6zellik ve metotlar da tan\u0131mlanabilir.<\/p>\n<pre class=\"lang:php decode:true \" title=\"Soyutlama (Abstraction)\">&lt;?php\r\nabstract class soyut {\r\n  #t\u00fcreyen s\u0131n\u0131fta zorunlu olmas\u0131 gereken metotlar\r\n  abstract public function topla ($a, $b);\r\n  abstract public function yaz();\r\n\r\n  #t\u00fcreyen s\u0131n\u0131flarda kullan\u0131lacak ortak metot\r\n  public function ortak(){\r\n    echo 'Ortak metot kullan\u0131m\u0131';\r\n  }\r\n}\r\n\r\nclass somut extends soyut {\r\n  public function topla ($c, $d){\r\n    return $c.'+'.$d.'='.($c + $d);\r\n  }\r\n  \r\n  public function yaz(){\r\n    echo 'Soyut s\u0131n\u0131flar\u0131n kullan\u0131m\u0131.'; \r\n  }\r\n}\r\n\r\n$somut = new somut();\r\necho $somut-&gt;topla(10,20).'&lt;br\/&gt;';\r\necho $somut-&gt;yaz().'&lt;br\/&gt;';\r\necho $somut-&gt;ortak().'&lt;br\/&gt;';\r\n?&gt;<\/pre>\n<p>Yukar\u0131daki \u00f6rnekte bir \u00f6rnek verdim. \u00d6nce <code>soyut<\/code> isimli <code>abstract<\/code> \u00f6nekli <code>soyut<\/code> s\u0131n\u0131fta iki adet <code>abstract<\/code> \u00f6nekli metot tan\u0131mlad\u0131m. Bunun anlam\u0131, e\u011fer <code>soyut<\/code> isimli s\u0131n\u0131ftan bir s\u0131n\u0131f t\u00fcretilecekse, t\u00fcreyen s\u0131n\u0131fta bir iki s\u0131n\u0131f kullan\u0131ls\u0131n veya kullan\u0131lmas\u0131n mutlaka tan\u0131mlanmal\u0131d\u0131r. Soyut s\u0131n\u0131f\u0131m\u0131zda bir tane de ortak metot bulunuyor.<\/p>\n<p>\u015eimdi, <code>somut<\/code> isimli s\u0131n\u0131f\u0131 <code>soyut<\/code> isimli s\u0131n\u0131ftan t\u00fcrettik ve dikkat ederseniz zorunlu metotlar\u0131 tan\u0131mlad\u0131m. E\u011fer <code>somut<\/code> s\u0131n\u0131f\u0131nda yer alan yaz veya topla metodundan herhangi birini tan\u0131mlamam\u0131\u015f olsayd\u0131k, Fatal Error ile kar\u015f\u0131la\u015f\u0131rd\u0131k \ud83d\ude42 \u0130\u015fte, soyut s\u0131n\u0131flar kendinden t\u00fcreyecek olan s\u0131n\u0131flar\u0131n \u00f6zetini bar\u0131nd\u0131ran ve OOP mimarisiyle birlikte gelen \u00f6zel s\u0131n\u0131f yap\u0131lar\u0131d\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP5 ile birlikte s\u0131n\u0131f soyutlama \u00f6zelli\u011fi de eklenmi\u015f oldu. S\u0131n\u0131flarda soyutlama ile ne denmek istedi\u011fini a\u00e7\u0131klayal\u0131m. Soyutlanm\u0131\u015f s\u0131n\u0131flar i\u00e7erisinde yer alan soyut metotlar var ise, bu soyut s\u0131n\u0131ftan t\u00fcreyen s\u0131n\u0131flarda da ayn\u0131 isimde metotlar mutlaka tan\u0131mlanmak zorundad\u0131r. Soyut s\u0131n\u0131f olu\u015fturmak i\u00e7in s\u0131n\u0131f\u0131n ba\u015f\u0131na ve soyut s\u0131n\u0131ftan t\u00fcreyen s\u0131n\u0131flarda bulunmas\u0131n\u0131n zorunlu olmas\u0131n\u0131 istedi\u011fimiz metotlar\u0131n ba\u015f\u0131na da &hellip;<\/p>\n","protected":false},"author":1,"featured_media":317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[60,59,58],"_links":{"self":[{"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/241"}],"collection":[{"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=241"}],"version-history":[{"count":7,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/241\/revisions"}],"predecessor-version":[{"id":254,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/241\/revisions\/254"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=\/wp\/v2\/media\/317"}],"wp:attachment":[{"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okanacar.com.tr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}