Jumat, 26 September 2014

Software Requirement Specifications

        Secara sederhana, Software Requirement Specifications (SRS) adalah dokumen yang menjelaskan tentang berbagai kebutuhan yang harus dipenuhi oleh suatu software. Dokumen ini dibuat oleh developer (pembuat software) setelah menggali informasi dari calon pemakai software. Pembuatannya pun seharusnya mengikuti standar yang ada dan paling diakui oleh para praktisi rekayasa software di dunia. Oleh karena itu, standar yang akan dibahas di sini adalah standar dari IEEE.
                IEEE membuat standar SRS agar dokumen penting itu tidak ambigu dan tentu saja komplit. Lengkap. Dengan standar itu, si penggguna dapat mencurahkan semua keinginannya terkait software tersebut dengan jelas dan akurat sehingga sang developer pun dapat memahami apa yang diinginkan pengguna dengan tepat. Bahkan, bagi perorangan, standar ini dapat membantunya dalam mengembangkan outline SRS yang baku khusus untuk perusahaannya, membantunya membuat dokumen SRS dengan format dan isi yang standar (minimal), serta membantunya mengembangkan rincian-rincian pendukung lainnya.
Fungsi dokumen SRS :
  1. Mencatat semua kebutuhan calon pengguna perangkat lunak.
  2. Sebagai kontrol saat proses pengembangan perangkat lunak dilakukan, sehingga setiap tahapan pengerjaan pengembangan sesuai dengan yang diharapkan.
  3. Digunakan sebagai acuan pada saat pengujian dilakukan sehingga hasil akhir sesuai dengan yang dibutuhkan.
  4. Dijadikan pedoman jika terdapat perbedaan pendapat antara calon pemakai dengan pengembang sistem terhadap hasil dari pengembangan perangkat lunak
  5. Bukti bahwa pengembang telah melakukan tahap software reguirements analysis.
Kriteria dokument SRS yang baik :
  1. Benar (correct)
  2. Tepat (precise)
  3. Unambiguouity
  4. Lengkap (complete)
  5. Bisa diverifikasi (verifiable)
  6. Konsisten
  7. Understandable
  8. Bisa dimodifikasi (modifiedable)
  9. Dapat ditelusuri (traceable)
  10. Harus dapat dibedakan bagian what (bagian spesifikasi) dan how (bagian yang menjelaskan bagaimana menjelaskan what tadi)
  11. Dapat mencakup dan melingkupi seluruh sistem
  12. Dapat melingkupi semua lingkungan operasional, misalnya interaksi fisik dan operasional.
  13. Bisa menggambarkan sistem seperti yang dilihat oleh pemakai.
  14. Harus toleran (bisa menerima) terhadap ketidaklengkapan, ketidakpastian (ambiguous) dan  ketidak konsistenan.
  15. Harus bisa dilokalisasi dengan sebuah coupling, yaitu hubungan ketergantungan antara dua model yang tidak terlalu erat.
       
Orang yang terlibat dalam pembuatan SRS :
  1. Pemakai (user)
    • Merupakan orang yang akan mengoperasikan/menggunakan produk final dari perangkat lunak yang dibuat.
  2.  Sponsor/ Client
    •  Orang atau perusahaan yang mau membuat sistem (yang menentukan).
  3.  Sistem analyst (sistem engineer)
    •  Adalah orang yang biasa melakukan kontak teknik pertama dengan client. Bertugas menganalisis persoalan, menerima requirement dan menulis requirement.
  4.  Software engineer
    •  Merupakan orang yang bekerja setelah kebutuhan perangkat lunak dibuat (bekerja sama dengan sistem engineer berdasarkan SRS)
  5.  Programmaer
    •  Orang yang akan menerima spesifikasi perancangan perangkat lunak, membuat kode dalam bentuk modul, menguji dan memeriksa (tes) modul.
  6. Test integration group
    • Kumpulan orang yang melakukan tes dan mengintegrasi modul.
  7.  Maintenance group
    •  Orang yang memantau dan merawat performansi sistem perangkat lunak yang dibuat selama pelaksanaan dan pada saat modifikasi muncul (80% dari pekerjaan).
  8. Technical Support
    • Orang-orang yang mengelola (manage) pengembang perangkat lunak, termasuk konsultan atau orang yang mempunyai kepandaian lebih tinggi.
  9. Staff dan Clerical Work
    • Bertugas mengetik, memasukkan data dan membuat dokumen.
Ada beberapa istilah yang digunakan dan harus diketahui untuk memahami standar SRS yang dibuat IEEE ini. Istilah-istilah tersebut adalah:
  • Kontrak: dokumen yang mengikat secara hukum dan disepakati oleh customer dan supplier, termasuk syarat-syarat teknologi dan organisasi, biaya, serta jadwal pengerjaan. Kontrak bisa mengandung sesuatu yang kurang formal tetapi bermanfaat, seperti komitmen atau harapan dari pihak yang terlibat.
  • Customer (pelanggan) : Pihak yang membayar untuk produk dan biasanya yang menentukan persyaratan (requirements).
  • Supplier (pemasok): Pihak yang membuat produk software untuk customer.
  • Pengguna: Pihak yang mengoperasikan atau berinteraksi langsung dengan software. Pengguna dan customer biasanya bukan orang yang sama.
     
SRS yang baik akan bermanfaat bagi customer, supplier, ataupun perorangan. Manfaat-manfaat tersebut antara lain:
  1. Sebagai bentuk perjanjian antara customer dan supplier tentang software apa yang akan dibuat
  2. Mengurangi beban dalam proses pengembangan software
  3. Sebagai bahan perkiraan biaya dan rencana penjadwalan
  4. Sebagai dasar validasi dan verifikasi software di ujung penyelesaian proyek nantinya
  5. Memfasilitasi transfer, semisal software tersebut ingin ditransfer ke pengguna atau mesin-mesin yang lain. Customer pun merasa mudah jika ingin mentransfer software ke bagian-bagian lain dalam organisasinya. Bahkan, jika terjadi pergantian personil developer, proyek dapat mudah ditransfer ke personil baru dengan memahami SRS ini.
  6. Mendasari perbaikan produk software di kemudian hari. Jadi, kadang SRS boleh diperbaiki dengan alasan dan mekanisme tertentu serta atas kesepakatan antara customer dan developer.

Referensi
http://blog.binadarma.ac.id/yantox_ska/2013/02/05/software-requirements-spefication-srs-atau-spesifikasi-kebutuhan-perangkat-lunak-skpl.html
http://cisini.wordpress.com/2012/10/16/srs/
 

Minggu, 21 September 2014

Enkapsulasi, Inheritance, dan Polimorfisme

ENKAPSULASI
Enkapsulasi adalah pembungkus, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. Konsep enkapsulasi sangat penting dilakukan untuk menjaga kebutuhan program agar dapat diakses sewaktu-waktu, sekaligus menjaga program tersebut.
Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak.
Begitulah konsep kerja dari enkapsulasi, dia akan melindungi sebuah program dari akses ataupun intervensi dari program lain yang mempengaruhinya. Hal ini sangat menjaga keutuhan program yang telah dibuat dengan konsep dan rencana yang sudah ditentukan dari awal.
Dalam JAVA, dasar enkapsulasi adalah class. anda membuat suatu class yang menyatakan bahwa variable atau method sebuah class tidak dapat diakses oleh class lain dengan menjadikan class tersebut private, atau dengan menjadikan class tersebut protected, yaitu hanya bisa diakses oleh turunannya.
lain hal jika anda menggunakan class public, dalam hal ini dapat diakses oleh sembarang class karena bersifat umum.
Contoh program sederhana ENKAPSULASI :
import java.io.*;
public class lingkaran{
      private double radius;
      public lingkaran(double radius){
                  this.radius=radius;
      }
      public void Luas(){
                  double luas= 3.14*radius*radius;
                  System.out.println("Luas lingkaran: "+luas);
      }
      public void Keliling(){
                  double keliling= 2.0*3.14*radius;
                  System.out.println("Keliling Lingkaran: "+keliling);
      }
      public static void main(String[]args)throws Exception{
                  DataInputStream dis= new DataInputStream(System.in);
                  System.out.print("input radius: ");
                  String input= dis.readLine();
                  double i= Double.parseDouble(input);
                  lingkaran A= new lingkaran(i);
                  A.Luas();
                  A.Keliling();
      }
}
Contoh Outputnya :
Sumber referensi :
http://setyonugroho09.wordpress.com/2010/02/17/konsep-enkapsulasiencapsulation-pada-object-oriented-programming-dengan-java/


INHERITANCE
Pewarisan (Inheritance) merupakan sifat dalam bahasa berorientasi objek yang memungkinkan sifat-sifat dari suatu kelas diturunkan ke kelas lain. Sistem OOP memungkinkan kita untuk mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada. Penurunan sifat ini bisa dilakukan dilakukan secara bertingkat-tingkat, sehingga semakin ke bawah maka kelas tersebut semakin spesifik.
pewarisan memberikan atau mewariskan sesuatu kepada keturunan berikutnya. misalnya, seorang anak pasti akan mewarisi beberapa sifat atau perilaku yang dimiliki oleh ibu/bapaknya. dalam konteks ini, suatu kelas dalam program dapat diturunkan menjadi kelas-kelas baru lainnya yang akan mewarisi beberapa sifat atau perilaku dari kelas induknya. sebagai contoh, apabila anda memiliki kelas A dalam program yang anda buat maka anda dapat membentuk kelas-kelas turunan dari kelas A tersebut(Misalnya, kelas B) yang mewarisi sifat-sifat yang terkandung dalam kelas A. dalam proses pembuatan kelas turunan tersebut, Anda dapat menambahkan sifat dan perilaku baru ke dalam kelas B, yang sebelumnya tidak dimiliki dalam kelas A. Dalam terminologi java, kelas induk dinamakan dengan superclass dankelas turunan dinamakan dengan subclass. untuk membuat kelas anak atau kelas turunan berdasarkan class yang ada, anda dapat menggunakan kata kunci extends.
keterangan : extends artinya diturunkan.
contoh program:
program induk kakek.java
public class kakek
{
    protected String namekakek;
    protected String address;
    public kakek()
    {
        System.out.println(“\n Program Demo Inheritance”);
        System.out.println(“============================”);
        System.out.println(”   Masukan construktor kakek  “);
        System.out.println(“–Dijalankan oleh class Bapak–“);
        namekakek=”Doni wijaya”;
        address=”Merauke”;
    }
    public kakek(String name,String address)
    {
        this.namekakek=namekakek;
        this.address=address;
    }    
    public String getName()
    {
        return namekakek;
    }
    public String getAddress()
    {
        return address;
    }
}
program anak/turunan:
program bapak.java
public class bapak extends kakek
{
    protected String namebapak;
    protected String addressbapak;
    public bapak()
    {
        System.out.println(“Nama Kakek :”+namekakek);
        System.out.println(“Address kakek :”+address);
        System.out.println(“\n”);
        System.out.println(” Masukan Construktor Bapak “);
        System.out.println(“—-dijalankan class cucu—-“);
        namebapak=”Ridho Saputra”;
        addressbapak=”Yogyakarta”;
        }
        public bapak(String namebapak,String addressbapak)
        {
            this.namebapak=namebapak;
            this.addressbapak=addressbapak;
        }
        public String getNama()
        {
            return namebapak;
        }
        public String getAddress()
        {
            return addressbapak;
        }
        public static void main(String []args)
        {
            bapak sari=new bapak();
        }
}
program cucu.java
public class cucu extends bapak
{
    public cucu()
    {
        System.out.println(“Nama Bapak  :”+namebapak);
        System.out.println(“Address Bapak :”+addressbapak);
    }
    public static void main(String []args)
    {
        String namacucu;
        cucu lagan=new cucu();
        System.out.println(“\nSaya adalah CUCU”);
        System.out.println(“Nama Saya : Samuel”);
        System.out.println(“”);
    }
}
jika ingin menjalankan program datas makan kita perlu mengkompile terlebih dahulu class kakek.java, jangan di run karena main programnya terdapat dalam class bapak.java dan cucu.java.
jika kita menjalankan class bapak maka akan seperti berikut tampilannya
 jika kita menjalankan program cucu maka akan seperti berikut tampilannya:
 http://doniavira.wordpress.com/2012/04/19/pewarisan-inheritance/



POLIMORFISME
Polimorfisme adalah metode yang digunakan untuk menyatakan satu nama yang merujuk ke beberapa fungsi berbeda.
Ada 2 cara Java dalam mengimplementasikan polimorfisme , yaitu:
1. Methode overloading
2. Methode overriding dengan pewarisan  
Ok tanpa basa-basi lagi di sini ada contoh program polimorfisme, yang mana di dalamnya terdapat Program Interface juga yang bisa sekalian sobat pelajari. Bentuk polimorfismenya bisa dilihat di Class Utama yang berwarna merah pada program di bawah ini.
  • Interface Poligon 
interface Poligon {
  // Deklarasi methode
  double Luas();
  double Keliling();
  String displayInfo();
}
Save dengan nama file Poligon.java
  • Class Lingkaran
class Lingkaran implements Poligon {
  // Deklarasi atribut
  private double radius;
  private final double PI = 3.14;

  // Definisi method
  // Konstruktor
  public Lingkaran(double r) {
    radius = r;
  }

  // Selector
  public double getRadius() {
    return radius;
  }

  // Definisi method dari kelas induk
  public double Luas() {
    return (PI*radius*radius);
  }

  public double Keliling() {
    return (2*PI*radius);
  }
  
  public String displayInfo() {
    return ( "Lingkaran"
           + "\no Jari-jari: " + (float)getRadius()
           + "\no Luas     : " + (float)Luas()
           + "\no Keliling : " + (float)Keliling() );
  }
}
Save dengan nama file Lingkaran.java
  • Class Segi Empat
class SegiEmpat implements Poligon {
  // Deklarasi atribut
  private double panjang, lebar;

  // Definisi method
  // Konstruktor
  public SegiEmpat(double p, double l) {
    panjang = p;
    lebar = l;
  }

  // Selector
  public double getPanjang() {
    return panjang;
  }

  public double getLebar() {
    return lebar;
  }

  // Definisi method dari kelas induk
  public double Luas() {
    return (panjang*lebar);
  }

  public double Keliling() {
    return (2*(panjang+lebar));
  }

  public String displayInfo() {
    return ( "Segi Empat"
           + "\no Panjang  : " + (float)getPanjang()
           + "\no Lebar    : " + (float)getLebar()
           + "\no Luas     : " + (float)Luas()
           + "\no Keliling : " + (float)Keliling() );
  }
}
Save dengan nama file SegiEmpat.java
  • Class Segitiga
import java.lang.Math;

class SegiTiga implements Poligon {
  // Deklarasi atribut
  private double alas, tinggi;

  // Definisi method
  // Konstruktor
  public SegiTiga(double a, double t) {
    alas = a;
    tinggi = t;
  }

  // Selector
  public double getAlas() {
    return alas;
  }

  public double getTinggi() {
    return tinggi;
  }

  // Definisi method dari kelas induk
  public double Luas() {
    return (alas*tinggi)/2;
  }

  public double Keliling() {
    double d;
    d = (double)Math.sqrt((alas*alas)+(tinggi*tinggi));
    return (alas+tinggi+d);
  }
  
  public String displayInfo() {
    return ( "Segi Tiga"
           + "\no Alas     : " + (float)getAlas()
           + "\no Tinggi   : " + (float)getTinggi()
           + "\no Luas     : " + (float)Luas()
           + "\no Keliling : " + (float)Keliling() );
  }
}
Save dengan nama file SegiTiga.java
  • Class Utama
// Program utama
class TesPoligon {
  public static void main(String args[]) {
    // Deklarasi array
    Poligon p[] = new Poligon[4];

    SegiEmpat se = new SegiEmpat(17,8);
    SegiTiga sg =  new SegiTiga(21,4);
    Lingkaran lg = new Lingkaran (10);
    Lingkaran lh =  new Lingkaran (7);
   
    //bentuk polimorfisme
    p[0] = se; 
    p[1] = sg;
    p[2] = lg;
    p[3] = lh;
    

    Lingkaran x = new Lingkaran(8);
   
    // Display informasi
    for (int i=0; i < p.length; i++) {
      System.out.println("\n"+p[i].displayInfo());
    }
  }
}
Save dengan nama file TesPoligon.java

Cara menjalankan program :
1. Save semua file di atas
2. Jalankan satu persatu filenya terlebih dahulu
3. Apabila sudah jalan semua jalankan program utama TesPoligon.java




Output Program
Jadi intinya pada program di atas adalah Class Poligon mempunyai bentuk bentuk banyak dari class segitiga, class segi empat dan kelas lingkaran.
http://top-ilmu.blogspot.com/2012/11/contoh-program-java-polimorfisme.html

Rabu, 10 September 2014

PENGERTIAN & KONSEP OOP

A. Pengertian OOP (Object Oriented Programming) 
OOP (Object Oriented Programming) adalah suatu metode pemrograman yang berorientasi kepada objek. Tujuan dari OOP diciptakan adalah untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada di kehidupan sehari-hari. Jadi setiap bagian dari suatu permasalahan adalah objek, nah objek itu sendiri merupakan gabungan dari beberapa objek yang lebih kecil lagi. Saya ambil contoh Pesawat, Pesawat adalah sebuah objek. Pesawat itu sendiri terbentuk dari beberapa objek yang lebih kecil lagi seperti mesin, roda, baling-baling, kursi, dll. Pesawat sebagai objek yang terbentuk dari objek-objek yang lebih kecil saling berhubungan, berinteraksi, berkomunikasi dan saling mengirim pesan kepada objek-objek yang lainnya. Begitu juga dengan program, sebuah objek yang besar dibentuk dari beberapa objek yang lebih kecil, objek-objek itu saling berkomunikasi, dan saling berkirim pesan kepada objek yang lain.
B. Konsep OOP (Object Oriented Programming) 
1. Kelas Abstrak (Class Abstraksi)
2. Enkapsulasi (encapsulation)
3. Pewarisan (Inheritance)
4. Polimorfisme (polymorphism)
1. Kelas Abstrak (Class Abstraksi)
    • Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
    • Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
    • Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
    • Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).
2. Enkapsulasi (encapsulation)
    • Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
    • Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
    • Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
    • Contoh: kelas mobil menyediakan antarmuka fungsi untuk menjalankan mobil tersebut, tanpa kita perlu tahu komposisi bahan bakar, udara dan kalor yang diperlukan untuk proses tersebut.
3. Pewarisan (Inheritance)
    • Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
    • Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
    • Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
    • Dengan konsep pewarisan, seorang programmer dapat menggunakan kode yang telah ditulisnya pada kelas super berulang kali pada kelas-kelas turunannya tanpa harus menulis ulang semua kodekode itu.
4. Polimorfisme (polymorphism)
    • Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
    • Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
    • Method overriding.
    • Method name overloading.
C. Karakteristik OOP (Object Oriented Programming) 
  • Semua adalah objek.
  • Komputasi dilakukan dengan komunikasi antar objek. Setiap objek berkomunikasi dengan objek yang lain melalui pengiriman dan penerimaan pesan.
  • Sebuah pesan merupakan permintaan atas sekumpulan aksi dengan semua argumen yang diperlukan untuk menyelesaikan suatu tugas tertentu.
  • Setiap objek memiliki memori sendiri, yang dapat terdiri dari objek-objek lainnya.
  • Setiap objek adalah wakil atau representasi dari suatu kelas. Sebuah kelas dapat mewakili sekelompok objek yang sama.
  • Kelas merupakan kumpulan tingkah laku yang berkaitan dengan suatu objek. Jadi, semua objek yang merupakan wakil dari kelas yang sama dapat melakukan aksi yang sama pula.
  • Kelas-kelas diorganisasikan ke dalam struktur pohon yang berakar tunggal, yang dinamakan dengan jenjang pewarisan (inheritance hierarchy).
  • Setiap objek pada umumnya memiliki tiga sifat, yaitu keadaan, operasi dan identitas objek.
  • Operasi merupakan tindakan yang dapat dilakukan oleh sebuah objek.
  • Keadaan objek merupakan koleksi dari seluruh informasi yang dimiliki oleh objek pada suatu saat.
  • Informasi yang terkandung pada objek tersebut pada akhirnya memberikan identitas khusus yang membedakan suatu objek dengan objek lainnya.
Contoh Program
class Kendaraan{
int posisi1;
int kecepatan;
int posisi2;
int pergerakan;
int getPosisi1(){
return posisi1;
}
void setPosisi1(int theposisi1){
posisi1 = theposisi1;
}
int getKecepatan(){
return kecepatan;
}
void setKecepatan(int thekecepatan){
kecepatan = thekecepatan;
}
posisi2 bergerak(){
int jarak;
int waktu;
posisi2 = getKecepatan * waktu;
}
}
class Mobil extends Kendaraan{
}
class KendaraanTestDrive{
Mobil avanza = new Mobil;
avanza.setPosisi1(30);
avanza.setKecepatan(45);
avanza.bergerak();
}


SEMOGA BERMANFAAT
Referensi :
2. Jeni-dasarpemrogramanjava.pdf
3. Codenhead-javabasic.pdf