{"id":34887,"date":"2025-11-23T08:41:20","date_gmt":"2025-11-23T05:41:20","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34887"},"modified":"2025-11-23T08:41:20","modified_gmt":"2025-11-23T05:41:20","slug":"giris-ve-temel-kavramlar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/","title":{"rendered":"Giri\u015f ve Temel Kavramlar"},"content":{"rendered":"<p><body><\/p>\n<h2>Giri\u015f ve Temel Kavramlar<\/h2>\n<p>Nesne Y\u00f6nelimli Programlama (OOP), yaz\u0131l\u0131m geli\u015ftirmede yayg\u0131n olarak kullan\u0131lan bir paradigmad\u0131r ve Python da bu prensipleri g\u00fc\u00e7l\u00fc bir \u015fekilde destekler. Kal\u0131t\u0131m (Inheritance), OOP&#8217;nin d\u00f6rt temel s\u00fctunundan (kaps\u00fclleme, soyutlama, polimorfizm ile birlikte) biridir. Bu rehberde, Python 3&#8217;teki s\u0131n\u0131f kal\u0131t\u0131m\u0131n\u0131 derinlemesine inceleyece\u011fiz, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, neden kullan\u0131ld\u0131\u011f\u0131n\u0131 ve en iyi uygulamalar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Kal\u0131t\u0131m Nedir?<\/h3>\n<p>Kal\u0131t\u0131m, bir s\u0131n\u0131f\u0131n (alt s\u0131n\u0131f veya t\u00fcretilmi\u015f s\u0131n\u0131f) ba\u015fka bir s\u0131n\u0131f\u0131n (\u00fcst s\u0131n\u0131f veya temel s\u0131n\u0131f) \u00f6zelliklerini ve davran\u0131\u015flar\u0131n\u0131 miras almas\u0131n\u0131 sa\u011flayan bir mekanizmad\u0131r. Bu, &#8220;bir \u015fey bir \u015feydir&#8221; (is-a) ili\u015fkisini ifade eder. \u00d6rne\u011fin, &#8220;K\u00f6pek bir Hayvand\u0131r&#8221; veya &#8220;Araba bir Ta\u015f\u0131tt\u0131r&#8221; ili\u015fkisi kal\u0131t\u0131m ile modellenebilir. Alt s\u0131n\u0131f, \u00fcst s\u0131n\u0131f\u0131n t\u00fcm metotlar\u0131na ve niteliklerine eri\u015febilir ve bunlar\u0131 kendi ihtiya\u00e7lar\u0131na g\u00f6re geni\u015fletebilir veya de\u011fi\u015ftirebilir.<\/p>\n<h3>Neden Kal\u0131t\u0131m Kullanmal\u0131y\u0131z?<\/h3>\n<p>Kal\u0131t\u0131m\u0131n ba\u015fl\u0131ca faydalar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Kod Tekrar\u0131n\u0131 Azaltma (Code Reusability):<\/strong> Ortak \u00f6zellik ve davran\u0131\u015flar\u0131 \u00fcst s\u0131n\u0131fta tan\u0131mlayarak, alt s\u0131n\u0131flar\u0131n bu kodu yeniden yazmas\u0131na gerek kalmaz. Bu, daha az kod yazmay\u0131 ve daha az hata yapmay\u0131 sa\u011flar.<\/li>\n<li><strong>Geni\u015fletilebilirlik (Extensibility):<\/strong> Mevcut s\u0131n\u0131flar\u0131n i\u015flevselli\u011fini de\u011fi\u015ftirmeden veya bozmadan yeni \u00f6zellikler eklemeyi kolayla\u015ft\u0131r\u0131r. Yeni alt s\u0131n\u0131flar t\u00fcreterek sistemi geni\u015fletebilirsiniz.<\/li>\n<li><strong>Okunabilirlik ve Bak\u0131m Kolayl\u0131\u011f\u0131:<\/strong> S\u0131n\u0131flar aras\u0131nda mant\u0131ksal bir hiyerar\u015fi olu\u015fturarak kodun yap\u0131s\u0131n\u0131 daha anla\u015f\u0131l\u0131r hale getirir. Ortak mant\u0131k tek bir yerde topland\u0131\u011f\u0131ndan, bak\u0131m\u0131 ve g\u00fcncellemeleri daha kolayd\u0131r.<\/li>\n<li><strong>Polimorfizm:<\/strong> Kal\u0131t\u0131m, polimorfizmin temelini olu\u015fturur. Farkl\u0131 alt s\u0131n\u0131f nesnelerinin ayn\u0131 metot \u00e7a\u011fr\u0131s\u0131na farkl\u0131 \u015fekillerde yan\u0131t vermesini sa\u011flar.<\/li>\n<\/ul>\n<h2>Python&#8217;da Temel Kal\u0131t\u0131m Uygulamalar\u0131<\/h2>\n<p>\u015eimdi Python&#8217;da kal\u0131t\u0131m\u0131n nas\u0131l uyguland\u0131\u011f\u0131na ve temel \u00f6zelliklerine bakal\u0131m.<\/p>\n<h3>Bir S\u0131n\u0131ftan T\u00fcretme<\/h3>\n<p>Python&#8217;da bir s\u0131n\u0131ftan t\u00fcretmek olduk\u00e7a basittir. Alt s\u0131n\u0131f tan\u0131m\u0131nda, parantez i\u00e7inde \u00fcst s\u0131n\u0131f\u0131n ad\u0131n\u0131 belirtmeniz yeterlidir.<\/p>\n<pre><code class=\"language-python\">\nclass Hayvan:\n    def __init__(self, ad):\n        self.ad = ad\n        print(f\"{self.ad} bir hayvan olu\u015fturuldu.\")\n\n    def konus(self):\n        raise NotImplementedError(\"Bu metot alt s\u0131n\u0131flarda uygulanmal\u0131d\u0131r.\")\n\nclass Kopek(Hayvan):\n    def __init__(self, ad, irk):\n        super().__init__(ad) # \u00dcst s\u0131n\u0131f\u0131n __init__ metodunu \u00e7a\u011f\u0131r\n        self.irk = irk\n        print(f\"{self.ad} isimli {self.irk} \u0131rk\u0131ndan bir k\u00f6pek olu\u015fturuldu.\")\n\n    def havla(self):\n        return f\"{self.ad} havl\u0131yor: Hav hav!\"\n\n<h2>Kullan\u0131m<\/h2>\nbenek = Kopek(\"Benek\", \"Golden Retriever\")\nprint(benek.ad)\nprint(benek.irk)\nprint(benek.havla())\n<h2>print(benek.konus()) # Hata verir \u00e7\u00fcnk\u00fc Kopek s\u0131n\u0131f\u0131nda konus() ezilmedi<\/h2>\n    <\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>Kopek<\/code> s\u0131n\u0131f\u0131 <code>Hayvan<\/code> s\u0131n\u0131f\u0131ndan miras al\u0131r. <code>Kopek<\/code> s\u0131n\u0131f\u0131, <code>Hayvan<\/code> s\u0131n\u0131f\u0131n\u0131n <code>ad<\/code> niteli\u011fine ve <code>konus<\/code> metoduna eri\u015febilir. <code>Kopek<\/code> s\u0131n\u0131f\u0131 ayr\u0131ca kendi \u00f6zel metodu olan <code>havla()<\/code> metoduna sahiptir.<\/p>\n<h3>Metot Ezme (Method Overriding)<\/h3>\n<p>Alt s\u0131n\u0131f, \u00fcst s\u0131n\u0131ftan miras ald\u0131\u011f\u0131 bir metodu kendi ihtiya\u00e7lar\u0131na g\u00f6re yeniden tan\u0131mlayabilir. Buna metot ezme denir. Bu, alt s\u0131n\u0131f\u0131n ayn\u0131 metot ad\u0131na sahip olmas\u0131na ra\u011fmen farkl\u0131 bir davran\u0131\u015f sergilemesini sa\u011flar.<\/p>\n<pre><code class=\"language-python\">\nclass Kedi(Hayvan):\n    def __init__(self, ad, renk):\n        super().__init__(ad)\n        self.renk = renk\n        print(f\"{self.ad} isimli {self.renk} renkli bir kedi olu\u015fturuldu.\")\n\n    def konus(self): # \u00dcst s\u0131n\u0131ftaki konus metodunu ezdik\n        return f\"{self.ad} miyavl\u0131yor: Miyav!\"\n\n<h2>Kullan\u0131m<\/h2>\npamuk = Kedi(\"Pamuk\", \"Beyaz\")\nprint(pamuk.konus()) # Kedi s\u0131n\u0131f\u0131n\u0131n konus() metodu \u00e7a\u011fr\u0131l\u0131r.\n\n<h2>Hayvan s\u0131n\u0131f\u0131ndan t\u00fcretilen ba\u015fka bir \u00f6rnek<\/h2>\n<h2>hayvan = Hayvan(\"Bilgisiz\")<\/h2>\n<h2>print(hayvan.konus()) # NotImplementedError f\u0131rlat\u0131r<\/h2>\n    <\/code><\/pre>\n<p><code>Kedi<\/code> s\u0131n\u0131f\u0131, <code>Hayvan<\/code> s\u0131n\u0131f\u0131ndaki <code>konus()<\/code> metodunu kendi &#8220;Miyav!&#8221; \u00e7\u0131kt\u0131s\u0131yla ezmi\u015ftir. Bu, polimorfizmin temel bir \u00f6rne\u011fidir; farkl\u0131 hayvanlar ayn\u0131 <code>konus()<\/code> metodunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131nda farkl\u0131 sesler \u00e7\u0131kar\u0131r.<\/p>\n<h3><code>super()<\/code> Fonksiyonunun \u00d6nemi<\/h3>\n<p><code>super()<\/code> fonksiyonu, alt s\u0131n\u0131ftan \u00fcst s\u0131n\u0131f\u0131n metotlar\u0131n\u0131 \u00e7a\u011f\u0131rmak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle alt s\u0131n\u0131f\u0131n kendi <code>__init__<\/code> metodu oldu\u011funda, \u00fcst s\u0131n\u0131f\u0131n <code>__init__<\/code> metodunu d\u00fczg\u00fcn bir \u015fekilde ba\u015flatmak i\u00e7in hayati \u00f6neme sahiptir. Bu, \u00fcst s\u0131n\u0131fta tan\u0131mlanan niteliklerin do\u011fru bir \u015fekilde ayarlanmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-python\">\nclass Arac:\n    def __init__(self, marka, model):\n        self.marka = marka\n        self.model = model\n        print(f\"Bir {self.marka} {self.model} ara\u00e7 olu\u015fturuldu.\")\n\n    def bilgi_ver(self):\n        return f\"Marka: {self.marka}, Model: {self.model}\"\n\nclass Araba(Arac):\n    def __init__(self, marka, model, kap\u0131_say\u0131s\u0131):\n        super().__init__(marka, model) # \u00dcst s\u0131n\u0131f\u0131n __init__ metodunu \u00e7a\u011f\u0131r\n        self.kap\u0131_say\u0131s\u0131 = kap\u0131_say\u0131s\u0131\n        print(f\"Bir {self.marka} {self.model} ({self.kap\u0131_say\u0131s\u0131} kap\u0131l\u0131) araba olu\u015fturuldu.\")\n\n    def bilgi_ver(self):\n        # \u00dcst s\u0131n\u0131f\u0131n bilgi_ver metodunu \u00e7a\u011f\u0131r\u0131p ek bilgi ekleyebiliriz\n        temel_bilgi = super().bilgi_ver()\n        return f\"{temel_bilgi}, Kap\u0131 Say\u0131s\u0131: {self.kap\u0131_say\u0131s\u0131}\"\n\n<h2>Kullan\u0131m<\/h2>\nbmw = Araba(\"BMW\", \"X5\", 5)\nprint(bmw.bilgi_ver())\n    <\/code><\/pre>\n<p><code>super()<\/code> kullan\u0131m\u0131, miras zincirindeki bir sonraki \u00fcst s\u0131n\u0131f\u0131n metodunu \u00e7a\u011f\u0131rman\u0131n en g\u00fcvenli ve \u00f6nerilen yoludur. \u00d6zellikle \u00e7oklu kal\u0131t\u0131mda ve karma\u015f\u0131k s\u0131n\u0131f hiyerar\u015filerinde do\u011fru \u00e7al\u0131\u015fmay\u0131 garanti eder.<\/p>\n<h2>\u00c7oklu Kal\u0131t\u0131m ve MRO (Method Resolution Order)<\/h2>\n<p>Python, di\u011fer baz\u0131 nesne y\u00f6nelimli dillerin aksine (\u00f6rne\u011fin Java), \u00e7oklu kal\u0131t\u0131m\u0131 destekler. Bu, bir s\u0131n\u0131f\u0131n birden fazla \u00fcst s\u0131n\u0131ftan miras alabilece\u011fi anlam\u0131na gelir.<\/p>\n<h3>\u00c7oklu Kal\u0131t\u0131m Nedir?<\/h3>\n<p>\u00c7oklu kal\u0131t\u0131m, bir alt s\u0131n\u0131f\u0131n birden fazla temel s\u0131n\u0131ftan nitelikler ve metotlar almas\u0131d\u0131r. Bu, karma\u015f\u0131k davran\u0131\u015flar\u0131 bir araya getirmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 olabilir, ancak ayn\u0131 zamanda &#8220;elmas problemi&#8221; gibi zorluklar\u0131 da beraberinde getirebilir.<\/p>\n<pre><code class=\"language-python\">\nclass Ucabilen:\n    def uc(self):\n        return \"U\u00e7uyorum!\"\n\nclass Yuzebilen:\n    def yuz(self):\n        return \"Y\u00fcz\u00fcyorum!\"\n\nclass Ordek(Ucabilen, Yuzebilen): # Hem Ucabilen hem Yuzebilen'den miras al\u0131r\n    def konus(self):\n        return \"Vak vak!\"\n\n<h2>Kullan\u0131m<\/h2>\n\u00f6rdek = Ordek()\nprint(\u00f6rdek.uc())\nprint(\u00f6rdek.yuz())\nprint(\u00f6rdek.konus())\n    <\/code><\/pre>\n<p><code>Ordek<\/code> s\u0131n\u0131f\u0131, <code>Ucabilen<\/code> ve <code>Yuzebilen<\/code> s\u0131n\u0131flar\u0131n\u0131n her ikisinden de metotlar\u0131 miras alm\u0131\u015ft\u0131r. Bu, <code>Ordek<\/code> nesnesinin hem u\u00e7ma hem de y\u00fczme yetene\u011fine sahip olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>MRO (Method Resolution Order) ve <code>__mro__<\/code> Niteli\u011fi<\/h3>\n<p>\u00c7oklu kal\u0131t\u0131m kullan\u0131ld\u0131\u011f\u0131nda, e\u011fer farkl\u0131 \u00fcst s\u0131n\u0131flar\u0131n ayn\u0131 ad\u0131 ta\u015f\u0131yan metotlar\u0131 varsa, Python hangi metodun \u00e7a\u011fr\u0131laca\u011f\u0131n\u0131 nas\u0131l belirler? \u0130\u015fte burada Metot \u00c7\u00f6z\u00fcmleme S\u0131ras\u0131 (Method Resolution Order &#8211; MRO) devreye girer. MRO, Python&#8217;\u0131n bir metodu ararken izledi\u011fi s\u0131ralamay\u0131 tan\u0131mlar. Python, MRO&#8217;yu C3 linearization algoritmas\u0131 kullanarak belirler.<\/p>\n<p>Bir s\u0131n\u0131f\u0131n MRO&#8217;sunu <code>ClassName.__mro__<\/code> niteli\u011fini veya <code>help(ClassName)<\/code> fonksiyonunu kullanarak g\u00f6rebilirsiniz.<\/p>\n<h3>MRO&#8217;yu Anlamak i\u00e7in \u00d6rnekler<\/h3>\n<pre><code class=\"language-python\">\nclass A:\n    def metot(self):\n        return \"A s\u0131n\u0131f\u0131ndan\"\n\nclass B(A):\n    def metot(self):\n        return \"B s\u0131n\u0131f\u0131ndan\"\n\nclass C(A):\n    def metot(self):\n        return \"C s\u0131n\u0131f\u0131ndan\"\n\nclass D(B, C): # B ve C'den miras al\u0131r\n    pass\n\nclass E(C, B): # C ve B'den miras al\u0131r (s\u0131ra farkl\u0131)\n    pass\n\n<h2>MRO'yu inceleyelim<\/h2>\nprint(\"D s\u0131n\u0131f\u0131n\u0131n MRO'su:\", D.__mro__)\n<h2>\u00c7\u0131kt\u0131: (<class &#039;__main__.D&#039;>, <class &#039;__main__.B&#039;>, <class &#039;__main__.C&#039;>, <class &#039;__main__.A&#039;>, <class &#039;object&#039;>)<\/h2>\n\nprint(\"E s\u0131n\u0131f\u0131n\u0131n MRO'su:\", E.__mro__)\n<h2>\u00c7\u0131kt\u0131: (<class &#039;__main__.E&#039;>, <class &#039;__main__.C&#039;>, <class &#039;__main__.B&#039;>, <class &#039;__main__.A&#039;>, <class &#039;object&#039;>)<\/h2>\n\n<h2>Metot \u00e7a\u011fr\u0131s\u0131<\/h2>\nd_nesnesi = D()\nprint(d_nesnesi.metot()) # \u00c7\u0131kt\u0131: B s\u0131n\u0131f\u0131ndan (D -> B -> C -> A s\u0131ras\u0131na g\u00f6re B'yi bulur)\n\ne_nesnesi = E()\nprint(e_nesnesi.metot()) # \u00c7\u0131kt\u0131: C s\u0131n\u0131f\u0131ndan (E -> C -> B -> A s\u0131ras\u0131na g\u00f6re C'yi bulur)\n    <\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>D<\/code> ve <code>E<\/code> s\u0131n\u0131flar\u0131n\u0131n MRO&#8217;lar\u0131 farkl\u0131 oldu\u011fu i\u00e7in <code>metot()<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda farkl\u0131 sonu\u00e7lar d\u00f6ner. MRO, Python&#8217;\u0131n \u00e7oklu kal\u0131t\u0131mda deterministik bir davran\u0131\u015f sergilemesini sa\u011flar.<\/p>\n<h2>Kal\u0131t\u0131mda Pratik Yakla\u015f\u0131mlar ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Kal\u0131t\u0131m g\u00fc\u00e7l\u00fc bir ara\u00e7 olsa da, her zaman en iyi \u00e7\u00f6z\u00fcm olmayabilir. Do\u011fru yerde ve do\u011fru \u015fekilde kullanmak \u00f6nemlidir.<\/p>\n<h3>Ne Zaman Kal\u0131t\u0131m Kullanmal\u0131, Ne Zaman Kompozisyon?<\/h3>\n<p>Bu, nesne y\u00f6nelimli tasar\u0131mda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir ikilemdir:<\/p>\n<ul>\n<li><strong>Kal\u0131t\u0131m (&#8220;is-a&#8221; ili\u015fkisi):<\/strong> Bir alt s\u0131n\u0131f\u0131n \u00fcst s\u0131n\u0131f\u0131n \u00f6zel bir t\u00fcr\u00fc oldu\u011fu durumlarda kullan\u0131l\u0131r. \u00d6rne\u011fin, &#8220;K\u00f6pek bir Hayvand\u0131r&#8221;. Yak\u0131n bir hiyerar\u015fi ve ortak davran\u0131\u015flar gerekti\u011finde uygundur. Ancak, derin kal\u0131t\u0131m hiyerar\u015fileri kodun karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rabilir ve esnekli\u011fi azaltabilir.<\/li>\n<li><strong>Kompozisyon (&#8220;has-a&#8221; ili\u015fkisi):<\/strong> Bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131f\u0131n nesnesini i\u00e7erdi\u011fi durumlarda kullan\u0131l\u0131r. \u00d6rne\u011fin, &#8220;Araba bir Motora sahiptir&#8221;. Kompozisyon, daha esnek bir yap\u0131 sunar \u00e7\u00fcnk\u00fc bile\u015fenler \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015ftirilebilir veya farkl\u0131 bile\u015fenlerle birle\u015ftirilebilir. Genellikle &#8220;tercih edin kompozisyonu kal\u0131t\u0131mdan&#8221; (prefer composition over inheritance) ilkesi \u00f6nerilir.<\/li>\n<\/ul>\n<p>Basit bir kural: E\u011fer bir nesne ba\u015fka bir nesnenin <strong>t\u00fcr\u00fc ise<\/strong> kal\u0131t\u0131m, e\u011fer bir nesne ba\u015fka bir nesneyi <strong>kullan\u0131yorsa veya i\u00e7eriyorsa<\/strong> kompozisyon d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<h3>Tasar\u0131m Kal\u0131plar\u0131 ve Kal\u0131t\u0131m<\/h3>\n<p>Bir\u00e7ok tasar\u0131m kal\u0131b\u0131, kal\u0131t\u0131m\u0131 temel bir yap\u0131 ta\u015f\u0131 olarak kullan\u0131r:<\/p>\n<ul>\n<li><strong>\u015eablon Metot (Template Method):<\/strong> Bir algoritman\u0131n iskeletini bir \u00fcst s\u0131n\u0131fta tan\u0131mlar, ancak baz\u0131 ad\u0131mlar\u0131 alt s\u0131n\u0131flara b\u0131rak\u0131r.<\/li>\n<li><strong>Strateji (Strategy):<\/strong> Bir algoritma ailesini tan\u0131mlar, her algoritmay\u0131 ayr\u0131 bir s\u0131n\u0131fa koyar ve bunlar\u0131 bir aray\u00fcz arac\u0131l\u0131\u011f\u0131yla birbirine benzer \u015fekilde \u00e7a\u011fr\u0131lmas\u0131n\u0131 sa\u011flar. (Burada aray\u00fcz genellikle soyut s\u0131n\u0131flar veya kal\u0131t\u0131m ile olu\u015fturulur.)<\/li>\n<li><strong>Fabrika Metodu (Factory Method):<\/strong> Bir nesne olu\u015fturma aray\u00fcz\u00fc tan\u0131mlar, ancak hangi somut s\u0131n\u0131f\u0131n \u00f6rneklenece\u011fine alt s\u0131n\u0131flar karar verir.<\/li>\n<\/ul>\n<h3>Soyut S\u0131n\u0131flar (Abstract Base Classes &#8211; ABCs)<\/h3>\n<p>Python&#8217;daki soyut s\u0131n\u0131flar (ABCs), di\u011fer dillerdeki aray\u00fczlere benzer bir i\u015flevsellik sa\u011flar. Bir soyut s\u0131n\u0131f, kendisinden t\u00fcretilen t\u00fcm alt s\u0131n\u0131flar\u0131n belirli metotlar\u0131 uygulamalar\u0131n\u0131 zorunlu k\u0131lar. Bu, bir &#8216;s\u00f6zle\u015fme&#8217; tan\u0131mlaman\u0131n ve kodun tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flaman\u0131n harika bir yoludur.<\/p>\n<p><code>abc<\/code> mod\u00fcl\u00fc ve <code>@abstractmethod<\/code> dekorat\u00f6r\u00fc kullan\u0131larak soyut s\u0131n\u0131flar tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-python\">\nfrom abc import ABC, abstractmethod\n\nclass Sekil(ABC): # Soyut temel s\u0131n\u0131f\n    @abstractmethod\n    def alan_hesapla(self):\n        pass\n\n    @abstractmethod\n    def cevre_hesapla(self):\n        pass\n\nclass Kare(Sekil):\n    def __init__(self, kenar):\n        self.kenar = kenar\n\n    def alan_hesapla(self):\n        return self.kenar * self.kenar\n\n    def cevre_hesapla(self):\n        return 4 * self.kenar\n\n<h2>Kullan\u0131m<\/h2>\n<h2>sekil = Sekil() # Hata verir: Soyut s\u0131n\u0131f \u00f6rneklenemez<\/h2>\nkare = Kare(5)\nprint(f\"Karenin alan\u0131: {kare.alan_hesapla()}\")\nprint(f\"Karenin \u00e7evresi: {kare.cevre_hesapla()}\")\n    <\/code><\/pre>\n<p><code>Sekil<\/code> s\u0131n\u0131f\u0131 soyut oldu\u011fu i\u00e7in do\u011frudan \u00f6rneklenemez. <code>Kare<\/code> s\u0131n\u0131f\u0131, <code>Sekil<\/code>&#8216;den miras ald\u0131\u011f\u0131 i\u00e7in <code>alan_hesapla<\/code> ve <code>cevre_hesapla<\/code> metotlar\u0131n\u0131 uygulamak zorundad\u0131r. Aksi takdirde, <code>TypeError<\/code> hatas\u0131 al\u0131rs\u0131n\u0131z.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Kal\u0131t\u0131m, Python&#8217;da g\u00fc\u00e7l\u00fc ve esnek bir nesne y\u00f6nelimli tasar\u0131m arac\u0131d\u0131r. Kod tekrar\u0131n\u0131 azalt\u0131r, geni\u015fletilebilirli\u011fi art\u0131r\u0131r ve polimorfizmi m\u00fcmk\u00fcn k\u0131lar. Tekli ve \u00e7oklu kal\u0131t\u0131m\u0131 anlamak, <code>super()<\/code> fonksiyonunu do\u011fru kullanmak ve MRO&#8217;nun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 bilmek, temiz ve s\u00fcrd\u00fcr\u00fclebilir Python kodu yazman\u0131n anahtar\u0131d\u0131r. Ancak, kal\u0131t\u0131m\u0131 ne zaman kullanaca\u011f\u0131n\u0131z\u0131 ve ne zaman kompozisyon gibi alternatifleri tercih edece\u011finizi bilmek de ayn\u0131 derecede \u00f6nemlidir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt>Kal\u0131t\u0131m\u0131n temel amac\u0131 nedir?<\/dt>\n<dd>Kal\u0131t\u0131m\u0131n temel amac\u0131, kod tekrar\u0131n\u0131 azaltmak, mevcut s\u0131n\u0131flar\u0131n i\u015flevselli\u011fini geni\u015fletmek ve s\u0131n\u0131flar aras\u0131nda mant\u0131ksal bir &#8220;is-a&#8221; (bir \u015fey bir \u015feydir) hiyerar\u015fisi olu\u015fturarak kodun daha d\u00fczenli ve bak\u0131m\u0131 kolay olmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/dd>\n<dt>Python&#8217;da <code>super()<\/code> ne i\u015fe yarar?<\/dt>\n<dd><code>super()<\/code> fonksiyonu, alt s\u0131n\u0131ftan \u00fcst s\u0131n\u0131f\u0131n metotlar\u0131n\u0131 \u00e7a\u011f\u0131rmak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle <code>__init__<\/code> metotlar\u0131n\u0131 \u00e7a\u011f\u0131rarak \u00fcst s\u0131n\u0131f niteliklerinin do\u011fru bir \u015fekilde ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar ve metot ezme durumlar\u0131nda \u00fcst s\u0131n\u0131f\u0131n orijinal metoduna eri\u015fim imkan\u0131 sunar. \u00c7oklu kal\u0131t\u0131mda, MRO&#8217;ya uygun olarak bir sonraki \u00fcst s\u0131n\u0131f\u0131 bulur.<\/dd>\n<dt>\u00c7oklu kal\u0131t\u0131m her zaman iyi bir fikir midir?<\/dt>\n<dd>\u00c7oklu kal\u0131t\u0131m g\u00fc\u00e7l\u00fc bir \u00f6zellik olsa da, &#8220;elmas problemi&#8221; gibi karma\u015f\u0131kl\u0131klara yol a\u00e7abilece\u011fi i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r. Genellikle, \u00e7oklu kal\u0131t\u0131m yerine kompozisyon veya kar\u0131\u015f\u0131m (mixin) s\u0131n\u0131flar\u0131 gibi alternatifler daha temiz ve y\u00f6netilebilir \u00e7\u00f6z\u00fcmler sunabilir. Python&#8217;\u0131n MRO algoritmas\u0131 karma\u015f\u0131kl\u0131\u011f\u0131 y\u00f6netmeye yard\u0131mc\u0131 olsa da, tasar\u0131m\u0131n kendisi karma\u015f\u0131kla\u015fabilir.<\/dd>\n<dt>Kal\u0131t\u0131m yerine kompozisyon ne zaman tercih edilmeli?<\/dt>\n<dd>Kompozisyon, bir s\u0131n\u0131f\u0131n ba\u015fka bir s\u0131n\u0131f\u0131n &#8220;sahibi oldu\u011fu&#8221; veya &#8220;kulland\u0131\u011f\u0131&#8221; (&#8220;has-a&#8221;) bir ili\u015fkiyi ifade etti\u011finde tercih edilmelidir. \u00d6rne\u011fin, bir &#8220;Araba&#8221; s\u0131n\u0131f\u0131n\u0131n bir &#8220;Motor&#8221; nesnesine sahip olmas\u0131. Kompozisyon, daha esnek tasar\u0131mlar sa\u011flar \u00e7\u00fcnk\u00fc bile\u015fenler \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015ftirilebilir ve s\u0131n\u0131f hiyerar\u015fileri daha d\u00fcz kal\u0131r. Genel kural &#8220;kompozisyonu kal\u0131t\u0131mdan tercih edin&#8221; \u015feklindedir.<\/dd>\n<dt>Soyut s\u0131n\u0131flar (ABCs) ne i\u00e7in kullan\u0131l\u0131r?<\/dt>\n<dd>Soyut s\u0131n\u0131flar, bir aray\u00fcz (interface) tan\u0131mlamak ve kendisinden t\u00fcretilen t\u00fcm alt s\u0131n\u0131flar\u0131n belirli metotlar\u0131 uygulamalar\u0131n\u0131 zorunlu k\u0131lmak i\u00e7in kullan\u0131l\u0131r. Bu, bir &#8216;s\u00f6zle\u015fme&#8217; olu\u015fturarak kodun tutarl\u0131l\u0131\u011f\u0131n\u0131 ve \u00f6ng\u00f6r\u00fclebilirli\u011fini art\u0131r\u0131r. <code>abc<\/code> mod\u00fcl\u00fc ve <code>@abstractmethod<\/code> dekorat\u00f6r\u00fc ile tan\u0131mlan\u0131rlar.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Giri\u015f ve Temel Kavramlar\n    Nesne Y\u00f6nelimli Programlama (OOP), yaz\u0131l\u0131m geli\u015ftirmede yayg\u0131n olarak kullan\u0131lan bir paradigmad\u0131r ve Python","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34887","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f ve Temel Kavramlar - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f ve Temel Kavramlar\" \/>\n<meta property=\"og:description\" content=\"Giri\u015f ve Temel Kavramlar   Nesne Y\u00f6nelimli Programlama (OOP), yaz\u0131l\u0131m geli\u015ftirmede yayg\u0131n olarak kullan\u0131lan bir paradigmad\u0131r ve Python\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-23T05:41:20+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f ve Temel Kavramlar\",\"datePublished\":\"2025-11-23T05:41:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\"},\"wordCount\":1824,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\",\"name\":\"Giri\u015f ve Temel Kavramlar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-23T05:41:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f ve Temel Kavramlar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giri\u015f ve Temel Kavramlar - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f ve Temel Kavramlar","og_description":"Giri\u015f ve Temel Kavramlar   Nesne Y\u00f6nelimli Programlama (OOP), yaz\u0131l\u0131m geli\u015ftirmede yayg\u0131n olarak kullan\u0131lan bir paradigmad\u0131r ve Python","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-23T05:41:20+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f ve Temel Kavramlar","datePublished":"2025-11-23T05:41:20+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/"},"wordCount":1824,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/","name":"Giri\u015f ve Temel Kavramlar - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-23T05:41:20+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-ve-temel-kavramlar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f ve Temel Kavramlar"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34887"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34887\/revisions"}],"predecessor-version":[{"id":34888,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34887\/revisions\/34888"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}