Programlama

Nesneye Dayalı Programlama

Swift Dersleri

Nesneye dayalı programlamanın ( OOP ) asıl amacı gerçek hayattaki olguların programlamaya aktarılma yöntemidir. Klasik programlamada veriler ve bu verileri işleyen methodlar vardı. OOP’de ise gerçek hayattaki olguların detaylı olarak incelenerek programlamada veriler olarak saklanıp kullanılmasına fırsat verilmektedir.

Mesela bir arabamız olsun. Arabamızını markası, modeli, motor gücü, rengi ve hızı gibi bir çok özelliği vardır. Bu özellikler işlememiz gereken verilerdir. Aynı zamanda arabamızı çalıştırabilir, durdurabilir ve sürebiliriz. Bu tarz işlevler de methodlardır. Eğer biz bir ‘Araba’ sınıfı oluşturup nesneye dayalı programlamayı uygulasarsak. Arabanın özelliklerini veriler, işlevlerini fonksiyonlar olarak kullanıp programımıza kolaylıkla entegre edebiliriz. Ayrıca Araba sınıfı oluşturduğumuz için bu sınıftan nesneler oluşturup farklı farklı arabalar da üretebiliriz. OOP’nin bize sağladığı kolaylıklar bunlardır.

Nesneye dayalı programlamanın 3 temel prensibinden bahsedelim ;

  1. Encapsulation ( Kapsülleme )
  2. Polymorphism ( Çok biçimlilik )
  3. Inheritance ( Kalıtım )

Encapsulation ( Kapsülleme )

Kapsülleme verilerin ve işlemlerin dış etkilerden korunmasını, bir grup içinde toplanmasına denir. Kapsülleme sayesinde sınıfımız içinde kullandığımız alanların dışarıdan herhangi bir etki ile değiştirilmesini engellemiş oluruz. Bu durum bizim istediğimiz dışında oluşabilecek atamaların önüne geçmemize ve eğer bir atama yapılacaksa da bizim belirlediğimiz şekilde olmasına imkan sağlayacaktır. Bu özelliklerde nesne tabanlı programlamada kontrolün elimizde olmasını sağlıyor.

Inheritance ( Kalıtım )

Kalıtım için bir sınıfın bir başka sınıftan türetilerek oluşturulmasıdır diyebiliriz. Yeni oluşturulan sınıf miras aldığı üst sınıfın değişkenlerine ve methodlarına istediği zaman erişip kullanabilir. Bu durum da nesneye dayalı programlamada bir çok kolaylığı yanında getiriyor. Örneğin araçları düşünürsek araba, otobüs, kamyonet birer araçtır. Birbirlerinden farklı olsalarda hepsi birer araç olduğu için ortak noktaları da vardır. İşte bu ortak noktaları her bir sınıf için ayrı ayrı yazmaktansa Araç isimli bir üst sınıf oluşturup ortak özellikleri bu sınıfta toplayabiliriz.

Üstteki kodumuzda Arac sınıfını oluşturduk. Aynı kategoride olan Araba,Otobus ve Kamyonet sınıflarını da bu sınıftan miras alarak oluşturduk.

Ana sınıfımızda da nesneleri oluşturup her bir sınıfın üst sınıfta tanımlanmış olan değişkenlerine erişip değer ataması yapabildiğini görüyoruz. Ortak özellikler dışında kendisine özgü özellikleride her bir sınıf için kendi içinde tanımlamasını yapıp işleminizi yapabilirsiniz.

Birde burada şundan bahsedebiliriz. Genelde iOS ve mac OS sınıfları NSObject sınıfından miras alır. Eğer bir kod temeliniz var ise swift sınıflarını da NSObject’den miras alarak oluşturabilirsiniz. Swift sınıflarında NSObject’den miras almanız size objective-c deki derleme esnasında esneklik sağlar fakat performansdan ödün verirsiniz. Eğer objective-c’nin esnekliğine gerek duymuyorsanız NSObject kullanmayıp performansdan öne çıkabilirsiniz.

Polymorphism ( Çok biçimlilik )

Polymorphism ( çok biçilmlilik ) bir A türünün bir başka tür olan B gibi davranabilme ve bu tür gibi kullanılabilme özelliğidir. Nesne yönelimli programlama dillerinde çok biçimlilik özelliği ise aynı temel sınıfdan türetilmiş olan sınıflarda paylaşılan aynı metodun bu sınıflarda farklı şekillerde uyarlanabilmesidir.

Yukarıdaki örnekte bahsettiğimiz gibi Araba,Otobüs,Kamyonet hepsi birer araçtır. Biz bu sınıfları Araç sınıfından miras alarak oluşturmuştuk. Araç sınıfının içinde bir aracın koltuk sayısını belirlediğimiz bir methodumuz vardı buna ek olarak maksimum hızını alabilmek için de bir method oluşturalım. Bu methodların içerikleri Araba,Otobüs ve Kamyonet için farklılık gösterebileceği için bu methodları yine bu sınıfların içinde override edip yeniden dolduruyoruz. Ve oluşturulan nesnelerden çağırdığımız aynı methodlardan farklı sonuçlar alabiliriz

 

Yukarıda üst sınıfımız olan Arac ve diğer alt sınıflarımızı oluşturduk. Ve ortak olan bir methodu tum sınıflarda override edip içini doldurduk.

Main sınıfta da üstteki kodu çalıştırdığımız da çok biçimliliği sağlamış oluyoruz. Üst sınıftaki bir methodu bütün alt sınıflar kendilerine göre override edip kullandılar. Ve ekran çıktıları;

Koltuk sayısı : 4

Koltuk sayısı : 22

Koltuk sayısı : 3

Şeklinde olacaktır.

Konunun anlaşılması bakımından farklı bir örnek üstünde daha çalışalım;

Yeni örneğimiz de Counter,Terrorist ve Gun sınıflarımız var. Gun sınıfını üst sınıf olarak tanımladık ve içine ortak kullanılan silahları ve atak güçlerini girdik

Daha sonra Terrorist ve Counter sınıflarında bu silahları ve vuruş gücünü kullandık.

hem Counter için hem Terrorist için sabit bir Hp ve bunun yanında silah ve isim değişkenleri tanımladık ve silah ve isim değişkenlerini init methodu içinde aldık. Her ikisi içinde birer nesne oluştururken kullanıcıdan silah ve isim girdilerini alalım ki kimin kime ateş ettiğini hangi silahla ateş ettiğini bilelim ve gelen hasara göre Hp değerini düşürelim.

Tabi birde Atack fonksiyonu oluşturduk ve kullacının seçtiği silahın vuruş gücüne göre Atack fonksiyonu içinde düşman oyuncunun hp değerini azalttık.

Bunun dışında birde silah değiştirme methodu oluşturduk isteğe göre silahını değiştirebilsin diye.

Terrorist sınıfında da farklı bir şey yok sadece Atack fonksiyonunda Enemy parametresinin tipini Counter yaptık.

Ana sayfamızda da nesnelerimizi oluşturup methodlarımızı çağırdık. İki counter iki terrorist nesnesi oluşturup birbirlerine ateş ettirdik.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu