Nesne yönelimli programlama (Object Oriented Programming) kisaca NYP gün geçtikçe karmasikligi ve büyüklügü artan yazilimlarin daha kolay ve kisa sürede gerçeklestirilebilmesi için yapisal programlamaya alternatif olmasi için ortaya çikarilmis bir programlama yaklasimidir. Modern programlama dilleri tarafindan desteklenen bu yaklasim sayesinde yazilim tasarimi ve bakimi kolaylastigi gibi bu süreçlerin zaman ve çaba bakimindan maliyeti düsürmüstür. NYP yaklasimi felsefesinde siniflar ve nesneler bulunur.
Duru’nun tanimlamasina göre "nesne, gerçek dünyada var olan veya programci tarafindan yaratilmis mantiksal bir varliktir. Nesne, kendisini tanimlayan veriler ve bu veriler üzerinde yapilacak tüm islemler ile bir bütün olarak düsünülmüstür. Ayni gruptan nesnelere genel bir isim verilip yeni bir veri türü yaratilmaktadir. Bir genelleme olan bu yapi "Sinif" olarak adlandirilir. Nesneye yönelik programlama Veri Soyutlama (data abstraction), Katilim (inheritance) ve Çok-Biçimlilik (Polymorphism) seklinde üç temel yapi üzerine oturmaktadir." [Duru-2008]
1.a Sinif ve Nesne Kavramlari
Sinif (Class) bir bütün olusturacak sekilde ortak vasiflara sahip üyelerin meydana getirdigi bir bütündür. Siniflar, günlük yasantimizda belirli kriterlere göre bölümlemenin yapildigi durumlarda olusur. Nesne (Object) ise etramizda gördügümüz ve "sey" olarak tanimladigimiz varliklardir. Örnegin; masa, kalem, otomabil, sen ve ben birer nesnedir.
Nesnelerin özellik (property) ve davranis (behavior) olarak iki temel bileseni bulunur; nesne, modellendigi sinifin vasiflarini tasir. Dolayisiyla her nesne türetildigi sinifin karakterini ve davranislarini tasir. Sinif "Degisken, Fonksiyon, Yordam(Method), özellik(Property), olay(Event) ve yapici(Constructor) gibi ögeleri barindiran belirli bir amaç için gelistirilmis kod kümesidir."
Sinif nesneyi tanimlayan ve ona ait özellikleri ortaya koyan bir veri türüdür. Nesne ise bir siniftan olusturdugumuz ve özelliklerini belirledigimiz canli modeldir; bir varliktir. Sinif tanimlamasinda sonra olusturulmus parçalardir. Programlama literatüründe nesne veri ve islev bölümlerinden olusmaktadir.
Kisacasi, sinifi bir mimarin çizdigi ev projesine, nesneyide bu projeden yapilmis ve duvari örtülmüs bir eve benzetebilir. Bu proje kullanilarak istenildigi kadar ev yapilabilir.
Nesnenin modern programlama için anlamini ve önemini anlamak için nesneye neden ihtiyaç duyuldugunu bilmek yararli olur. Yazilim tarihinin ilk dönemlerinde yordama dayali programlama (PBP: Procedure Based Programming) yaklasimi kullanilmaktaydi. Yapisal programlama olarak ta bilinen bu sisteme verinin kendisini degil islemin sonucu önemlidir. Temelinde fonksiyonlarin bulundugu bu yöntemde programci, tüm algoritmayi sirali bir sekilde gelistirir. Her sey tek bir bilesende yazildigi için büyük çapli programlarin yazilmasi ve yönetilmesi zordur; ayrica programlar hata yönetiminde net ipuçlari vermez. Birimlerin birbirine mesaj gönderimi veya alimi gibi yetenekleri yoktur. Bu kodlama biçiminin önceligi, uygulamayi hizli çalistirmak ve kaynaklari verimli kullanmaktir. Fortran, Cobol, Ada ve Basic gibi diller bu yöntemi destekliyordu.
1960;li yillarda böylesi geleneksel yönteme alternatif olarak Nesneye Dayali Programlama (OOP – Object Oriented Programming) gelistirildi. “Nesne Yönelimli” veya “Nesneye yönelik” olarak ta tanimlanan OOP, gerçek yasamdan esinlenmis olup merkezde nesneyi temel kabul eden, parçadan bütüne giden daha yetenekli ve esnek bir çözüm sunar. Gerçek yasamdaki nesne kavramini programlama ortamina uyarlayan, program içinde siniflar olusturan, onlara özellik ve davranislar kazandiran, yönetimi kolay kod yapisi sunan bir sistemdir. OOP yönetiminde programci, tasarim asamasinda öncelikle programin fonksiyonlardan degil hangi nesnelerden olusacagina karar verir. Ilk defa 1970 yilinda gelistirilen smalltalk diliyle tanimlanan OOP, 1980;lerde C++;in çikisiyla daha net sekillenmistir.
Not : Programla dili literatüründe Nesne Yönelimli Programlama (Object Oriented Programming) ve Nesne Tabanli Programlama (Object Based Programming) Kavramlari arasinda küçük bir fark vardir.
OOP;nin amaci, kisa sürede programcilarin verimliligini arttirip is süreçlerini daha iyi organizi etmektir. OOP sayesinde, program kodlari bölümlere ayrilmis, rutin islemler paket haline getirilip yeniden yazilmaksizin farkli birimlerde kullanilmasina izin vermis, programciya kodlarin bakim ve yönetim sürecinde zaman kazandirmistir. Daha çok ekip halinde gelistirilen büyük projelerde tercih edilen OOP yönetimi, kisa sürede bir çok yazilim projesine ivme kazandirmistir. PBP’de disardan alinmis bir kodun tam olarak hangi ögelerden olustugunu, neler yaptigini anlamak zordu fakat OOP, bunun için özel yöntemler sunar. Bunlarla birlikte bellek ve islemci kullanimi açisindan PBP kadar etkin oldugunu söyleyemeyiz.
Program yaziminda hangi yöntemin kullanilacagi tamamen programin gelistirilme ve kullanilma çapina baglidir. OOP, mutlaka kullanilmasi gereken bir yöntem degildir; fakat sagladigi avantajlardan dolayi özellikle kurumsal uygulamalarda tercih nedeni olmaktadir.
Hangi yöntemle program gelistirilirse gelistirilsin öncelikli is programin iyi kurgulanmasidir. Bu yüzden OOP, proje gelistirme sürecinde kod yazma sürecini kisaltip olayin çözümleme, tasarim ve modellen dirilmesinde öncelik tanir. Yazilim gelistirmenin üç temel süreci vardir. Tasarlama, Gelistirme, ve Test etme, Tasarlama asamasinda sürecin basini temsil eder. Iyi tasarlanmis bir programin, gelistirme ve yönetim süreçleri daha hizli gerçeklesecektir. Iyi bir tasarimin yolu OOP’den geçer.
Yazilim Yasam Döngüsü
Nesne yönelimli programlamanin olumlu yanlari sunlardir:
- Problemlerin gerçek yasamdaki gibi modellenmesi
- Kodlarin okunabilir ve anlasilir olmasi
- Kod bloklarin korunmasi ve gerektiginde ulasilabilir olmasi
- Yeni veri türlerin olusturulabilir olmasi
- Hata olusma ihtimalinin azalmasi
- Programin bakiminin kolaylasmasi
- Gerektiginde degisikligin hizli ve kolayca yapilmasi
- Kodlarin yeniden kullanilabilir olmasi
- Takim çalismasini desteklemesi.
OOP programcinin, bilgisayar gibi degil insan gibi düsünmesini saglayan bir yaklasim biçimdir. Bu yöntem ögrenildikten sonra bu yöntemi destekleyen herhangi bir programlama diliyle kod yazmak hiç de zor olmayacaktir.