b l m 9
play

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


  1. Bölüm 9 Altprogramlar ISBN 0-321-49362-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) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-2

  3. Giriş • İki temel soyutlama – Süreç soyutlama (process abstraction) • İlk zamanlardan beri var – Veri soyutlama (data abstraction) • 1980lerden beri var Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-3

  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. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-4

  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. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5

  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 olup 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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-6

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-7

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-8

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-9

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-10

  11. Parametre geçmenin semantik modelleri • Gir modu (in mode) • Çık modu (out mode) • Girçık modu (inout mode) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-11

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

  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) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-13

  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. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-14

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-15

  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) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-16

  17. İsim ile geçiş (girçık modu) • Metinsel yerike koyma • Makro gibi • Örnek: – i 1’den n’e kadar olacak şekilde (x i × i) toplamını bul. Bu işi yapabilecek, Sum(i, 1, n, x[i]*i) diye çağrılabilecek bir altprogam yazalım. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-17

  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

  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

  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 olası hata: asıl parametrenin değişken yerine bir değer olması Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-20

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-21

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-22

  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 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-23

  24. Altporgram ismi olan parametreler: referans ortamı… • Özel amaçlı (ad hoc) bağlama : Parametre olarak geçilen altprogramın parametre olarak geçildiği yerdeki ortam Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-24

  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. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-25

Recommend


More recommend