chapter 3
DESCRIPTION
Slide Ke Empat PI2133 Pemrograman Berorientasi Objek Program Studi Diploma Fakultas Informatika Institut Teknologi TelkomTRANSCRIPT
PI2133Pemrograman Berorientasi ObjekChapter 4Implementasi konsep Encapsulasi dan Modularitas dalam bahasa pemrograman
Model Konseptual dalam PBO•Object Model terdiri dari 4 element utama
(major):▫Abstraksi▫Enkapsulasi
Message Passing ▫Modularity
Package Reusability
▫Hierarchy Inheritance, Generalisasi/Specialisasi Polymorphisme
Enkapsulasi & Message Passing• Menurut Grady Booch
▫ “Encapsulation is the process of hiding all of the details of an object that do not contribute to its essential characteristics.”
• Enkapsulasi atau pembungkusan atau penyembunyian informasi (data hiding) berarti ▫ meninggalkan aspek eksternal dari object yang dapat
diakses oleh object lain dan memfokus diri pada implementasi internal suatu object.
Enkapsulasi
Modularity
Encapsulasi dan Modularity
•Dalam java Encapsulasi diterapkan dengan menggunakan access-specifier (private, protected, public)
•Modularity dapat diterapkan dengan menggunakan keyword package => hasil dari kompilasi harus ditempatkan dalam folder yang sesuai dengan nama package
Modularity
•Sample Code
Encapsulasi
•Makna dari access-specifier dapat diresumekan dalam tabel dibawah iniModifier Kelas yang
samaKelas Turunan Object dlm
Package yg sama
Object yg berbeda package
Private V X X X
Protected V V V X
Public V V V V
Pendefinisian Kelas - JAVA
•Secara umum seluruh attribute pada kelas akan memiliki access modifier private (menjamin information hiding)
•Konsekuensi▫Disediakan method untuk mengakses
Mutator/Setter Accessor/Getter
Declaring Java ClassesBasic syntax of Java class :<class_declaration> ::=<modifier> class <class_name> {
<attribute_declaration>*<constructor_declaration>*<method_declaration>*
}
Example :1. public class Student {2. private String name;3. public void setName(String s) {4. name = s;5. }6. }
Student
- name : string
+ setName(s:string)
Class_name
- attribute_declaration+ constructor_declaration+ method_declaration
Declaring AttributesBasic syntax of Java class :<attribute_declaration> ::=
<modifier> <type>* <name> [=<default_value>];<type> ::= byte | short | int | long | char | float | double | boolean | <class_name>
Example :1. public class Foo {2. private int x;3. public float y = 10000.0;4. public String name = "Alfred";5. }
Declaring MethodsBasic syntax of Java class :<method_declaration> ::=
<modifier> <return_type> <name> (<parameter>*) {<statement>
}
<parameter> ::= <parameter_type> <parameter_name>
Example :1. public class Dog {2. private int weight;3. public int getWeight() {4. return weight;5. }6. public void setWeight(int newWeight) {7. weight = newWeight;8. }9. }
Information Hiding
• The Problem :MyDate d = new MyDate();d.day = 32;//invalid day
d.month = 2; d.day = 30;//plausible but wrong
d.day = d.day + 1;//no check for wrap around
+day : int+month : int+year : int
MyDate
Information Hiding
The Solution1. public class MyDate {2. private int day;3. private int month;4. private int year;
5. public int getDay() {6. return day;7. }8. public int getMonth() {9. return month;10. }11. public int getYear() {12. return year;13. }14. public void setDay(int d) {15. day = d;16. }17. public void setMonth(int m) {18. month = m;19. }20. public void setDay(int y) {21. year = y;22. }23.}
+getDay() : int+getMonth() : int+getYear() : int+setDay(in d : int)+setMonth(in m : int)+setYear(in y : int)
-day : int-month : int-year : int
MyDate
14
Declaring ConstructorsBasic syntax of a constructor :<constructor_declaration> ::=
<modifier> <class_name> (<parameter>*) {<statement>
}
<parameter> ::= <parameter_type> <parameter_name>
Example :1. public class Thing {2. private int x;3. public Thing() { 4. x = 47;5. }6. public Thing(int new_x) { // overloaded constructor7. x = new_x;8. }9. }
Declaring Constructors1. public class Thing {2. private int x;3. public Thing() { 4. x = 47;5. }6. public Thing(int new_x) { // overloaded
constructor7. x = new_x;8. }9. public int getX() { // a 'getter'10. return x;11. }12. public void setX(int new_x) { // a 'setter'13. x = new_x;14. }15. }
Declaring ConstructorsExample usage :1. public class TestThing {2. public static void main(String[] args) {3. Thing thing1 = new Thing();4. Thing thing2 = new Thing(42);
5. System.out.println("thing1.x is " + thing1.getX());6. System.out.println("thing2.x is " + thing2.getX());7. }8. }
Output :thing1.x is 47thing2.x is 42
Encapsulasi
•Sample Code▫Tambahkan kode untuk menunjukkan
perbedaan makna pemakaian access-specifier
Studi Kasus 1
•Pengolahan bangun geometri▫Segitiga▫Lingkaran▫Persegi Panjang
•Note: Tidak ada hubungan khusus antar kelas, setiap kelas dibuat pada file .java
•Pembuatan kelas driver untuk eksekusi program
Diagram kelas
Segitiga PersegiPanjangLingkaran
Driver
Definisi Kelas Segitigapublic class Segitiga{ //Definisi atribute private float alas; private float tinggi; //Definisi method //1. Definisi setter dan getter public void setAlas(int alas) { this.alas=alas; } public float getAlas(){ return this.alas; } public void setTinggi(int tinggi)
{ this.tinggi=tinggi; } public float getTinggi(){ return this.tinggi; }
//2. Definisi method HitungLuaspublic double HitungLuas(){ return (this.alas * this.tinggi)/2; }}
Note: simpan dengan nama Segitiga.javaIngat bahwa file ini hanya mendefinisikan struktur kelastidak untuk dijalankan (execute)
Sesuai dengan nama kelas
Pembuatan Kelas Driver• Kelas driver yang dibuat hanya akan digunakan untuk menguji
apakah fungsionalitas dari kelas yang dibuat telah sesuai
public class Driver{ public static void main(String args[]){ Segitiga obj=new Segitiga(); // membuat object agar obj.setAlas(10); // mengatur atribute alas dengan setter obj.setTinggi(5); // mengatur atribute tinggi dengan setter //mengambil nilai atribute alas dengan getter System.out.println("Alas:"+obj.getAlas()); //mengambil nilai atribute tinggi dengan getter System.out.println("Tinggi:"+obj.getTinggi()); //menghitung luas dengan method HitungLuas System.out.println("Luasnya adalah:"+obj.HitungLuas()); }}
Deklarasi main harus seperti ini
Kompilasi File
•File yang dihasilkan▫Segitiga.java▫Driver.java
•Kompilasi file▫Dari command window:
javac Segitiga.javajavac Driver.java ataujavac *.java
Eksekusi File
•Setelah melakukan kompilasi maka kita dapat mengeksekusi file .class
•Dalam hal ini yang dapat dieksekusi adalah kelas yang memiliki method main yaitu Driver.class
•Perintah Eksekusijava Driver
Hasil Eksekusi
Analisa Solusi
•Tidak ada interaksi antara pengguna dan program √??
•Bagaimana bila kita ingin agar alas dan tinggi diinputkan oleh user??
Membaca Inputan Keyboard
•Kita bisa memanfaatkan kelas Scanner yang telah disediakan oleh java pada package java.util
Contoh membaca dari keyboardimport java.util.Scanner; // program uses class Scanner
public class KeyInput{ // main method begins execution of Java application public static void main( String args[] ) {// create Scanner to obtain input from command window Scanner input = new Scanner( System.in ); int number1; // first number to add int number2; // second number to add int sum; // sum of number1 and number2 System.out.print( "Enter first integer: " ); number1 = input.nextInt(); // read first number from user System.out.print( "Enter second integer: " ); // prompt number2 = input.nextInt(); // read second number from user sum = number1 + number2; // add numbers System.out.printf( "Sum is %d\n", sum ); // display sum} // end method main } // end class Addition
Hasil Eksekusi
Resume [1]
•Setiap definisi kelas disimpan pada file dengan aturan <nama_kelas>.java
•Untuk menguji kebenaran kode yang telah dibuat kita gunakan sebuah kelas baru => Driver harus memiliki methodpublic static void main(String args[])
Resume [2]
•Cara kerja JAVA
Any Question
Tugas
•Lanjutkan kode untuk▫Persegi Panjang▫Lingkaran▫Segitiga
•Tambahkan mekanisme menghitung keliling
•Buatlah kode yang menggambarkan:▫Acces-modifier▫Static▫Polymorphism: overload dan overrid
Inheritance
•Segitiga •PersegiPanjang•Lingkaran
•Bentuk