Programming Language Concept Session 7

Programming Language Concept Session 7


Dasar Subprogram


  • Muncul karena penggunaan suatu kumpulan data berulang-ulang
  • Tiap subprogram memiliki satu tempat masuk
  • Program pemanggil ditangguhkan selama eksekusi dari subprogram yang dipanggil
  • Kontrol selalu kembali ke pemanggil ketika eksekusi subprogram yang dipanggil berakhir
  • Subprogram header, yang merupakan bagian pertama definisi, berfungsi dalam banyak hal:
    – Menjelaskan bahwa unit sintaktik selanjutnya merupakan definisi subprogram dari berbagai macam tertentu
    – Sebagai nama dari subprogram
    – Menjelaskan daftar parameter
    – Contoh di C:

    void adder (parameters)

  • Formal parameter merupakan parameter yang berada di subprogram header
  • Parameter yang berada di pemanggil subprogram disebut actual parameter
  • Subprogram yang mengembalikan nilai disebut function
  • Subrprogram yang tidak mengembalikan nilai disebut procedure
  • Overloaded subprogram merupakan subprogram yang memiliki nama sama dengan subprogram lain di lingkungan alamat yang sama
  • Generic subprogram merupakan subprogram yang komputasinya dapat diselesaikan di data dari tipe berbeda di panggilan yang berbeda juga
  • Closure merupakan nested subprogram dan lingkungan pengalamatannya

Local Referencing Environment


  • Variable local dapat berbentuk stack-dynamic
    – Keuntungan : mendukung recursion, penyimpanan local bisa dipakai subprogram lain
    – Kelemahan : alokasi/de-alokasi, pengalamatan tidak langsung, subprogram tidak history sensitive
  • Variable local dapat berbentuk static
    – Keuntungan dan kelemahannya bertolak belakang dengan stack-dynamic

Parameter Passing


  • Formal parameter yang dapat menerima data dari actual parameter yang tepat disebut in mode
  • Formal parameter yang dapat mengirim data ke actual parameter disebut out mode
  • Formal parameter yang dapat melakukan in dan out mode disebut inout mode
  • Model parameter passing:

  • Ketika suatu parameter passed by value (in mode), nilai dari actual parameter tersebut digunakan untuk menyatakan formal parameter yang sesuai
    – Biasanya diimplementasi dengan meng-copy
    – Dapat diimplementasikan dengan mengirim jalur akses namun tidak direkomendasi
    – Keuntungan : lebih cepat di linkage cost dan waktu akses
    – Kelemahan : memori tambahan diperlukan dan memerlukan harga yang tidak kecil (costly)
  • Ketika suatu parameter passed by result (out mode), tidak ada nilai yang dikirimkan ke subprogram, formal parameter yang sesuai bertindak sebagai local variable; nilainya dikirimkan ke actual parameter pemanggil ketika control dikembalikan ke pemanggil tersebut
    – Membutuhkan lokasi penyimpanan extra dan duplikat operasi
  • Gabungan dari pass by result dan pass by value adalah pass by value-result (inout mode)
    – Juga dikenal dengan pass by copy karena actual parameter dicopy ke formal parameter di tempat masuk subprogram dan kemudian dicopy kembali di akhir subprogram
    – Kelemahan : sama seperti pass by result dan pass by value
  • Tak seperti pass by result-value yang meng-copy nilai data kembali dan kedepan, pass by reference (inout mode) hanya mengirimkan suatu acess path, biasanya alamat, ke subprogram yang dipanggil.
    – Keuntungan : Efisien, waktu maupun tempat
    – Kelemahan : akses ke formal parameter lebih lambat, berpotensi terjadi side effect yang tak diinginkan, alias yang tak perlu
  • Ketika pass by name (inout mode), actual parameternya secara tekstual diganti untuk semua formal parameter yang tepat di semua kejadian di subprogram
    Formal parameter diikat ke suatu metode akses saat pemanggilan, namun pengikatan sebenarnya ke suatu nilai atau alamat terjadi diwaktu assignment atau reference
    – Kelemahan : terlalu kompleks sehingga mengurangi readability dan reliability, sulit diimplementasikan dan tidak efesien
  • Implementasi metode parameter-passing:
    – Kebanyakan bahasa, komunikasi parameter terjadi di run-time stack
    Pass by reference merupakan yang paling sederhana untuk diimplementasikan karena hanya alamat yang diletakkan di stack

Function header:  void sub(int a, int b, int c, int d)

Function call in main: sub(w, x, y, z)

(pass w by value, x by result, y by value-result, z by reference)

  • Yang perlu diperhatikan dalam parameter passing:
    – Efesiensi, data transfer one-way atau two way
    – Namun keduanya saling bertolak belakang, programming yang baik menganjurkan pembatasan akses ke variable yang artinya one-way lebih baik, namun pass by reference lebih efesien untuk melemparkan struktur size yang signifikan
  • Terkadang lebih mudah untuk melemparkan nama subprogram sebagai parameter
    Shallow binding : lingkungan pernyataan pemanggil yang menetapkan subprogram yang dilempar (paling natural untuk bahasa dynamic-scoped)
    Deep binding : lingkungan define dari subprogram yang dilemparkan (paling natural untuk bahasa static scoped)
    Ad hoc binding : lingkungan pernyataan pemanggil yang melemparkan subprogram
  • Biasanya ketika ada beberapa subprogram yang mungkin dipanggil dan tidak diketahui yang mana hingga eksekusi, maka di bahasa C dan C++ pemanggilannya menggunakan function pointer
    – Di C#, metode pointer diimplementasikan sebagai objek yang dikenal delegate
    – Contoh:

Declaration:

public delegate int Change(int x);

Method:

static int fun1(int x) { … }

Instantiate:
Change chgfun1 = new Change(fun1);

Dapat dipanggil dengan:

chgfun1(12);

  • Delegate yang dapat menyimpang lebih dari satu alamat disebut multicast delegate

Overloaded, Generic, dan User-Defined Overloaded Subprogram


  • Overloaded subprogram merupakan subprogram yang memiliki nama yang sama dengan subprogram lain di lingkungan pengalamatan yang sama juga
  • Di c++, Java, C#, dan Ada terdapat predefined overloaded subprogram
  • Di Ada, return type dari overloaded function dapat digunakan untuk menghilangkan pemanggilan ambigu
  • Ada, Java, C++, C# memperbolehkan user menulis banyak versi subprogram dengan nama yang sama
  • Generic atau polymorphic subprogram mengambil parameter berbeda tipe di berbagai aktivasi
  • Overloaded subprogram menyediakan ad hoc polymorphism
  • Subtype polymorphism berarti suatu variable dari tipe T dapat mengakses objek apapun dari tipe T atau tipe apapun yang diturunkan dari T
  • Operator dapat di-overloaded di Ada, C++, Python, dan Ruby
    – Contoh di Python:

def __add__ (self, second) :

  return Complex(self.real + second.real,

self.imag + second.imag)

Closure


  • Closure merupakan subprogram dan lingkungan pengalamatan dimana ia didefinisikan
  • Lingkungan pengalamatan dibutuhkan jika subprogram dapat dipanggil dari tempat manapun di program tersebut
  • Bahasa ber-static scope yang tidak memperbolehkan nested subprogram tidak memerlukan closure
  • Closure hanya dibutkan jika suatu subprogram dapat mengakses variable di nesting scope dan ia dapat dipanggil darimanapun
  • Untuk mendukung closure, implementasi mungkin dibutuhkan untuk menyediakan jangkauan tak terbatas ke beberapa variable karena suatu subprogram mungkin mengakses variable nonlocal yang biasanya tak lagi ada (no longer alive)

Coroutine


  • Coroutine merupakan subprogram yang memiliki banyak tempat masuk (entry) dan mengontrolnya sendiri, didukung secara langsung di Lua
  • Juga dikenal dengan symmetric control karena coroutine pemanggil dan yang dipanggil berbasis sama
  • Panggilan (call) coroutine disebut resume
  • Resume pertama dari coroutine merupakan ke permulaanya, namun pemanggilan selanjutnya masuk melalui tittik hanya setelah pernyataan yang sebelumnya dieksekusi di coroutine
  • Coroutine secara berulang-ulang berlanjut satu sama lain, berkemungkinan selamanya
  • Control eksekusi yang mungkin:

  • Control eksekusi dengan loop yang mungkin:


Sumber:

  • Concept of Programming Languages 10th. Ed  / Robert W. Sebesta (Chapter 9)
  • Subprograms / Binus Powerpoint Presentation

This entry was posted in Computer Science, Programming Language Concept and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *