Package dan Abstract Class

0 komentar

Minggu, 22 Desember 2013

Instance dari class tabung.

Tabung merupakan turunan dari class lingkaran yang merupakan turunan dari class point.Tampilkan koordinat, jari-jari, luas dan isi silinder!
Review
class point {
private int X;
private int Y;
public point(int x, int y) { X = x; Y = y; }
public void setX(int x) { X = x; }
public void setY(int y) { Y = Y; }
public int getX() { return X; }
public int getY() { return Y; }
}
Review
class lingkaran extends point {
private double radius;
public lingkaran(int x, int y, double r) { super(x,y); setRadius(r); }
public void setRadius(double r) { radius = (r < 0.0 ? 0.0 : r); }
public double getRadius() { return radius; }
public double hitungDiameter() { return 2*radius; }
public double hitungKeliling() { return 3.14*hitungDiameter(); }
public double hitungLuas() { return 3.14*getRadius()*getRadius(); }
}
Review
class tabung extends lingkaran {
private int tinggi;
public tabung(int x, int y, double r, int t) { super(x,y,r); tinggi = t; }
public void setTinggi(int t) { tinggi = t; }
public int getTinggi() { return tinggi; }
public double hitungLuas() 
{ return 2*super.hitungLuas() + hitungKeliling()*getTinggi(); }
public double hitungIsi()
{ return super.hitungLuas()*getTinggi(); }
}
Review
public class Contoh {
public static void main(String args[]) {
tabung silinder = new tabung(4,5,2,3);
System.out.println("Koordinat silinder: X = " + silinder.getX());
System.out.println("Koordinat silinder: Y = " + silinder.getY());
System.out.println("Jari-jari silinder = " + silinder.getRadius());
System.out.println("Tinggi silinder = " + silinder.getTinggi());
System.out.println("Luas silinder = " + silinder.hitungLuas());
System.out.println("Isi silinder = " + silinder.hitungIsi());
}
}
Abstrak

Abstract class adalah suatu class yang merupakan suatu  kerangka yang dibuat untuk digunakan oleh class yang  lain (yang merupakan turunannya).Karena hanya merupakan kerangka, maka tidak ada 
operasi yang diimplementasikan pada class tersebut.
abstract class Pesan {
private String pengirim
public Pesan(String dari) { pengirim = dari; }
public String getPengirim() { return pengirim; 
public void Penyampaian();  
}
Keyword abstract mengindikasikan bahwa method yang dibuat tidak dapat dispesifikasikan di class tersebut. Suatu method abstract memastikan bahwa semua turunan (non-abstract) dari class tersebut akan mengaplikasikan method tersebut.Suatu abstract class tidak dapat dibuat obyeknya. Kita masih dapat membuat object variable dari abstract class tapi  referensinya harus menunjuk ke obyek non-abstract dari 
subclassnya.
Pesan psn = new PesanSuara(“salam.wav”);

Contoh:
class PesanTertulis(String dari, String t) extends Pesan{
super(dari);
teks = t;
public void Penyampaian() {
System.out.println(teks);
}
private String teks;
}
Interface

JAVA menyediakan interface untuk mendukung  multiple inheritance. Interface hanya mendefinisikan 
spesifikasi method, tanpa menyediakan kode program  yang menjelaskan apa yang dilakukan method-method  yang didefinisikan.
File bentuk.java
public interface bentuk {
public double getLuas();
public double getIsi();
public String getNama();
}
File point.java
public class Point extends Objects implements bentuk {
private int x; private int y;
public Point() { }
public Point (int nilaiX, int nilaiY) {
x = nilaiX; y = nilaiY;
public void setX(int nilaiX) { x = nilaiX; }
public void setY(int nilaiY) { y = nilaiY; }
public int getX() { return x; }
public int getY() { return y; }
public double getLuas() { return 0.0; }  
public double getIsi() { return 0.0; }  
public String getNama() { return "titik"; } 
}
Package

Package adalah pengelompokan beberapa buah class  yang saling berhubungan. Untuk membuat agar suatu
source file class masuk dalam suatu kelompok class, digunakan statement package dengan sintaks 
deklarasi:
package  nama_package;
Package bersifat hirarkis, dipisahkan dengan titik. (contoh, abc.bagKeuangan.Karyawan)
Package bermanfaat jika kita akan mendistribusikan suatu aplikasi. Package memungkinkan kita menyembunyikan class dan method tanpa membuatnya private. JAVA code yang ada pada suatu package memiliki akses ke semua class dan method yang tidak private.
File Pegawai.java
package civitasAkademika;
public class Pegawai {
private String nama;
private String nip;
public Pegawai(String Nama, String Nip) {
this.nama = Nama;
this.nip = Nip;
}
protected void setNama(String Nama) { this.nama = Nama; }
protected void setNip(String Nip) { this.nip = Nip; }
protected String lihatData() {
return "Nama\t: “ + nama + "\nNIP\t: “ + nip;
}  
}
File PegEdukatif.java
package civitasAkademika;
public class PegEdukatif extends Pegawai {
private String fakultas;
public PegEdukatif(String Nama, String Nip, String Fakul
super(Nama,Nip);
this.fakultas = Fakultas;
}
public void setFakultas(String Fakultas) { this.fakultas =
public String lihatData() {
return super.lihatData() + "\nFakultas\t: “ + fakultas;
}    
}
File PegNonEdukatif.java
package civitasAkademika;
public class PegNonEdukatif extends Pegawai {
private String unit;
public PegNonEdukatif(String Nama, String Nip, String Unit) {
super(Nama,Nip);
this.unit = Unit;
}
public void setUnit(String Unit) { this.unit = unit; }
public String lihatData() {
return super.lihatData() + "\nUnit\t: “ + unit;
}    
}
Jika dibutuhkan akses ke suatu class atau method yang tidak private dari suatu package, maka class tersebut harus disediakan dengan statement import. Statement ini digunakan untuk “membawa” class dari suatu package ke address space yang aktif saat itu.
Catatan: 
1. Semua class harus diletakkan dalam directory yang bernama sama dengan nama package
2. Package dicompile di luar directory package C:\javac dirPackage/*.java
File PegNonEdukatif.java
import civitasAkademika.*;
public class DataKaryawan {
public static void main(String[] args) {
PegEdukatif a = new PegEdukatif("Budi","98E1234","Teknik");
PegNonEdukatif b = new PegNonEdukatif("Ari","95NE1000","BIRO2");
System.out.println(a.lihatData());
System.out.println(b.lihatData());
}
}
Platform JAVATM2, telah menyediakan beberapa standard package class (disebut class library) yang 
mengimplemen-tasikan operasi-operasi dasar yang dibutuhkan oleh program JAVA.
  • java.util berisi class-class utility seperti membuat bialangan random, mendefinisikan property system, dan fungsi yang berhubungan dengan tanggal.
  •  java.io berisi class-class yang menangani file I/O. 
  • java.net berisi class-class yang berkaitan dengan operasi jaringan, socket dan URL. 
  • java.applet berisi class-class yang menyediakan aplikasi applet. java.awtberisi class-class untuk membuat Abstract Window Toolkit, yang digunakan untuk membuat interface berbasis grafis (GUI). 
  • java.lang berisi class-class seperti String, Math, Integer dan Thread.

PEMROGRAMAN CLASS DAN OBJECT [ PBO 7 ]

0 komentar

Minggu, 08 Desember 2013

Definisi Class
Class adalah blok-blok bangun pada program JAVA. Class mendefinisikan atribut dan perilaku obyek yang
dibuatnya. Class merupakan definisi formal suatu abstraksi. Class berlaku sebagai template untuk pembuatan obyek-obyek.
Class berisi abstraksi yang terdiri dari nama class, atribut dan service.
class Manusia {
     void menyapa() {
          System.out.println(“selamat pagi”);
     }
}
Class Instances
Untuk dapat menggunakan kelas yang telah didefinisikan, anda harus membuat sebuah obyek dari kelas tersebut (class instance), dengan sintaks:
          NamaKelas namaObyek = new NamaKelas ( [parameter] );
Contoh:
          Manusia tukijan = new Manusia();
Instance Variables
Suatu obyek dapat dibedakan berdasarkan sifat (behavior) yang berbeda. Obyek juga dapat dibedakan
berdasarkan atributnya.
Mis: manusia dapat dibedakan berdasarkan pekerjaan, ras, jenis kelamin, dsb. Atribut yang membedakan suatu instance obyek manusia yang satu dengan yang lainnya disebut instance variabel.
 
class Manusia {
          private String suku = “Jawa";
          private String jenisKelamin = “pria";
          private String sapaan = “halo dab!";
          void menyapa() {
               System.out.println(sapaan);
          }
}
Method
Method dapat digambarkan sebagai sifat (behavior) dari suatu class. Untuk mendefinisikan method pada dalam class digunakan sintaks sintaks
          hak_akses <tipe_data_return> nama_method( [parameter] )
Untuk memanggil method dapat digunakan sintaks sebagai berikut:
          namaObyek.nama_method( [parameter] );
Contoh:
          tukijan.menyapa();

class Manusia {
     void menyapa() {
          System.out.println(“selamat pagi”);
     }
}
public class ManusiaManusia {
     public static void main(String[] args) {
          Manusia tukijan = new Manusia();
          tukijan.menyapa();
          System.exit(0);
     }
}
Method Overloading
JAVA interpreter memiliki kemampuan untuk menggunakan beberapa cara pemanggilan method.
class Manusia {
     void menyapa() {
          System.out.println(“selamat pagi");
}
     void menyapa(String sapaan) {
          System.out.println(sapaan);
     }
}
public class ManusiaManusia {
     public static void main(String[] args) {
          Manusia susi = new Manusia();
          Manusia ginting = new Manusia();
          susi.menyapa();
          ginting.menyapa(“horas bah");
          System.exit(0);
     }
}
Akses Method
Nilai variabel dari suatu instance dapat berganti, oleh sebab itu harus ada suatu cara untuk mengubah nilai variabel tersebut (akses method). Secara konvensi method untuk mengubah nilai suatu instance variabel dimulai dengan kata set.
class Manusia {
     private String suku = “Melayu";
     private String jenisKelamin = “pria";
     private String sapaan = “selamat pagi";
     private boolean bekerja = true;

     void menyapa() {
          System.out.println(sapaan); }
     void setSapaan(String sapaan) {
          this.sapaan = sapaan; }
     void setSuku (String suku) {
          this.suku = suku; }
     void setBekerja(boolean punyaPekerjaan) {
          bekerja = punyaPekerjaan; }
}
public class ManusiaManusia {
     public static void main(String[ ] args) {
          Manusia changNam = new Manusia();
          changNam.setSapaan(“anyong haseo");
          changNam.menyapa();
     }
}

Suatu method dapat pula mengembalikan nilai pada saat pemanggilan.
boolean menantuIdaman() {
     if (bekerja == true && gajiTinggi == true)
          return true; else return false;
}
Constructor
Constructor merupakan metode khusus yang memiliki nama sama dengan kelasnya. Jika kita tidak mengkodekan sebuah constructor, JAVA akan membuat sebuah constructor default untuk kita. Constructor default tidak melakukan apa-apa, namun memungkinkan semua variabel yang tidak diinisialisasi dalam deklarasi diberi suatu nilai default.
class Mahasiswa {
     private String nama = "";
     private int nim = 0;
     private static int NIM = 0;
     private double ipk = 0.0;
     public Mahasiswa() { this.nim = ++NIM; }
     public Mahasiswa(String na, double i) {
          this.nama = na;
          this.ipk = i;
          this.nim = ++NIM; }
     public void LihatData() {
          System.out.println("Nama : " + nama + "\tNIM : " + nim +
          "\tIPK : " + ipk ); }
}
public class MahasiswaInfo {
     public static void main(String args[]) {
          Mahasiswa mhs1 = new Mahasiswa( "Dinda“ , 3.4 );
          Mahasiswa mhs2 = new Mahasiswa( "Ninda“ , 3.25 );
          Mahasiswa mhs3 = new Mahasiswa();
          mhs1.LihatData();
          mhs2.LihatData();
          mhs3.LihatData();
     }
}
Reference Variable
Reference variable digunakan untuk menyimpan alamat dinamis suatu class instance.
class Mahasiswa {
     String nama = “Ari";
     void setNama(String nama) {
     this.nama = nama;
     }
}
public class RefVariabel {
     public static void main(String[] args) {
          Mahasiswa A = new Mahasiswa();
          Mahasiswa B = A;
          Mahasiswa C = new Mahasiswa();

System.out.println("A:"+A.nama+"\tB:"+B.nama+"\tC:"+C.nama);
          A.setNama(“Ira");
     System.out.println("A:"+A.nama+"\tB:"+B.nama+"\tC:"+ C.nama);
          C.setNama("Ria");
     System.out.println("A:"+A.nama+"\tB:"+B.nama+"\tC:"+C.nama);
          System.exit(0);
     }
}
Hubungan Antar Class
Pemrograman berorientasi obyek adalah sekumpulan class-clas yang saling berintarksi. Ada banyak cara suatu class dapat berinteraksi dengan class lainnya, seperti pewarisan (GenSpec), agregasi (WholePart) dan asosiasi (instance/ message connection)
 

STRUCTURES [ PBO 6 ]

0 komentar
Structures
Merupakan ekspresi kompleksitas lingkup permasalahan yang termasuk dalam tanggung jawab sistem.
Structure berguna untuk menyederhanakan kompleksitas multiple objects-&-class dan memusatkan perhatian analist.

Hal-hal yang harus diperhatikan :
  • Apakah termasuk dalam batasan masalah?
  • Apakah termasuk dalam tanggung jawab sistem?
  • Apakah memenuhi syarat-syarat suatu obyek?

Gen-Spec
( Inheritance )
Melihat hubungan antar class dan object sebagai obyek yang bersifat umum dan bersifat spesifik
“adalah” , “adalah sejenis”
terdapat penurunan sifat / pewarisan (inheritance)

Notasi
Cara mengidentifikasi struktur
Apakah ada penurunan sifat?
Apakah ada sifat-sifat (attribut/service) yang berlaku untuk semua object (umum) dan ada yang hanya berlaku untuk object tertentu (khusus)
Cara menggambarkan ada 2 cara :
  • hierarchy
  • lattice.
Lattice, digunakan untuk memperjelas spesialisasi tambahan dan menunjukkan kesamaan sifat suatu object.
Whole-Part
( Aggregation )
“ memiliki “
terdapat 3 macam :
• assembly – parts (benda dan bagian-bagiannya)
• container – contain (wadah dan isinya)
• collection - members (kumpulan dan anggotanya)
 
Notasi
 
Cara mengidentifikasi struktur
  • Apakah obyek tersebut menjelaskan lebih dari sekedar nilai attribute?
  • Jika tidak, lebih baik didefinisikan sebagai attribute dari obyek “whole”
TERMINOLOGI
Subjects
  • Suatu mekanisme yang digunakan untuk membantu pembaca dalam memahami suatu model yang besar dan kompleks.
  • Subject merupakan penerapan dari hukum Miller (kapasitas memori jangka pendek manusia pada suatu saat berkisar 5-9). Hukum tersebut diterapkan dengan menunjukkan visibilitas model dan pembatasan jumlah obyek yang ditampilkan pada suatu saat.
Subjects
HOW
1. Pilih class teratas dari masing-masing struktur sebagai calon subyek
2. Pilih object-&-class yang tidak termasuk dalam suatu struktur sebagai calon subyek.
3. Cari subyek dengan memperkecil ketergantungan dan interaksi antar subyek.
 

JAWABAN UJIAN TENGAH SEMESTER PBO [UTS PBO]

0 komentar

Minggu, 17 November 2013


USE CASE DIAGRAM



SEQUENCE DIAGRAM



ACTIVITY DIAGRAM
 
  •  Kasus 1
  •  Kasus 2
  • Kasus 3 
 
  •  Kasus 4
 
  •  Kasus 5
 
  •  Kasus 6
 
 CLASS DIAGRAM
 
  • Kasus 1
 
  •  Kasus 2
 
  •  Kasus 3
 
  •  Kasus 4
 
  •  Kasus 5
 
  •  Kasus 6
 
 
LISTING PROGRAM JAVA 
  • Kasus 1
import java.io.*;

public class satu {

    public static void main(String[] args) {
        System.out.println("Selamat Datang di Java Programming");
    }
}


  • Kasus 2
import java.io.*;

public class dua {
        
    public static void main(String[] args) {
        final int p=5;
        final int l=7;
        int L;
        L=p*l;
        System.out.println("Luas persegi panjang adalah = "+L);
    }
}


  • Kasus 3
import java.io.*;

public class tiga {
        
    public static void main(String[] args) {
        double f;        
        f=5+4-6*7/3;
        System.out.println("Hasil dari perhitungan 5+4-6*7/3 adalah "+f);
    }
}


  • Kasus 4
import java.io.*;

public class empat {

    public static void main(String[] args) {
        int array[];
        array = new int[5];

        array[0] = 5;
        array[1] = 8;
        array[2] = 20;
        for (int i = 0; i < 4; i++) {
            System.out.println("Array[" + i + "] = " + array[i]);
        }
    }
}


  • Kasus 5
import java.io.*;
import java.util.Scanner;

public class lima {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int luas;
        System.out.print("Masukkan Panjang : ");
        Integer panjang = sc.nextInt();
        System.out.print("Masukkan Lebar : ");
        Integer lebar = sc.nextInt();
        luas = panjang * lebar;
        System.out.println("Luas Persegipanjang : " + luas);
    }
}


  • Kasus 6
import java.io.*;
import java.util.Scanner;

public class enam {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("========== MENU ==========");
        System.out.println("1. Contoh Program If then");
        System.out.println("2. Contoh Program For");
        System.out.println("3. Contoh Program Do-While");
        System.out.print("Masukan Pilihan (1/2/3)=");
        Integer pilihan = sc.nextInt();
        switch (pilihan) {
            case 1:
                System.out.print("Masukan angka=");
                Integer angka = sc.nextInt();
                if (angka % 2 == 0) {
                    System.out.println("genap");
                } else {
                    System.out.println("ganjil");
                }
                break;
            case 2:
                System.out.print("Masukan jumlah perulangan=");
                Integer ulang = sc.nextInt();

                for (int i = 1; i <= ulang; i++) {
                    System.out.println(i);
                }
                break;
            case 3:
                int i = 1;
                System.out.print("Masukan jumlah perulangan=");
                Integer ulang2 = sc.nextInt();
                do {
                    System.out.println(i);
                    i++;
                } while (i <= ulang2);
                break;
        }
    }
}


TENTANG CLASS

0 komentar

Senin, 11 November 2013

Dalam object oriented programming kita mulai mengenal adanya class & object. Class adalah sebuah bagian dari program , yang memiliki semua atribut atribut seperti halnya yang dimiliki oleh program biasa akan tetapi class tidak bersifat “Main” atau utama, sehingga sebuah class tidak akan bisa dirun dan dieksekusi tanpa menggunakan main class, atau class utama. Pada pemrograman struktural kita menaruh kodingan kita pada main class sehingga kita langsung bisa mengkompile dan mengeksekusi program kita tersebut, dimana pada pemrograman berorientasi object sekarang ini kita akan mulai menggunakan class untuk menaruh program kita, sehingga program kita dapat digunakan kembali dan dipadukan dengan program program lain oleh orang lain.
Ketika menggunakan class, kita tidak dapat menyamakannya seperti saat kita memprogram dengan basis pemrograman struktural. Class disini hanya bersifat sebagi cetakan atau “blueprint” dari program yang kita buat, untuk dapat mengeksekusi sebuah class kita harus melakukan “instansiasi” yaitu membuat sebuah object dari class yang telah kita buat. Untuk lebih mudahnya kita ibaratkan sebuah class adalah sebuah cetakan roti dan roti adalah sebuah object dimana proses pembuatan roti disebut sebagai instansiasi. Dalam hal ini sama halnya seperti cetakan roti, sebuah class juga bisa digunakan berkali kali untuk membuat sebuah object, dimana satu object dengan yang lainnya tidaklah memiliki keterkaitan meskipun berasal dari kelas yang sama.
Dalam pembuatan suatu class kita bisa jadikan satu file dengan main class atau juga bisa kita pisahkan menjadi file sendiri. Dimana dalam menaruh program kita di class tersebut, kita tidak bisa sembarang menaruh dalam class tersebut, melainkan kita harus membuat fungsi fungsi, yang nantinya akan bisa kita eksekusi melalui instance object yang telah kita buat.
Untuk lebih jelasnya perhatikan contoh dibawah ini :
public class Main
{
public static void main(String[] args) {
Penjumlahan p = new Penjumlahan(5,9);
System.out.println(p.hitungPenjumlahan());
Penjumlahan q = new Penjumlahan(7,9);
System.out.println(q.hitungPenjumlahan());
}
}
class Penjumlahan
{
int a;
int b;
public Penjumlahan(int a, int b)
{
this.a = a;
this.b = b;
}
public int hitungPenjumlahan()
{
return a + b;
}
}
Dalam contoh tersebut Penjumlahan adalah suatu class yang memiliki constructor(fungsi yang pertama kali dieksekusi ketika class diinstansiasi) yang membutuhkan passing 2 variable integer. Dimana dalam class tersebut juga terdapat method untuk menjumlahlkan dua bilangan yang telah dipassing pada constructor tersebut.
class Penjumlahan adalah pendefinisian nama class
public Penjumlahan(int a, int b) merupakan constructor dari class penjumlahan tersebut
int hitungPenjumlahan() merupakan method yang digunakan untuk menjumlahkan dua variabel integer yang telah dipassingkan pada constructor tadi
Penjumlahan p = new Penjumlahan(5,9) proses instansiasi dari class penjumlahan yang membentuk object p, dimana object p mengacu pada struktur yang ada dalam class penjumlahan. Keyword new adalah keyword yang digunakan untuk menginstansiasi sebuah object dari sebuah class dimana berikutnya diikuti oleh construcor dari class tersebut.
Operator this adalah operator yang digunakan untuk mengakses variabel yang paling global dari suatu class jika terdapat dua variabel yang memilki nama yang sama dam scope yang berbeda.
Operator (.) dot adalah operator yang digunakan untuk mengakses atribut atribut yang terdapat didalam class yang telah diinstansiasi tersebut.
Didalam contoh tersebut akan menghasilkan dua output yang berbeda yaitu 14 & 16, meskipun berasal dari class yang sama akan tetapi dalam contoh tersebut terdapat dua object yang berbeda. Hal ini membuktikan bahwa tidak ada keterkaitan pada satu object dengan object lainnya meski berasal dari class yang sama
Access Modifier
Didalam contoh tersebut kita juga bisa melihat keyword keyword seperti public , private dan protected , keyword keyword semacam itu disebut dengan access modifier yaitu memberikan spesifikasi akses pada class maupun method.
public : Adalah ditujukan untuk atribut atribut yang dapat diakses oleh siapapun dan dimanapun senyampang masih dalam scopenya
private : Adalah pembatasan akses hanya untuk di dalam class tersebut
protected : Adalah ditujukan untuk atribut atribut yang hanya dapat diakses oleh child class dari class tersebut (child class akan dibahas lebih lanjut pada inheritance)
Encapsulation
Encapsulation adalah proses packing semua variable dalam suatu class menjadi private dan membuat method mutator dan accessor pada class tersebut. Untuk lebih jelasnya perhatikan contoh dibawah ini :
public class Main {
public static void main(String[] args) {
Penjumlahan p = new Penjumlahan(5,9);
System.out.println(p.hitungPenjumlahan());
Penjumlahan q = new Penjumlahan(7,9);
System.out.println(q.hitungPenjumlahan());
}
}
class Penjumlahan {
private int a;
private int b;
public Penjumlahan(int a, int b) {
this.a = a;
this.b = b;
}
public int hitungPenjumlahan() {
return getA() + getB();
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
Dalam contoh sebelumnya variable a dan b tidak memiliki access modifier, sehingga dianggap public oleh java, sekarang kita meletakan access modifier private pada variable tersebut sehingga varibel tersebut tidak dapat dengan bebas diakses dari luar class, sehingga untuk merubah variable tersebut kita memerlukan method yang bernama mutator yaitu public int getA() & public int getB() yang mereturn nilai a dan b. Dan untuk dapat mendapatkan / mengetahui nilai dari a & b kita menggunakan method yang bernama Accessor yaitu public void setA(int a) & public void setB(int b) dimana method tersebut akan meng-assign nilai a dengan nilai a baru yang kita passingkan pada variable tersebut.
Encapsulation ini berfungsi untuk membatasi akses pada variable varibel yang ada didalam class secara bebas dari luar class, sehingga kita dapat membuat program yang lebih efektif dan efisien.