Ana sayfa › Forumlar › PROGRAMLAMA › ASP.NET › Nesneye Yönelik Programlama
- Bu konu 1 yanıt içerir, 2 izleyen vardır ve en son 12 yıl 7 ay önce özgür tarafından güncellenmiştir.
-
YazarYazılar
-
15 Nisan 2012: 19:01 #12306
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=2900673723116 Nisan 2012: 09:32 #12355özgürİzleyiciyararlı bilgilerinden ötürü teşekkürler kardeşim
-
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.