Anda di halaman 1dari 77

Pemrograman Dasar

METODE
Putra Pandu Adikara
Indriati
Sutrisno
Fakultas Ilmu Komputer
Universitas Brawijaya

1
Learning Outcomes

Pada akhir pertemuan ini, diharapkan mahasiswa


akan mampu :
• Memahami dan menggunakan user defined
procedure dan function (method) serta pengiriman
parameter

2
Outline Materi

• Pemrograman Modular
• Metode
• Metode Rekursi
• Iterasi vs Rekursi
• Static vs Non Static

3
Pemrograman Modular
• Program dibagi-bagi menjadi sekumpulan modul
program, sehingga dapat diperoleh beberapa
keuntungan berikut:
• Rancangan sebuah program besar dapat dibagi menjadi
modul-modul yang lebih kecil.
• Dapat dikerjakan oleh lebih dari satu orang dengan koordinasi
yang relatif mudah.
• Mencari kesalahan relatif lebih mudah karena alur proses
dapat terlihat lebih jelas, dan kesalahan dapat dilokalisir dalam
satu modul.
• Modifikasi dapat dilakukan, tanpa menggangu program secara
keseluruhan
• Reusable
• Mempermudah dokumentasi

4
Modularitas di Java

• Bahasa pemrograman Java merupakan bahasa


pemrograman dengan pendekatan pemrograman
berorientasi objek murni, maka modularitas java
dapat meliputi:
• Paket/Project dapat tersusun dari satu atau lebih kelas
atau interface.
• Kelas (class) dan interface tersusun dari satu atau lebih
anggota (member), baik berupa anggota data (field) atau
anggota fungsi (method).
• Metode tersusun dari satu atau lebih pernyataan, baik
berupa deklarasi (variabel lokal) atau pernyataan yang
dieksekusi.

5
Modularitas
di Pemrograman Terstruktur
• Pemrograman terstruktur merupakan
pemrograman berbasis proses, yang memisahkan
antara data dan fungsi/prosedur.
• Modularitas pemrograman terstruktur berarti
menyusun sebuah program terdiri dari satu atau
lebih (sejumlah) subprogram yang dapat berupa
fungsi/prosedur (metode).
• fungsi/prosedur (metode) dapat memuat sejumlah
konstanta, variabel atau instruksi.

6
Pemrograman
Terstruktur Modular
• Pemrograman terstruktur modular tersusun dari
sebuah program utama disertasi sejumlah
subprogram
Program Utama

SubProgram SubProgram SubProgram

SubProgram SubProgram

7
Pemrograman Modular

• Sifat-sifat modul yang baik adalah:


• Fan-In yang tinggi, yaitu makin sering suatu modul
dipanggil oleh pengguna, makin tinggi nilai fan-in.
• Fan-Out yang rendah, makin sedikit tugas yang dilakukan
oleh suatu modul makin rendah nilai fan-out. Dengan
demikian, makin spesifik tugas yang dikerjakan oleh
modul tersebut.
• Self-Contained, atau dapat memenuhi kebutuhannya
sendiri.

8
Sekilas Tentang Metode
• Sejak menulis program Java pertama, sudah pasti
menggunakan metode, yaitu metode main().
• Metode lain yang sering digunakan ketika pertaman menulis
program Java adalah: print().

• Metode memuat serangkaian pernyataan (instruksi) yang


dapat dipergunakan untuk melakukan proses tertentu dan
memiliki identifier (nama).
• Melalui identifier, eksekusi metode menjadi jauh sederhana,
tanpa harus menyalin seluruh instruksi dalam metode.

9
Sekilas Tentang Metode

• Beberapa hal penting yang perlu diperhatikan


terkait metode:
• Pemanggilan metode: menjalankan metode dengan
menuliskan nama (identifier) metode tersebut.
• Argumen: pengiriman pesan (informasi) pada metode
yang dipanggil.
• Kembali ke pemanggil: ketika metode yang dipanggil
telah menyelesaikan operasinya.
• Pengembalian nilai: metode yang dipanggil dapat
mengirimkan nilai (informasi) ke pemanggilnya.

10
Metode dan
Penyembunyian Informasi
• Salah satu keuntungan yang paling penting dari penggunaan
metode adalah bahwa pengguna metode tidak perlu
memikirkan/memperhatikan operasi di dalam metode yang
bisa jadi sangat kompleks.
• Ketika menjadi sebagai pengguna metode, yang lebih
penting diketahui adalah untuk apa metode tersebut
dibandingkan dengan memahami tentang cara kerjanya
(instruksi-instruksi di dalamnya).
• Rincian instruksi yang terdapat di dalam metode diperlukan
hanya untuk programmer yang mengimplementasikan
metode tersebut.

11
Metode dan
Penyembunyian Informasi
• Programmer sebagai pengguna metode biasanya
tidak perlu harus memahami proses kerja yang
terdapat di dalam metode tersebut.
• Gagasan bahwa pemanggil metode harus terisolasi
dari rincian operasi metode merupakan prinsip dari
penyembunyikan informasi (information hiding),
yang merupakan salah satu pilar dari rekayasa
perangkat lunak.

12
Metode
Sebagai Alat Bagi Programmer
• Terutama ketika pertama kali belajar pemrograman, perlu
diingat bahwa metode tidak sama dengan program aplikasi,
meskipun keduanya menyediakan layanan yang
menyembunyikan kompleksitas perhitungan yang termuat di
dalamnya.
• Perbedaan utama adalah bahwa program aplikasi
menyediakan layanan kepada pengguna program, yang
biasanya bukan programmer melainkan seseorang yang
menggunakan program aplikasi.
• Sebaliknya, metode menyediakan layanan untuk
programmer, yang biasanya pembuat/pengembang
beberapa jenis program aplikasi.

13
Metode
Sebagai Alat Bagi Programmer
• Pemahaman tentang perbedaan konsep antara metode dan
program aplikasi ini sangat penting.
• Ketika mencoba memahami bagaimana konsep dari
program aplikasi input dan output berbeda dengan konsep
dari argumen dan hasil pengembalian nilai.
• Metode seperti nextInt() dan println() digunakan untuk
berkomunikasi dengan pengguna program dan tidak
memainkan peran dalam mengkomunikasikan informasi dari
satu bagian program dengan bagian program lainnya.

14
Pemanggilan Metode
• Dalam sintaksis, pemanggilan metode di pemrograman Java
merupakan bagian dari ekspresi.
• Metode yang mempunyai pengembalian nilai dapat
digunakan sebagai operand dalam ekspresi, layaknya
variabel atau konstanta.
• Kelas Math dalam paket java.lang mendefinisikan
beberapa metode yang berguna dalam membuat ekspresi
matematika.
• Misalnya, untuk menghitung jarak dari sebuah titik (x,y) ke
titik 0 (titik 0,0) dapat dilakukan dengan menggunakan
rumusan sbb.:

15
Pemanggilan Metode
• Misalnya, untuk menghitung jarak dari sebuah titik (x,y)
ke titik 0 (titik 0,0) dapat dilakukan dengan
menggunakan rumusan sbb.:

x2+y2
• Penulisan kode program dapat menerapkan fungsi akar
kuadrat dengan memanggil metode sqrt() di kelas
Math sbb. :
double jarak = Math.sqrt(x*x + y*y);
• Catatan:
penulisan nama kelas diikuti nama metode perlu dilakukan
untuk metode static (seperti Math.sqrt()).
16
Pemanggilan Metode

• Dalam pemrograman berorientasi objek seperti Java,


pemanggilan metode dinyatakan sebagai pengiriman
pesan ke obyek. Sebagai contoh, pemanggilan metode:
System.out.println(“Hello 123”);
• Melakukan pengiriman pesan ke objek System.out
agar menampilkan Hello 123 di layar monitor.
• Jika objek yang menerima pesan disebut penerima,
maka cara penulisan untuk mengirim pesan ke objek
adalah sbb.:
penerima.namaMetode(argumen);

17
Deklarasi Metode
• Sintaksis penulisan deklarasi metode adalah sbb.:
lingkup tipe namaMetode(daftar-argumen) {
pernyataan-pernyataan (bodi metode)
}
• lingkup menunjukkan siapa yang berhak memiliki akses ke
metode,
• tipe menunjukkan jenis nilai yang dikirimkan kembali oleh
metode,
• namaMetode adalah nama/identifier dari metode,
• daftar-argumen adalah daftar deklarasi untuk variabel
digunakan untuk menyimpan nilai pesan/informasi dari
setiap argumen.

18
Deklarasi Metode
• Nilai dari lingkup dapat berupa: public, private,
protected atau kosong (default).
• private berarti bahwa metode ini hanya dapat diakses
(dipanggil) dari dalam kelasnya sendiri.
• public berarti kelas lain juga dapat mengakses metode
tersebut.
• protected berarti selain kelasnya sendiri, juga dapat
diakses oleh kelas lain dalam satu paket (direktori).
• kosong (default) sama dengan default package (bisa diakses
di paket yang sama).

19
Deklarasi Metode

• Metode yang mengembalikan nilai kepada


pemanggilnya disebut fungsi (function)
• Misalnya:
• Math.sin(), Math.cos(), Math.power(),
nextInt() di class Scanner, dll
• Jika diinginkan metode yang tidak mengembalikan
nilai, maka tipe yang digunakan adalah void.
• Metode yang tidak mengembalikan nilai kepada
pemanggilnya disebut prosedur (procedure).
• Misalnya:
• System.out.println()

20
Pengembalian Nilai Dari Metode

• Untuk dapat melakukan pengiriman kembali nilai


data dari sebuah metode ke pemanggilnya,
digunakan pernyataan return.
• Cara penulisan return di dalam metode adalah
sbb.:
return ekspresi;
• yang mana ekspresi adalah ekspresi di
pemrograman Java dan menentukan nilai data yang
akan dikirim kembali ke pemanggilnya.

21
Pengembalian Nilai Dari Metode

• Contoh sebuah deklarasi metode berikut:


public double feetKeInci(double feet) {
return 12 * feet ;
}

• Metode feetKeInci() tersebut dipakai untuk


mengkonversi sebuah argumen yang menunjukkan
nilai dalam feet dan akan dijadikan nilai jarak dalam
inci, berdasarkan atas rumusan bahwa satu kaki
(feet) setara dengan 12 inci.

22
Pernyataan IF Dalam Metode
• Dalam sebuah metode dapat memuat berbagai
pernyataan, termasuk pernyataan if.
• Perhatikan pada contoh deklarasi metode berikut:
public int maksimum(int x, int y) {
if (x>y) return x ;
else return y;
}

• Pada contoh di atas menjelaskan bahwa pernyataan


return dapat muncul lebih dari sekali.

23
Metode Faktorial

• Faktorial dari sebuah nilai integer n (ditulis n!)


didefinisikan sebagai perkalian dari bilangan bulat 1
hingga n.
• Dengan demikian, 5! =1 x 2 x 3 x 4 x 5 = 120.
• Berikut deklarasi metode yang menggunakan loop
for untuk menghitung nilai faktorial n:
public int faktorial (int n) {
int f = 1;
for (i=1; i<=n; i++) f *= i ;
return f;
}

24
Metode Non Numerik
• Metode di Java dapat mengirim kembali nilai data ke
pemanggilnya dari tipe data apa saja termasuk kelas. Metode
berikut, misalnya, mengembalikan nilai data bertipe String berupa
nama hari dalam seminggu, yaitu angka antara 0 (Minggu) hingga
6 (Sabtu):
private String namaHari(int hari) {
switch (hari) {
case 0: return "Minggu";
case 1: return "Senin";
case 2: return "Selasa";
case 3: return "Rabu";
case 4: return "Kamis";
case 5: return "Jumat";
case 6: return "Sabtu";
default: return "Nilai Salah";
}
} 25
Metode Predikat
• Metode yang mengembalikan nilai boolean memainkan
peran penting dalam pemrograman dan biasa disebut
metode predikat.
• Sebagai contoh, metode berikut ini mengembalikan
nilai true jika argumen pertama habis dibagi oleh
argumen kedua, dan false jika tidak:
private boolean habisDibagi(int x, int y) {
return x % y == 0;
}
• Setelah metode predikat didefinisikan, metode tersebut
dapat digunakan layaknya nilai Boolean lainnya.
• Misalnya, akan digunakan untuk mencetak bilangan bulat
antara 1 dan 100 yang habis dibagi 7 sebagai berikut:

26
Metode Predikat

• Setelah metode predikat didefinisikan, metode


tersebut dapat digunakan layaknya nilai Boolean
lainnya.
• Misalnya, akan digunakan untuk mencetak bilangan
bulat antara 1 dan 100 yang habis dibagi 7 sebagai
berikut :
for (int i=1; i<=100; i++){
if (habisDibagi(i,7))
System.out.println(i);
}

27
Metode Predikat
• Contoh metode predikat kelipatanDua() yang memiliki
argumen integer n dan mengembalikan nilai true jika n
merupakan nilai kelipatan dua, dan false jika tidak.
• Nilai kelipatan 2 adalah 1, 2, 4, 8, 16, 32, dan seterusnya,
sedangkan bilangan kurang dari atau sama dengan nol
bukan merupakan nilai kelipatan dua.
private boolean kelipatanDua(int n) {
if (n <= 0) return false;
while(n>1){
if (n % 2 == 1) return false;
n /= 2;
}
return true;
}
28
Mekanisme Proses Pemanggilan
Metode
Ketika sebuah metode dipanggil, terjadi mekanisme berikut:
1. Java mengevaluasi ekspresi argumen dalam konteks
pemanggilan metode.
2. Java menyalin setiap nilai argumen ke variabel parameter
yang sesuai, yang dialokasikan di lokasi memori baru yang
disebut stack frame. Pengalokasian memori ini mengikuti
urutan argumen: argumen pertama disalin ke variabel
parameter pertama, dst.
3. Java kemudian mengeksekusi pernyataan-pernyataan
dalam tubuh metode, menggunakan stack frame baru
untuk alokasi setiap variabel lokal.

29
Mekanisme Proses Pemanggilan
Metode
4. Ketika Java menemukan pernyataan return, akan
menghitung nilai return dan mengganti nilai di tempat
pemanggil dengan nilai return tsb.
5. Java kemudian membebaskan memori frame stack yang
dipakai untuk pemanggilan metode dan proses kembali ke
pemanggilnya untuk melanjutkan proses yang telah
ditinggalkan selama mengeksekusi metode yang
dipanggil.

30
Fungsi Kombinasi
1. Sebuah fungsi kombinasi C (n, k) dipergunakan untuk
menghitung berapa kemungkinan yang dapat terjadi
dalam memilih sejumlah k elemen dari satu set yang
terdiri atas n objek.
2. Anggaplah, kita memiliki lima kelereng berwarna: biru,
kuning, hijau, merah dan putih.
3. Berapa kemungkinan dapat terjadi seandainya diambil 2
kelereng dari 5 kelereng di atas.
4. Bisa saja didapat kelereng warna: biru+kuning, biru+hijau,
biru+merah, biru+putih, kuning+hijau, kuning+merah,
kuning+putih, hijau+merah, hijau+putih dan merah+putih.
Dimana jumlah kemungkinannya adalah 10.

31
Fungsi Kombinasi
• Untungnya, matematika menyediakan cara yang lebih
mudah untuk menghitung fungsi kombinasi dibandingkan
dengan cara menghitung semua kemungkianan di atas. Nilai
fungsi kombinasi dapat dihitung menggunakan rumus sbb.:
n!
C(n, k) =
k ! x (n – k) !

• Metode faktorial telah dibuat sebelumnya, maka mudah


untuk mengubah formula di atas langsung menjadi metode
Java, sebagai berikut:
public int kombinasi (int n, int k) {
return faktorial(n)/(faktorial(k) * faktorial(n-k));
}
32
Dekomposisi
• Salah satu keuntungan paling penting dari penggunaan
metode adalah dimungkinkannya memecah program besar
menjadi bagian-bagian program yang masing-masing lebih
kecil dan lebih sederhana. Proses ini disebut dekomposisi.
Program Utama

SubProgram-1 SubProgram-2 SubProgram-3

SubProgram-2a SubProgram-2b

• Setelah melakukan dekomposisi, maka selanjutnya dapat


digunakan metode untuk implementasi dari setiap
subprogram.
33
Strategi Dekomposisi
1. Salah satu aspek yang paling strategis dari pemrograman adalah proses
memutuskan bagaimana menguraikan program besar menjadi
subprogram-subprogram lebih kecil.
2. Dalam kebanyakan kasus, strategi dekomposisi terbaik untuk program
mengikuti struktur permasalahan dunia nyata, dimana pengembangan
program komputer dimaksudkan untuk memecahkan permasalahan (solusi).
Jika permasalahan memiliki submasalah alami, biasanya submasalah tersebut
dapat memberikan dasar berguna dalam merancang dekomposisi Program.
3. Setiap subprogram hasil dekomposisi harus melakukan fungsi yang lebih
mudah terkait nama dan persoalannya.
4. Salah satu tujuan utama dari dekomposisi adalah untuk menyederhanakan
proses pemrograman. Karena itu strategi dekomposisi yang baik harus
mengurangi penyebaran kompleksitas.
5. Sebagai aturan umum, setiap tingkat dalam dekomposisi harus bertanggung
jawab untuk rincian tertentu dan menghindari detail yang keterkaitan dengan
lainnya hingga ke tingkat yang lebih tinggi..

34
Metode Algoritmik
1. Metode merupakan hal penting dalam pemrograman, karena metode
menyediakan struktur yang dapat mengekspresikan algoritma.
Algoritma adalah ekspresi abstrak dari strategi solusi.
2. Penerapan algoritma sebagai metode dapat membuat strategi abstrak
yang lebih konkret.
3. Algoritma untuk memecahkan suatu masalah tertentu dapat
bervariasi agar lebih efisien. Perlu berpikir hati-hati ketika memilih
algoritma, karena membuat pilihan yang buruk dapat berisiko besar.
4. Berikut algoritma untuk menghitung pembagi bersama terbesar dari
bilangan bulat x dan y, yang didefinisikan sebagai bilangan bulat
terbesar yang membagi secara merata ke kedua.

35
Pendekatan Brute-force
• Salah satu strategi untuk mendapatkan pembagi terbesar adalah dengan
menghitung mundur dari nilai yang lebih kecil sampai ditemukan satu
pembagi secara merata dari kedua nilai. Kode program dapat terlihat sbb.:
public int pembagiTerbesar(int x, int y) {
int duga = Math.min(x, y);
while (x % duga!= 0 || y % duga != 0) duga--;
return duga;
}

• Algoritma ini harus berhenti untuk nilai-nilai positif x dan y karena nilai
dugaan akhirnya akan mencapai 1. Di saat itu, nilai dugaan merupakan nilai
pembagi terbesar karena pengulangan while telah menguji semua nilai yang
lebih besar.
• Mencoba setiap kemungkinan di atas disebut sebagai strategi Brute-Force.

36
Algorithma Euclid
• Jika menggunakan pendekatan Brute-Force untuk menghitung
pembagi terbesar dari 1000005 dan 1000000, program akan
mengambil hampir satu juta langkah untuk bisa mendapatkan
jawabannya adalah 5.
• Untuk mendapatkan jawaban yang jauh lebih cepat, bila dapat dipilih
algoritma yang lebih baik. Matematikawan Euclid dari Alexandria
menemukan algoritma yang lebih efisien pada 23 abad yang lalu,
sbb.:
public int pembagiTerbesar(int x, int y) {
int r = x % y;
while (r != 0) {
x = y; y = r;
r = x % y;
}
return y;
}
37
Metode Algorithmik
1. Jika menggunakan algoritma Euclid untuk nilai 1000005
dan 1000000, jawaban yang benar akan diperoleh hanya
dalam dua langkah, yang jauh lebih baik daripada sejuta
langkah yang diperlukan bila menggunakan Brute-Force.
2. Gagasan besar Euclid adalah bahwa pembagi terbesar dari
x dan y juga harus menjadi pembagi terbesar dari y dan
sisa x dibagi dengan y.
3. Sangat mudah untuk melihat bagaimana algoritma Euclid
bekerja, jika kita berpikir tentang masalah geometris,
sebagaimana yang dilakukan Euclid.
Contoh berikut memuat langkah-langkah perhitungan
menggunakan algoritma Euclid untuk x=78 dan y=33.

38
Ilustrasi Algoritma Euclid
Step 1: Hitung sisa pembagian 78 dengan 33:
x 78
y 33 33 12

Step 2: Hitung sisa pembagian 33 dengan 12:


x 33
y 12 12 9

Step 3: Hitung sisa pembagian 12 dengan 9:


x 12
y 9 3

Step 4: Hitung sisa pembagian 9 dengan 3:


x 9
y 3 3 3 Karena tidak ada nilai sisa pembagian, jawaban dengan 3:
39
Lingkup Identifier

•Lingkup identifier meliputi bagian-bagian


program yang mana sebuah identifier masih
bisa diakses.
•Lingkup identifier meliputi:
• Local
• Global

40
Lingkup Identifier

• Local identifier • Global identifier


• Identifier yang • Identifier yang
dideklarasikan di dalam dideklarasikan di luar
metode, termasuk daftar metode.
argumen/parameter. • Ruang lingkupnya
• Lingkupnya terbatas pada meliputi seluruh kelas.
metode tempat • Identifier global, dapat
dideklarasikan. diakses oleh seluruh
metode dalam kelas.

41
Metode Rekursif
(Recursive)

42
Metode Rekursi (Recursion)
• Metode rekursi adalah metode yang di dalamnya terdapat
pernyataan yang memanggil dirinya sendiri.
• Metode rekursif sangat berguna dalam pemecahan masalah jika
masalah tersebut dapat didefinisikan secara rekursif pula.
• Contoh: Faktorial(n) atau n! didefinisikan sebagai berikut:
n! = 1, untuk n = 0;
n! = n * (n-1)!, untuk n > 0
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1* 0!
0! = 1
Bila ditelusur mundur: 4! = 1*2*3*4 = 24
43
Metode Rekursi (Recursion)
Hal yang perlu diperhatikan dalam penggunaan metode rekursi:
• Memerlukan memori lebih banyak, karena memerlukan tambahan
memori untuk ‘Activation Record Stack’.
• Memerlukan waktu eksekusi lebih lama, karena perlu menjejaki
setiap pemanggilan metode secara rekursif melalui ‘Activation
Record’.
• Secara umum, gunakan penyelesaian secara rekursif, jika:
• Penyelesaian sulit dilaksanakan secara iteratif
• Efisiensi dengan cara rekursif sudah memadai
• Efisiensi bukan masalah dibandingkan dengan kejelasan logika
program
• Pemborosan (redundancy) dapat terjadi dalam penyelesaian
permasalahan menggunakan rekursif

44
Contoh Metode Rekursi

• Menghitung faktorial(n) atau n!:


n! = (n-1)! * n, untuk n>0
n! = 1, untuk n=0

Deklarasi metode:

int faktorial(int n) {
if(n>0) return n*faktorial(n-1);
else return 1;
}

45
Contoh Metode Rekursi

• Bilangan Fibonacci:
fib(n) = n, untuk n = 0 atau n = 1
fib(n) = fib(n-2) + fib(n-1), untuk n>=2

Deklarasi metode:

int fibonacci(int n) {
if (n==0 || n==1) return n;
else return fibonacci (n-2)+fibonacci(n-1);
}

46
Bilangan Fibonacci

• Contoh : Skema fibonacci jika N=4

FIB (4)

FIB (3) FIB (2)

FIB (2) FIB (1) FIB (1) FIB (0)

FIB (1) FIB (0)

47
Fungsi Rekursif vs Iterasi

• Contoh

Faktorial – Rekursif Faktorial - Iteratif

long faktor (int n) { long faktor(int n) {


if(n==0) long i, fak = 1;
return (1); for(i=1; i<=n; i++)
else
fak *= i;
return(n * faktor(n-1));
return (fak);
}
}

48
Static vs Non Static

49
Variabel & Metode Dinamis
• Semua instansiasi variabel dan metode yang telah kita buat
selama ini merupakan variabel dan metode dinamis.
• Deklarasi variabel dan metode secara default bersifat
dinamis, tidak ada keyword dynamic di Java.
• Secara umum, dinamis mengacu pada hal-hal yang
instansiasi (pengalokasian memori) di saat “run time" (saat
dijalankan).
• Setiap objek memiliki instansiasi sendiri dari setiap variabel
dinamisnya.
• Setiap objek secara efektif memiliki salinan sendiri
dari setiap metode dinamis.
• Tidak dituliskannya kata kunci static sebelum variabel
non-lokal dan metode berarti bersifat dinamis (satu setiap
instansiasi objek )

50
Variabel Static
• Static dalam arti “secara umum berkaitan dengan kelas",
tidak “berkaitan dengan obyek secara individual”.
• Sebuah variabel dapat dideklarasikan (di luar metode)
dengan kata kunci static:
• Misalnya: static int n;
• Hanya ada satu variabel n untuk semua objeknya.
• Sebuah variabel static digunakan bersama oleh semua
instansiasinya (objeknya), dalam arti semua instansiasi dari
kelas yang memiliki variabel static mengakses pada sebuah
variabel.
• Sebuah variabel static dengan lingkup public dapat
diakses dengan cara:
• namaKelas.namaVariabel
• Misalnya Math.PI

51
Metode Static
• Sebuah metode dapat dideklarasikan dengan menggunakan
kata kunci static.
• Metode static berada di tingkat kelas, bukan pada tingkat
objek.
• Metode static hanya dapat mengakses variabel static
dan metode static.
• Contoh:

public static int getN() {


return n;
}

• Variabel n pada contoh di atas harus dideklarasikan static

52
Metode Static

• Sebuah metode static dengan lingkup public


dapat diakses dengan cara sbb.:
• namaKelas.namaMetode(argumen)
• Contoh:
double hasil = Math.sqrt (25.0);
int jumlahAkses = Akses.getN();

53
Konteks static

• Program aplikasi Java yang akan dieksekusi pertama kali adalah


metode:
public static void main (String args [])
• Metode main() harus static karena dieksekusi pertama kali saat
program dijalankan, sehingga tidak ada objek yang mengirim pesan
ke metode main() tersebut.
• Hal tersebut merupakan konteks static dari metode kelas:
• Pesan dapat dikirim ke objek lain, jika terdapat beberapa objek.
• Pesan tidak dapat dikirim kepada diri sendiri (ke objeknya sendiri),
atau menggunakan variabel misalnya. Ini adalah konteks static
bukan obyek
• Variabel non-static tidak dapat direferensikan dari konteks static

54
Contoh
public class Tambah {
int x;
int y;
int z;

public static void main(String args[]) {


x = 5;
y = 10; Error
z = x + y;
}
}

55
Solusi

public class Tambah{


int x; int y; int z;

public static void main(String args[]) {


Tambah tambah= new Tambah();
tambah.penambahan();
}

void penambahan() {
x = 5;
y = 10;
z = x + y;
}
}

56
Kapan Menggunakan static

• Sebuah variabel harus static jika:


• Secara logika menggambarkan kelas secara
keseluruhan
• Harus hanya satu alokasi memori untuk semua
objek dari kelas yang sama.

• Sebuah metode harus static jika:


Tidak menggunakan atau mempengaruhi objek
yang menerima pesan (hanya menggunakan
parameter saja)

57
Aturan Static

• variabel static dan metode static merupakan milik


kelas, bukan milik objek secara individu
• Tidak ditulis kata kunci static sebelum variabel dan
metode non-lokal berarti dinamis (satu per objek /
instansiasi)
• Sebuah metode dinamis dapat mengakses semua
variabel dinamis dan static dan metode di kelas yang
sama
• Sebuah metode static tidak dapat mengakses
variabel dinamis.
• Sebuah metode static tidak dapat memanggil
metode dinamis
58
Jumlah Argumen Tak-Tentu

• Pemrogram dapat membuat metode yang dapat


menerima sejumlah argumen yang tidak ditentukan
jumlahnya.
• Sebuah tipe argumen diikuti dengan simbol “…”
dalam daftar argumen dari sebuah metode,
menunjukkan bahwa metode tersebut dapat
menerima sejumlah variabel argumen dari
tipe-data tertentu.

59
Contoh Jumlah Argumen Tak-tentu

60
61
Parameter Array

62
Parameter Referensi

• Dua cara pengiriman data melalui parameter metode:


• Pass-by-value
• Mengirimkan nilai data ke parameter/argumen metode
• Di Java, setiap parameter metode memiliki tipe data primitif adalah
pass-by-value
• Pass-by-reference
• Pemanggil memberikan akses langsung kepada metode yang dipanggil
ke data pemanggil
• Metode yang dipanggil dapat memanipulasi data tsb.
• Peningkatan kinerja atas pass-by-value
• Di Java, setiap objek yang dipakai pengiriman pesan ke metode adalah
pass-by-reference
• Di Java, array merupakan obyek, sehingga array dikirimkan ke metode
sebagai pass-by-reference

63
Parameter Array

• Pengiriman array melalui argumen metode dapat


dilakukan hanya dengan menuliskan nama variabel
array
• Contoh:
int[] x = new int [100];
Dipakai untuk memanggil metode:
void urutDataArray(int[] a)
Dituliskan sbb.:
urutDataArray(x);

64
Contoh Referensi Array

65
Contoh Referensi Array

66
Contoh Referensi Array-2

67
Contoh Referensi Array-2

68
69
Pengurutan Data (Sorting)
• Bubble Sort
• Banyak macam algoritma untuk mengurutkan data, salah satu
algoritma pengurutan data yang paling sederhana adalah
Bubble Sort.
• Algoritma Bubble Sort:
• Nilai lebih kecil diarahkan ke indeks array semakin kecil
• Nilai lebih besar diarahkan ke indeks array semakin besar
• Gunakan loop bersarang untuk membuat beberapa langkah
mempertukarkan urutan nilai data pada elemen array
• Setiap langkah membandingkan pasangan berurutan dari elemen array
• Pasangan yang urutan nilai datanya semakin besar atau sama tidak
dipertukarkan
• Pasangan yang urutan nilai datanya semakin kecil dipertukarkan nilai
datanya

70
Contoh Program Bubble Sort

71
Contoh Program Bubble Sort

72
73
Searching

• Searching dipergunakan untuk mencari nilai data


yang sesuai pada sejumlah data tertentu (misal:
nilai data array).
• Menemukan apakah elemen sebuah array berisi
nilai data yang sama dengan nilai tertentu (nilai
kunci yang dicari).
• Metode untuk mencari nilai data, diantaranya
adalah:
• Pencarian linier (Linear Searching)
• Pencarian biner (Binary Searching)

74
Contoh Program Pencarian Linier

75
Contoh Program Pencarian Linier

76
77

Anda mungkin juga menyukai