Learn More Ingin tahu kok dikasih tempe


4
Aug/09
1

Membangun Modul Yang Efektif

PENDAHULUAN

Manusia bila menghadapi permasalahan yang (cukup) besar langkah awal yang dilakukan adalah membagi/memecah permasalahan tersebut menjadi beberapa bagian yang lebih kecil. Selanjutnya menyelesaikan secara bertahap bagian demi bagian, baik secara sendiri maupun berkelompok, sehingga diperoleh solusi dari permasalahan yang besar tersebut.  Sebagai gambaran, kita diminta untuk  “menyelesaikan” (baca: memakan) buah semangka sampai habis.  Langkah awal yang dilakukan adalah “mempartisi” (memotong)  buah semangka menjadi beberapa bagian dan memakannya satu persatu, sendiri atau bersama-sama.

Dalam lingkup pengembangan perangkat lunak (program) analogi di atas harus dipakai, apabila akan menghasilkan perangkat lunak yang baik.  Program yang besar harus dipartisi menjadi beberapa modul yang mudah diselesaikan.   Modul program dapat berupa  prosedur dan/atau fungsi.

Untuk mempartisi program menjadi beberapa bagian terdapat dua paradigma pokok, yaitu Structured Programming (SP) dan Object Oriented Programming (OOP).  SP mempartisi  program berdasarkan  kata kerja (fungsi sistem) atau  behavior sedangkan OOP mempartisi  program berdasarkan kata benda (objek diskrit).  Dalam SP, struktur data dan behavior terpisah, di sisi lain OOP mengenkapsulasi struktur data dan behavior dalam satu objek.

MENGUKUR MODUL PROGRAM YANG BAIK

Reusable adalah kunci pokok dalam pengembangan perangkat lunak, tema inilah yang mengilhami perancangan modul program dan perkembangan paradigma pengembangan perangkat lunak secara umum.  Reusable bisa diperoleh bila menerapkan information hiding.

Yang dimaksud Information hiding adalah: [Presman 2000]

  • Setiap modul tersembunyi dengan yang lain
  • Modul harus dirancang agar informasi (prosedur dan data) yang berada di dalam modul tidak dapat diakses oleh oleh modul lain yang tidak memerlukan informasi tersebut.

Keuntungan modul yang efektif

  • Mengurangi kompleksitas
  • Mempermudah perubahan
  • Lebih mudah diimplementasikan dan dapat dikerjakan secara paralel (Tim)

Dua Mekanisme pengaktifan modul:

  • Diinvokasi by refference (statemen call)
  • Dinvokasi oleh interupsi  (banyak untuk sistem real-time)

Functional Independence merupakan kunci perancangan yang baik dan kunci kualitas program.

  • Merupakan hasil pertumbuhan langsung konsep abstraksi dan information hiding.
  • Memiliki subfungsi yang spesifik dan antarmuka yang sederhana apabila dipandang dari bagian lain dalam struktur program.
  • Keuntungan Modul yang independen:
  1. mudah membagi dalam tim,
  2. mudah diubah,
  3. perambatan kesalahan berkurang, dan
  4. reusable bertambah.

Independensi diukur dengan dengan dua kriteria kualitatif, yaitu Cohesion dan Coupling.

  • COHESION: mengukur kekuatan funmgsional relatif suatu modul.
  • COUPLING: mengukur interdependensi relatif antar modul

Ciri Modul yang baik:

  • High cohesion (functional cohesion): modul hanya melakukan satu tugas dan memerlukan sedikit interaksi dengan modul lain dalam satu program.
  • Low coupling: modul memiliki kopling antar modul yang lemah atau sebebas mungkin dengan modul yang lain (independen).  Kopling tergantung pada kompleksitas antarmuka modul.

STUDI KASUS

Pada halaman berikut diberikan contoh kasus penyelesaian program secara modular.  Pada kolom sebelah kiri, program sudah terdiri dari beberapa modul tetapi masih memiliki kopling tinggi.

Kolom sebelah kanan merupakan hasil perbaikan yang menunjukkan kopling rendah.   Kohesi tidak begitu tampak dalam kasus ini.

KESIMPULAN

Dalam menyusun program tidak sekedar memecah program menjadi beberapa modul, tetapi harus memperhatikan bagaimana kualitas modul tersebut.  Modul yang baik adalah reusable. Reusable dalam program yang sama maupun reusable untuk program yang lain.

PROGRAM TIDAK BAIK PROGRAM LEBIH BAIK
Include # <stdio.h>Main (void)

{

int  i, j, a, b, c;

a = 5; b = 20; c = 10;

b = hitung_loop(a,b);

pangkat_tiga (b);

j = proses(a,b,c);

tampilkan_hasil(j);

return (0);

}

void buat_garis (int x, char y)

{

for (i = 0; i <= x; x++)

printf (y);

printf (“\n”);

}

Void  pangkat_tiga (int x)

{

int    z;

z := x * x * x;

printf (”Hasil 1 =  \n”, z);

buat_garis (10,'=');

}

Int  proses(int x, y, z)

{

int  s;

s := x + y - z;

return s;

End;

Int  hitung_loop(int x, y)

{

for (i=1; i== x; i++)

y = y - i;

return y;

}

Void  tampilkan_hasil( int y)

{

printf (“Hasil 2 = “, y); printf (“\n”);

buat_garis(20,'*');

}

Include # <stdio.h>Main (void)

{

Int  j, k, a, b, c;

a = 5; b = 20; c = 10;

b = hitung_loop(a,b);

k = pangkat_tiga (b);

j = proses(a,b,c);

tampilkan_hasil(k,j);

return (0);

}

void buat_garis (int x, char y)

{

int i;

for (i = 0; i <= x; x++)

printf (y);

printf (“\n”);

}

Int  pangkat_tiga (int x)

{

Int  z;

z := x * x * x;

return z;

}

Int  proses(int x, y, z)

{

Int s;

s := x + y - z;

return s;

End;

Int  hitung_loop(int x, y)

{

int I;

for (i=1; i== x; i++)

y = y - i;

return y;

}

Void tampilkan_hasil( int x, y)

{

printf (“Hasil 1 = “, x); printf (“\n”);

buat_garis(20,'=');

printf (“Hasil 2 = “, y); printf (“\n”);

buat_garis(20,'*');

} // end procedure tampilkan hasil

-- Unduh dokumen asli --

(Sumber dari modul dosen Priyanto-UNY)

Tagged as:
23
Apr/09
1

RPL #2-Java Version

public class tgs2 {
  public static void main(String[] args) {
    int choise;
    do {
      choise= bacaInput("1.Proses Tegangan\n"+
      "2.Proses Arus\n"+
      "3.Proses Resistor");
    } while((choise>3) || (choise<1));
    switch(choise) {
      case 1:
        prosesTegangan();
        break;
      case 2:
        prosesArus();
        break;
      case 3:
        prosesResistor();
        break;
    }
  }

  public static void prosesTegangan() {
    int r=bacaInput("Resistor?");
    int i=bacaInput("Arus?");
    int v=hitungTegangan(i,r);
    tampilkan(v);
  }

  public static void prosesArus() {
    int r=bacaInput("Resistor?");
    int v=bacaInput("Tegangan?");
    int i=hitungArus(v,r);
    tampilkan(i);
  }

  public static void prosesResistor() {
    int i=bacaInput("Arus?");
    int v=bacaInput("Tegangan?");
    int r=hitungResistor(v,i);
    tampilkan(r);
  }
23
Apr/09
0

RPL #2-Pseudo Code Version

main() {

  int pilih;

  ulangi {

    pilih=bacaInput("1.Tegangan,2.Arus,3.Resistor");

  } ketika (pilih>3) atau (pilih<1);

  pemilihan(pilih) {

    jika 1: prosesTegangan();

    jika 2: prosesArus();

    jika 3: prosesResistor();

  }

}

void prosesTegangan() {

  int r=bacaInput("Resistor");

  int i=bacaInput("Arus");

  int v=hitungTegangan(i,r);

  tampilkan(v);

}

void prosesArus() {

  int r=bacaInput("Resistor");

  int v=bacaInput("Tegangan");

  int i=hitungArus(v,r);

  tampilkan(i);

}

void prosesResistor() {

  int i=bacaInput("Arus");

  int v=bacaInput("Tegangan");

  int r=hitungResistor(v,i);

  tampilkan(r);

}
23
Apr/09
0

RPL #1-Pascal Version

{Tugas Mata Kuliah Rekayasa Perangkat Lunak

Nama : xxx xxx (by taufik)
NIM : xx
Prodi: xxx
Kelas: x

Membuat program sederhana penghitung tegangan}

program rpl;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
i,r,v: Integer;

//Method baca Input
function bacaInput(teks:String): Integer;
var
x: Integer;
begin
write(teks+'=');
readln(x);
bacaInput:=x;
end;

23
Apr/09
0

RPL #1-C++ Version

/*Tugas Mata Kuliah Rekayasa Perangkat Lunak

Nama : xxx xxx (by taufik)
NIM : xxx
Prodi: xx
Kelas: x

Membuat program sederhana penghitung tegangan*/

#include <iostream.h>
#include <conio.h>
#include <cstring.h>

//method baca input
int bacaInput(string teks) {
int i;
cout << teks << "="; cin >> i;
return i;
}

//method menghitung tegangan
int hitung(int i,int r) {
return i*r;
}

//method menampilkan hasil
void tampilkan(int v) {
cout << "Nilai tegangan = " << v << " volt";
}

//method main
int main() {
int i, r, v; //deklarasi variabel
i=bacaInput("Nilai arus"); //membaca nilai arus
r=bacaInput("Nilai tegangan");//membaca nilai hambatan
v=hitung(i,r); //menghitung nilai tegangan
tampilkan(v); //menampilkan hasilnya
getch();
return 0;
}

Tagged as:
23
Apr/09
0

RPL #1-Java Dialog Version

/*Tugas Mata Kuliah Rekayasa Perangkat Lunak

Nama : xxx xxx (by taufik)
NIM : xxxx
Prodi: xxx
Kelas: x

Membuat program sederhana penghitung tegangan*/

public class rpl {
public static void main(String[] args) {
int i=bacaInput("Nilai arus"); //panggil method input->i
int r=bacaInput("Nilai hambatan"); //panggil method input->r
int v=hitungTegangan(i,r); //hitung nilai tegangan->v
tampilkan(v); //tampilkan hasilnya<-v
}
//method baca input
public static int bacaInput(String teks) {
//returnkan(ubah ke betuk integer terlebih dahulu)
return Integer.parseInt(javax.swi

ng.JOptionPane.showInputDialog(teks));
}
//method menghitung tegangan
public static int hitungTegangan(int i, int r) {
//return berupa hasil perkalian->tegangan
return i*r;
}
//method menampilkan hasilnya
public static void tampilkan(int v) {
//tampilkan dengan dialog
javax.swing.JOptionPane.showMessageDialog(null, "Nilai tegangan = "+v+" volt");
}
}

Tagged as:
23
Apr/09
0

RPL #1-Java Version

/*Tugas Mata Kuliah Rekayasa Perangkat Lunak

Nama : xxx xxx (by Taufik)
NIM : xxx
Prodi: xxxxx
Kelas: x

Membuat program sederhana penghitung tegangan*/

public class rpl {
public static void main(String[] args) {
int i=bacaInput("Nilai arus"); //panggil method input->i
int r=bacaInput("Nilai hambatan"); //panggil method input->r
int v=hitungTegangan(i,r); //hitung nilai tegangan->v
tampilkan(v); //tampilkan hasilnya<-v
}
//method baca input
public static int bacaInput(String teks) {
//returnkan
System.out.print(teks+"=")

;
java.util.Scanner scanner=new java.util.Scanner(System.in);
return scanner.nextInt();
}
//method menghitung tegangan
public static int hitungTegangan(int i, int r) {
//return berupa hasil perkalian->tegangan
return i*r;
}
//method menampilkan hasilnya
public static void tampilkan(int v) {
//tampilkan dengan dialog
System.out.println("Nilai tegangan = "+v+" volt");
}
}

Tagged as: