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 public class Circle 2 { 3 private double radius; // data field 4 5 public Circle(){ constructor //default contructor or no argument 6 } 7 8 public Circle(double r) //contructor with argument 9 { //to initialize radius 10 radius=r; 11 } 12 13 public double getarea() // manipulate radius 14 { 15 return radius*radius*math.pi; 16 } 17 18 public double getperimeter() // manipulate radius 19 { 20 return 2*radius* Math.PI; 21 } 22 } // 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 { 11 coursename = name; // initializes coursename 12 } // end constructor 13 14 // method to set the course name 15 public void setcoursename( String name ) 16 { 17 coursename = name; // store the course name 18 } // end method setcoursename 19 20 // method to retrieve the course name 21 public String getcoursename() 22 { 23 return coursename; 24 } // 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 "CS101 Introduction to Java Programming" ); 13 GradeBook gradebook2 = new GradeBook( 14 "CS102 Data Structures in Java" ); 15 16 // display initial value of coursename for each GradeBook 17 System.out.printf( "gradebook1 course name is: %s\n", 18 gradebook1.getcoursename() ); 19 System.out.printf( "gradebook2 course name is: %s\n", 20 gradebook2.getcoursename() ); 21 } // end main 22 23 } // end class GradeBookTest Call constructor to create first grade book object Create second grade book object 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 Package 2 public class C1{ public int x; int y; private int z; } public void m1(){ } void m2(){ } private void m3(){ } 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 public class Student { 2 private int id; 3 private BirthDate birthdate; 4 5 Public Student(int ssn, int year, int month, int day) { 6 id = ssn; 7 birthdate = new BirthDate(year, month, day); 8 } 9 10 Public int getid() { 11 return id; 12 } 13 14 Public BirthDate getbirthdate() { 15 return birthdate; 16 } 17 }
1 public class BirthDate { 2 private int year; 3 private int month; 4 private int day; 5 6 public BirthDate(int newyear, int newmonth, int newday) { 7 year = newyear; 8 month = newmonth; 9 Day = newday; 10 } 11 12 Public void setyear(int newyear) { 13 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 { 2 public static void main(string[] args) { 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.
afif.supianto@ub.ac.id 081 331 834 734 / 088 160 127 40