bm-104 nesneye yönelik programlama bahar 201 3 ( 9 . sunu ) ( yrd . do ç . dr. deniz dal)

26
BM-104 Nesneye Yönelik Programlama Bahar 2013 (9. Sunu) (Yrd. Doç. Dr. Deniz Dal)

Upload: sailor

Post on 23-Feb-2016

51 views

Category:

Documents


2 download

DESCRIPTION

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 9 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). Bir Yazılımın Bileşenleri. Algoritma Veri Algoritmanın veya yazılımın işleyeceği bilgi Veri Yapısı (Data Structure ) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

BM-104 Nesneye Yönelik Programlama

Bahar 2013(9. Sunu)

(Yrd. Doç. Dr. Deniz Dal)

Page 2: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bir Yazılımın Bileşenleri

AlgoritmaVeri

Algoritmanın veya yazılımın işleyeceği bilgiVeri Yapısı (Data Structure)

Algoritmanın kullanacağı verilerin bilgisayarda etkin olarak saklanmasına ve gerektiğinde kolaylıkla işlenmesine/erişilmesine imkan tanıyan özel yapı

Yaygın Kullanılan Veri Yapılarına Örnekler:Dizi (array), ağaç (tree), kuyruk (queue), stack (yığın) …

Page 3: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Standart Şablon Kütüphanesi(Standard Template Library – STL)

STL, programlamada sıklıkla kullanılan, her biri şablon C++ sınıfı formunda tanımlanmış bir grup veri yapısını ve bu yapılar üzerinde çalışabilen algoritmaları içeren çok etkin bir kütüphanedir.

STL 3 temel bileşenden oluşur: Veri türünden bağımsız, dinamik olarak büyüyebilen

veya küçülebilen şablon kaplar (jenerik depolayıcılar) (generic containers)

Kaplara uygulanabilen algoritmalar (sıralama, arama)İteratörler (iterators) (özel pointerlar)

Page 4: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Veri Türünden Bağımsız Şablon Kaplar (Generic Containers)

Sıralı Şablon Kaplar (Sequence Containers)VectorListDeque (Double Ended Queue)

İlişkili Şablon Kaplar (Associative Containers)SetMultisetMapMultimap

Kap Adaptörleri (Sıralı Şablon Kapların Özel Halleri)Stack, Queue, Priority Queue

Page 5: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

vector#include <vector> sonrası kullanılabilirler.Vektörler gelişmiş C++ dizileri gibi düşünülebilirler. C++

dizileri ile yapılan bütün işlemler şablon vector sınıfı ile de gerçekleştirilebilir. (Dinamik oluşları ise avantajlarıdır.)

Vektörler [ ] sayesinde indisli kullanıma izin verirler.Yeni öğelerin yapının sonuna eklendikleri (veya öğelerin

yapının sonundan çıkarıldıkları) ve herhangi bir anda herhangi bir öğeye indis vasıtasıyla rastgele hızlıca erişimin gerektiği durumlara uygundurlar.

Yapıdaki öğeler girildikleri sırayı koruyacak şekilde sıralı (ard arda) saklanırlar.

Vektörlerde araya öğe eklemek sona öğe eklemekten çok daha pahalı bir işlemdir ve dolayısıyla bu türden işlemler vektörler kullanılarak gerçekleştirilmemelidir.

http://acehreli.org/turkcecpp/topluluk_ozet.html

Page 6: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

back, push_back , pop_back, [ ]

back() fonksiyonunun işlevi başka nasıl elde edilebilir?

Page 7: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Vektörler Saklayan Vektör

(İki Boyutlu Dinamik Dizi)

Page 8: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

listVektörlerin öğeleri sona hızlıca eklediklerini (veya öğeleri

sondan hızlıca sildiklerini) ve indis vasıtasıyla rastgele erişime izin verdiklerini söylemiştik.

Ayrıca, vektörlerde araya öğe eklemenin (veya aradan öğe silmenin) pahalı ve genellikle tercih edilmeyen bir işlem olduğunu hatırlatmıştık.

Listeler ise #include <list> sonrası kullanılabilirler, araya öğe ekleme (veya aradan öğe silme) işini hızlıca gerçekleştirirler ama rastgele erişime izin vermezler. Yani liste elemanlarına indis kullanılarak ulaşılamaz. Herhangi bir öğeye ulaşmak için o öğeden önceki öğeleri de bir iteratör yardımıyla ziyaret etmek gerekir.

STL listesi çift bağlı bir listedir. (doubly linked list) Yani listenin herhangi bir öğesi kendisinden önceki ve kendisinden sonraki liste öğesine bağlıdır. (Dolayısıyla bir STL listesi baştan sona doğru ve sondan başa doğru gezintiye imkan tanır.)

Page 9: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

back, push_back , pop_back,front, push_front, pop_front,insert, erase

insert öncesi ve sonrası it aynı öğeyi işaret eder. (Yani it öncesine ekleme yapılır.)

Page 10: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

begin, end, rbegin, rend FonksiyonlarıSTL listesinin begin fonksiyonu listenin ilk öğesini işaret eden

özel bir pointer (iteratör) geriye döndürür.STL listesinin end fonksiyonu listenin son öğesinden bir

sonraki pozisyonu işaret eden özel bir pointer (iteratör) geriye döndürür.

STL listesinin rbegin fonksiyonu listenin son öğesini işaret eden özel bir pointer (iteratör) geriye döndürür. (reverse)

STL listesinin rend fonksiyonu listenin ilk öğesinden bir önceki pozisyonu işaret eden özel bir pointer (iteratör) geriye döndürür.

Page 11: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

push_front, push_back, front, back, ve insert

STL listesinin push_front, push_back, front ve back fonksiyonları aslında insert, begin, end, rbegin ve rend fonksiyonları kullanılarak elde edilebilirler.lst.push_front(25) = insert(lst.begin(),25)lst.push_back(25) = insert(lst.end(),25)

(lst.front()=25) = (*lst.begin()=25)(lst.front()=25) = (*--lst.rend()=25)

(lst.back()=25) = (*--lst.end()=25)(lst.back()=25) = (*lst.rbegin()=25)

Page 12: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

k Bir vector Veya list İken

k.end()-k.begin() deyimi acaba

k.size()ile aynı sonucu üretir mi?

Page 13: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

deque

STL kütüphanesinin deque (double ended queue) (çift uçlu kuyruk) adlı veri yapısı iki uçlu bir vektör gibi düşünülebilir. Dolayısıyla yeni öğeler yapının hem sonuna ve hem de başına hızlıca eklenebilirler. (Benzer şekilde yapının hem başından ve hem de sonundan hızlıca silinebilirler.) (vector adlı STL yapısının sadece sona hızlıca ekleme yapabildiğini hatırlayınız.)

deque da vector gibi, [ ] sayesinde indisli kullanıma izin verir, yani rastgele erişim mümkündür.

deque yapısı #include <deque> sonrası kullanılabilir.dek şeklinde okunur, kuyruk (queue) ve yığın (stack)

yapılarının bir birleşimi gibi düşünülebilir.

Page 14: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

back, push_back , pop_back,front, push_front, pop_front,[ ]

Page 15: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

queue

Kuyruk (Banka kuyruğundaki müşterilerin işlem görme şekli)

First in First Out (FIFO) Stratejisi (İlk Gelen İlk Gider)Kuyruk yapısı, bir deque yapısının sadece sona

ekleme (push_back) ve baştan silme (pop_front) fonksiyonları kullanılarak elde edilebilir.

Kuyruk yapısının push adlı fonksiyonu deque yapısının push_back fonksiyonunun kendisidir.

Kuyruk yapısının pop adlı fonksiyonu deque yapısının pop_front fonksiyonunun kendisidir.

Page 16: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

front, back, push, pop

queue içerisinde gezinebilmeye izin yoktur. Böyle bir durum için deque kullanılmalıdır.

Page 17: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

stack Yığın (Mutfak dolabındaki tabakların diziliş ve kullanılış

şekli) Last in First Out Stratejisi (LIFO) (Son Gelen İlk Gider)Yığın yapısı, bir deque yapısının sadece sona ekleme

(push_back) ve sondan silme (pop_back) fonksiyonları kullanılarak elde edilebilir.

Yığın yapısının push adlı fonksiyonu deque yapısının push_back fonksiyonunun kendisidir.

Yığın yapısının pop adlı fonksiyonu deque yapısının pop_back fonksiyonunun kendisidir.

Yığın yapısının top adlı fonksiyonu deque yapısının back fonksiyonunun kendisidir.

Page 18: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

top, push, pop

Page 19: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Stack Kullanım Alanları

Fonksiyon Çağrılarını İşlemeDizileri Tersine ÇevirmeSembolleri Dengeleme (Örneğin parantezlerin

eşlenmesi)RPN (Reverse Polish Notation) (Postfix Notation)

İşleme (RPN notasyonu paranteze ihtiyaç duymaz.)+34 (Prefix Notation – Polish Notation)3+4 (Infix Notation)34+ (Postfix Notation – RPN Notation)

Bir zamanlar HP hesap makineleri bu mantıkla çalışıyordu.

Page 20: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Soru

STL’de tanımlı vector yapısını kullanarak yine STL’de tanımlı stack yapısının işlevini gerçekleştirebilir misiniz?

Page 21: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

set Sıralı kaplar barındırdıkları öğelere göreceli veya mutlak tamsayı

pozisyon numaraları ile ulaşım imkanı tanırlar. Ayrıca, yapıdaki öğeler girildikleri sırayı koruyacak şekilde sıralı (ard arda) saklanırlar.

İlişkili kaplar ise, sıralı kapların aksine, öğelerine ulaşımı herhangi bir tipte indis anahtar (key) ile sağlarlar. Ama yapıdaki öğeler girildikleri sırayı koruyacak şekilde sıralı (ard arda) saklanmazlar.

STL kütüphanesinin set adlı bileşeni ilişkili bir kaptır ve bünyesinde benzersiz (eşsiz) (unique) ve sıralanmış (küçüklük veya büyüklük ilişkili sıralanmış) öğeler barındırır. Yani yapının içerisinde her öğeden sadece bir adet mevcuttur. set veri yapısı ikili arama ağacı (binary search tree) şeklinde oluşturulmuştur.

Kap öğelerine sıralama amacıyla kullanılan anahtarlarla ulaşılır ve bu anahtarlar aynı zamanda öğelerin kendileridir. (Anahtarların tipi kapta saklanan öğelerin tipi ile aynıdır.)

set kullanımına en uygun olan uygulamalar, veri yapısı öğelerinin her zaman için sıralı olması beklenen türden uygulamalardır.

Page 22: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)
Page 23: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

set<string> strset; //Artan Sıralı (Ascending) String Set

set<string,less<string>> strset; //Artan Sıralı String Set

set<string>::iterator si; //Artan Sıralı String Set İteratör

set<string,less<string>>::iterator si; //Artan Sıralı String Set İteratör

set<string,greater<string>> strset; //Azalan Sıralı (Descending) String Set

set<string,greater<string>>::iterator si; //Azalan Sıralı String Set İteratör

Page 24: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

map STL’nin map veri yapısında her bir öğe iki parçadan

oluşur:Öğenin adı veya öğeye erişim anahtarı (indis olarak

kullanılır)Öğenin değeri

map veri yapısında set ten farklı olarak öğelerin ikinci bir bileşeni daha vardır.

map de set gibi her öğeden sadece bir adet barındırır ve öğeler yapı içerisinde anahtar bazlı sıralıdırlar.

Bir telefon fihristi uygulaması üzerinden map veri yapısının çalışma prensibi anlaşılabilir.

Bir telefon fihristinde isimler (öğelerin adları) ve isimlere karşılık gelen numaralar (öğelerin değerleri) vardır.

Page 25: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Ekran çıktısının anahtar bazlı artan sıralı olduğuna dikkat ediniz.

Bir yılın aylarını ve her ayın kaç günden oluştuğunu bir map içerisinde nasıl saklarsınız?

Page 26: BM-104 Nesneye Yönelik  Programlama Bahar  201 3 ( 9 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

İşe Uygun Aleti Kullanmalıyız(Use the Right Tool for the Job)

Bir tamirata (problem) başlamadan önce alet çantamızın (STL Kütüphanesi) içerisindeki elimizdeki işe (algoritma) en uygun aleti (STL içerisindeki en uygun veri yapısını) belirlemeliyiz.