Tasarım Örnekleri. Senaryoların Gerçeklenmesi (Use-Case Realization)



Benzer belgeler
Senaryoların Gerçeklenmesi (Use-Case Realization)

Senaryoların Gerçeklenmesi (Use-Case Realization)

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

Nesneler yan yana gösterilir. Etkileşimler (mesajlar) oluştukları sıra ile yukarıdan aşağıya doğru çizilirler.

Tasarım Modelinin (Design Model) Oluşturulması

Tasarım Modelinin (Design Model) Oluşturulması

Tasarım Modelinin (Design Model) Oluşturulması

Uyguluma (Problem) Domeninin Modellenmesi

Sistem Analizi ve Tasarımı

Sistem Analizi ve Tasarımı

YAZILIM MODELLEME VE TASARIM

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

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

YZM 2105 Nesneye Yönelik Programlama

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

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

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

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

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

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

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

T.C. Damla Ok Mesutcan Kurt Ağustos Ali Murat Tiryaki

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

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

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

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

NESNEYE YÖNELİK TASARIM SÜRECİ

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

BİL-142 Bilgisayar Programlama II

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

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

YAZILIM MODELLEME VE TASARIM

Balon & Banka Teslim tarihi: 17 Kasım 2008

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

Diziler İndisli Değişkenler

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

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

BMH-303 Nesneye Yönelik Programlama

Şablon Türler (Generics)

Structural Patterns: Adapter Bridge Composite Decorator Facade Flyweight Proxy

YZM 2105 Nesneye Yönelik Programlama

BİL132 Bilgisayar Programlama II

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

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Sunum İçeriği. Programlamaya Giriş

BİL-141 Bilgisayar Programlama I (Java)

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

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

Nesneye Dayalı Programlama

Bölüm 10. Altprogramların gerçeklenmesi ISBN

"Şirket" Sunucusu ve Başarı Mobile Arasındaki HTTP Veri Aktarımı için Etkileşim Teknik Protokolü

public static int Toplam int x, int y

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Ders 8: Metotlar. barisgokce.com

YZM 2105 Nesneye Yönelik Programlama

BTEP243 Ders 3. class Yazım Kuralı:

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Nesneye Dayalı Programlama

Spring Framework Eğitimi

YZM 2105 Nesneye Yönelik Programlama

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

19 Şubat 2016 Cuma

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

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

CBÜ Teknoloji Fakültesi, Yazılım Mühendisliği. Nesneye Yönelik Programlama

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Nesne Yönelimli Programlama

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

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

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.

SLCM - Önkoşul Derslerin Bakımı

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

C# ile NJ Simulatöre Bağlanmak

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

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

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

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

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

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) 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.

Veritabanı İşlemleri

Ders 8 Konu Özeti ve Problemler

Unified Modeling Language

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

HSancak Nesne Tabanlı Programlama I Ders Notları

Kurucu Fonksiyonlar (Constructors)

HSancak Nesne Tabanlı Programlama I Ders Notları

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

C++ ile Nesneye Dayalı Programlama

Bölüm 2 Varlık-İlişki Veri Modeli: Araçlar ve Teknikler. Fundamentals, Design, and Implementation, 9/e

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

NESNEYE DAYALI YAZILIM GELİŞTİRME

MOKA ÖDEME SERVİSİ BAYİ İŞLEMLERİ ENTEGRASYON DOKÜMANI

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

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

Transkript:

Senaryoların Gerçeklenmesi (Use-Case Realization) Bu bölümde; senaryoların birbirleriyle etkileşimde olan (işbirliği yapan) yazılım sınıfları ve nesneler şeklinde nasıl tasarlanacağı ele alınacaktır. Bu aşamada senaryolardan ve uygulama domeninin modelinden yola çıkılır. Karmaşık işlemlerin yer aldığı sistemlerde sözleşmelerden de yararlanılır. Kalıplar ve prensipler Senaryolar Yazılım sınıfları Sorumluluklar Sorumlulukların atanması Ardışıl etkileşim Sözleşmeler İletişim Uygulama Domeni Modeli Tasarım Örnekleri Satışın Başlatılması: Bu örnekte makenew işlemine ilişkin sözleşmeden (contract) yararlanılarak sorumluluklar belirlenecek ve bu sorumluluklar GRASP kalıplarının yardımıyla uygun sınıflara atanacaktır. Contract CO: makenew Operation: Cross References: Use Cases: Process Preconditions: none Postconditions: - A instance s was created (instance creation). - s was associated with the (Association formed). - Attributes of s were initialized. Sözleşmenin son koşulları incelenerek sorumluklar belirlenir: sınıfından s nesnesinin yaratılması, s nin uygun nesnesi ile bağlanması, s nin başlangıç koşularının sağlanması. Bu sorumlulukların atanacağı sınıflar daha önce elde edilmiş olan yazılım sınıfları arasında aranır. Eğer uygun bir yazılım sınıf yoksa analiz modelindeki kavramsal sınıflar taranır. Bizim örneğimizde tasarıma yeni başladığımız varsayılırsa elimizde hiç yazılım sınıfı olmayacaktır. Bu durumda analiz modelindeki kavramsal sınıflar bize kaynak olacaktır. 5. 5.4 İletişim ve ardışıl n kullanımı: İletişim (communication) kullanılması durumunda her sistem olayı (giriş) için ayrı bir diyagram çizmek gerekir. :???() () :???() :???() Örnek sistemimizde bütün girişler terminale yapıldığından sınıfı denetçi (controller) olarak atanmaya uygundur. Analiz modeli incelendiğinde satış ile ilgili bilgiler de terminalden geçtiği ve satışı terminalin yoğun olarak kullandığı görülür. Yaratıcı kalıbına göre nesnelerini sınıfının yaratması uygun olacaktır. Bu işlem sonucunda zaten nesnesi nesnesine bağlanmış olacaktır. Analiz modeline göre nesnesi satış kalemleri içermektedir. Bu nedenle başlangıç işlemi olarak satış kalemlerini içerebilen boş bir liste yaratılır. Yaratıcı ve 'ye göre Yaratıcı'ya göre yaratılır Yaratıcı'ya göre boş bir nesne grubu (liste yaratır make() :???() lineitems: List<sLineItem> 'in kurucusu (constructor) Boş bir nesne kümesidir. 5.2 5.5 Ardışıl (sequence) diyagramlarda ise tüm sistem olayları (giriş) aynı diyagram üzerinde gösterilebilir. : make() : addlineitem( spec, quantity ) Şekillerin karışık olmaması için ardışıl (sequence) diyagramlar da sistem olaylarına göre ayrı ayrı çizilir. : : addlineitem( spec, quantity ) : 5.3 Örnek: Contract CO2: Operation: (itemid: ItemID, quantity: integer) Cross References : Use Cases: Process Preconditions: There is a sale underway Postconditions: - A slineitem instance sli was created (instance creation). - sli was associated with the current (association formed). - sli.quantity became quantity (attribute modification) - sli was associated with a ProductSpec. based on itemid match (association formed) nesne: Tüm sistem için görüntü denetçi olarak kullanılır. slineitem yaratma: Uygulama domeni modeli incelendiğinde sınıfının slineitem sınıflarını içerdiği görülür., slineitem yaratır. slineitem'da yer alan quantity, tarafından 'e gönderilmeli. slineitem yaratılırken (constructor) bu değer parametre olarak kullanılır. 'dan 'e makelineitem mesajı gitmeli. Bu mesaj gerekli parametreleri içermeli. slineitem nesnesi uygun ile ilişkilendirilmeli. Belli bir itemid'ye bağlı olarak 'ı bulmak kimin sorumluluğudur?, 'ları içerir. getspecification metoduna sahip olmalı. 5.6

Burada ortaya bir problem çıkmaktadır: Müşterinin satın aldığı ürünün kodu (bar kod numarası) terminal üzerinden sisteme girilmektedir. Bu itemid ye bakarak o ürünün hangisi olduğunu () bulmak kimin sorumluluğudur? Ürünlerle ilgili bilgilerin (tanım, fiyat) yer aldığı nesneler () bir katalog nesnesinde () tutulmaktadır. ve nesnelerinin sistemin başlangıcında birlikte yaratıldıkları varsayılabilir. Bu durumda kataloğa get mesajını gönderip o ürüne ait nesnesini almak sorumluluğu nesnesinde olabilir. Önce nesnesine (id, qty) mesajıyla satın alınan ürünün kodu ve miktarı girilmektedir. nesnesi nesnesine get(id) mesajıyla ilgili ürünün tanımlayıcı nesnesini sormaktadır. nesnesi sahip olduğu nesne grubuna (Map) find(id) mesajını göndererek ilgili ürünün tanımlayıcı nesnesini arar ve bulunan tanımlayıcıyı nesnesine iletir. Böylece kod numarası sisteme girilmiş olan ürünün ne olduğu belirlenmiş olur. Kataloğu tarama sorumluluğu nesnesine de verilebilirdi ancak bu durumda nesnesi nesnesine bağlanmış olurdu. Ürünün tanımlayıcı bilgisini alan nesnesi bu bilgiyi ve miktarı nesnesi makelineitem(spec, qty) mesajıyla iletir. nesnesi bu bilgileri içeren bir slslineitem nesnesi yaratır ve bu nesneyi kendi satış kalemlerini tuttuğu listeye ekler. 5.7 Örnek: end Contract CO3: end Operation: Cross References: Use Cases: Process PreConditions: There is a sale underway PostConditions: -.iscomplete became true (attribute modification) nesne: Tüm sistem için görüntü denetçi olarak kullanılıyor. iscomplete değişkenini true yapmak kimin sorumluluğudur? kalıbına göre 'in sorumluluğudur. : becomecomplete() 5.0 (id, qty) : spec := getspecification(id) find mesajı gruba (map) gönderilir. Gruptaki tüm nesnelere değil.: spec := find(id) Catalog 2: makelineitem(spec, qty) 2.2: add(sli) lineitems: :Map<id,> List<sLineItem> Yaratıcı sli: slineitem 2.: create(spec, qty) Yeni yaratılan sli kümeye (liste) ekleniyor 5.8 Satışın toplam bedelinin hesaplanması: Önceki tasarım örneklerinde sorumluluklar sözleşmelerden elde edilmişti. Bu örnekte ise sorumluluk senaryolardan elde edilecektir. Main Success Scenario (or Basic Flow):. Customer arrives at POS checkout with goods and/or services to purchase. 2. Cashier starts a new sale. 3. Cashier enters item identifier. 4. System records sale line item and presents item, price, and running total. Price calculated from a set of price rules. Cashier repeats steps 3-4 until indicates done. 5. System presents total with taxes calculated. Senaryoya göre satışın toplam bedelinin hesaplanması gerekiyor. kalıbına göre gerekli bilgilere ulaşabilir. Toplam bedel = tüm satış kalemlerinin toplamı Satış kalemi bedeli = ürün miktarı ürün birim fiyatı Gerekli bilgiler ve uzmanları: Bilgi.Price slineitem.quantity Bir satıştaki tüm kalemler slineitem 5. Etkileşim ile birlikte yazılım sınıfları da oluşturulur. Bu diyagramlar ile ilgili daha fazla bilgi ileriki bölümlerde verilecektir. st = lineitems[i].quantity lineitems[i].spec.price catalog getspecification() Map.. t := gettotal() [i:=..n] st := getsubtotal().: price := getprice() lineitems[i]: slineitem. (). current makelineitem() lineitems slineitem ordered // constraint public int gettotal() int tot = 0; for each slineitem, sli tot = tot + sli.getsubtotal(); return tot; Specification 5.9 2

Ödeme nesnesinin yaratılması: GRASP kalıplarından ve Yaratıcı'ya göre Ödeme () nesnesini yaratmak için iki aday vardır ve. Az bağımlılık (Low coupling) kalıbına göre Ödeme'nin Satış tarafından yaratılması daha uygundur. make(cachtendered) Birden fazla seçenek olduğunda uyum ve bağımlılık unsurlarını dikkate almak yazılımın daha sağlam olmasını ve tekrar kullanılabilmesini sağlayacaktır. :make(cachtendered).: create(cachtendered) Yaratıcı ve az bağımlılık : 5.3 Başlangıç İşlemleri: Sistemlerin ilk çalışmaya başladıklarında olması gerekenler de ayrı bir senaryo grubu (use-case) olarak yazılabilir. Başlangıç aşamasında yapılacak işleri tasarım en son aşamasında belirlemek uygundur. Nesneye dayalı yöntemde bir başlangıç nesnesi (initial domain object) belirlenir. Bu nesne program çalışmaya başladığında yaratılacak ilk nesnedir. Başlangıç nesnesi, doğrudan içerdiği diğer nesneleri yaratma ve aralarındaki bağlantıyı (görünürlüğü) sağlama sorumluluğunu üstlenecektir. Başlangıç nesnesinin yaratılma yeri programlama diline göre değişebilir: public class Main // Java public static main( String[] args) // is initial domain object store = new (); register = store.get(); // register da yaratılıyor ProcessJFrame frame = new ProcessJFrame(register); // Frame ile register.. // bağlandı 5.6 Para üstünün hesabı: Process senaryo grubuna göre para üstünün hesaplanması ve gösterilmesi gerekiyor. Biz arayüz katmanı ile ilgilenmediğimizden para üstünün ekranda nasıl gösterildiğinin değil, nasıl hesaplandığı üzerinde duracağız. Para üstünü hesaplamak için toplam satış bedeline ve müşterinin ödediği miktar bilgisine gerek vardır. kalıbına göre para üstünü hesaplayacak bilgilere Satış () ve Ödeme () sınıfları sahip olabilir. Eğer bu sorumluluk sınıfına verilirse toplam bedeli öğrenmek için sınıfına başvurmasını gerektirir. Bu da önceden olmayan yeni bir bağımlılık yaratır. Sorumluluk sınıfına verilirse o da sınıfına gerek duyar. sınıfı nesnelerinin yaratıcısı olarak zaten bu sınıf hakkında bilgi sahibi olmak zorundadır. Bu durumda yeni bir bağımlılık yaratılmış olmaz. bal:= getbalance() : amt := getamount() : : : pc:.2: loadprodspecs() 2: create(pc).:.2.2: add(id,ps) ile pc bağlantısı sağlanıyor Boş bir nesne grubu (list, map) yaratılıyor specifications: Map<id,>.2.: create(id, price, ) ps: 2: t := gettotal() : Mesajın bir döngü içinde tekrarlandığını gösterir 5.4 5.7 Satış kayıtlarının tutulması: Sonlandırılan satışları bilmek ve kayıtlarını tutmak kimin sorumluluğundadır. Uygulama modeli incelendiğinde satışlarla ilgili bilgilere sahip olan Dükkan () sınıfıdır. Eğer sınıfı başka sorumluluklar ile fazla yüklenmediyse bu sorumluluğu alabilir. Eğer çok yüklü ise satışların kayıtlarını tutmak için SatışDefteri (sledger) adlı yeni bir sınıf düşünülebilir. Hatta bu sınıf geri dönülerek uygulama modeline de eklenebilir. Biz örneğimizde sorumluluğu sınıfına verdiğimizi varsayalım: make(cachtendered) 2: add(s) 2.: add(s) : completeds: List<> :make(cachtendered).: create(cachtendered) Aynı nesneye referans s : 5.5 Arayüz ile uygulama arasındaki bağlantının sağlanması: Başlangıç aşamasında arayüz nesnelerine denetçi nesnelerin referansları gönderilir. kullanılması katmanların ayrılmasını sağlar. Ancak tüm mesajların denetçi üzerinde geçmesi yavaşlamaya neden olabilir Bu nedenle bazı durumlarda arayüz nesnelerinin iş katmanındaki nesnelere doğrudan erişmesine izin verilebilir. Yandaki örnekte arayüz nesnesi (JFrame) nesnelerine bağımlı olmuştur. : Cashier Arayüz (Interface) Katmanı (Layer) Uygulama (Domain) Katmanı (Layer) presses button JFrame actionperformed( actionevent ) 3: t := gettotal( ) : (itemid, qty) 2: [s = NULL] s := get() :.:makelineitem(itemid,qty) sınıfının kararlı (çok değişmeyen) bir sınıf olduğu varsayılırsa bu bağımlılık problem yaratmayacaktır. 5.8 3

Görünürlük (Visibility) B nesnesinin A nesnesine görünür olması, A'nın B'ye erişebilmesi anlamına gelir. Görünürlük Türleri: Nitelik Görünürlüğü (Attribute visibility): B, A'nın bir niteliğidir (üyesidir). Parametre Görünürlüğü (Parameter visibility): B, A'nın bir metodunun parametresidir. Yerel Görünürlük (Local visibility): B, A'nın bir metodunda yerel değişkendir. Global Görünürlük (Global visibility): B, A'nın global uzayındadır. A nesnesinin B nesnesine mesaj gönderebilmesi için B A'ya görünür olmalıdır. Nitelik Görünürlüğü: Bir nesne diğerinin üyesi olduğundan, görünürlük nesnenin yaşam süresince devam eder. : class.. private catalog;.. // atama Kurucu metodta public void (itemid,qty).. spec= catalog.getproductspec(itemid);.. 5.9 address : Address name : Text add() register () make() catalog current Tasarımda sınıflar arasında yeni ilişkiler keşfedilebilir. Örneğin uygulama domeni modelinde ile arasında bir ilişki yoktu. completeds ordered catalog getspecification() becomecomplete() makelineitem() make() gettotal() Map.. lineitems slineitem ordered getsubtotal() payement amount : Money 5.22 Parametre Görünürlüğü: Bir metodun içinde geçerlidir. (id, qty) : spec := getspecification(id) Catalog makelineitem( spec, int qty) sli = new slineitem(spec,qty); 2: makelineitem(spec, qty) sli: slineitem 2.: create(spec, qty) // slineitem kurucu metodu slineitem( spec, int qty) = spec; // parametreden niteliğe 5.20 Bağımlılık İlişkisi (Dependincy Relationship): UML'de bağımlılık en genel haliyle, bir birimin (sınıf, senaryo) başka bir birim ile ilgili bilgilere sahip olması gerekliliğini ifade eder. Tasarım aşamasında ise bağımlılık, yazılım sınıfları arasındaki nitelik görünürlüğü dışındaki görünürlükleri ifade eder. Örneğin; yansı 5.8'de nesnesi nesnesine getspecification mesajını gönderdiğinde tipinden bir yanıt alır. Bu yanıt metodunda bir yerel değişken olarak saklanır. Bu nedenle nesnesinin nesnesine bir bağımlılığı vardır (yerel görünürlük). Ayrıca nesnesi makelineitem mesajının içinde tipinden bir parametre alır. Bu nedenle 'a bağımlıdır (parametre görünürlüğü). UML nda bağımlılık kesik çizgili bir ok ile ifade edilir. 5.23 Tasarım (Yazılım) Sınıfı Diyagramları (Desgin Class Diagrams-DCD) Tasarım aşamasında etkileşim oluşturulurken buna paralel olarak yazılım sınıflarını ifade eden UML sınıf da çizilir. Bu diyagramlarda; yazılım sınıflarının nitelikleri, niteliklerin tipleri, metotların parametreleri ve üyelerin erişim hakları büyük ölçüde belirtilir. Ayrıca yazılım sınıfları arasındaki ilişkiler ve bağımlılıklar yönlü olarak gösterilir. Yazılım sınıfları arasındaki bağlantılar (Navigability): İki yazılım sınıfı arasında doğrudan bir bağlantı olması çoğunlukla bir nitelik görünürlüğünün sonucudur. B nesnesi A nesnesinin üyesidir ve A, B'ye mesaj göndermektedir. Sınıf nda bunu ifade etmek için A sınıfından B sınıfına bir ok çizilir. Uygulama domenindeki bağlantılar oluşturulurken iki kavramsal sınıf arasında gerçek dünyada bir ilişki olup olmadığı araştırılmıştı. Tasarım aşamasındaki sınıf nda ise gerçekten iki yazılım sınıfı arasında bir görünürlük ilişkisi olup olmadığı araştırılır. Yazılım sınıfları arasındaki bağlantılar (navigability) iletişim nın incelenmesiyle bulunabilir. Örneğin 5.5, 5.8, 5.2 deki diyagramlar incelenebilir. address : Address name : Text add() register () make() current completeds ordered catalog getspecification() becomecomplete() makelineitem() make() gettotal() Map.. lineitems slineitem ordered getsubtotal() payement amount : Money 5.2 5.24 4

Üyelerin veri tipleri ve erişim hakları belli olduğu ölçüde sınıf nda gösterilir. + + (id : ItemID, qty : Integer) + + make(cashtendered : Money) - address : Address - name : Text + add(s : ) - - - + getspecification(id: ItemID) : + becomecomplete() + makelineitem(spec : ProdSpecification, qty : Integer) + make(cashtendered : Money) + gettotal() : Money - - - slineitem - + getsubtotal() : Money - amount : Money 5.25 5