+ All Categories
Home > Documents > Modul 5 PBO I Genap 1516

Modul 5 PBO I Genap 1516

Date post: 28-Nov-2023
Category:
Upload: independent
View: 0 times
Download: 0 times
Share this document with a friend
40
Overload, Static Oleh: Tim Dosen PBO I TI USD Jurusan Teknik Informatika Universitas Sanata Dharma
Transcript

Overload, Static

Oleh: Tim Dosen PBO I TI USD

Jurusan Teknik Informatika Universitas Sanata Dharma

Kompetensi• Setelah membaca modul ini

mahasiswa dapat:– Mendefinisikan overloaded methods dan

constructors– Mendefinisikan static methods dan static

atribut – Mengorganisasi kelas dalam suatu paket

(package)

OVERLOAD

Overloading Methods• Dalam Java, dimungkinkan dua atau lebih method dalam kelas yang

sama memiliki nama sama, tetapi harus memiliki parameter yang berbeda.

• Kasus seperti tersebut disebut dengan overload dan method dikatakan saling overloading.

• Metod overloading adalah salah satu cara untuk mengimplementasikan sifat polymorfisme.

• Ketika method yang overloading dipanggil, maka Java akan menggunakan method yang sesuai dengan argumen seperti saat dipanggil.

• Method overload harus memiliki tipe dan jumlah parameter yang berbeda.

• Jika dua method overload memiliki tipe pengembalian nilai / return yang berbeda, hal ini tidak mampu membedakan menjadi dua versi method yang dianggap saling berbeda.

Contoh Overloading• Untuk pemanggilan method yang overload, kita

perlu mengetahui jumlah parameter formal dan tipe setiap parameter formal tersebut. Informasi ini disebut signature method.

• Signature method tidak termasuk nama parameter.

• Contoh method overload yang sudah disediakan Java adalah method println dari System.out. Method ini memiliki signature yang berbeda :

println(int) println(double) println(String) println(char)

println(boolean) println()

• .

// Demonstrate method overloading.

class OverloadDemo {void test() {

System.out.println("No parameters");}// Overload test for one integer parameter.void test(int a) {

System.out.println("a: " + a);}// Overload test for two integer parameters.void test(int a, int b) {

System.out.println("a and b: " + a + " " + b);}// overload test for a double parameterdouble test(double a) {

System.out.println("double a: " + a);return a*a;

}

}

class Overload {public static void main(String args[]) {

OverloadDemo ob = new OverloadDemo();double result;// call all versions of test()ob.test();ob.test(10);ob.test(10, 20);result = ob.test(123.2);System.out.println("Result of ob.test(123.2): " + result);

}}

ResultNo parametersa: 10a and b: 10 20double a: 123.2Result of ob.test (123.2): 15178.24

• Versi yang pertama tidak memiliki parameter, sedangkan yang kedua menggunakan parameter integer, yang ketiga menggunakan dua parameter integer yang keempat menggunakan satu parameter double.

• Pada versi test() yang keempat mengembalikan nilai, tetapi hal ini tidak mempengaruhi dalam membedakan method overload.

Overloading Process• Ketika method overload dipanggil,

Java akan mencari method yang memiliki argumen yang sesuai dengan parameter.

• Tetapi, terkadang ada ketidakcocokan.

• Maka dalam beberapa kasus, terjadi konversi tipe yang diperlukan untuk method yang overload.

Overload & Type Conversion// Automatic type conversions apply to overloading.class OverloadDemo {

void test() {

System.out.println("No parameters");}// Overload test for two integer parameters.void test(int a, int b) {

System.out.println("a and b: " + a + " " + b);

}// overload test for a double parametervoid test(double a) {

System.out.println("Inside test(double) a: " + a);

}}

class Overload {public static void main(String args[]) {

OverloadDemo ob = new OverloadDemo();int i = 88;ob.test();ob.test(10, 20);ob.test(i); // this will invoke test(double)ob.test(123.2); // this will invoke test(double)

}}No parametersa and b: 10 20Inside test(double) a: 88Inside test(double) a: 123.2

Process of Conversion• Seperti yang kita lihat, dalam OverloadDemo tidak

mendefinisikan test(int). • Maka ketika test(int) dipanggil, tidak ada

method yang sesuai, tetapi Java secara otomatis mengkonversi integer tersebut ke double sehingga terselesaikan masalah tersebut.

• Java akan melakukan proses konversi tipe secara otomatis hanya jika tidak ada parameter yang cocok, dan ditemukan method yang dapat disesuaikan.

Constructor Overloading 13

Constructor Overloading

• Method Constructor juga dimungkinkan untuk mengalami overload

• Kita dapat membuat obyek dari sebuah class dengan nilai awal yang berbeda-beda.

14

package TimoSoft;

public class MyClass{ int x; MyClass() { System.out.println("Inside MyClass()

constructor."); x=0; } MyClass(int i) { System.out.println("Inside MyClass(int)

constructor."); x=i; }}

Constructor Overloading 15

MyClass(double d) { System.out.println("Inside MyClass(double)

constructor."); x=(int)d; } void getXvalue() { System.out.println("The value of the instance

variable \n of the object " +this+" is "+x+"."); }}

Constructor Overloading 16

package TimoSoft;

public class MyClassTest{ public static void main(String[] args) { MyClass first=new MyClass(); MyClass second=new MyClass(52); MyClass third=new MyClass(13.6); first.getXvalue(); second.getXvalue(); third.getXvalue(); }}

Constructor Overloading 17

run:Inside MyClass() constructor.Inside MyClass(int) constructor.Inside MyClass(double) constructor.The value of the instance variable of the object TimoSoft.MyClass@19821f is 0.The value of the instance variable of the object TimoSoft.MyClass@addbf1 is 52.The value of the instance variable of the object TimoSoft.MyClass@42e816 is 13.BUILD SUCCESSFUL (total time: 1 second)

Constructor Overloading 18

• Salah satu keuntungan constructor yang dapat overload adalah memungkinkan sebuah obyek untuk menginisialisasi yang lain.

Reason for overloaded constructor

Constructor Overloading 19

package TimoSoft;

public class MyClass{ int x, y; MyClass() { System.out.println("Inside MyClass()

constructor."); x=0; y=0; } MyClass(int i, int j) { System.out.println("Inside MyClass(int)

constructor."); x=i; y=j; }}

Constructor Overloading 20

MyClass(MyClass obj) { System.out.println("Inside MyClass(MyClass)

constructor."); x=obj.x; y=obj.y; } void getXYvalues() { System.out.println("The value of the instance

variables \n of the object " +this+" are "+x+" and "+y+"."); }}

Constructor Overloading 21

package TimoSoft;

public class MyClassTest{ public static void main(String[] args) { MyClass first=new MyClass(); MyClass second=new MyClass(52, 18); MyClass third=new MyClass(second); first.getXYvalues(); second.getXYvalues(); third.getXYvalues(); }}

22

run:Inside MyClass() constructor.Inside MyClass(int) constructor.Inside MyClass(MyClass) constructor.The value of the instance variables of the object TimoSoft.MyClass@19821f are 0 and 0.The value of the instance variables of the object TimoSoft.MyClass@addbf1 are 52 and 18.The value of the instance variables of the object TimoSoft.MyClass@42e816 are 52 and 18.BUILD SUCCESSFUL (total time: 1 second)

THIS

Kata kunci this• Kata kunci this disebut self-referencing pointer

(penunjuk yang menunjuk ke dirinya sendiri) karena ia menunjuk ke diri objek itu sendiri.

: Object

this

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 25

Penggunaan this untuk Merujuk ke Data Member• this dapat digunakan untuk memanggil suatu

metode yang menerima objek• This dapat juga digunakan juga untuk merujuk ke

data memberclass Person {

int age;

public void setAge(int val) { this.age = val;}. . .

}

OVERLOAD

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 26

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 27

Overloaded Methods• 2 atau lebih metode dapat memiliki nama yang sama

asalkan– Mereka memiliki jumlah parameter yang berbeda

(Aturan 1) atau– Parameternya memiliki tipe yang berbeda jika

jumlahnya sama (Aturan 2)public void myMethod(int x, int y) { ... }public void myMethod(int x) { ... } Aturan 1

public void myMethod(double x) { ... }public void myMethod(int x) { ... } Aturan 2

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 28

Overloaded Constructor• Aturan yang sama berlaku juga untuk

metode konstruktor – Oleh karena itu kita dapat mendefinisikan

lebih dari 1 konstruktor dalam satu kelas

public Person( ) { ... }public Person(int age) { ... } Aturan 1

public Pet(int age) { ... }public Pet(String name) { ... } Aturan 2

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 - 29

Konstruktor dan this• Untuk

memanggil suatu konstruktor dari konstruktor lain dalam kelas yang sama, digunakan kata kunci this.

public Fraction( ) { //creates 0/1 this(0,1);}

public Fraction(int number) { //creates number/1 this(number, 1);}

public Fraction(Fraction frac) { //copy constructor this(frac.getNumerator(), frac.getDenominator());}

public Fraction(int num, int denom) { setNumerator(num); setDenominator(denom);}

STATIC

Metode / variable static• Kata kunci static digunakan untuk

mendefinisikan metode milik suatu kelas

public static int gcd(int m, int n) { //the code implementing the Euclidean algorithm}

public static Fraction min(Fraction f1, Fraction f2) {

//convert to decimals and then compare

}

Metode / variable static• Dengan kata kunci static, maka jika

kita memanggil method tidak perlu membuat instance dari kelas.

• Maka method main adalah static

public static void main(String [] args)

Version 9/10 33

Static Fo to Co Convert Examplepublic class FtoC{

public static double convert( double degreesF ) { return 5.0 / 9.0 * (degreesF – 32 ); }

}

public class F2CDemo{

public static void main( String[ ] args ){

double degreesF = 100;

// Since convert is static, no object is needed// The class name is used when convert is called

double degreesC = FtoC.convert( degreesF );System.out.println( degreesC );

}}

Metode / variable static• Anggota class yang bersifat static ini

sering disebut dengan “class members” (class variable dan class methods).

• Class variable bersifat milik bersama dalam arti semua instance/obyek dari class yang sama akan mempunyai class variable milik bersama.

• Class variable mirip dengan global variable.

Chapter 7 - 35

Output:• Objek c1• serial number : 1• counter : 1

• Objek c1 setelah create object c2• serial number : 1• counter : 2

• Objek c2• serial number : 2• counter : 2

PACKAGE

Mengorganisasi Kelas dalam Paket (Package)

• Jika kelas A akan menggunakan kelas B, file kedua kelas tersebut harus berada dalam direktori/folder yang sama.– Hal ini tidak praktis jika kita ingin untuk

mendaur ulang kelas dalam program yang berbeda

• Agar dapat mendaur ulang kelas yang dibuat oleh programmer, tempatkan kelas-kelas yang akan didaur ulang dalam suatu package.

• Suatu package dalam Java adalah suatu class library.

Membuat Package• Langkah berikut mengilustrasikan

pembuatan suatu package bernama myutil yang melibatkan kelas Fraction.1. Include kan perintah

package myutil; sebagai perintah pertama dalam kelas Fraction .2. Deklarasi kelas harus memiliki visibility modifier public sbb

public class Fraction { ...}

3. Buat folder bernama myutil, nama yang sama dengan nama package. Dalam Java, package harus berkorespondensi satu-satu dengan folder.

4. Tempatkan kelas Fraction yang telah dimodifikasi dalam folder myutil dan compile

5. Sesuaikan CLASSPATH sehingga memuat folder yang berisi folder myutil .

KASUS• Perbaikilah kelas Prodi dan Dosen pada

pertemuan 4.• Tambahkan this untuk setiap pemanggilan

atribut kelas.• Tambahkan constructor yang overload dalam

kelas Dosen dengan perbedaan jumlah parameter.


Recommended