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

Benzer belgeler
TASARIM KALIPLARI TASARIM DESENLERİ TASARIM ÖRÜNTÜLERİ TASARIM ŞABLONLARI

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

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

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

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

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

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

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

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

Kitapta UML diyagramları kullanılarak, tasarım şablonları görsel olarak açıklanmıştır. İçerik aşağıdaki bölümlerden oluşmaktadır:

TASARIM KALIPLARI-DEVAM. Singleton Adapter

YZM 2116 Veri Yapıları

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

.com. Özcan Acar 2009 Kurumsal Java.com

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama

Üst Düzey Programlama

(Fabrika Şablonu) Factory Pattern. Tasarım şablonlarının Creational (Yaratıcı) Sınıflandırmasına aittir. Fabrika(Factory) Şablonu

YZM 2105 Nesneye Yönelik Programlama

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

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

.com. Kurumsal Java. Özcan Acar com

CENG 302 Yazılım Mühendisliği Yazılım Mimarisi - Devam. Alper UĞUR

YAZILIM MODELLEME VE TASARIM

Özcan Acar 2010 Kurumsal Java Akademisi.com

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

ALGORİTMA VE PROGRAMLAMA II

YZM 3215 İleri Web Programlama

Design Patterns (Tasarım Kalıpları)

ALGORİTMA VE PROGRAMLAMA I

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

Üst Düzey Programlama

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

YZM 3215 İleri Web Programlama

Üst Düzey Programlama

YZM 3215 İleri Web Programlama

Yazılım Örüntüleri (SE 461) Ders Detayları

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

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

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

YZM 2105 Nesneye Yönelik Programlama

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

YZM 2105 Nesneye Yönelik Programlama

Java Programlama (COMPE 438) Ders Detayları

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

ALGORİTMA VE PROGRAMLAMA I

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

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

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

E-Üniversite için Esnek bir Framework Geliştirilmesi ve Uygulanması

Yazılım Mühendisliği 1

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

YZM 2105 Nesneye Yönelik Programlama

YZM 3215 İleri Web Programlama

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

YZM 2105 Nesneye Yönelik Programlama

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

Decorator Tasarım Şablonu

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

YZM 2105 Nesneye Yönelik Programlama

YZM 2116 Veri Yapıları

Kalıtım (Inheritance)

... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI

YZM 2116 Veri Yapıları

İlk Konsol Uygulamamız 2 İlk Windows Uygulamamız 9.Net Framework Yapısı 18 Neler Öğrendik 19. Veri Tipleri 24 Tanımlı Veri Tipleri 27 Basit Tipler 28

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

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Tasarım Desenleri ve Java Web Servisleri ile Çok Katmanlı Bir Sistem Tasarımı

NESNEYE YÖNELİK TASARIM SÜRECİ

ALGORİTMA VE PROGRAMLAMA I

Öğr. Gör. Serkan AKSU 1


Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com

ALGORİTMA VE PROGRAMLAMA II

Şekil 1 de dört adet genel kullanıma açılmış veri (D1-D4) ve bunları doğrudan ya da dolaylı olarak kullanan 7 adet yordam (P1-P7) yer almaktadır.

ALGORİTMA VE PROGRAMLAMA I

.com. Özcan Acar 2009 Kurumsal Java.com

Nesne Tabanlı Programlama. Ders Notları

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

ALGORİTMA VE PROGRAMLAMA II

YZM 2105 Nesneye Yönelik Programlama

Genel Programlama II

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

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Programlama Dillerinde Kullanılan Veri Tipleri

Web Uygulamaları Mimarileri ve Güvenliği

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS

BİL-141 Bilgisayar Programlama I (Java)

C++ Dersi: Nesne Tabanlı Programlama

SOFTWARE ENGINEERING Ders İzlence Formu. Kodu:CSE400 Dersin Adı: SOFTWARE ENGINEERING Toplam Saat

NESNE TABANLI PROGRAMLAMA

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

Bölüm 9. Altprogramlar ISBN

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

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

Transkript:

YZM 2108 Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1

BÖLÜM - 3 Tasarım Kalıpları Bu bölümde; Anti-Patternler (Anti Kalıplar) Factory Tasarım Kalıbı AbstractFactory Tasarım Kalıbı ile ilgili konular anlatılacaktır. 2

Anti-Pattern Yazılımsal bir problemi, bilinen ve doğru çözüm olarak kabul edilmiş bir kalıbı kullanmadan ve özgün bir yöntemle çözmek anlamında kullanılmaktadır. İlk bakışta mükemmel gibi görünen bu çözümler sonradan sıkıntılar doğurmaktadırlar. 3

Anti-Pattern (devam...) Anti-Pattern lerin en tehlikeli tarafı ürün geliştirme süreçlerinde ve vakalarda en uygun çözüm yolu olarak düşünülmeleridir. Anti-Pattern kavramlarını bilmek, yazılım geliştirme sürecinde karşılaşılabilecek ciddi problemleri önceden tahmin edebilmeyi sağlar ve tedbir almayı kolaylaştırır. 4

Anti-Pattern (devam...) Anti-patternlerin kullanılması yanlıştır. Kısa vadede hızlı bir çözüm olarak gözükseler de genelde yazılım mimarisinde sıkıntılara yol açmaktadırlar. Türkiye de maalesef anti-pattern ler fazlaca kullanılmaktadır. Örneğin; spagetti kod yazımı ya da kodları kopyala-yapıştır yöntemiyle yazmak, anti pattern olgusuna örnektir. 5

Anti-Pattern Örnekleri 1. Magic Pushbutton Herhangi bir soyutlama yapılmaksızın görsel nesnelerin arkasında kodlamanın yapılmasıdır. Buna ayrıca butonclick programcılığı denmektedir. Bu desen GUI(Graphical User Interface) tipindeki uygulamalarda daha fazla ortaya çıkar. Arayüz tarafı ile iş mantıkları genellikle buton gibi bir kontroller arkasına gömülür. 6

Anti-Pattern Örnekleri (devam...) 2. Spagetti Coding Bakım ve değişikliğin yapılamayacak kadar karışık yazılmış kodlama türüne bu ad verilmektedir. Nesne yönelimli olmayan dillerde daha sık rastlanır. Metotlar daha çok süreç odaklı yazılır hatta süreç adları olarak isimlendirilir. Nesneler arasında neredeyse hiç ilişki yoktur. 7

Anti-Pattern Örnekleri (devam...) 2. Spagetti Coding Çoğu metot parametre almaz ve global seviyedeki sınıf değişkenlerini oluşturmakta kullanılır. Kodun yeniden kullanılabilirliği zordur. OOP temel özellikleri(kalıtım, çok biçimlilik, soyutlama) kullanılmaz. 8

Anti-Pattern Örnekleri (devam...) 2. Spagetti Coding 9

Anti-Pattern Örnekleri (devam...) 3. Lasagna Coding Gereğinden fazla sayıda katmana sahip uygulama geliştirilmesine denmektedir (Aşırı çok katmanlı uygulama). Çok katman, çok sayıda irili ufaklı class, anlaşılması ve değiştirilmesi zor bir yazılım. 10

Anti-Pattern Örnekleri (devam...) 4. Kopyala -Yapıştır Programlama Daha generic bir çözüm üretmek yerine var olan kodları koplayarak geliştirme yolunu tercih etmektir. Çoğunlukla bir çözüm için yazılımın her hangi bir yerinde uygulanan bir kod parçasının, ihtiyaç olunan başka bir yerde aynen kopyalanarak kullanılmaya devam etmesi olarak tanımlanır. Bu anti-pattern kod tekrarlarına neden olmaktadır. 11

Anti-Pattern Örnekleri (devam...) 4. Kopyala -Yapıştır Programlama Doğal sonucu olarak bir değişiklik olması halinde kodun çoğaltıldığı yerlere gidilmesi de gerekecektir. Güncellemeler için fazla maliyetli eforlar sarf edilebilir. Hatalar gözden kaçabilir ve uygulamanın yanlış çalışma riski giderek artabilir. Söz konusu parçaları soyutlayıp, nesne yönelimli dil temellerine uygun olacak şekilde ayrıştırmak önemlidir. 12

Anti-Pattern Örnekleri (devam...) 4. Kopyala -Yapıştır Programlama 13

Anti-Pattern Örnekleri (devam...) 5. God Object (Tanrısal Nesne) Gereğinden çok şey bilen ve yapabilen sınıflara denmektedir. Bu sınıflar çok fazla veriye sahiptir ve uygulamanın ana sınıfı gibi algılanabilmektedir. Bu kötü bir tasarımdır. Bu durumda tüm iş yükünü üstlenen sınıfların bakımı, genişletilmesi, iş mantıklarının kolayca okunur olarak içerisinde yer alması oldukça zorlaşır. Karmaşıklığın yanında, belleğe yüklenmesi zaman alan nesneler ortaya çıkar. 14

Anti-Pattern Örnekleri (devam...) 6. Golden Hammer (Altın Çekiç) Bir tasarımın mükemmel bir çözüm olduğuna inanıp her sorunu aynı yöntemle çözmeye çalışmaktır. "Elinde çekiç olan birine tüm sorunlar çivi gibi görünür. Oysaki bazı problemler aynı yöntemler ve yaklaşımlar ile çözümlenemeyebilir. Bu durum çözümü arayan kişilerin daha önce başarılı şekilde uyguladıkları yaklaşımları sahiplenmesinden kaynaklanır. 15

Anti-Pattern Örnekleri (devam...) 6. Golden Hammer (Altın Çekiç) Örneğin tüm yazılımların SOA (Service Oriented Architecture) mimari bütünü içerisinde ele alınması gerektiğini düşünmek bu duruma örnek olarak verilebilir. En sık görülen Anti-Pattern ler arasında yer alır. Söz konusu durumun oluşmasının nedenlerinden birisi, teknolojik gelişmelerden ekiplerin haberdar olmamasıdır. 16

Anti-Pattern Örnekleri (devam...) 7. Reinventing the Square Wheel (Tekerleği yeniden keşfetmek) Var olan bir çözüm yerine ondan daha kötü olan özel bir çözüm üretme hatasına düşmektir. Bazı yazılım problemlerinin çözümünde kullanılacak olan yollar zaten standart ve bellidir. Üstelik bu çözümler için standart hale gelmiş mimari yaklaşımlar, ürünler ve alt yapılar (Frameworks) mevcuttur. Problemin bu tip yardımcılar ile çözülemeyeceğini düşünüp sıfırdan bir çözüm üretilmeye başlandığı hal tekerleğin yeniden keşfi olarak düşünülür. 17

GoF (Gang of Four) Sistematiği 18

GoF Sistematiği 1. Creational (Nesne yaratılışına ait) Kalıplar 1. Abstract factory 2. Builder 3. Factory method 4. Prototype 5. Singleton 2. Structural (Yapısal) Kalıplar 1. Adapter 2. Bridge 3. Decorator 4. Facade 5. Proxy 19

GoF Sistematiği (devam...) 3. Behavioral (Davranışsal) Kalıplar 1. Chain of responsibility 2. Command 3. Interpreter 4. Iterator 5. Mediator 6. Memento 7. Observer 8. State 9. Strategy 10. Visitor 20

Creational (Nesne Yaratılışına Ait) Kalıplar 21

Creational Kalıplar Bu kalıplar nesneye yönelik programlanın en yaygın görevlerinden biri olan yazılım sistemindeki nesnelerin yaratılması hakkında yol göstermektedir. 22

Factory Method (Fabrika Tasarım Kalıbı) 23

Factory Method Günlük hayatta bazı varlıklar ya da nesnelerin yaratılışları basittir ve bu tür nesneleri kendimiz bile yaratabiliriz. Örneğin basit bir zil veya pusulayı evde kendi kendinize yapabilirsiniz. Oysa bazı varlıklar veya nesneler ise oldukça karmaşık süreçlerden geçilerek yaratılmaktadır. Sözgelişi evde pusula yapar gibi bir televizyon yaratamazsınız. Ya da evde kendi kendinize para basamazsınız. Bu tür nesneleri özel fabrikalar -üretimin detaylarını tüketiciden gizleyerek- üretmekte ve tüketiciler de fabrikaların ürettiği bu nesneleri kullanmaktadırlar. 24

Factory Method (devam...) Nesne yönelimli programlama açısından da benzer bir durum söz konusudur. Bazı nesneler doğrudan kullanıcısı tarafından yaratılabilmektedir. Bunun anlamı; sınıfın başlangıç fonksiyonunu (new operatörü) kullanarak nesnenin yaratılmasıdır. Ancak bazı nesnelerin (Product) kullanıcı (Client) olarak erişebileceğimiz başlangıç fonksiyonları bulunmamaktadır. 25

Factory Method (devam...) Client olan nesne Factory nesnesini kullanarak ihtiyacı olan Product nesnesini elde eder. İstenen tipte yeni nesne oluşturma sürecinin Factory sınıfına aktarılması ile birlikte nesne üretme ve initialize etme süreci client tan soyutlanmış olur, Bu sayede client; uygulama içerisinde tamamen kendi rolüne odaklanmış olur, çünkü yeni nesnenin nasıl oluşturulacağına dair detaylardan soyutlanmış olur, bunları bilmek zorunda değildir. 26

Factory Method (devam...) Factory Pattern genel olarak: İstenen tipte nesne oluşturma sürecini Client ın bu konuda detay bilgi sahibi olmadan gerçekleştirilmesini sağlar. Yeni oluşturulan nesneye bir interface ile referans edilerek ulaşılmasını sağlar. 27

Factory Method (devam...) FactoryMethod sınıf diyagramı 28

Factory Method (devam...) Product Factory tarafından yaratılan nesnelerin arayüzü ConcreteProduct Creator Product arayüzünü implemente eden sınıf. Bu sınıfın nesneleri ConcreteCreator tarafından yaratılır. Factory metodunu/metotlarını (factorymethod) tanımlayan arayüz ConcreteCreator Creator sınıfını genişleten ve factorymethod için bir implementasyon sağlayan sınıf 29

Örnek: SekilFactory ISekil arayüzünü ve bu arayüzü implemente eden somut sınıfları (Kare, Cember, Dikdortgen) yaratınız. Sonrasında factory sınıfı olan SekilFactory sınıfını yaratınız. Program sınıfında SekilFactory sınıfından bir Sekil nesnesi elde edebilecek şekilde SekilFactory sınıfını tanımlayınız. Program sınıfında gereken nesnenin tipini (Cember, Kare, Dikdortgen) bilgi olarak geçebilecektir. 30

Örnek: SekilFactory (devam...) 31

Örnek: SekilFactory (devam...) 1. İlk olarak ISekil arayüzünü yaratırız. ISekil.java 32

Örnek: SekilFactory (devam...) 2. Sonrasında ISekil arayüzünü implemente eden somut sınıfları yaratırız. Kare.java 33

Örnek: SekilFactory (devam...) 2. Sonrasında ISekil arayüzünü implemente eden somut sınıfları yaratırız. Cember.java 34

Örnek: SekilFactory (devam...) 2. Sonrasında ISekil arayüzünü implemente eden somut sınıfları yaratırız. Dikdortgen.java 35

Örnek: SekilFactory (devam...) 3. Geçirilen bilgiye göre ISekil arayüzünü implemente eden sınıfların nesnelerini yaratan SekilFactory sınıfını vet getsekil(esekiltur sekiltur) metotunu oluşturunuz. 36

Örnek: SekilFactory (devam...) SekilFactory.java ESekilTur.java 37

Örnek: SekilFactory (devam...) 4. Şeklin tipi gibi bir bilgiyi geçirerek somut sınıflardan nesne elde etmek için SekilFactory sınıfını kullanırız. 38

Örnek: SekilFactory (devam...) Program.java 39

Factory Method (devam...) Factory tasarım kalıbında, istemciye normal oluşturma mantığına maruz bırakmadan nesne oluşturulmasına olanak sağlanır ve yeni yaratılan nesneye ortak bir arayüz kullanarak erişilebilir. 40

Örnek2: ProductFactory 41

Örnek2: ProductFactory (devam...) 1. IProduct ara yüzünü yaratınız. IProduct.java 42

Örnek2: ProductFactory (devam...) 2. ProductOne somut sınıfını yaratınız. ProductOne.java 43

Örnek2: ProductFactory (devam...) 2. ProductTwo somut sınıfını yaratınız. ProductTwo.java 44

Örnek2: ProductFactory (devam...) 3. ProductFactory sınıfını yaratınız. ProductFactory.java 45

Örnek2: ProductFactory (devam...) 4. Client sınıfını yaratınız. Client.java 46

Yararlanılan Kaynaklar Aykut Taşdelen, C++, Java ve C# ile UML ve Dizayn Paternleri, Pusula Yayıncılık, İstanbul, 2014 Eric Freeman, Head First Design Patterns, O'Reilly Media,2004 Stephen Stelting & Olav Maassen, Applied Java Patterns, Prentice Hall PTR,2001 http://www.algoritmaveprogramlama.com http://www.tutorialspoint.com/ http://www.buraksenyurt.com/post/antipatterns-ders- Notlarc4b1m.aspx 47

İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr 48