TUGAS PBO 2

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.

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. //Fig. 8.1: Time 1.java
  2. //Time1 class declaration mantains the time in 24-hour format
  3.  
  4. public class Time1
  5. {
  6. private int jam; //0 - 23
  7. private int menit; //0 - 59
  8. private int detik; //0 - 59
  9.  
  10. //set a new time value using universal time
  11. public void setTime(int j, int m, int d)
  12. {
  13. //memvalidasi jam, menit, dan detik
  14. if ((j >= 0 && j < 24) && (m >= 0 && m < 60) && (d >= 0 && d<60))
  15. {
  16. jam = j;
  17. menit = m;
  18. detik = d;
  19. } //akhir dari if
  20. else
  21. throw new IllegalArgumentException("jam, menit dan/atau detik di luar rentang");
  22. } // akhir dari setTime
  23.  
  24. // mengubah ke string pada format penulisan waktu universal (JJ:MM:DD)
  25. public String toUniversalString()
  26. {
  27. return String.format("%02d:%02d:%02d", jam, menit, detik);
  28. } //akhir format String
  29.  
  30. //mengubah ke string pada format waktu standar (J:MM:DD AM or PM)
  31. public String toString()
  32. {
  33. return String.format("%d:%02d:%02d %s",
  34. ((jam == 0 || jam == 12) ? 12 : jam % 12),
  35. menit, detik, (jam < 12 ? "AM" : "PM"));
  36. } // akhir metode toString
  37. } //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

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. //Fig. 8.2: Time1Test.java
  2. //Time1 object used in an application
  3.  
  4. public class Time1Test
  5. {
  6. public static void main (String[] args)
  7. {
  8. //membuat dan inisialisasi objek Time1
  9. Time1 time = new Time1();//memanggil konstruktor Time1
  10.  
  11. //output string menampilkan waktu
  12. System.out.print("The initial universal time is : ");
  13. System.out.println(time.toUniversalString() );
  14. System.out.print(" The initial standart time is : ");
  15. System.out.println(time.toString() );
  16. System.out.println();//output satu baris kosong
  17.  
  18. //mengubah waktu dan output waktu terbaru
  19. time.setTime(13, 27, 6);
  20. System.out.print("Universal time after setTime is : ");
  21. System.out.println(time.toUniversalString() );
  22. System.out.print("Standard time after setTime is: " );
  23. System.out.println(time.toString() );
  24. System.out.println(); //output satu baris kosong
  25.  
  26. //percobaan mengatur waktu dengan angka yang di luar rentang
  27. try
  28. {
  29. time.setTime(99, 89, 79); //angka di luar rentang
  30. } // akhir percobaan
  31. catch (IllegalArgumentException e)
  32. {
  33. System.out.printf("Exception : %s\n\n", e.getMessage() );
  34. } // end catch
  35.  
  36. // menampilkan waktu setelah dimasukkan angka di luar rentang
  37. System.out.println("After attempting invalid settings : ");
  38. System.out.print("Universal time : ");
  39. System.out.println(time.toUniversalString() );
  40. System.out.print("Standard time : ");
  41. System.out.println(time.toString() );
  42. }//end main
  43. }//akhir program
  44.  
  45.  

Program berjalan.


8.3 Controlling Access to Members

    Private Class members tidak dapat diakses di luar class nya sendiri.


DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. //Fig 8.3 : MemberAccessTest.java
  2. //Private members of class Time1 are not accessible
  3.  
  4. public class MemberAccessTest
  5. {
  6. public static void main(String[] args)
  7. {
  8. Time1 time = new Time1(); //membuat dan inisialisasi objek Time1
  9.  
  10. time.jam = 7; //error: jam - private access di Time1
  11. time.menit = 15; //error: menit - private access di Time1
  12. time.detik = 30; //error: detik - private access di Time1
  13. }//akhir main
  14. } //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.

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. //Fig. 8.4 : ThisTest.java
  2. //digunakan secara implisit dan eksplisit untuk merujuk ke object's members
  3.  
  4. public class ThisTest
  5. {
  6. public static void main(String[] args)
  7. {
  8. SimpleTime time = new SimpleTime(15, 30, 19);
  9. System.out.println(time.buildString() );
  10. } //akhir main
  11. }//akhir class ThisTest
  12.  
  13. //class SimpleTime mendemonstrasikan the "this" reference
  14. class SimpleTime
  15. {
  16. private int jam; //0-23
  17. private int menit; //0-59
  18. private int detik; //0-59
  19.  
  20. // if the constructor uses parameter names identical to
  21. // instance variable names the "this" reference is
  22. // required to distinguish between the names
  23. public SimpleTime( int jam, int menit, int detik)
  24. {
  25. this.jam = jam; // set "this" object's jam
  26. this.menit = menit; // set "this" object's menit
  27. this.detik = detik; // set "this" object's detik
  28. }//akhir SimpleTime constructor
  29.  
  30. //use explicit and implicit "this" to call toUniversalString
  31. public String buildString()
  32. {
  33. return String.format("%24s: %s\n%24s: %s",
  34. "this.toUniversalString()", this.toUniversalString(),
  35. "toUniversalString()", toUniversalString() );
  36. }//akhir method buildString
  37.  
  38. //mengubah ke String pada format waktu Universal (JJ:MM:DD)
  39. public String toUniversalString()
  40. {
  41. // "this" is not required here to access instance variables,
  42. // because method does not have local variables with same
  43. // names as instance variables
  44. return String.format("%02d : %02d : %02d",
  45. this.jam, this.menit, this.detik);
  46. } // akhiir method toUniversalString
  47. }//akhir program
  48.  
  49.  

    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. 

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. // Fig. 8.5: Time2.java
  2. // Time2 class declaration with overloaded constructors
  3.  
  4. public class Time2
  5. {
  6. private int jam; //0-23
  7. private int menit; //0-59
  8. private int detik; //0-59
  9.  
  10. //Time2 no-argument constructor
  11. //inisialisasi each instance variable to zero
  12. public Time2()
  13. {
  14. this(0, 0, 0);//memanggil TIme2 constructor dgn 3 argumen
  15. } //akhir Time2 no-argument constructor
  16.  
  17. //Time2 constructor: jam disediakan, menit dan detik diatur ke 0
  18. public Time2(int j)
  19. {
  20. this(j, 0, 0); // memanggil Time2 constructor dengan 3 argumen
  21. } // akhir Time2 one-argument constructor
  22.  
  23. //Time2 constructor: jam dan menit disediakan, detik diatur ke 0
  24. public Time2(int j, int m)
  25. {
  26. this(j, m, 0);//memanggil Time2 constructor dgn 3 argumen
  27. }//akhir Time2 two-arguments constructor
  28.  
  29. //Time2 constructor: jam, menit, dan detik disediakan
  30. public Time2(int j, int m, int d)
  31. {
  32. setTime(j, m, d);//memanggil setTime untuk memvalidasi waktu
  33. } //akhir Time2 three-argument constructor
  34.  
  35. //Time2 constructor: objek Time2 lain yang disediakan
  36. public Time2(Time2 time)
  37. {
  38. //memanggil Time2 three-argument constructor
  39. this(time.getJam(), time.getMenit(), time.getDetik());
  40. } // akhir Time2 dengan objek argumen Time2
  41.  
  42. // Set Methods
  43. // set a new time value using universal time;
  44. // validate the data
  45. public void setTime(int j, int m, int d)
  46. {
  47. setJam(j); // mengatur jam
  48. setMenit(m); // mengatur menit
  49. setDetik(d); // mengatur detik
  50. } //akhir method setTime
  51.  
  52. // validate and set jam
  53. public void setJam(int j)
  54. {
  55. if (j >= 0 && j < 24)
  56. jam = j;
  57. else
  58. throw new IllegalArgumentException("hour must be 0-23");
  59. } //akhir method setHour
  60.  
  61. // validate and set menit
  62. public void setMenit(int m)
  63. {
  64. if (m >= 0 && m < 60)
  65. menit = m;
  66. else
  67. throw new IllegalArgumentException( "minute must be 0-59" );
  68. } //akhir method setMinute
  69.  
  70. // validate and set detik
  71. public void setDetik(int d)
  72. {
  73. if (d >= 0 && d < 60)
  74. detik = ((d >= 0 && d < 60)?d: 0);
  75. else
  76. throw new IllegalArgumentException( "second must be 0-59" );
  77. } //akhir method setDetik
  78.  
  79. // Get Methods
  80. // mendapatkan nilai jam
  81. public int getJam()
  82. {
  83. return jam;
  84. }// akhir method getJam
  85.  
  86. // mendapatkan nilai menit
  87. public int getMenit()
  88. {
  89. return menit;
  90. } // akhir method getMenit
  91.  
  92. // mendapatkan nilai detik
  93. public int getDetik()
  94. {
  95. return detik;
  96. } // akhir method getDetik
  97.  
  98. //mengubah ke string dalam format waktu universal (JJ:MM:DD)
  99. public String toUniversalString()
  100. {
  101. return String.format(
  102. "%02d:%02d:%02d", getJam(), getMenit(), getDetik());
  103. } //akhir method toUniversalString
  104.  
  105. //mengubah ke string dalam format waktu standar (J:MM:DD AM or PM)
  106. public String toString()
  107. {
  108. return String.format( "%d:%02d:%02d %s",
  109. ((getJam() == 0 || getJam() == 12) ? 12 : getJam() % 12 ),
  110. getMenit(), getDetik(), (getJam() < 12 ? "AM" : "PM" ) );
  111. } //akhir method toString
  112. } //akhir program / class Time2
  113.  
  114.  
  115.  
  116.  

Using Class Time2's Overloaded Constructors

Program ini akan menjalankan fungsi Time2. Class Time2Test memanggil constructor Time2 yang overlaoded.

Berikut source code nya.

DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. // Fig. 8.6: Time2Test.java
  2. // Overloaded constructors used to initialize Time2 objects.
  3.  
  4. public class Time2Test
  5. {
  6. public static void main(String[] args)
  7. {
  8. Time2 t1 = new Time2(); // 00:00:00
  9. Time2 t2 = new Time2(2); // 02:00:00
  10. Time2 t3 = new Time2(21, 34); // 21:34:00
  11. Time2 t4 = new Time2(12, 25, 42); // 12:25:42
  12. Time2 t5 = new Time2(t4); // 12:25:42
  13.  
  14. System.out.println("Constructed with: ");
  15. System.out.println("t1: all arguments defaulted");
  16. System.out.printf("%s\n", t1.toUniversalString());
  17. System.out.printf("%s\n", t1.toString());
  18.  
  19. System.out.println(
  20. "t2: hour specified; minute and second defaulted");
  21. System.out.printf("%s\n", t2.toUniversalString());
  22. System.out.printf("%s\n", t2.toString());
  23.  
  24. System.out.println(
  25. "t3: hour and minute specified; second defaulted");
  26. System.out.printf("%s\n", t3.toUniversalString());
  27. System.out.printf("%s\n", t3.toString());
  28.  
  29. System.out.println("t4: hour, minute and second specified");
  30. System.out.printf("%s\n", t4.toUniversalString());
  31. System.out.printf("%s\n", t4.toString());
  32.  
  33. System.out.println("t5: Time2 object t4 specified");
  34. System.out.printf("%s\n", t5.toUniversalString());
  35. System.out.printf("%s\n", t5.toString());
  36.  
  37. //percobaan untuk inisialisasi t6 dengan nilai invalid
  38. try
  39. {
  40. Time2 t6 = new Time2(27, 69, 55);//nilai invalid
  41. } //akhir percobaan
  42. catch (IllegalArgumentException e)
  43. {
  44. System.out.printf("\nException while initializing t6: %s\n",
  45. e.getMessage());
  46. }//akhir catch
  47. }//akhir main
  48. }//akhir program / Clas Time2Test
  49.  
  50.  
  51.  
  52.  
  53.  

Berikut ouput nya.