Upload
others
View
29
Download
0
Embed Size (px)
Citation preview
YZM 2118
Yazılım Mimarisi ve Tasarımı
Yrd. Doç. Dr. Volkan TUNALI
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
1 YZM 2118 Yazılım Mimarisi ve Tasarımı
BÖLÜM – 10.1
Tasarım Kalıpları
2
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.
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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 (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
2. Spagetti Coding
9
Anti-Pattern Örnekleri (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
4. Kopyala -Yapıştır Programlama
13
Anti-Pattern Örnekleri (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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
Anti-Pattern Örnekleri (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
GoF (Gang of Four) Sistematiği
18 YZM 2118 Yazılım Mimarisi ve Tasarımı
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
YZM 2118 Yazılım Mimarisi ve Tasarımı
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
GoF Sistematiği (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
Creational (Nesne Yaratılışına Ait)
Kalıplar
21 YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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
Creational Kalıplar
YZM 2118 Yazılım Mimarisi ve Tasarımı
Factory Method
(Fabrika Tasarım Kalıbı)
23 YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
• 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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
FactoryMethod sınıf diyagramı
28
Factory Method (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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 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
Factory Method (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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
YZM 2118 Yazılım Mimarisi ve Tasarımı
31
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
1. İlk olarak ISekil arayüzünü yaratırız.
ISekil.java
32
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Kare.java
33
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Cember.java
34
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
2. Sonrasında ISekil arayüzünü implemente eden
somut sınıfları yaratırız.
Dikdortgen.java
35
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
SekilFactory.java
37
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
ESekilTur.java
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...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
Program.java
39
Örnek: SekilFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
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
Factory Method (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
41
Örnek2: ProductFactory
YZM 2118 Yazılım Mimarisi ve Tasarımı
1. IProduct ara yüzünü yaratınız.
42
Örnek2: ProductFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
IProduct.java
2. ProductOne
somut sınıfını
yaratınız.
43
Örnek2: ProductFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
ProductOne.java
2. ProductTwo
somut sınıfını
yaratınız.
44
Örnek2: ProductFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
ProductTwo.java
3. ProductFactory sınıfını yaratınız.
45
Örnek2: ProductFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
ProductFactory.java
4. Client sınıfını yaratınız.
46
Örnek2: ProductFactory (devam...)
YZM 2118 Yazılım Mimarisi ve Tasarımı
Client.java
Yararlanılan Kaynaklar
47
• 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
YZM 2118 Yazılım Mimarisi ve Tasarımı
48
İYİ ÇALIŞMALAR…
Yrd. Doç. Dr. Volkan TUNALI
YZM 2118 Yazılım Mimarisi ve Tasarımı