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 - 4 Tasarım Kalıpları - II Bu bölümde; Facade Tasarım Kalıbı ile ilgili konular anlatılacaktır. 2
Facade Cephe / ÖnYüz 3
Facade Çoğu modern yazılım sistemi oldukça karmaşıktır. Tasarım kalıpları uygulamaların yapımında yardımcı olmakta ve karmaşıklıkla başa çıkmak için işleri kolaylaştırmaktadır. Onlar, fonksiyoneliteyi bir dizi ufak sınıflar arasında bölerek bunu başarmaktadırlar. Eklenen sınıflar ayrıca sistemin ufak parçalara ayrılmasının bir sonucu olarak da üretilebilirler. 4
Facade (devam...) Bir sistemi birkaç alt sisteme bölmek size karmaşık sistemlerle başa çıkmanızda yardımcı olur ve çalışmayı parçalamanıza olanak sağlar. Bir sistemi belirli bir sayıdaki özel sınıflara bölmek, iyi bir nesneye yönelimli tasarım pratiğidir. Fakat, bir sistemin içerisinde çok fazla sayıda sınıfın olması sakıncalı olabilir. 5
Facade (devam...) Çok fazla alt sisteme sahip olan bu sistemi kullanan istemciler daha fazla nesne ile başa çıkmak zorundadır. Kullanıcılara yüzlerce yapılandırma seçeneği sunulduğunda, kullanıcıların kafası karışır. 6
Facade (devam...) Bu duruma bir örnek olarak bir araba üreticisi düşünelim ve her türlü detayı kullanıcının opsiyonuna bırakmış olsun. Örneğin aracın yakıtı yanarken kullanacağı hava/gaz oranını ayarlanmasını ya da aracın içerisindeki ateşleme sisteminin nasıl işletilmesi gerektiğini sürücünün tercihine bırakıldığını hayal edelim. 7
Facade (devam...) Bu durumda otomobilin her seferinde ayarlanması gerekir ve bu pekte pratik değildir. Sürücü olarak istenilen tek şey aracın anahtarını takmak ve aracı çalıştırmaktır. Sistemin geriye kalanı sürücünün yerine halledilmelidir. 8
Facade (devam...) Bir istemciye sadece birkaç seçenek fayda sağlamaktadır, yüzlercesi veya binlercesi değil. Facade, bu seçenekleri sağlayabilir ve hangi alt sistemin çağırılacağına karar verebilir. Normalde Facade işin çoğunu alt sistemlere atar, fakat birkaç işi kendisi de yapabilmektedir. 9
Facade (devam...) Facade nin asıl amacı alt sistemlerin saklanması değildir. Amacı, bir dizi alt sistem için bir ara yüz sağlamaktır; fakat daha ayrıntılı seçeneklere ihtiyaç duyan istemciler alt sistemlerle etkileşime geçebilmelidir. 10
Facade (devam...) 11
Örnek8: Seyahat Acentesi OtelRezervasyon ve UcusRezervasyon sınıflarını Facade tasarım kalıbını kullanarak sınıfları ayrı ayrı kullanmaya gerek kalmayacak şekilde bir Seyahat sınıfı yaratalım. 12
Örnek8: Seyahat Acentesi (devam..) 13
Örnek8: Seyahat Acentesi (devam..) Otel.java Ucus.java 14
Örnek8: Seyahat Acentesi (devam..) OtelRezervasyon.java 15
Örnek8: Seyahat Acentesi (devam..) UcusRezervasyon.java 16
Örnek8: Seyahat Acentesi (devam..) Seyahat.java 17
Örnek8: Seyahat Acentesi (devam..) Program.java 18
Örnek9: SekilCizici void Ciz() fonksiyonuna sahip ISekil arayüzünü implemente eden Kare, Dikdortgen ve Cember sınıflarının (sınıfına bağlı kalmadan) Ciz() metodunu kullanımını sağlayan SekilCizici sınıfını yaratınız. 19
Örnek9: SekilCizici (devam...) 20
Örnek9: SekilCizici (devam...) ISekil.java Kare.java 21
Örnek9: SekilCizici (devam...) SekilCizici.java 22
Örnek9: SekilCizici (devam...) Program.java 23
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/ 24
İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr 25