Showing posts with label Programming. Show all posts
Showing posts with label Programming. 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:

Wednesday, July 3, 2019

K2 Administrator Account dan K2 Service Account

Di dalam K2 ada dua akun yang di definisikan dalam konfigurasi
  1. Admin Account 
  2. Service Account

Admin account adalah akun admin untuk akses semua fitur k2
Service Account adalah akun untuk keperluan akses koneksi service - service k2 

Admin account & service account bisa di setting di k2 blackpearl setup manager.

Contoh koneksi K2 menggunakan service account.
Pada bagian connection string bagian Integrated, jika di isi true maka username dan password akan mengambil dari sistem yang sudah di definisikan di configuration manager. Jika false, maka kita yang define sendiri. 


contoh connection string nya: 
Integrated=False;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=True;Host=localhost;Port=5252;WindowsDomain=domain;UserID=akun_admin;Password=password

Melihat Service Account mana yang sedang di gunakan

  1. Masuk ke server aplikasi
  2. masuk ke services.msc
  3. cari k2 blackpearl server
  4. klik kanan properties
  5. pilih tab Log On

Problem terkait : 

  1. Server is not configured for windows authentication
problem ini biasanya di sebabkan karena Service Account yang terdaftar di configuration manager ada problem. Coba configure ulang setup manager nya. kalau masih tidak bisa pakai saja Integrated=False dan definisikan sendiri username dan password di connection string nya, seperti contoh di atas.

  1. User ... does not have Administrator rights.
Problem ini terjadi karena K2 Administrator Account nya salah, ganti dengan akun K2 Administrator yang sesuai menggunakan setup manager
Share:

Monday, June 24, 2019

Cara shrink database file SQL Server

Oke, karena sering dapet keluhan terkait disk server yang membengkak, banyak cara agar size nya bisa berkurang. Salah satu nya nge shrink database file nya SQL Server. 

Tanpa basa - basi lagi langsung saja kita terjun ke tata cara nya :

1. Cek size dari database file yang ada
select name as logical_name, (size*8)/1024 sizeMB from sys.master_files 

2. Shrink file database nya!
USE [Nama_DB]

GO
ALTER DATABASE [Nama_DB]

SET RECOVERY SIMPLE WITH NO_WAIT;

GO

DBCC SHRINKFILE('Nama_file' , 1);  --Nama_file bisa di dapat dari hasil query sebelumnya. 

GO

ALTER DATABASE [Nama_DB]

SET RECOVERY FULL WITH NO_WAIT;

GO


Done...

Catatan : di tulisan kali ini saya hanya membahas cara shrink nya saja, terkait efek samping, kegunaan, pengertian shrink itu sendiri bisa di cari di google. Atau mungkin saya bahas di postingan berbeda (mungkin, lain waktu, entah kapan). Untuk cari aman, biasanya saya cuman melakukan shrink ke file - file 'Log' nya aja,  karena belum tau efek samping nya. 

silahkan tinggalkan komentar, CMIIW jika ada yang kurang tepat dari postingan ini. 

Selamat bekerja ...
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:

Monday, March 25, 2019

Hal Dasar Yang Perlu Diketahui dalam React JS

  1. Component/ Functional component
Component adalah method/ perilaku yang merepresentasikan bagian dari web misal textbox, label, radiobutton, etc. React di tulis di dalam tag script denga type "text/babel". Berikut contoh penulisan component :

<script type="text/babel">
function OurFirstComponent() {
return (
// Code that represents the UI element goes here
);
}
</script>

atau dapat di tulis juga seperti ini

const OurFirstComponent = () => {
return (
// Stuff to make this component goes here
);
}

  1. JSX
Selain menggunakan HTML Rect juga dapat menggunakan JSX. JSX merupakan script HTML yang di tuliskan di dalam script javascript, berikut contoh nya : 

<script type="text/babel">
function OurFirstComponent() {
return (
<h1>Hello, I am a React Component!</h1>
);
}
</script>

Note : karena "class" merupakan reserved word di javascript jadi kita harus mengganti atribut tag "class" html menjadi ClassName di JSX.

  1. ReactDOM
ReactDOM merupakan bagian dari react JS yang bertugas untuk melakukan render JSX ke halam HTML. berikut contoh nya : 
<script type="text/babel">
function OurFirstComponent() {
return (
<h1>Hello, I am a React Component!</h1>
);
}
const placeWeWantToPutComponent = document.getElementById('hook'); //hook adalah id dari tag
ReactDOM.render(OurFirstComponent(), placeWeWantToPutComponent);
</script>

Atau kita dapat melakukan nya seperti ini : 

ReactDOM.render(<OurFirstComponent />, placeWeWantToPutComponent);

  1. Component di dalam Component
Kita dapat memanggil component di dalam component, contoh : 
<script type="text/babel">
function OurFirstComponent() {
return (
<h1>I am the child!</h1>
);
}
function Container() {
return (
<div>
<h1>I am the parent!</h1>
<OurFirstComponent />
</div>
);
}
const placeWeWantToPutComponent = document.getElementById('hook');
ReactDOM.render(<Container />, placeWeWantToPutComponent);
</script>

  1. Class Component
Jika sebelum nya component bisa di katakan sebagai method/function, React menyediakan penggunaan class di dalam javascript sebagai Component, yang di namakan Class Component. Berikut contoh penggunaan nya :

class Container extends React.Component {
render() {
return (
<div>
<h1>I am the parent!</h1>
<OurFirstComponent />
</div>
);
}
}
const placeWeWantToPutComponent = document.getElementById('hook');
ReactDOM.render(<Container />, placeWeWantToPutComponent);

Class component harus memiliki function render() untuk mengembalikan nilai JSX yang ada di dalam nya. Sama seperti Component/ Functional Component, Class Component dapat di panggil menggunakan notasi seperti ini : <SebuahClassComponent /> 

Note ; Jika masih isa pakai functional component usahakan jangan pakai class component karena agak sulit dibaca (kata author nya). 

  1. Javascript di dalam JSX
Berikut cara memanggil javascript di dalam JSX : 

class Container extends React.Component {
render() {
const greeting = 'I am a string!';
return (
<div>
<h1>{ greeting }</h1>
<OurFirstComponent />
</div>
);
}
}

Contoh lain nya : 

class Container extends React.Component {
render() {
const addNumbers = (num1, num2) => {
return num1 + num2;
};
return (
<div>
<h1>The sum is: { addNumbers(1, 2) }</h1>
<OurFirstComponent />
</div>
);
}
}

  1. State 
Class Component dapat menyimpan informasi tentang informasi yang sedang terjadi, informasi tersebut di sebut dengan state. Berikut contoh penggunaan nya : 

class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
render() {
return (
);
}
}

dari code di atas state di isi object dengan key isMusicPlaying dan value false. 

Sifat pendefinisian constructor nya bersifat baku, harus seperti itu :  
constructor(props) {
super(props);
}

Note : props adalah informasi yang di bagikan dari parent ke child.

  1. Event Handler
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick(event) {
if (event.state.isMusicPlaying) {
event.setState({ isMusicPlaying: false });
} else {
event.setState({ isMusicPlaying: true });
}
};
render() {
let status = this.state.isMusicPlaying
? 'Playing :)'
: 'Not playing :(';
return (
<div>
<h1 onClick={this.handleClick.bind(this)}>{ status }</h1>
</div>
);
}
}

Dari code di atas, pada saat pertama kali dio render(), program akan mengecek apakah state true atau false. Jika true maka "Playing" jika false maka "Not Playing". 

Selanjutnya di dalam bagian JSX, pada tag h1 di tambahkan event listener javascript "onClick". event tersebut diisi dengan method handleClick yang akan mengeksekusi sesuatu jika tag h1 di click. 

Note : sebenar nya di dalam method handleClick parameter event bisa di ganti pakai this aja, jadi ga usah pakai parameter.

  1. Hubungan komunikasi antar Component
Berikut contoh hubungan antara class component dengan component (function) diluar class tersebut : 

class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick() {
if (this.state.isMusicPlaying) {
this.setState({ isMusicPlaying: false });
} else {
this.setState({ isMusicPlaying: true });
}
};
render() {
return (
<div>
<PlayButton isMusicPlaying={this.state.isMusicPlaying} />
</div>
);
}
}

berikut isi dari function PlayButton
function PlayButton(props) {
const className = props.isMusicPlaying ? 'play active' : 'play';
return <a href="#" title="Play video" className={className} />;
}

function PlayButton menerima object yang di passing dari class Containe dimana function PlayButton di panggil.

Selain mempassing informasi, kita juga bisa mempasing function seperti contoh sebagai berikut : 
function PlayButton(props) {
const className = props.isMusicPlaying ? 'play active' : 'play';
return <a onClick={props.onClick} href="#" title="Play video" className={className} />;
}
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { isMusicPlaying: false };
}
handleClick() {
if (this.state.isMusicPlaying) {
this.setState({ isMusicPlaying: false });
} else {
this.setState({ isMusicPlaying: true });
}
};
render() {
return (
<div>
<PlayButton
onClick={this.handleClick.bind(this)}
isMusicPlaying={this.state.isMusicPlaying}
/>
</div>
);
}
}



dari code di atas, dapat kita lihat di bagian render() dimana Component PlayButton di panggil, di beri dua parameter yaitu onClick yang berupa function dan isMusicPlaying. Keduanya di bugnkus menjadi props pada saat di terima di Component PlayButton.

Tulisan ini merupakan penyampaian versi saya dari link berikut : https://medium.freecodecamp.org/everything-you-need-to-know-about-react-eaedf53238c4

silahkan di kunjungi. bagus, mudah di pahami. 
 
Share:

Wednesday, January 3, 2018

Tipe Coupling Pada Pemrograman

Berlanjut dari artikel sebelumnya mengenai Pengertian Coupling Dan Cohesion, kali ini saya akan mencoba menjelaskan mengenai tipe - tipe Coupling. Tipe - tipe ini merupakan parameter tolak ukur apakah struktur sebuah program bersifat high coupling ataupun low coupling.


sumber gambar :
https://en.m.wikipedia.org/wiki/Coupling_(computer_programming)

Dari gambar di atas tipe coupling dibagi menjadi lima ( meskipun ada tipe lain yang nanti akan saya jelaskan disini ) yang memiliki tingkat derajat coupling berkurang dari kiri ke kanan. Berikut penjelasan masing - masing tipe :



  • Content Coupling
Memiliki nama lain yaitu Pathological Coupling. Tipe coupling ini terjadi pada saat sebuah logic di dalam sebuah method bergantung pada variable internal yang ada di dalam method lain. Saya ambil contoh sederhana, Method A memiliki sebuah variabel lokal yang di gunakan hanya sebagai counter namun  counter tersebut dijadikan sebagai salah satu nilai kembalian di Method A. Lalu Method B memanggil Method A dan menggunakan nilai kembalian tersebut (counter dari method A) sebagai salah satu elemen di dalam logic Method B. 

Hal ini tentunya membuat tingkat ketergantungan Method B terhadap Method A semakin tinggi, karena setiap ada perubahan internal di Method A, Method B juga harus mengikuti meskipun perubahan internal tersebut tidak ada sangkut paut nya dengan Method B. 

  • Common Coupling 
Common Coupling merupakan tipe coupling yang memiliki derajat High Coupling kedua setelah Content Coupling, memiliki nama lain Global Coupling. Coupling tipe ini berkaitan dengan penggunaan variable global. Penyebab terjadinya coupling ini yaitu, penggunaan variabel global oleh lebih dari satu method. Sehingga apabila terjadi perubahan pada variable global tersebut, maka kemungkinan perubahan juga harus dilakukan pada method yang menggunakan variabel tersebut.

  • External Coupling 
Coupling tipe ini melibatkan faktor eksternal (device, protocol, format data) yang di gunakan oleh lebih dari satu modul. saya ambil contoh, misalkan dalam sebuah aplikasi Point Of Sale (aplikasi kasir), aplikasi yang sedang berjalan menggunakan barcode scanner dan terdapat sepuluh method di dalam aplikasi yang menggunakan output dari barcode scanner tersebut. Lalu beberapa waktu kemudian seiring berkembang nya teknologi, pemilik toko ingin mengganti teknologi barcode scanner dengan teknologi terbaru, misal RF ID. Naah, dengan berganti nya device maka software yang digunakan pun harus di perbaharui untuk menyesuaikan dengan output dari RF ID, dalam kasus ini berarti programmer harus mengubah 10 method yang sebelum nya menggunakan Barcode Scanner menjadi menggunakan RF ID. Kebayang capek nya? gimana kalau ada ratusan method yang harus di ganti? cape deh ...


  • Control Coupling
Secara pengertian control coupling merupakan coupling antar method dimana aksi yang dilakukan dalam satu method di tentukan oleh parameter output dari method lain nya. 

  • Stamp Coupling
Stamp Coupling atau Data Structured Coupling merupakan coupling yang terjadi pada proses passing parameter, dimana parameter yang di passing ke dalam method merupakan satu kesatuan record padahal data yang akan digunakan di dalam method tersebut hanya satu field saja dari record tersebut. Jadi pada saat ada perubahan pada field lain selain yang digunakan di method, maka method tersebut harus melakukan penyesuaian kembali perilaku bagaimana method membaca parameter record, meskipun field yang digunakan tidak di modifikasi. 

  • Data Coupling
Sama seperti Stamp Coupling, Namun parameter yang di passing bersifat elementer dan tingkat Coupling nya lebih rendah dibandingkan dengan Stamp Coupling.

  • No Coupling
Seperti namanya, modul tidak memiliki keterikatan satu sama lain (Modul berjalan sendiri - sendiri)


Sekian penjelasan mengenai tipe - tipe Coupling dari sudut pandang saya. Semoga bermanfaat.

sumber : https://en.wikipedia.org/wiki/Coupling_(computer_programming)
Share:

Tuesday, January 2, 2018

Pengertian Coupling Dan Cohesion

Berawal dari ketertarikan mengenai design pattern, saya perhatikan banyak istilah yang sering muncul saat saya membaca berbagai referensi. Istilah tersebut yaitu 'Coupling'. Karena penasaran saya coba cari tau tentang istilah tersebut. Coupling ternyata tidak hadir sendiri, ia memiliki pasangan yang bernama 'Cohesion'. berikut penjelasan mengenai dua sejoli ini.

Coupling Dan Cohesion, diartikan kedalam bahasa indonesia sebagai Kopel dan Kohesi. Lucu juga arti bahasa indonesia nya, saya tidak tahu makna kedua kata tersebut, harus di Cek di KBBI sepertinya. Coupling dan Cohesion merupakan istilah yang sudah lama di gunakan di dunia pemrograman. Istilah tersebut digunakan untuk mengukur tingkat kebergantungan antara modul/ method di dalam program. Tingkat kebergantungan ini bisa dikatakan dapat di jadikan ukuran bagus atau tidak nya struktur sebuah program, karena tingkat ketergantungan antar modul ini memiliki impact pada maintainability sebuah program. Yang dimaksud dengan maintainability disini yaitu secara simple nya : perubahan pada bagian program tertentu dapat dilakukan dengan mudah tanpa berdampak pada bagian program lain nya. Saya ambil contoh, seorang programmer menambahkan fitur pada sebuah aplikasi, modul-modul di dalam aplikasi tersebut memiliki tingkat ketergantungan yang sangat tinggi antara satu modul dengan modul lainnya. Sehingga satu saja perubahan di salah satu modul, maka modul - modul lain nya juga harus ikut berubah. Tentunya Hal tersebut merupakan pekerjaan yang melelahkan bukan.

Naah dari sanalah ukuran ketergantungan antar modul lahir. istilah tersebut yaitu Coupling Dan Cohesion. istilah tersebut sebenarnya bertolak belakang. Istilah untuk modul yang memiliki ketergantungan tinggi yaitu High Coupling atau dapat di sebut Low Cohesion. Untuk istilah modul yang memiliki ketergantungan rendah disebut Low Coupling atau High Cohesion. Dapet intinya? jadi coupling ini adalah kebalikan nya cohesion.

sumber gambar: 
http://www.writeopinions.com/coupling-computer-science

Semakin tinggi tingkat Cohesion atau semakin rendah tingkat Coupling maka dapat dikatakan program semakin bagus karena semakin mudah di maintain, begitupun sebaliknya semakin rendah tingkat Cohesion atau semakin tinggi tingkat Coupling maka program cenderung lebih sulit untuk di maintain.

Kurang lebih begitu mungkin pengertian Coupling Dan Cohesion dari sudut pandang saya, semoga bermanfaat.

sumber: https://en.m.wikipedia.org/wiki/Coupling_(computer_programming)
Share: