Java ile Tasarım Prensipleri ve Tasarım Örüntüleri

Benzer belgeler
Java ile Tasarım Prensipleri ve Tasarım Örüntüleri

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

BİL-141 Bilgisayar Programlama I (Java)

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

MVP ve Mediator ile Loose Coupled, Modüler UI Geliştirme

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

.com. Özcan Acar 2009 Kurumsal Java.com

Decorator Tasarım Şablonu

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Java Dersi. Altuğ Bilgin Altıntaş

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

Nesne Yönelimli Programlama

MVC, MVP ve Mediator ile TDD Tecrübeleri. Kenan SEVİNDİK

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Özcan Acar 2010 Kurumsal Java Akademisi.com

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

SOLID Principles. Mehmet Aydın Ünlü. Kaynak :

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

Ders 8 Konu Özeti ve Problemler

BİL132 Bilgisayar Programlama II

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Business Delegate Tasarım Şablonu KurumsalJava.com

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

YZM 2108 Yazılım Mimarisi ve Tasarımı

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

public static int Toplam int x, int y

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

MAT213 Bilgisayar Programlama I

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

NESNEYE YÖNELİK PROGRAMLAMA

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Erişim konusunda iki taraf vardır:

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Java String İşlemleri

Görsel Programlama. Temel Veri Tipleri, Değişkenler, Operatörler, Akış Kontrolü, Sınıflar, Metotlar, Paketler ve JavaDoc

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir.

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

.com. Özcan Acar 2009 Kurumsal Java.com

Programlama Dili Prensipleri. Lab Notları 4

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

NESNEYE YÖNELİK TASARIM SÜRECİ

BİL-141 Bilgisayar Programlama I (Java)

Karşılaştırma İşlemleri ve Koşullu İfadeler

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Dağıtık Sistemler CS5001

Open Closed Principle (OCP) Açık Kapalı Tasarım Prensibi KurumsalJava.com

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

Nesneye Dayalı Programlama

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Java Kodunuzun Nesne-Merkezli Olmadığının 10 İşareti

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

Programlama Dilleri 3

YZM 2116 Veri Yapıları

Arasınav Örnek Soruları Bahar 2018

7. HAFTA. Erişim Belirleyiciler

Loose Coupling (LC) Esnek Bağ Tasarım Prensibi KurumsalJava.com

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 18: Formatlı Grafik Kullanıcı Arayüzü Oluşturma

DATA STRUCTURES. Lab II Metotlar, Diziler ve Hata Ayıklama. Prof. Dr. Aybars UĞUR

Dağıtık Sistemler CS5001

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Client Server Database

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

BMH-303 Nesneye Yönelik Programlama

Klavyeden Basit Giriş/Çıkış İşlemleri

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

2. Bölüm Spring İle Tanışalım

Spring Framework Eğitimi

Final Sınavı Örnek Soruları Bahar 2018

YMT219 VERİ YAPILARI ÖDEV-1

YAZILIM ÜRÜN HATTI DEĞĐŞKENLĐĞĐNĐN DENETĐM ÇEVRĐMĐ ĐLE ELE ALINMASI

Dağıtık Sistemler CS5001

Transkript:

Java ile Tasarım Prensipleri ve Tasarım Örüntüleri Harezmi Bilişim Çözümleri www.java-egitimleri.com 1

İyi Tasarımın Amacı Nedir? www.java-egitimleri.com 2

Olası Değişiklikleri Kolay Bir Şekilde Ele Alabilmek... www.java-egitimleri.com 3

Peki Neler Değişir? www.java-egitimleri.com 4

Gereksinimler www.java-egitimleri.com 5

Gereksinimlerin Değişmesi Gereksinimler tam değildir Genellikle yanlış ve yanıltıcıdırlar Sürekli değişirler, sistemle ilgili yeni olasılıklar göz önüne gelir Geliştiricilerin sistemi kavrayışı zaman içerisinde gelişir Yazılım sisteminin geliştirildiği ortam sürekli değişir www.java-egitimleri.com 6

Sonuç: Gereksinimlerin değişmesinden şikayet etmek anlamsızdır! www.java-egitimleri.com 7

Yapılması gereken: Değişiklikleri daha efektif biçimde ele alabilen iyi bir tasarıma sahip olmalıyız! www.java-egitimleri.com 8

İyi Tasarımı Kötü Tasarımdan Nasıl Ayırt Edebiliriz? www.java-egitimleri.com 9

Kötü Tasarımın Belirtileri 4 temel belirtisi vardır Rigidity (Esnemezlik) Fragility (Kırılganlık) Immobility (Taşınamamazlık) Viscosity (Akışkanlık) Bu belirtiler birbirleri ile bağlantılıdır ve kötü bir mimarinin işaretleridir www.java-egitimleri.com 10

Nesne Yönelimli Analiz ve Tasarım Nasıl Olmalı? www.java-egitimleri.com 11

Öncelikle probleme bakış açımızı değiştirmeliyiz! www.java-egitimleri.com 12

Geleneksel ve Modernist Yaklaşımlar Geleneksel yaklaşımda nesne = veri + metot Modernist yaklaşımda nesne sorumlulukları olan belirli bir davranış sergileyen bir olgudur Modernist yaklaşım nesnenin içerisinde ne olduğu ile ilgilenmez Başka bir deyişle olgulara ne yapmaları gerektiği söylenmelidir, nasıl yapmaları değil www.java-egitimleri.com 13

Problemden çözüme nasıl gidilir? www.java-egitimleri.com 14

Ortaklık/Değişkenlik Analizi Problem domain'i genelinde ortak şeyler (commonality analiz) ve değişenler (variability analiz) tespit edilir Ortaklık analizi zaman içerisinde çok sık değişmeyecek kısımları arar Değişkenlik analizi ise sıklıkla değişecek yapıları arar Ortak kavramlar soyut sınıflarla ifade edilecektir Concrete sınıflar ise varyasyonlardır www.java-egitimleri.com 15

Ortaklık/Değişkenlik Analizi Mimarisel perspektiften bakılırsa ortaklık analizi mimariye uzun ömürlülük katar Değişkenlik analizi ise kullanım kolaylığı sağlar www.java-egitimleri.com 16

Altın Değerinde İki Tasarım Kuralı... www.java-egitimleri.com 17

Kural 1: Değişen ne ise bul ve encapsule et www.java-egitimleri.com 18

Kural 2: Composition'ı inheritance'a tercih et www.java-egitimleri.com 19

Geliştirme Sırasında İzlenecek İki Temel Tasarım Prensibi... www.java-egitimleri.com 20

Açıklık Kapalılık Prensibi Open Closed Principle (OCP) Bir modül genişlemeye açık, değişikliğe kapalı olmalıdır Modülleri genişletilebilir (extend) biçimde yazmalıyız Modüller ileride değişiklik gerektirmemelidir Soyutlama OCP'de anahtar kelimedir www.java-egitimleri.com 21

Tersine Bağımlılık Prensibi Dependency Inversion Principle (DIP) Sadece arayüz veya soyut sınıflara bağımlı olunmalıdır Concrete sınıflara bağımlılık olmamalıdır COM, CORBA, EJB gibi bileşen teknolojilerinin dayandığı temel prensiptir Tasarımdaki bütün bağımlılıklar soyut olgulara doğru olmalıdır Soyutlama noktaları tasarımın genişletilebileceği noktaları oluşturur www.java-egitimleri.com 22

Örnek Problem: Simülasyon Programı Faz 1 Doğadaki canlılar hareket kabiliyetlerini sahip oldukları bacakları vasıtası ile sağlamaktadır. Her türün farklı sayıda bacakları olabilir. Canlılar karada yürüyebilir, denizde yüzebilir, havada ise uçabilirler. Farklı canlı türlerinin hareket şekillerini modelleyen bir simülasyon programı yazılması istenmektedir. Simülasyon programında farklı canlı türlerini temsil etmek için kedi, kuş ve balık türleri kullanılabilir. www.java-egitimleri.com 23

Canlı Hiyerarşisi Soyut sınıf Soyut metot www.java-egitimleri.com 24

Canli.java public 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

Yüzen Canlılar public class YuzenCanli extends Canli { @Override public void hareketet() { System.out.println("yüzüyor..."); public class Balik extends YuzenCanli { public Balik() { setbacaksayisi(0); www.java-egitimleri.com 26

Simülator ve Ortam www.java-egitimleri.com 27

Ortam Arayüzü ve Alt Sınıfları public interface Ortam { public class Deniz implements Ortam { www.java-egitimleri.com 28

Simulator.java public 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

Main.java public class Main { public static void main(string[] args) { Simulator simulator = new Simulator(); simulator.hareketettir(new Kedi(),new Kus(),new Balik()); yürüyor... uçuyor... yüzüyor... www.java-egitimleri.com 30

Örnek Problem: Simülasyon Programı Faz 2 Bazı canlılar her ortamda tek bir hareket şekline sahip iken, diğer bazıları ise farklı ortamlarda farklı hareket şekillerine sahip olabilirler. Örneğin, kuşlar karada yürüme, havada ise uçma kabiliyetine sahiptirler. Farklı bir balık türü ise denizde yüzebilirken, belirli süre deniz yüzeyinin üzerinden havalanarak uçabilmektedir. Simülasyon programı, canlı türün hareket şeklinin ortama göre değişiklik göstermesini de desteklemelidir. www.java-egitimleri.com 31

Uçan Balık www.java-egitimleri.com 32

UcanBalik.java public class UcanBalik extends Balik { private boolean uc = false; public boolean isuc() { return uc; public void setuc(boolean uc) { this.uc = uc; @Override public void hareketet() { if(uc) { System.out.println("uçuyor"); else { super.hareketet(); If-else ifadesi bir algoritmik Varyasyon işaretçisidir www.java-egitimleri.com 33

public class Simulator { private Ortam ortam; public Ortam getortam() { return ortam; Simulator.java public void setortam(ortam ortam) { this.ortam = ortam; public void hareketettir(canli...canlilar) { for(canli c:canlilar) { if(ortam instanceof Hava && c instanceof UcanBalik) { ((UcanBalik)c).setUc(true); c.hareketet(); OCP, DIP prensipleri ihlal ediliyor www.java-egitimleri.com 34

Kural 1: Değişen ne ise bul ve encapsule et...farklı ortamlarda farklı hareket şekillerine sahip olabilirler....canlı türün hareket şeklinin ortama göre değişiklik göstermesini de desteklemelidir. www.java-egitimleri.com 35

Farklı Hareket Şekilleri www.java-egitimleri.com 36

Canli.java public abstract class Canli {... private HareketSekli hareketsekli; public void hareketet() { hareketsekli.hareketet(); Davranışın Encapsule Edilmesi public void sethareketsekli(hareketsekli hareketsekli) { this.hareketsekli = hareketsekli; www.java-egitimleri.com 37

HareketSekli.java public interface HareketSekli { public void hareketet(); public class Ucmak implements HareketSekli { public void hareketet() System.out.println("uçuyor..."); public class Yuzmek implements HareketSekli { public void hareketet() { System.out.println("yüzüyor..."); www.java-egitimleri.com 38

UcanBalik.java public class YuzenCanli extends Canli { public YuzenCanli() { sethareketsekli(new Yuzmek()); public class UcanBalik extends Balik {... @Override public void hareketet() { if(uc) { new Ucmak().hareketEt(); else { super.hareketet(); OCP ve DIP problemleri Devam ediyor! www.java-egitimleri.com 39

Hareketin Ortama Göre Değişmesi Hareket şeklini Ortam belirliyor! www.java-egitimleri.com 40

Ortam.java public interface Ortam { public HareketSekli gethareketsekli(); public class Deniz implements Ortam { public HareketSekli gethareketsekli() { return new Yuzmek(); www.java-egitimleri.com 41

Canli.java public abstract class Canli {... private HareketSekli hareketsekli; public void hareketet(ortam ortam) { hareketsekli.hareketet(); Hareket şeklini ortama göre değiştirme imkanı sağlanıyor public class UcanBalik extends Balik { @Override public void hareketet(ortam ortam) { ortam.gethareketsekli().hareketet(); www.java-egitimleri.com 42

public class Simulator { private Ortam ortam; Simulator.java 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 argüman olarak veriliyor www.java-egitimleri.com 43

Main.java public 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()); yüzüyor... uçuyor... www.java-egitimleri.com 44

Nesne Yönelimli Yazılım Geliştirmede Tasarım Örüntülerinin Rolü Nedir? www.java-egitimleri.com 45

Tasarım Örüntülerinin Faydaları Tasarım ve nesne yönelimli modelleme işlemine üst perspektiften bakmayı sağlar Bu sayede daha ilk aşamada gereksiz detay ve ayrıntılar içinde boğulmanın önüne geçilebilir Bu örüntüler zaman içerisinde evrilmiş ve olgunlaşmış çözümlerdir Bu nedenle üzerlerinde değişiklik yapmak daha kolay ve hızlıdır www.java-egitimleri.com 46

Tasarım Örüntülerinin Faydaları Çözümlerin yeniden kullanılmasını sağlar Hazır çözümler probleme sıfırdan başlamayı, ve olası hatalara düşmeyi önler Diğerlerinin deneyimlerinden faydalanmayı sağlar Ekip içinde ortak bir terminoloji oluşmasını sağlar, ortak bir bakış açısı getirir www.java-egitimleri.com 47

Örnek Bir Örüntü:Strategy Örnek Problem: Robot davranışları Robot davranışları ile ilgili bir simülasyon programı geliştirilecektir. Robotların davranışları agresif, savunmacı ve sakin olarak değişmektedir. Her bir davranış tipine göre robot farklı farklı haraket etmektedir. Robotların davranışları dinamik olarak değişebilmektedir. www.java-egitimleri.com 48

Örnek Bir Örüntü:Strategy www.java-egitimleri.com 49

Örnek Bir Örüntü:Strategy Problem Kullanılacak algoritma istemciye veya eldeki veriye göre değişiklik gösterebilir İstemcinin algoritmanın detayını bilmesine gerek yoktur Çözüm Algoritmanın seçimi ile implementasyonu birbirinden ayrı tutulur Algoritma seçimi context'e göre dinamik yapılabilir www.java-egitimleri.com 50

Örnek Bir Örüntü:Strategy Sonuçları Switch ve şartlı ifadeler ortadan kaldırılır Algoritma değişiklikleri için alt sınıf oluşturmaya bir alternatiftir Bütün algoritmalar aynı biçimde invoke edilmelidir Strategy ile context arasında etkileşim gerekebilir www.java-egitimleri.com 51

Soru / Cevap... www.java-egitimleri.com 52

İletişim Harezmi Bilişim Çözümleri Ltd. Kurumsal Java Eğitimleri http://www.harezmi.com.tr http://www.java-egitimleri.com info@java-egitimleri.com www.java-egitimleri.com 53