Professional Documents
Culture Documents
GİRİŞ
Yazılım Geliştirmenin Özellikleri ve Dersin Hedefi (devamı):
Yazılım Geliştirmenin Özellikleri ve Dersin Hedefi:
• Bir programlama dilini iyi bilmek kaliteli bir yazlım geliştirmek için yeterli
• Bu derste "endüstriyel boyutlu" yazılımlar ele alınacaktır. değildir.
Bu tür yazılımlar bir çok işlevsel yeteneğe sahiptirler ve bir çok birimden • Programlama (kodlama) zevkli bir konudur ama kaliteli bir yazılım sistemi
oluşurlar. oluşturmak daha karmaşık ve zor bir iştir. (Philippe Kruchten)
• Gerçek dünyanın karmaşıklığı yazılımlara yansıyor. Bu nedenle günümüz • İyi bir yazılım oluşturabilmek için uygun yazılım geliştirme tekniklerini de bilmek
yazılımları en az diğer mühendislik ürünleri (bina, köprü, taşıt yapımı) kadar ve uygulamak gerekiyor.
karmaşıktır.
Yazılım Dünyasındaki sorun (The software crisis)
• Günümüzün modern yazılımları çok sayıda kişinin yer aldığı takımlar halinde • Yazılımın zamanında tamamlanamaması
yazılıyor. Yazılımlar bir çok modülden (sınıf, nesne, hizmet) oluşuyor.
• Bütçenin aşılması, bakım maliyetlerinin yüksek olması,
Bu da iyi bir iletişim altyapısı ve modüller arası uyum gerektirir.
• Bir çok hata çıkması ve bu hataların giderilememesi,
• Yazılımlar sürekli gelişirler (değişirler!). • Yazılımın yeni gereksinimlere göre uyarlanamaması,
Bu gelişme ve değişim hem yazılımın geliştirilmesi sürecinde hem de yazılım • Eski projelerde hazırlanan yazılım modüllerinin yeni projelerde
tamamlandıktan sonra olur. kullanılamaması
Bu nedenle esneklik çok önemlidir.
Bu dersin amacı, yukarıda kısaca sıralanan sorunları gidererek kaliteli yazılımlar
geliştirmeyi sağlayan Nesneye Dayalı Çözümleme ve Tasarım (Object-Oriented
Anahtar sözcükler: Karmaşıklık, iletişim (işbirliği), uyum, esneklik (değişim)
Analysis and Design – OOA/D) yöntemlerini tanıtmaktır.
http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.3 http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.4
http://www.buzluca.info http://www.buzluca.info
Dersin Kapsamı:
• Dersin ilk bölümlerinde istekleri ve problemi (gerçeklenecek olan sistemi)
anlamak için yapılması gereken çözümleme (analysis) üzerinde durulacaktır.
Ardından sistemin, işbirliği yapan nesneler halinde nesneye dayalı olarak nasıl
tasarlanacağı (design) açıklanacaktır.
Temel amaç • Analiz ve tasarımların ifade edilmesinde tümleşik modelleme dili (The Unified
Modeling Language – UML) kullanılacaktır.
karmaşıklığı çözebilmek,
Yazılım • UML’i ayrıntılı olarak öğretmek dersin hedefleri arasında yer almamaktadır,
Yazılım değişimlerle baş edebilmek,
Mühendisi ancak UML diyagramları kullanılırken aynı zamanda bu dilin ders kapsamında
esnek ve tekrar kullanılan özellikleri tanıtılacaktır.
kullanılabilir yazılım • Nesneye dayalı tasarım yapılırken yıllar içinde oluşan deneyimlerin yöntem
sistemleri geliştirerek, haline dönüştürülmesi ile oluşturulan tasarım kalıplarından (design patterns)
(1)
Deneyim maliyetleri düşürmek. yararlanılır.
Bu derste de tasarım aşamasında GRASP kalıpları ve yaygın biçimde kabul gören
GoF kalıpları tanıtılacaktır.
• Son olarak yazılım kalitesinin ölçülmesinde ve değerlendirilmesinde kullanılan
(2) yazılım metrikleri ele alınacaktır.
• Öğrencilerin bu dersten yararlanabilmeleri için nesneye dayalı programlama
(1) http://www.photoeverywhere.co.uk (OOP) yöntemini ve bu yöntemi destekleyen dillerden birini (C++, Java, C#)
(2) http://www.cafepress.co.uk/
bilmeleri gerekmektedir.
http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.6
http://www.buzluca.info http://www.buzluca.info
1
Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı
Temel Kavramlar:
Yazılım Mühendisinin Dünyası
Yazılım geliştirme aşamaları:
• İstekler (Requirements)
Müşterilerin isteklerinin anlaşılması. Kullanım durumlarının (use case) Problem Senaryolar Uygulama modeli Tasarım modeli Program (kod) Yazılım
yazılması. (ürün)
• Problemin analizi (Domain analysis)
Sistemin (problemin) anlaşılması. Sistem ne yapacak? Tasarım prensipleri Tasarım kalıpları
Use case Analiz
• Tasarım (Design)
Sistemin işbirliği yapan nesneler şeklinde tasarlanması. Programlama Dili
Sorumlulukların sınıflara atanması.
Yazılım
• Gerçekleme (Implementation) Uzayı
Kodlama (Coding), programlama (programming) Problem Program
Uzayı
• Değerlendirme (Evaluation) Soyutlama Tasarım
Sınama (testing), performans ölçümü ve değerlendirmesi, bakım Modelleme Gerçekleme
Bu dersin ana konusu sorumlulukların sınıflara uygun şekilde atanmasıdır (tasarım). Analist/ Yazılım Mimarı / Programcı Çözüm Dünyası
Gerçek Dünya
(Yazılım Mühendisi)
Ayrıca isteklerin anlaşılması ve analiz konusuna da değinilecektir.
http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.9 http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.10
http://www.buzluca.info http://www.buzluca.info
2
Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı
3
Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı
Eğer print fonksiyonu C++ dilinde sanal Örnek tasarımın UML diyagramı:
void show (const Teacher * tp)
(virtual) olarak tanımlanmazsa show
{
fonksiyonunda her zaman Teacher
tp->print(); // hangi print
sınıfındaki fonksiyon çağırılır. Show modülündeki tp
} işaretçisi Teacher
print fonksiyonu sanal olarak tanımlan-
sınıfından türetilen
// Test amaçlı main dığında çok şekillilik özelliği kazanır. Bu
tüm sınıfların nesnelerine
int main() durumda tp işaretçisi hangi tipte bir işaret edebilir.
{ nesneye işaret ediyorsa ona ait sınıfta-
Teacher t1("Teacher 1",50); ki print fonksiyonu canlanır.
Principal p1("Principal 1",40,"School"); Bu durumda hangi metodun çağırılaca- tp
Teacher *ptr; ğına program çalışırken (run-time) ka- Show Teacher Bu sınıfın eklenmesi
char c; rar verilmiş olur. Show modülünü etkilemez.
cout << "Teacher or Principal "; cin >> c; Çok şekillilik esneklik sağlar. print()
if (c=='t') ptr=&t1;
Yukarıdaki örnekte show fonksiyonu
else ptr=&p1;
Teacher sınıfından türeyen tüm sınıf-
show(ptr); // hangi print ?
ların nesneleri üzerinde işlem yapabilir.
: Principal InternTeacher
Örnek olarak ileride Teacher sınıfından türetilerek stajyer öğretmenleri tanımla-
mak üzere InternTeacher adlı yeni bir sınıf sisteme katılsa show fonksiyonunda bir print() print()
değişiklik yapmaya gerek olmaz.
http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.23 http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.24
http://www.buzluca.info http://www.buzluca.info
4
Yazılım Modelleme ve Tasarımı Yazılım Modelleme ve Tasarımı
C++ dilinde işaretçiler yerine kullanımı daha basit olan referans tipi de (&)
Modellemenin Önemi ve Yararı:
kullanılabilir.
Aşağıdaki örnekte show fonksiyonun giriş parametresi referans tipindedir. • Uygulama (analiz) modeli gerçek dünyadaki problemi ve üzerinde
çalışacağımız sistemi doğru şekilde anlamamızı sağlar.
// Show is a system that operates on Teachers and Principals
void show (const Teacher & tp) • Tasarım modeli sistemin tüm gerekli işlevlerinin (sorumluluklarının) sağlanıp
{ sağlanmadığının görülmesini sağlar.
tp.print(); // which print Bu model ayrıca tasarımımızı güvenlik, esneklik gibi ölçütlere göre sınamamızı
} ve değerlendirmemizi de sağlar.
// Only to test the show function
• Model tasarım ile ilgili kararlarımızı daha kolay sunmamızı ve açıklamamızı
int main()
sağlar.
{
Teacher t1("Teacher 1", 50); Bu durum takım içi iletişimi ve çalışmayı kolaylaştırır.
Principal p1("Principal 1", 40, "School"); • Modeller gerekli düzeltme ve değişikliklerin yazılım geliştirmenin erken
char c; aşamalarında yapılmasını sağlarlar. Bu da maliyeti düşürür.
cout << "Teacher or Principal " ; cin >> c;
if (c == 't') show(t1); • Örneğin uçaklar üretilmeden önce tasarımlarını fiberglastan modeli yapılır ve
else show(p1); bu model rüzgar tünelinde sınanır.
:
Eğer nesneye dayalı programlama konusunda bilgi eksikliğiniz varsa Object- “Progress is possible only if we train ourselves to think about programs
oriented programming ders notlarını mutlaka gözden geçiriniz. without thinking of them as pieces of executable code.”
http://www.ninova.itu.edu.tr/tr/dersler/bilgisayar-bilisim-fakultesi/21/blg-252e/ekkaynaklar/ Edsger W. Djikstra (1930-2002)
http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.25 http://www.akademi.itu.edu.tr/buzluca ©2002 - 2012 Dr. Feza BUZLUCA 1.26
http://www.buzluca.info http://www.buzluca.info
Diğer Kaynaklar:
Gamma E., Helm R., Johnson R., Vlissides J., Design Patterns :
Elements of Reusable Object-Oriented Software, Reading MA,
Addison-Wesley, 1995.