(OOP) Nesne Yönelimli Programlama Konsepti

Serkan Topkan
8 min readJun 8, 2023

Gelin OOP konseptini birlikte anlamaya çalışalım.

“Düşün, Tasarla, Nesnele: Programlamada OOP’nin Gücü!”

OOP nedir?

OOP, bir programlama paradigmasıdır. Bu yaklaşım, programlamayı nesnelere (objelere) dayalı bir şekilde düşünmeyi ve bu nesneler arasındaki etkileşimleri modellemeyi amaçlar.

Maddeler ile OOP :

- Nesne Yönelimli Programlama anlamına gelir.
- Nesneler üzerine kuruludur.
- Gerçek dünyaya dayanır.
- Veri gizleme sağlar, bu nedenle çok güvenlidir.
- Yeniden kullanılabilirlik özelliği sağlar.

OOP, büyük ölçekli ve karmaşık projelerin geliştirilmesinde avantaj sağlar. Nesne yönelimli programlama sayesinde kod daha modüler, daha okunabilir ve daha sürdürülebilir hale gelir. Ayrıca, yazılımı daha iyi organize etmeye, hata ayıklamayı kolaylaştırmaya ve kodun yeniden kullanılabilirliğini artırmaya yardımcı olur.

Sınıf nedir?

Sınıf, nesnelerden oluşan bir koleksiyondur. Sınıflar bellekte herhangi bir alan tüketmez.

Aynı türden nesneler oluşturmak için bir şablon görevi gören kullanıcı tanımlı bir veri türüdür.

Aynı sınıf kullanılarak çok sayıda nesne oluşturulabilir. Bu nedenle Sınıf, nesnenin planı olarak kabul edilir.

Nesne nedir?

Nesne, özellikleri ve işlevleri olan gerçek bir dünya varlığıdır. Nesne aynı zamanda sınıfın bir örneği olarak da adlandırılır. Nesneler bellekte bir miktar yer kaplar.

Örneğin:
Meyve bir sınıftır ve nesneleri mango, elma, muzdur.

Mobilya bir sınıftır ve nesneleri masa, sandalye, masadır.

Peki; Class ile Object arasındaki fark nedir?

Class

  1. Nesnelerden oluşan bir koleksiyondur.
  2. Bellekte yer kaplamaz.
  3. Sınıf fiziksel olarak mevcut değildir.
  4. Sınıflar sadece bir kez bildirilir.

Object

  1. Bir sınıfın örneğidir.
  2. Bellekte yer kaplar.
  3. Nesne fiziksel olarak mevcuttur.
  4. Nesneler gerektiği gibi ve gerektiği zaman bildirilebilir.

Structure nedir?

Structure, programlama terimlerinden biridir ve verileri birleştirerek daha karmaşık bir veri tipi oluşturmaya yarayan bir yapıdır. Yapılar, farklı veri türlerini (örneğin, tam sayılar, karakter dizileri, kayan nokta sayıları) içerebilen ve birbiriyle ilişkili olan verileri gruplamak için kullanılır.

Class ile Structure arasındaki fark nedir?

Class

  1. Sınıf bir nesne koleksiyonudur.
  2. Sınıf, veri ve yöntemleri bir araya getirmek için kullanılır.
  3. Sınıfın nesneleri heap bellek üzerinde oluşturulur.
  4. Bir sınıf başka bir sınıfı miras alabilir.
  5. Bir sınıfın tüm üyeleri varsayılan olarak özeldir.
  6. Sınıflar daha büyük veya karmaşık nesneler için idealdir.

Structure

  1. Yapı, aşağıdaki değişkenlerin bir koleksiyonudur tek bir birim altında farklı veri türleri.
  2. Yapı, verileri gruplamak için kullanılır.
  3. Yapının nesneleri yığın bellek üzerinde oluşturulur.
  4. Bir yapı başka bir yapıyı miras alamaz.
  5. Bir yapı varsayılan olarak tüm üyelere sahiptir.
  6. Yapılar, küçük ve izole model nesneler için idealdir.

Aşağıda OOP’nin temel prensipleri yer almaktadır.

Encapsulation

Kapsüllemenin temel avantajı, verilerin gizlenmesi ve bir sınıfın üyesi olmayan dış metotlar tarafından rastgele erişime karşı korunmasıdır.
Kapsülleme, veri ve metotları tek bir birimde bağlama işlemidir.
Kapsüllemede veriler (değişkenler) private olarak, yöntemler ise public olarak bildirilir.

Erişim belirleyici nedir?

Bir paketin, sınıfın, yapıcının, yöntemlerin, değişkenlerin veya diğer veri üyelerinin kapsamını veya görünürlüğünü kısıtlamamızı sağlar.

En yaygın kullanılan üç tür erişim belirticisi vardır;

  • Public
  • Private
  • Protected

Public :

Sınıfın, değişkenin veya metodun sınıf içinden veya dışından, paket içinden veya dışından vb. erişilebilir olduğu anlamına gelir.

En yüksek düzeyde erişilebilirlik sağlar.

Private :

Sınıf, değişken veya metodun sınıf içinden veya dışından, paket içinden veya dışından erişilebilir olmadığı anlamına gelir.

“Private” erişim belirteci, bir sınıfın içinde veri gizliliğini ve güvenliğini sağlamak için kullanılır.

Özel alan veya yöntem alt sınıfa miras bırakılamaz. Bu en düşük seviyede erişilebilirlik sağlar.

Protected :

“Protected” erişim belirteci, nesneler arasında kalıtım (inheritance) ilişkisi kurulduğunda ve alt sınıfların temel sınıfın verilerine veya işlevlerine erişmesi gerektiğinde kullanılır.

Bu sayede, alt sınıflar, temel sınıfın “protected” olarak işaretlenmiş öğelerini kullanabilir ve üzerinde değişiklik yapabilir. Ancak, “protected” olarak işaretlenen öğeler, sınıfın dışındaki diğer kod parçaları tarafından erişilemez ve değiştirilemez.

Abstraction

Gereksiz verilerin kullanıcıdan gizlenmesini sağlar. Bu, program karmaşıklığını azaltır.

Kullanıcıya yalnızca gerekli bilgileri gösterir ve tüm iç ve arka plan ayrıntılarını gizler.

Programlama dilinde veri soyutlamasından bahsedecek olursak, kod uygulaması kullanıcıdan gizlenir ve kullanıcıya sadece gerekli işlevsellik gösterilir veya sağlanır.

Başka bir deyişle, bir nesnenin (Arayüz) dış görünümü ile ilgilenir.

Örn.
-Herkes ATM makinesinde para çekme vb. işlemler gerçekleştirir ancak ATM’nin iç ayrıntılarını bilemez.

İki yol izleyerek veri soyutlamasına ulaşabiliriz.

1. Abstract sınıf
2. Interface

Abstract sınıf nedir?

Soyut sınıf, soyut yöntem içeren sınıftır. Soyut metotlar, sadece bildirimi olan, uygulaması olmayan metotlardır. Soyut bir sınıf abstract anahtar sözcüğü ile bildirilir. Soyut bir sınıf soyut olmayan metotlar da içerebilir.

Unutmayalım ki soyutlama olmasa günlük konuşma dili de olamazdı hatta şiir bile yazamazdık.

Inheritance

Kalıtım, bir sınıfın başka bir sınıfın niteliklerini ve yöntemlerini miras aldığı prosedürdür. Başka bir deyişle, mevcut sınıfın özelliklerini veya davranışlarını yeni bir sınıfa kazandırma mekanizmasıdır.

Ana Sınıf olarak da bilinen Temel Sınıf, diğer sınıfların kendisinden türetildiği bir sınıftır.

Çocuk Sınıf olarak da bilinen Türetilmiş Sınıf, mevcut bir sınıftan oluşturulan bir sınıftır

OOP’de dört tür kalıtım vardır:

- Tek Seviyeli Kalıtım
- Hiyerarşik Kalıtım
- Çok Düzeyli Kalıtım
- Çoklu Kalıtım
- Hibrit Kalıtım

Tek Seviyeli Kalıtım

Bir sınıf sadece tek bir sınıfın özelliklerini ve davranışlarını miras aldığında.
Başka bir deyişle, tekli kalıtımda yalnızca bir temel sınıf ve yalnızca bir alt sınıf vardır.

Hiyerarşik Kalıtım

Birden fazla sınıf sadece bir sınıfın özelliklerini ve davranışlarını miras aldığında Hiyerarşik Kalıtımda sadece bir ebeveyn ve birçok çocuk sınıf vardır

Çok Düzeyli Kalıtım

Bu kalıtım türünde, türetilmiş bir sınıf başka bir türetilmiş sınıftan oluşturulur.

Çoklu Kalıtım

Multiple inheritance (Çoklu kalıtım), bir programlama dilinde bir sınıfın birden fazla üst sınıftan özelliklerini ve davranışlarını miras alabilmesine olanak sağlayan bir özelliktir. Çoklu kalıtım, nesne yönelimli programlamada kullanılan bir kalıtım türüdür.

Normalde bir sınıf, sadece tek bir üst sınıftan miras alabilir (tekil kalıtım). Ancak çoklu kalıtım, bir sınıfın birden fazla üst sınıftan miras alabilmesine izin verir. Bu durumda, alt sınıf, birden fazla üst sınıfın özelliklerini, yöntemlerini ve davranışlarını devralır.

Çoklu kalıtım, bazı programlama dillerinde desteklenirken, bazı dillerde desteklenmez. Örneğin, C++ çoklu kalıtımı desteklerken, Java ve C# çoklu kalıtımı doğrudan desteklemez. C#’da, çoklu kalıtım yerine birden fazla arayüz (interface) uygulaması kullanılabilir.

Hibrit Kalıtım

Hibrit kalıtım, birden fazla kalıtım türünün bir kombinasyonudur.

Polymorphism

Çok biçimlilik, bir nesnenin birçok biçime bürünebilme yeteneğidir.
Çok biçimliliği, bir mesajın birden fazla biçimde görüntülenebilmesi olarak tanımlayabiliriz.

Çok biçimliliğin gerçek hayattan bir örneği olan bir adam aynı zamanda bir baba, bir koca ve bir çalışandır.

Çok biçimliliğin bir başka iyi gerçek zaman örneği de sudur. Su normal sıcaklıkta bir sıvıdır, ancak donduğunda katıya dönüşebilir veya aynı su kaynama noktasında ısıtıldığında bir gaza dönüşür, bu nedenle aynı suyun farklı roller sergilemesi polimorfizmdir.

Polimorfizm temel olarak iki türe ayrılır:

Derleme zamanı çok biçimliliği (CTP)
Statik polimorfizm veya erken bağlama olarak da adlandırılır.

Çalışma Zamanı Çokbiçimliliği (RTP)
Buna dinamik çok biçimlilik veya geç bağlama da denir.

Polimorfizm Türleri:

1. Derleme zamanı çok biçimliliği:
Bu tür çok biçimlilik, fonksiyonları aşırı yükleme veya operatörü aşırı yükleme ile elde edilir.

Fonksiyon aşırı yükleme:

Aynı isimde ancak farklı parametrelere sahip birden fazla fonksiyon olduğunda, bu fonksiyonların aşırı yüklendiği söylenir. Fonksiyonlar, argüman sayısı ve/veya argüman tipi değiştirilerek aşırı yüklenebilir.
Aynı isme sahip birden fazla yöntem aynı sınıf içinde farklı görevleri yerine getirir.

2. Çalışma zamanı çok biçimliliği:

Çalışma zamanı çok biçimliliği, geçersiz kılınmış bir işleme yapılan çağrının çalışma zamanında çözümlendiği süreci ifade eder.
Bu tür çok biçimlilik Fonksiyon Geçersiz Kılma ile elde edilir.

İşlev Geçersiz Kılma:

Öte yandan, türetilmiş bir sınıf, temel sınıfın üye işlevlerinden biri için bir tanıma sahip olduğunda ortaya çıkar.
Aynı isme sahip metotlar farklı işlevlere sahip olabilir. Bu temel fonksiyonun geçersiz kılındığı söylenir.

Soyut Sınıflar ve Arayüzler Arasındaki Farklar

Mülakatlar da çıkan bu meşhur sorunun doğru olmadığını düşünüyorum. Farklı amaçlar için var olan iki yapıyı kıyaslamak Elma-Armut kıyaslamasından öteye gitmeyecektir.

Statik fonksiyon nedir?

Statik fonksiyonlar, sınıfın bir nesnesini oluşturmadan çağrılabilen fonksiyonlardır. Yani, Statik metotlar tanımlandıkları sınıfın herhangi bir nesnesinin örnek değişkenlerini kullanmazlar. Hafızanın heap alanında saklanırlar.

Sanal fonksiyonlar nedir?

Sanal fonksiyon, çok biçimliliği sağlamak için aynı imzaya sahip miras alınan bir sınıftaki fonksiyonun davranışını geçersiz kılmak için kullanılan bir fonksiyon veya yöntemdir. Sanal fonksiyon temel sınıfta tanımlanır ve miras alınan sınıfta geçersiz kılınır.

Özel fonksiyonlar geçersiz kılınamayacağı için Sanal fonksiyon özel olamaz. Çalışma zamanı çok biçimliliği elde etmek için kullanılır.

Constructor nedir?

Constructor, bir nesneyi başlatmak için kullanılan özel bir üye fonksiyon türüdür. Fonksiyonlara benzer ancak ismi sınıf ismi ile aynı olmalıdır ve açık bir geri dönüş tipi olmamalıdır.

Sınıfın bir nesnesi oluşturulduğunda çağrılır. Yapıcı çağrılırken, nesne için bellekte yer ayrılır. Nesne oluşturma sırasında sınıf değişkenlerine değer atamak için yapıcıyı kullanırız.

Yapıcı türleri nelerdir?

- Varsayılan kurucu
- Parametrelendirilmiş kurucu
- Kopyalama kurucusu
- Statik kurucu
- Özel kurucu

Varsayılan kurucu nedir?

0 parametreye sahip bir kurucu varsayılan kurucu olarak bilinir.

Özel kurucu nedir?

Bir kurucu private olarak bildirilirse, sınıftan bir nesne oluşturamayız.

Kopya kurucu nedir?

Kopya kurucu, yeni bir nesne oluşturmak için mevcut nesneyi kullanan kurucudur. Yeni bir nesne oluşturmak için aynı sınıftaki başka bir nesneden değişkenleri kopyalar.

Statik kurucu nedir?

Statik kurucu, ilk örnek oluşturulduğunda veya herhangi bir statik üyeye başvurulduğunda otomatik olarak çağrılır.
Statik kurucu, static anahtar sözcüğü kullanılarak açıkça bildirilir

Destructor nedir?

Destructor, bir nesneyi yok etmek için kullanılan bir üye işlev türüdür.
Nesne kapsam dışına çıktığında veya bir delete çağrısı ile açıkça yok edildiğinde otomatik olarak çağrılır. Nesneler artık kullanılmadığında onları yok eder.

Bir yıkıcı, önünde tilde (~) işareti bulunan sınıfla aynı ada sahiptir.

Shallow Copy ve Deep Copy

Shallow Copy ve Deep Copy, Prototype Tasarım Deseninde nesnelerin kopyalanmasında önemli rol oynar.

Shallow Copy

Shallow Copy durumunda, yeni nesneyi mevcut nesneden oluşturacak ve ardından geçerli nesnenin değer türü alanlarını yeni nesneye kopyalar.

Ancak referans türü durumunda, başvurulan nesnenin kendisini değil, yalnızca referansı kopyalar.

Bu nedenle, referans tipi durumunda orijinal ve klon aynı nesneye atıfta bulunur.

Deep Copy

Deep copy durumunda, mevcut nesneden yeni nesneyi oluşturur ve ardından mevcut nesnenin alanlarını yeni oluşturulan nesneye kopyalar. Alan bir değer türüyse, alanın bit bit kopyası gerçekleştirilir. Alan bir referans türüyse, başvurulan nesnenin yeni bir kopyası oluşturulur.

Doğru mimari ile tasarlanmış, doğru kodlanmış, doğru test edilmiş, esnek ve kolay güncellenebilir projeler dilerim herkese :)

--

--