Swift ile Nesne Tabanlı Programlama

Merhabalar Arkadaşlar,

Bugün sizlere Object-Oriented-Programming(Nesne Tabanlı Programlama)’yı gerçek hayattan örnekler vererek anlatacağım ve temelini oluşturan kavramlardan bahsedeceğim.

Nesne Tabanlı Programlama Nedir?

1960 yılından günümüze en etkili ve en uzun süredir yaşamını devam ettiren bir programcılık yaklaşımıdır. Bir çok dil Nesne Tabanlı Programlama yaklaşımını kabul ederek gelişmiştir. Bu dillere örnek vermek gerekirse; Java, C#, C++, Kotlin, Objective-C ve 2014 yılında tanıtılan Swift.

Nesne Tabanlı Programlama’nın bize sunduğu avantajlardan bazıları;

Simplicity (Basitlik)

Projede oluşturulan nesnelerin hepsinin kendine özel amacı vardır. Projede kullanılmayacak olan bir nesne oluşturulmaz. Bu şekilde karmaşıklığın azalmasını sağlanır ve proje yapısı daha anlaşılır hale gelir.

Modularity (Modülerlik)

Farklı görevler için farklı fonksiyonlar hatta çoğu zaman da farklı nesneler oluşturulması anlamına gelir. Her bir sınıfın kendi görevi vardır.

Scalability (Genişletilebilirlik)

Bir sınıfa veya fonksiyona yeni özellikler eklemek istendiğinde, bu işlem oldukça hızlı ve kolay yapılabilir.

Maintainability (Bakımı Yapılabilirlik)

Nesnelerin bakımı kolaylıkla yapılabilir, bir sorunun belirlenmesi ve çözümlenmesi çok daha kolaydır.

Reusability (Tekrar Kullanılabilirlik)

Nesneler ve fonksiyonlar, farklı bir yazılım projesinde veya aynı proje içerisinde farklı yerlerde kullanılabilir.

Bilgiler biraz teorik mi kaldı acaba?

Nesne Tabanlı Programlama, aslında yabancı olduğumuz bir kavram değil. Gerçek dünyadaki nesneleri düşünün. Araba, kitap, insan, ağaç, vs. Dünyadaki her nesnenin kendi özellikleri ve kendisine özgü işlevleri vardır. Nesne Tabanlı Programlama da gerçek hayattaki bu nesnelerden ilham alınarak geliştirilmiştir.

İşte gerçek hayattan birkaç nesne örneği;

TurkishKit — Gerçek Hayattan Nesneler

Bu kavramı daha iyi anlayabilmek için yukarıdaki nesnelerin özellik ve işlevlerini inceleyelim;

TurkishKit — Nesnelerin Özellik & İşlevleri

Bu tablo size çok tanıdık gelmiş olabilir ancak Nesne Tabanlı Programlama mantığında nesnelerin özellik ve işlevleri temel alarak kod geliştirmek vardır. Yazılım dünyasında nesnelerin özellikleri property (özellik)olarak adlandırılır.

Aşağıdaki şemada nesne — sınıf karşılaştırmasını daha iyi görebilirsiniz;

TurkishKit — Nesne / Sınıf Karşılaştırması

Şemanın sol tarafı gerçek hayatta bulunan nesneleri ifade ediyor. Nesnelerin özellik ve işlevleri olduğundan bahsetmiştim. Sağ tarafta ise nesnelerin Swift ve diğer dillerdeki karşılığı olan Class (Sınıf) yapısını görüyoruz. Nesnelerin gerçek hayattaki özellikleri yazılım dünyasında değişken ve sabit’ler ile ifade edilirken işlevler ise fonksiyonlar ile ifade edilir.

Nesne Nedir?

Nesne, içinde veri ve bu veriler üzerinde işlem yapacak olan fonksiyonları bulunduran, gerçek hayattan esinlenilmiş bir yazılım bileşenidir. Nesneler her uygulamada tekrar tekrar kullanılabilir. Değişkenler ve fonksiyonlar, birlikte nesnenin üyeleri (members) adını alır. Bir nesne yapısı, bir Class (Sınıf) içerisinde tanımlanır. Sınıf içerisinde nesneyi oluşturan değişkenler ve fonksiyonlar tanımlanır.

İşte size İnsan adında bir Swift Sınıfı;

TurkishKit — İnsan Sınıfı

Temel Kavramlar

Swift gibi gelişmiş diller, Nesne Tabanlı Programlama yaklaşımını destekleyebilmek için bazı özellikler sunar. Bunlar;

Encapsulation (Sarmalama / Paketleme)

Bir sınıf, değişkenlerden ve fonksiyonlardan oluşur. Swift dilinde oluşturulan sınıfların değişken ve fonksiyon gibi iç ayrıntıları, varsayılan olarak tüm projeniz tarafından görünür haldedir. Access modifier (erişim belirteçleri) ile hangi değişkenin veya fonksiyonun kimler tarafından görülebileceğine karar verirsiniz. Bazı erişim belirteçleri: private (gizli), public (herkese açık)


Encapsulation hakkında detaylı yazının linki çok yakında burada!

Inheritance (Kalıtım)

Kalıtım, bir nesnenin(sınıf) diğer bir nesnenin özelliklerini kazanmasıdır. Diğer bir deyişle, bir sınıfın başka bir sınıftaki bazı değişken veya fonksiyonlara erişebilmesidir. Bu kavramı en iyi şekilde anlayabilmen tek yolu basit bir örnektir.


Örnek: Yukarıdaki İnsan sınıfını düşünelim. İçerisinde ad, soyad, yaş gibi her insanın sahip olduğu bazı özellikleri bulunduruyor. Bir Üniversite yazılımı geliştirdiğimizi hayal edelim. Bu tür bir projenin çok farklı kullanıcı türleri olacaktır. Örneğin; öğrenci, akademisyen, personel vs. Tüm kullanıcılar da insandır ve hepsinin İnsan sınıfındaki özellikleri taşıması gerekir. Bu durumda Öğrenci adındaki bir sınıf İnsan sınıfından türer. Bu şekilde öğrenci sınıfı, İnsan sınıfında bulunan tüm özelliklere sahip olur.

TurkishKit — Ogrenci.swift
Inheritance hakkında detaylı yazının linki çok yakında burada!

Polymorphism (Çok Biçimlilik)

Üst sınıfta tanımlanmış bir fonksiyonun, alt sınıflar tarafınca davranış biçiminin değiştirilerek kullanılmasıdır. Kısaca farklı nesnelerin, aynı fonksiyona farklı şekillerde cevap verebilme yeteneğidir.

Örnek: Şekil adında bir sınıfımız olsun. Bu sınıf aşağıdaki gibidir;

TurkishKit — Sekil.swift

alaniHesapla() adındaki fonksiyonunun henüz doğru bir değer döndürmediğine dikkat edin. Şimdi ise ise bu sınıftan türeyen Kare ve EskenarUcgen adında iki yeni sınıfımız olsun.

Bir şeklin alan hesabı şekilden şekile değişeceği için Kare ve EskenarUcgen adındaki alt sınıflarımız, üst sınıflarının alaniHesapla fonksiyonunu override (yeniden tanımlama) etti. Böylece üst sınıfı Sekil olan tüm sınıflar için geçerli olan bu fonksiyon, Kare ve diğer şekillerin alanını hesaplarken farklı yollar izleyecek.

Polymorphism hakkında detaylı yazının linki çok yakında burada!

Nesne Tabanlı Programlama ile ilgili bugünlük anlatacaklarım burada son buluyor. Umarım sizler için yeterince açıklayıcı olmuştur. İlerleyen yazılarda görüşmek üzere! 🤓