Monday, February 17, 2020

Early Binding dan Late Binding

Early Binding atau dikenal juga dengan Static Binding merupakan sebuah kondisi dimana compiler tahu tipe data sebuah objek, method apa saja yang di miliki dan atribut apa saja yang di miliki oleh objek tersebut. Early binding dapat kita lihat pada intelisense, pada saat kita menulis nama objek, intelisense memberikan rekomendasi nama method atau atribut yang di miliki objek tersebut, dengan kata lain compiler tahu mengenai objek tersebut meskipun belum melakukan compile. 

contoh :
ComboBox cboItems;

Late Binding  atau juga dikenal dengan dynamic binding merupakan sebuah kondisi dimana compiler tidak tahu mengenai tipe data, atribut atau method yang di miliki object terkait. Sehingga ketika kita menuliskan objek tersebut, intelisense tidak akan memberikan rekomendasi nama method/ atribut yang dimiliki object tersebut karena compiler tidak mengetahui nya. Compiler akan mengetahui nya setelah program di compile. 

contoh :
Object object;
dynamic dynamicObject;

Dari sisi performa Early binding lebih unggul karena compiler sudah tahu mengenai object yang akan di compile, sementara di dalam late binding pada saat proses kompilasi, compiler akan mencari tahu terlebih dahulu tipe data yang sesuai dengan object dynamic yang telah di definisikan. 
Share:

Sunday, February 16, 2020

Abstract Class, Abstract Method dan Virtual Method di dalam C#

1. Abstract Class 
Adalah kelas yang menggambarkan fungsionalitas dari method - method yang ada di dalam nya. Method di dalam Abstract class hanya menggambarkan Nama Method, Tipe data Nilai Kembalian, dan Parameter nya ...  tidak boleh ada implementasi di dalam method nya, hanya itu saja. 
Jadi inti nya abstract class hanya ngasi tau nama method, tipe keluaran, sama tipe input ... udah.

2. Abstract Method
Adalah method yang ada di dalam abstract class. Sifat dari abstract method memaksa, dengan kata lain harus di implementasikan di kelas yang menjadi anak nya, kalau ngga di implementasikan/ ngga ada di kelas anak nya maka akan muncul error. ingat ya, sifat nya memaksa. Selain itu abstract method hanya bisa di definisikan di dalam abstract class saja.

3. Virtual Method
Berbeda dengan abstract method, Virtual method tidak bersifat memaksakita bisa menambahkan implementasi code di dalam nya, dan bisa di definisikan di dalam abstract class atau class biasa. 

Berikut contoh penggambaran ketiga nya di dalam code C#

public abstract class Base
{
     public virtual void Test()
     {
         Console.WriteLine("This is the base version of the virtual method");
     }
     public abstract string ToString();
     public abstract bool Equals(object obj);
}

public class Derived : Base
{
     public override void Test()
     {
         Console.WriteLine("This is the derived version of the virtual                 method");
     }
     public abstract override string ToString(){
          //Implementasi code
     };
     public abstract override bool Equals(object obj){
          //implementasi code
     };
}

Share:

Saturday, February 15, 2020

Pengertian Interface Dalam Pemrograman (Bukan User Interface)

Oke sekali lagi, berawal dari ketertarikan saya untuk mempelajari design pattern, saya lihat ada sesuatu yang banyak dan sering terlibat didalam nya selain coupling (cek article sebelumnya tentang Pengertian Coupling Dan Cohesin serta Tipe Coupling pada Pemrograman), yaitu interface. Jadi, apa itu interface? saya akan coba jelaskan tentang interface dari sudut pandang saya dan mengimplementasikan nya menggunakan C# (karena saya programmer C#). Oke ... ini dia.

Oke, jadi dulu pada saat saya mendengar kata 'interface' yang ada di benak saya yaitu sebuah tampilan, seperti misalnya tampilan aplikasi. Memang secara bahasa interface sendiri memiliki arti 'permukaan' namun pokok bahasan kita kali ini bukan mengenai tampilan ('user interface') melainkan interface yang ada di dalam OOP.

Sebelum masuk ke penjelasan tentang interface dari sudut pandang saya, tentu nya saya harus memaparkan pengertian baku dari interface itu sendiri. Oke, saya ambil pengertian ini dari sumber yang sepertinya kredibel ... "An interface is a description of the actions that an object can do". Jadi dalam bahasa indonesia bunyi nya mungkin seperti ini, Interface adalah deskripsi dari banyak aksi yang dapat dilakukan di dalam sebuah object... nangkep inti nya? kurang lebih seperti itu. Saya akan coba mendetailkan maksud dari kalimat tersebut dari sudut pandang saya.

Untuk mencoba menjelaskan lebih jauh tentang interface saya akan ambil contoh di kehidupan nyata, saya akan ambil contoh dalam sebuah mobil. Sebuah mobil mempunyai pedal gas, rem, stir dan lain nya. Kita tahu fungsi masing bagian tersebut seperti pedal gas untuk menjalan kan mobil dan menambah kecepatan, rem untuk menghentikan mobil, stir untuk membelokkan mobil. Naah, sekarang saya tanya apakah anda tau hal teknis yang terjadi pada saat kita membelokkan stir? atau saat kita menginjak pedal gas atau rem? kita tidak tahu! dan tidak perlu tahu! yang kita harus tahu adalah kegunaan dari bagian - bagian tersebut. Jadi, dalam kasus ini pedal gas, rem, dan stir adalah interface. Kalau digambarkan kurang lebih seperti ini,

Sumber Gambar : Pribadi


Sekian pengertian interface dari sudut pandang saya, semoga dapat bermanfaat. 

sumber :
https://www.cs.utah.edu/~germain/PPS/Topics/interfaces.html


Share:

Synchronous vs Asynchronous Programming

Berdasar dari rasa penasaran saya yang suka comot comot code C# dari stackoverflow, ada beberapa syntax yang buat saya penasaran seperti Task, Async, dan Await. Ketiga syntax itu punya satu tujuan, yaitu menerapkan asynchronous programming. 

Inti dari asynchronous programming yaitu menghindari blocking proses, khusus nya proses yang membutuhkan waktu lama. Saya ambil contoh dalam aplikasi desktop menghitung jumlah karakter. 

Misal Dalam satu kasus sistem membutuhkan waktu lebih dari 5 detik untuk menghitung ribuan karakter, Dalam konsep synchronous programming dalam waktu lima detik tersebut kita tidak dapat melakukan apapun seperti drag jendela aplikasi, resize jendela aplikasi, dan lain lain karena proses terblok atau tertahan 5 detik untuk menghitung jumlah karakter.

Dalam konsep asynchronous programming, hal ini bisa di hindari karena proses mengitung karakter dilakukan di thread yang berbeda (keluar dari thread utama) sehingga pada saat thread tersebut sibuk menghitung karakter kita dapat melakukan apapun di thread utama seperti drag jendela aplikasi, resize jendela aplikasi, dll. 

Dalam beberapa kasusu setiap thread di luar thread utama akan kembali ke thread utama setelah proses yang dilakukan selesai (Misal, thread utama membutuhkan nilai kembalian dari thread lain) , dari hal ini akan terjadi perbedaan waktu eksekusi dimana mungkin thread utama lebih dulu selesai atau thread kedua yang lebih dulu selesai, untuk menggabungkan nya kita harus menunggu proses satu sama lain dan menggabungkan nya ke thread utama, di dalam c# kita dapat melakukan nya dengan await

Pembahasan ketiga syntax ini : Task, Async, dan Await. Saya akan coba bahas di postingan berikut nya...
Share: