Bennet, McRobb ve Farmer'ın kitabı nesneye yönelik yazılım projelerine yeni giriş yapacak olanlar için sınıf ve nesne kavramlarını temelden inceleyip karşılaştırıyor. Bu kısımda o incelemelerden derlemeler sunacağız.
UML tanımına göre sınıf aynı türden nesnelerin sahip olduğu bilgi ve davranışları belirleyen bir yönergedir. Programlama dilleri açısından bakarsak da, sınıf bu nesneleri temsil edecek bir kod paketinde olması gereken değişken (bilgileri saklamak için) ve fonksiyon (davranışları uyarlamak için) tanımlarının bir kod paketidir. Yazarlar başka kaynaklara da referans yaparak, nesnelerin ne bildiklerini ve ne iş yaptıklarını bilmesi gereken insanlar gibi görülebileceğini de hatırlatıyorlar. Bu açıdan bakıldığında, nesne bir meslek sahibi kişidir, sınıf ise meslek sahibi kişinin bilgi ve iş yöntemlerini belirleyen bir yönergedir.
Nesne "Ben kimim?" (Bir pişirici), "Ne yapabilirim?" (Pişiririm), ve "Ne biliyorum?" (Hiçbir şey) sorularına cevap verebilmelidir. Sorunun cevaplarını da bir yönerge görevi yapan sınıf tanımına bakarak verebilir, ama vereceği tam cevaplar kendi bilgilerine ve o anki durumuna bağlıdır.
Bir sistemi yönetecek proje oluştururken, sistemde yer alacak nesneleri bu tür sorulara verecekleri cevaplara göre ayırmak ve ortak cevapları olan nesneleri temsil edecek sınıf tanımları oluşturmak gerekecektir. Hem çalışanlar, hem müşterilerin adları, adresleri ve başka iletişim bilgileri vardır, ama sırf bu cevapları ortak diye bu türlerden nesneleri, "Kişi" diye bir sınıf çatısı altında toplayamayız. İş sistemde ne yaptıkları sorusuna gelince, çalışanların ve müşterilerin cevapları farklı olacaktır.
Ayrıca, sınıf tanımlarını nesnelerin sistemde gereken bilgi ve davranışlarıyla sınırlı tutmak gerekecektir. Sistemde aynı rolü oynayan nesnelerin o rolle ilgili ortak özellik ve davranışları o nesneleri temsil eden bir sınıf tanımı oluşturmakta kullanılabilir.
Unutmayın, ne gerç.ek hayattaki, ne de sistemi yönetecek yazılımdaki nesnelerin her özelliği aynı olacaktır. Ortak özellik deyince özelliklerin adlarını ve türlerini kastediyoruz. Yani bir müşteriyi temsil edecek olan nesne o müşterinin adını, o müşterinin şirketinin adını ve iletişim bilgilerini, belki müşteri için yürülen kampanyalarla ilgili bilgileri içerecek ve bu bilgi paketi başka bir müşteriyi temsil eden nesnedekinden farklı olacaktır. Ama tüm müşteri nesnelerinde bu ad, şirket, iletişim ve kampanya bilgileri olması için sınıf tanımında bu türden bilgileri saklayacak özellik tanımları ve bu bilgileri işleyecek davranışları uyarlayan fonksiyon tanımları olmalıdır. Bu açıdan bakılınca, bir sınıf tanımı bir kalıptır, ve bir nesne o kalıpla kesilmiş bir kurabiyedir. Aynı kalıptan çıkmış her kurabiye aynı şekle sahiptir.
Bu arada, şunu da belirtmeden geçmeyelim. Kaynak kitabımız "nesne" (object) kavramının artık UML'de bir standart tanımı olmadığına değiniyor. Yukarıda tarif ettiğimiz şekliyle, aynı sınıf tanımının kalıbından çıkmış nesnelere o sınıfın "örnek"leri (instances) demek teknik açıdan daha doğru bir kullanım olacaktır.
Hiç yorum yok:
Yorum Gönder