NESNEYE DAYALI MODELLEME VE TASARIM Dr. Tuncay YİĞİT Gazi Üniversitesi Bilişim Enstitüsü Bilgisayar Eğitimi ABD Nesneye Dayalı Programlama Nesneye dayalı programlama, güçlü bir programlama yöntemidir. Tüm NDP dillerinin sahip oldugu üç özellik vardır: •Depolama (encapsulation), •Çok biçimlilik (polymorphism) •miras (intheritance). Nesneye Dayalı Programlama Encapsulation (Depolama): Depolama, kodu ve kodun işlediği verileri bir araya getiren ve onları dış etkilerden, yanlış kullanımlardan koruyan mekanizmadır. Nesneye dayalı dillerde kod ve veri, bir "kara kutu" oluşturacak şekilde bir araya getirilir. Kod ve verinin bu şekilde birbirine bağlanmasıyla da nesne meydana gelmiş olur. Diğer bir deyişle nesne depolama yaptığımız yerdir. Nesnenin içindeki kod, veri veya her ikisi bu nesneye private (özel) veya public (genel) olabilir. Private kod ve veriler, sadece o nesneye ait bileşenler tarafından bilinebilir ve erişilebilir. Programında nesneye ait olmayan bileşenleri bu private kod ve verilere erişemez. Kod ve verilerimiz public ise, belirli bir nesnenin içinde tanımlansalar da programın diğer parçaları tarafından erişilebilirler. Nesnelere ait public elemanları private elemanlara denetlenebilir şekilde erişebilmek amacıyla kullanırız. Her ne sebeple olursa olsun, nesne, kullanıcı tarafından tanımlanan tipte bir değişkendir. Kodu ve verileri bağlayan nesneyi değişken olarak düşünmemiz size garip görünebilir. Fakat nesnel programlamada durum kesinlikle bu şekildedir. Nesne tipi tanımladığımızda aslında yeni bir veri tipi oluşturuyoruzdur. Bu veri tipi de bileşik bir değişkendir. Nesneye Dayalı Programlama Polimorfizm (Çok Biçimlilik) Polimorfizm genel anlamda bir adın birbiriyle ilişkili, fakat teknik açıdan farklı iki veya daha fazla amaç için kullanılabilmesi yeteneğidir. NDP kavramı içinde ise polimorfizm, bir adin genel bir iş (action) sınıfını belirlemesine izin verir. Genel bir iş sınıfı içerisinde, yapılacak iş, veri tipi, tarafından belirlenir. Örneğin, polimorfizmi pek fazla desteklemeyen C'de , mutlak değer bulma isi üç ayrı fonksiyon adi gerektirir: abs(), labs() ve fabs(). Bu fonksiyonlar sırayla bir integer'in (tamsayının), bir long integer'in ve bir reel sayının mutlak değerini hesaplar ve döndürür. Fakat polimorfizmi destekleyen C++'da bu fonksiyonlar, abs() gibi tek bir adla adlandırılabilirler. Fonksiyonu çağırmak için kullanılan veri tipi, gerçekte hangi fonksiyonun çalıştırıcağını belirler. Göreceğiniz gibi, C++'da bir fonksiyon adini birkaç farklı amaç için kullanmak mümkündür. Buna fonksiyonların aşırı yüklenmesi (function overloading) adi verilir. Polmorfizm hakkında hatırlamanız gereken önemli nokta, birbirleriyle bağlantılı işlere standart arabirimler oluşturmanıza imkan vererek daha karmaşık durumların üstesinden gelmenizi sağlar. Nesneye Dayalı Programlama Inheritance (Miras) Miras, bir nesnenin, diğer bir nesnenin özelliklerini alabilmesidir. Daha derine inecek olursak, bir nesne, kendisine ait özellikleri de ekleyebileceği bir özellikler kümesini mirasla alabilir. Miras önemlidir, çünkü nesnelerin hiyerarşik sınıflandırma (hierarchical classification) kavramını desteklemesini sağlar. Pek çok bilgiyi bu hiyerarşik sınıflandırmayı kullanarak kontrol edebiliriz. Örneğin bir ev. Ev genel bir sınıf olan binanın altsınıfı, bina da daha genel bir sınıf olan yapının alt sınıfıdır, yapı ise insan yapımı denen daha da genel bir sınıfın alt sınıfıdır. Alt sınıflar üst sınıflardan miras ile özelliklerini alacaklardır. Eğer bu sıralı sınıflandırılma kullanılmasaydı her nesnenin kendisi ile ilgili tüm özelliklerini açık bir şekilde tanımlaması gerekirdi. Fakat miras sayesinde nesnenin hangi genel sınıfa ait olduğu ve onu diğerlerinden ayıran özelliklerini belirleyerek nesneyi tanımlamak mümkündür. Miras NDP için çok önemli bir özelliktir.