Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nesne Yönelimli Programlamaya İlk Adım

4,871 views

Published on

Nesne Yönelimli Programlamaya İlk Adım

Published in: Software
  • Be the first to comment

  • Be the first to like this

Nesne Yönelimli Programlamaya İlk Adım

  1. 1. 1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti zaman ve çaba olarak daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır. NYP'nın altında yatan birimselliğin ana fikri, her bilgisayar programının (izlence), etkileşim içerisinde olan birimler veya nesneler kümesinden oluştuğu varsayımıdır. Bu nesnelerin her biri, kendi içerisinde veri işleyebilir, ve diğer nesneler ile çift yönlü veri alışverişinde bulunabilir. Hâlbuki NYP'den önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektediler. (wikipedia) Yukardaki yazının bu konuya girişte okunması taraftarıyım. Ek Bilgi : - Object-oriented(Nesne Yönelimli/Merkezli) terimini ilk defa kullanan ve Smalltalk dilinin mucidi Alan Kay’dır. - İlk inceleyeceğimiz kavramlar Nesneler,Sınıflar ve Nitelikler 1- Nesneler(Objects): En temel öğeler Nesnelerdir. Günümüz kullanımıyla dünyadaki her varlık NYP(Nesne Yönelimli Programlama) için birer Nesne olabilir (Örneğin : İnsanlar,Bilgisayarlar,Arabalar,Telefonlar gibi). i. Nesneler birbirleriyle mesajlaşabilir ve davranış gösterebilirler. ii. Nesneler bir sistemin daha anlaşılır olmasını sağlar. iii. Nesneler sınıfların örneği şeklinde olur ve aynı sınıftan örneklense bile farklıdırlar. Örneğin 2 kişinin TC kimlik numaralarının farklı olması gibi. iv. Nesneler üye alanlara (member fields) ve üye fonksiyonlara(member metods) sahiptir. Metodlar bir nesnenin dışa açılan yoludur nesnenin bir davranışta bulunması isteniyorsa mutlaka metod kullanılması gerekir. v. Her nesnenin bir sınıfı vardır. 2- Sınıflar(Classes): i. Nesnelerin neye benzediğini yani şablonunu gösteren kavramdır. ii. Nesnelere örnek temsil eder. iii. Bir sınıftan bir çok nesne örneklendirilebilir(instance).
  2. 2. 3- Nitelikler(Attributes): Sınıfın içerisinde bulunan ve o sınıftan oluşacak nesnelerin özelliklerini taşıyan yapılardır. Örneğin : Bir öğrencinin okul numarası onun niteliğidir. Bir Nesnenin Sınıftan örneklenmesi aşaması : 1- Uygun bir sınıf şablonu oluşturulmalıdır. 2- Şablon oluşturulurken erişilebilirlikler yani niteliklerin dışa kapalı ya da açık olmasının durumları iyi düşünülmelidir gereksiz müdahelelere kapalı olmasına dikkat edilmelidir. 3- Javada yeni bir nesne oluşturmak için “new” anahtar kelimesi kullanılır. 4- Bir sınıftan nesne örneklendiğinde nesne için bellekte yer ayrılır. 5- Bellekte ayrılan yer sınıfın içerisinde bulunan niteliklere göre değişkenlik gösterir. 6- Bir sınıf kodu yazılırken nitelikler birer değişkendir. Bu değişkenler sınıftan nesne örneklendiğinde bellek üzerinde oluşurlar. NYP(Nesne Yönelimli Programlama) genel 3 disipline sahiptir 1- Kapsülleme(Encapsulation) 2- Kalıtım(Inheritance) 3- Polymorphism(Çok Biçimlilik) Kapsülleme(Encapsulation): Bir nesnenin sahip olduğu niteliklere gereksiz yere erişimin kısıtlanmasıdır. Aynı zamanda nesneyi kullanacak elemanların gereksiz detaylara takılmasını önler. Buna günlük hayattan örnek olarak TV kumandası verilebilir bir kanalı değiştirmek için kumanda nesnemizin kanal değiştirme tuşuna basmamız yeterlidir ancak kumandadan kaç frekansında ve nasıl sinyal gönderildiğini bilmek zorunda değilizdir. Ayrıca bunlara müdahale edebiliyor olmamız da kanalı değiştirememize sebep olacaktır. Bazı Erişim Belirleyiciler: 1- Public : Herhangi bir kısıtlama yoktur. 2- Protected : İlgili sınıftan türetilmiş sınıflardan ve sınıf içerisinden erişilir. 3- Friendly : Sadece aynı paket içindeki sınıflar için erişime açıktır. Not: Hiçbir belirleyici kullanmazsak bu geçerlidir(Varsayılan) 4- Private : Yalnızca sınıfın içerisinden erişilir. Kalıtım(Inheritance): Bir sınıfın diğer sınıfın üye alanlarına ve fonksiyonlarına sahip olması manasına gelir. Başka bir deyişle bir sınıfın diğer bir sınıftan türetilmesidir. 1- Bir sınıf yalnızca 1 sınıftan türetilebilir. 2- Bir sınıftan bir çok sınıf türetilebilir. Kalıtımda esas amaç sınıflar arasında ilişki kurmaktır. Aynı zamanda kod tekrarları da engellenmiş olur.
  3. 3. Çok Biçimlilik (Polymorphism): Bir nesnenin farklı davranışlarda bulunabilmesinin nedenidir. Örneğin: Bir insan aynı anda mühendis,baba ve zengin olma niteliklerini nasıl taşıyabiliyorsa nesnelerde de bir çok biçimi taşıyabilir. Bu yapı kalıtım yapısıyla oluşmuş sınıflarda geçerlidir. Not: C# da çok biçimlilik “virtual” anahtar sözcüğü ile sağlanır. Java da ise doğal haliyle bunu destekler. Sınıf Tanımlama : - Sınıf adıyla .java dosyasının aynı olduğuna dikkat edilmelidir. Nitelik ve davranışlara(metod) sahip bir sınıf: Paket(package) Yapısı: Ortak amaç için kullanılan sınıflar belirli bir paket etrafında toplanabilirler. Aynı zamanda aynı isimli sınıfların birbirine karışması engellenir. Ör: Bu ifadenin yazıldığı sınıfın “/saidaydogan/ornekCalismalar/ “ klasöründe yer aldığını belirtir. Not: Eğer bir sınıfa farklı bir paketteki sınıf eklenecekse “import” sözcüğü kullanılır.
  4. 4. Nesne Tanımlama ve Kullanımı: Çıktı: Yukarda görüldüğü üzere Ogrenci türünden bir nesne oluşturuldu ve adına “ogr1” adı verildi. Ogrenci sınıfı dikkate alındığında ogr1 nesnesinin bize kendine özgü davrandığını çıktıda gördük. Çünkü sınıf içerisinde Adı “Said” ve Noyu da “11011052” olarak gönder gibi bir üye fonksiyonumuz bulunmamakta. Kurucu Metod(Constructor): - Sınıf adıyla aynı isimde olan metottur. - Bir sınıftan nesne oluşturulduğunda ilk çalışan metottur. - Bir şey döndüren metot değillerdir. Kapsülleme(Encapsulation) Örnek:
  5. 5. Yukardaki sınıf örneğinde aslında kapsülleme bulunmakta. Nasıl mı? - Doğrudan müdaheye izin vermeyen bildirilmiş bir niteliğimiz(attribute,üye değişkenlerimiz) var. - Ayrıca bu nitelikler sınıf içerisindeki metodlarla(get,set) erişilebilir bir halde. Kalıtım(Inheritance) Örnek: Kalıtımda kullanmamız gereken sözcük “extends” olduğunu birkez daha hatırlatmış olalım. Görüldüğü üzere ErkekOgrenci adında yeni bir sınıf Ogrenci sınıfından türetildi ve kendine özgü sakalDurumu adında bir Bool(0 ya da 1) niteleyicisi bildirildi. Burda ise ErkekOgrenci sınıfından bir nesne örneklenmiş ve bu sınıfın türetildiği sınıfdaki metodlara da erişilerek işlem yaptırılabildiğine dikkat ediniz. if satırında “instanceof “ bize nesnenin ErkekOgrenci sınıfından mı örneklendiği hakkında yanıt döndürür. Çıktı:
  6. 6. Çok Biçimlilik(Polymorphism) Örnek: Örnek senaryomuzda erkek öğrencilerin adlarının başında “E-” kızlarda ise “K-“ yazması gerekiyor olsun. Bunun için ErkekOgrenci ve KizOgrenci sınıfında getOgrenciAdi() metodunu ezerek bu sınıflara özgü bir metod haline getirmeliyiz ve kendine göre özelleştirmeliyiz. Burda dikkati çeken ifade : super.getOgrenciAdi(); olma ihtimali yüksek. “super” sözcüğü bizi bu sınıfın atasına(üst sınıfa) ulaştırmaya yarıyor.Dolayısıyla üst sınıfın metoduna erişip ordan öğrenci adını alıp başına “E-“ ya da “K-“ ekleme işlemi gerçekleştiriliyor.
  7. 7. Çıktı:

×