NESNEYE DAYALI YAZILIM GELİŞTİRME



Benzer belgeler
YAZILIM MODELLEME VE TASARIMI

YAZILIM MODELLEME VE TASARIMI

NESNEYE DAYALI PROGRAMLAMA VE C++

NESNE MODELLERİ : SINIFLAR

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

BİL-141 Bilgisayar Programlama I (Java)

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Kalıtım (Inheritance)

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6. Yrd.Doç.Dr.Hacer Karacan

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

YAZILIM MODELLEME VE TASARIM

Programlama Dillerinde Kullanılan Veri Tipleri

TÜMLEŞİK MODELLEME DİLİ. UML (Unified Modeling Language)

Decorator Tasarım Şablonu

BİL-142 Bilgisayar Programlama II

Ders Notlarının Creative Commons lisansı Feza BUZLUCA ya aittir. Lisans:

Nesne Yönelimli Programlama

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Yazılım Mühendisliği 1

Eylül 2007 de v1.0 ı yayınlanan SysML sayesinde endüstri mühendislerinin de ihtiyacı karşılanmış oldu.

SİSTEM VE YAZILIM. o Bilgisayar sistemleri donanım, yazılım ve bunları işletmek üzere gerekli işlemlerden oluşur.

Yaz.Müh.Ders Notları #4 1

YAZILIM MODELLEME VE TASARIM

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

YZM 2105 Nesneye Yönelik Programlama

NESNEYE YÖNELİK ÇÖZÜMLEME SÜRECİ

BMH-405 YAZILIM MÜHENDİSLİĞİ

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

BSM 532 KABLOSUZ AĞLARIN MODELLEMESİ VE ANALİZİ OPNET MODELER

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

YZM 2108 Yazılım Mimarisi ve Tasarımı

Ders 8 Konu Özeti ve Problemler

BTEP243 Ders 3. class Yazım Kuralı:

Yazılım Mühendisliği Bölüm - 3 Planlama

NESNEYE YÖNELİK PROGRAMLAMA. Yrd.Doç.Dr. Zeynep ORMAN

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Nesne Tabanlı Programlama. Ders Notları

NESNE TABANLI PROGRAMLAMA

BLG Sistem Analizi ve Tasarımı. Öğr. Grv. Aybike ŞİMŞEK

Bilgisayarda Programlama. Temel Kavramlar

C++ ile Nesneye Dayalı Programlama

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Sunum İçeriği. Programlamaya Giriş

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

YZM 2105 Nesneye Yönelik Programlama

Nesne Yönelimli Programlama

NX Motion Simulation:

BİL-141 Bilgisayar Programlama I (Java)

Erişim konusunda iki taraf vardır:

Rapor Hazırlama Kuralları

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

Kullanım Durumu Diyagramları (Use-case Diyagramları)

HSancak Nesne Tabanlı Programlama I Ders Notları

Yaz.Müh.Ders Notları #6 1

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

YAZILIM KAVRAMINA BİR BAKIŞ. Gürcan Banger Elektrik Yük. Müh. ESOGÜ - 9 Nisan 2007

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

Sanal Ortamda Nesnelerin Haptic Kol ile Manipülasyonu. Sevcan AYTEKİN Alpaslan DUYSAK

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

NESNEYE YÖNELİK PROGRAMLAMA Unified Modelling Language (UML) Bütünleşik Modelleme Dili

YAZILIM MODELLEME VE TASARIM

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

IDE4DB Veritabanı Geliştirme Platformu Bitirme Projesi Sunumu

public static int Toplam int x, int y

YZM 2108 Yazılım Mimarisi ve Tasarımı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

YAZILIM MODELLEME VE TASARIM

YZM 2108 Yazılım Mimarisi ve Tasarımı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

7. HAFTA. Erişim Belirleyiciler

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

BM208- Nesneye Dayalı Analiz ve Tasarım. Sunum 7

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

2. Iterasyon. Bu bölümde ele alınan problemler:

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

MONTE CARLO BENZETİMİ

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

Rapor Hazırlama Kuralları

Üst Düzey Programlama

9.DERS Yazılım Geliştirme Modelleri

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bir yazılım geliştirme metodolojisi aşağıdaki adımlardan meydana gelir; Yazılım geliştirme sürecine destek verecek araçlar, modeller ve yöntemler.

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

YZM 2105 Nesneye Yönelik Programlama

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Transkript:

NESNEYE DAYALI YAZILIM GELİŞTİRME Yrd.Doç.Dr. Feza BUZLUCA İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü http:// 1.1 Dersin Hedefi: GİRİŞ Bilgisayardonanımları geliştikçe yaşantımızın değişik alanlarında her geçen gün daha karmaşık problemlerin çözümü için bilgisayardan yararlanmaya çalışıyoruz. Bu durum yazılımlardan beklenen işlevleri ve performansı da arttırıyor. Gerçek dünyanın karmaşıklığı yazılımlara yansıyor. Bir programlama dilini iyi bilmek kaliteli bir yazlım geliştirmek için yeterli olmuyor. İyi bir yazılım oluşturabilmek için uygun yazılım geliştirme tekniklerini de bilmek ve uygulamak gerekiyor. Uygun teknikler kullanılmadığında bir çok değişik problemle karşılaşılmaktadır. Örneğin; yazılımın zamanında tamamlanamaması, bütçeninaşılması, bir çok hata çıkması ve bu hataların giderilememesi, yazılımın yeni gereksinimlere göre uyarlanamaması, bakım maliyetlerinin yüksek olması, eski projelerde hazırlanan yazılım modüllerinin yeni projelerde kullanılamaması gibi. 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 Analysis and Design OOA/D) yöntemlerinitanıtmaktır. 1.2 1

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. Tümleşik modelleme dili (The Unified Modeling Language UML), analiz ve tasarımların ifade edilmesinde yaygın olarak kullanılan ve endüstri standardı haline gelmiş görsel bir yöntemdir. Bu derste de çözümleme ve tasarım sonuçları UML ile ifade edilecektir. UML i ayrıntılı olarak öğretmek dersin hedefleri arasında yer almamaktadır, ancak UML diyagramları kullanılırken aynı zamanda bu dilin ders kapsamında kullanılan özellikleri tanıtılacaktır. Nesneye dayalı tasarım yapılırken yıllar içinde oluşan deneyimlerin yöntem haline dönüştürülmesiş ile oluşturulanş tasarım kalıplarından (design patterns) ) 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. Öğrencilerin bu dersten yararlanabilmeleri için nesneye dayalı programlama (OOP) yöntemini ve bu yöntemi destekleyen dillerden birini (C++, Java, C#) bilmeleri gerekmektedir. 1.3 Temel Kavramlar: Nesneye Dayalı Çözümleme (Analysis): Problem (uygulama) domenindeki, yani gerçek dünyadaki sınıflar veya nesneler (kavramlar) belirlenip tanımlanır. Bu aşamada amaç problemi çözmek değil, anlamaktır. Örnek: Kütüphane otomasyonundaki kavramlar: Kütüphane, Kitap, Üye, Görevli vs. Nesneye Dayalı Tasarım (Design): Yazılım (çözüm) domenindeki, yani bilgisayardaki sınıflar (ve nesneler) oluşturulur. Burada sınıfların içerikleri (özellik ve davranış) ve sınıflar arası ilişkiler tam olarak tanımlanır. Tasarım tamamlandıktan sonra bir programlama dili (C++, Java, C#) kullanılarak kodlama yapılır. Aşağıdaki şekilde küçük bir örnek üzerinde sınıfların değişik domenlerdeki biçimleri gösterilmiştir. Uygulama domeni baslik Kitap Uygulama domeni modeli Kitap -baslik: string +sayfagit(int) Yazılım domeni modeli public class Kitap{ private String baslik; public void sayfagit(int no) {... 1.4 2

Genel Bir Örnek: Zar Oyunu: Oyuncu iki zar atar. Zarların üste gelen yüzeylerindeki sayıların toplamı 7 ise oyuncu kazanır, aksi durumda kaybeder. Bu yazılımın gerçeklenmesinde aşağıdaki temel aşamalardan geçilir: 1. İsteklerin (Requirements) Belirlenmesi, Kullanım Senaryolarının (Use Case) Yazılması Yazılım geliştirmenin ilk aşaması isteklerin (requirements) belirlenmesidir. İstekleri belirlemek için kullanılan en geçerli yöntem, kullanım senaryoları (use case) yöntemidir. Bu yöntemde tasarımı yapılan sistem ile kullanıcıları arasında gerçekleşebilecek tüm olaylar numaralandırılarak adım adım yazılır. Örnek: Ana senaryo: 1. Oyuncu iki zarı yuvarlar. 2. Sistem zarların üstündeki değerleri ve toplamlarını gösterir. 3. Oyun sona erer. Alternatif akışlar: 2.a. Üste gelen değerlerin toplamı 7 dir. Sistem oyuncuya kazandığını bildirir. 2.b. Üste gelen değerlerin toplamı 7 den farklıdır. Sistem oyuncuya kaybettiğini bildirir. 1.5 2. Uygulama Domeninde Modelleme (Analiz) Uygulamayı (gerçeklenecek olan sistemi) oluşturan kavramlar (sınıflar), bunların özellikleri ve aralarındaki ilişkiler belirlenir. Bu aşamada elde edilen sınıflar gerçek dünyadaki sınıflardır. Oluşturulan modelin amacı problemi çözmek değil, anlamaktır. Bir oyuncu iki zar atar Sınıfın adı Oyuncu 1 atar 2 Zar Sınıfın niteliği isim 1 1 oynar Zar Oyunu 1 içerir düzey üsttekideğer 2 İlişkinin adı 1.6 3

3. Yazılım (Çözüm) Domeninde Modelleme (Tasarım) Bu aşamada tasarım yapılarak sistemin sorumlulukları tasarım kalıplarının yardımıyla uygun yazılım sınıflarına atanır. Tasarım sonucu iki farklı diyagram ile ifade edilir. a. Etkileşim Diyagramı: Sınıfların (nesnelerin) davranışları ve aralarındaki etkileşim belirlenir. ZarOyunu sınıfından yaratılan bir nesne :ZarOyunu zar1:zar zar2:zar Nesneye gelen mesaj sonuc:=oyna() yuvarlan() d1:=ustdegerver() Zar sınıfından yaratılan zar2 nesnesi Metodun gövdesi yuvarlan() d2:=ustdegerver() 1.7 b. Sınıf Diyagramı Sınıfların sahip olacakları üyeler (özellikler ve davranışlar) programda yer alacağı şekilde belirlenir. Bu aşamadaki model problemin çözümünü oluşturur. Yazılım sınıfı özel (private) nitelikler açık (public) metot ZarOyunu -zar1: Zar -zar2: Zar +oyna(): bool 1 2 Zar -ustdeger:int +ustdegerver():int +yuvarlan() Tasarımdan sonraki aşamalar: 4. Kodlama 5. Sınama İlişkinin (mesaj akışı) yönü Bu örnek ile kısaca açıklanan konular dersin ilerleyen bölümlerinde ayrıntılı olarak anlatılacaktır. 1.8 4

Nesneye Dayalı Analiz ve Tasarım NEDEN Gerekli? Yazılım Dünyasındaki Problemler: Donanım maliyetleri azalırken yazılım maliyetleri artmaktadır. Yazılımların boyutları ve karmaşıklığı artmaktadır. Yazılımların bakım maliyetleri çok yüksektir. Donanım problemleri ile çok az karşılaşılırken yazılım hataları sıklaşmaktadır. Yazılım Geliştirme Aşamalarının Maliyetleri: İsteklerin Çözümlenmesi (Requirements): %3 Tasarım: %8 Kodlama (Programlama): %7 Sınama: %15 Bakım: %67 (Maliyeti çok yüksek, neden?) 1.9 Çözüm: Yazılım geliştirme: hem bir bilim dalı hem de bir sanat. Kolay ve kesin bir reçete yok. Sezgiler ve deneyim önemli Aşağıdaki unsurlar doğru şekilde kullanıldıklarında işler kolaylaşıyor, başarı olasılığı yükseliyor. Uygun yazılım geliştirme süreçleri: Yinelemeli (iterative) ve evrimsel (evolutionary) yöntemler Tümleştirilmiş geliştirme süreci (The Unified Process UP) Programlama ve modelleme yöntemleri Nesneye Dayalı Yöntem Yardımcı araçlar UML (The Unified Modeling Language) Yazılım Geliştirme Programları Tasarım kalıpları (Design Patterns) 1.10 5

Bir Yazılımın Kalitesi Bir yazılım istenen işi doğru olarak yapmalıdır (useful). Program kolay kullanılabilir olmalıdır (usable). Program uygulamanın gerektirdiği kadar hızlı çalışmalıdır. Program, sistem kaynaklarını (işlemci, bellek, disk, iletişim ağı vb.) gerektiğinden daha fazla kullanmamalıdır. Yazılım sağlam olmalıdır. kullanıcı Yazılımı güncellemek kolay olmalıdır. Yazılımın bakımı (değişen isteklere uyum ve hata giderme) kolay olmalıdır. Yazılım projesi yeterli bir süre içinde tamamlanmalıdır. Yazılımın modülleri yeni projelerde tekrar kullanılabilmeli (reusable). Yazılımı geliştirme maliyeti düşük tutulabilmelidir. Yazılım geliştiren Programlama dilini bilmek yeterli değil. Programlama dilinin desteklediği yöntemleri iyi kullanabilmek gerekir. "Çekiç sahibi olmak kişiyi mimar yapmaz." 1.11 Nesneye Dayalı Yöntemin Yararı: Programlama Nedir? İnsanlar günlük hayatta kullandıkları konuşma dilleri ile çeşitli kavramları birbirlerine anlatmaya çalışırlar. Benzer şekilde bilgisayar programcıları da çözülmesi gereken problemlerle ilgili kavram ve varlıkları, kullandıkları programlama dili ile bilgisayarda ifade etmeye çalışırlar. Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarda ifade edilmesidir. Bunu yapabilmek için, kodlamaya geçilmeden önce tasarım aşamasında, problemi oluşturan varlıkların bilgisayarda ifade edilebilecek şekilde modellerinin oluşturulması gerekmektedir. Nesneye Dayalı Yöntem bu modellerin oluşturulmasında ve gerektiğinde sistemin güncellenmesinde diğer yöntemlere göre bazı avantajlar sağlar. Problem Uzayı Soyutlama Modelleme Programlama Dili Gerçekleme Çözüm Uzayı Gerçek Dünya Programcı Bilgisayar 1.12 6

İşleve Dayalı (Procedural) Programlama Yöntemi Basic, Fortran, Pascal, C gibi programlama dillerinin desteklediği bu yöntemde öncelikle gerçeklenmek istenen sistemin yapması gereken iş belirlenir. Büyük boyutlu ve karmaşık işler, daha küçük ve basit işlevlere (fonksiyon) bölünerek gerçeklenirler. Gerçek dünyanın modellenmesi (soyutlama) fonksiyonlar ile yapılır. Ana program Fonksiyonlar ORTAK (GLOBAL) VERİLER 1.13 İşleve Dayalı Programlama Yönteminin Değerlendirmesi Karmaşık bir problemi daha basit fonksiyonlara bölmek programlama işini kolaylaştırmaktadır. Ancak, yazılımların karmaşıklılığı sadece boyutlarına bağlı değildir. Birimler arası ilişkiler ve bilgi akışı karmaşıklığa neden olabilir. Gerçek dünyadaki sistemler sadece fonksiyonlardan oluşmaz. Sistemin gerçeğe yakın bir modelini bilgisayarda oluşturmak zordur. Tasarım aşamasında verilerin göz ardı edilip fonksiyonlara ağırlık verilmesi hatalar nedeniyle verilerin bozulma olasılığını arttırır. Veri gizleme (data hiding) olanağı kısıtlıdır. Programcılar kendi veri tiplerini yaratamazlar Programı güncellemek gerektiğinde, ğ,yeni öğeler ğ eklemek ve eski fonksiyonları yeni eklenen unsurlar için de kullanmak zordur. İşleve dayalı yöntemi de kullanarak kaliteli programlar yazmak mümkündür. Ancak nesneye dayalı yöntem kaliteli programların oluşturulması için programcılara daha çok olanak sağlamaktadır ve yukarıda açıklanan sakıncaları önleyecek mekanizmalara sahiptir. 1.14 7

Nesneye Dayalı (Object-Oriented) Programlama Yöntemi 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. Nitelikler (özellikler ya da durum bilgileri), 2. Davranışlar (yetenekler, sorumluluklar) Nesneler belli bir sorumluluğu yerine getirmek üzere tasarlanırlar Tasarım yapılırken sistemin işlevi değil, sistemi oluşturan varlıklar 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. 1.15 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 görünmesi ve ekranda kaybolmasıdır. Buna göre, örnek olarak düşünülen Nokta modeli şu bölümlerden oluşacaktır: x ve 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 etmesini sağlayan fonksiyon: hareket, Noktanın ekranda görünmesini sağlayan bir fonksiyon: gorun, Noktanın ekrandan silinmesini sağlayan bir fonksiyon: kaybol. Model bir defa oluşturulduktan sonra, ana programda bu modelden bir çok nesne yaratılabilir. Nokta nokta = new Nokta(); : nokta.hareket(50,30); nokta.gorun(); // Nokta sınıfında bir nesne yaratıldı // nokta nesnesine mesaj gönderiliyor 1.16 8

Bir Nesne Modeli: Veriler (nitelikler) kaybol x y gorun Fonksiyonlar (davranışlar, sorumluluklar) hareket ( Client - server ) Nesneye Dayalı Bir Programın Yapısı: Ana program mesaj Nesneler mesaj mesaj mesaj mesaj 1.17 Nesneye Dayalı Programlama Kavramlarını Kısaca Anımsatma Sınıf Üyelerine Erişimin Denetlenmesi (Açık/Kapalı Prensibi) Sınıfı oluşturan programcı sınıf yapısının doğru çalışmasından sorumludur. Sınıfı nesne tanımlamak için kullanan programcı sınıfın iç yapısını bilmek zorunda değildir (kapalı). Bilmesi i gereken tek şey nesnelere nasıl mesaj yollanacağıdır ğ (açık). Bu özellikleri sağlamak için, sınıfı yazan programcı, sınıfın bazı üyelerini gizleyerek (data hiding) onlara sınıf dışından erişilmesini engelleyebilir. Bir sınıfın içindeki üyelere erişimi denetleyen üç farklı etiket bulunmaktadır: public (açık), private (özel) ve protected (korumalı). Bir sınıfın içindeki açık elemanlar o sınıfın dışarıya verdiği hizmetleri (services) tanımlarlar. Bunların tümüne sınıfın arayüzü (interface) denir. Özel üyeler sınıfın gerçeklenmesiyle (implementation) ilgili olduklarından sınıfın kullanıcılarını ilgilendirmezler. Bir sınıf iyi hizmet verebilecek kadar açık, Kullanıcıyı ayrıntılar ile uğraştırmayacak ve sınıfın zarar görmesine izin vermeyecek kadar kapalı olmalıdır. 9

Sınıflar (Nesneler) Arasındaki İlişkiler (Relations) Bir uygulamanın yapısal analizi büyük ölçüde gerekli sınıfların ve sınıflar arasındaki ilişkilerin belirlenmesine dayanır. Nesneye dayalı dünyada sınıflar arasında; bağlantı (association), sahip olma (aggregation), -dan oluşma (composition), kalıtım (inheritance) gibi ilişkiler olur. Bağlantı (Association) Sınıflar arasında hizmet alma/vermeye dayalı ilişkidir. işveren 1 1..* çalıştırır işçi Çoğunlukla ğ çift yönlüdür. Tek yönlü olduğu ğ durumlarda ok kullanılır. işçi 1..* 1 Yanında çalışır işveren Nesneler arasındaki bağlantıya bağ (link) denir. 1.19 İç içe nesneler: Nesnelerin başka sınıfların üyesi olması Sahip olma ilişkisi (Aggregation / Compositon) Sahip olma ilişkisinin (has a relation) iki ayrı türü vardır: Toplama, bir araya getirme (Aggregation ): İçerilen nesneler (alt parçalar) kendi başlarına da kullanılırlar. Sadece o nesneye ait parçalar değillerdir. Örneğin havaalanında uçaklar vardır. UML sınıf diyagramında bu ilişki ifade edilirken Hava alanı 1 * kutucuğun içi boş bırakılır. Uçak Meydana gelme (Composition ): Alt parçalar o nesneyi meydana getirmek için oluşturulmuşlardır; kendi başlarına kullanılmazlar. Örneğin otomobilin motoru vardır. UML sınıf diyagramında bu ilişki ifade edilirken kutucuğun içi doldurulur. Otomobil 1 1 Motor 1.20 10

Kalıtım (Inhertiance), Generalization /Specialization Varolan genel bir sınıftan daha özel (ek niteliklere sahip) sınıflar türetilebilir. Bu türetimde üst sınıfın ayrıntılarının bilinmesine ve kaynak kodunun elde edilmesine gerek yoktur. Yararları: 1. Tekrar kullanılabilirlik (reusability). Sistemin genel kısımları önce kodlanır. Daha özel kısımlar genel kısımlardan türetilir. Ortak özelliklerin yeniden yazılmasına gerek kalmaz. 2. Çok şekillilik (polymorphism) ile birlikte kullanıldığında, aynı sınıftan türeyen farklı varlıkların onlara mesaj gönderen nesnelere aynı varlıklar gibi görünmesini sağlar. Yandaki örnek diyagramda Müdür bir öğretmendir (is a relation). Müdür öğretmenin tüm özelliklerine sahiptir, ayrıca ek özelliklere sahiptir. Üst sınıfın (öğretmen) istenen özellikleri alt sınıfta (müdür) değiştirilebilir (overriding). Öğretmen İsim Yaş Öğrenci sayısı Müdür Okul adı Öğretmen sayısı 1.21 Çok Şekillilik (Polymorphism) Aynı mesaja farklı sınıflardan yaratılmış olan nesneler farklı tepkiler verirler. Mesajı gönderen taraf bu mesajı hangi sınıftan bir nesneye gönderdiğini bilmek zorunda değildir. public class Teacher{ // Base class private String name; private int numofstudents; public Teacher(String name, int nos){... // Constructor of base public void print() { System.out.println("Name:"+name); System.out.println("Num of Students:"+ numofstudents ); class Principal extends Teacher{ // Derived class private String SchoolName; public Principal(String name, int nos, String SName){...; public void print(){ // polymorphic method super.print(); System.out.println("School Name:" + SchoolName ); 1.22 11

void show (Teacher teacher) { teacher.print(); // hangi print Yandaki örnekte show fonksiyonu Teacher sınıfından türeyen tüm sınıfların nesneleri üzerinde işlem yapabilir. // Test amaçlı program public class Example { public static void main(string[] args) { Teacher t1 = new Teacher("Teacher 1",50); Principal p1 = new Principal ("Principal 1",40,"School"); show(t1); show(p1); Çok şekillilik esneklik sağlar. Örnek olarak ileride Teacher sınıfından türetilerek stajyer öğretmenleri tanımlamak üzere InternTeacher adlı yeni bir sınıf sisteme katılsa show fonksiyonunda bir değişiklik yapmaya gerek olmaz. 1.23 Nesneye Dayalı Yöntemin Değerlendirmesi: 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 (sınıfların) 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. Bir nesne modeli oluşturduktan sonra bu modeli çeşitli şekillerde (aggregation, inheritance) defalarca kullanmak mümkündür (reusability). Programları güncellemek daha kolaydır. Programların bakımını yapmak daha kolaydır. Nesneye dayalı yöntem takım çalışmaları için uygundur. 1.24 12