By. Sri Rezeki Candra Nursari 3 sks Algoritma Struktur Data
Materi Pengantar 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 device 7. 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
Contoh ADT Program contoh 01
Algoritma...????? Pseudocode...??????
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/Class Persamaan : Cara deklarasi struct cthstruct { }; int b;... Cara definisi variabel/objek cthstruct x; Cara akses x.a = 22; Cara deklarasi { class cthclass }; int b;... Cara definisi variabel/objek cthclass x; Cara akses x.a = 22;
Struktur vs Kelas/Class Perbedaan : 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 anggotaanggota 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
Program contoh 02
Algoritma...????? Pseudocode...??????
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
Program contoh 03
Algoritma...????? Pseudocode...??????
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
Program contoh 04
Algoritma...????? Pseudocode...??????
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 instance 2. Method bisa static atau instance 3. Variabel/property bisa static atau instance 4. 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
Obyek Terdiri dari 2, yaitu : 1. Obyek Lokal 2. Obyek Global
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
Obyek Lokal Contoh Soal 05: Menampilkan konstruktor dan destruktor pada variabel R,S,T
Program contoh 05
Algoritma...????? Pseudocode...??????
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()
Program contoh 06
Algoritma...????? Pseudocode...??????
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 majalah Buat file untuk mendefinisikan fungsi-fungsi anggota dari class majalah Menampilkan majalah dengan menggunakan class yang di deklarasikan pada file header majalah.h
Program contoh 07
Program contoh 07
Program contoh 07
Algoritma...????? Pseudocode...??????
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(); } Pemanggilan Matkul 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( Prak PBO, 2, B )} //Matkul : nama konstruktor
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