Java İle Tasarım Prensipleri ve Tasarım Örüntüleri

Embed Size (px)

Citation preview

  • 1. Java ile Tasarm Prensipleri veTasarm rntleri Harezmi Biliim zmleri www.java-egitimleri.com 1

2. yi Tasarmn Amac Nedir?www.java-egitimleri.com 2 3. Olas Deiiklikleri Kolay Birekilde Ele Alabilmek... www.java-egitimleri.com 3 4. Peki Neler Deiir?www.java-egitimleri.com 4 5. Gereksinimler www.java-egitimleri.com 5 6. Gereksinimlerin DeimesiGereksinimler tam deildirGenellikle yanl ve yanltcdrlarSrekli deiirler, sistemle ilgili yeni olaslklar gz nne gelirGelitiricilerin sistemi kavray zaman ierisinde geliirYazlm sisteminin gelitirildii ortam srekli deiirwww.java-egitimleri.com 6 7. Sonu: Gereksinimlerindeimesinden ikayet etmek anlamszdr!www.java-egitimleri.com 7 8. Yaplmas gereken:Deiiklikleri daha efektif biimdeele alabilen iyi bir tasarma sahip olmalyz!www.java-egitimleri.com 8 9. yi Tasarm Kt Tasarmdan Nasl Ayrt Edebiliriz? www.java-egitimleri.com 9 10. Kt Tasarmn Belirtileri4 temel belirtisi vardrRigidity (Esnemezlik)Fragility (Krlganlk)Immobility (Tanamamazlk)Viscosity (Akkanlk)Bu belirtiler birbirleri ile balantldr ve kt bir mimarinin iaretleridirwww.java-egitimleri.com10 11. Nesne Ynelimli Analiz ve Tasarm Nasl Olmal? www.java-egitimleri.com 11 12. ncelikle probleme bak amz deitirmeliyiz! www.java-egitimleri.com 12 13. Geleneksel ve Modernist YaklamlarGeleneksel yaklamda nesne = veri + metotModernist yaklamda nesnesorumluluklar olanbelirli bir davran sergileyen bir olgudurModernist yaklam nesnenin ierisinde ne olduu ile ilgilenmezBaka bir deyile olgulara ne yapmalar gerektii sylenmelidir, nasl yapmalar deil www.java-egitimleri.com13 14. Problemden zme naslgidilir?www.java-egitimleri.com 14 15. Ortaklk/Deikenlik AnaliziProblem domaini genelinde ortak eyler (commonality analiz) ve deienler (variability analiz) tespit edilirOrtaklk analizi zaman ierisinde ok sk deimeyecek ksmlar ararDeikenlik analizi ise sklkla deiecek yaplar ararOrtak kavramlar soyut snflarla ifade edilecektirConcrete snflar ise varyasyonlardr www.java-egitimleri.com 15 16. Ortaklk/Deikenlik AnaliziMimarisel perspektiften baklrsa ortaklk analizi mimariye uzun mrllk katarDeikenlik analizi ise kullanm kolayl salar www.java-egitimleri.com 16 17. Altn Deerinde ki Tasarm Kural...www.java-egitimleri.com 17 18. Kural 1: Deien ne ise bul ve encapsule et www.java-egitimleri.com 18 19. Kural 2: Compositioninheritancea tercih etwww.java-egitimleri.com 19 20. Gelitirme Srasnda zlenecek ki Temel Tasarm Prensibi... www.java-egitimleri.com 20 21. Aklk Kapallk Prensibi Open Closed Principle (OCP)Bir modl genilemeye ak, deiikliekapal olmaldrModlleri geniletilebilir (extend) biimde yazmalyzModller ileride deiiklik gerektirmemelidirSoyutlama OCPde anahtar kelimedir www.java-egitimleri.com21 22. Tersine Bamllk PrensibiDependency Inversion Principle (DIP)Sadece arayz veya soyut snflara baml olunmaldrConcrete snflara bamllk olmamaldrCOM, CORBA, EJB gibi bileen teknolojilerinin dayand temel prensiptirTasarmdaki btn bamllklar soyut olgulara doru olmaldrSoyutlama noktalar tasarmn geniletilebilecei noktalar oluturur www.java-egitimleri.com 22 23. rnek Problem: SimlasyonProgram Faz 1Doadaki canllar hareket kabiliyetlerini sahipolduklar bacaklar vastas ile salamaktadr. Hertrn farkl sayda bacaklar olabilir. Canllarkarada yryebilir, denizde yzebilir, havada iseuabilirler.Farkl canl trlerinin hareket ekillerini modelleyenbir simlasyon program yazlmas istenmektedir.Simlasyon programnda farkl canl trlerini temsiletmek iin kedi, ku ve balk trleri kullanlabilir.www.java-egitimleri.com 23 24. Canl HiyerarisiSoyut snf Soyut metot www.java-egitimleri.com 24 25. Canli.javapublic abstract class Canli {private int bacakSayisi;public int getBacakSayisi() { return bacakSayisi;}public void setBacakSayisi(int bacakSayisi) { this.bacakSayisi = bacakSayisi;}public abstract void hareketEt();}www.java-egitimleri.com 25 26. Yzen Canllarpublic class YuzenCanli extends Canli {@Overridepublic void hareketEt() { System.out.println("yzyor...");}}public class Balik extends YuzenCanli { public Balik() {setBacakSayisi(0); }}www.java-egitimleri.com 26 27. Simlator ve Ortamwww.java-egitimleri.com 27 28. Ortam Arayz ve Alt Snflar public interface Ortam { } public class Deniz implements Ortam { } www.java-egitimleri.com 28 29. Simulator.javapublic class Simulator { private Ortam ortam;public Ortam getOrtam() { return ortam;}public void setOrtam(Ortam ortam) { this.ortam = ortam;}public void hareketEttir(Canli...canlilar) { for(Canli c:canlilar) {c.hareketEt(); }}}www.java-egitimleri.com 29 30. Main.javapublic class Main {public static void main(String[] args) { Simulator simulator = new Simulator(); simulator.hareketEttir(new Kedi(),newKus(),new Balik()); }}yryor...uuyor...yzyor...www.java-egitimleri.com 30 31. rnek Problem: Simlasyon Program Faz 2Baz canllar her ortamda tek bir hareket ekline sahipiken, dier bazlar ise farkl ortamlarda farklhareket ekillerine sahip olabilirler. rnein, kularkarada yrme, havada ise uma kabiliyetinesahiptirler. Farkl bir balk tr ise denizdeyzebilirken, belirli sre deniz yzeyinin zerindenhavalanarak uabilmektedir. Simlasyon program,canl trn hareket eklinin ortama gre deiiklikgstermesini de desteklemelidir.www.java-egitimleri.com31 32. Uan Balkwww.java-egitimleri.com 32 33. UcanBalik.javapublic class UcanBalik extends Balik { private boolean uc = false;public boolean isUc() { return uc;}public void setUc(boolean uc) { this.uc = uc;}@Overridepublic void hareketEt() { if(uc) {If-else ifadesi bir algoritmik System.out.println("uuyor"); Varyasyon iaretisidir } else { super.hareketEt(); }}} www.java-egitimleri.com33 34. Simulator.javapublic class Simulator { private Ortam ortam; public Ortam getOrtam() {return ortam; } public void setOrtam(Ortam ortam) {this.ortam = ortam; } public void hareketEttir(Canli...canlilar) { for(Canli c:canlilar) {if(ortam instanceof Hava && c instanceofUcanBalik) { OCP, DIP((UcanBalik)c).setUc(true);prensipleri}ihlal ediliyorc.hareketEt(); } }} www.java-egitimleri.com34 35. Kural 1: Deien ne ise bul ve encapsule et...farkl ortamlarda farkl hareketekillerine sahip olabilirler. ...canl trn hareketeklinin ortama gre deiiklikgstermesini de desteklemelidir.www.java-egitimleri.com 35 36. Farkl Hareket ekilleriwww.java-egitimleri.com 36 37. Canli.javapublic abstract class Canli {...private HareketSekli hareketSekli;public void hareketEt() { Davrann hareketSekli.hareketEt(); Encapsule}Edilmesi public void setHareketSekli(HareketSeklihareketSekli) {this.hareketSekli = hareketSekli; }} www.java-egitimleri.com37 38. HareketSekli.javapublic interface HareketSekli { public void hareketEt();}public class Ucmakpublic class Yuzmekimplements HareketSekli { implements HareketSekli { public void hareketEt() public void hareketEt() {System.out.println("uuyor..System.out.println("yzyor..");.."); } }} }www.java-egitimleri.com38 39. UcanBalik.javapublic class YuzenCanli extends Canli { public YuzenCanli() { setHareketSekli(new Yuzmek()); }}public class UcanBalik extends Balik {...@Overridepublic void hareketEt() { if(uc) { new Ucmak().hareketEt();OCP ve DIP problemleri } else {Devam ediyor! super.hareketEt(); }}}www.java-egitimleri.com 39 40. Hareketin Ortama GreDeimesiHareket ekliniOrtam belirliyor!www.java-egitimleri.com 40 41. Ortam.javapublic interface Ortam { public HareketSekli getHareketSekli();}public class Deniz implements Ortam {public HareketSekli getHareketSekli() { return new Yuzmek();}}www.java-egitimleri.com 41 42. Canli.javapublic abstract class Canli {... private HareketSekli hareketSekli;public void hareketEt(Ortam ortam) { hareketSekli.hareketEt();}} Hareket eklini ortama gre deitirme imkan salanyorpublic class UcanBalik extends Balik {@Overridepublic void hareketEt(Ortam ortam) { ortam.getHareketSekli().hareketEt();}} www.java-egitimleri.com 42 43. Simulator.javapublic class Simulator { private Ortam ortam;public Ortam getOrtam() { return ortam;}public void setOrtam(Ortam ortam) { this.ortam = ortam;}public void hareketEttir(Canli...canlilar) { for(Canli c:canlilar) {c.hareketEt(getOrtam()); }}} O anki ortam, hareketEt metoduna input argman olarak veriliyorwww.java-egitimleri.com 43 44. Main.javapublic class Main {public static void main(String[] args) { Simulator simulator = new Simulator();simulator.setOrtam(new Deniz());simulator.hareketEttir(new UcanBalik());simulator.setOrtam(new Hava());simulator.hareketEttir(new UcanBalik());}}yzyor...uuyor... www.java-egitimleri.com 44 45. Nesne Ynelimli YazlmGelitirmede Tasarmrntlerinin Rol Nedir? www.java-egitimleri.com 45 46. Tasarm rntlerininFaydalarTasarm ve nesne ynelimli modelleme ilemine st perspektiften bakmay salarBu sayede daha ilk aamada gereksiz detay ve ayrntlar iinde boulmann nne geilebilirBu rntler zaman ierisinde evrilmi ve olgunlam zmlerdirBu nedenle zerlerinde deiiklik yapmak daha kolay ve hzldrwww.java-egitimleri.com 46 47. Tasarm rntlerinin Faydalarzmlerin yeniden kullanlmasn salarHazr zmler probleme sfrdan balamay, ve olas hatalara dmeyi nlerDierlerinin deneyimlerinden faydalanmay salarEkip iinde ortak bir terminoloji olumasn salar, ortak bir bak as getirirwww.java-egitimleri.com47 48. rnek Bir rnt:Strategy rnek Problem: Robot davranlarRobot davranlar ile ilgili bir simlasyon program gelitirilecektir. Robotlarn davranlar agresif, savunmac ve sakin olarak deimektedir. Her bir davran tipine gre robot farkl farkl haraket etmektedir. Robotlarn davranlar dinamik olarak deiebilmektedir.www.java-egitimleri.com48 49. rnek Bir rnt:Strategy www.java-egitimleri.com 49 50. rnek Bir rnt:Strategy ProblemKullanlacak algoritma istemciye veya eldeki veriye gre deiiklik gsterebilirstemcinin algoritmann detayn bilmesinegerek yokturzmAlgoritmann seimi ile implementasyonu birbirinden ayr tutulurAlgoritma seimi contexte gre dinamikyaplabilirwww.java-egitimleri.com50 51. rnek Bir rnt:Strategy SonularSwitch ve artl ifadeler ortadan kaldrlrAlgoritma deiiklikleri iin alt snfoluturmaya bir alternatiftirBtn algoritmalar ayn biimde invoke edilmelidirStrategy ile context arasnda etkileim gerekebilir www.java-egitimleri.com 51 52. Soru / Cevap...www.java-egitimleri.com 52 53. letiimHarezmi Biliim zmleri Ltd.Kurumsal Java Eitimlerihttp://www.harezmi.com.trhttp://[email protected] www.java-egitimleri.com 53