chapter 3

34
PI2133 Pemrograman Berorientasi Objek Chapter 4 Implementasi konsep Encapsulasi dan Modularitas dalam bahasa pemrograman

Upload: tjokorda-agung-budi-w

Post on 29-Jun-2015

89 views

Category:

Documents


0 download

DESCRIPTION

Slide Ke Empat PI2133 Pemrograman Berorientasi Objek Program Studi Diploma Fakultas Informatika Institut Teknologi Telkom

TRANSCRIPT

Page 1: Chapter 3

PI2133Pemrograman Berorientasi ObjekChapter 4Implementasi konsep Encapsulasi dan Modularitas dalam bahasa pemrograman

Page 2: Chapter 3

Model Konseptual dalam PBO•Object Model terdiri dari 4 element utama

(major):▫Abstraksi▫Enkapsulasi

Message Passing ▫Modularity

Package Reusability

▫Hierarchy Inheritance, Generalisasi/Specialisasi Polymorphisme

Page 3: Chapter 3

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.

Page 4: Chapter 3

Enkapsulasi

Page 5: Chapter 3

Modularity

Page 6: Chapter 3

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

Page 7: Chapter 3

Modularity

•Sample Code

Page 8: Chapter 3

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

Page 9: Chapter 3

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

Page 10: Chapter 3

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

Page 11: Chapter 3

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. }

Page 12: Chapter 3

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. }

Page 13: Chapter 3

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

Page 14: Chapter 3

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

Page 15: Chapter 3

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. }

Page 16: Chapter 3

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. }

Page 17: Chapter 3

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

Page 18: Chapter 3

Encapsulasi

•Sample Code▫Tambahkan kode untuk menunjukkan

perbedaan makna pemakaian access-specifier

Page 19: Chapter 3

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

Page 20: Chapter 3

Diagram kelas

Segitiga PersegiPanjangLingkaran

Driver

Page 21: Chapter 3

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

Page 22: Chapter 3

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

Page 23: Chapter 3

Kompilasi File

•File yang dihasilkan▫Segitiga.java▫Driver.java

•Kompilasi file▫Dari command window:

javac Segitiga.javajavac Driver.java ataujavac *.java

Page 24: Chapter 3

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

Page 25: Chapter 3

Hasil Eksekusi

Page 26: Chapter 3

Analisa Solusi

•Tidak ada interaksi antara pengguna dan program √??

•Bagaimana bila kita ingin agar alas dan tinggi diinputkan oleh user??

Page 27: Chapter 3

Membaca Inputan Keyboard

•Kita bisa memanfaatkan kelas Scanner yang telah disediakan oleh java pada package java.util

Page 28: Chapter 3

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

Page 29: Chapter 3

Hasil Eksekusi

Page 30: Chapter 3

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[])

Page 31: Chapter 3

Resume [2]

•Cara kerja JAVA

Page 32: Chapter 3

Any Question

Page 33: Chapter 3

Tugas

•Lanjutkan kode untuk▫Persegi Panjang▫Lingkaran▫Segitiga

•Tambahkan mekanisme menghitung keliling

•Buatlah kode yang menggambarkan:▫Acces-modifier▫Static▫Polymorphism: overload dan overrid

Page 34: Chapter 3

Inheritance

•Segitiga •PersegiPanjang•Lingkaran

•Bentuk