YZM211 YAZILIM TASARIMI

Benzer belgeler
YZM211 YAZILIM TASARIMI

BÖLÜM 5 MİMARİ TASARIM YZM211 YAZILIM TASARIMI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

YMT 312-Yazılım Tasarım Ve Mimarisi MimariTasarım

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

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

YZM211 YAZILIM TASARIMI

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

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

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

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

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

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

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

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

NESNEYE YÖNELİK TASARIM SÜRECİ

BÖLÜM 1 YAZILIM TASARIMINA GİRİŞ YZM211 YAZILIM TASARIMI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

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

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

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

Bölüm 12. Nesne yönelimli programlama desteği

SiSTEM ANALiZi ve TASARIMI

YZM 2116 Veri Yapıları

YZM 2105 Nesneye Yönelik Programlama

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

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

SE311 YAZILIM YAPIMI BÖLÜM 3 YAPIM TASARIMI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

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

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

BÖLÜM 9 MİMARİ STİLLERİ YZM211 YAZILIM TASARIMI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

Ders 8 Konu Özeti ve Problemler

Decorator Tasarım Şablonu

Nesneye Dayalı Programlama

YZM 2105 Nesneye Yönelik Programlama

YMT 312-Yazılım Tasarım Ve Mimarisi Mimari Stilleri

Java Dersi. Altuğ Bilgin Altıntaş

Chapter 5 Sistem Modelleme. Lecture 1. Chapter 5 System modeling

YAZILIM MODELLEME VE TASARIM

Nesne Yönelimli Programlama

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

YMT 312-Yazılım Tasarım Ve Mimarisi Mimari Tasarım Çözümlemesi

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

BİL-142 Bilgisayar Programlama II

YZM311 YAZILIM YAPIMI BÖLÜM 4 TASARIM KALIPLARI. Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Erişim konusunda iki taraf vardır:

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) İş Kuralları ve Veri Modelleri

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 )

YZM 2105 Nesneye Yönelik Programlama

BİL-141 Bilgisayar Programlama I (Java)

UML ile Nesneye Yönelik Modelleme

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

YZM 2116 Veri Yapıları

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

Nesne Yönelimli Programlama

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) Varlık İlişki Modeli

NESNEYE YÖNELİK PROGRAMLAMA Temel Kavramlar

Veritabanı Yönetim Sistemleri (Veritabanı Kavramı) Veri Modelleri

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

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

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

Yazılım Gereksinimlerinin Görsel Çözümlemeleri: UML (UnifiedModeling Language) Birleştirilmiş Modelleme Dili

Geleneksel Yazılım Mühendisliğinden Alana Özel Yazılım Mühendisliğine Doğru

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

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

Yazılım Mimari Tasarımından Yazılım Geliştirme Çatısının Üretilmesinde Model Güdümlü Bir Yaklaşım

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

Nesne ve Sınıf Kavramları

KENT BİLGİ SİSTEMLERİ STANDARTLARININ BELİRLENMESİ ÇALIŞTAYI T.C. ÇEVRE VE ŞEHİRCİLİK BAKANLIĞI COĞRAFİ BİLGİ SİSTEMLERİ GENEL MÜDÜRLÜĞÜ

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

Sunum İçeriği. Programlamaya Giriş

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

Lecture 11: Generics

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

Kalıtım (Inheritance)

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) Varlık Bağıntı Modeli

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Üst Düzey Programlama

C# ile NJ Simulatöre Bağlanmak

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

YZM 2116 Veri Yapıları

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

Nesneye Dayalı Yazılım Metrikleri ve Yazılım Kalitesi. Ural ERDEMİR, Umut TEKİN, Feza BUZLUCA

İç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.

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

<Ekip Adı> <Proje Adı> Yazılım Gereksinimlerine İlişkin Belirtimler. Sürüm <1.0>

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

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

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

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

Klavyeden Basit Giriş/Çıkış İşlemleri

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

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

C++ Dersi: Nesne Tabanlı Programlama

Nesne Yönelimli Programlama

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Ferhat Cem CİHAN-Bilgisayar Mühendisliği Emre BALCI-Bilgisayar Mühendisliği

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:

Transkript:

BÖLÜM 7 STATİK ORTA-DÜZEY NESNE YÖNELİMLİ TASARIM: SINIF MODELLERİ YZM211 YAZILIM TASARIMI Yrd. Doç. Dr. Volkan TUNALI Mühendislik ve Doğa Bilimleri Fakültesi / Maltepe Üniversitesi

GENEL BAKIŞ 2 KISIM 1 İleri Düzey UML Sınıf Diyagramları SECTION 2 Ayrıntılı Tasarıma Giriş ve Orta-Düzey Sınıf Modelleme

KISIM 1 3 İleri Düzey UML Sınıf Diyagramları

Amaçlar 4 UML sınıf diyagramı notasyonlarında henüz değinilmemiş kısımları sunmak Yeni notasyonun kullanımıyla ilgili örnekler vermek Notasyonun iyi kullanılmasına yönelik sezgisel bazı kurallar sunmak

İçerik 5 Genelleştirme (Generalization) Soyut (abstract) ve somut (concrete) operasyonlar ve sınıflar Arabirimler (interface) Özellik görünürlüğü (feature visibility) Sınıf ve örnek değişkenleri ve operasyonları Agregasyon (aggregation) ve kompozisyon (composition) İlişki (association) sınıfları Sınıf diyagramları için sezgisel kurallar

Genelleştirme (Generalization) 6 Genelleştirme (generalization) bir model elemanıyla (ebeveyn parent) diğeri (çocuk child) arasındaki ilişkiyi belirten bir UML yapısıdır. Çocuk, özel bir ebeveyn türüdür. İçi boş üçgen ve çizgilerle temsil edilir. Üçgen ebeveyne bağlanır, çizgiler ise çocuğa. Genelleştirme UML sınıf diyagramlarında kalıtımı (inheritance) modellemek için kullanılır.

Genelleştirme Örneği 7 Mammal Quadruped Feline Lizard Tiger Lion Puma

Genelleştirme ya da İlişki (Association) 8 Genelleştirme sınıflar arasındaki bir ilişkidir. İlişki (association) ise ilişkilendirilmiş sınıfların örnekleri arasındaki ilişkiyi temsil eder. Genelleştirme bir ilişki (association) çeşidi değildir. Çoklukları yoktur, Rol isimleri yoktur, İsimleri yoktur (zaten adı genelleştirme dir).

Soyut (Abstract) Operasyonlar ve Sınıflar 9 Soyut operasyon (abstract operation) gövdesi/içeriği olmayan operasyondur; somut operasyon (concrete operation) ise gövdesi/içeriği olan operasyondur. Soyut sınıf (abstract class) kendisinden nesne yaratılamayan yani örneği (instance) oluşturulamayan sınıftır; somut sınıf ise örneği oluşturulabilen sınıftır. Bir sınıf Soyut bir operasyon içeriyorsa mutlaka soyut olmalıdır; Hiç soyut operasyonu olmasa bile kendisi soyut olabilir.

10 Soyut Sınıf ve Operasyonların Kullanımı ve Temsili Soyut sınıflar kendi alt sınıflarını belirli operasyonları implemente etmeye zorlarlar. Soyut sınıflar UML de şu şekilde gösterilir: İsimleri italik yazılarak, «abstract» ile stereotiplenerek, veya {abstract} özelliği verilerek. Soyut operasyonlar UML de şu şekilde gösterilir: Spesifikasyonları italik yazılarak, veya {abstract} özelliği verilerek.

Soyut Sınıf ve Operasyon Örnekleri 11 «abstract» Shape areaof() : float { abstract } Renderer render() Document { abstract } callnumber descriptors : String[*] Circle ScreenRenderer Book

Arabirimler (Interfaces) 12 Bir UML arabirimi (interface) public tanımlı özellik (attribute) ve soyut operasyonların bir koleksiyonudur. Sağlanan (provided) arabirim bir sınıf veya bileşen tarafından gerçeklenir Bir top veya lolipop sembolüyle temsil edilir, veya Bir gerçekleme konnektörüne (realization connector) sahip stereotipli bir sınıf sembolüyle temsil edilir Gereksinilen (required) arabirim Bir sınıf veya bileşen tarafından ihtiyaç duyulur Bir soket sembolüyle temsil edilir, veya Top sembolüne bir bağımlılık okuyla temsil edilir, veya Stereotipli sınıf sembolüne bir bağımlılık okuyla temsil edilir

Sağlanan Arabirim Notasyonları 13

Gereksinilen Arabirim Notasyonları 14

Modül Montaj Notasyonları 15 Timer Timer «interface» Observer update( arg : Object ) Observer TimerObserver TimerObserver

UML Özellik Görünürlüğü (Visibility) 16 Public İçinde yer aldığı sınıfın görünür olduğu her yerde görünürdür; + ile belirtilir. Package İçinde yer aldığı sınıfı içeren package içinde her yerde görünürdür; ~ ile belirtilir. Protected İçinde yer aldığı sınıfta ve onun tüm alt-sınıflarında görünürdür; # ile belirtilir. Private Yalnızca içinde yer aldığı sınıfta görünürdür; - ile belirtilir.

Özellik Görünürlüğüne Örnek 17 Alarm + identifier : String {constant} # location : String # description : String - classification : Classifier + getlocation() : String + getdescription() : String + action() ~ setclassification( c : Classifier) ~ getclassification() : Classifier # basicaction() FireAlarm IntrusionAlarm FloodAlarm

Sınıf ve Örnek Değişken & Operasyonları 18 Bir örnek değişkeni veya nesne değişkeni (instance variable), değeri ilgili sınıfın tüm örnekleri tarafından saklanan bir özelliktir. Bir sınıf değişkeni (class variable) yalnızca bir kez ve sınıfın kendisi tarafından saklanan ve sınıfın tüm örnekleri tarafından paylaşılan bir özelliktir. Bir örnek operasyonu veya nesne operasyonu (instance operation) yalnızca sınıfın bir örneği üzerinden çağrılabilir. Bir sınıf operasyonu (class operation) sınıf üzerinden çağrılabilir. UML de sınıf değişkenleri ve operasyonları static olarak adlandırılır. Bir özelliğin veya operasyonun spesifikasyonu altı çizili yapılarak belirtilir.

Özellik ve Operasyon Spesifikasyonu Örnek 19 Tokenizer - theinstance : Tokenizer + token : TokenType = NONE + tokentext : String - buffer : String - bufferposition : integer - delimiters : String + getinstance() : Tokenizer + nexttoken() + setbuffer( buffer : String ) + setdelimiter( delim : String ) TokenType + NONE : TokenType { constant } + NUMBER : TokenType { constant } + IDENTIFIER : TokenType { constant } + EQUAL : TokenType { constant } + MINUS : TokenType { constant } + PLUS : TokenType { constant } - name : String - TokenType( name : String ) + tostring() : String

Agregasyon ve Kompozisyon 20 Agregasyon ilişkisi (aggregation association) sınıflar arasındaki parça-bütün ilişkisini temsil eder. İçi boş elmas ve çizgiler ile gösterilir Elmas bütün e bağlanır, çizgiler ise parçalara İlişki (association) ile ilgili tüm süslemeleri içerebilir (ilişkinin yönü, ismi, çoklukları, vs.) Kompozisyon ilişkisi (composition association) ise herhangi bir anda her bir parçanın yalnızca bir tek bütün le ilişkilendirilebildiği bir agregasyondur. İçi dolu elmas ve çizgiler ile gösterilir

Agregasyon ve Kompozisyon Örnekleri 21 Human Church Family 0..2 0..2 * 1..* Arm Leg 0..1 0..1 Hand Foot 1..* Person 1..*

İlişki (Association) Sınıfları 22 Bir ilişki sınıfı (association class) birbirine bağladığı sınıfların örnekleri arasındaki bir ilişkiyi temsil eder, ve ayrıca ilişkiye özgü veri ve davranış barındırır. İlişki sınıfı bağlantısı kesik çizgiyle temsil edilir Sınıf bir ilişki çizgisiyle bağlanır İlişkilendirilmiş sınıflardan bir örnek çifti için yalnızca tek bir ilişki sınıfı örneği olabilir. Eğer daha fazla örnek gerekirse, aralarına yeni bir sınıf girmelidir (somutlaşan ilişki reified association).

İlişki Sınıfı Örneği 23 Medication * * Patient Prescription - date

Rol İsmi Görünürlüğü 24 İlişkiler (association) genellikle referanslar kullanılarak implemente edilir. Rol ismi bir referans özellik ismi olabilir Rol isimlerinin de görünürlük belirteçleri olabilir (+, #, ~, -). Rol isimlerinin görünürlük belirteçleri yazılmayabilir.

İlişki Ulaşılabilirliği (Navigability) 25 A ve B sınıfları arasındaki bir ilişkide eğer A sınıfının bir örneği B sınıfının bir örneğine erişebiliyorsa bu ilişki için A dan B ye gezilebilir/ulaşılabilir (navigable) denilir. Gezilebilirlik, ilişki çizgisine yönü A dan B ye olacak şekilde ok ucu eklenerek belirtilir. Gezilemezlik (non-navigability) ise ilişki çizgisinin diğer ucuna bir x (çarpı) konularak belirtilir. Gezilebilirlik işaretleri kullanılmayabilir; eğer hiç işaret yoksa diyagramdan gezilebilirlik hakkında bir çıkarım yapılamaz.

Rol İsmi Görünürlüğü ve Ulaşılabilirlik Örn. 26 Referee 1 * Game 0..1 - mygame 1..* - player Player

Sınıf Diyagramı Kuralları 1 27 Genelleştirme bağlantısı üzerine asla isim, rol ismi, veya çokluk yerleştirmeyin. Diyagramları elle çizerken soyut sınıf ve operasyonları belirtmek için «abstract» stereotipini ve {abstract} özelliğini kullanın; italik yazı tipini yalnızca bilgisayarda çizerken kullanın. Top ve soket arabirim sembollerini arabirimin ayrıntılarını soyutlamak için kullanın; stereotipli sınıf sembolünü ise arabirimin ayrıntılarını göstermek için kullanın.

Sınıf Diyagramı Kuralları 2 28 Arabirim veya operasyon isimlerini italik yazmayın. Sağlanan arabirimleri arabirim top sembolüyle veya stereotipli bir sınıf sembolü ve gerçekleme bağlantısıyla gösterin. Gereksinilen arabirimleri arabirim soket sembolüyle, veya stereotipli sınıf sembolüne veya arabirim top sembolüne bağlanmış bağımlılık oklarıyla gösterin. Agregasyon ve kompozisyondan uzak durun.

Özet 29 UML sınıf diyagramları şunların gösterimi için oldukça güçlü araçlardır: Generalization Abstract operations and classes Class and instance variables and operations Interfaces and interface assemblies Aggregation and composition associations Association classes Feature and rolename visibility Navigability

KISIM 2 30 Ayrıntılı Tasarıma Giriş ve Orta-Düzey Sınıf Modelleme

Amaçlar 31 Ayrıntılı tasarım sürecine giriş yapmak Ayrıntılı tasarım spesifikasyonlarını incelemek Orta-düzey ve alt-düzey tasarım arasındaki farkı ortaya koymak Orta-düzey sınıf tasarımları oluşturmak için kullanılabilecek teknikleri sunmak Orta-düzey tasarım için sezgisel bazı kurallar sunmak

İçerik 32 Ayrıntılı tasarımın kapsamı Orta- ve alt-düzey tasarım Ayrıntılı tasarım süreci ve spesifikasyonları Orta-düzey tasarım teknikleri Yaratımsal Dönüşümsel Orta-düzey tasarım kuralları Sorumluluk-güdümlü tasarım Kalıtım Delegasyon

Ayrıntılı Tasarımın Kapsamı 33 Mimariden kodlamaya kadar soyutlama düzeyleri Pek çok statik ve dinamik model Çok miktarda tasarım spesifikasyonu İki bölüme ayrılır: orta-düzey ve alt-düzey tasarım Ayrıntılı tasarım, mimari tasarım ve programlama arasındaki sınırlar oldukça bulanıktır

Orta-Düzey Tasarım 34 Orta-düzey tasarım, yazılımı derleme birimleri veya sınıflar gibi orta-boyutlu bileşenler, bunların özellikleri, ilişkileri, ve etkileşimleri düzeyinde belirleme aktivitesidir. DeSCRIPTR spesifikasyonu Tasarım kalıpları (Design patterns)

Alt-Düzey Tasarım 35 Alt-düzey tasarım en düşük soyutlama düzeyindeki küçük ayrıntıları tamamlama aktivitesidir. DeSCRIPTR spesifikasyonları + PAID Packaging Derleme birimleri, kütüphaneler, paketler, vb. içine kod yerleştirmek. Algorithms Bazen belirtilir. Implementation Görünürlük, erişilebilirlik, ilişkilerin gerçeklenmesi vb. Data structures and types Bazen belirtilir.

Ayrıntılı Tasarım Süreci 36 Detailed Design Process SRS, SAD : Problem Design Document : Solution SRS SAD Analyze SRS and SAD Generate/Improve Detailed Design Alternatives Evaluate Detailed Design Alternatives Select Detailed Design [else] [adequate detailed design] Finalize Design Design Document

Ayrıntılı Tasarım Dokümanı 37 Bir tasarım dokümanı (design document) bir SAD ve bir ayrıntılı tasarım dokümanından (detailed design document (DDD)) oluşur. DDD şablonu 1. Orta-Düzey Tasarım Modelleri 2. Alt-Düzey Tasarım Modelleri 3. Modeller Arası Eşleştirme 4. Ayrıntılı Tasarım Gerekçesi 5. Sözlük

Orta-Düzey Tasarım Oluşturma Teknikleri 38 Yaratımsal (Creational) Orta-düzey tasarım sınıf modellerinin baştan oluşturulması İşlevsel ayrıştırma (Functional decomposition) Kalite niteliğine göre ayrıştırma (Quality attribute decomposition) Tasarım temaları (Design themes) Dönüşümsel (Transformational) Başka bir modelin orta-düzey tasarım sınıf modeline dönüştürülmesi Benzer sistem Kalıplar veya mimariler Analiz modelleri

Tasarım Temalarından Oluşturma 39 Bir tasarım teması (design theme) tasarımda dikkate alınması ve çözümlenmesi gereken önemli bir problem, kaygı, veya konudur. Tasarım temaları bir tasarımın baştan oluşturulmasında esas teşkil edebilir.

40 Tasarım Teması Süreci SRS Theme-Based Decomposition SRS : Theme Source Class Diagram : Draft Model Write Design Story Design Story Identify Themes Themes Generate/Improve Candidate Classes Evaluate/Select Classes [else] [class discovery slows] Draw/Improve Class Diagram Class Diagram Evaluate Class Diagram [else] [diagram complete]

Tasarım Öykülerinin Analizi 41 Bir tasarım öyküsü (design story) yazarak başlayın: uygulamanın en önemli yönlerini vurgulayan kısa bir açıklama. Tasarım temalarını tespit etmek için tasarım öyküsünü çalışın. Temaları listeleyin İşlevsel temalar Kalite niteliğine bağlı temalar

Aday Sınıfların Oluşturulması 42 Temalardan aday sınıfları çıkartmak için beyin-fırtınası yapın; sınıfları ve sorumluluklarını listeleyin. Programın görevlerinden sorumlu varlıklar Aktörler Programın kendisiyle ilgili veri kaydettiği şeyler Yapılar ve koleksiyonlar Sınıfları rasyonelleştirin. Bulanık isimleri ve sorumlulukları olanları atın Örtüşen sorumlulukları olan sınıflar üzerinde yeniden çalışın Kapsam dışında şeyler yapan sınıfları atın

Taslak Sınıf Diyagramı Oluşturulması 43 Listedeki sınıfları çizin. Özellik, operasyon, ve ilişkileri ekleyin. Sınıf diyagramını rafine edin. Sınıfları tamlık (completeness) ve uyum (cohesion) açısından kontrol edin. Uygun düşen yerlerde süper-sınıflar yapın. Uygun düşen yerlerde tasarım kalıpları (design patterns) uygulayın.

Kavramsal Modelin Dönüştürülmesi 44 Aktörleri arabirim sınıflarına çevirin. Aktör etki alanı (domain) sınıfları ekleyin. Bir başlangıç sınıfı (startup class) ekleyin. Denetleyici ve koordinatör sınıfları dönüştürün ya da ekleyin. Veri tipleri için sınıflar ekleyin. Barındırıcı (container) sınıfları dönüştürün ya da ekleyin. Mühendislik tasarımı ilişkilerini dönüştürün ya da ekleyin.

Sorumluluklar 45 Bir sorumluluk bir görevi gerçekleştirme (operasyonel sorumluluk) ya da veri barındırma (veri sorumluluğu) gibi bir zorunluluktur. Operasyonel sorumluluklar genellikle operasyonlar tarafından yerine getirilir. Veri sorumlulukları genellikle özellikler (attribute) tarafından yerine getirilir. Sınıflar arası işbirliği (collaboration) de söz konusu olabilir.

Sorumluluk-Güdümlü Ayrıştırma 46 Sorumluluklar farklı soyutlama düzeylerinde ifade edilebilir. Sorumluluklar ayrıştırılabilir. Yüksek-düzeyli sorumluluklar üst-düzey bileşenlere atanabilir. Sorumlulukların ayrıştırılması bileşenlerin ayrıştırılmasının temel çıkış noktası olabilir. Sorumluluklar hem operasyonel hem de veri bazlı zorunluluklar olduğundan sorumluluk-güdümlü ayrıştırma işlevsel ayrıştırmadan farklı olabilir.

Sorumluluk Kuralları 1 47 Sorumlulukların doğru bir şekilde atanması yüksek uyum (cohesion) ve düşük bağlılık (coupling) elde edilmesine yardımcı olabilir. Hem operasyonel hem de veri bazlı sorumlulukları ifade edin. Modüllere en fazla bir operasyonel ve bir veri sorumluluğu atayın. Tamamlayıcı nitelikte veri ve operasyonel sorumluluklar atayın.

Sorumluluk Kuralları 2 48 Modül sorumluluklarının örtüşmediğinden emin olun. Operasyon ve verileri bir modüle yalnızca o modülün sorumluluklarının yerine getirilmesinde işe yarayacaksa ekleyin. Bir modüle sorumluluklarını yerine getirmesi için gereken tüm operasyonları ve verileri ekleyin.

Kalıtım (Inheritance) 49 Kalıtım (Inheritance) bir sınıf ve bir veya daha fazla süper-sınıf arasında tanımlanan bir ilişki şeklidir. Kalıtım nedeniyle alt-sınıf(lar) süper-sınıf(lar)ın tüm özellik ve operasyonlarına sahip olur. Sınıflar arasında genelleştirme (generalization) ilişkisi kalıtım ile sağlanır Süper-sınıftaki özellik ve operasyonların alt-sınıflar tarafından yeniden kullanımına olanak sağlar

Kalıtımın Uygun Şekilde Kullanılması 50 Kalıtımı yalnızca yeniden kullanım (reuse) için kullanmayın. Kafa karıştırıcıdır Kötü görünür Uzun dönemde problemlere neden olabilir Kalıtımı yalnızca sınıflar arasında genelleştirme (birtürü-olma) ilişkisi varsa kullanın. Yeniden kullanım genellikle sınıf yapısı üzerinde biraz daha çalışmakla elde edilebilir. Açık ve temiz Zarif Dayanıklı

Kalıtım Örneği 51 Scatterplot - title - xunits - yunits - xlabel - ylabel - xmin - ymin - xmax - ymax - data[*] Graph - title - xunits - yunits - xlabel - ylabel - xmin - ymin - xmax - ymax # setupgraph() # plotdata() + draw() setupgraph(); plotdata(); # setupgraph() # plotdata() + draw() Scatterplot - data[*] # plotdata() BarChart - numbins - bins[*] - binwidth # plotdata()

Delegasyon (Delegation) 52 Delegasyon (delegation) bir modülün (delege eden) diğer bir modüle (delege) bir sorumluluğun yerine getirilmesi konusunda güvenmesi ve görevi emanet etmesi taktiğidir. Kalıtımla ilgili kısıtları ihlal etmeden yeniden kullanıma olanak sağlar Yazılımı daha fazla yeniden kullanılabilir ve konfigüre edilebilir yapar

Delegasyon Örneği 53 Scatterplot - data[*] Axes axes.draw(); plotdata(); # plotdata() + draw() BarChart - numbins - bins[*] - binwidth # plotdata() + draw() - axes - axes - title - xunits - yunits - xlabel - ylabel - xmin - ymin - xmax - ymax + draw()

Kalıtım ve Delegasyon Kuralları 54 Kalıtımı yalnızca alt-sınıf ve üst-sınıf arasında gerçekten bir genelleştirme varsa kullanın. Benzer sınıflardaki ortak özellik ve operasyonları bir süper-sınıfta birleştirin. Yeniden kullanımı, esnekliği, ve konfigüre edilebilirliği arttırmak için delegasyon kullanın.

Özet 1 55 Ayrıntılı tasarım, yazılım mühendisliği tasarımının en yoğun ve büyük işlerinden oluşur. Bundan dolayı orta-düzey ve alt-düzey tasarım olarak ele almak yararlıdır. Orta-düzey tasarım DeSCRIPTR spesifikasyonlarını içeren bir DDD ile dokümante edilir. Orta-düzey sınıf tasarımları baştan oluşturulabildiği gibi başka bir modelden dönüştürülerek de oluşturulabilir.

Özet 2 56 Yaratımsal tasarım tekniği tasarım öykülerinden çıkartılan tasarım temalarını kullanır. Dönüşümsel tasarım tekniğinde kavramsal model bir tasarım sınıf modeline dönüştürülür. Sorumluluk-güdümlü tasarım, tasarımcıların sınıf modelleri oluştururken doğru kararlar vermelerine yardımcı olur. Kalıtım ve delegasyon doğru kullanıldığı taktirde yeniden kullanılabilirliği, esnekliği, ve konfigüre edilebilirliği yüksek, temiz ve zarif tasarımlar oluşturulmasına yardımcı olur.