List parameter yg panjang
public void calculate(int a, int b, int c, int d, int e, int f, int g) { // lakukan kalkulasi yg menakjubkan di sini }
walah banyak banget parameternya!!! Waktu awal2 belajar programming yg prosedural dianjurkan lewatkan semua data yg dibutuhkan oleh prosedurmu. yah… wajar aja sih. Karena semua datanya global. Klo di oo, ga ada data global. Semua dikapsulkan alias dibungkus dalam kelas. Data yg global biasanya membuat kacau. Karena semuanya share data yg sama, ubah data yg sama. Coba klo misalnya struktur datanya berubah .. wah .. kita harus cari2 procedure2 apa saja yg make data itu ….
ga boleh terlewat satupun .. bayangkan misalnya filenya ada 300-an … sabar2lah ….
Nah di oo klo misalnya kita butuh sesuatu kita hanya minta aja sama object lain. Jadi dengan object kita ga usah passing semua dari method. Tapi seperlunya saja.
Nah data yg lain ada di mana… Ya ada di kelas dimana method itu ada .. Namanya juga encapsulasi …
Data dan operasi terhadap data dikelompokkan dalam kelas .. Beda sama prosedural dimana data dipisah dengan operasinya…
Jadi di oo parameter cenderung lebih kecil dibandingkan dengan prosedural.
contoh ….
Ini klo di prosedural … Perhatikan bahwa data dipisah …. dan perhatikan juga parameternya
// definisi data struct Point { int x; int y; } // definisi operasi terhadap data .. dalam hal ini datanya point void MovePointTo(Point * point, int newX, int newY) { point->x = newX; point->y = newY; }
klo dengan oo bagaimana ??
public class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public Point() : this(0, 0) {} public void MoveTo(int newX, int newY) { this.x = newX; this.y = newY; } }
perhatikan perbedaan parameternya …. ok … saya tunggu anda untuk merenungkan sejenak.
Parameter yang banyak lebih sulit dimengerti, ga konsisten dan sulit. Karena kita pasti akan menambahkan parameter jika kita butuh data lagi. Nah cara mengubahnya menjadi sedikit parameter adalah dengan melewatkan object yang dibutuhkan dan menanyakan datanya dari object tersebut.
Tapi dengan melewatkan object kita akan menjadi tergantung alias depend ke object tersebut kan ??
Nah.. itu adalah pilihan. Jika parameter list panjang dan perubahan sering terjadi terhadap parameter tersebut kita harus memikirkan lagi struktur dependencynya