Jumat, 24 Juni 2011

Modul 6 Praktikum PBO : Package

Ni modul trakhir dari praktikum PBO temen2... langsung ja y bahas....tentang package...

Package adalah Package adalah cara Java untuk membuat suatu pustaka class. Kita dapat membuat package berisi sekumpulan class dan menggunakan package tersebut dalam class atau program lain tanpa memindah kumpulan class ke dalam direktori kerja.

Pada suatu package, class dapat digunakan Gunakan hak akses public, karena dengan menggunakan keyword Public dapat diakses didalam class itu sendiri, dapat diakses dengan menggunakan metode extend dan instan pada paket yang sama, serta dapat diakses dengan metode extend maupun instan dalam paket yang berbeda. Artinya hak akses public dapat diakses oleh sembarang object manapun dan dimanapun posisinya serta dengan apapun caranyanamun, ketika file program tidak berada di dalam satu direktori/ berada dalam package yang berbeda maka diharuskan untuk melakukan kompilasi menggunakan option-class path

Pada package, kata kunci yang harus ditulis terlebih dahulu sebelum import adalah
Deklarasi package harus diletakkan pada bagian paling awal (sebelum deklarasi import) dari source code setiap kelas yang dibungkus package tersebut.

pada package juga untuh mmbedakan package dengan class, maka pada penulisan package harus memiliki syaratt Diawali huruf kecil , Menggambarkan kelas-kelas yang dibungkusnya, Harus unik (bertbeda dengan namapackage standard) , Merepresentasikan path dari package tersebut., Harus sama dengan nama direktorinya.

Implementasi dan Tugas Akhir
Pada bagian kegiatan praktikum dan Tugas akhir ini, kita gabung yaitu kita akan belajar membuat class yang dikelompokkan dalam package kemudian menggunakan package ini dari class lain. Modifikasilah kode program interface MtkDasar.java, dan Pecahan.java agar dapat menghasilkan return value berupa Object. Lengkapi interface MtkDasar dengan kemampuan matematika dasar yang lain yaitu kali (untuk mengerjakan operasi perkalian), dan bagi (untuk mengerjakan operasi pembagian). Sesuaikan kedua class lain, Pecahan dan CobaPecahan.
Source codenya sebagai berikut:Source codenya sebagai berikut:
Class MtkDasar.java



/*

/*interface MtkDasar*/
/*file Matematika/MtkDasar.java*/
package Matematika;
public interface MtkDasar {
String tambah(Object obj);
String kurang(Object obj);
String kali(Object obj);
String bagi(Object obj);
}



Class pecahan.java


/*

/*kelas Pecahan*/
/*file Matematika/Pecahan.java*/
package Matematika;
public class Pecahan implements Matematika.MtkDasar{
private int pembilang, penyebut;
public Pecahan(int pembilang, int penyebut) {
this.pembilang=pembilang;
this.penyebut=penyebut;
}
public int getValuePembilang(){
return this.pembilang;
}
public int getValuePenyebut(){
return this.penyebut;
}
public int penyebutHsl(int a,int b){
int hsl;
if (a%b==0 || b%a==0){
if (a>=b){
hsl=(a/b)*b;
}else{
hsl=(b/a)*a;
}
}else{
hsl=a*b;
}
return hsl;
}
public String tambah(Object obj){
StringBuffer strHasil= new StringBuffer(" ");
Pecahan data = new Pecahan(pembilang,penyebut);
pembilang=data.getValuePembilang();
penyebut=data.getValuePenyebut();
Pecahan tambah = (Pecahan)obj;
int pembilang1=tambah.getValuePembilang();
int penyebut1=tambah.getValuePenyebut();
int penyHsl=tambah.penyebutHsl(penyebut,penyebut1);
int hasil = (pembilang*(penyHsl/penyebut))+(pembilang1*(penyHsl/penyebut1));
strHasil.insert(0,hasil);
strHasil.insert(strHasil.length()-1,"/");
strHasil.insert(strHasil.length()-1,penyHsl);
return(strHasil.toString());
}
public String kurang(Object obj){
StringBuffer strHasil= new StringBuffer(" ");
Pecahan data = new Pecahan(pembilang,penyebut);
pembilang=data.getValuePembilang();
penyebut=data.getValuePenyebut();
Pecahan tambah = (Pecahan)obj;
int pembilang1=tambah.getValuePembilang();
int penyebut1=tambah.getValuePenyebut();
int penyHsl=tambah.penyebutHsl(penyebut,penyebut1);
int hasil = (pembilang*(penyHsl/penyebut))-(pembilang1*(penyHsl/penyebut1));
strHasil.insert(0,hasil);
strHasil.insert(strHasil.length()-1,"/");
strHasil.insert(strHasil.length()-1,penyHsl);
return(strHasil.toString());
}
public String kali(Object obj){
StringBuffer strHasil= new StringBuffer(" ");
Pecahan data = new Pecahan(pembilang,penyebut);
pembilang=data.getValuePembilang();
penyebut=data.getValuePenyebut();
Pecahan kali = (Pecahan)obj;
int pembilang1=kali.getValuePembilang();
int penyebut1=kali.getValuePenyebut();
int penyHsl=kali.penyebutHsl(penyebut,penyebut1);
int hasil = (pembilang)*(pembilang1);
strHasil.insert(0,hasil);
strHasil.insert(strHasil.length()-1,"/");
strHasil.insert(strHasil.length()-1,penyHsl);
return(strHasil.toString());
}
public String bagi(Object obj){
StringBuffer strHasil= new StringBuffer(" ");
Pecahan data = new Pecahan(pembilang,penyebut);
pembilang=data.getValuePembilang();
penyebut=data.getValuePenyebut();
Pecahan bagi = (Pecahan)obj;
int pembilang1=bagi.getValuePembilang();
int penyebut1=bagi.getValuePenyebut();
int penyHsl=bagi.penyebutHsl(penyebut,penyebut1);
int hasil = (penyebut)*(pembilang1);
strHasil.insert(0,hasil);
strHasil.insert(strHasil.length()-1,"/");
strHasil.insert(strHasil.length()-1,penyHsl);
return(strHasil.toString());
}
public String toString() {
StringBuffer tampil= new StringBuffer(" ");
Pecahan data = new Pecahan(pembilang,penyebut);
tampil.insert(0,data.getValuePembilang());
tampil.insert(tampil.length()-1,"/");
tampil.insert(tampil.length()-1,data.getValuePenyebut());
return (tampil.toString());
}
}



Class CobaPecahan.java


/*

/*kelas cobaPecahan*/
/*file cobaPecahan.java*/
import Matematika.Pecahan;
import javax.swing.JOptionPane;
public class cobaPecahan {
public static void main(String[] args) {
int a; int b; int c; int d;
// TODO code application logic here
System.out.println("Format : a/b Operator[+/-] c/d = hasilPecahan \nexample: 1/2 + 3/4 = 5/4 \n");
System.out.println("Operator Prak PBO");
System.out.println("\n--------------------------\n");
System.out.print("Masukkan nilai a : ");
a = Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai a", "Input", JOptionPane.QUESTION_MESSAGE));
System.out.println(+a);
System.out.print("Masukkan nilai b : ");
b = Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai b", "Input", JOptionPane.QUESTION_MESSAGE));
System.out.println(+b);
System.out.print("\nMasukkan nilai Operator [+ ; - ; * ; /] : ");
String op= JOptionPane.showInputDialog("silahkan input operator");
System.out.print("\nMasukkan nilai c : ");
c = Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai c", "Input", JOptionPane.QUESTION_MESSAGE));
System.out.println(+c);
System.out.print("Masukkan nilai d : ");
d = Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai d", "Input", JOptionPane.QUESTION_MESSAGE));
System.out.println(+d);

Pecahan pecahan1 = new Pecahan(Integer.valueOf(a).intValue(),Integer.valueOf(b).intValue());
Pecahan pecahan2 = new Pecahan(Integer.valueOf(c).intValue(),Integer.valueOf(d).intValue());
if (op.compareTo("+")==0)
{
System.out.println("\n" + pecahan1 + "+ "+ c +"/"+ d + " = " + pecahan1.tambah(pecahan2));
}
else if (op.compareTo("-")==0)
{
System.out.println("\n" + pecahan1 + "- "+ c +"/"+ d + " = " + pecahan1.kurang(pecahan2));
}
else if (op.compareTo("*")==0)
{
System.out.println("\n" + pecahan1 + "* "+ c +"/"+ d + " = " + pecahan1.kali(pecahan2));
}
else if (op.compareTo("/")==0)
{
System.out.println("\n" + pecahan1 + " / "+ c +"/"+ d + " = " + pecahan1.bagi(pecahan2));
}
else
{
System.out.println("\nMaaf, Operator yang anda masukkan salah");
}
}
}



Hasil Running:

Semoga Bermanfaat!!!

»»  READMORE...

Modul 5 Praktikum PBO : Interface

Hai temen2... udah modul 5 ja nih, gak kerasa ya... lgsung ja bahas pa ja yang di modul 5 ni, cekidot!!!!

Interface adalah kelas abstract yang sepenuhnya. Yang berarti, semua metodenya adalah abstract. Ini bertujuan untuk menerapkan pewarisan jamak, yaitu suatu kelas tertentu dapat mewarisi kemampuan kelas lebih awal dari nenek moyang. Serta adanya kewajiban bagi kelas tersebut untuk mendefinisikan ulang semua metode yang ada pada kelas induk.

Yang dimaksud abstract method adalah method yang tidak memiliki body (hanya deklarasi method). Selain itu, pada interface juga dikenal dengan Overriding Method, yaitu fungsi yang dibuat pada class Anak di mana sebenarnya sudah diturunkan dari class induknya, sehingga fungsi pada anaknya meng-override ( menimpa ) fungsi dari induknya.

Pada interface juga dikenal dengan namanya instansiasi seperti halnya pada modul 1 yaitu Instansiasi objek bisa dilakukan dengan perintah new. Ketika suatu instansiasi class (pembuatan objek) dilakukan, maka secara otomatis akan memanggil function Constuctor milik class tersebut.

Implementasi

Pada bagian kegiatan praktikum ini, kita akan belajar membuat interface dan mengimplementasikannya dalam sebuah class. Source code seperti dibawah ini:


/*

import javax.swing.JOptionPane;
interface mycomparableee{
boolean greaterThan(Object obj);
boolean lessThan(Object obj);
boolean equal(Object obj);
}
interface Constants{
int min=10;
int max=100;
}
class FourDigitsNumber implements Constants, mycomparableee {
private int value;
public FourDigitsNumber(int value) {
/*latihan 1: atur agar nilai yang diinputkan dalam
constructor hanya berada di antara min - max
*/
this.value=value;
}
/*latihan 2: tambahkan method get untuk mengakses value*/

/*overriding method greaterThan*/
public int getValue(){
return value;
}
public boolean greaterThan(Object obj) {
/*casting from superclass to subclass*/
FourDigitsNumber number = (FourDigitsNumber)obj;
return ( value > number.getValue() );
}
public boolean lessThan(Object obj) {
/*casting from superclass to subclass*/
FourDigitsNumber number = (FourDigitsNumber)obj;
return ( value < number.getValue() ); } public boolean equal(Object obj) { /*casting from superclass to subclass*/ FourDigitsNumber number = (FourDigitsNumber)obj; return ( value == number.getValue() ); } /*latihan 3: lengkapi overriding method interface*/ } class ExInterface { public static void main(String [] args) { /*latihan 4: modifikasi agar user dapat menginputkan data*/ int value; String str=JOptionPane.showInputDialog("Masukkan nilai : "); value=Integer.parseInt(str); System.out.println("nilai anda: "+value); if ((value > 10) & (value < 100)) System.out.println("true"); else System.out.println("false"); } }


Hasil Running:


Tugas Akhir

Tugas Akhir kali ini, saya mendapat 2 soal untuk program, yaitu:
  • Segitiga, Lingkaran dan Segiempat adalah bentuk geometri yang dapat dihitung luasnya. Gambarkan diagram hirarki class untuk kasus ini. Kemudian tulis kode program untuk class dan buat program sederhana untuk keperluan pengujian: atur array dengan elemen berisi referensi ke setiap bentuk geometri di atas, masukkan data ke dalamnya dan gunakan untuk memanggil method guna menghitung luas dari setiap bentuk geometri tersebut.
Source codenya sebagai berikut:
Class Luas.java

/*

import javax.swing.*;
interface Induk {
double LuasSegi3(double a, double t);
double LuasSegi4(double s);
double Lingkaran(double r);
}
interface Constants{
double phi = 3.14;
}
class Luas implements Induk,Constants{
double a, t, s, r, LuasSegi3, LuasSegi4, Lingkaran;
Luas(double a,double t,double s,double r) {
this.a = a;
this.t = t;
this.s = s;
this.r = r;
}
public double LuasSegi3(double a, double t) {
return (0.5 * a * t);
}
public double LuasSegi4(double s) {
return (s * s);
}
public double Lingkaran(double r) {
return (phi * r * r);
}
public void CetakHasil() {
System.out.println("LuasSegi3 = "+LuasSegi3(a,t));
System.out.println("LuasSegi4 = "+LuasSegi4(s));
System.out.println("Lingkaran = "+Lingkaran(r));
}
}
class LuasBidang{
public static void main(String[] args) {
double a, t, s, r, LuasSegi3, LuasSegi4, Lingkaran;
System.out.println("Masukkan nilai alas : ");
a=Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai alasnya ","Input",JOptionPane.QUESTION_MESSAGE));
System.out.println(+a);
System.out.println("Masukkan nilai tinggi : ");
t=Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai tingginya ","Input",JOptionPane.QUESTION_MESSAGE));
System.out.println(+t);
System.out.println("Masukkan nilai sisinya : ");
s=Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai sisinya ","Input",JOptionPane.QUESTION_MESSAGE));
System.out.println(+s);
System.out.println("Masukkan nilai jari2 : ");
r=Integer.parseInt(JOptionPane.showInputDialog(null,"Input nilai jarinya ","Input",JOptionPane.QUESTION_MESSAGE));
System.out.println(+r);
Luas Luas1 = new Luas(a,t,s,r);
Luas1.CetakHasil();
}
}


Hasil Running:



  • Buatlah sebuah interface dengan nama MtkDasar yang berisi dua buah method head atau abstract
    String tambah(int a, int b);
    String kurang(int a, int b);
    Buatlah sebuah class dengan nama Pecahan yang terdiri dari: dua variabel bertipe int yaitu pembilang dan penyebut, sebuah constructor dengan dua parameter bertipe int, method set( ) / get( ), method toString( ). Pecahan harus mengimplementasikan interface MtkDasar. Buatlah sebuah class CobaPecahan yang berfungsi menguji class Pecahan.
Source codenya dibawah ini:
Hasil Running:
»»  READMORE...

Kamis, 16 Juni 2011

Modul 4 Praktikum PBO : Encapsulation

Kali ni kita bahas modul 4 pada praktikum PBO tentang Encapsulation atau pengkapsulan. langsung ja ya!!!!



Encapsulation dapat diartikan sebagai bungkusan (wrapper) pelindung program dan data yang sedang diolah. Sehingga pengguna (user) tidak perlu mengetahui isi dari method (fungsi) dan data yang digunakan. Pengguna (user) hanya cukup mengetahui tipe data, dan mengisi variable (atau membuat variable baru) sesuai dengan tipe data dari obyek yang bersangkutan.

Pada Encapsulation dikenal dengan namanya Information Hiding.Information Hiding adalah menyembunyikan attribute suatu objek dari objek lain. Encapsulation adalah menyembunyikan method suatu objek dari objek lain. Attribute maupun method disembunyikan dengan cara memberikan modifier private.Method dalam kelas yang sama, yang memberikan nilai pada attribute private disebut method setter, sedangkan method masih dalam kelas yang sama, yang mengambil nilai dari attribute private disebut getter.

Jika kita telah melakukan information hiding terhadap suatu attribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap attribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu attribut tersebut, hal tersebut kita kenal dengan Interface to Access

Pada encapsulation juga kita kenal istilah modifier public, private, dan protected:
Public adalah izin akses public sebuah atribut biasanya digunakan oleh sebuah class jika sebuah atribut diperbolehkan diakses secara langsung oleh class lain. sebuah atribut yang dinyatakan sebagai public dapat diakses secara langsung oleh class lain di luar class yang membungkusnya.
Private adalah izin akses private pada sebuah atribut biasanya digunakan oleh sebuah class untuk melindungi atribut-atributnya agar tidak dapat diakses oleh class lain. sebuah atribut yang dinyatakan sebagai private hanya dapat diakses secara langsung oleh kelas yang membungkusnya.
Protected adalah izin akses protected sebuah atribut biasanya digunakan oleh sebuah class jika sebuah atribut diperbolehkan diakses secara langsung oleh class lain yang merupakan class turunannya (inheritance). sebuah atribut yang dinyatakan sebagai protected tidak dapat diakses secara langsung oleh class lain di luar class yang membungkusnya kecuali class class turunannya.

Implementasi


/*
Disimpan dalam file andi.java
*/
class andi
{
public static void main(String arg[])
{
manusia andi= new manusia("Andi");
System.out.println("Nama= "+ andi.tampilkanNama());
andi.makan();
}
}


/*
Disimpan dalam file manusia.java
*/
class manusia
{
public String nama;

public manusia(String n)
{
this.nama = n;
}

public String tampilkanNama()
{
return nama;
}
protected void makan()
{
System.out.println("Nyam... nyam... nyam...");
}
public void kerja()
{
System.out.println("Kerja... kerjaaa...");
}
public void bunuhDiri()
{
System.out.println("Dor .. bruk...");
}
}


Hasil Running


Tugas Akhir


class TingkatAkses{
int a;
public int b;
private int c;

public void setc(int ci){
this.c=ci;
}

public int getc(){
return c;
}


}
class Coba{
public static void main (String []args){
TingkatAkses obj=new TingkatAkses();

obj.a=10;
obj.b=20;
// obj.ci=30;
obj.setc(30);

System.out.println("Nilai obj.a:" +obj.a);
System.out.println("Nilai obj.b:" +obj.b);
System.out.println("Nilai obj.c:" +obj.getc());
}
}


Hasil Running


Semoga Bermanfaat ya Kawand2.....!!!
»»  READMORE...

Kamis, 09 Juni 2011

Modul 3 Praktikum PBO : Inheritance

Hi...tmen2, Q blik lg nih byasa membahas tgs praktikum lagi, sekarang modul 3 nih, Qta membahas tentang Inheritance atau biasa kita kenal dengan Pewarisan, Inheritance ini tidak jauh beda kok sama yg namanya Polimorphism, stu lgi juga yg gak jauh beda lagi ma encapsulation, tp itu msh dibahas di modul 4 tnang ja ya,..tggu ja episode berikutnya he...lgsg cekidot aja!



Inheritance adalah yaitu penurunan sifat dari induk class kepada subclass atau anak class. Contohnya kita ambil dari contoh alami yaitu class kucing. Dalam dunia biologi, class kucing adalah hewan bertulang belakang atau vertebrata yang merupakan mamalia pemakan daging atau bertipe karnivora. Didalam Java, penurunan sifat tersebut disebut Inheritance. Penurunan sifat alami tersebut sama dengan penurunan yang terjadi dalam Java sehingga bisa dijadikan contoh inheritance dan bisa dituangkan kedalam Java.

Pada Inheritance terdapat 2 kelas, yaitu kelas Induk dan kelas turunan. Kelas Induk adalah kelas yang dibuat terlebih dahulu yang mewariskan suatu sifat pada kelas lain atau bisa kita sebut superclass. sedangkan, Kelas turunan adalah kelas yang menerima pewarisan atau bisa kita sebut dengan subclass.

Dalam pewarisan menggunaka kata kunci extends dimana itu berarti kelas tersebut merupakan subclass dari kelas lain. Sedangkan kata kunci super itu berarti Untuk memanggil konstruktor kelas induk dari kelas anak, dan harus ditulis di barispertama pada konstruktor kelas anak.

Implementasi pada modul ini yaitu membuat class yang dikelompokkan dalam package kemudian menggunakan package ini dari class lain.
Berikut Source codenya:


/*langkah ke-1: Membuat Class Rumah*/
class Rumah { private String a = " Rumahmewah "; public void info() { System.out.println (" "); System.out.println (" Rumah = "+a); } }


/*langkah ke-2: Membuat Class rumahindah turunan dari Rumah*/
class rumahindah extends Rumah
{
private String b = " tombol alarm ";
public void info()
{
System.out.println (" ");
super.info(); //super mewarisi sifat dari parent dan dirinya sendiri
System.out.println (" rumahindah = "+b);
}
}


/*langkah ke-3: Membuat Main Program dengan Nama Class TipeRumah */
public class TipeRumah
{
public static void main ( String[]args )
{
rumahindah C = new rumahindah();
C.info();
}
}

Hasil Running:

Tugas akhir modul ini yaitu membuat
program java untuk menurunkan 2 buah kelas turunan dari kelas induk yang berupa lingkaran dimana program ini dapat menghitung luas dan keliling lingkaran, dan berikut source codenya:


/*langkah ke-1: Membuat Class Lingkaranku*/
class Lingkaranku
{
public double r;
public double phi=3.14;
public void panjangr()
{
System.out.println("Panjang jari-jari : "+ r);
}
}


/*langkah ke-2: Membuat Class Keliling turunan dari Lingkaranku*/
class Keliling extends Lingkaranku
{
double kel,r2,P;
public void Hitungkel()
{
P=super.phi;
r2=super.r;
kel=2*r2*P;
System.out.println("Keliling lingkaran : "+ kel);
}
}




/*langkah ke-3: Membuat Class Luas turunan dari Lingkaranku*/
class Luas extends Lingkaranku
{
double l,r2,P;
public void Hitungl()
{
P=super.phi;
r2=super.r;
l=2*P*r2*r2;
System.out.println("Luas lingkaran = "+ l);
}
}





/*langkah ke-4: Membuat Main Program dengan Nama Class lingkaran */
public class lingkaran
{
public static void main (String[] args)
{
Keliling kel1=new Keliling();
Luas l1=new Luas();
kel1.r=6;
l1.r=9;

kel1.Hitungkel();
l1.Hitungl();
}
}

Hasil Running:

Pada modul kali ini, saya dapet tugas tambahan kawan, yaitu membuat class Shape. class memiliki dua field String: name dan size. class mempunyai method printShapeInfo, dimana hanya mengeluarkan nilai name dan field size dari object Shape. Juga memiliki method printShapeName dan printShapeSize, dimana mencetak nama dan size dariobject, berturut-turut.

Kemudian Menggunakan pewarisan, buat class Square dengan field yang sama dan method seperti itu dari class Shape. Class ini mempunyai dua tambahan field integer: length dan width. Method printShapeLength dan printShapeWidth yang mencetak panjang dan lebar object yang juga termasuk dalam class ini.

Berikut Source codenya:


/*langkah ke-1: Membuat Class Shape*/
class Shape{

String name, size;

public Shape(String name){
this.name = name;
}

public void printShapeInfo(){
System.out.println("Shape name : "+name);
System.out.println("Shape Size : "+size);
}

public void printShapeName(){
System.out.println("Shape name : "+name);
}

public void printShapeSize(){
System.out.println("Shape size : "+size);
}
}


/*langkah ke-2: Membuat Class Square turunan dari Shape*/
class square extends Shape{

String name, size;
int length, width;

public square(String name){
super(name);
}

public void printShapeInfo(){
super.printShapeInfo();
}

public void printShapeName(){
super.printShapeName();
}

public void printShapeSize(){
super.size = String.valueOf(length*width);
super.printShapeSize();
}

public void printWidth(){
System.out.println("Lebar : "+width);
}

public void printLength(){
System.out.println("Panjang : "+length);
}
}


/*langkah ke-3: Membuat Main Program dengan Nama Class main */
class main{

public static void main (String[] args){


System.out.println("====================================");


square persegi = new square("persegi");

persegi.length = 10;
persegi.width = 8;

persegi.printShapeName();

persegi.printLength();
persegi.printWidth();

persegi.printShapeSize();
System.out.println("\n");
System.out.println("Jadi kesimpulannya..");
persegi.printShapeInfo();
}
}

Hasil Running:


Begitulah kawan mengenai modul ini, semoga bermanfaat y!!!! sampai jumpa di modul berikutna... Gotcha...!!!!

»»  READMORE...