BLM210 HAFTA 10 SUBPROGRAMS (ALTPROGRAMLAR)

Benzer belgeler
Bölüm 9. Altprogramlar ISBN

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Bölüm 9. Altprogramlar ISBN

Bölüm 10. Altprogramları Uygulamak

Bölüm 10. Altprogramların gerçeklenmesi ISBN

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

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

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

Bölüm 9. Alt Programlar ISBN

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

10/17/2007 Nesneye Yonelik Programlama 3.1

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

Bağlama (Binding) Kavramı

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

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

Göstericiler (Pointers)

Unlike analytical solutions, numerical methods have an error range. In addition to this

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

BTEP243 Ders 3. class Yazım Kuralı:

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

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

Yrd. Doç. Dr. Caner ÖZCAN

CmpE 320 Spring 2008 Project #2 Evaluation Criteria

Pros and Cons of Pointers. Pointers. Avantajlar. Dezavantajlar

BMH-303 Nesneye Yönelik Programlama

Yrd. Doç. Dr. Caner ÖZCAN

Argumentative Essay Nasıl Yazılır?

WEEK 11 CME323 NUMERIC ANALYSIS. Lect. Yasin ORTAKCI.

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

Islington da Pratisyen Hekimliğinizi ziyaret ettiğinizde bir tercüman istemek. Getting an interpreter when you visit your GP practice in Islington

Pointer Kavramı. Veri Yapıları

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

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

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

IDENTITY MANAGEMENT FOR EXTERNAL USERS

BİL-142 Bilgisayar Programlama II

SBR331 Egzersiz Biyomekaniği

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

Soru Toplam Puan Not

1 I S L U Y G U L A M A L I İ K T İ S A T _ U Y G U L A M A ( 5 ) _ 3 0 K a s ı m

11- FONKSİYONLAR (FUNCTIONS)

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Virtualmin'e Yeni Web Sitesi Host Etmek - Domain Eklemek

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

Öğr. Gör. Serkan AKSU 1

Yüz Tanımaya Dayalı Uygulamalar. (Özet)

BİL-142 Bilgisayar Programlama II

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

Bilgisayar Bilimcileri Haklıymış

WEEK 4 BLM323 NUMERIC ANALYSIS. Okt. Yasin ORTAKCI.

4. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

Operatörlere İşlev Yükleme


Hafta 13 Fonksiyonlar

1 PROGRAMLAMAYA GİRİŞ

HB1002: ORACLE 10G VERĐTABANI PL/SQL ile PROGRAMLAMA (32 saat)

Bölüm 6. Veri Türleri ISBN

Özyineleme (Recursion)

BMH-303 Nesneye Yönelik Programlama

Pointers (İşaretçiler)

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING)

Arýza Giderme. Troubleshooting

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

PROGRAMLAMAYA GİRİŞ DERS 2

const objects & const member functions const objects ve const functions Data Member Initializer List Data Member Initializer List

"Şirket" Sunucusu ve Başarı Mobile Arasındaki HTTP Veri Aktarımı için Etkileşim Teknik Protokolü

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

Lambda İfadeleri (Lambda Expressions)

C++ Dersi: Nesne Tabanlı Programlama

NESNEYE YÖNELİK PROGRAMLAMA

BLM401 Mobil Cihazlar için ANDROID İşletim Sistemi. SQLite Veritabanı. BLM401 Dr.Refik SAMET

econn (Supplier Portal) of the MANN+HUMMEL Group

C++ Dersi: Nesne Tabanlı Programlama

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

Veri Yapıları ve Algoritmalar dönem

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

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Cases in the Turkish Language

C++ Dersi: Nesne Tabanlı Programlama

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

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Diziler (Arrays) Çok Boyutlu Diziler

Ardunio ve Bluetooth ile RC araba kontrolü

AKTS Başvurumuz. Bologna Süreci Uzmanlarının Değerlendirmesi

Operator Aşırı Yükleme (Operator OverLoading)

Squid i Follow X-Forwarded-For headers Yaması İle Patchlemek

Sunum İçeriği. Programlamaya Giriş

const objects & const member functions

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

Yarışma Sınavı A ) 60 B ) 80 C ) 90 D ) 110 E ) 120. A ) 4(x + 2) B ) 2(x + 4) C ) 2 + ( x + 4) D ) 2 x + 4 E ) x + 4

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

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

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

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

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

HSancak Nesne Tabanlı Programlama I Ders Notları

8. İŞARETCİLER (POINTERS)

Transkript:

1 BLM210 HAFTA 10 SUBPROGRAMS (ALTPROGRAMLAR) Introduction Giriş Process abstraction Süreç soyutlaması Data abstraction Veri soyutlaması Fundamentals of subprograms Altprogramların esasları Each subprogram has a single entry point Her altprogramın tek giriş noktası vardır The calling program is suspended during execution of the called subprogram Çağırılan altprogramın koşması sırasında, çağıran program durdurulur (bekletilir). Control always returns to the caller when the called subprogram s execution terminates Çağırılan altprogramın koşması bittiğinde, kontrol çağırana döner Basic definitions Temel tanımlar A subprogram definition describes the interface to and the actions of the subprogram abstraction Bir altprogram tanımlaması, altprograma olan arayüzü ve altprogram soyutlamasının eylemlerini tarif eder A subprogram call is an explicit request that the subprogram be executed Bir altprogram çağrısı, altprogramın koşması için doğrudan bir istektir A subprogram header is the first part of the definition, including the name, the kind of subprogram, and the formal parameters Bir altprogram başlığı, altprogramın adını, türünü ve parametrelerinin tiplerini içeren tanımının ilk bölümüdür The parameter profile of a subprogram is the number, order, and types of its parameters Bir altprogramın parametre profili, parametrelerinin sayısı, sırası ve tipleridir

2 The protocol is a subprogram s parameter profile and, if it is a function, its return type Protokol, bir altprogramın parametre profile ve, eğer fonksiyonsa, döndüğü tiptir Function declarations in C and C++ are often called prototypes C ve C++ daki fonksiyon bildirimlerine, sıklıkla prototipler denir A subprogram declaration provides the protocol, but not the body, of the subprogram Bir altprogram bildirimi, altprogramın protoloünü söyler ama vücudunu (deyimleri) söylemez A formal parameter is a dummy variable listed in the subprogram header and used in the subprogram Bir göstermelik parametre, altprogram başlığında listelenmiş olan ve altprogramda kullanılan göstermelik değişkendir An actual parameter represents a value or address used in the subprogram call statement Bir yürürlükteki parametre, altprogram çağrısı deyiminde bir değeri veya adresi gösterir Actual/Formal parameter correspondence Yürürlükteki/Göstermelik parametre eşleşmeleri Positional Konumsal o The binding of actual parameters to formal parameters is by position: the first actual parameter is bound to the first formal parameter and so forth Yürürlükteki parametrelerin göstermelik parametrelere bağlanması konum iledir: ilk yürürlükteki parametre, ilk göstermelik parametreye bağlanır, ikinci ikinciye, vs. o Safe and effective Güvenli ve etkili Keyword Anahtar sözcük o The name of the formal parameter to which an actual parameter is to be bound is specified with the actual parameter Yürürlükteki bir parametrenin kendisine bağlanması gereken göstermelik parametrenin adı, yürürlükteki parametre ile belirtilir Example (örnek): Python

3 o Avantaj: Parameters can appear in any order, thereby avoiding parameter correspondence errors Avantaj: Parametreler herhangi bir sırada yer alabilir, böylelikle parametrelerin eşleşme hatalarından kaçınılır o Disadvantage: User must know the formal parameter s names Dezavantaj: Kullanıcı göstermelik parametrelerin isimlerini bilmek zorundadır Formal parameter default values Göstermelik parametrelerin varsayılan değerleri In some languages, formal parameters can have default values (if no actual parameter is passed) Bazı dillerde, altprograma yürürlükteki parametre geçilmezse, göstermelik parametrelerin varsayılan değerleri olabilir In C++, default parameters must appear last because parameters are positionally associated (no keyword parameters) C++ da, varsayılan değeri olan parametreler, parametre listesinin en sonunda bulunmalıdır; çünkü eşleşmeleri konumsal olarak yapılır (anahtar sözcükle belirlenen parametre yok) o Example (Örnek): Variable numbers of parameters Değişebilen sayıda parametreler C# methods can accept a variable number of parameters as long as they are of the same type, the corresponding formal parameter is an array preceded by params C# metotlarında, aynı tipten olmaları koşulyla değişebilen sayıda parametre olabilir, karşılık gelen göstermelik parametre params ve ardından gelen bir dizidir. o Example (Örnek):

4 Procedures and functions Prosedürler ve fonksiyonlar There are two categories of subprograms: İki çeşit altprogram vardır: o Procedures are collection of statements that define parameterized computations Prosedürler, parametreli hesaplamaları tanımlayan deyim topluluklarıdır o Functions structurally resemble procedures but are semantically modeled on mathematical functions Fonksiyonlar yapısal olarak prosedürlere benzer, ancak anlamsal olarak matematiksel fonksiyonlar üzerine modellenmiştir They are expected to produce no side effects Yan etki oluşturmamaları beklenir In practice, program functions have side effects Pratikte, yan etkileri vardır Design issues for subprograms Altprogramlar için tasarım meseleleri Are local variables static or dynamic? Yerel değişkenler statik mi dinamik mi? Can subprogram definitions appear in other subprogram definitions? Altprogram tanımları başka altprogram tanımlarında yer alabilir mi? What parameter passing methods are provided? Hangi parametre geçme yöntemleri kullanılabilir? Are parameter types checked? Parametre tipleri kontrol ediliyor mu? If subprograms can be passed as parameters and subprograms can be nested, what is the referencing environment of a passed subprogram? Altprogramlar parametre olarak geçilebiliyor ve altprogramlar iç-içe olabiliyorsa, geçilen bir altprogramın başvuru ortamı nedir? Can subprograms be overloaded? Altprogramların üstüne yüklenebilir mi? Can subprogram be generic? Altprogramlar şablonsal (genel) olabilir mi?

5 If the language allows nested subprograms, are closures supported? Eğer dil iç-içe altprogramlara izin veriyorsa, kapalılıklar destekleniyor mu? Local referencing environments Yerel başvuru ortamları Local variables can be stack-dynamic Yerel değişkenler yığıt-dinamik olabilir o Advantages Avantajlar Support for recursion Özyineleme desteği Storage for locals is shared among some subprograms Yerel değişkenler için kullanılan bellek altprogramlar arasında paylaşılabilir o Disadvantages Dezavantajlar Allocation/de-allocation, initialization time Yer ayırma/yer boşaltma, ilk değer atama zaman maliyetleri Indirect addressing Doğrudan olmayan adresleme Subprograms cannot be history sensitive Altprogramlar geçmişe duyarlı olamaz Local variables can be static Yerel değişkenler statik olabilir o Advantages and disadvantages are the opposite of those for stack-dynamic locals Avantaj ve dezavantajlar yığıt-dinamik yerel değişkenlerin tersidir In most contemporary languages, locals are stack dynamic Birçok çağdaş dilde, yerel değişkenler yığıt-dinamiktir In C-based languages, locals are by default stack dynamic, but can be declared static C-tabanlı dillerde, yerel değişkenler kendiliğinden yığıt-dinamiktir, ama static bildirilebilirler

6 Semantic models of parameter passing Parametre geçmenin anlamsal modelleri In mode İçeriye kipi (modu) Out mode Dışarıya kipi Inout mode Hem içeriye hem dışarıya kipi Call = Çağır Return = Dön Conceptual models of transfer Aktarımın kavramsal modelleri Physically move a value Bir değeri fiziksel olarak taşımak Move an access path to a value Bir değere erişilebilecek yolu (adresi) taşımak Pass-by-Value (In mode) Değerle geçmek (İçeriye kipi) The value of the actual parameter is used to initialize the corresponding formal parameter Yürürlükteki parametrenin değeri, karşılık gelen göstermelik parametrenin ilk değerini belirler o Normally implemented by copying Normalde kopyalayarak gerçeklenir

7 o Can be implemented by transmitting an access path but not recommended (enforcing write protection is not easy) Değere erişilebilecek yol (adres) geçilerek gerçeklenebilir, ama önerilmez (yazmaya karşı koruma sağlamak kolay değildir) o Disadvantages (if by physical move): additional storage is required (stored twice) and the actual move can be costly (for large parameters) Dezavantajlar (fiziksel taşımayla): ek bellek gerekir (iki kez saklanır) ve gerçek taşıma maliyetli olabilir (büyük parametreler için) o Disadvantages (if by access path method): must write-protect in the called subprogram and accesses cost more (indirect addressing) Dezavantajlar (erişim yolunu geçmeyleyse): çağırılan altprogramda yazmaya karşı koruma sağlanmalı ve erişimler daha maliyetlidir (doğrudan olmayan adresleme) if the language allows nested subprograms, are closures supported? Eğer dil iç-içe altprogramlara izin veriyorsa, kapalılıklar destekleniyor mu? Pass-by-Result (Out mode) Sonuçla geçmek (Dışarıya kipi) When a parameter is passed by result, no value is transmitted to the subprogram; the corresponding formal parameter acts as a local variable; its value is transmitted to caller s actual parameter when control is returned to the caller, by physical move Bir parametre sonuçla geçilince, altprograma bir değer iletilmez; karşılık gelen göstermelik parametre yerel bir değişken olarak rol alır; kontrol çağırana döndürüldüğünde yerel değişkenin değeri fiziksel taşımayla çağıranın yürürlükteki parametresine iletilir o Require extra storage location and copy operation Fazladan bellek ve kopyalama işlemi gerektirir Potential problems: Olası sorunlar: o Examples (örnekler): sub(p1, p1) which formal parameter is copied back last represents the current value of p1 hangi göstermelik parametrenin değerinin en son kopyalandığına bağlı olarak p1 in son değeri belirlenir sub(list[sub], sub) Compute address of list[sub] at the beginning of the subprogram or end? list[sub] ın adresinin altprogramın başında mı sonunda mı hesaplandığına bağlı olarak dizinin farklı elemanlarının değeri değişebilir

Pass-by-Value-Result (Inout mode) Değer ve sonuçla geçmek (Hem içeriye hem dışarıya kipi) 8 A combination of pass-by-value and pass-by-result Değerle geçme ve sonuçla geçmenin birleşimi Sometimes called pass-by-copy Bazen kopyayla geçmek de denir Formal parameters have local storage Göstermelik parametrelerin tutulması (bellekteki yeri) yereldir Disadvantages: Dezavantajlar: o Those of pass-by-result Sonuçla geçmenin dezavantajları o Those of pass-by-value Değerle geçmenin dezavantajları Pass-by-Reference (Inout mode) Başvuruyla geçmek (Hem içeriye hem dışarıya kipi) Pass an access path Değere erişilecek yol geçmektir Also called pass-by-sharing Paylaşımla geçmek de denir Advantage: Passing process is efficient (no copying and no duplicated storage) Avantaj: Geçme işi verimlidir (kopyalama ve iki yerde tutma işi yoktur) Disadvantages: Dezavantajlar: o Slower accesses (compared to pass-by-value) to formal parameters Göstermelik parametrelere daha yavaş erişim (değerle geçme ile karşılaştırıldığında) o Potentials for unwanted side effects (collisions) İstenmeyen yan etkiler potasiyeli o Unwanted aliases (access broadened) İstenmeyen öteki adlar (erişim genişletiliyor)

Aliasing examples (Öteki ad örnekleri) 9 fun(total, total) fun(list[i], list[j]) (when i == j, i == j iken) fun1(list[i], list) Pass-by-Name (Inout mode) Adla geçmek (Hem içeriye hem dışarıya kipi) By textual substitution Metin olarak yerine koyarak Formals are bound to an access method at the time of the call, but actual binding to a value or address takes place at the time of a reference or assignment Göstermelik parametreler, çağrı zamanında bir erişim yöntemine bağlanır, ama bir değere veya adrese bağlanma başvuru veya atama zamanında gerçekleşir Allows flexibility in late binding Geç bağlanmada esneklik sağlar Implementation requires that the referencing environment of the caller is passed with the parameter, so the actual parameter address can be calculated Gerçeklemede, çağıranın başvuru ortamının parametre ile geçilmesi gerekir, bu durumda yürürlükteki parametrenin adresi hesaplanabilir Implementing parameter-passing methods Parametre-geçme yöntemlerini gerçekleme In most languages parameter communication takes place through the run-time stack Birçok dilde, parametre iletişimi koşma-zamanı yığıtı aracılığıyla gerçekleşir Pass-by-reference are the simplest to implement; only an address is placed in the stack Başvuruyla geçme gerçeklemesi en basit olandır, yığıta sadece bir adres konur. Example (örnek): o Function header: Fonksiyon başlığı: void sub(int a, int b, int c, int d) o Function call in main: Main deki fonksiyon çağrısı: sub(w, x, y, z)

o (pass w by value, x by result, y by value-result, z by reference) w: değerle geç, x: sonuçla geç, y: değer ve sonuçla geç, z: başvuruyla geç 10 Parameter passing methods of some languages Bazı dillerin parametre geçme yöntemleri C o Pass-by-value Değerle geçme o Pass-by-reference is achieved by using pointers as parameters Başvuruyla geçme, işaretçileri parametre olarak kullanarak başarılır C++ o A special pointer type called reference type for pass-by-reference Başvuru tipi denilen özel bir işaretçi tipi kullanarak başvuruyla geçme C# o Default method: pass-by-value Varsayılan yöntem: değerle geçme o Pass-by-reference is specified by preceding both a formal parameter and its actual parameter with ref Hem göstermelik hem de yürürlükteki parametrenin başına ref getirilerek, başvuruyla geçme işi başarılabilir

11 Type checking parameters Parametrelerin tip kontrolü Considered very important for reliability Güvenilirlik için önemli sayılmaktadır FORTRAN 77 and original C: none FORTRAN 77 ve ilk C dilinde parametrelerin tipi kontrol edilmez Pascal, FORTRAN 90+, Java, and Ada: it is always required Pascal, FORTRAN 90+, Java ve Ada da: tip kontrolü her zaman gereklidir ANSI C and C++: choice is made by the user (Prototypes) ANSI C ve C++ da, seçim kullanıcıya bırakılır (Prototipler) Multidimensional arrays as parameters Çok boyutlu dizilerin parametre olması If a multidimensional array is passed to a subprogram and the subprogram is separately compiled, the compiler needs to know the declared size of that array to build the storage mapping function Çok boyutlu bir dizi bir altprograma geçilir ve altprogram ayrı olarak derlenirse, derleyicinin bellek eşlem fonksiyonunu oluşturması için dizinin bildirilen boyunu bilmesi gerekir o Examples (örnekler) Storage mapping function Bellek eşlem fonksiyonu C & C++ Programmer is required to include the declared sizes of all but the first dimension in the actual parameter Programcı, yürürlükteki dizi parametresinin ilk boyutu dışında diğer tüm boyutlarını bildirmesi gerekir

12 Disallows writing flexible subprograms Esnek altprogramları yazmayı engeller Solution: pass a pointer to the array and the sizes of the dimensions as other parameters; the user must include the storage mapping function in terms of the size parameters Çözüm: diziye bir işaretçi ve boyutların tümünü ayrı parametreler olarak geçmek: kullanıcı, bellek eşlem fonksiyonunu boyut parametreleri cinsinden gerçeklemelidir C# Arrays are objects; they are one-dimensioned, the elements can be arrays Diziler nesnelerdir; hepsi tek-boyutludur, ama elemanlar diziler olabilir Each array inherits a named constant (Length) that is set to the length of the array when the array object is created Her diziye ait adlı bir sabit (Length) vardır. Dizi nesnesi yaratıldığında bu sabitin değerine dizinin uzunluğu atanır Design considerations for parameter passing Parametre geçme için tasarım meseleleri Two important considerations İki önemli mesele o Efficiency Verimlilik o One-way or two-way data transfer Bir veya iki yönlü veri aktarımı But the above considerations are in conflict Ama yukarıdaki unsurlar çatışma halindedir o Good programming suggest limited access to variables, which means one-way whenever possible İyi programlama, değişkenlere sınırlı erişim gerektirir, yani mümkün oldukça tek yönlü veri aktarımı yapılmalı o But pass-by-reference is more efficient to pass structures of significant size Ama başvuruyla geçme, büyük boylu yapılar için daha verimlidir

13 Parameters that are subprogram names Altprogram adı olan parametreler It is sometimes convenient to pass subprogram names as parameters Bazen, altprogram adlarını parametre olarak geçmek elverişlidir Issues: Meseleler: o Are parameter types checked? Parametre tipleri kontrol ediliyor mu? o What is the correct referencing environment for a subprogram sent as a parameter? Parametre olarak gönderilen bir altprogram için doğru başvuru ortamı nedir? Parameters that are subprogram names: Referencing environment Altprogram adı olan parametreler: Başvuru ortamı Shallow binding: The environment of the call statement that enacts the passed subprogram - most natural for dynamic-scoped languages Sığ bağlanma: Geçilen altprogramı çağıran çağırma deyiminin ortamı dinamik kapsamlı diller için en doğal olanı Deep binding: The environment of the definition of the passed subprogram - Most natural for static-scoped languages Derin bağlanma: Geçilen altprogramın tanımlandığı ortam statik kapsamlı diller için en doğalı Ad hoc binding: The environment of the call statement that passed the subprogram Derme çatma bağlanma: Altprogramı parametre olarak geçen çağrı deyiminin ortamı Example (örnek):

14 o Shallow binding: referencing environment of sub4 (x = 4) Sığ bağlanma: sub4 ün başvuru ortamı (x = 4) o Deep binding: referencing environment of sub1 (x = 1) Derin bağlanma: sub1 in başvuru ortamı (x = 1) o Ad hoc binding: referencing environment of sub3 (x = 3) Derme çatma bağlanma: sub3 ün başvuru ortamı (x = 3) Calling subprograms indirectly Altprogramları dolaylı olarak çağırma Usually when there are several possible subprograms to be called and the correct one on a particular run of the program is not known until execution (e.g., event handling and GUIs) Genellikle çağırılabilecek birden fazla alt program varken ve programın belirli bir koşmasında hangisinin çalışması gerektiğine koşma anına kadar karar verilemediği durumlar için kullanılabilir (ör: olay işleme ve grafik kullanıcı arayüzlerinde) In C and C++, such calls are made through function pointers C ve C++ da böyle çağrılar fonksiyon işaretçileri aracılığıyla yapılır In C#, method pointers are implemented as objects called delegates C# ta, yöntem işaretçileri delegate (vekil) adı verilen nesnelerle gerçeklenir o A delegate declaration: Bir vekil bildirimi public delegate int Change(int x); This delegate type, named Change, can be instantiated with any method that takes an int parameter and returns an int value Adı Change olan bu vekil tipi, int bir parametre alıp int bir değer dönen herhangi bir metotla örneklanebilir An example method: örnek bir fonksiyon: static int fun1(int x) { } Instantiate: Change nesnesi yaratma: Change chgfun1 = new Change(fun1);

15 Can be called with: Aşağıdaki gibi çağırılabilir: chgfun1(12); o A delegate can store more than one address, which is called a multicast delegate Bir vekil bir adresten daha fazla adres tutabilir. Buna çok gönderimli vekil denir Example (örnek): Overloaded subprograms Üstüne yüklenen altprogramlar An overloaded subprogram is one that has the same name as another subprogram in the same referencing environment Bir üstüne yüklenen altprogram, aynı başvuru ortamındaki başka bir altprogramla aynı ada sahip olan diğer bir altprogramdır Every version of an overloaded subprogram has a unique protocol Üstüne yüklenen bir altprogramın tüm versiyonları farklı bir protokole sahiptir C++ and C# include predefined overloaded subprograms C++ ve C# önceden tanımlı üstüne yüklenmiş altprogramlara sahiptir C++ and C# allow users to write multiple versions of subprograms with the same name C++ ve C# ta kullanıcılar altprogramların aynı ada sahip farklı versiyonlarını yazabilirler Generic subprograms Şablonsal (genel) altprogramlar A generic or polymorphic subprogram takes parameters of different types on different activations Farklı etkinleştirmelerde, şablonsal veya çok biçimli bir altprogram farklı tipte parametreler alır Overloaded subprograms provide ad hoc polymorphism Üstüne yüklenen altprogramlar, derme çatma çok biçimlilik sağlarlar Subtype polymorphism means that a variable of type T can access any object of type T or any type derived from T (OOP languages) Alttip çok biçimlilik, T tipindeki bir değişkenin T tipindeki her nesneye veya T tipinden türetilmiş her tipteki her nesneye erişebilmesi anlamına gelir

16 A subprogram that takes a generic parameter that is used in a type expression that describes the type of the parameters of the subprogram provides parametric polymorphism Altprogram parametrelerinin tipini tarif eden bir tip ifadesinde kullanılan şablonsal bir parametre alan altprogram, parametrik çokbiçimlilik sağlar. o A cheap compile-time substitute for dynamic binding Dinamik bağlanmanın yerine geçen az maliyetli bir derleme-zamanı çözümü C# example (C# örneği): Design issues for functions Fonksiyonlar için tasarım meseleleri Are side effects allowed? Yan etkilere izin veriliyor mu? o Parameters should always be in-mode to reduce side effect (like Ada) Parametreler yan etkiyi aza indirmek için hep içeriye kipinde olmalı (Ada gibi) What types of return values are allowed? Hangi tiplerin dönmesine izin veriliyor? o Most imperative languages restrict the return types Birçok buyurgan dil dönülen tipleri kısıtlar o C allows any type except arrays and functions C, diziler ve fonksiyonlar dışında her tipe izin verir o C# methods can return any type (methods are not types; they cannot be returned) C# metotları her tipi dönebilir (metotlar tip değildir ve dönülemezler)

17 Closures Kapalılıklar A closure is a subprogram and the referencing environment where it was defined Bir kapalılık, bir altprogram ve tanımlandığı başvuru ortamından oluşur. The referencing environment is needed if the subprogram can be called from any arbitrary place in the program Altprogram, programdaki her yerden çağrılabiliyorsa, başvuru ortamına ihtiyaç duyulur A static-scoped language that does not permit nested subprograms doesn t need closures İç-içe altprogramlara izin vermeyen statik kapsamlı bir dilde kapalılıklara ihtiyaç yoktur. Closures are only needed if a subprogram can access variables in nesting scopes and it can be called from anywhere Kapalılıklara, yalnızca altprogramlar çevreleyen kapsamlardaki değişkenlere erişebiliyor ve her yerden çağırılabiliyorsa, gerek duyulur To support closures, an implementation may need to provide unlimited extent to some variables (because a subprogram may access a nonlocal variable that is normally no longer alive) Kapalılıkları desteklemek için; gerçekleme bazı değişkenlere sınırsız ömür sağlamaya ihtiyaç duyabilir (çünkü bir altprogram, artık yaşamayan ve yerel olmayan bir değişkene erişebilir) Coroutines Eşyordamlar A coroutine is a subprogram that has multiple entries and controls them itself Bir eşyordam, kendisinin kontrol ettiği ve çok girişi olan bir altprogramdır Also called symmetric control: caller and called coroutines are on a more equal basis Çağıran ve çağırılan eşyordamlar eşit temelde olduğu için, simetrik kontrol de denir A coroutine call is named a resume Bir eşyordam çağrısına kaldığı yerden devam etme denir The first resume of a coroutine is to its beginning, but subsequent calls enter at the point just after the last executed statement in the coroutine Bir eşyordamın ilk kaldığı yerden devam etmesi en başındandır, ama sonraki çağrılar eşyordamda son koşulmuş olan deyiminin hemen sonrasından girer Coroutines repeatedly resume each other, possibly forever Eşyordamlar, belki sonsuza dek, kontrolü birbirlerine vererek kaldıkları yerden devam ederler

18 Coroutines provide quasi-concurrent execution of program units (the coroutines); their execution is interleaved, but not overlapped Eşyordamlar, program birimlerinin (eşyordamlar) sanki-eşzamanlı koşmalarını sağlar; çalışma sıraları birbirleri arasında dönüp durur ama aynı anda koşmazlar Examples (örnekler): resume = kaldığı yerden devam etme master = efendi (ilk başlayan) subsequent = sonraki