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
Yazılım Mimarisi ve Tasarımı
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi