Showing posts with label C#. Show all posts
Showing posts with label C#. Show all posts

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 memaksa, kita 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:

Friday, June 7, 2019

Entity Framework vs Dapper siapa yang lebih enak?

Pada saat membuat aplikasi menggunakan .NET terdapat beberapa pertimbagan ORM mana yang mau di pakai. Apakah ORM yang cepat dan efisien tapi minim fitur? atau ORM yang dengan kecepatan sedikit lebih lambat tapi memiliki fitur lengkap? hmmm ...

Dalam artikel ini saya akan membandingkan dua ORM yang biasa digunakan di dalam pengembangan apliaksi menggunakan .NET yaitu Dapper dan Entity Framework.

Sebelum kita mulai berikut pengertian dari ORM. Secara sederhana ORM (Object Relational Mapping) adalah sebuah layer di dalam pemrograman yang menjembatani/ memetakan database dengan object di dalam aplikasi.


Oke kita mulai perbandingan antara EF dengan Dapper

1. Entity Framework

Entity Framework adalah framework buatan microsoft. EF memberikan kemudahan bagi developer seperti men generate table dari class yang dibuat, men generate fungsi CRUD dan lain lain.

Berikut kelebihan dan kekurangan dari EF.

Kelebihan

  • Memberikan fitur generate code secara otomatis
  • Memberikan fitur desain secara visual model dan mapping object
  • Support LINQ (bahasa untuk query query an bikinan microsoft juga)
  • Grrratis (sudah include untuk versi .NET 3.5 SP1 keatas)
Kekurangan
  • Keterbatasan modifikasi, karena code dan query sudah di generate
  • Jika ada perubahan skema di dalam database, skema di EF juga harus di update
  • Kurang cocok untuk domain model/ aplikasi yang besar
  • Lazy Loading (silahkan di gugel)
2. Dapper

Dapper adalah ORM yang dikembangkan secara open source. Jika di kategorikan, dapper masuk kedalam kategori Micro ORM. Micro ORM adalah ORM versi lite dengan versi dasar seperlunya yang berorientasi pada performa. Dapper memiliki julukan "King Of Micro ORM" dengan performa yang dapat diandalkan. 

Berikut kelebihan dan kekurangan dari Dapper 

Kelebihan 
  • Kemudahan merubah hasil query menjadi object
  • Cepat dan efisien
  • Kemudahan eksekusi query
  • Grrratis (Open source)
Kekurangan
  • Tidak men generate class model ( harus bikin sendiri )
  • Tidak men generate query ( harus bikin sendiri )
  • Tidak dapat menelusuri object dan perubahan nya ( salah satu fitur full ORM )

Kesimpulan
Dari pemaparan di atas EF dan Dapper memiliki tempat nya masing - masing tergantung dari kepentingan dan keperluan dari developer. Entah itu EF dengan kecepatan development nya yang memberikan kemudahan bagi developer dengan men generate ini dan itu? atau Dapper dengan kecepatan query nya yang dapat diandalkan tapi beberapa bagian harus bikin sendiri? It's up to our need sebagai developer.

Namun preferensi pribadi saya, saya lebih memilih dapper dengan performa query nya meskipun dalam beberapa kasus Full ORM bisa lebih cepat karena ada fitur cache di dalam nya, namun hal itu hanya berlaku untuk pemanggilan objek yang sama saja. Kekurangan nya yang tidak memberikan fitur "Generate" justru menurut saya merupakan kelebihan dimana kebebasan modifikasi ada di tangan kita sebagai developer. Bagaimana menurut anda? manakah yang lebih gurih? silahkan tinggalkan komentar ... 


Share: