Pemrograman Lanjut Tipe Data dan Constructor
PTIIK - 2013
Objectives Mengetahui perbedaan antara tipe data primitive dan reference. Mampu mendeklarasikan dan menggunakan constructor untuk memastikan bahwa suatu data dalam objek telah diinisialisasi ketika object dibangun. Memahami tentang visibility modifiers. Membuat immutable objects dari immutable classes.
Tipe data Primitive Vs. Reference Tipe data dalam Java Primitive • boolean, byte, char, short, int, long, float, double
Reference (terkadang disebut juga sebagai tipe data non-primitive) • Objects • Nilai Default dari null • Digunkaan untuk memanggil method di dalam object
Deklarasi Tipe Data Sebuah tipe data dari suatu variabel (seperti : int, double atau GradeBook) menandakan variabel tersebut ke dalam kelompok tipe data primitive atau reference. Jika tipe variabel BUKAN salah satu dari kedelapan tipe data primitive, maka variabel tersebut bertipe reference. Contoh: GradeBook myGB artinya bahwa myGB mereferensi (reference) ke object GradeBook Account account1 mengindikasikan bahwa account1 mereferensi ke object Account
Assign Data Ketika kita assign suatu variable ke variabel yang lain, variabel tersebut akan diberika nilai yang sama. Untuk primitive type, nilai asli (real value) dari suatu variabel satu di assign ke variabel yang lain. Untuk reference type, referensi (reference) dari suatu variabel satu di assign ke variabel yang lain.
Diagram UML dari kelas
Ilustrasi dari kelas template dan objek dapat distandarisasikan menggunakan notasi UML (Unified Modeling Language). Notasi ini disebut sebagai UML class diagram atau class diagram. Pada UML, setiap kelas di modelkan dalam sebah class diagram dalam bentuk persegi panjang yang memiliki 3 kompartemen sebagai berikut: 1. Bagian atas: Nama kelas, di bold, dan tulisan berada di tengah. 2. Bagian tengah: Attribut dari kelas, yang mencerminkan instance variabel tersebut dalam Java. Kelas Circle hanya mempunyai satu variabel, radius. 3. Bagian bawah: operasi kelas, yang berkaitan dengan method.
Diagram UML dari kelas
Class Circle mempunyai dua method, getArea() dan getPerimeter(), bagian bawah dari class diagram. Method getArea() dan getPerimeter() tidak memerlukan tambahan informasi untuk melakukan task, jadi tanda kurung dalam method ini kosong Tanda (+) di depan nama operasi mengindikasikan method ini adalah public dalam UML (i.e., a public method in Java). Circle Radius : double +getArea(): double +getPerimeter():double
Constructor Constructor merupakan method yang spesial. Merupakan prosedur awal untuk membangun objek. Spesial karena berbeda dari method pada umumnya, yaitu: Constructors harus memiliki nama yang sama dengan nama class. Constructors TIDAK memiliki return type – bahkan void sekalipun. Constructors dipanggil atau dijalankan menggunakan operator new ketika object dibuat instance-nya. Constructors dapat digunakan untuk menginisialisasi suatu object dari class ketika object dibuat
Constructor class yang tidak dideklarasikan constructors di dalamnya, sebuah no-arg constructor secara implisit dideklarasikan dalam class tersebut dengan empty body Constructor tersebut, disebut dengan default constructor, yang disediakan secara otomatis oleh Java hanya jika ketika tidak ada constructor yang dideklarasikan secara eksplisit dalam class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
public class Circle { private double radius; public Circle(){ constructor } public Circle(double r) { radius=r; }
// data field //default contructor or no argument
//contructor with argument //to initialize radius
public double getArea() // manipulate radius { return radius*radius*Math.PI; } public double getPerimeter() // manipulate radius { return 2*radius* Math.PI; } } // end class Circle
Constructor Contoh: Class Circle new Circle() membuat sebuah object Circle dari class Circle menggunakan constructor yang pertama yang didefinisikan dalam class Circle, new Circle(5) membuat sebuah object menggunakan constructor yang kedua yang didefinisikan dalam class Circle. Caution : It is a common mistake to put the void keyword in front of a constructor. For example, public void Circle() {} In this case, Circle() is a method, not a constructor.
1
// Fig. 3.10: GradeBook.java
2
// GradeBook class with a constructor to initialize the course name.
3 4
public class GradeBook
5
{
6
private String courseName; // course name for this GradeBook
7 8
// constructor initializes courseName with String supplied as argument
9
public GradeBook( String name )
10
{ courseName = name; // initializes courseName
11 12
} // end constructor
13 14
// method to set the course name
15
public void setCourseName( String name )
16
{ courseName = name; // store the course name
17 18
} // end method setCourseName
19 20
// method to retrieve the course name
21
public String getCourseName()
22
{
23 24
return courseName; } // end method getCourseName
Constructor to initialize courseName variable
1
// Fig. 3.11: GradeBookTest.java
2
// GradeBook constructor used to specify the course name at the
3
// time each GradeBook object is created.
4 5
public class GradeBookTest
6
{
7
// main method begins program execution
8
public static void main( String args[] )
9
{
10
// create GradeBook object
11
GradeBook gradeBook1 = new GradeBook(
12
Call constructor to create first grade book object
"CS101 Introduction to Java Programming" );
13
GradeBook gradeBook2 = new GradeBook(
14
"CS102 Data Structures in Java" );
15
Create second grade book GradeBook object
16
// display initial value of courseName for each
17
System.out.printf( "gradeBook1 course name is: %s\n",
18 19 20 21
gradeBook1.getCourseName() ); System.out.printf( "gradeBook2 course name is: %s\n", gradeBook2.getCourseName() ); } // end main
22 23 } // end class GradeBookTest gradeBook1 course name is: CS101 Introduction to Java Programming gradeBook2 course name is: CS102 Data Structures in Java
Constructor Meskipun tanpa penggunaan default inisialisasi dari class diperbolehkan, namun keberadaan constructor menjadikan class diinisialisasi dengan beberapa nilai awal yang berguna setiap kali object dibuat.
Visibility Modifiers Visibility modifier bertugas mengatur bagaimana data fields dan methods dalam class dapat diakses dari luar class. Java menyediakan modifiers yang mengatur hak akses tersebut, yaitu: public membuat classes, methods, dan data fields dapat diakses dari semua class. private membuat methods dan data fields hanya dapat diakses dari class itu sendiri.
Visibility Modifiers Jika public atau private tidak digunakan, secara default classes, methods, dan data fields dapat diakses oleh semua class dalam suatu package yang sama disebut juga package-private atau package-access Package1 •public class C1{ public int x; int y; private int z; public void m1(){ } void m2(){ } private void m3(){ } }
Package 2 • Public class C2{ Void aMethod() { C1 o = new C1() can access o.x; can access o.y; can’t access o.z; can invoke o.m1(); can invoke o.m2(); can’t invoke o.m3(); } }
•Public class C3{ Void aMethod() { C1 o = new C1() can access o.x; can’t access o.y; can’t access o.z; can invoke o.m1(); can’t invoke o.m2(); can’t invoke o.m3(); } }
Immutable Objects dan Classes Jika isi/contents dari suatu object tidak dapat diubah ketika suatu object dibuat instance-nya, object itu disebut sebagai immutable object dan class-nya disebut immutable class. Jika kita menghapus set method dalam class, class akan menjadi immutable karena instance variable merupakan modifier private dan tidak dapat diubah tanpa adanya set method.
Immutable Objects dan Classes Contoh, class Student memiliki data fields yang semua modifier-nya private dan tanpa mutators, tetapi class tersebut mutable. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class Student { private int id; private BirthDate birthDate; Public Student(int ssn, int year, int month, int day) { id = ssn; birthDate = new BirthDate(year, month, day); } Public int getId() { return id; } Public BirthDate getBirthDate() { return birthDate; } }
1 2
public class BirthDate { private int year; private int month; private int day;
3 4 5 6
public BirthDate(int newYear, int newMonth, int newDay) { year = newYear; month = newMonth; Day = newDay;
7 8 9 10 11
}
12 13
Public void setYear(int newYear) { Year = newYear;
14 15
} }
data field birthDate dikembalikan nilainya oleh method getBirthDate(). Variabel tsb mereferensi ke object BirthDate. Melalui referensi itu, year dapat diubah, yang secara efektif mengubah isi dari object Student. 1
public class Test { public static void main(String[] args) {
2 3
Student student = new Student(111223333, 1970, 5, 3);
4
BirthDate date = student.getBirthDate();
5
date.setYear(2010); //Now the student birth year is changed! }
6 7
}
Tugas Tambahkan Constructor pada class Mahasiswa dan Nasabah pada latihan pertemuan sebelumnya.
[email protected] 081 331 834 734 / 088 160 127 40