Nesneye Yönelik Programlama

Nesneye yönelik programlamanın temel kavramları.
31 Ocak 2010
Nesneye Yönelik Programlama (NYP), günümüzde en yaygın kullanılan programlama yaklaşımlarından biridir. NYP, programcının çözümü geliştirirken problem ve çözüm kümelerini nesneler ve bu nesneler arasındaki ilişkiler olarak tanımlaması ilkesine dayanır.  Yani gerçek yaşamın belirli bir kesitinin, nesneler ve nesneler arasındaki ilişiler olarak program birimlerine dönüştürülmesidir.
 
NYP’nin en temel kavramları olan nesne, sınıf, kalıtım, çok biçimlilik, kapsülleme gibi kavramların iyi anlaşılması, NYP’nin iyi anlaşılması için önemlidir. Bu konuda programlama dilleri tarafında neyin ne olduğu çok kesin olarak bellidir. Ancak kavramsal tarafta kaynakların üzerinde uzlaştığı tanım bulmak çok kolay değildir.

Aşağıda en temel NYP kavramlarını ve bu kavramlarla ilgili benim yorumladığım tanımları bulabilirsiniz.
 
NESNE:
Nesneye yönelik programlama yaklaşımının temelini “nesne” kavramı oluşturmaktadır.  Nesne, kendine has özellikleri olan ve özelliklere bağlı olarak belirli bir durumda bulunarak çeşitli tutumlar sergileyen somut ya da soyut varlıklardır. Bu tanım, “somut” kısmıyla gerçek yaşamdaki nesneler için de geçerlidir. Ancak gerçek yaşamda ”nesne” olarak nitelendirmediğimiz işlem, sipariş, talep gibi kavramlar programlama ortamında nesne olarak tanımlanabilirler. Bu da tanımın “soyut” diye ifade ettiği bölümü oluşturur.
Her nesnenin bir durumu vardır. Durumla ifade edilmek istenen şey, nesnenin özelliklerinin belirli bir andaki değerlerinin tümüdür. Özellikler nesnenin karakteristiğini, kalitesini, vasıflarını belirtir. Örneğin bir masanın metal, ahşap ya da cam oluşu o masanın özelliklerinden biridir ve masayı nitelendirir.  Bir masanın yükseklik, en, boy, biçim, ağırlık, malzeme türü gibi birçok niteliği olabilir.
Tutum, nesnelerin kendilerine gelen mesajlara verdikleri cevaplar ve etkilere gösterdikleri tepkilerden oluşur. Tutum o nesnenin "yapabileceklerinin/davranışlarının” görünür olanlarıdır. Tutumlar programlama dillerinde kendilerini metotlar ve olaylar (events) olarak gösterir.
Kimlik (identity), nesneyi diğer örneklerinden ayıran özelliğidir. Bir nesnenin tüm örnekleri aynı şablondan oluştuklarından aynı özelliklere sahiptirler. Ancak bu özelliklerden bir tanesi, alacağı değerler bakımından örneği diğerlerinden ayırabilir olmalıdır. Böylece o sınıftan oluşturulmuş nesnelerin birbirlerinden ayırıcı birer kimlikleri oluşturulabilir.

SINIF:
Gerçek yaşam perspektifinden bakıldığında sınıf, aynı türden nesnelerin oluşturduğu bir kümedir. Etrafımızda birçok araba görürüz ve bu arabaları “araba” olarak sınıflandırarak konuşur, tanımlarız. Benzer şekilde ev, yol, semt gibi birçok türde nesneyi bir arada temsil ederek nitelendiririz.  Programlama perspektifinden bakıldığındaysa sınıf, bir nesnenin özelliklerini ve davranışlarını tanımlayan şablondur; nesnenin kodlanmış halidir ve geliştirme zamanıyla ilgilidir. Kullanılan programlama diline bağlı olarak farklılık gösterse de, nesnenin durumunu taşıyacak olan özelliklerin neler olacağı, hangi veri tiplerinde oldukları; nesnenin tutumunu belirleyecek olan olayların ve metotların isimleri, alacakları parametreler ve çağırıldıklarında ne yapacakları sınıf içinde kodlanarak tanımlanır.
Gerçek yaşamda her nesne bir sınıfın üyesi olarak karşımıza çıkmaktadır. Programlama açısından bakıldığındaysa nesneler sınıf şablonu kullanarak bellekte yapılandırılırlar. Bu işleme sınıfın ya da nesnenin bir örneğinin türetilmesi adı verilir.

METOT:
Bir nesnenin yapabileceklerini, o nesnenin metotları belirler. Dışarıdan erişilebilir bir arayüze sahip olan ve fonksiyon olarak tanımlanan isimlendirilmiş kod blokları, nesnenin metotlarıdır. Metotlar parametreli ya da parametresiz olarak tasarlanabilirler. Parametresiz bir metot, sadece ismi çağırılarak kullanılabiliyorken, parametreli bir metodu çağırmak için, metodun beklediği parametreleri uygun şekilde yollamak gerekir. Bazı metotlar çağırıldıklarında sadece tanımlanmış belirli bir işlevi yerine getirirler. Bazı metotlarsa kendilerini çağıran nesneye geri yönde bir mesaj yollarlar.
 
MESAJ İLETİMİ:
Bir nesnenin başka bir nesneye bilgi göndermesi, o nesneden bilgi istemesi ya da bir iş yapmasını söylemesi mesaj iletimi olarak nitelendirilmektedir. Bu programlama açısından bir nesnenin diğer metodu çağırmasıdır. Bir nesne diğer bir nesnenin metodunu çağırırken, ona en azından metodun adını mesaj olarak iletir. Eğer çağırılan metot, parametreli bir metotsa, bu sefer mesajı iletecek nesne, mesajı alacak olan nesneye, metodun adıyla birlikte belirlenmiş veri tiplerinde parametre değerlerini de içeren daha kapsamlı bir mesaj yollar. Eğer metot geri dönüşlü bir metotsa, bu sefer çağırılan nesne, çağıran nesneye bir mesaj yollayacaktır. Mesaj iletimi, nesneler arasındaki iletişim şeklidir.
 
KALITIM:
Kalıtım en basit tanımıyla, bir sınıfın belirli özellik ve tutumlarını bir üst sınıftan alarak, kendisi için farklı olan özellik ve tutumları ayrıca uyguluyor olmasıdır. Bu tanımdaki bir üst sınıf ilişkisi, genel sınıflandırma mantığı içinde bir hiyerarşiyi ifade eder. Bunu bir örnekle anlatacak olursak, bir kedi, üst sınıf olarak “kedigiller”e aittir. Bunun da üzerinde etoburlara, memelilere, omurgalılara ve en üstte hayvanlar sınıfına dahildir. Kedi, en üstteki “hayvan” sınıfından başlayarak her bir alt sınıfta bir takım özellikleri özelleşerek, en sonunda kendi sınıfına ait özelliklere sahip olur.
Programlama açısından kalıtım, sınıfın özelliklerinin üst sınıflara ait genel olanları yeniden kodlamaya gerek duymaksızın, üst sınıflardan devralması anlamına gelmektedir. Böylece genel özellikler ve tutumlar üst sınıflardan (parent) gelirken, yazılımcı sadece sınıfa ait olan durum ve tutumları programlar. Bu durumda belirli durum ve tutumları miras alınan sınıfa ebeveyn (parent) ya da süper (super) sınıf denir. Üst sınıfın bir alt sınıfı yani mirasçısı olarak tanımlanan yeni sınıfa da alt sınıf (subclass) adı verilir.
Örneğin Kaynak adında bir sınıfı ele alalım. Bu sınıfın amacı bir kütüphanedeki öğelerin tümünü temsil etsin. Kütüphanedeki her bir öğe için, onun yerini ve kategorisini belirleyen bir kodu olacaktır. Bu durumda “Kod” özelliği Kaynak nesnesinin kimlik özelliği olarak karşımıza çıkar. Ayrıca bu kaynağın kütüphanedeki yerini belirleyen bir “Yer” özelliği de olabilir. Sonuçta elimizde kod ve yer özelliği olan bir sınıf bulunmaktadır. Şimdi kütüphanedeki kitaplar için kaynak sınıfından türetilmiş bir “Kitap” sınıfı oluşturulduğunu düşünün. Bu Kitap sınıfının doğal olarak ebeveyninden miras aldığı bir Yer ve Kod özelliği olacaktır.  Buna ek olarak belki de kitap türündeki kaynaklar için yazar, yayınevi, sayfa sayısı, basım sayısı vb. gibi bilgiler tutmak istenebilir. İşte bu durumda bu yeni özellikler, yeni sınıfa ait, özelleştirilmiş üyelerdir.
Java ve C# gibi bazı programlama dilleri tek bir sınıftan miras almayı desteklerken C++ birden fazla sınıftan miras almayı destekler.
 
SOYUTLAMA:
Nesnenin uygulama için gerekli olan özelliklerinin kodlanarak, diğer özelliklerinin kodlanmaması uygulamaya dahil edilmemesi anlamına gelir. Örneğin bir otopark yazılımda aracın plaka bilgisi, giriş/çıkış saatleri önemlidir. Eğer marka/modele göre ücretlendirme yapmıyorsanız, bu bilgilerin sınıfa/nesneye dahil edilmesine gerek yoktur. Ayrıca aracın şase numarası, motor hacmi, motor numarası gibi büyüklükler de soyutlamanın dışında bırakılmalıdır.
 
ÇOK BİÇİMLİLİK:
Çok biçimlilik, nesnelerin kendi türlerinin dışında farklı türler olarak da temsil edilmelerini sağlar. Ancak bu alt-sınıf/üst-sınıf ilişkisiyle sınırlıdır. Yani belirli bir üst sınıftan türetilmiş olan bir sınıf, her ne kadar kendi özel tutum ve durumlarına sahip olsa da,  üst sınıfından bir nesneymiş gibi de davranabilirler.
Bir önceki başlıkta anlatılan kitap ve kaynak sınfları üzerinden devam edecek olursak, bir kitap nesnesi aynı zamanda bir kaynak nesnesi olarak da kullanılabilir. Bunu sağlayan, kitap sınıfının kaynak sınıfının bir alt sınıfı olmasıdır. Böylece kitap sınıfı hem kitap hem de kaynak sınıfı olarak ifade edilebildiğinden çok biçimlilik göstermiş olur.
 
KAPSÜLLEME:
Bilgi saklama ya da koruma olarak da bilinen kapsülleme, nesnenin yaptığı işler ve durumuyla ilgili bilgilerin ve işlevsel karmaşıklığının gizlenmesi anlamına gelir. Tanımından da anlaşılacağı üzere iki temel amacı vardır: bilgi saklama ve karmaşıklığı gizleme.
Kapsülleme sadece bilginin yani nesnenin özelliklerinin değerlerinin saklanması değil, aynı zamanda hangi metotlarının erişilebilir olup olmayacağının da belirlenebilmesi anlamına gelmektedir.
Kapsüllemenin sonucu olarak, her sınıf için dışarıya açılacak metotlarının bir şekilde bildirilmesi gerekir. Sınıfın arabirimi (interface) olarak tanımlanabilecek olan bu tanımlamayla, diğer nesnelerin bu nesne üzerinden hangi metotlara ulaşabileceği tanımlanmış olur. Birçok programlama dilinde, arabirimlerin hangi seviyelerden (sadece o sınıfın dahil olduğu proje, ya da herkes tarafından gibi) erişilebilir olduğu belirlenebilmektedir.
 
Kadir Çamoğlu
 
NOT: Yeni eklenen yazılardan haberdar olmak için Facebook grubumuza üye olun...
http://www.facebook.com/group.php?gid=29006737231
 

Toplam 7412 kez okundu.
Oyla:
En Düşük
Oy ver: 1Oy ver: 2Oy ver: 3Oy ver: 4Oy ver: 5
En Yüksek
YORUMLAR
Toplam 7 yorum
Önceki12
Ziyaretçi yazmış:
TeşekkürlerAydınlatıcı bir yazı..
01 Şub 2010  21:27Bu yorumu beğendimBu Yorumu Beğenmedim
Ziyaretçi yazmış:
güzel bi yazı olmuş teşekkür ederim.
01 Şub 2010  00:52Bu yorumu beğendimBu Yorumu Beğenmedim
Önceki12


Bu sayfalarda yer alan okur yorumları kişilerin kendi görüşleridir. Yazılanlardan CHIP Online sorumlu değildir.
Siz de yorumunuzu yazın
CHIP Online Ziyaretçisi
Yorumunu Gönder
Lütfen bu bölüme sadece yorumlarınızı yazın. Teknik yardıma ihtiyaç duyduğunuz konuları lütfen forumda ilgili bölüme veya Uzmanına Sorun bölümümüze yazın, yanıtınızı çok daha sağlıklı ve hızlı olarak alabilirsiniz
Siz de kendi teknoloji blogunuzu ücretsiz oluşturun!

Tek Kişilik Yazılımevi-Kategoriler

 


Ocak 2010
PtsSalÇarPerCumCtsPzr
    123
45678910
11121314151617
18192021222324
25262728293031

CHIP Online Yazar Blogları

Yazarlarımızdan, editörlerimizden sizlere...

Cem SinanoğluCem Sinanoğlu
Nokia değil Nokir, iPhone değil Ay-Phone!
Selim ÖztürkSelim Öztürk
Motorola – Google Apple’a karşı
Rik FergusonRik Ferguson
Şapşal olma, sessiz ol! Şapşal olma, sessiz ol!
Selçuk İslamoğluSelçuk İslamoğlu
2012 Felaketine ne kadar hazırız?
Zeynel ÖztürkZeynel Öztürk
Facebook'un bilinmeyenleri!
 

CHIP Dergisi: Mayıs 2012

İşbirliği ortaklarımız

  • Hepsiburada.com
  • Level
  • Turhost
  • CHIP Download
  • yenibiris.com
  • CHIP Download
 
Cep telefonları | Ekran kartları | Masaüstü | Notebook | Ses kartları | Webcam | Klavye & Fare | Yazıcılar | Tablet Ev Sineması
Mp3 Player | Usb Bellekler | Video kameralar | Fotoğraf Makinesi | Taşınabilir diskler | LED & LCD Tv | Monitörler | OEM | PDA
Navigasyon | Oyun Konsolu