NESNEYE YÖNELİK PROGRAMLAMA (OBJECT ORIENTED PROGRAMMING)
Nesneye yönelik programlama 1990’lı yılların ve günümüzün teknolojisidir ve büyük olasılıkla yakın gelecekteki programlama teknolojisi olmaya da devam edecektir.
Nesneye Yönelik Programlama, artık, 1970’lerdeki Yapısal Programlamanın (Structured Programming) yerini tamamı ile almıştır.
Nesneye yönelik programlamada, programlama ortamındaki her şey bir nesne olarak kabul edilmekte, nesnelerin özellikleri (Properties) değiştirilerek onlara yeni biçimler verilebilmektedir.
Ayrıca her nesnenin duyarlı olduğu olaylar (Events) mevcuttur. Her nesne üzerine uygulanabilecek farklı metotlar (Methods) oluşturulmuştur.
Yapısal Programlamada ağırlık programlama komutlarında iken, Nesneye Yönelik Programlamada yazılımcının ortamdaki nesneler, özellikleri, hassas oldukları olaylar ve nesnelere uygulanabilecek metotlar hakkında da detaylı bilgi sahibi olması gerekmektedir.
1980’lerin ortasında ortaya çıkan C++ , ilk nesneye yönelik programlama dili değildi ama en popüleri olmuştu ve bilindiği gibi C dilinin class (sınıf) yapısı ilave edilmiş ve nesneye yönelik programlama teorisinin kavramlarına göre tasarlanmış yeni sürümü idi ve çok yaygın olarak kullanıldı ve kullanılmaya da devam ediyor.
1990’ların başında, özellikle internet uygulamalarına yönelik özellikleri ile öne çıkan Java dili de saf (pure) bir nesneye yönelik programlama dilidir.
Objective C ise gerçekte nesneye yönelik bir dil olmayan C diline nesneye yönelik dillerin özellikleri yerleştirilerek oluşturulmuştur.
Swift dili de nesneye yönelik programlama özelliklerine sahip bir programlama dilidir.
Şimdi, nesneye yönelik programlama dillerinin teknik özelliklerini gözden geçirmeden önce, yukarıda belirtilen nesneye yönelik dillere yönelimin nedenini anlayabilmek için, nesneye yönelik programlama dillerinin yararlı taraflarını gözden geçirmek uygun olacaktır.
1)Yazılımın bakım (maintenance) kolaylığı
Nesneye yönelik programlama dillerinde, nesneler ait oldukları sınıfların sunduğu şablonlarla temsil edilirler. Birbirine benzer ya da aynı konu ile ilişkili sınıflar ise bir araya getirilerek namespace ya da package (paket) adı verilen sınıf kümeleri oluşturulur.
Bu durumda, yazılımın bakımı demek, ya mevcut sınıflarda değişiklik ya da yeni sınıf eklenmesi anlamına gelir ki bu da yazılımın tümünü hiç bir şekilde etkilemeyecek olan bir işlemdir.
Oysa klasik yapısal programlama dilleri ile geliştirilen yazılımlarda yazılımın bakım maliyeti üretim maliyetinin çok önemli bir yüzdesi kadardır (%40’lar civarında).
2)Genişletilebilirlik (extensibility)
Nesneye yönelik programlamada mevcut bir sınıfa yeni özellik ve metotlar ekleyerek artan işlevsellik sağlamak oldukça kolay bir işlemdir.
3) Üretilen kodun yeniden kullanılabilirliği (reusability)
Nesnelerin üretildiği sınıflar, ortam içinde her uygulama geliştiricinin kullanımına açık olduğu için ortak bir kütüphane oluşturulmuştur.
Her kullanıcı bu ortak kütüphanede bulunan sınıfları kullanarak gerekli kodu yeniden yazmaktan kurtulur ve uygulamaya özgü kod parçaları, ortak kullanımdaki sınıfların kod uzunluklarına göre önemsiz boyuttadır.
NESNEYE YÖNELİK PROGRAMLAMA TEORİSİNİN 4 TEMEL ÖZELLİĞİ
Nesneye Yönelik Programlama Teorisinde 4 temel özelliğin gerçekleştirilmesi zorunlu sayılmıştır ve bu temel özelliklerden birini bile sağlamayan bir dil saf (pure) Nesneye Yönelik Programlama Dili (NYPD) sayılmamaktadır.
Bu 4 temel özellik,
I. SOYUTLAMA (ABSTRACTION)
Soyutlama denilince, nesneyi, bazı karakteristikleri olan ve bazı eylemleri gerçekleştirebilen bir veri tipi olarak genelleştirmek anlaşılmalıdır.
Yeryüzü üzerinde bulunan her şey bir nesnedir. Bilgisayar yazılımı açısından nesne, bir varlığın temsil biçimidir. Örneğin, bir bina bir nesnedir.
Binayı bilgisayar yazılımı içinde temsil etmek istersek, öncelikle, bu nesnenin yani binanın ayırdedici özelliklerini belirlemeliyiz. Örneğin,
- -Bina yüksekliği,
- -Dış yüzey rengi,
- -Kat sayısı,
- -Zemin alanı,
- -Zemin boyutları
gibi özellikler, binayı temsil etmek için ilk akla gelen birkaç özelliktir. O halde nesnenin bilgisayarda temsilinde, özellikleri (properties) kilit rol oynamaktadır.
Nesnenin karakteristikleri özellikler (properties) ve gerçekleştirebileceği eylemler de metot (method) adını alır.
Bu anlamda, soyutlaştırmanın sonucunda bir nesne,
I. Özellikleri (properties, member variables)
II. Metotları (methods)
ile temsil edilebilir.
Nesneye Yönelik Programlama Dilleri, Soyutlamayı, sınıf (Class) yapısı ile gerçekleştirirler. Sınıf yapısı içinde o nesneye ait özellikler ve metotlar tanımlanabilir.
Ancak sınıf soyut bir yapıdır ve doğrudan kullanılamaz. O sınıftan üretilen örnekler (instance) sınıfa ait tüm özelliklere ve metotlara sahip olurlar ve bunlar program içinde doğrudan kullanılabilirler.
Sınıftan üretilen her örnek, aynı özellik ve metotlara sahip olacak ancak özelliklerin değerleri doğal olarak farklı olabilecektir.
Örneğin, insan bir nesne olarak düşünülürse ve insan sınıfı olarak soyutlanırsa, ilk akla gelen özellikleri, boy, kilo, IQ ve EQ değerleri, Eğitim düzeyi vb özelliklerdir ve bunların değerleri doğal olarak her insan için farklıdır.
İnsan için ilk akla gelen eylemler (metotlar) ise yürüme, okuma-yazma, konuşma, araç kullanma vb metotlardır.
II. PAKETLEME (ENCAPSULATION)
Paketlemenin anlamı, sınıfı oluşturan metot ve özelliklerin gerçekleştirim biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.
NESNE = VERİ + METOTLAR
Şeklinde ifade edilen bağıntı aslında nesneye yönelik programlamanın esasını açıklamaktadır. Veri (özellikler) ve veri üzerinde işlem yapan kod (metotlar) bir arada bulunur ve nesneyi oluşturur.
Nesneyi tanımlayan sınıfın iç ayrıntıları, normal olarak programın arta kalan kısmı için görünür değildir.
Bir nesne sınıfının gerçekleştirimini değiştirirseniz yani aynı sınıfı metot ve özellikleri aynı kalmak koşulu ile farklı bir programlama tekniği ile oluşturursanız, o sınıfın dış dünyaya olan arayüzü değişmediği sürece (yani metot ve özellikler aynı kaldığı sürece) bu sınıfı kullanan program kodlarınızda bir değişiklik yapmanıza gerek kalmayacaktır.
III. ÇOK BİÇİMLİLİK (POLYMORPHISM)
Farklı nesnelerin, aynı mesaja (olaya ya da uyarıma) farklı şekillerde cevap verebilme yeteneğidir.
Her nesne sınıfı, kendi metotlarını paketlediği için, ve bu metotlar programın arta kalan kısmı için gizli olduğundan farklı sınıflar aynı isimde bazı metotlara sahip olabilirler.
Örneğin, ŞEKİL adlı bir super sınıfımız olsun. Bu sınıftan, DAİRE, KARE ve ÜÇGEN adlı 3 alt sınıf türettiğinizi var sayalım. Bu alt sınıfların her biri kendi örneklerini çizmek için ÇİZ adlı bir metoda sahip olabilirler.
Fakat, her bir alt sınıf için bu metot aynı isimli (ÇİZ) olmasına rağmen, bu metodu devreye sokmak için gönderilecek mesajdan sonra her alt sınıfa ait nesne farklı bir şekil (yani kendini,yani bir üçgen, daire veya kare) çizecektir.
IV. MİRAS ALMA (INHERITANCE)
Nesneye yönelik programlamada, bir nesne,genellikle, bir nesne sınıfına ait bir örnektir (instance).
Örneğin, Albert Einstein, insan sınıfının bir örneğidir. Bir nesne sınıfından alt sınıflar (subclasses) oluşturulabiliyorsa, türetme özelliği (derivation) var demektir. Örneğin, insan sınıfı, canlı sınıfının bir alt sınıfıdır.
Kendisinden alt sınıf üretilen sınıfa, temel sınıf (base class) veya süper sınıf (super class) veya ebeveyn sınıf (parent class) adı verilir.
Alt sınıf (subclass) yerine çocuk sınıf (child class) terimi de kullanılmaktadır.
Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alıyorsa, burada miras alma (inheritance) özelliği vardır denir.
Bu anlamda, inheritance özelliğine sahip olan bir nesneye yönelik programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metotlarını (methods) aynen alırlar.
Sınıf türetebilme imkanı sayesinde bir nesne hiyerarşisi oluşturma imkanı doğmaktadır.
NESNE DENİNCE NE ANLIYORUZ?
Nesne,içinde VERİ ve bu veriler üzerinde işlem yapacak olan METOTLARI (fonksiyon) bulunduran yazılım bileşenidir. Nesne, yukarıdaki tanıma uygun olarak, kendi işlevselliğini içinde taşır. Nesneler her uygulamada tekrar tekrar kullanılabilir.
VERİ ve METOTLAR birlikte nesnenin üyeleri (MEMBERS) adını alır. Bir nesne yapısı, bir sınıf (CLASS) içinde tanımlanır.
Sınıf içinde nesneyi oluşturan üye değişkenler ve metotlar açıkça tanımlanır.
SINIF (CLASS) OLUŞTURMA
Aşağıdaki Swift kodu ile, topla adlı bir sınıf oluşturulmuştur. Bu sınıfın bir değişkeni (özelliği - property) ve iki adet metodu (ii() ve t()) mevcuttur.