Matakuliah : KONSEP BAHASA PEMROGRAMAN Tahun : 2010 SUBPROGRAM DAN IMPLEMENTASINYA Pertemuan 7 Outline Materi • Pendahuluan • Konsep dasar subprogram • Isu desain subprogram • Lingkungan referensi lokal • Metode pengiriman parameter • Parameter yang berbentuk nama subprogram • Overloaded Subprograms • Generic Subprograms • Isu desain fungsi Bina Nusantara University • Coroutine • Semantik call dan return • Implementasi ubprograms sederhana • Implementasi subprogram dengan variabel lokal stackdynamik • Nested Subprograms • Blocks • Implementasi lingkup dinamik 3 Pendahuluan • Tipe abstraksi – Abstraksi proses • Subprogram • Dikenal sejak awal pemrograman • Meningkatkan readability dengan mengekspose struktur logik sementara detilnya disembunyikan . – Abstraksi data • • • • Bina Nusantara University TDA Dikenalkan dalam tahun 80-an Terdiri dari data dan himpunan operasi C int : +, -, *, / , % 4 Fundamental Subprogram • Setiap subprogram mempunyai single entry point • Calling program (caller) ditunda selama eksekusi subprogram yang dipanggil • Kendali kembali ke caller saat ekseklusi called subprogram berakhir • Alternatif: – Co routines, subprogram dengan multi-entries – Concurrent unit – Metode OOP Bina Nusantara University 5 Definisi • Subprogram definition menguraikan antar-muka ke dan dari subprogram • Subprogram call adalah permintaan eksplisit agar subprogram dieksekusi • Subprogram header adalah bagian pertama dari definisi termasuk nama, tipe subprogram dan parameter formal – FORTRAN – Ada – C SUBROUTINE ADDER (parameter) procedure ADDER (parameter) void adder (parameter) • Parameter profile (i.e. signature) dari subprogram adalah banyak, urutan dan tipe parameter • Protocol adalah parameter profile subprogram dan jika ia fungsi, return type nya. • Subprogram declaration adalah protocol, tidak termasuk tubuh fungsi, dari subprogram Bina Nusantara University • Deklarasi fungsi di C dan C++ kerap disebut prototypes 6 Parameter • Isu – Akses ke non-lokal: mengurangi reliabilitas, atau – passing parameters: lebih luwes • Tipe parameter – Formal parameter adalah variabel dummy yang didaftar dalam subprogram header dan digunakan dalam subprogram – Actual parameter adalah nilai atau alamat yang digunakan dalam pemanggilan subprogram (call statement) Bina Nusantara University 7 Korespondensi Parameter Aktual-Formal • Posisional – Pengikatan parameter aktual ke formal melalui posisinya; parameter aktual pertama diikat ke parameter formal pertama dan seterusnya. – Aman dan efektif – Daftar parameter pendek • Keyword – – – – Nama parameter formal dan formal diikat melalui kata kunci Daftar parameter panjang Parameter dapat muncul disembarang lokasi Harus tahu nama parameter Bina Nusantara University 8 Nilai default Parameter Formal • Dalam bahasa tertentu (e.g., C++, Ada), parameter formal dapat mempunyai nilai default yang digunakan jika tidak ada parameter aktual di kirim – Di C++, parameter default harus muncul terakhir karena parameter adalah positionally associated. Tak ada keyword parameter – float computePay (float income, float taxRate, int exemption = 1); • C# dapat menerima banyak parameter bervariasi asalkan mereka sama tipenya. Bina Nusantara University 9 Prosedur dan Fungsi • Ada dua kategori subprogram – Procedures adalah koleksi pernyataan yang mendefinisikan komputasi berparameter; diaktifkan dengan pernyataan call ; menghasilkan nilai dengan cara • Mengubah parameter formal melalui transfer data • Mengubah nonlocal yang bukan parameter formal – Functions secara struktur mirip prosedur tetapi secara semantik dimodel pada fungsi matematika • • • • Bina Nusantara University Dipanggil melalui namanya dalam ekspresi Hasil dikembalikan dan mengganti caller Diekspektasi tidak ada efek samping Prakteknya, fungsi mempunyai efek samping 10 Isu Desain • • • • Apa metode pengiriman parameter yang disediakan? Apakah tipe parameter di-cek? Apakah variabel lokal statik atau dinamik? Dapatkah definisi subprogram muncul dalam definisi subprogram lain? • Dapatkah subprogram di-overload? • Dapatkan subprogram generik? • Kasus di C/C++ – Hanya fungsi tetapi perilaku seperti subprogram/prosedur – Tidak ada nilai balik didefinisikan sebagai void – Sand alone call ke fungsi void adalah legal void sort (int list[ ], int listLen); … sort (scores, 100); Bina Nusantara University 11 Lingkungan Referensi Lokal • Didefinisikan dalam subprogram • Variabel lokal dapat stack-dynamic – Keuntungan • Mendukung rekursi • Ruang untuk lokal di-share diantara beberapa subprogram – Kerugian • Alokasi/de-alokasi, waktu inisialisasi • Pengalamatan tidak langsung • Subprogram tidak dapat history sensitive • C/C++: lokal adalah stack dynamic kecuali di-declare sebagai statik • Variabel lokal mungkin statik – – – – Lebih efisien i.e. akses langsung Tak ada run-time overhead History sensitive Tidak mendukung recursion Bina Nusantara University 12 Metode Pengiriman Parameter • Cara bagaimana parameter di-transmit ke dan/atau dari subprogram – – – – – Pass-by-value (mode in) Pass-by-result (mode out) Pass-by-value-result (mode inout) Pass-by-reference (mode inout) Pass-by-name (mode inout) Bina Nusantara University 13 Model Pengiriman Parameter Bina Nusantara University 14 Pass by Value • Nilai parameter aktual digunakan untuk inisialisasi parameter formal pasangannya. – Biasanya diimplementasikan melalui copying. – Data aktual di-transfer sehingga akses lebih efisien – Dapat diimplementasikan dengan mengirim jalur akses tetapi tidak dianjurkan – Jika copy digunakan, dibutuhkan tambahan ruang – Costly, i.e. tambahan ruang dan operasi copy Bina Nusantara University 15 Pass by Result • Jika parameter di passed by result, tak ada nilai dikirim ke subprogram; lokal dikirim balik ke caller • Parameter formal pasangannya berlaku sebagai variabel lokal; nilainya dikirim balik ke parameter aktual saat kendali dikembalikan ke caller. – Membutuhkan ruang tambahan dan operasi copy • Potensi masalah: parameter aktual collision procedure sub (y: int, z: int) … sub(p1, p1); apapun parameter formal yang di-copy balik akan menjadi nilai p1 nilai p1 tergantung pada urutan assignment di return; masalah portabilitas • Dua waktu berbeda untuk evaluasi alamat aktual – Pada waktu call, atau – Padawaktu return Bina Nusantara University 16 Pass by Value-Result • • • • • Kombinasi pass-by-value dan pass-by-result Aktual di-copy ke formal dan kemudian copy balik. Kadang-kadang disebut pass-by-copy Parameter formal mempunyai local storage Kerugian : – Sama dengan pass-by-result dan pass-by-value Bina Nusantara University 17 Pass by Reference • Kirim jalur akses biasanya alamat • Aktual di-share sehingga disebut pass-by-sharing • Proses pengiriman efisien (waktu, ruang, tak ada copying dan tak ada duplikasi storage) • Kerugian – Akses lambat, dibandingkan dengan pass-by-value, ke parameter formal – Potensi terjadi efek samping yang tak diinginkan – Potensi alias yang tak diinginkan Bina Nusantara University 18 Pass by Reference (lanjutan) • Meng-create alias – Parameter aktual collisions • void fun(int* first, int* second); • fun(&total, &total); • first dan second akan aliases – Elemen array collisions • fun(&list[i], &list[j]); // if i=j – Collision antara elemen array dan elemen array yang di-pass sebagai nama array • Fun1(&list[i], &list); – Collision antara formal dan non-local Bina Nusantara University 19 Pass by Reference (lanjutan) • int* global; void sub(int* local){ void main() { extern int* global; extern int* global; … … } sub(global); } • Dalam sub, lokal dan global adalah aliases • Kerugian dengan aliases: mengganggu readability sehingga mengganggu reliability • Gunakan pass by value result bukannya pass by reference untuk menghilangkan aliases Bina Nusantara University 20 Pass by Name • Substitusi tekstual ke formal • Formal diikat ke metode akses saat call, tetapi pengikatan aktual ke nilai atau alamat terjadi saat referensi atau penugasan • Memungkinkan fleksibilitas dalam late binding – Pengikatan dinamik dan polimorfisme (OOPL) – Lazy evaluation • Evaluasi short circuit dari B-ekspresi • Evaluasi semua ekspresi di bahasa fungsional Haskel • Semantiks – – – – Jika aktual skalar, pass by reference Jika aktual adalah ekspresi konstan, pass by value Jika aktual elemen array, like nothing else Jika aktual adalah ekspresi yang memuat variabel, like nothing else Bina Nusantara University 21 Implementasi Pengiriman Parameter • Dalam kebanyakan bahasa komunikasi parameter terjadi melalui run-time stack • Pass-by-reference yang paling sederhana untuk diimplementasikan; hanya alamat yang perlu diletakkan di stack • Eror fatal mungkin terjadi dengan pass-by-reference dan pass-by-value-result: parameter formal yang berpasangan dengan konstanta dapat secara tak sengaja diubah Bina Nusantara University 22 • Implementasi Pengiriman Parameter (lanjutan) Fortran – Selalu menggunakan model semantik inout – Sebelum Fortran 77: pass-by-reference – Fortran 77 dan berikutnya: skalar kerap menggunakan passed by value-result • C – Pass-by-value – Pass-by-reference dilakukan menggunakan pointers sebagai parameters tetapi tak ada yang dikirim balik • C++ – Tipe pointer khusus disebut reference untuk pass-by-reference; dereferensi secara implisit • Java – Semua parameter di passed by value – Parameter object di passed by reference – Skalar tak dapat di passed by reference karena variabel reference tak dapat menunjuk skalar dan Java tidak punya pointer Bina Nusantara University 23 Implementasi Pengiriman Parameter (lanjutan) • Ada – Tiga mode semantik pengiriman parameter : in, out, in out; mode default adalah in – Parameter formal yang di-declare out dapat di-assign tetapi tidak direferensi; yang di-declare in dapat direferensi tetapi tidak di-assign; parameter in out dapat direferensi dan di-assign • C# – Metode default : pass-by-value – Pass-by-reference dispesifikasi dengan cara parameter formal dan aktual didahului dengan ref • PHP: sangat mirip dengan C# • Perl: semua parameter aktual secara implisit diletakkan dalam predefined array named @_ Bina Nusantara University 24 Pencekan Tipe Parameter • • • • Sangat penting untuk reliability FORTRAN 77 dan C asli : tidak Pascal, FORTRAN 90, Java, dan Ada: selalu diperlukan ANSI C dan C++: pilihan dibuat oleh pengguna – Prototipe • Bahasa-bahasa baru seperti Perl, JavaScript, dan PHP tidak memerlukan pencekan tipe Bina Nusantara University 25 Array Multidimensi sebagai Parameter • Jika array multidimensi dikirim ke subprogram dan subprogram dikompail secara terpisah, kompilator perlu mengetahui ukuran array yang dideklarasikan untuk menentukan ruang untuk fungsi pemetaan • Kasus di C/C++ – Pemrogram diharuskan untuk memasukkan semua ukuran deklarasi kecuali subskrip pertama dalam parameter aktual; untuk array dua dimensi kita perlu tahu banyak kolom bukannya banyak baris – Masalah : Tidak memungkinkan menulis fungsi yang dapat menerima array dengan banyak kolom berbeda sehingga tidak memungkinkan menulis program yang luwes. – Solusi: kirim pointer ke array dan ukuran dimensi sebagai parameter yang lain; pengguna harus memasukkan storage Bina Nusantara University mapping function menggunakan aritmatika pointer 26 Array Multidimensi sebagai Parameter di sejumlah bahasa • Pascal – Tak ada masalah karena ukuran deklarasi adalah bagian dari tipe array • Ada – Constrained arrays – seperti Pascal – Unconstrained arrays – ukuran deklarasi adalah bagian dari deklarasi obyek • Fortran – Parameter formal yang dipunyai array dideklarasi sesudah header – Untuk array dimensi satu, subscript tidak relevan – Untuk array multi-dimensi , subscripts menentukan storage-mapping function • Java dan C# : mirip ada – Array adalah obyek; mereka semua adalah dimensi satu tetapi elemennya dapat berupa array Bina Nusantara –University Setiap array mewarisi named constant (length di Java, Length di C#)27 yang di-set ke panjang array saat obyek array di-create Isu Desain Pengiriman Parameter • Dua pertimbangan utama – Efisiensi – Transfer data: one-way atau two-way • Tetapi ada konflik pada pertimbangan di atas – Pemrograman yang baik menganjurkan akses terbatas pada variabel, yang berarti jika mungkin one-way – Tetapi pass-by-reference lebih efisien untuk mengirim struktur yang ukurannya signifikan Bina Nusantara University 28 Parameter berbentuk Nama Subprogram • • Kadang-kadang menyenangkan untuk mengirim nama subprogram sebagai parameter Isu: 1. Apakah parameter dicek tipenya? 2. Apa lingkungan referensi yang benar untuk subprogram yang dikirim sebagai parameter? Bina Nusantara University 29 Parameter berbentuk Nama Subprogram: Pencekan Tipe • • • C dan C++: fungsi tak dapat dikirim sebagai parameter tetapi pointer ke fungsi dapat dikirim; parameter dapat dicek tipenya FORTRAN 95 cek tipe Pascal versi akhir dan Ada tidak membolehlan subprogram sebagai parameter; sebagai alternatif diberikan melalui fasilitas Ada’s generik Bina Nusantara University 30 Parameter berbentuk Nama Subprogram: Lingkungan Referensi • Shallow binding: Lingkungan pernyataan call yang mempengaruhi pengiriman subprogram • Deep binding: Lingkungan dari definisi subprogram yang dikirim • Ad hoc binding: Lingkungan dari pernyataan call yang mengirim subprogram Bina Nusantara University 31 Overloaded Subprogram • Overloaded subprogram adalah subprogram yang mempunyai nama yang sama dengan subprogram lain dalam lingkungan referensi yang sama. – Setiap versi overloaded subprogram mempunyai protokol unik, i.e. harus berbeda dari yang lain dalam hal banyak, urutan atau tipe parameter atau tipe nilai balik jika berbentuk fungsi. • C++, Java, C#, dan Ada mencakup predefined overloaded subprograms • Di Ada, tipe balik dari overloaded function dapat digunakan untuk tidak membingungkan calls (jadi dua overloaded functions dapat mempunyai parameter yang sama) • Ada, Java, C++, dan C# memungkinkan pengguna untuk menulis banyak versi subprogram dengan nama yang sama Bina Nusantara University 32 Subprogram Generik • Generic atau polymorphic subprogram mempunyai tipe parameter berbeda pada aktivasi berbeda • Overloaded subprogram adalah ad hoc polymorphism • Subprogram yang mempunyai generic parameter yang digunakan dalam ekspresi yang menguraikan tipe parameter subprogram adalah parametric polymorphism Bina Nusantara University 33 Polimorfisme Parametrik : C++ • template <template parameter> – Definisi fungsi yang mencakup template parameter template <class Type> Type max(Type first, Type second) { return first > second ? first : second; } • Template di atas dapat di-instantiate untuk sembarang tipe untuk mana operator > didefinisikan int max (int first, int second) { return first > second? first : second; } Bina Nusantara University 34 Isu Desain Fungsi • Apakah efek samping dimungkinkan? – Parameter seharusnya selalu mode in untuk mengurangi efek samping seperti Ada • Tipe nilai balik apa yang dibolehkan? – Kebanyakan bahasa imperatif membatasi tipe balik – C membolehkan sembarang tipe kecuali array dan fungsi – C++ seperti C tetapi juga membolehkan tipe userdefined – Ada membolehkan sembarang tipe – Java dan C# tidak punya fungsi tetapi method dapat mempunyai sembarang tipe Bina Nusantara University 35 Operator Overloaded User-Define • Operator dapat di-overload di Ada dan C++ • Contoh Ada 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, and c are of type Vec_Type Bina Nusantara University 36 Co-routine • Coroutine adalah subprogram yang mempunyai multiple entries dan mengkontrol dirinya sendiri • Juga disebut symmetric control: caller dan called coroutines adalah setara basisnya • A coroutine call disebut resume • Resume pertama adalah keawal coroutine, tetapi call berikutnya masuk di titik sesudah pernyataan terakhir yang dieksekusi dalam coroutine • Coroutine mengulangi resume satu sama lain, mungkin seterusnya • Coroutines menyediakan quasi-concurrent execution dari unit program (the coroutines); ekselusinya interleave, tetapi tidak overlapped Bina Nusantara University 37 Ilustrasi Co-routine (1) Bina Nusantara University 38 Ilustrasi Co-routine (2) Bina Nusantara University 39 Ilustrasi Co-routine (3) Bina Nusantara University 40 Semantik Call dan Return • Operasi subprogram call dan return suatu bahasa bersama-sama disebut subprogram linkage • Subprogram call mempunyai berbagai aktivitas yang berasosiasi dengannya yaitu – – – – – Metode pengiriman parameter Variabel lokal statik Eksekusi status calling program Transfer kendali Subprogram nesting Bina Nusantara University 41 • Call – – – – Semantik Call dan Return Program Sederhana Simpan status eksekusi dari caller Lakukan proses pengiriman parameter Kirim alamat kembali ke callee Transfer kendali ke callee • Return – Jika digunakan pass-by-value-result, kirim nilai parameter formal ke parameter aktual pasangannya. – Jika fungsi , kirim nilai fungsi ke tempat caller dapat mengakssesnya – Restore status eksekusi dari caller – Transfer kendali kembali ke caller Bina Nusantara University 42 Implementasi Suprogram Sederhana • Dua bagian terpisah : bagian kode aktual dan nonkode (variabel lokal dan data yang dapat diubah) • Format dari bagian nonkode yang dieksekusi disebut activation record • Activation record instance (ARI) adalah contoh kongkrit dari record aktivasi (koleksi data untuk aktivasi subprogram tertentu) • Record aktivasi subprogram sederhana Bina Nusantara University 43 Kode dan Record Aktivasi Subprogram Sederhana • Kode dan record aktivasi program sederhana Bina Nusantara University 44 Implementasi subprogram dengan variabel lokal stackdynamic • Record aktivasi lebih kompleks – Kompilator harus men-generate kode untuk melakukan alokasi dan de-alokasi variabel lokal secara implisit – Rekursi harus didukung dengan menambah peluang aktivasi multiple subprogram secara simultan Bina Nusantara University 45 Tipikal Record Aktivasi dengan Variabel Lokal Stack-Dynamic Bina Nusantara University 46 Record Aktivasi dengan Variabel Lokal Stack-Dynamic • Format record aktivasi adalah statik tetapi ukurannya mungkin dinamik • Dynamic link menunjuk top ARI caller • ARI dibentuk secara dinamik saat subprogram dipanggil • Run-time stack Bina Nusantara University 47 Contoh Fungsi C void sub(float total, int part) { int list[4]; float sum; … } Bina Nusantara University 48 Contoh Tanpa Rekursi void A(int x) { int y; ... C(y); ... } void B(float r) { int s, t; ... A(s); ... } Bina Nusantara University void C(int q) { ... } void main() { float p; ... B(p); ... } 49 Contoh tanpa Rekursi Bina Nusantara University 50 Rangkaian Dinamik dan Ofset Lokal • Koleksi dari link dinamik dalam stack disebut dynamic chain, atau call chain • Variabel lokal dapat diakses melalui ofsetnya dihitung mulai dari awal record aktivasi. Ofset ini disebut local_offset • Local_offset dari variabel lokal ditentukan oleh kompilator saat kompilasi Bina Nusantara University 51 Contoh dengan Rekursi • Record aktivasi yang digunakan di contoh sebelumnya mendukung rekursi, e.g. 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 } Bina Nusantara University 52 Record Aktivasi Faktorial Bina Nusantara University 53 Subprogram Nested • • • Beberapa bahasa bukan basis C lingkup statik (e.g., Fortran 95, Ada, JavaScript) menggunakan stackdynamic local variables dan membolehkan subprogram di-nested Semua variabel yang dapat diakses secara non-lokal menetap dalam beberapa ARI dalam stack Proses melokalisasi variabel non-local 1. 2. Cari ARI yang benar Tentukan ofset dalam ARI Bina Nusantara University 54 Menentukan Lokasi Non-lokal • Mudah menemukan ofset • Menemukan ARI yang benar – Aturan statik semantik menjamin bahwa variabel non-lokal yang dapat dirujuk telah dialokasikan disuatu ARI yang berada dalam stack ketika referensi dilakukan Bina Nusantara University 55 Static Scoping • Static chain adalah rangkaian static links yang menghubungkan ARI tertentu • Static link dalam ARI untuk subprogram A menunjuk ke ARI static parent A • Static chain dari ARI menghubungkannya ke semua static ancestors-nya Bina Nusantara University 56 Contoh Pascal program MAIN_2; var X : integer; procedure BIGSUB; var A, B, C : integer; procedure SUB1; var A, D : integer; begin { SUB1 } A := B + C; <-----------------------1 end; { SUB1 } procedure SUB2(X : integer); var B, E : integer; procedure SUB3; var C, E : integer; begin { SUB3 } SUB1; E := B + A: <--------------------2 end; { SUB3 } begin { SUB2 } SUB3; A := D + E; <-----------------------3 end; { SUB2 } begin { BIGSUB } SUB2(7); end; { BIGSUB } begin BIGSUB; end; { MAIN_2 } Bina Nusantara University 57 Contoh Pascal (lanjutan) • Sekuen call untuk MAIN_2 MAIN_2 calls BIGSUB BIGSUB calls SUB2 SUB2 calls SUB3 SUB3 calls SUB1 Bina Nusantara University 58 Isi Stack di Posisi 1 Bina Nusantara University 59 Display • Alternatif dari static chains • Static links disimpan di array tunggal yang disebut display • Isi dari display pada suatu waktu adalah daftar alamat ARI yang dapat diakses Bina Nusantara University 60 Blok • Blok adalah lingkup variabel lokal yang dispesifikasi oleh user • Contoh dalam C {int temp; temp = list [upper]; list [upper] = list [lower]; list [lower] = temp } • Lifetime dari temp di program di atas mulai saat kendali masuk ke blok • Keuntungan menggunakan variabel lokal seperti temp adalah ia tidak dapat diintervensi oleh variabel lain dengan nama yang sama Bina Nusantara University 61 Implementasi Blok • Dua metode : 1. Perlalukan blok sebagai subprogram tanpa parameter yang selalu dipanggil dari lokasi yang sama – 2. Setiap blok mempunyai record aktivasi; ARI dibentuk setiap kali blok dieksekusi Karena ruang maksimum yang dibutuhkan blok dapat ditentukan secara statik, ruang ini dapat dialokasikan sesudah variabel lokal dalam record aktivasi Bina Nusantara University 62 Implemantasi Dynamic Scoping • Deep Access: referensi non-local dapat ditemukan dengan pecarian di ARI dalam dynamic chain • Shallow Access: letakkan lokal di central place – Satu stack untuk setiap nama variabel – Central table dengan entri masuk untuk setiap nama variabel Bina Nusantara University 63 Shallow Access untuk Dynamic Scoping Bina Nusantara University 64 LATIHAN A. SOAL PILIHAN 1. Kerugian dari penggnaan keyword parameter adalah – user harus tahu nama parameter formal – user harus tahu tipe parameter formal – user harus tahu posisi parameter formal – user harus tahu nilai parameter formal 2.Pass by copy adalah nama lain dari a. pass by value b. pass by result c. pass by value-result d. pass by reference 3.Overloaded subprogram juga dikenal dengan nama a. trivial polymorphism b. squasi polymorphism c. parametric polymorphism d. ad hoc polymorphism Bina Nusantara University 65 LATIHAN 4. Subprogram linkage meliputi a. subprogram call dan return b. return dan activation record c. activation record dan subprogram call d. subprogram call, return dan activation record. 5. Pasangan yang digunakan untuk menunjukan referensi aktual nonlokal variable di bahasa static scope adalah a. (static depth, nesting depth) b. (chain offset, local offset) c. (static depth, local offset) d. (nesting depth, chain offset). Bina Nusantara University 66 LATIHAN B. SOAL URAIAN 1. Ada dua cara subprogram mengakses data yaitu direct access variable nonlocal dan passing parameter. Jelaskan mengapa passing parameter lebih flexible daripada akses nonlokal data. 2. Uraikan apa beda antara – overloaded operator vs overloaded subprogram – ad hoc polymorphism vs parametric polymorphism – separate vs independent compilation Bina Nusantara University 67 Ringkasan • Definisi subprogram menguraikan aksi yang disajikan oleh subprogram • Subprogram mungkin fungsi atau prosedur • Variabel lokal dalam subprogram dapat stack-dynamic atau static • Tiga model pengiriman parameter: in mode, out mode, dan inout mode • Sejumlah bahasa membolehkan operator overloading • Subprogram dapat generic • Coroutine adalah subprogram khusus dengan multiple entries • Semantik subprogram linkage memerlukan banyak aksi dengan cara implementasi • Subprogram sederhana relatif hanya aksi dasar Bina Nusantara University 68 Ringkasan (lanjutan) • Bahasa stack-dynamic lebih kompleks • Subprogram dengan stack-dynamic local variables dan nested subprograms mempunyai dua komponen – Kode aktual – Record aktivasi • ARI memuat parameter formal dan variabel lokal bersama yang lain • Static chains adalah metode utama dari implementasi untuk mengakses variabel non-lokal dalam bahasa static-scope dengan nested subprograms • Akses ke variabel non-lokal di bahasa dynamic-scope dapat diimplementasikan dengan menggunakan dynamic chain atau melalui beberapa variabel tengah metode tabel (display) Bina Nusantara University 69
© Copyright 2024 Paperzz