Blm 9 Altprogramlar ISBN 0-321-49362-1 9. Blm konular Giri - - PowerPoint PPT Presentation

b l m 9
SMART_READER_LITE
LIVE PREVIEW

Blm 9 Altprogramlar ISBN 0-321-49362-1 9. Blm konular Giri - - PowerPoint PPT Presentation

Blm 9 Altprogramlar ISBN 0-321-49362-1 9. Blm konular Giri Altprogram temelleri Yerel atf ortamlar (local referencing environments) Parametre geme yntemleri Altprogram olan parametreler ok


slide-1
SLIDE 1

ISBN 0-321-49362-1

Bölüm 9

Altprogramlar

slide-2
SLIDE 2

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-2

  • 9. Bölüm konuları
  • Giriş
  • Altprogram temelleri
  • Yerel atıf ortamları (local referencing

environments)

  • Parametre geçme yöntemleri
  • Altprogram olan parametreler
  • Çok anlamlı (overloaded) altprogramlar
  • Jenerik altrpogramlar
  • Kullanıcı-tanımlı çok anlamlı operatörler
  • Korutinler (coroutines)
slide-3
SLIDE 3

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-3

Giriş

  • İki temel soyutlama

– Süreç soyutlama (process abstraction)

  • İlk zamanlardan beri var

– Veri soyutlama (data abstraction)

  • 1980lerden beri var
slide-4
SLIDE 4

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-4

Altprogram temelleri

  • Her altprogramın tek giriş noktası var
  • Çağıran program, çağrılan program

çalışırken askıya alınır

  • Çağrılanın çalışması bittiğinde, kontrol her

zaman onu çağırana geri döner.

slide-5
SLIDE 5

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5

Temel tanımlar

  • Altprogram tanımı altprogramın arayüzünü ve yaptığı işleri

tanımlar

  • Altprogram çağrılması altprogramın çalısması isteğidir
  • Altprogram başlığı tanımın ilk kısmıdır. Altprogramın adını,

ne tür altprogram olduğunu (prosedür/fonksiyon) ve formel parametrelerini içerir

  • Altprogramın parametre profili (imzası) parametrelerin

sayısı, sırası ve tiplerinden oluşur

  • Altprogramın protokolü altprogramın profilidir. Altprogram

eğer bir fonksiyon ise, o zaman profile fonksiyonun dönüş tipi de dahil olur.

slide-6
SLIDE 6

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-6

Temel tanımlar…

  • Altprogram deklarasyonu altprogramın protokolünü içerir

(gövde yok).

  • C ve C++ dillerinde fonksiyon deklarasyonunun adı: prototip
  • Formel parametre (formal parameter) altprogam başlığında
  • lup gövdede kullanılan bir “kukla” değişkendir (dummy

variable)

  • Asıl parametre (actual parameter) altprogram çağrılmasında

kullanılan bir değer veya adrestir

slide-7
SLIDE 7

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-7

Asıl/formel parametre ilişkilendirmesi

  • Konuma bağlı

– Birinci asıl birinci formele, ikinci asıl ikinci formele vs. bağlanır

  • Anahtar kelime

– Asıl parametrenin hangi formel parametreye bağlanacağını çağırma anında belirtiriz. – Avantajları:

  • Parametreleri istediğimiz sırada verebiliriz
  • Parametre eşleştirme hataları olmaz

– Dezavantajı: Formel parametre isimlerinin billinmesi gerekir

slide-8
SLIDE 8

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-8

Formel parametre varsayılan değerleri

  • Bazı dillerde (ör: C++, Python, Ruby, Ada, PHP),

formel parametrelerin varsayılan değerleri olabilir.

– C++ dilinde parametreler sıralı olduğundan varsayılan değerler en sona konur

  • Değişen sayıda parametre
  • C# metodlarının ayni tipte olamaları koşulu ile değişen

sayıda parametreleri olabilir

slide-9
SLIDE 9

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-9

Prosedürler ve fonksiyonlar

  • İki tür altprogram var

– Prosedürler : parametresi olabilen komutlar topluluğu – Fonksiyonlar prosedür gibi, ancak geri verdikleri değer (return value) var.

  • Prensipte yan etkileri olmamalı
  • Pratikte yan etkileri var
slide-10
SLIDE 10

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-10

Lokal atıf ortamları (referencing environments)

  • Lokal değişkenler yığıt-dinamik olabilir
  • Avantajları
  • Özyinelemeyi destekler
  • Alt programlar yığıt üzerinde ayni yeri kullanabilir

– Dezavantajları

  • Yer alma-yer bırakma (allocation/de-allocation) , ilkleme

zamanı

  • Dolaylı adresleme
  • Altprogramlar tarihçeye duyarlı değil
  • Lokal değişkenler statik olabilir

– Avantajları ve dezavantajları yığıt-dinamiğin tersi

slide-11
SLIDE 11

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-11

Parametre geçmenin semantik modelleri

  • Gir modu (in mode)
  • Çık modu (out mode)
  • Girçık modu (inout mode)
slide-12
SLIDE 12

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-12

Parametre geçmenin semantik modelleri...

slide-13
SLIDE 13

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-13

Değer ile geçiş (Gir modu) (Pass by value)

  • Asıl parametrenin değeri formel parametreyi

ilklemek için kullanılır

– Normalde kopyalama yönemi ile yapılır – Fonksiyon gövdesinde formel parametre bir lokal değişken gibi görev yapar – Kopyalamanın dezavantajları:

  • Ek hafıza gerektirir
  • Kopyalama zaman alabilir (büyük nesneler için)
slide-14
SLIDE 14

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-14

Netice ile geçiş (Çık modu)

  • Asıl parametre bir değişken olmalıdır.

Altprograma bir değer verilmez. Formel parametre yerel değişken gibi görev yapar. Kontrol çağırana dönmeden hemen önce, formel parametrenin son değeri asıl parametrenin içine kopyalanır.

– Fazladan deplama ve zaman ihtiyacı

  • Olası sorun: sub(p1, p1); en son hangi

formel parametre kopyalanırsa, o değer p1 içindeki değer olur.

slide-15
SLIDE 15

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-15

Değer-netice ile geçiş (girçık modu)

  • Değer ve netice ile geçişin birleşimi
  • Formel parametrelerin hafızada yeri var
  • Altprogram çağrıldığında asıl parametreyi

formel parametreye kopyala

  • Altprogram geri dönerken formel

parametreyi asıl parametreye geri kopyala

  • Dezavantajları

– Iki kere kopyala – İki kere sakla

slide-16
SLIDE 16

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-16

Referans ile geçiş (girçık modu)

  • Asıl parametrenin adresini geç
  • Formel parametreye yapılan herhangi bir

değişiklik anında asıl parametreye yansır

  • Advantage: Verimlilik (kopyalama ve çifte

yer ayırma yok)

  • Dezavantajı

– Ayni yere birden çok şekilde erişim (aliasing)

slide-17
SLIDE 17

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-17

İsim ile geçiş (girçık modu)

  • Metinsel yerike koyma
  • Makro gibi
  • Örnek:

– i 1’den n’e kadar olacak şekilde (xi × i) toplamını bul. Bu işi yapabilecek, Sum(i, 1, n, x[i]*i) diye çağrılabilecek bir altprogam yazalım.

slide-18
SLIDE 18

İsim ile geçiş (girçık modu)...

real procedure Sum(j, lo, hi, Ej); value lo, hi; integer j, lo, hi; real Ej; begin real S; S := 0; for j := lo step 1 until hi do S := S + Ej; Sum := S end; Çağırma: Sum(i, 1, n, x[i]*i)

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-18

slide-19
SLIDE 19

İsim ile geçiş problemi

  • procedure swap (a, b);
  • integer a, b, temp;
  • begin
  • temp := a;
  • a := b;
  • b:= temp
  • end;
  • swap(i, x[i]) olarak çağrılmanın etkisi:
  • temp := i;
  • i := x[i];
  • x[i] := temp
  • Doğru çalışmaz!

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-19

slide-20
SLIDE 20

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-20

Parametre geçme yöntemleri gerçeklenmesi

  • Çoğu dilde sistem çalışma-zamanı yığıtı

aracılığı ile

  • Referans ile geçiş en kolay: yığıt üzerine

adres koy

  • Referans ve değer-netice yöntemlerinde
  • lası hata: asıl parametrenin değişken

yerine bir değer olması

slide-21
SLIDE 21

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-21

Bazı ana dillerin parametre geçme yöntemleri

  • C

– Değer ile geçiş

  • C++

– Değer ile geçiş + Reference tipi aracılığı ile referans ile geçiş (ör: int f(int & x){….} )

  • Java

– Tüm parametreler değer ile geçilir – Nesne parametreler gerçekte nesne işaretçisidirler, onun için işaretçi değer ile geçilir

slide-22
SLIDE 22

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-22

Parametrelerin tip kontrolü

  • Güvenirlik için önemli
  • FORTRAN 77 ve orijinal C: yok
  • Pascal, FORTRAN 90, Java, ve Ada: her zaman

yapılır

  • ANSI C ve C++: kullanıcı tercihine kalmış

– Prototipler

  • Yenice dillerde (Perl, JavaScript, PHP) yok
slide-23
SLIDE 23

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-23

Altporgram ismi olan parametreler: referans ortamı

  • Sığ bağlama: Parametre olarak geçilen

altprogramın çağrıldığı yerdeki ortam

  • Dinamik etki alanlı diller için uygun
  • Derin bağlama: Parametre olarak geçilen

altprogramın tanımladığı yerdeki ortam

  • Statik etki alanlı diller için uygun
slide-24
SLIDE 24

Altporgram ismi olan parametreler: referans ortamı…

  • Özel amaçlı (ad hoc) bağlama: Parametre
  • larak geçilen altprogramın parametre
  • larak geçildiği yerdeki ortam

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-24

slide-25
SLIDE 25

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-25

Çok amaçlı (overloaded) altprogram

  • Ayni referans ortamında ayni isimde birden çok

altprogram

– Her versiyonun protrokolü farklı olmalı

  • C++, Java, C#, ve Ada dillerinde önceden tanımlı

çok amaçlı altprogramlar var

  • Ada dilinde, fonksiyonların geri dönüş tipleri

fornkiyonları ayırt etmek için kullanılabilirler, böylece iki çok amaçlı fonksiyonun parametre tipleri ayni olabilir.

  • Ada, Java, C++, ve C# kullanıcı-tanımlı çok amaçlı

altprogramlara izin verirler.

slide-26
SLIDE 26

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-26

Jenerik altprogramlar

  • Jenerik (polimorfik) altrpogramlar her çağrıldıklarında değişik

tipte parametreler alabilirler

  • Çok amaçlı (overloaded) altprogramlar ihtiyaca göre

polimorfizm sağlarlar (ad hoc polymorphism)

  • Bir altprogramda altprogramın parametrelerinin tipini

tanımlayan tip ifadelerinde kullanılan ve yine altrpograma parametre olarak verilen bir tip değişkeni varsa, buna parametrik polimorfizm denir.

  • Dinamik tip bağlamanın derleme zamanı versiyonu
  • Ada dilinde, jenerik altprogramların tipleri açık olarak

belirtilir

  • C++ dilinde kullanıldığı ortmabdan tipler belli olur
slide-27
SLIDE 27

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-27

Jenerik altprogramlar...

  • Java 5.0

– Jenerik parametreler sınıf olmalı – Jenerik paramtrele olarak geçilebilecek sınıflar üzerine sınırlamalar konulabilir

slide-28
SLIDE 28

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-28

Parametrik polimorfizm örneği: C++

template <class Type> Type max(Type first, Type second) { return first > second ? first : second; }

  • Yukarıdaki kalıp, > operatörünün tanımlı olduğu

her tip için geçerlidir. Örneğin, aşağıdaki tanım

  • tomatik olarak yapılır.

int max (int first, int second) { return first > second? first : second; }

slide-29
SLIDE 29

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-29

Fonksiyonlar için tasarım problemleri

  • Yan etkilere izin var mı?

– Yan etkileri azaltmak için, parametreler herzaman gir modunda almalı (Ada’daki gibi)

  • Hangi tip geri dönüş tipine izin var?

– Birçok komutlu dil geri dönüş tipini sınırlar – C dili, dizi ve fonksiyon haricindekilere izin verir – C++ C gibidir, ama kullanıcı-tanımlı tiplere de izin verir – Ada altprogramları, her türlü tipi döndürebilir (altprogramlar tip değildir, dolayısı ile döndürülemezler) – Java ve C# methodları her türlü tipi döndürebilir (metodlar tip değildir, dolayısı ile döndürülemezler) – Python ve Ruby’de metodlar birinci sınıf varlıklar

  • lduklarından, döndürülebilirler
slide-30
SLIDE 30

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-30

Kullanıcı-tanımlı çok amaçlı operatötler

  • Ada, C++, Python, ve Ruby dillerinde operatörler

çok amaçlı (overloaded) olacak şekilde “yüklenebilirler”.

  • Ada örneği

function "*" (A,B: in Vec_Type): return Integer is Sum: Integer := 0; begin for Index in A'range loop Sum := Sum + A(Index) * B(Index) end loop return sum; end "*"; … c = a * b; -- a, b, c Vec_Type tipinde

slide-31
SLIDE 31

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-31

Korutinler

  • Çok giriş noktası olan ve bu giriş noktalarını kendi

kontrol eden altprogram

  • Ayni zamanda simetrik kontrol olarak bilinir.

Çağıran ve çağrılan oldukça eşit

  • Korutin çağrılmasına tekrar-başla (resume) denir
  • İlk tekrar-başla korutinin başından onu başlatır.

Daha sonrakiler kaldığı yerden devam ettirir.

  • Korutinle birbirlerini tekrar-başlatırlar (sonsuza

kadar da olabilir)

  • Koruntinler program ünitelerinin yalancı-paralel

(quasi-concurrent ) şekilde çağrılmalarını sağlar. Çalışmaları dönüşümlüdür ama örtüşmez.

slide-32
SLIDE 32

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-32

Korutin görseli: olası çalışma kontrolü

slide-33
SLIDE 33

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-33

Korutin görseli: olası çalışma kontrolü

slide-34
SLIDE 34

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-34

Korutin görseli: olası çalışma kontrolü (döngülü)

slide-35
SLIDE 35

Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-35

Özet

  • Altprogram tanımı, altprogram tarafından temsil

edilen faaliyetleri anlatır

  • Altprogramlar fonksiyon veya prosedür olabilir.
  • Lokal değişkenler yığıt-dinamik veya statik olabilir
  • Parametre geçmenin üç kipi (mode): gir, çık, girçık
  • Bazı dillerde oparatörler çok amaçlı olabilir

(overloaded)

  • Altprogramlar jenerik olabilir
  • Korutin, çok giriş noktası olabilen bir altprogram

türüdür.