Binding Antara Variabel dan Atributnya Pada Bahasa Pemrograman

Static vs Dynamic Binding

Binding disebut static bila terjadi sebelum run-time mulai dan tetap tidak berubah selama eksekusi. Jika binding terjadi selama run-time atau bisa berubah saat eksekusi, maka disebut dynamic

Umumnya bahasa pemrograman dengan static type binding memerlukan deklarasi baik deklarasi secara eksplisit maupun implisit. Tetapi bahasa pemrograman dengan dynamic type binding umumnya tidak ditentukan dengan deklarasi maupun pengejaan nama variabelnya (catatan: lihat deskripsi identifier dalam bahasa fortran di paragraf berikut di bawah).

Bahasa pemrograman yang menerapkan static type binding dan yang dirancang sekitar tahun 1960-an umumnya menghendaki explicit declaration terhadap setiap variable, terkecuali bahasa tertentu seperti Perl, JavaScript, Ruby, dan ML. Dalam bahasa Fortran, identifier dengan awalan huruf I hingga N secara implicit bertipe integer, selain itu dianggap bertipe real.

Pada bahasa pemrograman dengan dynamic type binding, type data dari variable tidak ditentukan melalui declaration, tetapi ditentukan setiap kali variable tersebut diberikan nilai. 

Sebelum pertengahan tahun 1990, kebanyakan bahasa pemrograman menerapkan static type binding (kecuali LISP), namun setelahnya ada peralihan signifikan ke penggunaan dynamic type binding. Bahasa Python, Ruby, JavaScript, dan PHP menggunakan dynamic type binding. 

Sebagai contoh, pada JavaScript berikut: 
  • list = [10.2, 3.5]; 
  • list = 47; 
variable yang bernama list adalah array (pada baris pertama), dan kemudian menjadi scalar (pada baris kedua). 

Dynamic type binding memberikan keunggulan berupa peningkatan fleksibilitas dalam pemrograman, namun mempunyai kekurangan berupa penurunan kehandalan (reliability) karena penurunan kemampuan dalam pendeteksian type error pada statement penugasan oleh compiler. Cost of execution (execution time) pada dynamic type binding juga meningkat karena type-checking dilakukan pada run time, dan harus menggunakan interpreter, bukan compiler.

1 comment:

  1. Tambahan yang menarik dari salah satu mahasiswa pembelajaran jarak jauh:

    Static Binding yang terjadi pada waktu kompilasi dan Dynamic Binding yang terjadi saat runtime.

    Contoh Static Binding:
    Dsini kita memiliki dua class Human dan Boy. Kedua class memiliki method walk() tetapi method ini static,
    yang berarti tidak dapat di overriden(ditimpa) jadi meskipun saya telah menggunakan objek class Boy saat membuat objek obj,
    method class induk(parent class) dipanggil olehnya. Karena rujukannya adalah Human type(parent class).
    Jadi setiap kali static binding, private, dan final method terjadi, jenis class ditentukan oleh compiler pada waktu kompilasi dan binding terjadi saat itu juga.

    class Human{
    public static void walk()
    {
    System.out.println("Human walks");
    }
    }
    class Boy extends Human{
    public static void walk(){
    System.out.println("Boy walks");
    }
    public static void main( String args[]) {
    /* Reference is of Human type and object is
    * Boy type
    */
    Human obj = new Boy();
    /* Reference is of HUman type and object is
    * of Human type.
    */
    Human obj2 = new Human();
    obj.walk();
    obj2.walk();
    }
    }
    Output:

    Human walks
    Human walks

    Contoh Dynamic Binding:
    Ini adalah contoh yang sama yang telah kita lihat di atas.
    Satu-satunya perbedaan di sini adalah bahwa dalam contoh ini, penimpaan sebenarnya terjadi karena metode ini tidak static, private dan final.
    Dalam hal meng-override panggilan ke metode overriden ditentukan pada saat runtime oleh jenis objek sehingga terjadi binding yang terlambat. Mari kita lihat contoh untuk memahami ini:

    class Human{
    //Overridden Method
    public void walk()
    {
    System.out.println("Human walks");
    }
    }
    class Demo extends Human{
    //Overriding Method
    public void walk(){
    System.out.println("Boy walks");
    }
    public static void main( String args[]) {
    /* Reference is of Human type and object is
    * Boy type
    */
    Human obj = new Demo();
    /* Reference is of HUman type and object is
    * of Human type.
    */
    Human obj2 = new Human();
    obj.walk();
    obj2.walk();
    }
    }
    Output:

    Boy walks
    Human walks

    Nah sekarang perbedaannya?
    1. Static binding terjadi pada waktu kompilasi(compile-time) sementara dynamic binding terjadi pada saat runtime.
    2. Binding metode private, static dan final selalu terjadi pada waktu kompilasi karena metode ini tidak dapat diganti.
    Ketika metode overriding benar-benar terjadi dan referensi tipe induk ditugaskan ke objek tipe kelas anak, maka binding tersebut diselesaikan selama runtime.
    3. Binding dari overloaded method bersifat static dan metode binding yang diganti adalah dynamic.

    *Contoh program yang tersedia dengan menggunakan Bahasa Pemrograman Java.

    link: https://beginnersbook.com/2013/04/java-static-dynamic-binding/

    ReplyDelete