chapter 3

Post on 29-Jun-2015

89 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

top related