Anti-Pattern - Algoritma ve Programlama Bilgi Kaynağı

Transkript

Anti-Pattern - Algoritma ve Programlama Bilgi Kaynağı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
8
Anti-Pattern Örnekleri (devam...)
2. Spagetti Coding
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarı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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
12
Anti-Pattern Örnekleri (devam...)
4. Kopyala -Yapıştır Programlama
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
17
GoF (Gang of Four) Sistematiği
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
18
GoF Sistematiği
1. Creational (Nesne yaratılışına ait) Kalıplar
1.
2.
3.
4.
5.
Abstract factory
Builder
Factory method
Prototype
Singleton
2. Structural (Yapısal) Kalıplar
1.
2.
3.
4.
5.
Adapter
Bridge
Decorator
Facade
Proxy
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
20
Creational (Nesne Yaratılışına Ait)
Kalıplar
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
22
Factory Method
(Fabrika Tasarım Kalıbı)
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
27
Factory Method (devam...)
FactoryMethod sınıf diyagramı
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
28
Factory Method (devam...)
Product
– Factory tarafından yaratılan nesnelerin arayüzü
ConcreteProduct
– Product arayüzünü implemente eden sınıf. Bu sınıfın nesneleri
ConcreteCreator tarafından yaratılır.
Creator
– Factory
arayüz
metodunu/metotlarını
(factoryMethod)
tanımlayan
ConcreteCreator
– Creator sınıfını genişleten ve
implementasyon sağlayan sınıf
factoryMethod
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
için
bir
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
30
Örnek: SekilFactory (devam...)
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
31
Örnek: SekilFactory (devam...)
1. İlk olarak ISekil arayüzünü yaratırız.
ISekil.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
32
Örnek: SekilFactory (devam...)
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Kare.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
33
Örnek: SekilFactory (devam...)
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Cember.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
34
Örnek: SekilFactory (devam...)
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Dikdortgen.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
36
Örnek: SekilFactory (devam...)
SekilFactory.java
ESekilTur.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
38
Örnek: SekilFactory (devam...)
Program.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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.
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
40
Örnek2: ProductFactory
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
41
Örnek2: ProductFactory (devam...)
1. IProduct ara yüzünü yaratınız.
IProduct.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
42
Örnek2: ProductFactory (devam...)
2. ProductOne
somut sınıfını
yaratınız.
ProductOne.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
43
Örnek2: ProductFactory (devam...)
2. ProductTwo
somut sınıfını
yaratınız.
ProductTwo.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
44
Örnek2: ProductFactory (devam...)
3. ProductFactory sınıfını yaratınız.
ProductFactory.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
45
Örnek2: ProductFactory (devam...)
4. Client sınıfını yaratınız.
Client.java
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
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-DersNotlarc4b1m.aspx
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
47
İYİ ÇALIŞMALAR…
Yrd. Doç. Dr. Deniz KILINÇ
[email protected]
Celal Bayar Üniversitesi - YZM 2108 Yazılım Mimarisi ve Tasarımı
48

Benzer belgeler

Tasarım Prensipleri

Tasarım Prensipleri Yazılım Mimarisi ve Tasarımı Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi

Detaylı