Design Patterns & AntiPatterns & Design Princibles

2,222 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,222
On SlideShare
0
From Embeds
0
Number of Embeds
705
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Design Patterns & AntiPatterns & Design Princibles

  1. 1. TASARIM KALIPLARI<br />Taner Diler<br />taner@jtpd.org<br />
  2. 2. Java Teknolojileri ve Programcıları Derneği 2007 yılında kurulmuştur.<br />Hedefimiz Java ile program geliştirmeye gönül vermiş insanları platform altında toplamak<br />Java ile programlama bağımlılığını yeni nesillere kazandırmak<br />Türkiye’deki yazılım kalitesini Java ile kaliteli kod yazan yazılımcılar ile üst seviyeye çıkarmak<br />Taner Diler taner@jtpd.org<br />
  3. 3. Tasarım Kalıpları<br />Tasarım kalıpları, yazılım ve tasarım sırasında karşılaşılan benzer sorunlara bulunan benzer çözümlerdir <br />SmallTalk ortamında kullanıcı arayüzleri için geliştirilen MVC tasarım kalıbı günümüzdeki populerframework’lerin temelini oluşturmaktadır<br />Tasarım kalıplarının temelleri, ChristopherAlexander’in “A Pattern Language: Towns, Buildings, Construction” kitabına dayanır<br />“Her kalıp sürekli tekrarlayan sorunlara temel çözümü sunar. Bir çözüm milyonlarca kez uygulanır ve her uygulanış bir öncekinden farklıdır” der.<br />Dörtlü Çete (Gang Of Four) yazılım dünyasındaki çalışmalarını toparlayıp 1994 de “Design Patterns: Elements of Reusable Object-Oriented Software” kitabını yayınlar<br />Taner Diler taner@jtpd.org<br />
  4. 4. Sınıflandırma<br />Tasarım kalıpları işleyiş ve soruna yaklaşımlarına göre 3 sınıfa ayrılır<br />Yaratım Kalıpları : Nesnelerin yaratımlarını uygulama akışını etkilemeyecek şekilde gerçekleştirilmesine dair önerilerde bulunur<br />AbstractFactory<br />Singleton v.s.<br />Davranışsal Kalıplar : Uygulama akışını etkilemeden davranışsal değişikliklerin kolayca yapılmasına dair önerilerde bulunur<br />Strategy<br />TemplateMethod v.s.<br />Yapısal Kalıplar : Uygulamayı oluşturan yapıların birbirinden ayrılması veya birbirleri ile iletişime geçebilmeleri için önerilerde bulunur.<br />Decorator<br />Adapter v.s.<br />Taner Diler taner@jtpd.org<br />
  5. 5. Tasarım Kalıpları Sunuş<br />Tasarım kalıpların sunumunda belli bir sıra izlenir.<br />Kalıp ismi ve diğer isimlendirmeleri<br />Özellikleri, <br />hangi sınıflandırmaya ait olduğu, <br />Bir sınıfa mı etki ediyor yoksa birden fazla sınıftan mı oluşuyor, mimari özelliği ile sistem odaklı mı <br />Çok kısa bir ifade ile kalıbın amacı<br />Hangi sorunlarda nasıl bir çözüm sunduğunun örnek ile açıklanması<br />Kalıbı oluşturan yapıların tanımlanması ve işleyişinin açıklanması, UML ile modellenmesi<br />Faydaları ve zayıf kaldığı yanları<br />Farklı kullanım şekilleri<br />Dolaylı veya mantık olarak ilişkili diğer kalıplar<br />Taner Diler taner@jtpd.org<br />
  6. 6. Hayatıma Renk Katacak mı?<br />Tasarım kalıplarını öğrenmeli miyim?<br />Tasarım kalıpları ezberlenmemeli<br />Tasarım kalıbı için kod yazılmamalıdır<br />Her kalıbın felsefesi benimsenmeli<br />Kodun kalitesinde artış<br />Taner Diler taner@jtpd.org<br />
  7. 7. AntiPattern<br />Tasarım kalıplarına karşı olanların çıkardığı bir kavram mıdır?<br />Nasıl yazmak istiyorsam öyle yazarım<br />Taner Diler taner@jtpd.org<br />
  8. 8. AntiPatterns<br />1995 yılında Andrew Koenig tarafından ortaya atıldı<br />AntiPatterns adlı kitap ile ilgi odağı oldu<br />AntiPatterns, tasarım kalıpları gibi tekrarlayan yapılardır<br />En çok kullanılan AntiPattern’ler<br />Copy/PasteAntiPattern<br />SpaghettiCodes<br />
  9. 9. Tasarım Kalıpları & AntiPatterns<br />
  10. 10. AntiPatterns Sonucu<br />Taner Diler taner@jtpd.org<br />
  11. 11. Tasarım Kalıpları & AntiPatterns<br />YinYang ilişkisi<br />Neyin kötü olduğunu bilelim ki iyiye yönelelim<br />DESIGN PATTERNS<br />REFACTORING<br />REENGINEERING<br />ANTIPATTERNS<br />Taner Diler taner@jtpd.org<br />
  12. 12. AntiPatterns<br />AntiPatterns<br />Maaliyeti Yüksek Proje<br />Genişlemeye Kapalı Proje <br />Kırılgan Proje<br />Taşınamayan, <br />Tekrar Kullanılamayan Modüller<br />REFACTORING<br />REENGINEERING<br />DeisgnPatterns<br />Esnek Proje (FLEXIBLE)<br />Genişliyebilir Proje (SCALABLE) <br />Maaliyeti Düşük Proje<br />…<br />Taner Diler taner@jtpd.org<br />
  13. 13. Tasarım Prensipleri<br />Tasarım Kalıplarının temellerini oluşturur<br />Tasarım ve Kodlama zamanında uyulması gereken kurallardır<br /> OCP - TheOpen-ClosedPrincible (DecoratorPattern v.s.)<br /> SRP - SingleResponsibilityPrincible (FacadePattern v.s.)<br /> DIP – DependencyInversionPrincible (ObserverDesignPatterns v.s.)<br />ProgrammingtoInterface, not an Implementation (StrategyPattern v.s.) <br />http://www.martinfowler.com/articles/injection.html<br />http://c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign<br />Taner Diler taner@jtpd.org<br />
  14. 14. Nasıl Öğrenirim<br />Önce AntiPattern’lara bakılır, yanlışlarımızı öğreniriz.<br />Sonrasında HeadFirst : DesignPatterns kitabı alınır<br />Internet sitelerinde Tasarım Kalıpları hakkında araştırma yapılır<br />OpenSource projelerin kodları incelenir. Mesela: Visitor ve Proxy Tasarım Kalıpları için Hibernate<br />UML diyagramını ezberlemeye gerek yok, her şekilde bakmak zorunda kalacaksın<br />Bütün kalıpları bilmene gerek yok sadece “bu sorun için şöyle bir kalıp vardı” diyebilmek yeterlidir<br />Kötü tasarlanmış projelerde refactoring çalışmaları yapmak<br />Taner Diler taner@jtpd.org<br />

×