MateriMateriPengantar Struktur Data
Abstract Data Type (ADT)
Rekursif : Fibonacci
Sorting (Selection, Insertion, Bubble, Shell, Merge, Quick)
Struktur Data Linier (Linked List, Stack, Queu)
Struktur Data Hirarki (Tree, Graph, Hash Tables)
Search (Sequential, Fibonacci, Interpolation, Binary)
Pengertian ADT
• ADT adalah definisi type dan sekumpulan primitif (operasi dasar) terhadap type tersebut.
• Type diterjemahkan menjadi type terdefinisi dalam bahasa pemrograman yang bersangkutan, misalnya menjadi Struct dalam bahasa C
• Primitif dalam konteks pemrograman prosedural, diterjemahkan menjadi fungsi dan prosedur.
Pengertian ADT• Primitif dikelompokkan menjadi :
1. Konstruktor/Kreator, pembentuk nilai type. Biasanya namanya diawali dengan Make.
2. Selektor, untuk mengakses komponen type. Biasanya namanya diawali dengan Get.
3. Prosedur Pengubah nilai komponen 4. Validator komponen type, yang dipakai untuk mengetes apakah dapat
membentuk type sesuai batasan.5. Destruktor/Dealokator, yaitu untuk menghancurkan nilai objek,
sekaligus memori penyimpannya 6. Read/write, untuk interface dengan input/output device7. Operator Relasional terhadap type tersebut untuk mendefinisikan
lebih besar, lebih kecil, sama dengan dan sebagainya.8. Aritmatika terhadap type tersebut, dalam pemrograman biasanya
hanya terdefinisi untuk bilangan numerik.9. Konversi dari type tersebut ke type dasar dan sebaliknya
Abstract Data Type (ADT)• Definisi TYPE dari sebuah ADT dapat
mengandung definisi ADT lainnya– Contoh :
• ADT waktu terdiri atas ADT jam dan ADT tanggal• ADT garis memiliki 2 buah titik
• ADT diimplementasikan menjadi dua modul:– Spesifikasi TYPE dan PRIMITIF
• Spesifikasi Type sesuai bahasa• Spesifikasi PRIMITIF sesuai konteks
(fungsi/prosedur)
– Body berupa kode program
ADT biasanya diimplementasi menjadi dua buah modul, yaitu :1. Definisi/spesifikasi type dan primitif • Spesifikasi type sesuai dengan bahasa yang dipakai • Spesifikasi dari primitif sesuai dengan kaidah dalam konteks
prosedural, yaitu : a) Fungsi : nama, domain, range, dan pre kondisi jika
ada b) Prosedur : Keadaan Awal, Keadaan Akhir dan
proses yang dilakukan 2. Body/realisasi dari primitif, berupa kode program dalam
bahasa yang bersangkutan. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan Konstruktor
Abstract Data Type (ADT)• Realisasi ADT dalam beberapa bahasa pemrograman
BAHASA SPESIFIKASI BODY
C File header *.h File kode program (*.c)
C++ File header *.h File kode program (*.cpp)
Java Class Public Class
Abstract Data Type (ADT)• Setiap ADT harus dibuat menjadi spesifikasi, body dan
driver– Dalam bahasa C++, modul spesifikasi dan body dapat dibuat
dengan cara• Include dari file header• Encapsulate dalam class
– Driver digunakan untuk menguji ADT
Abstract Data Type (ADT)• Struktur Data merupakan teknik/strategi untuk
mengimplementasikan sebuat ADT (ADT lebih merupakan deskripsi logika)
• Struktur data merupakan cara membentuk, mengkonstruksi, mengaransemen, mengkomposisi kan/mengorganisasikan data (ADT)
• ADT:– Stack, queue, priority queue, dictionary, sequence, set
• Struktur Data:– Array, linked list, hash table, tree
Pendahuluan Class• Class merupakan struktur data dari objek• Sebuah class (kelas) yang menyerupai
struktur dapat dibuat dengan menggantikan kata struct dengan class
• Persamaan struktur dengan kelas, pada cara mendeklarasikan, mendefinisikan dan cara akses
• Sedangkan perbedaan struktur dengan kelas adalah kelas mempunyai access specifier (penentu akses), sedangkan struktur tidak mempunyai access specifier (penentu akses)
Struktur vs Kelas/ClassPersamaan :
• Cara deklarasistruct cthStruct{
int b;........
};
• Cara definisi variabel/objek
cthStruct x;
• Cara aksesx.a = 22;
• Cara deklarasiclass cthClass
{int b;........
};
• Cara definisi variabel/objek
cthClass x;
• Cara aksesx.a = 22;
Struktur vs Kelas/ClassPerbedaan :
struct cthStruct{
int b;........
};
class cthClass{
public;int b;........
};
Kelas/Class• Kelas digunakan untuk mendefinisikan obyek• Contoh : tipe data digunakan untuk
mendefinisikan variabel• Obyek melingkupi anggota data dan fungsi
anggota• Nama kelas biasanya dimulai dengan huruf besar• Pendefinisian Kelas:
• Pendefinisian obyek:NamaKelas Nama_Obyek
Penentu Akses (Access Specifier)
• Digunakan untuk menentukan anggota data atau fungsi anggota mana yang boleh diakses dan oleh siapa
• Ada 4 macam penentu akses(access specifier)/level access modifier: – Public– Default– Private– Protected
Penentu Akses (Access Specifier)
• Public– Bisa diakses dari luar kelas (bersifat global)– Maka semua class yang lain dapat melihat
class tersebut– Dapat melakukan import, instansiasi, extends,
dan memanggil method yang ada dalam class
• Default– Maka hanya class dari package yang sama atau
class turunannya yang dapat melihat class tersebut
Penentu Akses (Access Specifier)
• Private– Hanya bisa diakses dari dalam kelas (bersifat
lokal)– Hanya dapat digunakan oleh inner class saja,
sedangkan class lain tidak dapat ditandai sebagai private
• Protected– Sama dengan Private dan bisa diakses oleh
kelas-kelas turunan– Class tidak dapat dideklarasikan sebagai
protected
Penentu Akses Public• Dengan menggunakan penentu akses
publik, anggota data dan fungsi anggota bisa diakses dari luar kelas
• Contoh :class Buku{
public:char judul[30];.................
}
Penentu Akses Private• Digunakan untuk memproteksi anggota-
anggota tertentu pada kelas agar tidak bisa diakses secara langsung dari luar kelas
• Biasanya yang menggunakan penentu akses private adalah anggota data
• Biasa digunakan pada kelas untuk memproteksi anggota-anggota tertentu pada kelas, agar tidak dapat diakses di luar kelas secara langsung
Penentu Akses Private• Penentu akses private adalah nilai default sehingga
kalau penentu akses tidak ditentukan, maka dianggap menggunakan penentu akses private
• Contoh :class Buku
{private:char judul[30];.................
}
Fungsi Anggota• Ada dua macam cara penulisan fungsi anggota. • Cara 1 : Fungsi didefinisikan didalam kelas
Fungsi Anggota
Cara 2 : prototipe fungsi dideklarasikan dalam kelas, definisi fungsi diletakkan diluar kelas dibawah fungsi main()
Class vs Object• Object adalah instansiasi dari
sebuah class• Class itu sebagai sebuah cetakan
sedangkan object itu adalah barang dari hasil cetakan
• Class juga dapat dikatakan sebagai kategori, sedangkan object adalah sesuatu yang memuhi syarat-syarat yang harus dipenuhi agar masuk dalam kategori tersebut
Class vs Object• Jadi satu class dapat mempunyai
banyak object• Setiap object mempunyai sifat yang
sama persis seperti yang didefinisikan dalam class tersebut
• Contoh : Mendefinisikan beberapa obyek
MtKuliah Jur_IT, Jur_TI;MtKuliah DtMtKuliah[22];
Kelas
Contoh Soal 02:Perintah menampilkan obyek komik dari class buku dengan 3 attribut/field (Judul, Pengarang dan Jumlah Buku yang tersedia)
Menggunakan penentu akses public
Kelas
Contoh Soal 03:Perintah menampilkan obyek komik dari class buku dengan 3 attribut/field (Judul, Pengarang dan Jumlah Buku yang tersedia)
Menggunakan penentu akses private & public
Kelas
Contoh Soal 04:Perintah menampilkan obyek komik dari class buku dengan 3 attribut/field (Judul, Pengarang dan Jumlah Buku yang tersedia)
Menggunakan fungsi anggota dengan format kelas::data
Class & Obyek• Class adalah suatu cara untuk
membuat tipe data yang baru• Mengapa butuh tipe data baru, agar
aplikasinya source code lebih mudah dibaca
• Dari tipe data akan dibuat variabel
Class & Obyek• Variabel adalah tempat untuk
data• Class dengan obyek duluan
class nya• Instance adalah kata lain dari
obyek atau instance miliknya obyek
Class & Obyek Static adalah variabel miliknya si class
atau static variebel miliknya class nilai akan berubah kesemua instance
Didalam class kita dapat :1. Constructor selalu instance2. Method bisa static atau instance3. Variabel/property bisa static atau
instance4. Buat class didalam class biasa disebut
Inner Class
Class & Obyek• Constructor selalu instance• Constructor dan method ada
overloading argumen atau parameter nya berbeda (yang berbeda bisa jumlah, tipe data, urutan), tetapi namanya bisa sama
Class & Obyek
• Macam-macam method– method();– method(Int x, Int y);– method(String x, String y)– method(Integer y, String x )
Class & Object
• Didalam class bisa mennggunakan banyak konstruktor
• Contoh :• Mahasiswa m1 = new Mahasiswa();
Constructor
1. Obyek Lokal• Merupakan suatu obyek yang
didefinisikan di luar fungsi• Konstruktor dijalankan saat obyek
bersangkutan di ciptakan• Destruktor dijalankan dengan
sendirinya saat fungsi yang mendefinisikannya berakhir
2. Obyek Global• Merupakan suatu obyek yang didefinisikan
secara global• Konstruktor dijalankan saat awal eksekusi
program, yaitu sebelum fungsi main() di proses
• Destruktor dijalankan saat fungsi main()berakhir
• Apabila ada exit() destruktor obyek global akan dijalankan terlebih dahulu, tetapi destruktor obyek lokal tidak akan dieksekusi
Obyek Global
Contoh Soal 06:Menampilkan konstruktor dan destruktor pada variabel R,S,T dengan menambahkan perintah exit()
Menyimpan kelas dan fungsi anggota pada file tersendiri
• Apabila class digunakan untuk sejumlah program, maka class harus
– dideklarasikan pada file tersendiri• Didefinisikan fungsi-fungsi anggotanya
• File header bisa kita buat sendiri• Caranya dengan memisahkan pendefinisian
kelas kedalam suatu file tersendiri yaitu file .H
Menyimpan kelas dan fungsi anggota pada file tersendiri
• Definisi fungsi anggota juga dimasukkan kedalam file .H ini• File .H ini kemudian disimpan di folder BC31\Include atau
disimpan pada tempat lain• Penulisan file header:
- #include “matkul.h” jika file disimpan di folder Include
- #include “d:\matkul.h” jika file disimpan ditempat lain, misal di drive d:
Class dan Obyek
Contoh Soal 07:Buat header untuk deklarasi kelas majalahBuat file untuk mendefinisikan fungsi-fungsi anggota dari class majalahMenampilkan majalah dengan menggunakan class yang di deklarasikan pada file header majalah.h
Obyek Sebagai Parameter• Ada 3 kemungkinan melewatkan obyek
sebagai parameter:1. Melewatkan obyek berdasarkan nilai
(passing parameter by value)2. Melewatkan obyek sebagai referensi
(passing parameter by reference)3. Melewatkan obyek sebagai pointer
1. Melewatkan Obyek Berdasarkan Nilai• Definisi fungsi
void lihat_matkul(Matkul matakuliah){matakuliah.lihat_data();
}• Pemanggilan
Matkul jur_it;lihat_matkul(jur_it);
2. Melewatkan Obyek Sebagai Referensi• Definisi fungsi
void lihat_matkul(Matkul &matakuliah){matakuliah.lihat_data();
}• Pemanggilan
Matkul jur_ti;lihat_matkul(jur_ti);
3. Melewatkan Obyek Sebagai Pointer
• Definisi fungsi (cara 1)void lihat_matkul(Matkul *matakuliah){(*matakuliah).lihat_data();
}
• Definisi fungsi (cara 2)void lihat_matkul(Matkul *matakuliah){matakuliah->lihat_data();
}
• PemanggilanMatkul jur_ts;lihat_matkul(&jur_ts)
Array Obyek• Suatu array juga bisa mempunyai elemen berupa obyek• Sintaks:
NamaKelas NamaObyek[jumlah_data];Contoh:Matkul data_matakuliah[10];
• Inisialisasi:Matkul data_matakuliah[2] = {
{Matkul(“PBO”, 3, ‘A’)}, //Matkul : nama konstruktor{Matkul(“Prak PBO”, 2, ‘B’)}
};
Nilai Balik Berupa Obyek• Sebuah fungsi dapat menggunakan obyek
sebagai tipe nilai balik• Sintaks:
TipeNilaiBalik NamaFungsi(TipeData NamaVariabel)Contoh:Matkul IsiData(char *nama_mk, int sks_mk, char nilai_mk);
Pointer ke Fungsi Anggota• Fungsi anggota dapat diakses melalui pointer• Sintaks:
TipeNilaiBalik (NamaKelas::*NamaPointer) (Parameter, …);• TipeNilaiBalik dan Parameter dari pointer tergantung pada tipe
nilai balik dan parameter dari fungsi yang akan diakses• Contoh:
Class Contoh{
public:void FContoh1()
{cout << “tes”;}int FContoh2(int x, int y)
{return(x+y);}};
Pointer ke Fungsi Anggota
• Pointer ke fungsi dengan nilai balik void dan tidak mempunyai parameter:- Deklarasi:
void (Contoh::*ptr_contoh1) ();- Mengakses fungsi FContoh1 dengan pointer:
ptr_contoh1 = &Contoh::FContoh1;- Menjalankan fungsi yang ditunjuk oleh pointer:
(x.*ptr_contoh1)();x adalah nama obyek
Pointer ke Fungsi Anggota• Pointer ke fungsi dengan nilai balik int dan dua
parameter bertipe int:- Deklarasi:
int (Contoh::*ptr_contoh2) (int, int);- Mengakses fungsi FContoh2 dengan pointer:
ptr_contoh2 = &Contoh::FContoh2;- Menjalankan fungsi yang ditunjuk oleh pointer:
(x.*ptr_contoh2)(2,3);x adalah nama obyek