Tugas 2 Exercise 8.1 - 8.6 Kelas PBO C
Selain itu, kami diberi tugas dari Buku Deitel Latihan 8.1 - 8.6 agar kami lebih memahami lebih dalam tentang bagaimana cara membuat class, mengontrol akses kepada member dari sebuah class, membuat constructor, dan lain-lain.
Time Class Case Study
Source Code Time1 :
/**
* Time1 class declaration maintains the time in 24-hour format
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
public class Time1 {
private int hour;
private int minute;
private int second;
// set a new time value using universal time
// throw an exception if the hour, minute, or second is invalid
public void setTime (int h, int m, int s) {
// validate hour, minute, and second
if((h >= 0 && h < 24) && (m >= 0 && m < 60) && (s >= 0 && s < 60)) {
hour = h;
minute = m;
second = s;
}
else {
throw new IllegalArgumentException("hour, minute, and/or second was out of range");
} // end method setTime
}
//convert to String in universal-time-format (HH:MM:SS)
public String toUniversalString() {
return String.format("%02d:%02d:%02d", hour, minute, second);
} // end method toUniversalString
//convert to String in standard-time-format(H:MM:SS AM or PM)
public String toString() {
return String.format("%d:%02d:%02d %s", ((hour == 0 || hour == 12) ? 12 : hour % 12),
minute, second, (hour < 12 ? "AM" : "PM"));
} // end method toString
} // end class Time1
Source Code Time1Test :
/**
* Time1 object used in an application
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
public class Time1Test
{
public static void main(String[] args) {
// create and initialize a Time1 object
Time1 time = new Time1();
// output string representation of the time
System.out.print("The initial universal time is: ");
System.out.println(time.toUniversalString());
System.out.print("The initial standard time is: ");
System.out.println(time.toString());
System.out.println(); // output a blank line
// change time and output updated time
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 a blank line
// attempt to set time with invalid values
try {
time.setTime(99, 99, 99); // all values out of range
} // end try
catch(IllegalArgumentException e) {
System.out.printf("Exception: %s\n\n", e.getMessage());
} // end catch
// display time after attempt to set invalid values
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
} // end class Time1Test
Output Time1Test :
Controlling Access to Members
Source Code MemberAccessTest :
/**
* Private members of class Time1 are not accessible
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
public class MemberAccessTest {
public static void main(String[] args) {
Time1 time = new Time1(); // create and initialize Time1 object
time.hour = 7; // error: hour has private access in Time1
time.minute = 15; // error : minute has private access in Time1
time.second = 30; // error : second has private access in Time1
} // end main
} // end class MemberAccessTest
Ketika di compile akan menghasilkan error :
Referring to The Current Object's Members with The This Refference
Source Code ThisTest :
/**
* this used implicitly and explicitly to refer to members of an object
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
public class ThisTest {
public static void main(String[] args) {
SimpleTime time = new SimpleTime(15, 30, 19);
System.out.println(time.buildString());
}
}
class SimpleTime {
private int hour; // 0-23
private int minute; // 0-59
private int second; // 0-59
// if the constructor uses parameter names identical to
// instance variable names the "this" reference is
// required to distinguished between the names
public SimpleTime(int hour, int minute, int second) {
this.hour = hour; // set "this" object's hour
this.minute = minute; // set "this" object's minute
this.second = second; // set "this" object's second
} // end 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());
} // end method buildString
//convert to String in universal-time-format (HH:MM:SS)
public String toUniversalString() {
// "this" is not required have to access instance variables
// because method does not have local variables with
// same name as instance variables
return String.format("%02d:%02d:%02d", this.hour, this.minute, this.second);
} // end method toUniversalStrig
}
Output ThisTest :
Overloaded Constructor
Source Code Time2:
/**
* Time2 class declaration with overloaded constructors
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
public class Time2 {
private int hour; // 0-23
private int minute; // 0-59
private int second; // 0-59
// Time2 no-argument constructor:
// initializes each instance variable to zero
public Time2() {
this(0, 0, 0); // invoke Time2 constructor with three arguments
} // end Time2 no-argument constructor
// Time2 constructor: hour supplied, minute and second defaulted to 0
public Time2(int h) {
this(h, 0, 0); // invoke Time2 constructor with three arguments
} // end Time2 one-argument constructor
// Time2 constructor : hour and minute supplied, second defaulted to 0
public Time2(int h, int m) {
this(h, m, 0); // invoke Time2 constructor with three arguments
} // end Time2 two-argument constructor
// Time2 constructor : hour, minute, and second supplied
public Time2(int h, int m, int s) {
setTime(h, m, s); // invoke setTime to validate time
} // end Time2 three-argument constructor
public Time2(Time2 time) {
// Invoke Time2 three-argument constructor
this(time.getHour(), time.getMinute(), time.getSecond());
} // end Time2 constructor with a Time2 object argument
// set Methods
// set a new time value using universal time
// validate the data
public void setTime(int h, int m, int s) {
setHour(h); // set the hour
setMinute(m); // set the minute
setSecond(s); // set the second
} // end method setTime
// validate and set hour
public void setHour(int h) {
if(h >= 0 && h < 24) {
hour = h;
} else {
throw new IllegalArgumentException("hour must be 0-23");
}
}
// validate and set minute
public void setMinute(int m) {
if(m >= 0 && m < 60) {
minute = m;
} else {
throw new IllegalArgumentException ("minute must be 0-59");
}
}
// validate and set second
public void setSecond(int s) {
if(s >= 0 && s < 60) {
second = s;
} else {
throw new IllegalArgumentException ("second must be 0-59");
}
}
// Get Methods
// get hour value
public int getHour() {
return hour;
} // end method getHour
// get minute value
public int getMinute() {
return minute;
} // end method getMinute
// get second value
public int getSecond() {
return second;
} // end method getSecond
// convert to String in universal-time format (HH:MM:SS)
public String toUniversalString() {
return String.format("%02d:%02d:%02d", getHour(), getMinute(), getSecond());
} // end method toUniversalString
// convert to String in standard-time format (H:MM:SS AM or PM)
public String toString() {
return String.format("%d:%02d:%02d %s", ((getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12),
getMinute(), getSecond(), (getHour() < 12 ? "AM" : "PM"));
} // end method toString
} // end class Time2
Source Code Time2Test :
/**
* Overloaded constructors used to initialize Time2 objects
*
* @author Aimar Wibowo
* @version 10 Oktober 2020
*/
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 objecct t4 specified");
System.out.printf(" %s\n", t5.toUniversalString());
System.out.printf(" %s\n", t5.toString());
// attempt to initialize t6 with invalid values
try {
Time2 t6 = new Time2(27, 74, 99); // invalid values
} // end try
catch(IllegalArgumentException e) {
System.out.printf("\nException while initializing t6: %s\n", e.getMessage());
} // end catch
} // end class Time2Test
}
Output Time2Test :
Komentar
Posting Komentar