Bölüm 10. Altprogramların gerçeklenmesi ISBN 0-0-321-49362-1



Benzer belgeler
Bölüm 10. Altprogramları Uygulamak

Bölüm 9. Altprogramlar ISBN

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Bölüm 9. Altprogramlar ISBN

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Bölüm 5. İsimler, Bağlamalar, Tip Kontrolü, Etki Alanları ISBN

Bölüm 12. Nesne yönelimli programlama desteği

11- FONKSİYONLAR (FUNCTIONS)

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

ALGORİTMA VE PROGRAMLAMA II

NESNEYE YÖNELİK PROGRAMLAMA

Bölüm 5. İsimler, Bağlama, Tür Kontrolü ve Kapsam(Etki Alanı) ISBN

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Bölüm 7. İfadeler ve atamalar ISBN

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Bölüm 5. Adlar(Names), Bağlamalar(Binding s),tip Kontrolleri (Type Checking), ve Etki Alanları ( Scopes) ISBN

Pointer Kavramı. Veri Yapıları

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

Göstericiler (Pointers)

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

ELN1001 BİLGİSAYAR PROGRAMLAMA I

C Programlama Dilininin Basit Yapıları

PROGRAMLAMAYA GİRİŞ DERS 2

ALGORİTMA VE PROGRAMLAMA II

Ders 6. Bölüm 6: Veri Tipleri (devam)

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

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

Hafta 13 Fonksiyonlar

Pointers (İşaretçiler)

Diziler (Arrays) Çok Boyutlu Diziler

Bağlama (Binding) Kavramı

Fonksiyonlar -Genel Test- A

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Fonksiyonlar (Altprogram)

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Yrd. Doç. Dr. Caner ÖZCAN

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

8. İŞARETCİLER (POINTERS)

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

YZM 2116 Veri Yapıları

Chapter 8. Komut düzeyi kontrol yapıları ISBN

Sunum İçeriği. Programlamaya Giriş

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Yrd. Doç. Dr. Caner ÖZCAN

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

C++ Dersi: Nesne Tabanlı Programlama

10/17/2007 Nesneye Yonelik Programlama 3.1

Yrd. Doç. Dr. Caner ÖZCAN

HSancak Nesne Tabanlı Programlama I Ders Notları

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

BLM 111 ALGORİTMA VE PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

KULLANICI TANIMLI FONKSİYONLAR (Devam)

NESNEYE YÖNELİK PROGRAMLAMA

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

Dr. Fatih AY Tel: fatihay@fatihay.net

C++ Dersi: Nesne Tabanlı Programlama

BM-311 Bilgisayar Mimarisi

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bölüm 6. Veri Tipleri ISBN

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

ALGORİTMA VE PROGRAMLAMA II

BİLİNİRLİK ALANI ve ÖMÜR, KONTROL DEYİMLERİ

Öğr. Gör. Serkan AKSU 1

Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

ALGORİTMA VE PROGRAMLAMA II

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

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Bölüm 7. Deyimler ve Atama ifadeleri ISBN

HSancak Nesne Tabanlı Programlama I Ders Notları

VERİ TABANI ve YÖNETİMİ

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

YZM 2105 Nesneye Yönelik Programlama

NESNEYE YÖNELİK PROGRAMLAMA THIS İŞARETÇİSİ, KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR,NESNE DİZİLERİ

Yığın MİKROİŞLEMCİ SİSTEMLERİ. Yığın. Örnek MİB için Yığın. Yığma İşlemi. Çekme İşlemi

Yrd. Doç. Dr. Caner ÖZCAN

C++ Dersi: Nesne Tabanlı Programlama

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Transkript:

Bölüm 10 Altprogramların gerçeklenmesi ISBN 0-0-321-49362-1

10. Bölüm konuları Çağırma / geri dönme semantiği Yığıt-dinamik yerel değişkeni olan altprogramların gerçeklenmesi İçiçe altprogramlar Statik etki alanı gerçeklenmesi Bloklar Dinamik etki alanı gerçeklenmesi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-2

Çağırma ve geri dönmenin semantiği Bir dilin altprogram çağırma ve geri dönme oparasyonlarının tümüne altprogram bağlantısı denir. Altprogram çağırmanın semantiği Parametreleri geç Yerel değişkenler için yığıt üzerinde yer ayır Çağıran programın çalışma statüsünü sakla (registerler, program sayacı) Yerel olmayan değişkenlere erişim sağla Kontrolü, çağrılana devret Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-3

Çağırma ve geri dönmenin semantiği Geri dönmenin semantiği Çık ve girçık kipindeki parametrelerin değerlerini ver (gerekiyorsa) Yığıt üzerinde yerel değişkenler için alınan yeri geri ver Çalışma statüsünü eski haline getir Kontrolü çağırana geri ver Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-4

Alt program gerçeklenmesi: tanımlar Aktivasyon kaydı (activation record) çalışmakta olan bir altprogramın ihtiyaç duyduğu bilgilerin saklandığı yerin formatıdır Aktivayson kaydı örneği (AKÖ) (activation record instance) çalışmakta olan spesifik bir altprogram için tutulan bilgidir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-5

Yığıt-dinamik yerel değişkenleri olan bir dil için tipik aktivasyon kaydı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-6

Yığıt-dinamik değişkeni olan alprogramların gerçeklensmesi: aktivasyon kaydı Aktivasyon kaydı formatı sabit, ama boyutu değişken Dinamik bağ (dynamic link) çağıranın aktivasyon kayıt örneğinin tabanını gösterir Aktivasyon kayıt örneği altprogram çağrıldığında dinamik olarak sistem yığıtı üzerinde yaratılır Ortam işaretçisi (Oİ) (environment pointer (EP ) her zaman çalışmakta olan altprogramın aktivasyon kayıt örneğinin tabanını gösterir Dinamik bağ = çağıranın ortam işaretçisi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-7

Örnek: C fonksiyonu void sub(float total, int part) { int list[5]; float sum; } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-8

Özyinelemesiz örnek void fun1(float r) { int s, t;... fun2(s);... } void fun2(int x) { int y;... fun3(y);... } void fun3(int q) {... } void main() { float p;... fun1(p);... } main calls fun1 fun1 calls fun2 fun2 calls fun3 Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-9

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

Dinamik zincir ve göreceli adres (local offset) Yığıt üzerindeki dinamik bağların tümüne birden dinamik zincir veya çağırma zinciri denir. Yerel değişkenler aktivasyon kaydının başından itibaren belirtilmiş göreceli adresleri aracılığı ile erişilirler. Bir yerel değişkenin göreceli adresi derleyici tarafından derleme anında belirlenebilir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-11

Özyinelemeli bir örnek int factorial (int n) { <-----------------------------1 if (n <= 1) return 1; else return (n * factorial(n - 1)); <-----------------------------2 } void main() { int value; value = factorial(3); <-----------------------------3 } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-12

Factorial için aktivayson kaydı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-13

Factorial çağrılamsında yığıtın durumu Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-14

Factorial dönüşlerinde yığıtın durumu Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-15

İçiçe altprogramlar Bazı C tabanlı olamayan statik etki alanlı dillede (ör: Pascal, Fortran 95, Ada, Python) yığıt dinamik yerel değişkenler kullanılır ve altprogramlar içiçe olabilir. Yerel olarak erişilemeyen tüm değişkenler yığıt üzerinde olan bir aktivasyon kayıt örneğinde bulunurlar. Yerel olmayan referans bulma süreci 1. Doğru aktivasyon kayır örneğini bul 2. Bulunan kayıt içindeki döğru adresi belirle Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-16

Statik etki alanı Statik zincir, aktivasyon kayıt örneklerini bağlayan statik linklerden oluşur Bir altprograma ait aktivasyon kayıt örneğindeki statik link, altprogramın statik babasına ait en yeni aktivasyon kayıt örneğine işaret eder. Bir aktivasyon kayıt örneğinin statik zinciri, onu tüm statik atalarınına bağlar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-17

Statik etki alanı... Statik derinlik bir etki alanının kaç tane etki alanıın içinde olduğunu gösteren bir sayıdır. Bir yerel olmayan referansın zincir farkı (chain_offset) veya içiçelik derinliği (nesting_depth) referansa konu olan değişkenin kullanıldığı etki elanı ile tanımlandığı etki alanlarının arasındakı derinlik farkıdır. Bir değişkene referans (zincir farkı, lokal adres) olarak temsil edilebilir ( (chain_offset, local_offset) ). (lokal adres = aktivasyon kaydının başından itibaren olan göreceli adres) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-18

Örnek Ada Programı procedure Main_2 is X : Integer; procedure Bigsub is A, B, C : Integer; procedure Sub1 is A, D : Integer; begin -- of Sub1 A := B + C; <-----------------------1 end; -- of Sub1 procedure Sub2(X : Integer) is B, E : Integer; procedure Sub3 is C, E : Integer; begin -- of Sub3 Sub1; E := B + A: <--------------------2 end; -- of Sub3 begin -- of Sub2 Sub3; A := D + E; <-----------------------3 end; -- of Sub2 } begin -- of Bigsub Sub2(7); end; -- of Bigsub begin Bigsub; end; of Main_2 } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-19

Örnek ADA Programı... MAIN_2 çağırma sırası MAIN_2 BIGSUB ı çağırır BIGSUB SUB2 yi çağırır SUB2 SUB3 ü çağırır SUB3 SUB1 i çağırır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-20

UYARI!!!! Bir sonraki slaytda dinamik bağlar YANLIŞTIR. Doğrusu, çağıran altprogramın aktivasyon kayıt örneğinin başına işaret etmeleridir, sonuna değil. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-21

1. Pozisyondaki yığıt içeriği Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-22

Statik zincir bakımı Çağırma anında yeni bir aktivasyon kaydı örneği yaratılır Dinamik link eski ortam işaretçisidir (eski yığıt üst işaretçisi değil!) Statik bağ, statik babanın en yeni aktivasyon kayıt örneğine işaret ettirilir (statik bağın değeri, çağıranın statik zinciri takip edilerek bulunabilir) Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-23

Statik zincir değerlendirmesi Sorun: Bir değişkenin tanımlandığı yer ile kullanıldığı yerin derinlik farkları fazla ise, değişkene erişim çok zaman alır. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-24

Göstergeler (Displays) Statik linklere alternatif Gösterge denen bir dizi, her statik derinlikteki en yeni aktivasyon kayıt örneğinin başlangıç adresini saklar Gösterge[i] = yığıt üzerindeki en yeni (en yukarıda) i statik derinlikteki aktisvasyon kayıt örneğinin adresi Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-25

Göstergeler Statik derinliği j olan bir altprogramın yeni bir aktivasyon kayıt örneği (AKÖ) yaratıldığında, bu AKÖ nün adresi k ise, Gösterge[j] nin içindeki değer AKÖ içinde saklanır ve Gösterge[j] nin değeri k ya eşitlenir Statik derinliği j olan bir altprogram geri döndüğünde ve AKÖ sü yığıttan atıldığında, Gösterge[j] nin değeri AKÖ içinde saklanan değere eşitlenir. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-26

Bloklar Kullanıcı tanımlı yerel etki alanı C örneği {int temp; temp = list [upper]; list [upper] = list [lower]; list [lower] = temp } temp değişkeninin ömrü, kontrol blok içine girdiğinde başlar Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-27

Blokların gerçeklenmesi İki yöntem: 1. Parametresiz altprogram gibi değerlendir Her bloğun kendi AKÖ sü olur. Blok her çalıştırıldığında AKÖ tekrar yaratılır 2. İçinde bulunduğu altprogramın AKÖ sünde blok değişkenleri için yer ayır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-28

Dinamik etki alanı gerçeklenmesi Derin erişim: dinamik zinciri kullanarak değişken ara - Zincirin uzunluğu statik olarak belirlenemez. Her AKÖ içinde değişken isimlerinin de olması gerekir Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-29

Dinamik etki alanı gerçeklenmesi Sığ erişim: Her değişken için bir yığıt Altprogram çağrıldığında, altprogramdaki her x değişkeni için x yığıtı üzerine bir hücre itilir Değişken erişimleri her zaman yığıt üzerindeki en üst hücreye olur Altprogram geri döndüğünde, altprogramdaki her x değişkeni için x yığıtı üzerinden bir hücre atılır Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-30

Dinamik etki alanı için sığ erişim örneği void sub3() { int x, z; x = u + v; } void sub2() { int w, x; } void sub1() { int v, w; } void main() { int v, u; } Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-31

Özet Altprogram çağrılma semantiği birçok aktiviteyi gerektirir Yığıt-dinamik yerel değişkeni olan altprogramların iki parçası var program kodu aktivasyon kaydı Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-32

Özet... Aktivasyon kayıt örneklerinde, başka şeylerin yanısıra formel parametreler ve yerel değişkenler bulunur İçiçe tanımların olduğu statik etki alanlı dillerde, statik zincirler ve göstergeler yerel olmayan değişkenlere erişimin iki ana yöntemidir. Dinamik etki alanlı dillerde, lokal olmayan değişkenlere erişimin iki yöntemi: dinamik zincir ve her değiken için ayrı yığıt. Tercüme edip geliştiren: Doç. Dr. Zeki Bayram, DAÜ 1-33