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

Benzer belgeler
Senaryoların Gerçeklenmesi (Use-Case Realization)

Senaryoların Gerçeklenmesi (Use-Case Realization)

Tasarım Örnekleri. Senaryoların Gerçeklenmesi (Use-Case Realization)

Tasarım Modelinin (Design Model) Oluşturulması

Tasarım Modelinin (Design Model) Oluşturulması

Nesneler yan yana gösterilir. Etkileşimler (mesajlar) oluştukları sıra ile yukarıdan aşağıya doğru çizilirler.

Tasarım Modelinin (Design Model) Oluşturulması

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

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.

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

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

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

MOKA ÖDEME SERVİSİ BAYİ İŞLEMLERİ ENTEGRASYON DOKÜMANI

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

BİL132 Bilgisayar Programlama II

2. Iterasyon. Bu bölümde ele alınan problemler:

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

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

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

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

YZM 2116 Veri Yapıları

Android Ders Notları

«BM364» Veritabanı Uygulamaları

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

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

Görsel Programlama (Visual Programming)

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Structural Patterns: Adapter Bridge Composite Decorator Facade Flyweight Proxy

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

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

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

HSancak Nesne Tabanlı Programlama I Ders Notları

C# Metotlar ve Metot Tanımlama

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

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

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

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

1 - Button Kontrolu Nasıl Yapılır?

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

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

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

Uyguluma (Problem) Domeninin Modellenmesi

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

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

Yrd. Doç. Dr. Caner ÖZCAN

BİL-141 Bilgisayar Programlama I (Java)

Progress Barlı, FTP Dosya Upload Appleti

Yrd. Doç. Dr. Caner ÖZCAN

Nesneye Dayalı Programlama

MOBİL UYGULAMA GELİŞTİRME

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

BİL-141 Bilgisayar Programlama I (Java)

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

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

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

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

T.C AİLE, ÇALIŞMA VE SOSYAL HİZMETLER BAKANLIĞI İŞ SAĞLIĞI VE GÜVENLİĞİ BİLGİ YÖNETİM SİSTEMİ (İBYS) WEB SERVİS KULLANIM KILAVUZU V1.

MOBİL UYGULAMA GELİŞTİRME

BOTAŞ EBT BİLGİ YÖNETİM SİSTEMİ WEB SERVİSLERİ

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

Timer İle arka plan renk değişimi

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

MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

Operatörlerin Aşırı Yüklenmesi

Şablon Türler (Generics)

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

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

HSancak Nesne Tabanlı Programlama I Ders Notları

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

ArrayList(int initialcapacity) Sığası (capacity) parametrenin belirlediği sayıda olan bir dizi oluşturur.

Arasınav Örnek Soruları Bahar 2018

Balon & Banka Teslim tarihi: 17 Kasım 2008

NESNEYE DAYALI PROGRAMLAMA 11. HAFTA UYGULAMA DERSİ

PAKET TRANSFER SİSTEMİ

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

KURUM KİMLİĞİ KLAVUZU

CBÜ Teknoloji Fakültesi, Yazılım Mühendisliği. Nesneye Yönelik Programlama

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

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

Spring Framework Eğitimi

1 JAVASCRIPT NEDİR? 1

Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

C++ Hata Düzeneği Güvenliği

// hataları işaret eden referans

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

19 Şubat 2016 Cuma

NESNEYE YÖNELİK PROGRAMLAMA

NESNE MODELLERİ : SINIFLAR

Transkript:

Kodlama Sınıf tanımları yazılım sınıflarının diyagramlarından yararlanılarak oluşturulur. Karmaşık veri tiplerine (örneğin sınıf) sahip üyeler referans ya da işaretçi olarak yaratılmalılar. Basit nitelik Referans tipi nitelik public class SalesLineItem // Java private int quantity; private ProductSpecification description; public SalesLineItem(ProductSpecification spec, int qty) public Money getsubtotal() SalesLineItem - quantity : Integer + SalesLineItem(spec, qty) + getsubtotal() : Money description * ProductSpecification description : Text price : Money itemid : ItemID 6. Sınıflarda yer alan metotların imzaları sınıf diyagramlarından belirlenir. Metotlar arası etkileşim ise etkileşim diyagramlarından yaralanılarak oluşturulur. public class Register private ProductCatalog catalog; private Sale currentsale; public Register(ProductCatalog pc) public void endsale() public void enteritem(itemid id, int qty) public void makenewsale() public void makepayment(money cashtendered) Register Register(pc: ProductCatalog) endsale() enteritem(id: ItemID, qty : Integer) makenewsale() makepayment(cashtendered : Money) catalog currentsale ProductCatalog getspecification() Sale date : Date iscomplete : Boolean time : Time becomecomplete() makelineitem() makepayment() gettotal() 6.2

2 Şekildeki ve 2 numaralı mesajlar Register sınıfının enteritem metodunda birer satır oluştururlar. ProductSpecification spec = catalog.getspecification(id); currentsale.makelineitem(spec, qty); enteritem(id, qty) :Register 2: makelineitem(spec, qty) :Sale : spec := getspecification(id) :Product Catalog 6.3 Store address : Address name : Text addsale() register Register endsale() enteritem() makenewsale() makepayment() 7 6 catalog currentsale completedsales ordered Sınıfların Gerçeklenme Sıraları Sınıflar gerçeklenirken (kodlama ve sınama) en az bağımlı sınıftan başlanır ve diğerlerine (en çok bağımlı sınıfa) doğru gidilir. catalog ProductCatalog getspecification() Sale date : Date iscomplete : Boolean time : Time becomecomplete() makelineitem() makepayment() gettotal() * 5 3 descriptions Map..* lineitems ordered payement..* ProductSpecification description : Text price : Money itemid : ItemID description SalesLineItem quantity : Integer getsubtotal() Payment amount : Money * 2 6.4 4

3 Sınama Güdümlü Gerçekleme (Test-Driven Development) Birim Sınama (Unit Test): Her sınıf bir bütün oluşturduğundan ve tek başına bir anlam taşıdığından ayrı bir birim olarak test edilir. Sınıfların kodlarını yazmadan önce bu sınıfların sınamasını yapacak program parçalarının yazılması uygun bir yöntemdir (Test-first programming, test-first development, test-driven development). Sınamayı yapan program parçası (sınama sınıfı) aşağıdaki işleri yapar: Sınaması yapılacak olan sınıftan nesneler yaratır, Bu nesnelere mesajlar gönderip sonuçlar alır ve sınıfın gönderilen mesajlara doğru yanıtlar verip vermediği kontrol edilir. Metotların parametreleri zorlanarak (sınır dışı değerler verilerek) yazılımın sağlamlığı sınanır. Tüm sınama sınıfı bir defada yazılmaz. Önce sadece bir metodu sınayan program parçası yazılır, ardından sınıfın metodu yazılarak test edilir. Bir metot sınamadan geçtikten sonra diğer metodun sınama programına başlanır. Sınama platformları: Junit: Java, http://www.junit.org Nunit:.NET, http://www.nunit.org CruiseControl: Open Source http://cruisecontrol.sourceforge.net/ 6.5 Sınama programını önce yazmanın yararları: Sınama programlarının göz ardı edilmesi önlenir. Programcılar motive olur. Sınamadan geçmenin başarısı Sınama programı yazılırken kodlanacak olan sınıfın arayüzü hakkında daha ayrıntılı düşünülmüş olur. Kodlarda değişiklik yapıldığında yapılan değişikliğin bir hataya neden olup olmadığını belirleyecek hazır sınama programları el altında bulunur. Örnek: Sale sınıfının makelineitem metodunun test edilmesi public class SaleTest extends TestCase public void testmakelineitem() Sale fixture = new Sale(); // Sınamada kullanılacak olan nesne Money total = new Money(7.5); // Yardımcı nesneler Money price = new Money(2.5); ItemId id = new ItemId(); ProductDescription desc = new ProductDescription(id, price, product ); // Metot sınanıyor fixture.makelineitem(desc, ); fixture.makelineitem(desc, 2); asserttrue( fixture.gettotal().equals(total)); // Toplam doğru hesaplanıyor mu? ::: 6.6

4 Örnek Kodlama Bu bölümde örnek POS sistemine ilişkin yazılım sınıflarının bir kısmı örnek olarak Java dilinde kodlanmıştır. public class Register // Aşağıdaki metodlarda da private ProductCatalog catalog; // if (currentsale!=null) kontrolü yapılmalı private Sale currentsale; public Register( ProductCatalog catalog ) this.catalog = catalog; public void makenewsale() currentsale = new Sale(); public void enteritem( ItemID id, int quantity ) if (currentsale!=null) ProductSpecification spec = catalog.getspecification(id); currentsale.makelineitem(spec, quantity); else // exception handler public void endsale() currentsale.becomecomplete(); public void makepayment( Money cashtendered ) currentsale.makepayment (cashtendered); // Register sınıfının sonu 6.7 public class ProductSpecification private ItemID id; private Money price; private String description; public ProductSpecification( ItemID id, Money price, String description ) this.id = id; this.price = price; this.description = description; public ItemID getitemid() return id; public Money getprice() return price; public String getdescription() return description; 6.8

5 public class Sale private List <SalesLineItem> lineitems = new ArrayList() <SalesLineItem> ; private Date date = new Date(); private boolean iscomplete = false; private Payment payment; public Money getbalance() return payment.getamount().minus(gettotal()); public void becomecomplete() iscomplete = true; public boolean iscomplete() return iscomplete; public void makelineitem( ProductSpecification spec, int quantity ) lineitems.add ( new SalesLineItem(spec, quantity) ); 6.9 // Sale sınıfının devamı public Money gettotal() Money total = new Money(); Money subtotal = null; Iterator i = lineitems.iterator(); while( i.hasnext() ) SalesLineItem sli = i.next(); subtotal = sli.getsubtotal() total.add( subtotal ); return total; public void MakePayment ( Money cashtedered ) payment = new Payment (cachtendered); // Sale sınıfının sonu 6.0

6 C++ ile Örnek Kodlama Bu bölümde örnek POS sistemine ilişkin yazılım sınıflarından üçünün kodu örnek olarak C++ dilinde verilmiştir. a) UrunTanimlayici (ProductSpeification) Sınıfı: class UrunTanimlayici private: UrunKod kod; Para fiyat; string tanim; public: UrunTanimlayici( const UrunKod &kd, const Para &ft, const string &tnm ) // Kurucu kod = kd; fiyat = ft; tanim = tnm; const UrunKod & urunkoduver() return kod; const Para & fiyatver() return fiyat; const string & tanimver() return tanim; ; 6. b) Satis (Sale) Sınıfı: class Satis private: vector <SatisKalemi*> kalemler; Tarih tarih; bool tamam_mi; Odeme *odeme; public: Satis() tamam_mi = false; Para & paraustuver() return odeme->miktariver().eksi(toplamiver()); void bitir() tamam_mi = true; bool bitti_mi() return tamam_mi; void kalemolustur( const UrunTanimlayici *tnm, int miktar ) SatisKalemi *sk = new SatisKalemi(tnm, miktar); // Yeni bir Satış kalemi yaratıldı kalemler.push_back ( sk ); // Satış kalemi diziye (vector) eklendi 6.2

7 Satis (Sale) Sınıfı devamı: Para toplamiver() Para toplam; for(unsigned int j=0; j<kalemler.size(); j++) SatisKalemi *sk = kalemler[j]; toplam.arti( sk->alttoplamiver() ); return toplam; void odemeyap ( Para & nakit ) odeme = new Odeme (nakit); ~Satis () delete odeme; ; // Satis sınıfının sonu // Bütün kalemler taranıyor // Diziden bir kalem alınıyor // Alttoplam toplama ekleniyor // Yeni bir ödeme yaratıldı // Satış yok olurken Ödeme yok edildi 6.3 c) Terminal (Register) Sınıfı: class Terminal private: UrunKatalog * katalog; Satis * gecerlisatis; public: Terminal( UrunKatalog * katalog ) this->katalog = katalog; void satisbaslat() gecerlisatis = new Satis(); // Terminalin kullanacağı katalog // Yeni bir satış yaratıldı 6.4

8 Terminal (Register) Sınıfı devamı: void urungir( UrunKod & kod, int miktar ) if (gecerlisatis!=null) UrunTanimlayici *tnm = katalog->tanimlayiciver(kod); gecerlisatis->kalemolustur(tnm, miktar); else. // exception // katalogtan tanımlayıcı alınıyor // girilen ürün satışa aktarılıyor void satisbitir() gecerlisatis->bitir(); // if (gecerlisatis!=null) kontrolü yapılmalı void odemeyap( Para & nakit ) gecerlisatis->odemeyap(nakit); ; // Terminal sınıfının sonu 6.5