NESNEYE YÖNELİK PROGRAMLAMA

Download Report

Transcript NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK
PROGRAMLAMA
02 Ekim 2012
Nesne Yönelimli Programlama
• Yazılım teknolojisindeki gelişme ve ilerlemeler; yapısal
programlama, yapısal tasarım, yapısal analiz ile başlasa
da nesne yönelimli analiz, tasarım ve programlama ile
daha çok gelişme elde edilmiştir.
• Nesneye yönelimli programlama gerçek dünyayı örnek
almakta tıpkı gerçek dünyada olduğu gibi nesneler ve
nesnelerin birbirleriyle iletimini sağlayan sistemler
kurmaktadır.
• Bu tarz yazılan yazılımlar, daha iyi organize ve anlaşılır
oldukları için bakımları da çok kolay olmakta ve
programcıya zaman ve maliyetten büyük tasarruf
sağlamaktadır.
NESNEYE-YÖNELİK TASARIM
• Nesneye-yönelik tasarım, prosedürel yaklaşımdan köklü olarak ayrılır.
• Nesneye-yönelik yaklaşımda problem,
– İşlemlere yada veri yapılarına bölünmez;
– Birbirleriyle etkileşen bir nesneler sistemi olarak analiz edilir.
• Ayrıca, prosedürel yaklaşım yukarıdan-aşağıya işleyen bir analiz tekniği
olmasına rağmen, nesneye yönelik yaklaşım yukarıdan-aşağıya analiz ve
aşağıdan-yukarıya sentez tekniklerini birleştirir.
• Nesneye-yönelik tasarım (“iterative” tarzda) şunların yapılmasını gerektirir:
–
–
–
–
Sınıfların belirlenmesi,
Özelliklerin ve davranışların tespiti,
Sınıflar arası ilişkilerin bulunması ve
Sınıfların bir hiyerarşi içinde organize edilmesi.
NESNEYE-YÖNELİK TASARIM
• Nesne tabanlı programlamada esas olan, gerçek hayatta var
olan olguların programlamaya aktarılmasındaki yeni
yaklaşımdır.
• Klasik
prosedürsel
programlamada
verilerimiz
ve
fonksiyonlarımız vardı. Yani her şey veri ve bu veriyi işleyen
metotlar etrafında dönüyordu.
• Aslında nesne tabanlı programlamada da iki önemli birim; veri
ve veriyi işleyip mantıklı sonuçlar üreten metotlar bulunur.
Ama buradaki fark gerçek hayattaki olguların da daha iyi
gözlenip programlama dünyasına aktarılmasındadır.
Modelleme
• Gerçekleştirilmesi maliyetli ya da riskli olan projelerde, projenin
beklenmedik durumlardan dolayı başarısızlığa uğramaması için bir
takım fikir ve tasarım işlemleri (modelleme) yapılır.
• Modelleme fikir bazındaki projenin, gerçek dünyada
uygulanabilirliğini sorgular.
• Karşılaşılabilecek sorunlara önceden çözüm bularak işgücü, maliyet,
zaman gibi kaynak kayıplarını önler.
• Nesneye yönelimli programlamayla birlikte modellemeye duyulan
ihtiyaç artmış ve Yazılım projelerinde kullanılmak üzere UML
(Unified Modeling Language) modelleme dili geliştirilmiştir.
• Model oluşturmak şu getirileri sağlar
– Yapılacak iş için gereksinimleri ortaya koyar
– Anlaşmazlıkları çözümlemeye yardımcı olur.
– Yanlışları Önler
NESNEYE-YÖNELİK TASARIM
SINIFLARIN BELİRLENMESİ
• Nesneye-yönelik tasarımda ilk adım programın ihtiyaç
duyacağı sınıfların belirlenmesidir.
• Bunun için kullanılabilecek basit bir teknik,
– programdan beklenenin doğal dil ile betimlenmesi,
– betimleme içindeki isimlerin listelenmesi ve
– bu liste içinde sınıfların seçilmesidir.
• Sınıflar en kolay olarak fiziksel nesneleri modelleyen
programlar için belirlenir. Fakat, kavramsal nesneler yada
olaylar veya etkileşimler söz konusu olduğunda bu işlem daha
zor gerçekleştirilir.
• Ayrıca, problem modeli içindeki elemanlara karşılık gelen
sınıflar tespit edildikten sonra bu sınıfları gerçekleştirmek için
de yeni sınıflar tasarlamak gerekebilir.
ÖZELLİKLERİN VE DAVRANIŞLARIN TESPİTİ
• Bir kez sınıflar belirlendikten sonra ikinci adım, her sınıfa ait
sorumlulukların belirlenmesidir. Bir sınıfın sorumlulukları iki alanda ortaya
çıkar:
– Taşıması gereken bilgiler (“Sınıfa ait bir nesnenin neleri bileceği”) ve
– Sınıfa ait bir nesnenin neler yapabileceği yada bu nesneye neler yapılabileceği.
• Her sınıf kendisini betimleyen bazı özelliklere sahiptir. Sınıfa ait bir
nesnenin özellik değerleri nesnenin içinde bulunduğu durumu (“state”)
belirler. Özellik değerleri hiç değişmeyeceği gibi sık sık da değişebilir. Her
nesne içinde bulunduğu durumu hatırlamak zorundadır.
• Her sınıf, ayrıca, nesnelerin diğer nesnelerle nasıl etkileştiğine be bu
etkileşim neticesinde içinde bulundukları durumların nasıl değiştiğine
karşılık gelen davranışlara sahiptir.
Sınıf (Class) ve Nesne (Object) Kavramı
Sınıf (Class) ve Nesne (Object) Kavramı
Sınıf (Class) ve Nesne (Object) Kavramı
• Mesela elimizde bir ütümüz olsun. Ütünün
markası, modeli, rengi, çalıştığı elektrik voltajı,
ne tür kumaşları ütüleyebildiği bu ütüye ait
özelliklerdir (veri).
• Aynı zamanda ütümüzü ısıtabiliriz, ütüleme
işinde kullanabiliriz ve soğumaya bırakabiliriz.
Bunlar ise ütünün fonksiyonlarıdır (metot).
Sınıf (Class) ve Nesne (Object) Kavramı
• Eğer ütü ile ilgili bir program yapmış olsak ve nesne tabanlı
programlama tekniğini kullansak hemen bir ütü sınıfı (class)
oluştururduk.
• Bu sınıfta ütüye ait bilgiler (veriler) ve ütü ile
yapabileceğimiz işler (metot) bulunurdu. O zaman nesne
tabanlı programlamada bir sınıfta, sınıfa ait veriler ve bu
verileri işleyip bir takım faydalı sonuçlar üreten fonksiyonlar
/ metotlar bulunur.
• Dahası, biz bir tane ütü sınıfı tasarlarsak bu sınıftan
istediğimiz sayıda değişik ütüler (Object veya instance)
yapabiliriz. Resimde bu şekilde ütü sınıfı ve bu sınıftan
oluşturduğumuz nesnelerin görsel olarak anlatımı
bulunmaktadır.
Sınıf (Class) ve Nesne (Object) Kavramı
Nesne Yönelimli Programlama Kavramları
• Kapsüllleme (Encapsulation) sayesinde, sınıfımız içinde
kullandığımız alanların dışarıdan herhangi bir etki ile doğrudan
değiştirilmelerini engellemiş oluruz. Bu durum bizim isteğimiz
dışında oluşabilecek atamaların önüne geçmemize ve ille de bu
alanların değerleri değişecekse bizim belirlediğimiz bir çizgide
olmasına neden oluyor. Bu da programcılıkta ve özellikle nesne
tabanlı programlamada çok büyük bir yere sahip olan kontrolün
elimizde olmasını sağlar.
• Bir diğer özellik de, paketlenecek fonksiyonların nasıl bir işlev
göstereceği belirtilmeksizin, sadece nasıl kullanılacağının
belirtilmesi yapılabilir ki, bu zorunludur. Buna da Genelleştirme
(Abstraction) adı verilir.
Nesne Yönelimli Programlama Kavramları
• Kalıtım (Inheritance): Normalde bu kavramı gerçek
hayattan biliyoruz. En basit anlamda, örneğin “Ben,
annemin gözlerini almışım.” dediğimde, tıp
uzmanlarının buna getirdikleri yorum " siz annenizden
kalıtımsal olarak şu özelikleri almışsınız." oluyor.
• Programlama dillerinde de kalıtımın rolünün aynı
olduğunu söyleyebiliriz. Zaten nesne tabanlı
programlama dillerini tasarlayan uzmanlar, gerçek
hayat problemlerini, bilgisayar ortamına taşıyabilmek
amacıyla en etkili modelleri geliştirmişler, bu model
içerisine kalıtımı da katarak çok önemli bir özelliğin
kullanılabilmesini sağlamışlardır.
Nesne Yönelimli Programlama Kavramları
• Nesneler için söylenebilecek özelliklerden biri de türeme
özelliğidir. Bir nesne tanımlanırken daha önceden
tanımlanmış bir başka nesneyi kendisine taban olarak
seçebilir. Bu durum, yeni tanımlanan nesnenin kendisine
taban seçtiği nesnenin özelliklerini kullanma hakkına
karşılık gelir. Aynı zamanda yeni nesnenin taban nesne ile
aynı özellikleri taşımasına neden olur.
• Yeni nesne kendisine yeni özellikler katabileceği gibi
devraldığı özellikleri de geliştirebilir, değiştirebilir. Bu
özelliğe Türeme (Derivation), özellikleri devralmaya da
Miras alma veya Katılım (Inheritance) adı verilir.
Nesne Yönelimli Programlama Kavramları
Kalıtım
Nesne Yönelimli Programlama Kavramları
• Kalıtım
Nesne Yönelimli Programlama Kavramları
Üç önemli özellik göze çarpmaktadır:
1. Türeyen nesneler taban nesnenin koruyarak devam ettirip
kullanabilirler.
2. Türeyen nesneler türedikleri taban nesnelerin özelliklerini
değiştirebilirler.
3. Türeyen nesneler yeni özellikler kazanabilir veya mevcut
özellikleri kaybedebilirler.
• Bir sistem içerisinde birbirinden türemiş sınıflar bulunsun. Miras
alınan sınıfta zaten tanımlı olan bir fonksiyon, miras alan sınıfta
da (Parametreleri, ismi ve geri dönüş değeri aynı olarak) tekrar
tanımlanabilir. Bu durumda miras ağacı boyunca aynı fonksiyon
farklı işler yapabilir. Bu duruma Çok Biçimlilik (Polymorphism)
adı verilir.
Nesne Yönelimli Programlama Kavramları
• Çok biçimlilik metodun farklı nesnelerde veya
farklı ortamlarda farklı sonuçlar üretmesidir.
• Mesela “konuşmak” insan sınıfına ait bir metottur
• Ancak bu metot ait olduğu insan sınıfının
örneğine göre farklı sonuçlar üretir
Nesne Yönelimli Programlama Kavramları
• Türeme özelliği ile ilgili olarak söylenebilecek bir diğer özellik ise
bir nesnenin bir nesneden değil de birden çok nesneden
türemiş olması özelliği (Çok Tabanlılık veya Çoktan Türeme,
Multiple Inheritance).
• Programlar içinde belirli nesne kalıplarının tekrar kullanım için
hazırlanması özelliğine Şablon (Template) adı verilir.
• Şablonlar, yazılan bir kodun farklı benzer durumlar için
kullanılmasını ifade eder.
A Short History of Object – Oriented
Programming (OOP)
 SIMULA 1(1962) and Simula 67 (1967) are the two earliest object oriented languages
 While most of the advantages of OOP were available in the earlier
Simula languages, it wasn’t until C++ became entrenched in the
1990s that OOP began to flourish.
 The next step in the development of OOP started in January of
1991
 The result was the Oak programming language (named after an oak
tree outside Gosling’s window), which eventually morphed into the
Java programming language.
 Java quickly grew in popularity, spurred by the growth of the World
Wide Web.
 To many programmers, C# is Microsoft ’ s answer to Java. Some
would even say that C# is the result ofMicrosoft ’ s stubbornness in
refusing to promote a language it did not develop.
Installing C#
• Downloading C# Express
• A Test Program Using C# Express