TUJUAN INSTRUKSIONAL UMUM Setelah menyelesaikan pokok bahasan ini, mahasiswa akan mampu memahami dan bisa menjelaskan konsep lanjutan dasar pemrograman tentang data majemuk dan method yang mendukung pemrograman modular.
PENGANTAR Pada Pemrograman Terstruktur, program dibedakan menjadi bagian data dan bagian instruksi. Bagian instruksi terdiri atas runtutan (sequence) instruksi yang dilaksanakan satu per satu secara berurutan oleh pemroses. Alur pelaksanaan instruksi dapat berubah karena adanya pencabangan kondisional. Data yang disimpan di dalam memori dimanipulasi oleh instruksi secara beruntun atau terstruktur. Paradigma pemrograman seperti ini dinamakan pemrograman terstruktur. Pemrograman Terstruktur merupakan suatu tindakan untuk membuat program yang berisi instruksiinstruksi dalam bahasa komputer dimana instruksi-instruksi tersebut disusun secara logis dan sistematis supaya mudah dimengerti, mudah dites, dan mudah dimodifikasi. Pola penyusunan program komputer pada pemrograman terstruktur dilakukan hanya dengan menggunakan tiga struktur kontrol yaitu: Sequence : Sequence merupakan urutan pengerjaan dari perintah/statement pertama sampai dengan perintah/statement statement terakhir. terakhir. Umumnya bahasa pemrograman mempunyai sequence mulai dari atas ke bawah dan dari kiri ke kanan. Selection : Selection adalah struktur kontrol yang menggabungkan sebuah kondisi dan pilihan diantara dua aksi. Statement Pertama akan dikerjakan jika kondisi bernilai benar, jika tidak maka akan mengerjakan perintah setelah keyword “else” (jika ada). Repetition: Beberapa statement / perintah dapat diulang dengan menggunakan struktur kontrol repetition. Statement / perintah akan tetap diulang selama kondisi perulangan memenuhi (jika menggunakan DO WHILE – ENDDO). ENDDO). Dalam pemrograman berorientasi objek ada konsep data majemuk dan method yang harus diketahui di awal untuk menambah kemampuan dalam menciptakan pemrograman modular. Larik (array) ( adalah variabel kompleks yang setiap elemennya mempunyai tipe data yang sama. Tipe data dari elemen larik dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen larik mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. Kebanyakan program yang telah dibuat ternyata tersusun dengan kurang baik, sehingga melakukan perubahan pada program-program tersebut merupakan pekerjaan yang sulit dan menghabiskan waktu. Kadangkala, program-program tersebut perlu ditulis ulang secara keseluruhan. Dalam Pemrograman OOP (Object Oriented Programming), dikenal metode untuk "memecah" kode program yang panjang menjadi modul-modul yang saling terkait antara yang satu dengan yang lain.
1
Konsep Dasar Array
TUJUAN INSTRUKSIONAL KHUSUS Setelah menyelesaikan sub pokok bahasan ini diharapkan : a. Mahasiswa mampu menjelaskan konsep dasar array. b. Mahasiswa mampu merancang array berdimensi satu dan multi berdimensi. c. Mahasiswa mampu membuat array dalam pemrograman java.
1 Pendahuluan 1.1 Pengantar Dalam pemrograman berorientasi objek ada konsep data majemuk dan method yang harus diketahui di awal untuk menambah kemampuan dalam menciptakan pemrograman modular. Larik ((array) adalah variabel kompleks yang setiap elemennya mempunyai tipe data yang sama. Tipe data dari elemen larik dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen larik mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. Penamaan larik harus mengikuti aturan-aturan penamaan variabel. Seperti halnya variabel sederhana, larik pun harus dideklarasikan dahulu sebelum digunakan. Deklarasi larik berisi tipe data larik, nama larik, dan jumlah maksimum elemen yang dapat ditampungnya. Bahasa Java tidak membatasi jumlah dimensi array yang bisa digunakan. Hal ini semata-mata dibatasi jumlah memori komputer yang tersedia.
1.2 Tujuan Tujuan pembelajaran pada modul ini adalah :
Menerapkan konsep tipe data array untuk data majemuk homogen. Memahami definisi dan karakteristik array. Memahami inisialisasi array. Menerapkan array dimensi satu. Menerapkan array multi dimensi (berdimensi dua dan tiga) Memahami String dan karakter dalam Bahasa Java.
2
1.3 Definisi array Larik (array) adalah variabel kompleks yang setiap elemennya mempunyai tipe data yang sama. Tipe data dari elemen larik dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen larik mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. Array dimensi satu Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 1 indeks. Array dimensi dua Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 2 indeks. Array multidimensi Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui banyak indeks. String String adalah Array of character yang diakhiri dengan null character ( ‘\0’ atau ASCII nya = 0). String constant atau string literal adalah beberapa character yang diapit oleh tanda petik dua.
2 Array 2.1 Definisi array Awal mula dibutuhkan array adalah kita ingin menyimpan banyak data dalam setiap variabel yang didefinisikan. Misal kita ingin menyimpan data nomer induk mahasiswa dalam satu kelas yang berisi 40 mahasiswa. Idealnya kita akan mendefinikan 40 variabel dimana masing-masing variabel digunakan untuk menyimpan satu nomer induk mahasiswa. Jika kita ingin menyimpan nomer induk mahasiswa satu kampus yang mungkin jumlahnya bisa puluhan ribu, maka akan tidak sangat efisien jika kita mendefinisikan puluhan variabel hanya untuk menyimpan nomer induk mahasiswa satu kampus. Disinilah konsep array muncul, dimana hanya butuh nama satu variabel sudah bisa digunakan untuk mewakili akses data tak terbatas ke memori komputer yang di berikan dalam bentuk indek. Data disimpan dalam suatu struktur, sedemikian rupa sehingga elemen elemen-elemen di dalam struktur tersebut dapat diolah secara kelompok ataupun secara individu. Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui banyak indeks. Larik (array) adalah variabel kompleks yang setiap elemennya mempunyai tipe data yang sama. Tipe data dari elemen larik dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen larik mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. Penamaan larik harus mengikuti aturan-aturan penamaan variabel. Seperti halnya variabel sederhana, larik pun harus dideklarasikan dahulu sebelum digunakan. Deklarasi larik berisi tipe data larik, nama larik, dan jumlah maksimum 3
elemen yang dapat ditampungnya. Bahasa Java tidak membatasi jumlah dimensi array yang bisa digunakan. Hal ini semata-mata dibatasi jumlah memori komputer yang tersedia. Sintak deklarasi larik adalah sebagai berikut: tipe_data nama_larik []; atau tipe_data[] nama_larik; Larik dapat berdimensi satu, dua, tiga, ataupun lebih, sesuai dengan kebutuhan pemrogram. Dalam bahasa Java,, elemen pertama suatu larik diberi indeks nol, elemen kedua diberi indeks satu, dan seterusnya. Setelah dideklarasikan, larik dapat didefinisikan atau diisi dengan nilai-nilai. Sintak nilai pengisian nilai ke dalam indeks tertentu dari sebuah larik yaitu: nama_larik[indeks_larik] = nilai; Setelah sebuah larik didefinisikan, elemen larik dapat diakses dengan cara memanggil nama dan nomor indeksnya, seperti berikut ini: nama_larik[indeks_larik]
2.2 Sifat - sifat Array Array sebenarnya adalah penulisan lain dari sekelompok variabel yang memiliki tipe data yang sama dan digunakan untuk menyimpan data yang di ringkas dalam sebuah penamaan variabel yang diakses melalui indeks. Perhatikan gambar dibawah:
Gambar 1 Penggambaran sifat array
Misal kita ibaratkan bahwa array bisa kita gambarkan sebagai sebuah almari yang didalamnya ada beberapa laci. Almari kita anggap sebagai array, sedangkan laci kita anggap sebagai indek array yang sudah dikasih nomer. Dari gambar diatas kita umpamakan ada dua buah almari (array) yaitu almari A dengan delapan laci dan almari B dengan delapan laci juga. Dengan melihat kasus ini kita bisa memberikan beberap sifat dari array. Array memiliki beberapa sifat, diantaranya: Homogen : Seluruh elemen di dalam struktur array mempunyai tipe data yang sama. Ketika kita mendefinisikan data array dengan tipe data integer maka setiap elemen yang ada dalam array semuanya bertipe integer. Dalam contoh almari diatas setiap laci 4
memiliki bentuk dan ukuran yang sama yang artinya disini laci dalam almari memiliki sifat homoge. Random Access : Setiap elemen di dalam struktur array dapat dicapai secara individual, langsung ke lokasi elemen yang diinginkan, tidak harus melalui elemen pertama. Dalam contoh almari diatas, misalkan kita ingin menyimpan buku di almari B laci nomer 4, yang kita lakukan adalah membuka laci nomer 4 dari almari B secara langsung tanpa harus menghitung laci mulai dari nomer 1 hingga ketemu nomer 4. Begitu juga jika kita ingin mengambil buku di laci nomer 5 dari almari B. Kita bisa langsung mengambil buku dengan cara membuka laci nomer 5 dari almari B secara langsung tanpa harus menghitung laci mulai dari nomer 1 hingga ketemu nomer 5. Indeknya terdefinisi: Dalam mengakses indek data array harus terdefinisi dengan benar. Jika indek yang diakses dalam array tidak terdefinisi maka akan terjadi NULL pointer. Artinya alamat array yang diakses dalam memori tidak ada. Bisa diibaratkan jika kita ingin mengakses atau menyimpan data dalam sebuah laci tetapi lacinya tidak ada. Jika kita ingin menyimpan buku di almari A atau B di laci nomer 9, tentu kita akan bingung laci mana yang dimaksud. Data tunggal : Dalam setiap menyimpan data dalam indek array, hanya bisa dengan data tunggal atau satu data saja. Dalam contoh alamari diatas, kita hanya bisa menyimpan satu buah buku misalnya kedalam masing-masing laci. Default value array: Array yang di definisikan boleh memiliki indek yang di luar kebutuhan dan secara default default terisi dengan nilai default sesuai tipe data array. Misalkan kita hanya mengisi dua data dalam array, tetapi kita mendeklarasikan array itu terdiri dari 8 indek. Maka array yang terisi hanya indek 0 dan indek 1.
2.3 Deklarasi Array Array pada Java adalah sebuah object, object maka harus dideklarasikan menggunakan kata kunci new. Index dimulai dari 0 sampai jumlah element – 1. Sintaks deklarasi array dimensi satu: satu type nama_arrray[] = new tipe[Nilai_dim]; Contoh : int a[] = new int[10];
Gambar 2 Visualisasi array
Definisi dari sebuah array terdiri dari 4 komponen yaitu : Type specifier : tipe data array sama seperti tipe data variabel: integer, float, double, char, String, boolean, dll. Identifier (nama array) : nama dari array. 5
Operator index ([ ]) : operator tempat mendeklarasikan index/larik array. Nilai dimensi dalam operator [ ] : berapa larik data/laci yang bisa digunakan untuk menyimpan.
2.4 Visualisasi Array Dengan menggunakan contoh pada deklarasi array di atas (int a[] = new int[10];), dapat A. Elemen-elemen suatu Array diindeks (subscript) mulai dari 0 digambarkan alokasi untuk variabel A indeks (subscript dan indek terakhir adalah 9.
Gambar 3 Contoh visualisasi Array
2.5 Cara Mengakses Array Untuk mengakses array kita hanya perlu menggunakan sintaks berikut : nama_larik[indeks_larik] Misal untuk i=2; maka cara mengaksesnya : A[2]
Bila elemen A[2] hendak ditampilkan di layar monitor, gunakan statemen sbb: System.out.printf(“%d”,A[2]) atau System.out.println(A[2]);
Untuk mengakses semua data dalam array bisa menggunakan perulangan. Berikut contoh code untuk mengakses data dalam array menggunakan perulangan: for (int i = 0; i < 10; i ++) { System.out.println(A[i]); }
2.6 Mengisi Data Array Mengisi data ke elemen array dilakukan dengan menggunakan assignment operator. Contoh : A[6] = 15;
A[3] = 27;
Dalam contoh ini kita mengisi variable array A indek ke 6 dengan data 15, dan mengisi indek ke 3 dengan data 27. Visualisasi array ditunjukkan pada gambar 4 dimana pelabelan indek array dalam java dimulai dari 0. Sehingga ketika array A dideklarasikan memiliki indek 10 maka label indek tertinggi adalah 9 bukan 10 karena indek array dimulai dari indek ke 0.
6
Gambar 4Contoh pengisian data array
Statement A[2] = A[3] - A[6], menghasilkan :
Gambar 5 Contoh hasil statement
Untuk mengisi data dalam array bisa menggunakan perulangan. Berikut contoh code untuk mengisi data dalam array menggunakan perulangan: for (int i = 0; i < 10; i ++) { [i] = i; A[i] }
2.7 Inisialisasi Array Array dapat diinisialisasi secara eksplisit pada saat didefinisikan dan bisa dilakukan tanpa memberikan nilai dimensinya. Contoh:
int B[ ]={1, 2, -4, 8};
Pada contoh diatas Array B memiliki 4 elemen
Gambar 6 Contoh Array dengan tanpa nilai dimensi
Contoh: int B[]={1, 2, -4, 8,0,0,0,0};
Gambar 7 Contoh Array dengan 8 elemen
7
Contoh: inisialisasi array setelah didefinisikan : int A[] = new int[5]; (for i=0; i<5;i++) A[i]=0;
3 Jenis-jenis array 3.1 Array berdimensi satu Bahasa Java tidak membatasi jumlah dimensi array yang bisa digunakan. Hal ini semata-mata dibadib tasi jumlah memori komputer yang tersedia. Contoh Array dimensi 1: public class Bab_12{ public static void main(String[] args) { final int SIZE = 5; int i, j; int n[] = {15, 9, 1, 7, 5}; for( i=0 ; i< SIZE ; i++) { System.out.printf("%5d ", n[i]); for ( j=1; j<=n[i] ; j++) System.out.printf("%s","*"); System.out.printf("\n"); } } }
Dalam contoh program diatas, diinisialisasikan variabel array berdimensi satu dengan nama n dimana masing-masing indeknya berisi data 15, 9, 1, 7, 5 untuk indek ke 0, 1, 2, 3, 4. Untuk menampilkan data array digunakan perulangan untuk mengakses masing-masing indek array n ke i.
3.2 Array Dimensi Dua Sintaks deklarasi array dimensi dua: [baris][kolom] [baris][kolom]; type nama_arrray[][] = new type[baris][kolom]; Dalam sintak array diatas, dimensi pertama menggambarkan baris dan dimensi ke dua menggambarkan kolom. Dalam sintak diatas tujuan dari array berdimensi dua sama dengan array berdimensi satu. Yaitu sama-sama mendifinisikan sebuah variabel yang didalamnya berisi beberapa indek dimana setiap indek bisa mewakili fungsi satu varibel untuk menyimpan data. Yang membedakan disini array berdimensi dua menggambarkan setiap lokasi diakses dengan mendefinisikan baris ke berapa dan kolom ke berapa. Contoh int a[][] = new int[3][4]; 8
Dalam contoh diatas, didefinisikan sebuah variabel array a bertipe integer dimana dimensi kesatu (baris) bernilai 3 dan dimensi kedua (kolom) bernilai 4. Secara visualisasi array diatas digambarkan dalam tabel berikut:
Inisialisasi: menggunakan aturan rmo (row major order). Contoh: int b[][] = { { 1, 2 }, { 3, 4 } }; int b[][] = { { 1 }, { 3, 4 } }; int x[][] = {
{1,
2,
3,
4},
{5,
6,
7,
8},
{9,
10,
11, 12}};
Program :
Dalam program diatas diinisialisasikan variabel array two_dim bertipe integer dengan data 1
2
3
4
5
10
20
30
40
50
100
200
300
400
500
9
Yang mana untuk menampilkan data array tersebut digunakan perulangan dalam perulangan (nested loop) untuk menampilkan setiap data dalam array indek ke i (baris) dan indek ke j (kolom). Sebagai contoh ketika nilai indek i =0 dan indek j=0 maka data yang ditampilkan dalam layar adalah 1.
3.3 Array Dimensi Tiga Sintaks deklarasi array dimensi tiga : type nama_arrray[][][] = new type[baris][kolom][depth]; Dalam sintak array diatas, dimensi pertama menggambarkan baris, dimensi ke dua menggambarkan kolom, dan dimensi ketiga menggambarkan kedalaman. Dalam sintak diatas tujuan dari array berdimensi tiga sama dengan array berdimensi satu dan dimensi dua. Yaitu sama-sama mendifinisikan sebuah variabel yang didalamnya berisi beberapa indek dimana setiap indek bisa mewakili fungsi satu varibel untuk menyimpan data. Yang membedakan disini array berdimensi tiga menggambarkan setiap lokasi diakses dengan mendefinisikan baris ke berapa, kolom ke berapa, dan pada kedalaman berapa. Contoh: int x[][][] = {{{1,2,3,4}, {5,6,7,8}}, {{11,12,13,14}, {15,16,17,18}}, {{21,22,23,24}, {25,26,27,28}}}; public class Array { public static void main(String[] args) { int x[][][] = {{{1, 2, 3}, {0, 4, 3, 4}, {1, 2}}, {{9, 7, 5}, {5, 7, 2}, {9}}, {{3, 3, 5}, {2, 8, 9, 9}, {1, 2, 1}}, {{0}, {1}, {0, 1, 9}}}; System.out.printf("%5d", x[2][1][3]); } }
Pada contoh program diatas:
Di inisialisasi variabel array x berdimensi 3 bertipe integer. Untuk menampilkan seluruh isi dari array berdimensi 3 digunakan perulangan dalam perulangan tingkat 3 ( triple nested loop ) untuk mengakses indek baris ke i, indek kolom ke j dan indek kedalaman ke k. Pada contoh diatas jika program menampilkan x[2][1][3] maka akan menampilkan data baris ke 2, kolom ke 1, dan kedalaman ke 3 yaitu angka 9.
3.4 Array of character Array yang masing-masing indeknya isinya adalah karakter. Sintak: 10
char nama_array[] = new char[nilai_dim];
Dalam sintak array diatas, didefinisikan varibel array berdimensi satu bertipe karakter. Contoh: char nama = new int [40]; char ss[ ]= {„P‟,‟T‟,‟I‟,‟I‟,‟K‟,‟-‟,‟U‟, ‟B‟};
//8 elemen
3.5 String String adalah Array of character yang diakhiri dengan null character ( ‘\0’ atau ASCII nya = 0). String constant atau string literal adalah beberapa character yang diapit oleh tanda petik dua. Contoh: ”Selamat datang” Tipe dari string constant adalah pointer constant, sehingga bisa di-assigned ke array of character sbb: Contoh : char nama[40] = ”Amir”; nama = ”Amir”;
//ok
//error krn nama adalah pointer konstan
nama[40]= “Amir”;
//error
String constant dapat digabung saat dikompilasi :”Hello,” ” world” Sama artinya :”Hello, world” Contoh inisialisasi string: char s[ ] = ”FT-UB”;
Sama artinya dgn: char s[ ] = {‟F‟,‟T‟,‟-‟,‟U‟,‟B‟,‟\0‟};
String bukan tipe data di Bahasa Java.
3.6 Karakter vs String Karakter dalam bahasa Java diapit oleh single quote. Tiap karakter menempati satu byte memori. Contoh: char ch=‟A‟; char ch=65;
//Ascii desimal
char ch=0x41; //Ascii hexadesimal
String diapit oleh double quote. Contoh: String str =”A”; Meskipun inisialisasi String terdiri dari satu karakter saja bukan berarti data itu sebuah char. Contoh diatas adalah sebuah String yang terdiri dari 2 karakter, yaitu karakter ‘A’ dan karakter ‘\0’ atau Null. Untuk lebih jelasnya digambarkan dalam gambar 12.6.
11
Gambar 12.6 String diapit oleh double quote
3.7 Operasi dasar String String dalam bahasa java merupakan sebuah class (java.lang.String) yang yang sering digunakan untuk deklarasi tipe variable berupa objek. Tipe data ini sering sekali digunakan dalam program terutama untuk memanipulasi data String. Kelas ini banyak memiliki method yang sangat berguna thod yang sering digunakan adalah: dalam memanipulasi String. Beberapa method
Lenght() Mehod ini digunakan untuk menghitung karakter atau panjang dari sebuah String. Contoh: String kalimat = "Belajar Java"; System.out.println("Panjang kalimat: " + kalimat.length()); Hasil: Panjang kalimat:12
toUpperCase() UpperCase() Mehod ini digunakan untuk mengubah karakter dalam String menjadi huruf besar. Contoh: String kalimat = "Belajar Java"; System.out.println("Uppercase kalimat: " + kalimat.toUpperCase()); Hasil: Uppercase kalimat: BELAJAR JAVA
toLowerCase() owerCase() Mehod ini digunakan untuk mengubah karakter dalam String menjadi huruf kecil. Contoh: String kalimat = "Belajar Java"; System.out.println("Lowercase kalimat: " + kalimat.toLowerCase()); Hasil: Lowercase kalimat: belajar java
replace() Mehod ini digunakan untuk mengganti sebagian dari isi suatu string. Method ini akan mengganti semua kata yang sama dengan penggantinya. Contoh: String kalimat = "Belajar Java"; System.out.println("Ubah 'Java' menjadi 'bahasa Java': kalimat.replace("Java ", "bahasa Java")); Hasil: Ubah 'Java' menjadi 'bahasa Java': Belajar bahasa Java
"
+
Jika kita ingin mengganti satu kata saja, maka bisa kita gunakan method replaceFirst().
12
equals() Mehod ini digunakan untuk membandingkan variabel String dengan string lainnya. Jika isi dari String itu sama maka akan memberikan nilai True dan jika tidak sama akan memberikan nilai False. Contoh: String kata1 = new String("Belajar String kata2 = new String("Belajar if(kata1.equals(kata2)){ System.out.println("isi kata } else { System.out.println("isi kata } Hasil: isi kata sama
Java "); Java "); sama");
tidak sama");
Jika kita ingin membandingkan dua buah String tanpa memperhatikan besar dan kecil hurufnya bisa menggunakan method equalsIgnoreCase().
indexOf() Mehod ini digunakan untuk mencari indek dari suatu kata/kalimat. Berapa di karakter keberapa String yang dicari. Contoh: String kalimat = "Belajar Java"; System.out.println("Posisi kalimat.indexOf("Java"));
'Java'
dalam
kalimat:
"
+
Hasil: Posisi 'Java' dalam kalimat: 8
Kalau kita hitung secara manual seharusya kata “Java” berada pada posisi ke 9. Kenapa hasilnya berada di posisi yang ke 8 karena String dalam java menganut sistem zero based index yang artinya perhitungan indeknya dimulai dari 0 bukan dari 1.
contains() Mehod ini digunakan untuk mengetahui apakah ada kata tertentu dalam kalimat. Method ini akan mengembalikan nilai True jika terdapat kata yang dimaksud dan mengembalikan nilai False jika tidak ada kata yang dimaksud dalam kalimat. Contoh: String kalimat = "Belajar Java"; System.out.println("Terdapat 'Java' kalimat.contains("Java"));
dalam
kalimat:
"
+
Hasil: Terdapat 'Java' dalam kalimat:True
split() Mehod ini digunakan untuk memecah kalimat berdasarkan separator/pemisah. Contoh: 13
String kalimat = "Belajar bahasa Java"; String[] pecah = kalimatPakaiSeparator.split(" "); // split spasi System.out.println("Hasil pecahan: "); for(int counter = 0; counter < pecah.length; counter++){ System.out.println(" " + pecah[counter]); } Hasil: Belajar Bahasa Java
4 Implementasi penggunaan Array 4.1 Array berdimensi satu Program berikut adalah program untuk mencari nilai rata-rata sekelompok bilangan, dimana bilangan yang akan dirata-rata dimasukkan terlebih dahulu ke dalam array. 01
import java.util.Scanner;
02
public class Prak_501 {
03
public static void main (String[] args) {
04
Scanner masukan = new Scanner(System.in);
05
int jumbil, total=0;
06
float rata2;
07
System.out.print(“Berapa banyaknya bilangan ? ”);
08
jumbil = masukan.nextInt();
09
int data[] = new int[jumbil];
10
for(int i=0;i<jumbil;i++){
11
System.out.print(“Masukkan data ke-”+(i+1)+” : “);
12
data[i] = masukan.nextInt();
13
total = total + data[i];
14
}
15
System.out.print(“Nilai rata-rata dari : ”);
16
for(int i=0;i<(jumbil-1);i++)
17
System.out.print(data[i] + “ + ”);
18
System.out.print(data[jumbil-1] System.out.print(data[jumbil 1] + “ adalah ”);
19
rata2 = total/jumbil;
20
System.out.println(rata2);
21 22
} }
Keterangan Program diatas:
Baris ke empat sampai baris ke 6 adalah deklarasi variabel yang diperlukan.
14
Baris ke delapan adalah deklarasi variabel array dengan indek sejumlah yang dimasukkan oleh user yang disimpan dalam variabel jumbil. Baris ke sepuluh sampai baris ke 14 adalah perulangan untuk memasukkan data yang disimpan dalam masing-masing indek array data. Baris ke 12 adalah mengisi data masukan ke data array indek –i. Baris ke 13 adalah menjumlahkan masing-masing data array indek ke –i yang disimpan dalam variabel total. Baris ke 16 dan ke 17 adalah perulangan untuk menampilkan data dari masing-masing indek. Baris ke 19 adalah menghitung rata-rata. Baris ke 20 adalah menampilkan hasil rata-rata.
4.2 Array berdimensi dua Program berikut adalah program untuk menjumlahkan dua buah matriks. Untuk membuat suatu matriks, maka digunakan array 2 dimensi. 01
import java.util.Scanner;
02
public class Prak_502 {
03
public static void main (String[] args) {
04
int baris, kolom;
05
Scanner masukan = new Scanner(System.in);
06
System.out.println("Program Penjumlahan 2 buah matriks");
07
System.out.print("Masukkan jumlah baris Matriks : ");
08
baris = masukan.nextInt();
09
System.out.print("Masukkan jumlah kolom Matriks : ");
10
kolom = masukan.nextInt();
11
System.out.println();
12
System.out.println("Masukkan data : ");
13
System.out.println("Matriks 1 : ");
14
int matriks1[][] = new int[baris][kolom];
15
for(int i=0;i
16
for(int j=0;j
17
ke System.out.print("Bil baris ke-"+i+" kolom ke-"+j+" : ");
18
matriks1[i][j] = masukan.nextInt();
19
}
20
}
21
System.out.println();
22
System.out.println("Matriks 2 : ");
23
int matriks2[][] = new int[baris][kolom];
24
for(int i=0;i
25 26
for(int j=0;j
15
27
matriks2[i][j] = masukan.nextInt();
28
}
29
}
30
System.out.println("Data sebelum dijumlahkan : ");
31
System.out.println("Matriks 1 : ");
32
for(int i=0;i
33
for(int j=0;j
34
System.out.print(matriks1[i][j] + "
35
");
System.out.println();
36
}
37
System.out.println();
38
System.out.println("Matriks 2 : ");
39
for(int i=0;i
40
for(int j=0;j
41
System.out.print(matriks2[i][j] + "
42
");
System.out.println();
43
}
44
System.out.println();
45
int hasil[][] = new int[baris][kolom];
46
for(int i=0;i
47
for(int j=0;j
48
hasil[i][j] = matriks1[i][j]+matriks2[i][j];
49
}
50
System.out.println("Hasil penjumlahan Matriks tersebut : ");
51
for(int i=0;i
52
for(int j=0;j
53
System.out.print(hasil[i][j] + "
54
");
System.out.println();
55
}
56
System.out.println();
57
}
58
}
Keterangan Program diatas:
Baris ke 4 adalah deklarasi variabel baris dan kolom.
Baris ke 14 adalah deklarasi variabel array 2 dimensi untuk matrik ke 1 dengan dimensi pertama seukuran baris dan dimensi ke dua seukuran kolom.
Baris ke 6 sampai ke 10 adalah proses output dan input data dari user untuk memasukkan nilai baris dan kolom.
16
Baris ke 15 sampai baris ke 20 adalah proses perulangan dalam perulangan (nested loop) untuk memasukkan data dalam array baris ke i kolom ke j. For pertama (baris ke 15) mewakili baris ke i dan For kedua (baris 16) mewakili kolom ke j.
Baris ke 23 adalah deklarasi variabel array 2 dimensi untuk matrik ke 2 dengan dimensi pertama seukuran baris dan dimensi ke dua seukuran kolom.
Baris ke 24 sampai baris ke 29 adalah proses perulangan dalam perulangan (nested loop) untuk memasukkan data dalam array baris ke i kolom ke j. For pertama (baris ke 24) mewakili baris ke i dan For kedua (baris 25) mewakili kolom ke j.
Baris ke 32 sampai baris ke 36 adalah proses perulangan dalam perulangan ((nested loop) untuk menampilkan data Matrik ke 1 dalam array baris ke i kolom ke j. For pertama (baris ke 32) mewakili baris ke i dan For kedua (baris 33) mewakili kolom ke j.
Baris ke 39 sampai baris ke 43 adalah proses perulangan dalam perulangan ((nested loop) untuk menampilkan data Matrik ke 2 dalam array baris ke i kolom ke j. For pertama (baris ke 39) mewakili baris ke i dan For kedua (baris 43) mewakili kolom ke j.
Baris ke 45 adalah deklarasi variabel array 2 dimensi untuk matrik ke 3 (matrik hasil penjumlahan matrik 1 dan matrik 2) dengan dimensi pertama seukuran baris dan dimensi ke dua seukuran kolom.
Baris ke 46 sampai baris ke 49 adalah proses perulangan dalam perulangan ((nested loop) untuk mengisi data Matrik hasil dalam array baris ke i kolom ke j. For pertama (baris ke 46) mewakili baris ke i dan For kedua (baris 47) mewakili kolom ke jj. Baris ke 48 adalah proses perhitungan penjumlahan matrik 1 baris ke i kolom ke j dengan matrik 2 baris ke i kolom ke j yang hasilnya disimpan dalam matrik hasil baris ke i kolom ke j.
Baris ke 51 sampai baris ke 55 adalah proses perulangan dalam perulangan ((nested loop) untuk menampilkan data Matrik hasil dalam array baris ke i kolom ke j. For pertama (baris ke 51) mewakili baris ke i dan For kedua (baris 52) mewakili kolom ke j.
17
CONTOH SOAL 1. Jelaskan pengertian dari array! Jawab: Larik (array) adalah variabel kompleks yang setiap elemennya mempunyai tipe data yang sama. Tipe data dari elemen larik dapat berupa tipe data sederhana maupun tipe data kompleks. Setiap elemen larik mempunyai nomor indeks yang unik dan disimpan secara berurutan di dalam memori. 2. Apa yang dimaksud dengan array berdimensi satu, dua, dan multidimensi array! Jawab: Array dimensi satu Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 1 indeks. Array dimensi dua Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 2 indeks. Array multidimensi Array adalah merupakan sebuah deklarasi variabel yang digunakan untuk menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui banyak indeks.
LATIHAN SOAL 1. 2. 3. 4. 5.
Jelaskan kenapa perlu data dalam bentuk array! Sebutkan sifat-sifat dari array! Bagaimana cara mendeklarasikan array berdimensi satu, dan beri keterangan? Jelaskan bagaimana cara mengakses dan mengisi array! Berikan contoh inisialisasi array yang diisi datanya saat pendeklarasian array! array
18
RANGKUMAN Konsep array muncul, dimana hanya butuh nama satu variabel sudah bisa digunakan untuk mewakili akses data tak terbatas ke memori komputer yang di berikan dalam bentuk indek. Data disimpan dalam suatu struktur, sedemikian rupa sehingga elemen-elemen di dalam struktur tersebut dapat diolah secara kelompok ataupun secara individu. Array memiliki beberapa sifat, diantaranya: homogen, random access, indeknya harus terdefinisi dan data tunggal/satu data yang bisa dimasukkan dalam masing-masing indek array. Seluruh elemen di dalam struktur array mempunyai tipe data yang sama. Setiap elemen di dalam struktur array dapat dicapai secara individual, langsung ke lokasi elemen yang diinginkan, tidak harus melalui elemen pertama. Dalam mengakses indek data array harus terdefinisi dengan benar. Jika indek yang diakses dalam array tidak terdefinisi maka akan terjadi NULL pointer. Dalam setiap menyimpan data dalam indek array, hanya bisa dengan data tunggal atau satu data saja. Bahasa Java tidak membatasi jumlah dimensi array yang bisa digunakan. Hal ini semata-mata dibatasi jumlah memori komputer yang tersedia.
TES FORMATIF 1. Jelaskan kelebihan jika kita menggunakan array untuk deklarasi varibel yang dibutuhkan dibanding dengan deklarasi variabel untuk setiap data yang ingin kita simpan! 2. Buatlah program untuk menyimpan beberapa data kemudian urutkan data tersebut mulai dari data yang terkecil! 3. Kembangkan program nomer 2 diatas untuk menghitung nilai mean mean, nilai minimum dan maksimum dari data dalam array! 4. Kembangkan contoh array berdimensi 2 dalam sub pokok bahasan ini untuk menghitung perkalian 2 buah matrik. 5. Jelaskan array of character yang menunjukkan perbedaan antara tipe data karakter dan String dalam Java!
DAFTAR PUSTAKA [1] P.J. Deitel, H.M. Deitel , “Java : how to program 9th” Prentice Hall,ISBN 978-0-13-257566-9,2012. 978-0[2] Mary Campione, Kathy Walrath, Alison Huml. “Java™ Tutorial, Third Edition: A Short Course on the Basics”.. Addison Wesley. Wesley 2000. [3] Arnold, K., Gosling, J., and Holmes, J. “The Java™ Programming Language, 4th Edition”. Addison Wesley Professional. 2005. [4] Java tutorial: http://download.oracle.com/javase/tutorial/
19
KUNCI JAWABAN LATIHAN SOAL 1. Konsep array muncul, dimana hanya butuh nama satu variabel sudah bisa digunakan untuk mewakili akses data tak terbatas ke memori komputer yang di berikan dalam bentuk indek. Data disimpan dalam suatu struktur, sedemikian rupa sehingga elemen-elemen di dalam struktur tersebut dapat diolah secara kelompok ataupun secara individu. 2. Array memiliki beberapa sifat, diantaranya: Homogen : Seluruh elemen di dalam struktur array mempunyai tipe data yang sama. Ketika kita mendefinisikan data array dengan tipe data integer maka setiap elemen yang ada dalam array semuanya bertipe integer. Dalam contoh almari diatas setiap laci memiliki bentuk dan ukuran yang sama yang artinya disini laci dalam almari memiliki sifat homoge. Random Access : Setiap elemen di dalam struktur array dapat dicapai secara individual, langsung ke lokasi elemen yang diinginkan, tidak harus melalui elemen pertama. Dalam contoh almari diatas, misalkan kita ingin menyimpan buku di almari B laci nomer 4, yang kita lakukan adalah membuka laci nomer 4 dari almari B secara langsung tanpa harus menghitung laci mulai dari nomer 1 hingga ketemu nomer 4. Begitu juga jika kita ingin mengambil buku di laci nomer 5 dari almari B. Kita bisa langsung mengambil buku dengan cara membuka laci nomer 5 dari almari B secara langsung tanpa harus menghitung laci mulai dari nomer 1 hingga ketemu nomer 5. Indeknya terdefinisi: Dalam mengakses indek data array harus terdefinisi dengan benar. Jika indek yang diakses dalam array tidak terdefinisi maka akan terjadi NULL pointer. Artinya alamat array yang diakses dalam memori tidak ada. Bisa diibaratkan jika kita ingin mengakses atau menyimpan data dalam sebuah laci tetapi lacinya tidak ada. Jika kita ingin menyimpan buku di almari A atau B di laci nomer 9, tentu kita akan bingung laci mana yang dimaksud. Data tunggal : Dalam setiap menyimpan data dalam indek array, hanya bisa dengan data tunggal atau satu data saja. Dalam contoh alamari diatas, kita hanya bisa menyimpan satu buah buku misalnya kedalam masing-masing laci. 3. Deklarasi array berdimensi satu: type nama_arrray[] = new tipe[Nilai_dim]; Definisi dari sebuah array terdiri dari 4 komponen yaitu : Type specifier : tipe data array sama seperti tipe data variabel: integer, float, double, char, String, boolean, dll. Identifier (nama array) : nama dari array. Operator index ([ ]) : operator tempat mendeklarasikan index/larik array.
20
Nilai dimensi dalam operator [ ] : berapa larik data/laci yang bisa digunakan untuk menyimpan.
4. Untuk mengakses array kita hanya perlu menggunakan sintaks berikut : nama_larik[indeks_larik] Mengisi data ke elemen array dilakukan dengan menggunakan assignment operator. Contoh : A[6] = 15;
A[3] = 27;
Bila elemen A[2] hendak ditampilkan di layar monitor, gunakan statemen sbb: System.out.printf(“%d”,A[2]) atau System.out.println(A[2]);
5. Array dapat diinisialisasi secara eksplisit pada saat didefinisikan dan bisa dilakukan tanpa memberikan nilai dimensinya. Contoh: int B[ ]={1, 2, -4, 8};
21
Pemrograman Modular
TUJUAN INSTRUKSIONAL KHUSUS Setelah menyelesaikan bab ini diharapkan : a. b. c. d.
Mahasiswa mampu menjelaskan konsep pemrograman modular. Mahasiswa mampu menjelaskan konsep kelas dan objek. Mahasiswa mampu menjelaskan komponen dalam kelas. Mahasiswa mampu merancang dan membuat method dalam kelas java.
1 Pendahuluan 1.1 Pengantar Kebanyakan program yang telah dibuat ternyata tersusun dengan kurang baik, sehingga melakukan perubahan pada program-program tersebut merupakan pekerjaan yang sulit dan menghabiskan waktu. Kadangkala, program-program tersebut perlu ditulis ulang secara keseluruhan. Dalam Pemrograman OOP (Object Oriented Programming), dikenal metode untuk "memecah" kode program yang panjang menjadi modul-modul yang saling terkait antara yang satu dengan yang lain menjadi method. Setiap kali diperlukan, program utama dapat "memanggil" masing-masing modul kecil tersebut untuk mengerjakan perintah/perhitungan tertentu. Setelah pekerjaan/perhitungan di dalam modul tersebut selesai dilakukan, kontrol program dialihkan ke instruksi berikutnya di dalam program utama. Dalam bahasa pemrograman, modul-modul tersebut juga disebut sebagai subrutin, subprogram, prosedur, atau fungsi. Dalam konsep pemrograman berorientasi objek, kita harus memahami kontrusi utama dalam pemrograman yang berorientasi pada objek. Sistem yang terbentuk dengan metode pengembangan berorientasi object, mewujudkan sebuah sistem terdiri dari banyak object yang salin berkaitan. Desain berorientasi objek adalah sebuah teknik yang memfokuskan desain pada object dan class berdasarkan pada skenario dunia nyata. Hal ini menegaskan keadaan (state), behaviour dan interaksi dari object. Selain itu juga menyediakan manfaat akan kebebasan pengembangan, meningkatkan kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam modifikasi dan meningkatkan penggunaan kembali software.
22
1.2 Tujuan Tujuan pembelajaran pada modul ini adalah :
Mahasiswa mampu menjelaskan tentang konsep pemrograman modular. Mahasiswa mampu mengenal konsep pemrograman berbasis objek. Mahasiswa mampu menjelaskan kelas beserta komponennya (atribut dan method).
1.3 Definisi Pemrograman modular Proses "memecah" kode program yang panjang menjadi modul-modul yang saling terkait antara yang satu dengan yang lain. Setiap kali diperlukan, program utama dapat "memanggil" masing-masing modul kecil tersebut untuk mengerjakan perintah/perhitungan tertentu. Desain Berorientasi Object Desain berorientasi objek adalah sebuah teknik yang memfokuskan desain pada object dan class berdasarkan pada skenario dunia nyata. Hal ini menegaskan keadaan (state), behaviour dan interaksi dari object.. Selain itu juga menyediakan manfaat akan kebebasan pengembangan, meningkatkan kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam modifikasi dan meningkatkan penggunaan kembali software. Class Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan sebagai blueprint, dimana model dari object yang Anda buat berdasarkan pada tipe data baru ini. Object Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan identitas yang yang tugasnya dirumuskan dalam suatu lingkup masalah dengan baik. Inilah instance sebenarnya dari sebuah class.. Ini juga dikenal sebagai instance. Instance dibuat sewaktu Anda mengmeng-instantiate class menggunakan kata kunci new. Dalam sistem registrasi siswa, contoh dari sebuah object yaitu entiti Student. Attribute Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan informasi tentang object.. Dikenal juga sebagai member data, variabel instance, properti atau sebuah field data. Kembali lagi ke contoh sistem registrasi siswa, atribut dari sebuah siswa adalah nomor siswa. Lingkup atribut/identifier Lingkup identifier meliputi bagian-bagian program dimana sebuah identifier masih bisa diakses. Lingkup identifier meliputi Local Identifier dan Global Identifier Method Sebuah method menjelaskan behaviour dari sebuah object. Method juga dikenal sebagai fungsi atau prosedur. Sebagai contoh, method yang mungkin tersedia untuk entiti siswa adalah method register. Rekursif Method yang memanggil dirinya sendiri. 23
2 Pemrograman Modular 2.1 Konsep modular Kebanyakan program yang telah dibuat ternyata tersusun dengan kurang baik, sehingga melakukan perubahan pada program-program tersebut merupakan pekerjaan yang sulit dan menghabiskan waktu. Kadangkala, program-program tersebut perlu ditulis ulang secara keseluruhan. Dalam OOP (Object Object Oriented Programming), dikenal metode untuk "memecah" kode program yang panjang menjadi modul-modul -modul yang saling terkait antara yang satu dengan yang lain. Setiap kali diperlukan, program am utama dapat "memanggil" masing-masing modul kecil tersebut untuk mengerjakan perintah/perhitungan tertentu. Setelah pekerjaan/perhitungan di dalam modul tersebut selesai utama. Dalam bahasa dilakukan, kontrol program dialihkan ke instruksi berikutnya di dalam program utama pemrograman, modul-modul tersebut juga disebut sebagai subrutin, subprogram, prosedur, atau fungsi. Dalam bahasa Java sebuah method atau function adalah sekumpulan pernyataan yang dieksekusi saat dipanggil dari sebuah lokasi dalam program. Dengan fungsi kita dapat menstruktur sebuah program secara modular sesuai dengan konsep pemrograman terstruktur. Keutamaan penggunaan method antara lain: 1. Rancangan Top - down dengan teknik Sub goal, program besar dapat dibagi menjadi modulmodul yang lebih kecil. 2. Dapat dikerjakan oleh lebih dari satu orang dengan koordinasi yang relatif mudah. 3. Mencari kesalahan relatif lebih mudah karena alur logika lebih jelas, dan kesalahan dapat dilokalisir dalam satu modul. 4. Modifikasi dapat dilakukan, tanpa menggangu program secara keseluruhan. 5. Mempermudah dokumentasi. Contoh pembagian program menjadi beberapa subprogram.
Gambar 8 Sistem modular dengan menggunakan fungsi Sifat-sifat modul yang baik adalah : Fan-In yang tinggi, yaitu makin sering suatu modul dipanggil oleh pengguna, makin tinggi nilai fan-in.
24
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 memenuhi kebutu-hannya sendiri.
2.2 Lingkup Indetifier Kebanyakan program Lingkup identifier meliputi bagian-bagian program dimana sebuah identifier masih bisa diakses. Lingkup identifier meliputi : Local : identifier yang di deklarasikan dalam method tertentu, sehingga identifier ini hanya bisa dikenali dalam method tersebut dengan kata ruang lingkup untuk identifier ini terbatas pada method dimana indentifier ini berada. Global : identifier yang di deklarasikan dalam kelas secara global, maka identifier ini bisa dikenali dalam setiap method yang ada dalam kelas dengan kata ruang lingkup untuk identifier ini tidak terbatas pada method tertentu. Untuk lebih memudahkan memahami ruang lingkup identifier, perhatikan tabel berikut:
Lingkup x y1 y x b
Program
y f1
public static int x; public static void main(String[] args) { int y1; ... } public static int y; void func1(){ int x; ... } void func2(){ int b; ... } void func3(int f1){ int y; ... }
Gambar 9 Lingkup Identifier
A. Local identifier Identifier yang dideklarasikan di dalam fungsi, termasuk daftar parameter. Lingkupnya terbatas pada fungsi tempat dideklarasikan. Manakah yang termasuk local identifier pada contoh diatas? 25
B. Global identifier Identifier yang dideklarasikan di luar fungsi. Ruang lingkupnya meliputi seluruh program. Identifier global, dapat digunakan untuk identifier lokal. Disarankan tidak banyak menggunakan identifier global karena: Jika program semakin besar, kecenderungan error semakin besar . Sulit melacak bila terjadi kesalahan. Data tidak terjaga dengan baik, setiap fungsi dapat mengubah nilai variabel tanpa sepengetahuan fungsi lainnya. Manakah yang termasuk global identifier pada contoh diatas?
3 Pengenalan Objek 3.1 Object OOP (Object Object Oriented Programming) memandang semua aspek sebagai suatu obyek obyek. OOP berputar pada konsep dari object sebagai dasar element dari program. Beberapa contoh objek ada disekitar kita, seperti mobil, singa, manusia dan seterusnya. Object ini dikarakterisasi oleh sifat / attributnya dan tingkah laku. Kita ambil sebagai contoh adalah mobil dan singa. Objek mobil mempunyai sifat tipe transmisi, warna dan manufaktur. Mempunyai kelakuan berbelok, mengerem dan berakselerasi. bera Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa.
Objek pada dunia nyata dapat secara mudah dimodelisasi sebagai objek software menggunakan sifat sebagai data dan tingkah laku sebagai method. Misalkan software yang dibuat adalah software objek mobil dalam permainan balap mobil atau software pendidikan interaktif pada kebun binatang untuk anak anak. Sebuah objek adalah sebuah komponen software yang stukturnya mirip dengan objek pada dunia nyata. Setiap objek dibuat dari satu set data (sifat) dimana variable menjabarkan esensial karakter dari objek, dan juga terdiri dari satu set dari method (tingkah laku) yang menjabarkan bagaimana tingkah laku dari objek. Jadi objek adalah sebuah berkas software dari variable dan method yg berhubungan.
3.2 Class Class adalah struktur dasar dari OOP. Terdiri dari dua tipe dari anggota yang disebut dengan field (attribut/properti) dan method. Field menspesifikasi tipe data yang didefinisikan oleh class. Method 26
spesifikasi dari operasi. Sebuah objek adalah sebuah instance pada class. Sebuah objek adalah sebuah instance pada class. Variable dan methods dalam objek Java secara formal diketahui sebagai instance variable dan instance methods untuk membedakannya dari variable class dan method class. Perbedaan class dan object:
Sebuah class mobil dimana dapat digunakan untuk mendefinisikan beberapa object mobil. Mobil A dan mobil B adalah objek dari kelas mobil.
Pada contoh kelas diatas, kelas circle merupakan sebuah template/blue print yang siap di inisialisasi dalam sebuah objek. Dalam contoh diatas terbentuk 3 buah objek yang berbeda yaitu objek circle1, circle2, dan circle3 dimana diciptakan berdasarkan kelas yang sama yaitu kelas circle. Ketika diinisialisasi, tiap p objek mendapat satu set baru dari state variable of class. Implementasi dari method dibagi diantara objek pada kelas yang sama. Class menyediakan keuntungan berupa reusability. Untuk lebih memudahkan memahami kelas dan objek perhatikan sekali lagi contoh berikut: Pencetak kukis sebagai kelas dapat digunakan berkali berkalikali untuk mencetak kukis. Kukis adalah objek yang terbentuk dari kelas kukis. Sebuah kelas dapat menghasilkan banyak objek. Dari 1 cetakan dapat dibuat banyak kukis dengan berbagai macam hiasan, namun kukis-kukis tersebut tetap memiliki bentuk yang sama.
Di dalam java, sintak untuk mendeklarasikan sebuah kelas adalah:
27
Dimana <modifier> adalah sebuah access modifier, yang mana boleh dikombinasikan dengan tipeyang laen dari modifier.
Contoh berikut ini mendeklarasikan blueprint SuperHero.
3.3 Variable dan method Class Variabel class merupakan variabel milik dari seluruh class. Variabel ini memiliki nilai yang sama untuk variables. Variable semua objek pada kelas yang sama. Variabel ini juga disebut static member variables dideklarasikan larasikan dengan sintak sebagai berikut:
Contoh:
Sebuah method adalah bagian terpisah dari kode yang akan dipanggil oleh program utama dan beberapa method lainnya untuk menunjukkan beberapa fungsi spesifik. Mengapa kita butuh untuk
28
membuat method? Mengapa kita tidak meletakkan semua kode pada sebuah method yang sangat besar? Sintak mendeklarasikan method dalam kelas:
Contoh method:
Object memiliki identitas, state, dan tingkah laku yang unique. State : direpresentasikan oleh data fields (properties dispesifiroperties / attributes) dengan nilai yang terkandung di dalamnya. Atribut/Identitas dispesif kasikan oleh instance variables. Tingkah laku didefinisikan oleh sekumplan method method. Memanggil method pada objek berarti bahwa Anda meminta objek untuk melakukan tugas. Melakukan tugas dalam program membutuhkan method. Class menyediakan satu atau lebih method yang dirancang untuk melakukan tugas-tugas class itu. Sebelum dipanggil atau digunakan, sebuah method harus dideklarasikan dan didefinisikan terlebih dahulu. Pendefinisian method dapat dilakukan dengan sintaksis sebagai berikut: modifier returnValueType methodName(list of parameters) { // Method body; }
Modifiers : sifatnya optional, memberitahukan compiler bagaimana cara memanggil fungsi / method returnValueType: tipe data yang dikembalikan oleh fungsi Jika return-value-type diganti void maka fungsi tidak mengembalikan nilai 29
Parameter-list: berisi daftar nilai yang dikirimkan dari fungsi pemanggil Method Body : medhot body berisi kumpulan statements yang mendefinisikan apa yang dilakukan fungsi Contoh :
3.4 Jenis Method Method adalah kumpulan program yang mempunyai nama dimana ketika kita menginginkan kumpulan program itu dijalankan tinggal dipanggil nama methodnya. Penulisan program dengan menggunakan method akan lebih efisien, program menjadi lebih terstruktur, dan praktis. Ada dua jenis method jika dilihat dari hasil yang diberikan dari method itu sendiri yaitu: 1. Method yang tidak mengembalikan data (diberi tipe void) tanpa parameter input dan dengan parameter input. 2. Method yang mengembalikan nilai menggunakan statemen return. Statemen return mengembalikan nilai yang tipenya harus sama dengan tipe methodnya. Berikut contoh method yang tidak mengembalikan nilai. 01
import java.util.Scanner;
02
public class Prak_4001 {
03
static void Cetak(){
04
System.out.print("I LOVE "); System.out.print("I LOVE ");
05
}
06
} public static void main(String[] args) {
07
Cetak(); public static void main(String[] args) {
08
System.out.print("JAVA"); Cetak();
09 10
}
Keterangan:
System.out.print("JAVA");
} }
Baris ke 3 sampai baris ke 5 adalah method bernama cetak untuk menampilkan pernyataan “I LOVE”. Baris ke 7 adalah pernyataan untuk memanggil method cetak. Ketika di eksekusi program ini akan menampilkan tulisan “I LOVE JAVA”.
Berikut contoh method yang tidak mengembalikan nilai dengan parameter. 01
import java.util.Scanner;
30
02
public class Prak_4002 {
03
static void Cetak(int a){
04
System.out.println("Nilai x: "+a);
05
}
06
public static void main(String[] args) {
07
int x;
08
for (x=0; x<3; x++){
09
Cetak(x);
10
}
11
System.out.println("Nilai x terakhir: "+x);
12 13
} }
Keterangan:
Baris ke 3 sampai baris ke 5 adalah method bernama cetak dengan variabel a sebagai parameter formal method yang menampilkan pernyataan “Nilai x:”. Baris ke 8 sampai baris ke 10 adalah perulangan yang didalamnya ada pernyataan untuk metho memanggil method cetak dengan x sebagai parameter aktual yang dikirimkan ke method. Ketika di eksekusi program ini akan menampilkan : Nilai x: 0 Nilai x: 1 Nilai x: 2 Nilai x terakhir: 3
Berikut contoh method yang mengembalikan nilai dengan parameter. 01
import java.util.Scanner;
02
public class Prak_4003 {
03
static int Kuadrat(int bil){
04
return bil*bil;
05
}
06
public static void main(String[] args){
07
int x=5;
08
System.out.println(x +" kuadrat adalah "+ Kuadrat(x));
09 13
} }
Keterangan:
Baris ke 3 sampai baris ke 5 adalah method bernama Kuadrat dengan variabel bil sebagai parameter formal method yang mengembalikan nilai bil*bil. Baris ke 8 adalah pernyataan untuk memanggil method Kuadrat dengan variabel x sebagai parameter formal. Ketika di eksekusi program ini akan menampilkan : “5 kuadrat adalah 25”
31
3.5 Pemberian Variabel dalam method Dalam method ada dua tipe data variabel passing dalam method. Ada dua jenis pemberian variabel dalam method adalah pass by value dan pass by reference.
Pass by Value Dalam setiap method parameter formal yang didefinisikan adalah sebagai sebuah salinan dari nilai variabel yang dikirimkan ke method sebagai parameter aktual. Yang dikirimkan oleh oleh parameter aktual adalah nilainya saja, bukan variabelnya. Sehingga apabila terjadi perubahan data dari variabel parameter formal pada method, tidak akan berpengaruh pada nilai variabel parameter aktual. Contoh:
01
import java.util.Scanner;
02
public class Prak_4004 {
03
public static void main(String[] args){
04
int i = 10;
05
//mencetak nilai i
06
System.out.println( i );
07
//memanggil method test
08
//passing i pada method test
09
test( i ); // i sebagai parameter formal
13
//Mencetak nilai i
14
System.out.println( i );
15
}
16
public static void test( int j ){ // j sebagai parameter aktual
17
//merubah nilai parameter j
18
j = 33;
19 20
} }
Keterangan program: o
Baris ke 9 adalah pernyataan pemanggil method dengan variabel i sebagai parameter formal. variabel I berisi nilai 10 selanjutnya nilai 10 tersebut dilempar ke parameter aktual (variabel j ) method test. o Baris ke 16 sampai baris ke 19 adalah method test dengan variabel j sebagai parameter aktual yang nilainya sesuai dengan nilai parameter formal (i=10) yang dilempar dari statemen yang memanggilnya di baris 9. o Baris 14 adalah pernyataan untuk menampilkan nilai variabel i. Nilai yang ditampilkan adalah 10 bukan 33 karena variabel j tidak berpengaruh langsung kepada variabel i. Pass by Reference Dalam setiap method parameter formal yang didefinisikan adalah sebagai sebuah salinan dari nilai variabel yang dikirimkan ke method sebagai parameter aktual. Ini dinamakan pass 32
by value seperti contoh diatas. Yang dikirimkan oleh oleh parameter aktual adalah nilainya saja, bukan variabelnya. Sehingga apabila terjadi perubahan data dari variabel parameter formal pada method, tidak akan berpengaruh pada nilai variabel parameter aktual. Sebaliknya, yang pass by reference method parameter formal yang dikirimkan bukan nilainya tetapi alamat memori dari variabel tersebut. Karena yang dilempar adalah alamat memori dari variabel, maka jika terjadi perubahan data di variabel parameter aktual meskipun namanya berbeda akan mengubah data di variabel parameter formal karena sebenarnya kedua variabel ini mengakses lokasi memori yang sama. Contoh: 01
import java.util.Scanner;
02
public class Prak_4004 {
03
public static void main(String[] args){
04
//membuat array integer
05
int []ages = {10, 11, 12};
06
//mencetak nilai array
07
for( int i=0; i
08
System.out.println( ages[i] );
09
}
13
test( ages );
14
for( int i=0; i
15
System.out.println( ages[i] );
16
}
17
}
18 19
public static void test( int[] arr ){
20
//merubah nilai array
21
for( int i=0; i<arr.length; i++ ){
22
arr[i] = i + 50;
23
}
24 25
} }
Keterangan program: o o o o
Baris ke 5 adalah deklarasi variabel array ages. Baris ke 7 sampai baris ke 9 adalah sebuah perulangan untuk menampilkan data array. Baris ke 13 adalah statemen untuk memanggil method test dengan parameter aktual ages dimana yang dilempar ke method adalah alamat memori dari variabel ages. Baris ke 19 sampai baris ke 24 adalah method test dengan varibel array arr sebagai parameter formal yang menerima alamat memori dari parameter aktual ages yang dilempar pada baris ke 13. 33
o
o
Baris ke 21 sampai baris ke 23 adalah perulangan untuk mengisi nilai variabel array arr, dimana perubahan nilai array pada variabel ini akan juga merubah nilai pada variabel array ages. Baris ke 14 sampai baris ke 16 adalah perulangan untuk menampilkan nilai variabel array ages yang sudah berubah.
3.6 Library vs User-Defined Method Method dalama bahasa Java terbagi dalam dua jenis : Library Method User-defined Method Library method, adalah method - method standar yang sudah disediakan oleh bahasa Java. Contohnya sqrt() ada di file Math.java. User-define method, adalah method yang didefinisikan sendiri oleh pemrogram. Contoh Program yang menggunakan Standard Library Function (println dan sqrt) : public class Fungsi { public static void main(String[] args) { int i; for(i=0;i<6;i++) System.out.println(Math.sqrt(i)); } }
3.7 Rekursif Rekursif adalah teknik pemecahan masalah yang powerful dan dapat digunakan ketika inti dari masalah terjadi berulang kali. Tentu saja, tipe dari masalah ini dapat dipecahkan mengunakan perkataan berulang-ulang (menggunakan konstruksi looping seperti for, while dan do-while). Iterasi atau perkataan berulang-ulang merupakan peralatan yang lebih efisien jika dibandingkan dengan rekursif tetapi rekursif menyediakan solusi yang lebih baik untuk suatu masalah. Pada rekursif, method dapat memanggil dirinya sendiri.
Gambar 10 Rekursif
34
Untuk pengertian yang lebih baik dari rekursif, mari kita lihat pada bagaimana macam-macam dari teknik iterasi. Dalam teknik-teknik tersebut dapat juga kita lihat penyelesaian sebuah loop yang lebih baik menggunakan rekursif dari pada iterasi. Menyelesaikan masalah dengan perulangan menggunakan iterasi secara tegas juga digunakan pada struktur kontrol pengulangan. Sementara itu, untuk rekursif, penyelesaian masalah diulangi dengan memanggil sebuah method pengulangan. Maksud dari hal tersebut adalah untuk menggambarkan sebuah masalah kedalam lingkup yang lebih kecil dari pengulangan itu sendiri. Pertimbangan suatu perhitungan yang faktorial dalam penentuan bilangan bulat misalnya. Definisi rekursif dari kasus ini dapat diuraikan sebagai berikut: factorial(n) = factorial(n-1) * n; factorial(1) = 1. Sebagai contohnya, nilai faktorial dari 2 sama dengan fatorial (1)*2, dimana hasilnya adalah 2. Faktorial dari 3 adalah 6, dimana sama dengan faktorial dari (2)*3. Ilustrasi factorial seperti yang ditunjukkan dalam Gambar 1.0. Listing program berikut ini menunjukkan bagaimana menghitung faktorial menggunakan teknik iterasi.
Dibawah ini merupakan listing program yang sama tetapi menggunakan rekursif.
4 Implementasi method pada program 4.1 Membuat method sebagai fungsi pada program java Method adalah suatu program yang terletak terpisah dari blok program utama, tetapi tetap merupakan bagian dari program yang dibuat. Dengan menggunakan method dapat membuat program menjadi lebih mudah dipahami. Method yang tidak mengembalikan nilai adalah seperti prosedur pada pemrograman Pascal. Berikut adalah contoh program untuk menghitung luas 2 buah bidang datar, yang penentuan bidang yang dihitung, ditentukan oleh pengguna melalui menu. 01
import java.util.Scanner;
35
02
public class Prak_401 {
03
public static void main (String[] args) {
04
Scanner masukan = new Scanner(System.in);
05
int pilihan=9;
06
do {
07
System.out.println(“\nMENU\n“);
08
System.out.println(“1. Menghitung Luas Persegi Panjang”);
09
System.out.println(“2. Menghitung Luas Lingkaran”);
10
System.out.println(“0. Keluar”);
11
System.out.print(“Masukkan Pilihan Anda : ”);
12
pilihan = masukan.nextInt();
13
switch(pilihan){
14
case 1 : luasPersegiPanjang();break;
15
case 2 : luasLingkaran();break;
16
}
17
} while(pilihan != 0);
18
}
19 20
private static void luasPersegiPanjang(){
21
Scanner masukan = new Scanner(System.in);
22
float panjang, lebar, luas;
23
System.out.print(“Masukkan nilai panjang : ”);
24
panjang = masukan.nextFloat();
25
System.out.print(“Masukkan nilai lebar : ”);
26
lebar = masukan.nextFloat();
27
luas = panjang * lebar;
28
System.out.println(“Luas Persegi Panjang : ” + luas);
29
}
30 31
private static void luasLingkaran(){
32
Scanner masukan = new Scanner(System.in);
33
float jari2, luas;
34
System.out.print(“Masukkan nilai jari-jari : ”);
35
jari2 = masukan.nextFloat();
36
luas = 3.14f * jari2 * jari2;
37
System.out.println(“Luas Lingkaran : ” + luas);
38 39
} }
Keterangan program diatas: 36
Baris ke 6 sampai baris 17 adalah perulangan dengan menggunakan do –while. Baris ke 7 sampai baris 12 adalah proses output dan proses input. Baris ke 12 adalah proses input untuk menentukan pilihan. Baris ke 13 sampai baris 16 adalah switch case. Baris ke 14 dan baris ke 15 adalah case dimana masing-masing case memanggil method luasPersegiPanjang() untuk case 1 dan memanggil method luasLingkaran() untuk case 2. Baris ke 20 sampai baris ke 29 adalah method untuk menghitung luas persegi panjang. Baris ke 31 sampai baris ke 38 adalah method untuk menghitung luas lingkaran. ut user, proses perhitungan dan proses Masing – masing method berisi proses output dan input penampilan output hasil perhitungan.
4.2 Membuat method sebagai fungsi yang mengembalikan suatu nilai Method yang mengembalikan suatu nilai adalah fungsi yang ketika kembali ke program utamanya disertai dengan membawa suatu nilai. Berikut adalah program untuk menjumlahkan 2 buah bilangan yang di dalamnya menggunakan method. 01
import java.util.Scanner;
02
public class Prak_402 {
03
public static void main (String[] args) {
04
Scanner masukan = new Scanner(System.in);
05
int bil1, bil2, bil3;
06
System.out.println(“Program Menjumlahkan 2 bilangan“);
07
System.out.print(“Masukkan bilangan 1 : ”);
08
bil1 = masukan.nextInt();
09
System.out.print(“Masukkan bilangan 2 : ”);
10
bil2 = masukan.nextInt();
11
System.out.print(“Masukkan bilangan 3 : ”);
12
bil3 = masukan.nextInt();
13
System.out.println();
14
System.out.println(“Jumlah bil1 + bil2 : ”+(jumlah(bil1,bil2)));
15
System.out.println(“Jumlah bil2 + bil3 : ”+(jumlah(bil2,bil3)));
16
System.out.println(“Jumlah bil1 + bil3 : ”+(jumlah(bil1,bil3)));
17
}
18 19
private static int jumlah(int a, int b){
20
int hasil = a + b;
21
return hasil;
22 23
} }
Keterangan program diatas: 37
Baris ke 4 dan ke 5 adalah deklarasi varibel yang dibutuhkan. Baris ke 6 sampai dengan baris ke 12 adalah proses output dan proses input data dari user. Baris ke 14 sampai dengan baris ke 16 adalah proses untuk menampilkan hasil penjumlahan dari pemanggilan fungsi jumlah dengan parameter input yang berbeda-beda. Baris ke 19 sampai baris ke 22 adalah method untuk menghitung penjumlahan dari data parameter input fungsi. Baris ke 20 adalah proses penjumlahan dari varibel a dan variabel b. Baris ke 21 adalah nilai pengembalian (return value) yang dilempar hasilnya ke pemanggilan.
4.3 Membuat program dengan method rekursif Suatu fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Berikut ini adalah contoh program rekursif untuk menghitung nilai faktorial suatu bilangan. 01
import java.util.Scanner;
02
public class Prak_404 {
03
public static void main (String[] args) {
04
Scanner masukan = new Scanner(System.in);
05
int bil, hasil;
06
System.out.print(“Masukkan suatu bilangan : ”);
07
bil = masukan.nextInt();
08
hasil = faktorial(bil);
09
System.out.println(“Nilai faktorial ”+ bil +” adalah “+ hasil);
10
}
11 12
private static int faktorial(int a){
13
if (a==1)
14
return 1;
15
Else
16
return (a * faktorial(a-1));
17 18
} }
Keterangan program diatas:
Baris ke 4 dan ke 5 adalah deklarasi varibel yang dibutuhkan. Baris ke 6 dan ke 7 adalah proses output dan input data dari user. Baris ke 8 adalah pernyataan yang memanggil fungsi faktorial yang hasilnya disimpan dalam variabel hasil. Baris ke 9 adalah untuk menampilkan hasil variabel hasil. Baris 12 sampai baris 17 adalah fungsi faktorial yang mengembalikan nilai hasil dari rekursif. Baris 16 adalah pernyataan memanggil fungsi rekursif.
38
CONTOH SOAL 1. Jelaskan yang dimaksud dengan pemrograman modular! Jawab: Proses "memecah" kode program yang panjang menjadi modul-modul yang saling terkait antara yang satu dengan yang lain. Setiap kali diperlukan, program utama dapat "memanggil" masing-masing modul kecil tersebut untuk mengerjakan perintah/perhitungan tertentu. 2. Jelaskan apa yang dimaksud dengan desain berorientasi objek! Jawab: IDE Desain berorientasi objek adalah sebuah teknik yang memfokuskan desain pada object dan class berdasarkan pada skenario dunia nyata. Hal ini menegaskan keadaan ((state), behaviour dan interaksi dari object. Selain itu juga menyediakan manfaat akan kebebasan pengembangan, meningkatkan kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam modifikasi dan meningkatkan penggunaan kembali software software.
LATIHAN IHAN SOAL 1. Apa yang dimaksud dengan kelas dan objek, serta jelaskan keterkaitan antara kelas dan objek! 2. Sebutkan komponen yang membentuk sebuah kelas! 3. Sebutkan dan jelaskan ruang lingkup identifier dalam sebuah kelas! 4. Jelaskan pengertian library dan user-defined method! 5. Apakah yang dimaksud dengan rekursif? Berikan contoh.
39
RANGKUMAN Konsep pemrograman modular muncul karena kebanyakan program yang telah dibuat ternyata tersusun dengan kurang baik, sehingga melakukan perubahan pada program-program tersebut merupakan pekerjaan yang sulit dan menghabiskan waktu. Kadangkala, program-program tersebut perlu ditulis ulang secara keseluruhan. Dalam OOP (Object Oriented Programming), dikenal metode untuk "memecah" kode program yang panjang menjadi modul-modul yang saling terkait antara yang satu dengan yang lain. Setiap kali diperlukan, program utama dapat "memanggil" masing-masing masing modul kecil tersebut untuk mengerjakan perintah/perhitungan tertentu. Dalam bahasa Java sebuah method atau function adalah sekumpulan pernyataan yang dieksekusi saat dipanggil dari sebuah lokasi dalam program. OOP (Object Object Oriented Programming) memandang semua aspek sebagai suatu obyek. obyek OOP berputar pada konsep dari object sebagai dasar element dari program. Class adalah struktur dasar dari OOP. Terdiri dari dua tipe dari anggota yang disebut dengan field (attribut/properti) (attribut/properti dan method. Field menspesifikasi tipe data yang didefinisikan oleh class. Method spesifikasi dari operasi. Method yang dirancang dalam kelas akan memperhatikan konsep modular, sehingga beberapa keunggulan konsep modular akan membantu membentuk kelas lebih baik dan lebih efisien.
TES FORMATIF 1. Jelaskan keutamaan pemrograman modular. 2. Berikan rancangan contoh kelas dan objek yang terbentuk dari kelas yang dirancang. 3. Perbaiki program berikut sehingga bisa digunakan untuk menukar 2 buah karakter
4. Perhatikan kode dibawah
40
5. Buat program dengan mendefinisikan fungsi untuk menghitung luas lingkaran dan keliling lingkaran.
DAFTAR PUSTAKA [1] P.J. Deitel, H.M. Deitel , “Java : how to program 9th” Prentice Hall,ISBN 978-0-13-257566-9,2012. 978-0[2] Mary Campione, Kathy Walrath, Alison Huml. “Java™ Tutorial, Third Edition: A Short Course on the Basics”.. Addison Wesley. 2000. [3] Arnold, K., Gosling, J., and Holmes, J. “The Java™ Programming Language, 4th Edition”. Edition Addison Wesley Professional. 2005. [4]] Java tutorial: http://download.oracle.com/javase/tutorial/
41
KUNCI JAWABAN LATIHAN SOAL 1. Class Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan sebagai blueprint, dimana model dari object yang Anda buat berdasarkan pada tipe data baru ini. Object Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan identitas yang yang tugasnya dirumuskan dalam suatu lingkup masalah dengan baik. Inilah instance sebenarnya dari sebuah class. Ini juga dikenal sebagai instance. Instance dibuat sewaktu Anda meng-instantiate class menggunakan kata kunci new. 2. Komponen utama pembentuk kelas: Attribute Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan informasi tentang object. Dikenal juga sebagai member data, variabel instance, properti atau sebuah field data. Method Sebuah method menjelaskan behaviour dari sebuah object. Method juga dikenal sebagai fungsi atau prosedur. 3. Kebanyakan program Lingkup identifier meliputi bagian-bagian program dimana sebuah identifier masih bisa diakses. Lingkup identifier meliputi : Local : identifier yang di deklarasikan dalam method tertentu, sehingga identifier ini hanya bisa dikenali dalam method tersebut dengan kata ruang lingkup untuk identifier ini terbatas pada method dimana indentifier ini berada. Global : identifier yang di deklarasikan dalam kelas secara global, maka identifier ini bisa dikenali dalam setiap method yang ada dalam kelas dengan kata ruang lingkup untuk identifier ini tidak terbatas pada method tertentu. 4. Library method, adalah method - method standar yang sudah disediakan oleh bahasa Java. Contohnya sqrt() ada di file Math.java. User-define method, adalah method yang didefinisikan sendiri oleh pemrogram. 5. Rekursif adalah method yang memanggil method ini sendiri. Contoh problem menghitung factorial. Dibawah ini merupakan listing program yang sama tetapi menggunakan rekursif.
42