{"id":1370,"date":"2019-09-08T21:37:32","date_gmt":"2019-09-08T21:37:32","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=1370"},"modified":"2019-10-12T12:52:47","modified_gmt":"2019-10-12T12:52:47","slug":"solid-3-liskovun-yerine-gecme-prensibi","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/","title":{"rendered":"SOLID 3 &#8211; Liskov&#8217;un Yerine Ge\u00e7me Prensibi"},"content":{"rendered":"<p>Umar\u0131m \u00e7o\u011funuz en son yazd\u0131\u011f\u0131m\u0131z, <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\">QT soket uygulamas\u0131na bakabilmi\u015fsinizdir<\/a><\/strong><\/span>. \u00d6n\u00fcm\u00fczdeki d\u00f6nem, bu kod \u00fczerinde bir tak\u0131m uygulamalar ve kabiliyetler daha geli\u015ftiriyor olaca\u011f\u0131z. Uzun s\u00fcredir sizler ile birlikte olamad\u0131m, in\u015fallah \u00f6n\u00fcm\u00fczdeki d\u00f6nemde, yaz\u0131lar\u0131n s\u0131kl\u0131\u011f\u0131n\u0131 biraz daha artt\u0131rmaya \u00e7al\u0131\u015faca\u011f\u0131m. A\u00e7\u0131k\u00e7as\u0131 bir s\u00fcredir siteye SSL deste\u011fi kazand\u0131rma i\u015fine bak\u0131yorum, bildi\u011finiz \u00fczere bir s\u00fcredir Google art\u0131k bu deste\u011fe sahip olmayan siteleri direk chrome \u00fczerinde g\u00fcvensiz diye i\u015faretliyor, ayr\u0131ca site g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc de bunun etkiledi\u011fini ifade etmekte fayda var. Bu sebeple ilk f\u0131rsatta bu kabiliyeti ekleyece\u011fim. Bunun ile birlikte daha \u00f6nce, sizler ile baz\u0131 videolar payla\u015f\u0131yor ve bunlara ili\u015fkin \u00f6nemli noktalara dikkat \u00e7ekmeye \u00e7al\u0131\u015f\u0131yordum, bu tip payla\u015f\u0131mlar\u0131 da \u00f6n\u00fcm\u00fczdeki d\u00f6nemde artt\u0131r\u0131yor olaca\u011f\u0131m.<\/p>\n<p>\u015eimdi gelelim bu yaz\u0131m\u0131n konusuna. Bu yaz\u0131mda SOLID prensiplerinin \u00fc\u00e7\u00fcnc\u00fcs\u00fc olan &#8220;<em>Liskov Substitution Principle<\/em>&#8220;&#8216;a, k\u0131saca LSP&#8217;ye, bakaca\u011f\u0131z. A\u015fa\u011f\u0131daki uzayl\u0131 arkada\u015flar\u0131n da ifade etti\u011fi \u00fczere bu prensipler olduk\u00e7a \u00f6nemli :), bundan sonra h\u0131zl\u0131ca di\u011fer prensipleri de bitirmeyi planl\u0131yorum.<\/p>\n<p id=\"QhCXsxl\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"916\" class=\"alignnone size-full wp-image-1432 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3.png 655w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3-215x300.png 215w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3-500x699.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3-150x210.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3-400x559.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/10\/img_5da1a877a9bc3-200x280.png 200w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/p>\n<p>\u00d6ncelikle, sizlerin de ak\u0131llar\u0131nda bir soru i\u015fareti olan bu prensibin isminin nereden geldi\u011fine bir g\u00f6z atal\u0131m. Bu prensip ilk olarak <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.wikiwand.com\/en\/Barbara_Liskov\">Barbar Liskov<\/a><\/span><\/strong> ad\u0131nda bir kad\u0131n taraf\u0131ndan veri soyutlama ve tip teorisi \u00e7al\u0131\u015fmalar\u0131nda ifade edilmi\u015f, kendisi de bu kavram\u0131 <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.wikiwand.com\/en\/Bertrand_Meyer\">Bertrand Meyer&#8217;in<\/a><\/span><\/strong> &#8220;<em>Design by Contract<\/em>&#8221; \u00e7al\u0131\u015fmas\u0131ndan t\u00fcretmi\u015ftir. Bu \u00e7al\u0131\u015fmalara ili\u015fkin detayl\u0131 bilgilere kaynaklar k\u0131sm\u0131ndan ula\u015fabilirsiniz.\u00a0Bu yaz\u0131mda da yine, Bob amcan\u0131n ifadelerine bolca at\u0131fta bulunaca\u011f\u0131m.<\/p>\n<p><span style=\"font-weight: 400;\">Di\u011fer SOLID yaz\u0131lar\u0131na a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan<\/span><span style=\"font-weight: 400;\">\u00a0ula\u015fabilirsiniz. Ayn\u0131 zamanda SOLID prensipler genel anlamda neye hizmet ediyor ve genel motivasyon i\u00e7in de ilk yaz\u0131ya ba\u015fvurabilirsiniz:<\/span><\/p>\n<ol>\n<li><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/05\/10\/solid-1-tek-sorumluluk-prensibi\/\">SOLID 1 &#8211; Tek Sorumluluk Prensibi<\/a><\/span><\/strong><\/li>\n<li><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/08\/06\/solid-2-acik-kapali-prensibi\/\">SOLID 2 &#8211; A\u00e7\u0131k\/Kapal\u0131 Prensibi<\/a><\/span><\/strong><\/li>\n<li><strong><span style=\"color: #008000;\">SOLID 3 &#8211; &#8220;Liskov Substitution&#8221; Prensibi<\/span><\/strong><\/li>\n<li><a href=\"https:\/\/www.yazilimperver.com\/?p=1430&amp;preview=true\"><span style=\"color: #008000;\"><strong>SOLID 4 &#8211; Aray\u00fcz Ayr\u0131\u015ft\u0131rma Prensibi<\/strong><\/span><\/a><\/li>\n<\/ol>\n<h2><span style=\"color: #0000ff;\"><strong><b>Liskov<\/b>&#8216;un Yerine Ge\u00e7me\u00a0<b>Prensibi<\/b><\/strong><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/i2.wp.com\/www.devtec.com\/wp-content\/uploads\/2013\/04\/LSP.jpg?resize=600%2C450\" alt=\"Related image\" width=\"429\" height=\"322\" \/><\/p>\n<p>Peki bu prensip bizlere ne s\u00f6yler? Orijinal ifadesi ile &#8220;<em>Subclasses should be substitutable for their base classes<\/em>&#8220;, her bir alt s\u0131n\u0131f, t\u00fcretilmi\u015f oldu\u011fu, temel s\u0131n\u0131flar yerine kullan\u0131labiliyor olmal\u0131d\u0131r. Bir di\u011fer ifade ile, temel s\u0131n\u0131f\u0131 kullanan herhangi bir kullan\u0131c\u0131 s\u0131n\u0131f, ayn\u0131 \u015fekilde, bu temel s\u0131n\u0131ftan t\u00fcretilmi\u015f olan s\u0131n\u0131f\u0131 da kullanabiliyor olmal\u0131d\u0131r. Bunu a\u015fa\u011f\u0131daki fig\u00fcr ile g\u00f6sterebiliriz.<\/p>\n<p id=\"bctiUtF\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1374 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d7565426ac73.png\" alt=\"\" width=\"253\" height=\"175\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d7565426ac73.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d7565426ac73-300x206.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d7565426ac73-150x103.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d7565426ac73-200x138.png 200w\" sizes=\"auto, (max-width: 253px) 100vw, 253px\" \/><\/p>\n<p>Bu ifade, ilk bak\u0131\u015fta, gayet a\u00e7\u0131k gelebilir, ama burada g\u00f6z \u00f6n\u00fcnde bulundurmam\u0131z gereken bir tak\u0131m hususlar var. Buna geometrik s\u0131n\u0131flar \u00fczerinden bir g\u00f6z atal\u0131m. Bu anlamda \u00c7ember\/Elipse s\u0131n\u0131flar\u0131na ve bunlar\u0131n ili\u015fkilerini ele alal\u0131m. \u00c7o\u011fumuz bu iki s\u0131n\u0131f\u0131 d\u00fc\u015f\u00fcn\u00fcrken, asl\u0131nda elipsin daha genel ve \u00e7emberin de asl\u0131nda elipsin \u00f6zel bir durumu oldu\u011funu d\u00fc\u015f\u00fcne gelmi\u015fizdir. Bu da bizi, bu iki s\u0131n\u0131f\u0131 miras mekanizmas\u0131 ile ili\u015fkilendirmeye itebilir. Bunun sonucu olarak, elips temel s\u0131n\u0131f ve \u00e7ember de bunun alt s\u0131n\u0131f\u0131 olarak kabul edilebilir.<\/p>\n<p id=\"RyjDGnH\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1379 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d75690f9e39f.png\" alt=\"\" width=\"109\" height=\"193\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d75690f9e39f.png 155w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d75690f9e39f-150x266.png 150w\" sizes=\"auto, (max-width: 109px) 100vw, 109px\" \/><\/p>\n<p>\u0130lk bak\u0131\u015fta bu yakla\u015f\u0131mda herhangi bir s\u0131k\u0131nt\u0131 g\u00f6r\u00fcnmese de, biraz daha yak\u0131ndan bakt\u0131\u011f\u0131m\u0131zda bir tak\u0131m hususlar\u0131n kendisini g\u00f6sterece\u011fini g\u00f6rece\u011fiz. Bunun \u00f6ncesinde bu s\u0131n\u0131flar\u0131 koda d\u00f6kelim. \u00d6ncelikle elips ile ba\u015flayal\u0131m.<\/p>\n<p>Burada temel olarak elips, asl\u0131nda iki farkl\u0131 yar\u0131 \u00e7ap ile ifade ediliyor ve \u00f6rne\u011fimiz i\u00e7in \u015fimdilik sadece alan hesaplad\u0131\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcnelim.<\/p>\n<p id=\"jQsiIIh\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1380 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d756b04919af.png\" alt=\"\" width=\"232\" height=\"137\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d756b04919af.png 345w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d756b04919af-300x177.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d756b04919af-150x89.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d756b04919af-200x118.png 200w\" sizes=\"auto, (max-width: 232px) 100vw, 232px\" \/><\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ Bizim elips temel sinifimiz\r\nclass Ellipse\r\n{\r\npublic:\r\n    virtual void setRadiusA(double a) {\r\n        mRadiusA = a;\r\n    }\r\n    virtual void setRadiusB(double b) {\r\n        mRadiusB = b;\r\n    }\r\n\r\n    virtual double calculateArea() {\r\n        return mRadiusA * mRadiusB * PI;\r\n    }\r\nprotected:\r\n    double mRadiusA;\r\n    double mRadiusB;\r\n};<\/pre>\n<p>\u015eimdi gelelim \u00e7ember s\u0131n\u0131f\u0131m\u0131za. \u00c7ember s\u0131n\u0131f\u0131m\u0131z elipsten farkl\u0131 olarak, tek bir yar\u0131\u00e7apa ihtiya\u00e7 duyuyor. Bunu nas\u0131l \u00e7\u00f6zeriz? Bu ama\u00e7la, yar\u0131\u00e7ap metotlar\u0131ndan birini bu ama\u00e7 ile kullanabiliriz.<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ Cember sinifimiz\r\nclass Circle\r\n  : public Ellipse\r\n{\r\npublic:\r\n    virtual void setRadiusA(double a) override {\r\n        Ellipse::setRadiusA(a);\r\n        mRadiusB = a;\r\n    }\r\n};<\/pre>\n<p>Evet, bu s\u0131n\u0131f ile ne gibi bir problem ya\u015fayabiliriz sizce? Bir kullan\u0131c\u0131 s\u0131n\u0131f\u0131m\u0131z bir \u015fekilde <em>setRadiusB<\/em> metodunu farkl\u0131 bir de\u011fer ile \u00e7a\u011f\u0131r\u0131r ise \u00e7embere ili\u015fkin alan metodumuz bizlere yanl\u0131\u015f sonu\u00e7 verecektir:<\/p>\n<pre class=\"lang:c++ decode:true\">...\r\nauto circle = std::make_unique&lt;Circle&gt;();\r\ncircle.setRadiusA(5);\r\ncircle.setRadiusB(4);\r\n\r\n\/\/ Cikit: 5*4*PI = 62.83, ama bekledigimiz deger 5*5*PI = 78.54\r\nstd::cout &lt;&lt; \"Area is: \" &lt;&lt; circle-&gt;calculateArea(); \r\n\r\n...<\/pre>\n<p>Bu problemi, bu yakla\u015f\u0131mla bir ka\u00e7 farkl\u0131 yol ile \u00e7\u00f6zebiliriz. \u0130lk y\u00f6ntem \u00e7ember i\u00e7in\u00a0<em>setRadius<\/em> gibi bir metot ekleyebilir ve alan hesaplamas\u0131n\u0131 bunun \u00fczerinden yapabiliriz:<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ Cember sinifimiz\r\nclass Circle\r\n  : public Ellipse\r\n{\r\npublic:\r\n    void setRadius(double r){\r\n        mRadius = r;\r\n    }\r\n\r\n   virtual double calculateArea() override\r\n   {\r\n      return mRadius * mRadius * PI;\r\n   }\r\nprotected:\r\n    double mRadius;\r\n};<\/pre>\n<p>Ya da elips s\u0131n\u0131f\u0131nda bulunan her iki metodu da bu ba\u011flamda g\u00fcncelleyebiliriz:<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ Cember sinifimiz\r\nclass Circle\r\n  : public Ellipse\r\n{\r\npublic:\r\n    virtual void setRadiusA(double a) override {\r\n        Ellipse::setRadiusA(a);\r\n        mRadiusB = a;\r\n    }\r\n    virtual void setRadiusB(double a) override {\r\n        Ellipse::setRadiusB(a);\r\n        mRadiusA = a;\r\n    }\r\n};<\/pre>\n<p>\u015eimdi her iki \u00e7\u00f6z\u00fcm y\u00f6ntemi de kendine has s\u0131k\u0131nt\u0131lar\u0131 bar\u0131nd\u0131r\u0131yor. Bir kere eminim hepiniz bu iki \u00e7\u00f6z\u00fcm\u00fcn de derme \u00e7atma oldu\u011funu kabul edecektir ve alan hesaplama d\u0131\u015f\u0131nda benzer ihtiya\u00e7larda, bu s\u0131k\u0131nt\u0131 katlanarak devam edecektir. Bir di\u011fer s\u0131k\u0131nt\u0131 da, asl\u0131nda temelde yakla\u015f\u0131m\u0131m\u0131zdaki hata, yani \u00e7ember asl\u0131nda elipsten farkl\u0131 (t\u00fcretilmi\u015f de olsa) bir s\u0131n\u0131f de\u011fil, asl\u0131nda onun \u00f6zel bir \u015fekilde ifade edili\u015f hali, yani bu \u015fekilde modellemek pek do\u011fru de\u011fil. Sonu\u00e7 olarak, \u00e7ember diye ayr\u0131 bir s\u0131n\u0131f olu\u015fturmaktan sa, elips s\u0131n\u0131f\u0131n\u0131 mevcut hali ile her iki durum i\u00e7in de kullanmak daha do\u011fru bir yakla\u015f\u0131m olacakt\u0131r. Zaten bir \u00e7ok g\u00f6rselle\u015ftirme k\u00fct\u00fcphanesine bakacak olursan\u0131z, genelde \u00e7ember \u00e7izdirme API&#8217;si yerine sadece elips \u00e7izim API&#8217;si sunulur (\u00f6r. QT <em>QPainter<\/em> s\u0131n\u0131f\u0131).<\/p>\n<p>LSP&#8217;ye ili\u015fkin ihlallerin bulunmas\u0131, bazen ger\u00e7ekten zor olabilmektedir. Baz\u0131 durumlarda asl\u0131nda, OCP&#8217;nin de ihlal edildi\u011fi g\u00f6r\u00fclebilecektir. Sonu\u00e7 olarak t\u00fcretilmi\u015f s\u0131n\u0131f nesneleri, temel s\u0131n\u0131f\u0131n davran\u0131\u015flar\u0131n\u0131 de\u011fi\u015ftirmemeli\/yerine ge\u00e7memeli, tamamlay\u0131c\u0131 ek davran\u0131\u015flar sunmal\u0131.<\/p>\n<p>\u015eimdi gelelim \u00f6rdek meselesine\u00a0 \ud83d\ude42 Bu asl\u0131nda <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.wikiwand.com\/en\/Duck_test\">\u00f6rdek testi<\/a> <\/span><\/strong>denilen bir test ile de ifade edilebilir. \u015e\u00f6yle ki: &#8220;E\u011fer bir \u015fey \u00f6rdek gibi g\u00f6r\u00fcn\u00fcyor, onun gibi y\u00fcz\u00fcyor, onun gibi de vakvakl\u0131yor ise, muhtemelen o bir \u00f6rdektir.&#8221;. Bunu LSP&#8217;ye \u00e7evirecek olursak, &#8220;E\u011fer bir \u015fey \u00f6rdek gibi g\u00f6r\u00fcn\u00fcyor, onun gibi y\u00fcz\u00fcyor, ama pile ihtiya\u00e7 duyuyor ise, muhtemelen yanl\u0131\u015f bir soyutlamaya sahipsiniz :).&#8221;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/d33wubrfki0l68.cloudfront.net\/c86dcdb658094631f1ba61f7fc3a63a04f19d977\/f302f\/static\/74dad4b97aa9732e5644eb34f5eb18b7\/b9e4f\/liskov_1.png\" alt=\"liskov\" \/><\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar:<\/strong><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/www.wikiwand.com\/en\/Barbara_Liskov\"><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/Barbara_Liskov<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/pdfs.semanticscholar.org\/36be\/babeb72287ad9490e1ebab84e7225ad6a9e5.pdf\"><span style=\"color: #008000;\"><strong>https:\/\/pdfs.semanticscholar.org\/36be\/babeb72287ad9490e1ebab84e7225ad6a9e5.pdf<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/fi.ort.edu.uy\/innovaportal\/file\/2032\/1\/design_principles.pdf\"><span style=\"color: #008000;\"><strong>https:\/\/fi.ort.edu.uy\/innovaportal\/file\/2032\/1\/design_principles.pdf<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.wikiwand.com\/en\/Bertrand_Meyer\"><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/Bertrand_Meyer<\/strong><\/span><\/a><\/li>\n<li><a href=\"http:\/\/se.inf.ethz.ch\/~meyer\/publications\/computer\/contract.pdf\"><span style=\"color: #008000;\"><strong>http:\/\/se.inf.ethz.ch\/~meyer\/publications\/computer\/contract.pdf<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=gnKx1RW_2Rk\"><span style=\"color: #008000;\"><strong>https:\/\/www.youtube.com\/watch?v=gnKx1RW_2Rk<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.wikiwand.com\/en\/Duck_test\"><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/Duck_test<\/strong><\/span><\/a><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Umar\u0131m \u00e7o\u011funuz en son yazd\u0131\u011f\u0131m\u0131z, QT soket uygulamas\u0131na bakabilmi\u015fsinizdir. \u00d6n\u00fcm\u00fczdeki d\u00f6nem, bu kod \u00fczerinde bir tak\u0131m uygulamalar ve kabiliyetler daha geli\u015ftiriyor olaca\u011f\u0131z. Uzun s\u00fcredir sizler ile birlikte olamad\u0131m, in\u015fallah \u00f6n\u00fcm\u00fczdeki d\u00f6nemde, yaz\u0131lar\u0131n s\u0131kl\u0131\u011f\u0131n\u0131 biraz daha artt\u0131rmaya \u00e7al\u0131\u015faca\u011f\u0131m. A\u00e7\u0131k\u00e7as\u0131 bir s\u00fcredir siteye SSL deste\u011fi kazand\u0131rma i\u015fine bak\u0131yorum, bildi\u011finiz \u00fczere bir s\u00fcredir Google art\u0131k bu deste\u011fe sahip&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":1162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[41,188],"tags":[553,535,551,549,552,550,533,532,442,441,448,447,440],"class_list":["post-1370","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-modern-c","category-yazilim-muhendisligi","tag-abstraction","tag-bertrand-meyer","tag-design-by-contract","tag-liskov-substitution-principle","tag-liskovun-yerine-gecme-prensibi","tag-lsp","tag-nesne-yonelimli-tasarim","tag-nesne-yonelimli-yazilim-gelistirme","tag-ood","tag-oop","tag-robert-c-martin","tag-software-design","tag-solid"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SOLID 3 - Liskov&#039;un Yerine Ge\u00e7me Prensibi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]SOLID 3 - Liskov&#039;un Yerine Ge\u00e7me Prensibi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Umar\u0131m \u00e7o\u011funuz en son yazd\u0131\u011f\u0131m\u0131z, QT soket uygulamas\u0131na bakabilmi\u015fsinizdir. \u00d6n\u00fcm\u00fczdeki d\u00f6nem, bu kod \u00fczerinde bir tak\u0131m uygulamalar ve kabiliyetler daha geli\u015ftiriyor olaca\u011f\u0131z. Uzun s\u00fcredir sizler ile birlikte olamad\u0131m, in\u015fallah \u00f6n\u00fcm\u00fczdeki d\u00f6nemde, yaz\u0131lar\u0131n s\u0131kl\u0131\u011f\u0131n\u0131 biraz daha artt\u0131rmaya \u00e7al\u0131\u015faca\u011f\u0131m. A\u00e7\u0131k\u00e7as\u0131 bir s\u00fcredir siteye SSL deste\u011fi kazand\u0131rma i\u015fine bak\u0131yorum, bildi\u011finiz \u00fczere bir s\u00fcredir Google art\u0131k bu deste\u011fe sahip... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-08T21:37:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-12T12:52:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/05\/img_5cd5e44cbe99e.png\" \/>\n\t<meta property=\"og:image:width\" content=\"182\" \/>\n\t<meta property=\"og:image:height\" content=\"84\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"SOLID 3 &#8211; Liskov&#8217;un Yerine Ge\u00e7me Prensibi\",\"datePublished\":\"2019-09-08T21:37:32+00:00\",\"dateModified\":\"2019-10-12T12:52:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\"},\"wordCount\":1120,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"abstraction\",\"Bertrand Meyer\",\"Design by Contract\",\"Liskov Substitution Principle\",\"Liskov'un Yerine Ge\u00e7me Prensibi\",\"LSP\",\"Nesne Y\u00f6nelimli Tasar\u0131m\",\"Nesne Y\u00f6nelimli Yaz\u0131l\u0131m Geli\u015ftirme\",\"OOD\",\"OOP\",\"Robert C. Martin\",\"software design\",\"SOLID\"],\"articleSection\":[\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\",\"name\":\"[:tr]SOLID 3 - Liskov'un Yerine Ge\u00e7me Prensibi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-09-08T21:37:32+00:00\",\"dateModified\":\"2019-10-12T12:52:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SOLID 3 &#8211; Liskov&#8217;un Yerine Ge\u00e7me Prensibi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]SOLID 3 - Liskov'un Yerine Ge\u00e7me Prensibi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","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:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]SOLID 3 - Liskov'un Yerine Ge\u00e7me Prensibi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Umar\u0131m \u00e7o\u011funuz en son yazd\u0131\u011f\u0131m\u0131z, QT soket uygulamas\u0131na bakabilmi\u015fsinizdir. \u00d6n\u00fcm\u00fczdeki d\u00f6nem, bu kod \u00fczerinde bir tak\u0131m uygulamalar ve kabiliyetler daha geli\u015ftiriyor olaca\u011f\u0131z. Uzun s\u00fcredir sizler ile birlikte olamad\u0131m, in\u015fallah \u00f6n\u00fcm\u00fczdeki d\u00f6nemde, yaz\u0131lar\u0131n s\u0131kl\u0131\u011f\u0131n\u0131 biraz daha artt\u0131rmaya \u00e7al\u0131\u015faca\u011f\u0131m. A\u00e7\u0131k\u00e7as\u0131 bir s\u00fcredir siteye SSL deste\u011fi kazand\u0131rma i\u015fine bak\u0131yorum, bildi\u011finiz \u00fczere bir s\u00fcredir Google art\u0131k bu deste\u011fe sahip... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-09-08T21:37:32+00:00","article_modified_time":"2019-10-12T12:52:47+00:00","og_image":[{"width":182,"height":84,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/05\/img_5cd5e44cbe99e.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"SOLID 3 &#8211; Liskov&#8217;un Yerine Ge\u00e7me Prensibi","datePublished":"2019-09-08T21:37:32+00:00","dateModified":"2019-10-12T12:52:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/"},"wordCount":1120,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["abstraction","Bertrand Meyer","Design by Contract","Liskov Substitution Principle","Liskov'un Yerine Ge\u00e7me Prensibi","LSP","Nesne Y\u00f6nelimli Tasar\u0131m","Nesne Y\u00f6nelimli Yaz\u0131l\u0131m Geli\u015ftirme","OOD","OOP","Robert C. Martin","software design","SOLID"],"articleSection":["Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/","name":"[:tr]SOLID 3 - Liskov'un Yerine Ge\u00e7me Prensibi[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-09-08T21:37:32+00:00","dateModified":"2019-10-12T12:52:47+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/08\/solid-3-liskovun-yerine-gecme-prensibi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"SOLID 3 &#8211; Liskov&#8217;un Yerine Ge\u00e7me Prensibi"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1370"}],"version-history":[{"count":13,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1370\/revisions"}],"predecessor-version":[{"id":1445,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1370\/revisions\/1445"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/1162"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}