SlideShare a Scribd company logo
1 of 7
Download to read offline
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).
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.
Ç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.
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:
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ı:
Ç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.
Çıktı:

More Related Content

Viewers also liked

Viewers also liked (17)

Kodlama
KodlamaKodlama
Kodlama
 
Arduino eğitimleri 2 - arduino platformuna giriş
Arduino eğitimleri   2 - arduino platformuna girişArduino eğitimleri   2 - arduino platformuna giriş
Arduino eğitimleri 2 - arduino platformuna giriş
 
10 soruda Arduino
10 soruda Arduino10 soruda Arduino
10 soruda Arduino
 
Arduino eğitimleri 4 - arduino programlama dili - 2
Arduino eğitimleri   4 - arduino programlama dili - 2Arduino eğitimleri   4 - arduino programlama dili - 2
Arduino eğitimleri 4 - arduino programlama dili - 2
 
Arduino eğitimleri 1 - giriş
Arduino eğitimleri   1 - girişArduino eğitimleri   1 - giriş
Arduino eğitimleri 1 - giriş
 
Arduino eğitimleri 3 - arduino programlama dili
Arduino eğitimleri   3 - arduino programlama diliArduino eğitimleri   3 - arduino programlama dili
Arduino eğitimleri 3 - arduino programlama dili
 
Doğrusal Programlama
Doğrusal ProgramlamaDoğrusal Programlama
Doğrusal Programlama
 
Mazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmakMazeretleri yıkarak başarılı olmak
Mazeretleri yıkarak başarılı olmak
 
Composer namespacing
Composer namespacingComposer namespacing
Composer namespacing
 
e-PEL portfolio
e-PEL portfolioe-PEL portfolio
e-PEL portfolio
 
La policy sulla gestione delle assenze è adeguata agli obbiettivi aziendali?
La policy sulla gestione delle assenze è adeguata agli obbiettivi aziendali?La policy sulla gestione delle assenze è adeguata agli obbiettivi aziendali?
La policy sulla gestione delle assenze è adeguata agli obbiettivi aziendali?
 
IEEE Photonics Technology Letters vol 8 2016 [table of content only]
IEEE Photonics Technology Letters vol 8 2016 [table of content only]IEEE Photonics Technology Letters vol 8 2016 [table of content only]
IEEE Photonics Technology Letters vol 8 2016 [table of content only]
 
Sumitra parida ppt
Sumitra parida pptSumitra parida ppt
Sumitra parida ppt
 
Blore Productions
Blore ProductionsBlore Productions
Blore Productions
 
Samina khan
Samina khanSamina khan
Samina khan
 
BEST WEDDING EMCEE-SIA PATEL
BEST WEDDING EMCEE-SIA PATELBEST WEDDING EMCEE-SIA PATEL
BEST WEDDING EMCEE-SIA PATEL
 
Sonalika biswal
Sonalika biswalSonalika biswal
Sonalika biswal
 

Nesne Yönelimli Programlamaya İlk Adım

  • 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. 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. Ç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. 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. 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. Ç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.