Konsep Bahasa Pemograman – BAB 7 – Subprogram

BAB 7

                                                        Subprogram

1.Pengenalan Subprogram

Subproram adalah beberapa blok program fundamental yang menjadi konsep terpenting      dalam desain bahasa pemograman.Subprogram memiliki beberapa karakteristik berupa:

  • Setiap subprogram memiliki satu titik masuk
  • Pemanggilan nya tergantung selama eksekusi dari subprogram yang di panggil
  • Control selalu mengembalikan ke pemanggil ketika memanggil menghentikan eksekusi subprogram

 

2.Local Referencing Enviroments

  1. Variabel Stack Dynamic
Keuntungan Kekurangan
Mendukung rekursi Memakan banyak waktu saat alokasi dan dealokasi data pada waktu inisialisasi
Penyimpanan dapat dibagikan kepada beberapa subprogram Tidak dapat diakses secara langsung
Tidak history-sensitif

 

  1. Variabel Statis
Keuntungan Kekurangan
Memakan banyak waktu saat alokasi dan dealokasi data pada waktu inisialisasi Mendukung rekursi
Tidak dapat diakses secara langsung Penyimpanan dapat dibagikan kepada beberapa subprogram
Tidak history-sensitif
  • Nested subprogram

Nested subprogram adalah subprogram yang diambil sesuai dengan keperluan, jadi tidak perlu menjalankan semua fungsi dari program untuk memanggil subprogram.

 

3.Metode Parameter-Passing

Metode Parameter-Passing adalah cara parameter dipanggil untuk dan dari subprogram yang dipanggil.Terdapat 3 bentuk berbeda dari bentuk semantik Parameter-Passing yaitu :

  • In mode adalah bentuk parameter passing yang mendapat data dari parameter asal(yang muncul di bagian pemanggilan)
  • Out mode adalah bentuk parameter passing yang mengirimkan data ke parameter asal(yang muncul di bagian pemanggilan)
  • In-out mode adalah bentuk parameter passing yang menerima data dari parameter asal(yang muncul di bagian pemanggilan) dan mengirimkan data ke parameter asal

Gambar model parameter-passing in mode,out mode dan inout mode

 

  • Implementasi Bentuk dari Parameter Passing

Pada bahasa pemograman yang umum ,komunikasi parameter biasanya mengambil tempat pada saat run-time-stack.Berikut gambaran dari implementasi metode parameter-passing :

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)

 

Berbagai bentuk telah dikembangkan oleh perancang program untuk mengimplementasikan 3 parameter dasar yang telah dijelaskan sebelumnya.Berikut bentuk implementasi bentuk dari parameter passing.

1.Pass-by-value

Pass-by-value adalah  mengirimkan parameter berdasarkan nilai variabel asalnya yang akan dihubungkan terhadap paramater fungsi pemanggil yang bertindak sebagi variabel local pada subprogram dan mengimplementasikan semantik in-mode.

Keuntungan : dari segi scalar sangat cepat saat linkage dan waktu saat mengaksesnya

Kerugian : Penggunaan model copy membutuhkan penyimpanan tambahan yang dibutuhkan oleh parameter formal (parameter yang didefinisikan) baik pada pemanggil subprogram dan di subprogram yang dipanggil.Sehingga dapat memakan memori penyimpanan yang cukup besar apabila penggunaan array dengan elemen yang banyak .

Contoh pass-by-value pada bahasa pemograman PHP :

<?php
function fruit($type = “cherry”)
{
return “Fruit you chose is $type.”;
}
echo fruit();
echo “<br>”;
echo fruit(null);
echo “<br>”;
echo fruit(“Strawberry”);
?>

2.Pass-by-result (out mode)

Pass-by-result adalah model implementasi dari parameter out-mode.Saat parameter mengalami parameter-pass-by-result,tidak ada nilai yang dipindahkan ke subprogram. Parameter formal (parameter yang didefinisikan) yang terkait bertindak sebagai variabel lokal ,akan tetapi sebelum dikembalikan kepada caller,nilai tersebut kembali ke parameter asal(yang muncul di bagian pemanggilan) pemanggil dengan pemindahan secara fisik.

Keuntungan : dari segi scalar sangat cepat saat linkage dan waktu saat mengaksesnya

Kerugian : Penggunaan model copy membutuhkan penyimpanan tambahan yang lebih besar

 

3.Pass-by-value-result (inout mode)

Pass-by-value-result adalah model implementasi dari parameter inout-mode.Pass-by-result adalah kombinasi dari pass-by-value dan pass-by-result .Terkadang dia disebut juga sebagai pass-by-copy.Pada passing jenis ini parameter formal memiliki data penyimpanan lokal .Pass-by-value-result  memiliki kerugian berupa kebutuhan akan memori tambahan yang cukup besar.Contoh pada bahasa pemograman C++:

int x = 0;

int main() {

foo(x);

}

 

void foo(int a) {

x = 3;

a++;

}
– Parameter di foo awalnya diatur ke nilai 0, dan dianggap sebagai variabel lokal.- Variabel maka x global diatur ke 3- Maka nilai dari bertambah dari 0 ke 1- Ketika kontrol kembali ke pemanggil, nilai adalah disalin kembali ke angkasa pemanggil, dan nilai 1 ditugaskan untuk variabel yang dilewatkan ke foo,yang terjadi menjadi variabel global x.- Variabel x memiliki nilai 1 pada akhir program

 

3.Pass-by-name (inout mode)

Pass-by-name adalah model implementasi dari parameter inout-mode yang proses pemindahannya tidak dapat dihubungkan dengan bentuk implementasi tunggal.Saat parameter mengalami pass-by-name ,parameter asal secara tekstual disubtitusi dengan parameter formal di semua kemunculan pada subprogram.Perbedaan yang mencolok adalah parameter formal pada pass-by-name mengikat ke sebuah metode akses pada saat pemanggilan subprogram tetapi actual -binding untuk sebuah nilai atau alamat ditunda sampai parameter formal telah dimasukkan atau telah disesuaikan.Contoh pada bahasa pemograman C++:

void main() {

int i = 0;

int x[2] = {0,1};

 

foo(i,x[i]);

printf(“%d %d\n”,x[0],x[1]);

}

 

int foo(int a, int b) {

int i = 100;

a++;

b = 2;

}

Hasil akan berupa “0 2”

a++ akan menambah nilai dari i menjadi 1 set ke 1 pada b = 2, akan mengatur x [i] untuk ke, di mana x [i] dievaluasi dalam pemanggil ini konteks. Dengan demikian, karena saya sekarang sama dengan 1, kami menetapkan x [1] untuk 2;PERINGATAN: ‘i’ dideklarasikan di foo tidak pernah diperhitungkan karena           di call-by-nama satu mengevaluasi argumen dalam konteks                                 pemanggil! Jadi satu menggunakan ‘i’ dideklarasikan di utama.

3.Pass-by-reference (inout mode)

Pass-by-reference adalah model implementasi dari parameter inout-mode.Pass-by-reference disebut juga sebagai pass-by-sharing.Bukan menduplikat data,pass-by-reference mengirimkan jalan akses,alamat,untuk memanggil subprogram.Contoh pada bahasa pemograman PHP :

<?php
function foo(&$var)
{
$var++;
}

$a=5;
foo($a);
// $a is 6 here
?>

Keuntungan :

-proses passing sangat efesien baik dalam waktu dan penyimpanan(karena tidak dilakukannya penduplikatan)

Kerugian :

-Akses yang lebih lambat ke parameter formal apabila dibandingkan dengan pass-by-value

Terbentuknya aliases yang tidak diiginkan

-Terbentuknya collisions.

  • Parameter yang Merupakan Subprogram

Dalam pemograman ,sejumlah situasi yang akan mudah diselesaikan apabila nama dari subprogram dapat dijadikan parameter untuk subprogram lainnya.Namun hal ini memiliki detail yang memusingkan seperti pada masalah type checking parameter dari pengaktifan subprogram yang dibagikan sebagai parameter.Pada bahasa C dan C++ fungsi tak dapat dibagikan sebagai parameter namun dapat dilakukan apabila dari pointer ke fungsi.Kompilasi kedua dengan parameter yang merupakan subprogram hanya muncul pada bahasa pemograman yang memperbolehkan nested subprogram.Persoalan mengenai reference environment untuk mengeksekusi subprogram yang dibagikan pun dapat dilakukan .Berikut 3 pilihannya:

  1. Shallow binding

Lingkungan pernyataan call  yang mempengaruhi pengiriman  subprogram

Sangat natural untuk dynamic scoped

  1. Deep binding

Lingkungan dari definisi dari subprogram yang dikirim

Paling natural untuk static scoped languange

  1. Ad hoc binding

Lingkungan dari statement yang di panggil yang mengirim subprogram

 

 

  • Calling Subprograms Indirectly

Memanggil subprograms secara tidak langsung merupakan suatu aksi yang terjadi apabila terdapat beberapa subprogram yang akan dipanggil dan subprogram yang tepat untuk digunakan masih belum diketahui sampai eksekusi dilakukan.Contoh penggunaan dari pemanggilan subprograms secara tidak langsung adalah Event Handling dan Graphical User Interface.

 

  • Overloaded Subprograms

Overloaded subprograms merupakan subprogram yang memiliki nama yang sama dengan subprogram yang lainnya dalam satu lingkungan referensi yang sama dan setiap versi dari suatu overloaded subprograms memiliki protocol yang berbeda.

Contoh:

<?php
class MethodTest
{
public function __call($name, $arguments)
{
// Note: value of $name is case sensitive.
echo “Calling object method ‘$name’ ”
. implode(‘, ‘, $arguments). “\n”;
}

/**  As of PHP 5.3.0  */
public static function __callStatic($name, $arguments)
{
// Note: value of $name is case sensitive.
echo “Calling static method ‘$name’ ”
. implode(‘, ‘, $arguments). “\n”;
}
}

$obj = new MethodTest;
$obj->runTest(‘in object context’);

MethodTest::runTest(‘in static context’);  // As of PHP 5.3.0
?>

 

  • Generic Subprograms

Suatu subprogram generic atau polymorphic mengambil parameter dari berbagai tipe dalam aktivasi – aktivasi yang berbeda. Overloaded subprogram adalah ad hoc polymorphism.Suatu subprogram yang menggunakan generic parameter yang digunakan di expression type yang mendeskripsikan tipe dari parameter tersebut disebut parameter polymorphism.

Contoh Generic Subprograms :

class MyClass implements MyInterface {

protected $name;

public function doThis() {

// code that does this

}

public function doThat() {

// code that does that

}

public function setName($name) {

$this->name = $name;

}

}

 

  • User-Defined Overloaded Operators

Overloading Operator adalah operator yang di gunakan sebagai pengganti fungsi inputan, output ataupun bisa fungsi yang lainya.  Operator Overloading bertujuan untuk memudahkan operasi berbagai type data sesuai dengan kebutuhan user. Dengan adanya operator overloading ini kita dapat membuat sebuah fungsi yang mendefinisikan ulang operator sehingga dapat melakukan perintah khusus terhadap suatu objek.
Sayang nya tidak semua bahasa pemrograman yang mendukung Overloading Operator. Dalam PHP sendiri  Overloading Operator dibatasi dan dapat digunakan pada Array Access interface dan Operator extension.

 

  • Closures

Closures adalah subprogram dan juga merupakan referensi dari ruang lingkup nya sendiri. Dalam closures selalu ada minimal satu variable yang terikat, ini bertujuan agar ketika closures dipanggil lebih dari sekali maka variable yang terikat tetap sama dan tidak akan berubah. Referensi dari luang lingkup closures sangat penting jika subprogram bersifat global dan dapat dipanggil dimana saja dan kapan pun dalam sebuah program. Closures hanya diperlukan dalam nested scope dan jika closures bersifat global atau bisa di panggil dari mana saja.
Bahasa pemrograman yang tidak mendukung penggunaan nested scope tidak membutuhkan closures.

  • Coroutines

Coroutines adalah subprogram yang memiliki multiple entry points, yang dikontrol oleh coroutines itu sendiri. Dikenal juga sebagai symmetric control karena mekanisme coroutines yang called (yang dipanggil) dan caller (yang memanggil) coroutines memiliki derajat yang sama. Pemanggilan coroutines disebut resume. Resume pertama adalah pada saat coroutine dimulai, sedangkan resume berikutnya akan dimulai setelah statement terakhir dieksekusi pada coroutine, sehingga coroutines dapat saling me-resume sampai selama – lamanya .
Coroutines memperbolehkan quasi concurrent execution terhadap coroutines, dimana eksekusi coroutines dilaksanakan secara bersamaan tetapi tidak saling menimpah.

Oleh Kelompok 12

Referensi Bab 7 :

Leave a Reply

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