NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK
PROGRAMLAMA
Yrd.Doç.Dr. Zeynep ORMAN
ormanz@istanbul.edu.tr
KONULAR
• Nesne Tabanlı Yazılım Geliştirme Sürecine Giriş
• Nesne Tabanlı Programlama Kavramları
• UML Nesne ve Sınıf Şemaları
• Yazılım Geliştirme ve Proje Yönetimi
• Çözümleme (System Analysis) ve Kullanım Durumları
•
•
•
•
•
(Use Case)
Sınıf Düzeyinde Tasarım
Nesneye Yönelik Programlama Dili (C++, Java)
Sınıf ve Nesne Tanımlama
Operatör Aşırı Yükleme (Operator Overloading)
Kalıtım (Inheritance) ve (Çok biçimlilik) Polymorphism
Kullanılacak Araçlar ve Diller
• Microsoft Visual Studio (Visual C++)
• UML için StarUML ()
• Java
PROGRAMLAMA NEDİR?
• Gerçek dünyadaki problemlerin çözümlerinin bilgisayarda
tanımlanmasıdır.
•
• Yazılım geliştirme süreci kodlamadan önce problemi
oluşturan varlıkların bilgisayarda ifade edilebilecek şekilde
modellenmesi şeklinde başlar.
Problem Çözme Adımları
• Kısacası yazılım geliştirme aslında bir problem
çözme aktivitesidir. Bir problemi çözmenin temel
adımları yüzlerce yıldır aynıdır.
• Bu adımlar,
• Problemin saptanması ve ifade edilmesi
• Problemin daha iyi anlaşılabilmesi için çevresinden
soyutlanması (abstraction)
• Problemi simgeleyen soyut bir kavramsal modelin
oluşturulması
• Bu modelin çözümlenmesi ve bu modelin sunduğu
probleme bir çözüm getirilmesi
• Getirilen çözümün orijinal problemi çözüp çözmediğinin
denetlenmesi
Analitik Düşünceye göre Problem
Çözümü
• Örnek: (Araba lastiği patlaması)
• Problemin saptanması : Lastik patladı
• Problemin çevresinden soyutlanması: Lastiği sökeriz
• Problemin soyut çözümünün ifade edilmesi: Hasar bir
yama ile kapatılabilir.
• Soyut çözümün gerçek dünyada uygulanması: Acaba
oldu mu?
Soyutlama ve Modelleme
• Buradan Soyutlama (Abstraction) ve Modelleme
(Modelling) olarak iki önemli kavram ortaya
çıkmaktadır.
• Problemi çözerken, problem için önemsiz olan
detayları kenara koyma ve böylece önemli kısımlara
odaklanmak için soyutlamayı kullanırız.
• Çözümler asla gerçek probleme göre getirilmez.
Problemin önemli yönlerini simgeleyen bir modele
göre çözüm geliştirilir.
Soyutlamanın Avantajları
• Modeller daha basit ve daha kolay anlaşılır
yapıda olurlar. Bu şekilde modelleri oluşturmak ve
modelleri temel alarak çalışmak daha kolay olur.
• Modeller soyut oldukları için çözümlerin küçük
boydaki bir modele (prototip) göre hazırlanıp bir
pilot uygulamasının yapılması daha kolaydır.
• Bu şekilde çözümlerin denenmesi daha hızlı ve daha
düşük maliyetle yapılabilmektedir.
Soyutlamada Dikkat Edilecek Yönler:
• Bu avantajların yanında modelleme üzerinden
çalışırken dikkat edilemesi gereken yönler de
vardır:
• Oluşturduğumuz modelin gerçek dünyayı iyi
simgelediğinden emin olmak için doğrulanması
(verification) gerekir.
• Modelin yazılım geliştirme aşamalarında güncellenmesi
gerekir.
Yazılım kalitesi
• Kullanıcı
• Doğru
• Hızlı
• Sistem kaynaklarının kullanımı
• Kolay kullanılabilir
• Dökümantasyon (kullanım kılavuzu)
• Güncellemeler
• Geliştirici
• Kaynak kod kolay okunur ve anlaşılabilir
• Bağımsız modüller, birbiri arasındaki etkileşim ve iletişim az
• Bakım kolaylığı
• Yeterli sürede tamamlanması
• Modüllerin yeni projelerde kullanılabilmesi
• Geliştirme maliyeti
• Dökümantasyon
Yazılım kalitesi
• Nesneye dayalı programlama yukarıdaki
maddelerde belirtilen kalite kriterlerini sağlamak
üzere ortaya konmuş bir yöntemdir.
• Tasarım yapılırken ve bu tasarım C++ veya Java
gibi bir nesneye yönelik programlama dili ile
programa dönüştürülürken kalite kriterleri sürekli
gözönünde bulundurulmalıdır.
Yazılım Geliştirme Aşamaları
C++ ,
Java
Yazılım Geliştirme Aşamaları
• Çözümleme (Analiz): Belirsizlik kalmayacak şekilde
çözülmesi istenen problem anlaşılır ve yazılımın
gerçekleştirilmesine yönelik hazırlıklar yapılır.
• Tasarım: Bu aşamada amaç, gerçek dünyadaki
problemin bilgisayarda temsil edilebilecek soyut bir
modelinin oluşturulmasıdır. Çözümün hangi
unsurlardan oluşacağı ve bu parçaların nasıl
modelleneceği tamamiyle programlama yöntemine
bağlıdır.
Tasarım sonrası ortaya çıkacak model, yazılımın
kalitesini doğrudan etkilediğinden bu aşamada doğru
ve iyi bir çözümün oluşturulması çok önemlidir.
Kodlamaya geçmeden önce kurulan modelin
sağlamasının yapılması gerekir.
Yazılım Geliştirme Aşamaları
• Kodlama: Tasarım aşamasında oluşturulan model,
bir programlama dili ile bilgisayara bu aşamada
aktarılır.
• Dökümantasyon: Yazılım projesinin her aşamasında
yapılan işleri açıklayan dökümanlar hazırlamak
gereklidir.
• Test: En son aşamada programın olası giriş değerleri
için nasıl davrandığı incelenir.
Programsal Yaklaşımlar-1
• Yazılım sektöründe program geliştirme konusunda
günümüze kadar birçok yaklaşım denenmiştir.
• Bunların ilki programın baştan aşağıya sırası ile
yazılıp çalıştırılmasıdır. Bu yaklaşımla BASIC dili
kullanılarak birçok program yazılmıştır.
• Burada sorun programın akışı sırasında değişik
kısımlara “goto” deyimi ile atlanmasıdır. Program
kodu bir kaç bin satır olunca, kodu okumak ve
yönetmek gerçekten çok büyük sorun oluyordu.
• Eleştiri: aynı işlevin tekrarı, modüler değil
Programsal Yaklaşımlar-2
• İkinci yaklaşım ise prosedürel (yapısal) yaklaşımdır.
• Bu yaklaşımda, gerçeklenmek istenen sistemin
yapması gereken işler belirlenir.
• Büyük boyutlu ve karmaşık işler, daha küçük ve basit
işlevlere (fonksiyonlara) bölünerek gerçeklenir.
Programsal Yaklaşımlar-2
• Programlarda birçok işin tekrar tekrar farklı değerleri
kullanılarak yapıldığı fark edildi.
• Örneğin, herhangi bir programda iki tarih arasında ne
kadar gün olduğunu bulmak birçok kez gerekebilir. Bu
durumda başlangıç ve bitiş tarihlerini alıp aradaki gün
sayısını veren bir fonksiyon yazılabilir ve bu
fonksiyon ihtiyaç duyulduğu yerde uygun
parametrelerle çağrılıp istenen sonuç elde edilebilir.
• Prosedürel yaklaşım Pascal ve C dillerinde uzun
yıllar başarı ile kullanılmıştır.
Programsal Yaklaşımlar-2
• Eleştiri:
• Global değişkenlere, üzerinde işlem yapmaması
gereken fonksiyonlar tarafından erişilebilir.
• Değişkenlerin koruması yoktur. Değişkene, sadece
belirli bazı fonksiyonlar tarafından erişimine olanak
sağlayacak bir mekanizma yoktur.
• Yeni bir veri yada veri yapısı eklendiğinde, bu veri
üzerinde işlem yapan tüm fonksiyonlar yeniden,
eklenen veriyi işleyecek şekilde güncellenmelidir
Programsal Yaklaşımlar-3
• Her geçen gün programların daha karmaşık bir hal
alması, program kodunun kurumsal uygulama
projelerinde on binlerce satırı bulması ve yazılım
geliştirme maliyetinin çok arttığını gören bilim
adamları, programcılara yeni bir yaklaşımın
kullanılabilineceğini öğrettiler.
• Bu yaklaşımın ismi Nesne Yönelimli
Programlama(Object Oriented Programming)dır.
Neden Nesneye Yönelik
• Veri birincil derecede öneme sahiptir.
• Amaç veri ile bu veri üzerinde işlem yapan
fonksiyonları bir araya getirerek yeni bir yapı
oluşturmaktır : SINIF
• Veriye erişmenin tek yolu SINIF fonksiyonlarını
kullanmaktır. Bunun dışında veriye erişim
engellenmiştir.
• Bu şekilde veri gizlenerek yanlışlıkla değiştirilmesinin
önüne geçilmiş olur.
Paketleme ve Veri Gizleme
• Veri ve bu veri üzerinde işlem yapan fonksiyonlar
paketlenmiştir. Paketleme (encapsulation) ve veri
gizleme (data hiding) nesneye dayalı
programlamanın önemli iki kavramını oluşturmaktadır.
• Veri işlenmek istenildiğinde, bu veri üzerinde hangi
üye fonksiyonların işlem yaptığı tam ve kesin olarak
bilindiği için fonksiyonların gerçeklenmesi, hata
ayıklama, kodun güncellenmesi gibi Yazılım Yaşam
Çevrimi adımları kolaylaşmaktadır.
NESNE
• Gerçek dünya nesnelerden oluşmaktadır.
• Çözülmek istenen problemi oluşturan nesneler,
gerçek dünyadaki yapılarına benzer bir şekilde
bilgisayarda modellenmelidir.
• Nesnelerin yapıları iki bölümden oluşmaktadır:
1. Özellikler (nitelikler ya da durum bilgileri),
2. Davranışlar (yetenekler)
Nesneye Yönelik Tasarım
• Tasarım yapılırken sistemin işlevi değil, sistemi
oluşturan veriler esas alınır. Bu nedenle tasarım
yapılırken sorulması gereken soru,
• “Bu sistem ne iş yapar?” değil, “Bu sistem hangi
nesnelerden oluşur?” olmalıdır.
• Hangi unsurların nesne olarak modellenebilir:
• İnsan kaynakları ile ilgili bir programda; memur, işçi,
müdür, genel müdür.
• Grafik programında; nokta, çizgi, çember, silindir.
• Matematiksel işlemler yapan programda; karmaşık
sayılar, matris.
• Kullanıcı arayüzü programında; pencere, menü,
çerçeve.
Nesne Örneği: Grafik programındaki nokta
• Düzlemdeki bir noktanın özellikleri; x, y koordinatlarıdır.
• Davranışları ise, noktanın düzlemde yer değiştirmesi,
renginin değişmesi, ekranda kaybolmasıdır.
• Buna göre örnek olarak düşünülen Nokta modeli şu
bölümlerden oluşacaktır:
• x, y koordinatları için iki adet tamsayı değişken: x, y
• Noktanın koordinatlarını değiştirerek düzlemde yer değiştirmesini
sağlayan fonksiyon: hareket
• Noktanın ekranda görünmesini sağlayan bir fonksiyon: gorun
• Noktanın ekranda silinmesini sağlayan bir fonksiyon: kaybol
Nesne Örneği: Grafik programındaki nokta
• Model bir defa oluşturulduktan sonra, ana programda
bu modelden bir çok nesne yaratılabilir:
Nokta nokta1, nokta2, nokta3;
.
.
nokta1.hareket(50,30);
nokta1.gorun;
Bir Nesne Modeli
Nesneye Dayalı bir Programın Yapısı
Yöntemin Değerlendirilmesi
• Gerçek dünya nesnelerden oluştuğundan bu yöntem
ile sistemin daha gerçekçi bir modeli oluşturulabilir.
Program daha anlaşılır olur.
• Nesne modellerinin içindeki veriler sadece üye
fonksiyonların erişebileceği şekilde düzenlenebilirler.
• Veri saklama (data hiding) adı verilen bu özellik
sayesinde verilerin herhangi bir fonksiyon tarafından
bozulması önlenir.
• Programcılar kendi veri tiplerini yaratabilirler.
Yöntemin Değerlendirilmesi
• Bir nesne modeli oluşturduktan sonra bu modeli
çeşitli şekillerde defalarca kullanmak
mümkündür.(reusability)
• Programları güncellemek daha kolaydır.
• Nesneye dayalı yöntem takım çalışmaları için de
uygundur.
Modelleme Dilleri
• Yazılım geliştirmede kullanacağımız çeşitli modellerin
ifade edilmesi için modelleme dillerine ihtiyaç
duyarız.
• Nesne tabanlı programlama ortaya çıkmadan önce
Varlık İlişki diyagramları (ERD – Entity Relationship
Diagrams) ve Veri Akış diyagramları (DFD – Data
Flow Diagrams) modelleme araçları olarak
kullanılmaktaydı.
• Nesne tabanlı programlama ile birlikte yeni ihtiyaçlara
gereksinim oldu ve 1990’lı yıllarda yazılım sektöründe
bu amaçla 100’den fazla modelleme dili ortaya çıktı.
Modelleme Dilleri
• Bu durum birçok probleme yol açtı.
• 1997 yılında farklı modelleme dillerinin güçlü yanları
bir araya getirilerek tek bir dil yaratıldı.
• Bu dil UML (Unified Modelling Language – Birleşik
Modelleme Dili).