TUGAS PBO 2B
DEITEL 8.1-8.6
8.1 Introduction
Kali ini, kita akan melihat bagaimana membuat classes, mengontrol akses members of a class dan membuat constructors. Composition juga akan dibahas, bagaimana kemampuan composition yang memungkinkan class menggunakan objek dari member class yang lain. Kita juga akan menvoba penggunaan metode set dan get.
8.2 Time Class Case Study
Contoh pertama berisi dua classes. Dua classes ini harus dideklarasikan dalam file yang terpisah dikarenakan classes tersebut bersifat public class.
Time1 Class Declaration
Class Time 1 menampilkan waktu dalam sehari. Class Time1’s private int berisi variabel jam, menit, dan detik yang mewakilkan format waktu universal. Terdapat pula public method setTime, toUniversalString dan toString.
Berikut source code nya.
//Fig. 8.1: Time 1.java
//Time1 class declaration mantains the time in 24-hour format
public class Time1
{
private int jam; //0 - 23
private int menit; //0 - 59
private int detik; //0 - 59
//set a new time value using universal time
public void setTime(int j, int m, int d)
{
//memvalidasi jam, menit, dan detik
if ((j >= 0 && j < 24) && (m >= 0 && m < 60) && (d >= 0 && d<60))
{
jam = j;
menit = m;
detik = d;
} //akhir dari if
else
throw new IllegalArgumentException("jam, menit dan/atau detik di luar rentang");
} // akhir dari setTime
// mengubah ke string pada format penulisan waktu universal (JJ:MM:DD)
public String toUniversalString()
{
return String.format("%02d:%02d:%02d", jam, menit, detik);
} //akhir format String
//mengubah ke string pada format waktu standar (J:MM:DD AM or PM)
public String toString()
{
return String.format("%d:%02d:%02d %s",
((jam == 0 || jam == 12) ? 12 : jam % 12),
menit, detik, (jam < 12 ? "AM" : "PM"));
} // akhir metode toString
} //akhir dari Program
Using Class Time1
Di bagian ini, terdapat Class Time1 Test. Ini merupakan pengaplikasian dari Time1 Class, dimana fungsi di Time1 akan dipanggil agar program bisa berjalan
//Fig. 8.2: Time1Test.java
//Time1 object used in an application
public class Time1Test
{
public static void main (String[] args)
{
//membuat dan inisialisasi objek Time1
Time1 time = new Time1();//memanggil konstruktor Time1
//output string menampilkan waktu
System.out.print("The initial universal time is : ");
System.out.println(time.toUniversalString() );
System.out.print(" The initial standart time is : ");
System.out.println(time.toString() );
System.out.println();//output satu baris kosong
//mengubah waktu dan output waktu terbaru
time.setTime(13, 27, 6);
System.out.print("Universal time after setTime is : ");
System.out.println(time.toUniversalString() );
System.out.print("Standard time after setTime is: " );
System.out.println(time.toString() );
System.out.println(); //output satu baris kosong
//percobaan mengatur waktu dengan angka yang di luar rentang
try
{
time.setTime(99, 89, 79); //angka di luar rentang
} // akhir percobaan
catch (IllegalArgumentException e)
{
System.out.printf("Exception : %s\n\n", e.getMessage() );
} // end catch
// menampilkan waktu setelah dimasukkan angka di luar rentang
System.out.println("After attempting invalid settings : ");
System.out.print("Universal time : ");
System.out.println(time.toUniversalString() );
System.out.print("Standard time : ");
System.out.println(time.toString() );
}//end main
}//akhir program
Program berjalan.
8.3 Controlling Access to Members
Private Class members tidak dapat diakses di luar class nya sendiri.
//Fig 8.3 : MemberAccessTest.java
//Private members of class Time1 are not accessible
public class MemberAccessTest
{
public static void main(String[] args)
{
Time1 time = new Time1(); //membuat dan inisialisasi objek Time1
time.jam = 7; //error: jam - private access di Time1
time.menit = 15; //error: menit - private access di Time1
time.detik = 30; //error: detik - private access di Time1
}//akhir main
} //akhir program
Saat akan di compile akan muncul error statement bahwa object tersebut tidak dapat diakses
8.4 Referring to the Current Object’s Members with the this Reference
Setiap object dapat mengakses reference dengan kata kunci this. Reference this digunakan untuk menunjuk member dari objek yang ada di dalam class tersebut. ThisTest akan menunjukkan penggunaan this secara eksplisit dan implisit, serta menguji members yang ada di class tersebut.
//Fig. 8.4 : ThisTest.java
//digunakan secara implisit dan eksplisit untuk merujuk ke object's members
public class ThisTest
{
public static void main(String[] args)
{
SimpleTime time = new SimpleTime(15, 30, 19);
System.out.println(time.buildString() );
} //akhir main
}//akhir class ThisTest
//class SimpleTime mendemonstrasikan the "this" reference
class SimpleTime
{
private int jam; //0-23
private int menit; //0-59
private int detik; //0-59
// if the constructor uses parameter names identical to
// instance variable names the "this" reference is
// required to distinguish between the names
public SimpleTime( int jam, int menit, int detik)
{
this.jam = jam; // set "this" object's jam
this.menit = menit; // set "this" object's menit
this.detik = detik; // set "this" object's detik
}//akhir SimpleTime constructor
//use explicit and implicit "this" to call toUniversalString
public String buildString()
{
return String.format("%24s: %s\n%24s: %s",
"this.toUniversalString()", this.toUniversalString(),
"toUniversalString()", toUniversalString() );
}//akhir method buildString
//mengubah ke String pada format waktu Universal (JJ:MM:DD)
public String toUniversalString()
{
// "this" is not required here to access instance variables,
// because method does not have local variables with same
// names as instance variables
return String.format("%02d : %02d : %02d",
this.jam, this.menit, this.detik);
} // akhiir method toUniversalString
}//akhir program
Class SimpleTime mendeklarasikan tiga variabel -jam, menit, detik.
Output program
8.5 Time Class Case Study: Overloaded Constructors
Kita bisa mendeklarasika constructor sendiri untuk mengkhususkan object suatu class saat diinisialisasi. Program berikut akan menampilkan sebuah class dengan beberapa overloaded constructor yang memungkinkan object dari class diinisialisasi dengan cara yang lain.
Class Time2 with Overloaded Construction
Constructor akan menggunakan nilai default kepada object, apabila tidak ada didefinisikan sebelumnya. Dalam program ini nilai jam, menit, dan detik bernilai default yaitu 0.
// Fig. 8.5: Time2.java
// Time2 class declaration with overloaded constructors
public class Time2
{
private int jam; //0-23
private int menit; //0-59
private int detik; //0-59
//Time2 no-argument constructor
//inisialisasi each instance variable to zero
public Time2()
{
this(0, 0, 0);//memanggil TIme2 constructor dgn 3 argumen
} //akhir Time2 no-argument constructor
//Time2 constructor: jam disediakan, menit dan detik diatur ke 0
public Time2(int j)
{
this(j, 0, 0); // memanggil Time2 constructor dengan 3 argumen
} // akhir Time2 one-argument constructor
//Time2 constructor: jam dan menit disediakan, detik diatur ke 0
public Time2(int j, int m)
{
this(j, m, 0);//memanggil Time2 constructor dgn 3 argumen
}//akhir Time2 two-arguments constructor
//Time2 constructor: jam, menit, dan detik disediakan
public Time2(int j, int m, int d)
{
setTime(j, m, d);//memanggil setTime untuk memvalidasi waktu
} //akhir Time2 three-argument constructor
//Time2 constructor: objek Time2 lain yang disediakan
public Time2(Time2 time)
{
//memanggil Time2 three-argument constructor
this(time.getJam(), time.getMenit(), time.getDetik());
} // akhir Time2 dengan objek argumen Time2
// Set Methods
// set a new time value using universal time;
// validate the data
public void setTime(int j, int m, int d)
{
setJam(j); // mengatur jam
setMenit(m); // mengatur menit
setDetik(d); // mengatur detik
} //akhir method setTime
// validate and set jam
public void setJam(int j)
{
if (j >= 0 && j < 24)
jam = j;
else
throw new IllegalArgumentException("hour must be 0-23");
} //akhir method setHour
// validate and set menit
public void setMenit(int m)
{
if (m >= 0 && m < 60)
menit = m;
else
throw new IllegalArgumentException( "minute must be 0-59" );
} //akhir method setMinute
// validate and set detik
public void setDetik(int d)
{
if (d >= 0 && d < 60)
detik = ((d >= 0 && d < 60)?d: 0);
else
throw new IllegalArgumentException( "second must be 0-59" );
} //akhir method setDetik
// Get Methods
// mendapatkan nilai jam
public int getJam()
{
return jam;
}// akhir method getJam
// mendapatkan nilai menit
public int getMenit()
{
return menit;
} // akhir method getMenit
// mendapatkan nilai detik
public int getDetik()
{
return detik;
} // akhir method getDetik
//mengubah ke string dalam format waktu universal (JJ:MM:DD)
public String toUniversalString()
{
return String.format(
"%02d:%02d:%02d", getJam(), getMenit(), getDetik());
} //akhir method toUniversalString
//mengubah ke string dalam format waktu standar (J:MM:DD AM or PM)
public String toString()
{
return String.format( "%d:%02d:%02d %s",
((getJam() == 0 || getJam() == 12) ? 12 : getJam() % 12 ),
getMenit(), getDetik(), (getJam() < 12 ? "AM" : "PM" ) );
} //akhir method toString
} //akhir program / class Time2
Using Class Time2's Overloaded Constructors
Program ini akan menjalankan fungsi Time2. Class Time2Test memanggil constructor Time2 yang overlaoded.
Berikut source code nya.
// Fig. 8.6: Time2Test.java
// Overloaded constructors used to initialize Time2 objects.
public class Time2Test
{
public static void main(String[] args)
{
Time2 t1 = new Time2(); // 00:00:00
Time2 t2 = new Time2(2); // 02:00:00
Time2 t3 = new Time2(21, 34); // 21:34:00
Time2 t4 = new Time2(12, 25, 42); // 12:25:42
Time2 t5 = new Time2(t4); // 12:25:42
System.out.println("Constructed with: ");
System.out.println("t1: all arguments defaulted");
System.out.printf("%s\n", t1.toUniversalString());
System.out.printf("%s\n", t1.toString());
System.out.println(
"t2: hour specified; minute and second defaulted");
System.out.printf("%s\n", t2.toUniversalString());
System.out.printf("%s\n", t2.toString());
System.out.println(
"t3: hour and minute specified; second defaulted");
System.out.printf("%s\n", t3.toUniversalString());
System.out.printf("%s\n", t3.toString());
System.out.println("t4: hour, minute and second specified");
System.out.printf("%s\n", t4.toUniversalString());
System.out.printf("%s\n", t4.toString());
System.out.println("t5: Time2 object t4 specified");
System.out.printf("%s\n", t5.toUniversalString());
System.out.printf("%s\n", t5.toString());
//percobaan untuk inisialisasi t6 dengan nilai invalid
try
{
Time2 t6 = new Time2(27, 69, 55);//nilai invalid
} //akhir percobaan
catch (IllegalArgumentException e)
{
System.out.printf("\nException while initializing t6: %s\n",
e.getMessage());
}//akhir catch
}//akhir main
}//akhir program / Clas Time2Test
Berikut ouput nya.