Programlama Dili
Kavramları
11. Hafta
İçerik
• OOP Kavramları
• Java Nesne ve Sınıflar
• Java Metotlar
• Java Constructor
• Java Static Anahtar Kelimesi
• Python Nesne ve Sınıflar
OOP Kavramları
• Nesne kalem, sandalye, masa, bilgisayar, saat vb. gibi gerçek dünyadaki bir
varlık anlamına gelir. Nesneye Yönelik Programlama sınıfları ve nesneleri
kullanarak bir program tasarlamak için bir metodoloji veya paradigmadır. Bazı
kavramlar sağlayarak yazılım geliştirme ve bakımını basitleştirir:
• Nesne (Object)
• Sınıf (Class)
• Miras (Inheritance)
• Polimorfizm (Polymorphism)
• Soyutlama (Abstraction)
• Kapsülleme (Encapsulation)
OOP Kavramları
• Nesne (Object)
• Durumu ve davranışı olan herhangi bir varlık bir
nesne olarak bilinir. Örneğin, bir sandalye,
kalem, masa, klavye, bisiklet vb. Fiziksel veya
mantıklı olabilir.
• Nesne, bir sınıfın örneği olarak tanımlanabilir. Bir
adres içerir ve bellekte biraz yer kaplar.
Nesneler, birbirlerinin verilerinin veya kodlarının
ayrıntılarını bilmeden iletişim kurabilir. Gerekli
olan tek şey, kabul edilen mesaj türü ve
nesneler tarafından döndürülen yanıt türüdür.
OOP Kavramları
• Sınıf (Class)
• Nesne koleksiyonuna sınıf (class) denir. Sınıf, mantıksal bir varlıktır.
• Bir sınıf, bireysel nesneler oluşturabileceğiniz bir şablon (blueprint) olarak da
tanımlanabilir. Sınıflar bellek tüketmez.
• Kalıtım(Inheritance)
• Bir nesne, bir üst nesnenin tüm özelliklerini ve davranışlarını aldığında buna
kalıtım (inheritance) denir.
• Kalıtım, kodun yeniden kullanılabilirliğini sağlar ve çalışma zamanı çok
biçimliliğini (runtime polymorphism) gerçekleştirmek için kullanılır.
OOP Kavramları
• Polimorfizm (Polymorphism)
• Polimorfizm (Çok biçimlilik), bir görevin farklı şekillerde
gerçekleştirilmesi anlamına gelir.
• Örnekler:
• Bir şey çizmek (örneğin: daire, üçgen, dikdörtgen vb.).
• Hayvanların farklı sesler çıkarması (örneğin: kedi "miyav" der,
köpek "hav" der).
• Java Polimorfizmi gerçekleştirmek için metot aşırı yükleme (method
overloading) ve metot geçersiz kılma (method overriding) kullanılır.
• Python'da polimorfizm, genellikle miras (inheritance) ve method
overriding kullanılarak gerçekleştirilir. Ayrıca, Python'un dinamik yapısı
sayesinde interface veya soyut sınıf zorunluluğu olmadan da
polimorfizm sağlanabilir.
OOP Kavramları
• Soyutlama (Abstraction)
• Soyutlama (abstraction), iç işleyişi gizleyerek yalnızca kullanıcıya gerekli
işlevselliği göstermektir.
• Örnek:Telefon görüşmesi: Aramanın nasıl işlendiğini bilmeyiz, sadece arama
yaparız.
• Java'da soyutlamayı gerçekleştirmek için abstract class (soyut sınıf) ve interface
(arayüz) kullanılır.
• Python’da abc(Abstract Base Class) modülü kullanılır.
• Kapsülleme(Encapsulation)
• Kapsülleme (encapsulation), kodu ve veriyi tek bir birim içinde bağlama işlemidir.
OOP Kavramları
• Nesne Yönelimli Programlamanın (OOP) Prosedürel Programlamaya Göre Avantajları
• Kodun Yeniden Kullanımı (Code Reusability) OOP, kalıtım (inheritance)
sayesinde mevcut kodun yeniden kullanılmasını sağlar. Prosedürel programlamada
kod tekrarını önlemek için fonksiyonlar kullanılır, ancak OOP'deki gibi nesne tabanlı
bir yapı sunmaz.
• Veri Gizliliği ve Güvenlik (Data Hiding & Security) OOP, kapsülleme
(encapsulation) kullanarak verileri gizleyebilir ve yalnızca gerekli olanları açığa
çıkarır. Prosedürel programlamada tüm veriler genellikle erişime açıktır, bu da
güvenlik riskleri oluşturabilir.
• Bakım Kolaylığı (Easy Maintenance & Modification) OOP, kodu modüler hale
getirir. Bir sınıfta yapılan değişiklik diğer sınıfları etkilemez. Prosedürel programlama
ise daha karmaşıktır; bir değişiklik tüm kodu etkileyebilir.
OOP Kavramları
• Nesne Yönelimli Programlamanın (OOP) Prosedürel Programlamaya Göre Avantajları
• Gerçek Dünya Modellemesi (Real-World Modeling) OOP, nesne ve sınıf yapıları
sayesinde gerçek dünyadaki nesneleri daha iyi temsil eder (örneğin: araba, insan,
hesap vb.).Prosedürel programlama, işlemleri sırayla uygular ve gerçek dünyayı
modellemek için daha az uygun olabilir.
• Çok Biçimlilik (Polymorphism) OOP, aynı işlemin farklı şekillerde
gerçekleştirilmesini sağlar (method overloading ve overriding).Prosedürel
programlamada benzer işlevler için ayrı ayrı fonksiyonlar yazılması gerekir.
• Büyük Projelerde Daha Etkin (Better for Large Projects) OOP, büyük ve
karmaşık projelerde bile yönetilebilir, genişletilebilir ve ölçeklenebilir bir yapı
[Link]ürel programlama küçük projeler için uygundur ancak büyüdükçe
yönetimi zorlaşır.
Java Nesneler ve Sınıflar
• Nesne yönelimli programlamada, nesne ve sınıf programlamada hayati bir rol oynar. Bunlar
OOP'un iki ana direğidir. Nesne ve sınıf olmadan Java'da bir program oluşturamayız.
• Nesne, durumu ve davranışı olan gerçek kelimeli bir varlıktır. Başka bir deyişle, bir nesne, bir
araba veya sandalye vb. dokunabilecek ve hissedebilecek somut bir şeydir, nesnelere örnektir.
Bankacılık sistemi somut olmayan bir nesneye örnektir.
• Her nesnenin, genellikle JVM'nin tanımlama için dahili olarak kullandığı benzersiz bir kimlik
tarafından uygulanan farklı bir kimliği vardır.
• Bir Nesnenin Özellikleri:
• Durum: Bir nesnenin verilerini (değerini) temsil eder.
• Davranış: Para yatırma, çekme vb. Gibi bir nesnenin davranışını (işlevsellik) temsil eder.
• Kimlik: Bir nesnenin kimliği genellikle benzersiz bir kimlik aracılığıyla uygulanır. Kimliğin değeri
harici kullanıcı tarafından görülemez; ancak, her nesneyi benzersiz bir şekilde tanımlamak için JVM
tarafından dahili olarak kullanılır.
Javada Nesneler ve Sınıflar
• Java'da Sınıf nedir?
• Sınıf, ortak özelliklere sahip bir nesne grubudur. Nesnelerin oluşturulduğu bir
şablon veya taslaktır.
• Java'daki bir sınıf şunları içerebilir:
class <class_name>{
field;
method;
Javada Nesneler ve Sınıflar
• New Anahtar kelimesi
• New anahtar kelime, çalışma zamanında bellek ayırmak için kullanılır. Java'da,
nesne olarak da adlandırılan bir sınıf örneği new anahtar kelime kullanılarak
oluşturulur.
• new anahtar kelimesi, bir sınıfın bir nesnesi için dinamik olarak bellek tahsis
eder ve sınıf adından sonra parantez içinde isteğe bağlı argümanlarla
kullanıldığında, bu nesneye bir referans döndürür.
Javada Nesneler ve Sınıflar
• Nesneleri Başlatma
• Java'da bir nesneyi başlatmanın üç
yolu vardır:
• Referans Değişkeni ile Başlatma
• Metot ile Başlatma
• Kurucu (Constructor) ile
Başlatma)
• Referans Değişkeni ile Başlatma
Bir nesneyi başlatmak, nesneye veri
atamak anlamına gelir.
Javada Nesneler ve Sınıflar
• Nesneleri Başlatma
• Metot ile Başlatma
• Bu yöntemde, nesnenin
değişkenlerini başlatmak için bir
metot kullanılır.
Javada Nesneler ve Sınıflar
• Nesneleri Başlatma
• Kurucu (Constructor) ile
Başlatma
• Java'da bir nesneyi başlatmanın en
yaygın ve etkili yollarından biri
constructor (yapıcı metot)
kullanmaktır.
• Kurucular (constructors), bir sınıftan
yeni bir nesne oluşturulduğunda
otomatik olarak çağrılan özel
metotlardır.
• Constructor'lar:Sınıf ile aynı isme
[Link] dönüş tipi (return type)
içermez. Nesne oluşturulurken
Javada Nesneler ve Sınıflar
• Nesneleri Oluşturmanın Farklı Yolları
• ClassName obj = new ClassName();.
• ClassName obj = (ClassName)
[Link]("ClassName").newInstance();.
• ClassName obj2 = (ClassName) [Link]();.
• Serileştirilmiş bir nesne bir dosyadan veya ağdan okunur
ve ardından readObject() metodu çağrılarak nesne tekrar
oluşturulur.
• ObjectInputStream in = new ObjectInputStream(fileIn);
Student s2 = (Student) [Link](); // Nesneyi tekrar
oluştur.
• ClassName obj = [Link]().
Javada Metotlar
• Bir metot, belirli bir işlemi gerçekleştiren bir kod bloğudur. Java'da kodun tekrar
kullanılabilirliğini sağlamak için kullanılır. Bir metot bir kez yazılır ve birden fazla
kez çağrılarak kullanılabilir.
• Metotların Avantajları
• ✔ Kod Tekrarını Önler → Aynı işlemi yapmak için tekrar tekrar kod yazmak yerine
metot kullanılır.
• ✔ Kolay Güncellenebilirlik → Tek bir yerde değişiklik yaparak tüm çağrılarda
güncellenmesini sağlar.
• ✔ Kodun Okunabilirliğini Artırır → Uzun kod bloklarını parçalara ayırarak kodun
daha anlaşılır olmasını sağlar.
• ✔ Bakımı Kolaydır → Büyük projelerde düzeni sağlar.
Javada Metotlar
• Metot Tanımlama
• Metot Adlandırma
• Tek kelimelik yöntem adı: sum(), area()
• Çok sözcüklü yöntem adı: areaOfCircle(), stringComparision()
Javada Metotlar
• Ön Tanımlı Metotlar • Kullanıcı Tanımlı Metotlar
Javada Metotlar
• Statik Metotlar:
• Static anahtar sözcüğüne sahip bir
yöntem statik yöntem olarak bilinir.
• Statik bir metodun ana avantajı, bir
nesne oluşturmadan
çağırabilmemizdir. Statik veri üyelerine
erişebilir ve ayrıca değerini
değiştirebilir. Bir örnek metot
oluşturmak için kullanılır. Sınıf adı
kullanılarak çağrılır. Statik metotlara
en iyi örnek main() metodudur.
Javada Metotlar
Metot Overloading Metot Overriding
• Metot aşırı yükleme, Java'da aynı • Metot geçersiz kılma, bir alt sınıfın
isimde ancak farklı parametre üst sınıfında zaten tanımlanmış olan
listelerine sahip birden fazla bir metot için özel bir uygulama
metodun aynı sınıf içinde var sağlamasıyla gerçekleşir. Bu,
olmasına izin veren bir özelliktir. Java'daki çok biçimliliğin önemli bir
Kodun esnekliğini ve okunabilirliğini yönüdür ve alt sınıfların miras alınan
artırır. yöntemlerin davranışını
özelleştirmesine veya
genişletmesine olanak tanır.
Javada Metotlar
Metot Overloading Metot Overriding
Javada Constructorlar
• Constructorlar Java’da bir sınıf örneği
oluşturulduğunda çalışan ilk fonksiyondur.
Constructor bloğu tanımlanmış olmasa bile java
varsayılan bir constuctor fonksiyon ile nesneyi
oluşturarak bellekte nesneye yer ayırır.
• Java Constructor Oluşturma Kuralları
• Bir constructor tanımlamak için aşağıdaki
kurallar vardır:
• Constructor ismi sınıf ismi ile aynı olmalıdır.
• Bir Constructor'ın açık bir dönüş tipi olmamalıdır.
• Bir Java constructor'ı abstract, static, final ve
synchronized olamaz.
Java static anahtar kelimesi
• static anahtar kelimesi javada esas olarak bellek yönetimi için kullanılır. static anahtar
kelimesini değişkenler, metotlar, bloklar ve iç içe geçmiş sınıflar için kullanabiliriz. static
anahtar sözcüğü sınıfın bir örneğinden ziyade sınıfa aittir.
• Bellek yönetiminin ötesinde, Java'da static anahtar sözcüğünün başka kullanımları da vardır.
• Değişkenler söz konusu olduğunda, değişkenin sınıfın tüm örnekleri tarafından paylaşıldığı ve
yalnızca herhangi bir örneğe değil, bir bütün olarak sınıfa ait olduğu anlamına gelir.
• Statik yöntemler, önce sınıfın bir örneğini oluşturmadan çağrılabildikleri için program boyunca
kullanılabilir.
• Sınıf yüklendiğinde, statik bloklar statik değişkenleri başlatmak veya tek seferlik işlemleri
gerçekleştirmek için kullanılır.
• Ayrıca, iç içe geçmiş statik sınıflar ayrı ayrı örneklendirilebilir ancak yine de dış sınıfla
bağlantılıdır.
• Ayrıca, sınıf adları statik değişkenlere ve yöntemlere doğrudan erişmek için kullanılabilir ve bir
nesne örneği oluşturma ihtiyacını ortadan kaldırır. Bu özellikle sabitler veya yardımcı metotlar
için faydalıdır
Java static anahtar kelimesi
• Java static değişkenler:
• Herhangi bir değişkeni static olarak tanımlarsak, bu değişken static değişken olarak
bilinir.
• Statik değişken, tüm nesnelerin ortak özelliğine (her nesne için benzersiz olmayan)
başvurmak için kullanılabilir, örneğin, çalışanların şirket adı, öğrencilerin üniversite
adı vb.
• Statik değişken, sınıf yükleme esnasında sınıf alanında yalnızca bir kez belleğe alınır.
• Java'daki statik değişkenler, programcı tarafından açıkça başlatılmamışsa varsayılan
değerlere de başlatılır. Sınıfın bir örneğini oluşturmaya gerek kalmadan doğrudan
sınıf adı kullanılarak bunlara erişilebilir.
• Statik değişkenler sınıfın tüm örnekleri arasında paylaşılır, yani bir statik değişkenin
değeri bir örnekte değiştirilirse, bu değişiklik diğer tüm örneklere de yansıyacaktır.
Java static anahtar kelimesi
• Java static değişkenler:
Java static anahtar kelimesi
• Java static metotlar:
• Herhangi bir metoda static anahtar
sözcüğünü uygularsak, bu metot static
metot olarak bilinir.
• Statik bir yöntem, bir sınıfın
nesnesinden ziyade sınıfa aittir.
• Statik bir yöntem, bir sınıfın örneğini
oluşturmaya gerek kalmadan
çağrılabilir.
• Statik bir yöntem statik veri üyelerine
erişebilir ve bunların değerlerini
değiştirebilir.
this Anahtar Kelimesi
• Java'da this anahtar kelimesi, bir sınıfın mevcut örneğini (instance) temsil eder.
• Bir sınıfın özelliklerine (fields) erişmek için kullanılır. Özellikle, parametre isimleri
ile sınıfın özellikleri aynı olduğunda, this kullanarak belirsizliği giderebilirsiniz.
• Bir sınıfın bir constructor'ından başka bir constructor'ı çağırmak için this kullanılır.
Bu, kod tekrarını önlemek için kullanışlıdır.
• Bir metodun mevcut nesneyi döndürmesi gerektiğinde this kullanılır.
• Bir inner class içinde, dış sınıfın örneğine erişmek için this kullanılır. Ancak, inner
class'ın kendi this'i ile karışmaması için [Link] şeklinde kullanılır.
• Bir metoda mevcut nesneyi parametre olarak geçirmek için this kullanılır.
• this anahtar kelimesi, static metotlar veya static bloklar içinde kullanılamaz çünkü
static context'te bir nesne örneği yoktur.
Python Nesne ve Sınıflar
• Python Encapsulation, Inheritance, Polymorphism, Abstraction gibi OOP’nin temel
özelliklerini destekleyen bir programlama dilidir.
• Python’da sınıf tanımlamak için aşağıdaki syntax kullanılır.
• class Araba:
• def __init__(self, marka, model):
• [Link] = marka
• [Link] = model
• def hareket_et(self): # Sınıf metodu (Method)
• print("Araba hareket ediyor.")
• 🆕 Python’da new var mı?
• Hayır, Java'daki gibi new kullanılmaz.
• Nesne oluşturmak için sınıf adı ve parantezler yeterlidir:
• arac = Araba("Honda", "Civic") # new gerekmez
Python Nesne ve Sınıflar
• Sınıftan nesne (object) oluşturmak, sınıfın bir örneğini yaratmak anlamına gelir.
• arac1 = Araba() # Araba sınıfından bir nesne oluşturuyoruz
• arac1.hareket_et() # Çıktı: Araba hareket ediyor.
• 🚀 Nesneleri Başlatma Yolları
• Referans Değişkeni İle Başlatma
• arac1 = Araba("Ford", "Focus")
• Constructor(Yapıcı Metot) ile başlatma
• araba = Araba("Toyota", "Corolla")
• Metot ile Nesne Başlatma
• araba1 = Araba()
• araba1.bilgileri_ayarla("Toyota", "Corolla")
• [Link]()
Python Nesne ve Sınıflar
• `self` Parametresi
• `self`, sınıf içindeki metodlara ve niteliklere erişim sağlar. Her metodun ilk parametresi olarak
yer alır.
• `self`, o sınıfa ait nesnenin kendisini temsil eder.
Python Nesne ve Sınıflar
• Sınıf Nitelikleri ve Nesne Nitelikleri
• Sınıf Niteliği (Class Attribute)
• Sınıf nitelikleri, sınıfın tüm örnekleri (nesneleri) tarafından paylaşılır. Sınıfın kendisine
ait olan bu nitelikler, sınıfa ait tüm nesnelerde aynı olur.
• Nesne Niteliği (Instance Attribute)
• Nesne nitelikleri, sadece o nesneye özgüdür. Her nesnenin kendi niteliği olur.
Python Nesne ve Sınıflar
• Metodlar
• Bir sınıf içinde tanımlanan
fonksiyonlara metod denir.
• Metodlar, sınıfın davranışlarını
tanımlar ve o sınıfın nesneleri ile
etkileşimde bulunur.
• Nesne Metodları
• Nesne metodları, sınıfın her bir örneği
(nesnesi) tarafından kullanılabilen
metodlardır. self parametresi ile
nesnenin niteliklerine ve diğer
metodlarına erişim sağlar.
Python Nesne ve Sınıflar
• Metodlar
• Sınıf Metodları
• Sınıf metodları, sınıfın kendisine ait olan
ve sınıf niteliklerine erişim sağlayan
metodlardır. @classmethod dekoratörü
ile tanımlanır ve ilk parametre olarak cls
alır.
• Statik Metodlar
• Statik metodlar, sınıfın herhangi bir
niteliğine veya metoduna erişmeyen,
bağımsız fonksiyonlar gibi çalışan
metodlardır.
• @staticmethod dekoratörü ile tanımlanır.
Python Nesne ve Sınıflar
• Metot Aşırı Yükleme (Overloading)
• Python native olarak method overloading desteklemez. Ancak default
(varsayılan) parametreler veya *args / **kwargs gibi esnek argümanlar
kullanılarak benzer davranışlar sağlanabilir.
Python Nesne ve Sınıflar
• Method
Overriding
(Metot
Geçersiz
Kılma)
• Python methot
overrideing tam
desteklenir. Alt
sınıflar, üst
sınıfın
metotlarını
geçersiz
kılabilir:
Python Nesne ve • Python’da statik değişkenler, Java’dakine benzer
şekilde çalışır ancak Python’un dinamik yapısı nedeniyle
Sınıflar bazı farklılıklar içerir.
• Statik değişkenler, bir sınıfın tüm örnekleri
(instance’ları) tarafından paylaşılan değişkenlerdir. Bu
değişkenler, sınıfın kendisine aittir ve her bir nesne için
ayrı ayrı oluşturulmaz.
• Statik Değişken Tanımlama
• Python’da statik değişkenler, sınıf tanımı içinde (ancak
metodların dışında) tanımlanır. Bu değişkenler, sınıfın tüm
örnekleri tarafından erişilebilir ve paylaşılır.
• Statik Değişkenlerin Özellikleri
• Paylaşım: Statik değişkenler, sınıfın tüm örnekleri tarafından
paylaşılır. Bir örnek üzerinden değiştirildiğinde, diğer örnekler
de bu değişiklikten etkilenir.
• Bellek Yönetimi: Statik değişkenler, sınıf yüklendiğinde bir kez
yaratılır ve tüm örnekler tarafından kullanılır. Bu, bellek
kullanımını optimize eder.
• Erişim: Statik değişkenlere hem sınıf adı üzerinden
(MyClass.static_var) hem de örnekler üzerinden
(obj1.static_var) erişilebilir.