buku prakt pemrograman 2 - ilkom

42
Praktikum Pemrograman II 1 Bab 1 Method Static dan Method Overloading 1.1 Methode Static Hampir semua methode kelas (method yang dikaitkan dengan kelas secara keseluruhan dan bukan pada instan tertentu) dideklarasikan sebagai static. Method main hanya dapat mengakses method-method static dalam suatu kelas yang sama. Program berikut mengimplementasikan method static pada suatu kelas.: tStatic.java 1 public class tStatic 2 { 3 public static void prosesString(String s1,String s2) 4 { 5 System.out.println ( s1 + " " + s2); 6 } 7 8 public static void prosesInt ( int i ) 9 { 10 System.out.println ("Hasil kuadrat"+i+" = "+ (i*i)); 11 System.out.println ( "Hasil kali "+i+" dengan 2 = "+(i*2)); 12 } 13 14 public static void prosesDouble2 (double a,double b ) 15 { 16 System.out.println ( "Hasil kali " + a +" dan " + b + " = " + ( a * b)); 17 System.out.println ( "Jumlah " + a + " dan " + b + " = " + ( a + b)); 18 } 19 20 public static void prosesDouble ( double n ) 21 { 22 System.out.println ( n + " ^ 3 = " + (n*n*n)); 23 System.out.println ( n + " / 3 = " + (n/3)); 24 } 25 26 public static void main ( String [] main ) 27 { 28 String s1 = "Pemrograman";

Upload: culunh

Post on 30-Jun-2015

560 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 1

Bab

1

Method Static dan Method Overloading

1.1 Methode Static

Hampir semua methode kelas (method yang dikaitkan dengan kelas

secara keseluruhan dan bukan pada instan tertentu) dideklarasikan

sebagai static. Method main hanya dapat mengakses method-method

static dalam suatu kelas yang sama.

Program berikut mengimplementasikan method static pada suatu kelas.:

tStatic.java

1 public class tStatic

2 {

3 public static void prosesString(String s1,String s2)

4 {

5 System.out.println ( s1 + " " + s2);

6 }

7

8 public static void prosesInt ( int i )

9 {

10 System.out.println ("Hasil kuadrat"+i+" = "+

(i*i));

11 System.out.println ( "Hasil kali "+i+" dengan 2

= "+(i*2));

12 }

13

14 public static void prosesDouble2 (double a,double b )

15 {

16 System.out.println ( "Hasil kali " + a +" dan

" + b + " = " + ( a * b));

17 System.out.println ( "Jumlah " + a + " dan " +

b + " = " + ( a + b));

18 }

19

20 public static void prosesDouble ( double n )

21 {

22 System.out.println ( n + " ^ 3 = " +

(n*n*n));

23 System.out.println ( n + " / 3 = " + (n/3));

24 }

25

26 public static void main ( String [] main )

27 {

28 String s1 = "Pemrograman";

Page 2: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 2

29 String s2 = "Java";

30

31 int i = 10;

32

33 double d1 = 5.7;

34 double d2 = 6.5;

35

36 prosesString (s1,s2);

37 prosesInt(i);

38 prosesDouble(d1);

39 prosesDouble2(d1,d2);

40 }

41 }

Jalankan program diatas dan cobalah menghilangkan kata kunci static

pada method kelas pada baris 3, 14 dan 20. Apa yang terjadi?

1.2 Method dengan Return Value

Kita dapat mendeklarasikan method yang bisa mengembalikan suatu

nilai dengan mengganti reference void dengan tipe tertentu. Perhatikan

contoh program berikut yang memberikan return value dengan tipe long

dan double.

hitungluas.java

1 public class hitungLuas

2 {

3 public static double luaslingkaran ( int r )

4 {

5 double Luas;

6 Luas = 3.14 * r * r ;

7 return Luas;

8 }

9

10 public static long luasbidang( int p, int l )

11 {

12 long Luas;

13 Luas = p * l;

14 return Luas;

15 }

16

17 public static void main ( String [] args )

18 {

19 double Luas1;

20 long Luas2;

21

22 Luas1 = luaslingkaran ( 8 );

Page 3: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 3

23 Luas2 = luasbidang(10,8);

34

25 System.out.println ("Luas lingkaran : "+Luas1 );

26 System.out.println ("Luas Bidang : " + Luas2 );

27 }

28 }

1.3 Method Overloading

Overloading terjadi jika beberapa method memiliki nama yang sama,

tetapi berbeda argumennya. Perhatikan program berikut yang merupakan

modifikasi contoh program tStatic dengan mengimplementasikan

overloading method.proses. Overloading.java

1 public class Overloading

2 {

3 public static void proses(String s1,String s2)

4 {

5 System.out.println ( s1 + " " + s2);

6 }

7

8 public static void proses ( int i )

9 {

10 System.out.println ("Hasil kuadrat " + I + " =

" + (i*i));

11 System.out.println ( "Hasil kali " + I + "

dengan 2 = "+(i*2));

12 }

13

14 public static void proses (double a,double b )

15 {

16 System.out.println ( "Hasil kali " + a + " dan

" + b + " = " + ( a * b));

17 System.out.println ( "Jumlah " + a + " dan " +

b + " = " + ( a + b));

18 }

19

20 public static void proses ( double n )

21 {

22 System.out.println ( n + " ^ 3 = " +

(n*n*n));

23 System.out.println ( n + " / 3 = " + (n/3));

24 }

25

26 public static void main ( String [] main )

27 {

28 String s1 = "Pemrograman";

Page 4: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 4

29 String s2 = "Java";

30

31 int i = 10;

32

33 double d1 = 5.7;

34 double d2 = 6.5;

35

36 prosesString (s1,s2);

37 prosesInt(i);

38 prosesDouble(d1);

39 prosesDouble2(d1,d2);

40 }

41 }

Soal 1.1 (HexToDec)

Susun program yang di dalamnya terdapat methode untuk melakukan

konveersi bilangan heksadesimal menjadi desimal.

Soal 1.2 (Overloading2)

Susun program dengan menggunakan overloading function dimana bila :

a. Dimasukkan argumen berupa string, maka dia akan

menampilkan pola :

Misal : argumen adalah JAVA J

J A

J A V

J A V A

b. Dimasukkan argumen integer, dia akan memberikan pola :

Misal : argumen adalah angka 4 1

2 4

3 6 9

4 8 12 16

c. Dimasukkan dua argument dengan tipe boolean, maka dia

akan menampilkan hasil dari operasi “And” untuk berbagai

kombinasi dari dua argumen tersebut

Page 5: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 5

Bab

2

Class, Konstruktor dan Method Instan

2.1 Class dan Konstruktor

Sebuah kelas bisa memiliki beberapa konstruktor, yaitu method dengan

nama yang sama dengan nama class tetapi parameternya berbeda.

Konstruktor secara otomatis akan dijalankan jika di-instan obyek dengan

tipe kelas tersebut.

Rasional2.java

1 public class Rasional2

2 {

3 private int pembilang, penyebut;

4

5 public Rasional2()

6 {

7 pembilang=1;

8 penyebut=1;

9 }

10

11 public Rasional2(int pbl, int pyb)

12 {

13 pembilang=pbl;

14 penyebut=pyb;

15 }

16

17 public int getPbl()

18 {

19 return pembilang;

20 }

21

22 public int getPyb()

23 {

24 return penyebut;

25 }

26

27 public void setRasional(int pbl , int pyb)

28 {

29 pembilang=pbl;

30 penyebut=pyb;

31 }

Page 6: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 6

32

33 public void setPbl(int pbl)

34 {

35 pembilang=pbl;

36 }

37

38 public void setPyb(int pyb)

39 {

40 penyebut=pyb;

41 }

42

Perhatikan deklarasi new pada baris 5 dan 6 (Rasional2Demo.java)

ketika sebuah obyek diinstan dan inisialisasi kontruktor untuk kedua

obyek tersebut dimana keduanya menjalankan kontruktor yang berbeda

tergantung dari parameter yang dimasukkan. Perhatikan pula

pemanggilan method-method instan pada main program.

Rasional2Demo.java

1 public class Rasional2Demo

2 {

3 public static void main(String[] args)

4 {

5 Rasional2 R1 = new Rasional2();

6 Rasional2 R2 = new Rasional2(6,8);

7

8 System.out.println("R1.getPbl() : " +

R1.getPbl());

9 System.out.println("R1.getPyb() : " +

R1.getPyb() + "\n");

10

11 System.out.println("R2.getPbl() : " +

R2.getPbl());

12 System.out.println("R2.getPyb() : " +

R2.getPyb()+ "\n");

13

14 R1.setRasional(3,5);

15

16 System.out.println("Setelah nilai pembilang

dan penyebut pada R1 diset ulang");

17 System.out.println("R1.getPyb() : " +

R1.getPyb());

18 System.out.println("R1.getPyb() : " +

R1.getPyb());

19 }

20 }

Page 7: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 7

2.2 Method Instan

Sebuah kelas juga memiliki method yang dikaitkan dengan instan

tertentu. Sewaktu method instan dipanggil, dia akan mengakses data

yang terdapat pada instan yang dikaitkannya.

Program berikut merupakan modifikasi dari program sebelumnya dengan

menyertakan operasi-operasi pada bilangan rasional.

Rasional3.java

1 public class Rasional3

2 {

3 private int pembilang, penyebut;

4

5 public Rasional3()

6 {

7 pembilang=0;

8 penyebut=0;

9 }

10

11 public Rasional3(int pbl, int pyb)

12 {

13 pembilang=pbl;

14 penyebut=pyb;

16 }

17

18 //mengecek suatu bilangan adalah rasional atau bukan

19 public boolean isRasional()

20 {

21 return (penyebut!= 0);

22 }

23

24 //menyederhanakan bilangan rasional

25 public void Sederhana()

26 {

27 int temp, A, B;

28

29 if (penyebut ==0)

30 {

31 return;

32 }

33

34 A = (pembilang<penyebut) ? penyebut:pembilang;

35 B = (pembilang<penyebut) ? pembilang:penyebut;

36

37 while (B != 0)

38 {

Page 8: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 8

39 temp= A % B;

40 A = B;

41 B = temp;

42 }

43

44 pembilang /=A;

45 penyebut /=A;

46

47 }

48

49 public double Cast()

50 {

51 return (penyebut==0.0) ? 0.0 :

(double)pembilang / (double)penyebut;

52 }

53

54 //oprator >

55 public boolean moreThan (Rasional3 A)

56 {

57 return (pembilang * A.penyebut > penyebut *

A.pembilang );

58 }

59

60 //operator Unary- ---> A = -A

61 public void negasi()

62 {

63 pembilang = - pembilang;

64 }

65

66 //operator unary +=

67 public void unaryPlus(Rasional3 A)

68 {

6

9

pembilang = pembilang * A.penyebut + penyebut

* A.pembilang;

70 penyebut *=A.penyebut;

71 }

72

73 public void cetak()

74 {

75 System.out.println(pembilang + "/" + penyebut);

76 }

77 }

Rasional3Demo.java

1 public class Rasional3Demo

2 {

3 public static void main(String[] args)

Page 9: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 9

4 {

5 Rasional3 R1 = new Rasional3(1,2);

6 Rasional3 R2 = new Rasional3(1,3);

7

8 System.out.println("R1.isRasional: " +

R1.isRasional());

9 System.out.println("R2.isRasional: " +

R1.isRasional());

10 System.out.println();

11

12 System.out.println("R1 > R2 : " +

R1.moreThan(R2));

13 System.out.println();

14

16

17 System.out.print("R1 : ");

18 R1.cetak();

19 System.out.print("R2 : ");

20 R2.cetak();

21 System.out.println();

22

23 R1.Sederhana();

24 R2.Sederhana();

25

26 System.out.print("R1 : ");

27 R1.cetak();

28 System.out.print("R2 : ");

29 R2.cetak();

30 System.out.println();

31

32 System.out.println("Setelah dilakukan Cast ke

double menjadi : " );

33 System.out.println("R1 : " + R1.Cast());

34 System.out.println("R2 : " + R2.Cast());

35 System.out.println();

36

37 R1.negasi();

38 System.out.print("Unary- dari R1 : ");

39 R1.cetak();

40 System.out.println();

41

42 R1.unaryPlus(R2);

43 System.out.print("Nilai dari 'R1 += R2' : ");

44 R1.cetak();

45 System.out.println();

46 }

47 }

Page 10: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 10

Soal 2.1 (Rasional4.java)

Tambahkan operator – operator lain untuk melengkapi kelas bilangan

rasional diatas, seperti : (minimal 5 operator)

Operator Unary -= , unary /=, unary *=, unary ++, unary--

Operator < , <= , >=

Operator pembanding ==, pembanding !=

Opearator + , - , * , /

Page 11: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 11

Bab

3

Inheritance

Inheritance memugkinkan untuk membuat sebuah obyek dari obyek lain

yang sudah ada sebelumnya. Dengan inheritance, kita bisa menggunakan

kembali atau mengganti method dari class yang ada, juga menambahkan

field instan juga methode yang baru.

Bentuk umum dari inheritance di Java adalah sebagai berikut :

public class <derived_class> extends <base_class_name>

{

//body of class

}

Berikut merupakan contoh penurunan class manager dari class

employee. Class manager selain dapat memakai beberapa method instan

dari class employee, juga masih mempertahankan semua field dari kelas

semula.

Disini terdapat tiga kelas, yaitu employee, manager dan employeedemo

employee.java

1 import java.util.Date;

2 import java.text.SimpleDateFormat;

3

4 public class employee

5 {

6 private String name;

7 private double salary;

8 Date hdate;

9

10 public employee(String n,double s, Date d)

11 {

12 name=n;

13 salary=s;

14 hdate = d;

16 }

17

18 public double getSalary()

19 {

20 return salary;

21 }

Page 12: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 12

22

23 public String gstName()

24 {

25 return name;

26 }

27

28 public void print()

29 {

30 Date today = new Date();

31 SimpleDateFormat format= new

SimpleDateFormat("dd MMMM yyyy");

32 String s = format.format(hdate);

33 System.out.println(" Nama : " + name);

34 System.out.println(" Tanggal masuk : " + s);

35 System.out.println(" Gaji pokok : $ " +

salary);

36 System.out.println(" Lama kerja : " +

(today.getYear() - hdate.getYear())+ "

Tahun");

37 }

38

39 public void printSalary()

40 {

41 System.out.println(" Gaji sekarang : $ " +

salary);

42 }

43

44 public int hYear()

45 {

46 return hdate.getYear();

47 }

48

49 public void raiseSalary(double r)

50 {

51 salary *=1+ r/100;

52 }

53 }

Manager.java

1 import java.util.Date;

2

3 public class manager extends employee

4 {

5 public manager(String n,double s, Date d)

6 {

7 super(n,s,d);

8 }

Page 13: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 13

9

10 public void raiseSalary(double r)

11 {

12 Date today = new Date();

13 double bonus= 0.5 * (today.getYear() -

hYear());

14 super.raiseSalary(r+bonus);

16 }

17 }

Perhatikan perluasan method raiseSalary pada class manager dengan

menambahkan bonus (baris 13) dan pemanggilan method raiseSalary

pada base class. (baris 14).

Employeedemo.java

1 import java.util.*;

2

3 public class employeedemo

4 {public static void main(String[] args)

5 {

6 employee[] staff=new employee[3];

7 manager boss = new manager("Dumbledore",5000, new

Date(55,6,10));;

8

9 staff[0]=new employee("Harry",750,new Date(60,3,12));

10 staff[1]=new employee("Hermione",1000,new Date(65,

6,17));

11 staff[2]=new employee("Ron",800, new Date(70,7,11));

12

13 System.out.println("Data pegawai sebelum ada kenaikan

gaji : " );

14 System.out.println("Manajer : " );

16 boss.print();

17 boss.raiseSalary(5);

18 boss.printSalary();

19

20 for (int i=0;i<staff.length;i++)

21 {

22 System.out.println("Staff ke " + (i+1) + " : ");

23 staff[i].print();

24 staff[i].raiseSalary(5);

25 staff[i].printSalary();

26 }

27 }

28 }

Page 14: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 14

Soal 3.1 (programmer.java)

Buatlah class Programmer yang inherit class employee dengan ketentuan

kenaikan gaji sebagai berikut :

Jika masa kerja dibawah 1 tahun : tidak ada perubahan (sama

dengan employee)

Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari

lama kerja

Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02

dari lama kerja

Soal 3.2 (direktur.java)

Buatlah class direktur yang inherit class employee dengan ketentuan

kenaikan gaji sebagai berikut :

Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan

sebesar 0.1 dari lama kerja

Page 15: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 15

Bab

4

Polymorphism

Kelas Abstrak

Dengan kelas abstrak memungkinkan untuk membuat method tanpa

mendefinisikan method tersebut. Hal ini bermanfaat kalau kita tahu kelas

dalam program kita harus memberikan operasi tertentu, tetapi

spesifikaasi operasi tersebut dapat berbeda-beda antara satu subelas

dengan subkelas yang lainnya.

Dalam Java kita bisa mendefinisikan method semacam ini dengan kata

kunci abstract, untuk menunjukkan bahwa methode tersebut belum

dispesifikasikan. Kelas dengan satu atau lebih method abstrak dengan

sendirinya harus dinyatakan abstrak.

Contoh pada program berikut adalah pendefinisian kelas dan method

abstrak untuk class Shape, dimana kelas Shape memiliki data berupa

Point yang menunjukkan titik koordinat(x,y) dan Color yang

menunjukkan tingkat RGB dari warna serta memiliki methode Abstrak

untuk menghitung luas, keliling dan cetak.

Shape.java

1 public abstract class Shape

2 {

3 private Color color;

4 private Point origin;

5

6 protected Shape(Color col, Point org)

7 {

8 origin = new Point(org.getX(), org.getY());

9 Color = new Color(col.getR(),col.getG(),

col.getB());

10 }

11

12 protected Shape(Point org)

13 {

14 origin = new Point(org.getX(), org.getY());

16 color = new Color(0,0,0);

17 }

18

19 protected Shape()

Page 16: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 16

20 {

21 origin = new Point(0.0, 0.0);

22 color = new Color(0,0,0);

23 }

24

25 public abstract double area();

26 public abstract double perimeter();

27 public abstract void print();

28

29 public Color getColor()

30 {

31 return color;

32 }

33

34 public void setColor(Color col)

35 {

36 color.setRGB(col.getR(), col.getG(), col.getB());

37 }

38

39 public Point getOrigin()

40 {

41 return origin;

42 }

43

44 public void setOrigin(Point org)

45 {

46 origin.setPoint(org.getX(), org.getY());

47 }

48 }

Method Abstrak dari kelas Shape mempunyai implementasi yang

berbeda-beda ketika diimplementasikan pada kelas turunannya, yaitu

kelas Circle dan Rectangle.

Circle.java

1 public class Circle extends Shape

2 {

3 private double radius;

4

5 public Circle()

6 {

7 super();

8 radius = 0.0;

9 }

10

11 public Circle(final Point org, final double rad)

12 {

Page 17: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 17

13 super(org);

14 radius = rad;

16 }

17

18 public double getRadius()

19 {

20 return radius;

21 }

22

23 public void setRadius(double r)

24 {

25 radius = r;

26 }

27

28 public double area()

29 {

30 return Math.PI * radius * radius;

31 }

32

33 public double perimeter()

34 {

35 return 2 * Math.PI * radius;

36 }

37

38 public void print()

39 {

40 System.out.println("Lingkaran :");

41 System.out.println(" Pusat -> X : " +

super.getOrigin().getX() + ", Y : " +

super.getOrigin().getY());

42 System.out.println(" Radius : " + radius);

43 System.out.println(" Luas : " + (Math.PI *

radius * radius));

44 System.out.println(" Keliling : " + (2 *

Math.PI * radius));

45 System.out.println(" Warna R : " +

super.getColor().getR() + ", G : " +

super.getColor().getG() + ", B : " +

super.getColor().getB());

46 }

47 }

Rectangle.java

1 public class Rectangle extends Shape

2 {

3 private double height;

4 private double width;

5

Page 18: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 18

6 public Rectangle()

7 {

8 super();

9 height = 0.0; width = 0.0;

10 }

11

12 public Rectangle(Point org, double h, double w)

13 {

14 super(org);

16 height = h; width = w;

17 }

18

19 public double area()

20 {

21 return height * width;

22 }

23

24 public double getH()

25 {

26 return height;

27 }

28

29 public double getW()

30 {

31 return width;

32 }

33

34 public void setHW(double h, double w)

35 {

36 height = h; width = w;

37 }

38

39 public double perimeter()

40 {

41 return 2 * (height + width);

42 }

43

44 public void print()

45 {

46 System.out.println("Segi Empat:");

47 System.out.println(" P : " + width + ", L : "

+ height);

48 System.out.println(" Luas : " + (height *

width));

49 System.out.println(" Keliling : " + (2 *

(height + width)));

50 System.out.println(" Nilai X : " +

super.getOrigin().getX() + ", Y : " +

super.getOrigin().getY());

Page 19: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 19

51 System.out.println(" Warna R : " +

super.getColor().getR() + ", G : " +

super.getColor().getG() + ", B : " +

super.getColor().getB());

52 }

53 }

ShapeDemo.java

1 public class ShapeDemo

2 {

3 public static void main(String [] args)

4 {

5 Point p = new Point(5,9);

6 Color co = new Color (10,10,10);

7 Circle c = new Circle(p,6);

8 Rectangle r = new Rectangle(p,5,8);

9

10 System.out.println("Luas Segiempat mula-mula :

" + r.area()+ "\n");

11 System.out.println("Keliling Segiempat mula-

mula : " + r.perimeter()+ "\n");

12

13 r.setHW(20.6 , 10.3);

14 r.print();

16 System.out.println();

17

18 System.out.println("Luas Lingkaran mula-mula :

" + c.area()+ "\n");

19 System.out.println("Keliling Lingkaran mula-

mula : " + c.perimeter()+ "\n");

20

21 c.setRadius(5.8);

22 c.setColor(co);

23 c.print();

24

25 }

26 }

Page 20: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 20

Soal 4.1 (employeePoly)

Implementasikan polymorphism pada class employee (pada bab

sebelumnya) sehingga methode raiseSalary() dan print() menjadi

methode abstrak :

employeePoly.java

1 import java.util.Date;

2 import java.text.SimpleDateFormat;

3

4 public abstract class employee

5 {

6 private String name;

7 Date hdate;

8

9 //konstruktor

10 public employeePoly(String n, Date d)

11

12 //method-methode untuk set dan get variable

13

14 public int hYear()

16 {

17 return hdate.getYear();

18 }

19

20 public abstract void print();

21 public abstract void raiseSalary(double persen)

22

23 }

Soal 4.2 (staff.java)

Buatlah class staff yang inherit class employee dengan ketentuan sebagai

berikut :

Terdapat variable tambahan salary dengan tipe double

Jika masa kerja dibawah 1 tahun, kenaikan gaji dihitung : salary *=1+ persen/100;

Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari

lama kerja

Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02

dari lama kerja

Page 21: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 21

Soal 4.3 (manager.java)

Buatlah class direktur yang inherit class employee dengan ketentuan

kenaikan gaji sebagai berikut :

Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan

sebesar 0.1 dari lama kerja

Page 22: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 22

Bab

5

Stream

Dengan stream memungkinkan untuk mendapatkan input dari sumber data yang

dapat mengirimkan urutan byte dan mengirimkan output ke berbagai tujuan

yang dapat menerima urutan byte. Sebuah obyek yang dapat membaca

sekumpulan byte disebut InputStream dan sebuah obyek yang dapat

menuliskan sekumpulan byte disebut OutputStream.

Contoh berikut untuk mengimplementasikan kelas-kelas input dan output

stream untuk membuat kelas yang dapat digunakan untuk membaca input dari

keyboard (semacam perintah cin pada C++) . Input yang dibaca bertipe

integer, byte, long dan double.

Input.java

1 import java.io.*;

2

3 public class Input {

4

5 private static InputStream in = System.in;

6 private static PrintStream out = System.out;

7

8 private static String buffer = null;

9 private static int pos = 0;

10

11

12 public static byte inByte()

13 {

14 return (byte)readInteger(-128L,127L);

16 }

17

18 public static short inShort()

19 {

20 return (short)readInteger(-32768L,32767L);

21 }

22

23 public static int inInt()

24 {

25 return (int)readInteger((long)Integer.MIN_VALUE,

(long)Integer.MAX_VALUE);

26 }

27

Page 23: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 23

28 public static long inLong()

29 {

30 return readInteger(Long.MIN_VALUE, Long.MAX_VALUE);

31 }

32

33 public static char inChar()

34 {

35 char ch = lookChar();

36 while (ch == ' ' || ch == '\n')

37 {

38 readChar();

39 if (ch == '\n')

40 dumpString("",0);

41 ch = lookChar();

42 }

43 return readChar();

44 }

45

46

47 public static double inDouble() {

48 double x = 0.0;

49 while (true) {

50 String str = readRealString();

51 if (str.equals("")) {

52 errorMessage("Range " , + Double.MIN_VALUE +

" sampai " + Double.MAX_VALUE);

53 }

54 else {

55 Double f = null;

56 try { f = Double.valueOf(str); }

57 catch (NumberFormatException e) {

58 errorMessage("Range " , + Double.MIN_VALUE +

" sampai " + Double.MAX_VALUE);

59 continue;

60 }

61 if (f.isInfinite()) {

62 errorMessage("Range " , + Double.MIN_VALUE +

" sampai " + Double.MAX_VALUE);

63 continue;

64 }

65 x = f.doubleValue();

66 break;

67 }

68 }

69 return x;

70 }

71

72

73 private static String readRealString()

Page 24: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 24

74 {

75 StringBuffer s=new StringBuffer(50);

76 char ch=lookChar();

77 while (ch == ' ' || ch == '\n') {

78 readChar();

79 if (ch == '\n')

80 dumpString("",0);

81 ch = lookChar();

82 }

83 if (ch == '-' || ch == '+') {

84 s.append(readChar());

85 ch = lookChar();

86 while (ch == ' ') {

87 readChar();

88 ch = lookChar();

89 }

90 }

91 while (ch >= '0' && ch <= '9') {

92 s.append(readChar());

93 ch = lookChar();

94 }

95 if (ch == '.') {

96 s.append(readChar());

97 ch = lookChar();

98 while (ch >= '0' && ch <= '9') {

99 s.append(readChar());

100 ch = lookChar();

101 }

102 }

103 if (ch == 'E' || ch == 'e') {

104 s.append(readChar());

105 ch = lookChar();

106 if (ch == '-' || ch == '+') {

107 s.append(readChar());

108 ch = lookChar();

109 }

110 while (ch >= '0' && ch <= '9') {

111 s.append(readChar());

112 ch = lookChar();

113 }

114 }

115 return s.toString();

116 }

117

118 private static long readInteger(long min, long max)

119 {

120 long x=0;

121 while (true) {

222 StringBuffer s=new StringBuffer(34);

Page 25: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 25

123 char ch=lookChar();

124 while (ch == ' ' || ch == '\n') {

125 readChar();

126 if (ch == '\n')

127 dumpString("",0);

128 dumpString("",0);

129 ch = lookChar();

130 }

131 if (ch == '-' || ch == '+') {

132 s.append(readChar());

133 ch = lookChar();

134 while (ch == ' ') {

135 readChar();

136 ch = lookChar();

137 }

138 }

139 while (ch >= '0' && ch <= '9') {

140 s.append(readChar());

141 ch = lookChar();

142 }

143 if (s.equals("")){

144

errorMessage("Range integer : ", + min +

" sampai " + max);

145 }

146 else {

147 String str = s.toString();

148 try {

149 x = Long.parseLong(str);

150 }

151 catch (NumberFormatException e) {

152

errorMessage("Range integer : " , + min +

" sampai " + max);

153 continue;

154 }

155 if (x < min || x > max) {

156

errorMessage("Range integer : ", + min +

" sampai " + max);

157 continue;

158 }

159 break;

160 }

161 }

162 return x;

163 }

164

165

166 private static void dumpString(String str, int w)

167 {

168 for (int i=str.length(); i<w; i++)

Page 26: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 26

169 out.print(' ');

170 for (int i=0; i<str.length(); i++)

171

if ((int)str.charAt(i) >= 0x20 &&

(int)str.charAt(i) != 0x7F)

172 out.print(str.charAt(i));

173

else if (str.charAt(i) == '\n' || str.charAt(i) ==

'\r')

174 newLine();

175 }

176

177

178

private static void errorMessage(String message,

String expecting)

179 {

180 newLine();

181 dumpString(" *** Input Salah: \n", 0);

182 dumpString(" *** Range: " + expecting + "\n", 0);

183 newLine();

184 dumpString("Masukkan lagi: ", 0);

185 readChar(); // discard the end-of-line character

186 }

187

188

189

190 private static char lookChar()

191 {

192 if (buffer == null || pos > buffer.length())

193 fillBuffer();

194 if (pos == buffer.length())

195 return '\n';

196 return buffer.charAt(pos);

197 }

198

199

200 private static char readChar()

201 {

202 char ch = lookChar();

203 pos++;

204 return ch;

205 }

206

207 private static void newLine()

208 {

209 out.println();

210 out.flush();

211 }

212

213 private static boolean possibleLinefeedPending = false;

214

Page 27: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 27

215 private static void fillBuffer()

216 {

217 StringBuffer b = new StringBuffer();

218 out.flush();

219 try {

220 int ch = in.read();

221 if (ch == '\n' && possibleLinefeedPending)

222 ch = in.read();

223 possibleLinefeedPending = false;

224 while (ch != -1 && ch != '\n' && ch != '\r') {

225 b.append((char)ch);

226 ch = in.read();

227 }

228 possibleLinefeedPending = (ch == '\r');

229 if (ch == -1) {

230

System.out.println("*** Found an end-of-file

while trying to read from standard input! ***");

231

232

System.out.println("*** Program will be

terminated. *** \n");

233

throw new RuntimeException(" End-of-file on

standard input.");

234 }

235 }

236 catch (IOException e) {

237

System.out.println(" Unexpected system error on

input.");

238 System.out.println("Terminating program.");

239 System.exit(1);

240 }

241 buffer = b.toString();

242 pos = 0;

243 }

244 }

Compile program diatas dan cobalah untuk menggunakan method-method dari

class Input diatas. Perhatikan juga penggunaan method class readInteger,

readRealString, fillBuffer, lookChar dan readChar.

InputDemo.java

1 class InputDemo

2 {

3 public static void main(String[] args)

4 {

5 System.out.print("Masukkan angka int : ");

6

7 int angka1 = Input.inInt();

Page 28: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 28

8

9 System.out.println("Angka yang anda masukkan :

" + angka1 + "\n");

10

11 System.out.print("Masukkan angka double : ");

12 double angka2 = Input.inDouble();

13

14 System.out.println("Angka yang anda masukkan :

" + angka2 + "\n");

15 }

16 }

Jalankan program diatas, kemudian buatlah method untuk membaca input

berupa Float (inFloat) dan string(inWord) serta aplikasikan pada latihan pada

bab-bab sebelumnya.

Page 29: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 29

Bab

6

Graphic User Interface

Dengan Java, memungkinkan untuk membuat tampilan User Interface dengan

memanfaatkan paket-paket GUI yang telah disediakan. Salah satu paket yang

biasa digunakan adalah AWT (Abstract Window Toolkit), dimana dengan

AWT kita bisa membuat berbagai prasarana dasar sepeti tombol, field

input,label dll dan kemudian membuat program interface untuk menanggapi

berbagai event.

Berikut adalah contoh program penggunaan paket java.awt untuk merancang

form sederhana perhitungan Luas.

Tframe.java

1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class TFrame extends Frame

5 {

6 Label lbJudul;

7 Label lbPanjang;

8 Label lbLebar;

9 Label lbLuas;

10 TextField txtPanjang;

11 TextField txtLebar;

12 TextField txtLuas;

13 Button btnOK;

14

16

17 public TFrame()

Page 30: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 30

18 {

19 setLayout(null);

20

21 lbJudul = new Label("Hitung Luas SegiEmpat");

22 lbJudul.setFont(new Font("Arial", 1, 14));

23 add(lbJudul);

24 lbJudul.setBounds(100, 30, 170, 20);

25

26 lbPanjang = new Label("Panjang :");

27 add(lbPanjang);

28 lbPanjang.setBounds(100, 60, 62, 20);

29

30 lbLebar = new Label ("Lebar :");

31 add(lbLebar);

32 lbLebar.setBounds(100, 90, 70, 20);

33

34 lbLuas = new Label("Hasil :");

35 add(lbLuas);

36 lbLuas.setBounds(100, 120, 70, 20);

37

38 txtPanjang = new TextField("0");

39 add(txtPanjang);

40 txtPanjang.setBounds(200, 60, 60, 20);

41

42 txtLebar= new TextField("0");

43 add(txtLebar);

44 txtLebar.setBounds(200, 90, 60, 20);

45

46 txtLuas= new TextField("0");

47 add(txtLuas);

48 txtLuas.setBounds(200, 120, 60, 20);

49

50 btnOK = new Button("Hitung");

51 add(btnOK);

52 btnOK.setBounds(120,150,100,20);

53 btnOK.addActionListener(new mainAction());

54

55 addWindowListener(new WindowAdapter() {

56 public void windowClosing(WindowEvent e) {

57 System.exit(0);

58 }

59 });

60 }

61

62 class mainAction implements ActionListener

63 {

64

65 public void actionPerformed( ActionEvent event)

66 {

Page 31: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 31

67 int p1 = Integer.parseInt

(txtPanjang.getText().trim());

68 int l1 = Integer.parseInt

(txtLebar.getText().trim());

69 String luas = String.valueOf(p1*l1);

70 txtLuas.setText(luas);

71 }

72 }

73 }

mainLuas.java

1 public class mainLuas

2 {

3 public static void main(String args[])

4 {

5 TFrame window = new TFrame();

6

7 window.setTitle("Hitung Luas dengan GUI Java.awt");

8 window.setSize(350,200);

9 window.show();

10 }

11 }

Jalankan program diatas. Amati penggunaan listener untuk buttonOK (baris

53) yang mengimplementasikan interface ActionListener untuk

menjalankan event tertentu.

Contoh program dibawah adalah modifikasi program sebelumnya

dengan memanfaatkan komponen checkbox untuk melakukan pemilihan

aksi.

Page 32: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 32

TFrame2.java

1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class TFrame2 extends Frame

5 {

6 TextField txtPanjang, txtLebar,txtLuas;

7 CheckboxGroup cbg;

8 Checkbox cbL,cbK;

9 Label lbJudul,lbPanjang,lbLebar,lbLuas;

10

11 public TFrame2()

12 {

13 setLayout(null);

14

16 lbJudul = new Label("Hitung Luas dan Keliling");

17 lbJudul.setFont(new Font("Arial", 1, 14));

18 add(lbJudul);

19 lbJudul.setBounds(100, 30, 170, 20);

20

21 lbPanjang = new Label("Panjang :");

22 add(lbPanjang);

23 lbPanjang.setBounds(100, 80, 62, 20);

24

25 lbLebar = new Label ("Lebar :");

26 add(lbLebar);

27 lbLebar.setBounds(100, 120, 70, 20);

28

29 lbLuas = new Label("Hasil :");

30 add(lbLuas);

31 lbLuas.setBounds(100, 150, 70, 20);

32

33 txtPanjang = new TextField("0");

34 add(txtPanjang);

35 txtPanjang.setBounds(200, 80, 60, 20);

36

37 txtLebar= new TextField("0");

38 add(txtLebar);

39 txtLebar.setBounds(200, 120, 60, 20);

40

41 txtLuas = new TextField("0");

42 add(txtLuas);

43 txtLuas.setBounds(200, 150, 60, 20);

44

45 cbg = new CheckboxGroup();

46 cbL = new Checkbox("Luas",cbg, false);

47 this.add(cbL).setBounds(90, 190, 100, 20);

48

Page 33: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 33

49 cbK = new Checkbox("Keliling",cbg, false);

50 this.add(cbK).setBounds(200, 190, 100, 20);

51

52 cbL.addItemListener(new mainAction());

53 cbK.addItemListener(new mainAction());

54

55

56 addWindowListener(new WindowAdapter()

57 {

58 public void windowClosing(WindowEvent e) {

59 System.exit(0);

60 }

61 });

62 }

63

64 //ItemListener

65 class mainAction implements ItemListener

66 {

67 public void itemStateChanged(ItemEvent ev)

68 {

69 int p1 = Integer.parseInt

(txtPanjang.getText().trim());

70 int l1 = Integer.parseInt

(txtLebar.getText().trim());

71

72 Object source = ev.getItemSelectable();

73

74 if (source == cbL)

75 {

76 txtLuas.setText(String.valueOf(p1*l1));

77 }

78 else if (source == cbK)

79 {

80 txtLuas.setText(String.valueOf(2*

(p1+l1)));

81 }

82 }

83 }

84 }

mainLuas2.java

1 public class mainLuas2

2 {

3 public static void main(String args[])

4 {

5 TFrame2 window2 = new TFrame2();

6

Page 34: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 34

7 window2.setSize(400,250);

8 window2.setVisible(true);

9 window2.show();

10 }

11 }

Soal 6.1 (HitungGaji.java)

Buatlah program untuk menghitung gaji karyawan dengan tampilan seperti

berikut.

Adapun ketentuan penghitungan bonus dan tunjangan adalah sebagai berikut :

Gaji Pokok

Staff : 1.000.000

Manager : 5.000.000

Direktur : 10.000.000

Bonus :

Staff jika lama kerja < 1 th = 0

Jika lama kerja 1 – 10 th = 5% * gaji_pokok

jika lama kerja > 10 th = lama_kerja/100 * gaji_pokok

Manager

Page 35: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 35

(5% + ((lama_kerja / 100 )) * gaji_pokok

Direktur

(10% + ((lama_kerja / 100 )) * gaji_pokok

Tunjangan :

Staff : 0

Manager : 5% * gaji_pokok

Direktur : 10% * gaji_pokok

Page 36: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 36

Bab

7

Graphic User Interface Lanjut

Selain dengan memanfaatkan paket java.awt, untuk membuat user interface di

Java juga bisa memanfaatkan paket javax.swing.

Pada contoh berikut merupakan pemanfaatan komponen jtable untuk membuat

user interface untuk menampilkan data dalam bentuk tabel.

TableData.java

1 import javax.swing.*;

2 import javax.swing.table.AbstractTableModel;

3 import javax.swing.table.TableColumn;

4 import java.awt.*;

5 import java.awt.event.*;

6

7 public class TableData extends JFrame

8 {

9 public TableData()

10 {

11 super("Contoh penggunaan jtable");

12

13 MyTableModel myModel = new MyTableModel();

14 JTable table = new JTable(myModel);

16 table.setPreferredScrollableViewportSize(new

Dimension(500, 70));

17

18 JScrollPane scrollPane = new JScrollPane(table);

19 getContentPane().add(scrollPane,

BorderLayout.CENTER);

20

21 addWindowListener(new WindowAdapter() {

22 public void windowClosing(WindowEvent e) {

Page 37: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 37

23 System.exit(0);

24 }

25 });

26 }

27 }

28

29 class MyTableModel extends AbstractTableModel

30 {

31 final String[] columnNames = {"ID", "Name",

"Address","Sex"};

32

33 final Object[][] data = {

34 {"S001","Mariana","Malang",new Boolean(false)},

35 {"S002","Tatiana","Surabaya",new Boolean(false)},

36 {"S003","Harry","Jakarta",new Boolean(true)},

37 {"M001","Zakhy","Bandung",new Boolean(true)},

38 {"D001","Angela","Bogor",new Boolean(false)}

39 };

40

41 public int getColumnCount() {

42 return columnNames.length;

43 }

44

45 public int getRowCount() {

46 return data.length;

47 }

48

49 public String getColumnName(int col) {

50 return columnNames[col];

51 }

52

53 public Object getValueAt(int row, int col) {

54 return data[row][col];

55 }

56

57 public Class getColumnClass(int c) {

58 return getValueAt(0, c).getClass();

59 }

60

61 public boolean isCellEditable(int row, int col) {

62 if (col < 3) {

63 return true;

64 } else {

65 return false;

66 }

67 }

68 }

Page 38: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 38

TableDataDemo.java

1 public class TableDataDemo

2 {

3 public static void main(String[] args)

4 {

5 TableData frame = new TableData();

6 frame.pack();

7 frame.setVisible(true);

8 }

9 }

Contoh berikut adalah pengembangan dari contoh diatas dengan menambahkan

button untuk menambah dan menghapus baris. Pada saat dijalankan default

table adalah null (tidak ada isi pada tabel).

Perhatikan keyword implements pada baris 8, dimana sebuah kelas bisa

mengimplementasikan lebih dari satu interface. Hal ini mendekati fungsi

pewarisan ganda.

TableAdd.java

1 import javax.swing.*;

2 import java.awt.*;

3 import java.awt.event.*;

4 import javax.swing.table.*;

5 import java.util.*;

6 import javax.swing.event.*;

7

8 class TableAdd implements ActionListener,

TableModelListener

9 {

10 JFrame frame;

11 JTable table;

12 Vector rows,columns;

13 DefaultTableModel tabModel;

Page 39: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 39

14 JScrollPane scrollPane;

16 JLabel lblMessage;

17 JButton cmdAdd,cmdDelete,cmdSetValue,cmdGetValue;

18 JPanel mainPanel,buttonPanel;

19

20 TableAdd()

21 {

22 rows=new Vector();

23 columns= new Vector();

24 String[] columnNames =

25 {

26 "ID",

27 "Name",

28 "Address",

29 "Sex",

30 };

31

32 addColumns(columnNames);

33

34 tabModel=new DefaultTableModel();

35 tabModel.setDataVector(rows,columns);

36

37 table = new JTable(tabModel);

38 scrollPane= new JScrollPane(table);

39

40 table.setRowSelectionAllowed(false);

41

42 table.getModel().addTableModelListener(this);

43

44 lblMessage=new JLabel("");

45

46 buttonPanel=new JPanel();

47 cmdAdd=new JButton("Add Row");

48 cmdDelete=new JButton("Delete") ;

49

50 buttonPanel.add(cmdAdd);

51 buttonPanel.add(cmdDelete);

52

53 cmdAdd.addActionListener(this);

54 cmdDelete.addActionListener(this);

55

56 mainPanel=new JPanel();

57 frame=new JFrame("Simple Table Example");

58 frame.setSize(800,600);

59 frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

60 mainPanel.setLayout(new BorderLayout());

61 mainPanel.add("Center",scrollPane);

62 mainPanel.add("South",buttonPanel);

63 mainPanel.setBackground(Color.white);

Page 40: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 40

64 buttonPanel.setBackground(Color.white);

65 table.getParent().setBackground(Color.white);

66 frame.getContentPane().add(mainPanel);

67 frame.setVisible(true);

68

69 }

70

71 public void addColumns(String[] colName)

72 {

73 for(int i=0;i<colName.length;i++)

74 columns.addElement((String) colName[i]);

75 }

76

77 public void addRow()

78 {

79 Vector r=new Vector();

80 r = createBlankElement();

81 rows.addElement(r);

82 table.addNotify();

83 }

84

85 public Vector createBlankElement()

86 {

87 Vector t = new Vector();

88 t.addElement((String) " ");

89 t.addElement((String) " ");

90 t.addElement((String) " ");

91 t.addElement((String) " ");

92 return t;

93 }

94

95 void deleteRow(int index)

96 {

97 if(index!=-1)

98 {

99 rows.removeElementAt(index);

100 table.addNotify();

101 }

102

103 }

104

105 public void tableChanged(javax.swing.event.TableModelEvent

source)

106 {

107 }

108

109 public void selectCell(int row,int col)

110 {

111 if(row!=-1 && col !=-1)

Page 41: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 41

112 {

113 table.setRowSelectionInterval(row,row);

114 table.setColumnSelectionInterval(col,col);

115 }

116 }

117

118 public void actionPerformed(ActionEvent source)

119 {

120 if (source.getSource()==(JButton) cmdAdd)

121 {

222 addRow();

123 }

124 if (source.getSource()==(JButton) cmdDelete)

125 {

126 deleteRow(table.getSelectedRow());

127 }

128

129 }

130

131 public static void main(String[] args)

132 {

133 TableAdd t=new TableAdd();

134 }

135 }

Soal 7.1

Modifikasi tabel contoh pada TableAdd.java sehingga tampilan awalnya

adalah sebagai berikut :

Page 42: Buku Prakt Pemrograman 2 - Ilkom

Praktikum Pemrograman II 42

Bab

8

Studi Kasus

Studi kasus akan diberikan oleh masing-masing asisten pada saat pelaksanaan

praktikum.