Algoritma Pemrograman [BS204] [1.2] Data Abstraction
Robert Sedgewick, Kevin Wayne, Algorithms 4th Ed., Chapter 1, Addison-Wesley Professional, 2011
1
Tujuan Perkuliahan
Mata kuliah ini mengajarkan tentang konsep-konsep algoritma dasar di dalam pemrograman Java. Mahasiswa mampu menggunakan abstraksi data agar mampu memahami analisis algoritma dan merancang algoritma yang optimal untuk memecahkan suatu kasus tertentu dengan abstraksi data. 2
Abstract Data Type(ADT)
Tipe data yang representasi disembunyikan dari klien. Menerapkan ADT sebagai Java class tidak jauh berbeda dari pelaksanaan fungsi library sebagai seperangkat metode statis. Perbedaan utama adalah kita dapat mengasosiasikan data dengan implementasi fungsi dan menyembunyikan representasi data dari klien. (Algorithms, 4ed) ADT mendukung data encapsulation. Tujuan ADT : ◦ Menentukan masalah dalam bentuk API untuk digunakan oleh beragam klien. ◦ Penjelasan algoritma dan struktur data sebagai implementasi API. Tipe data abstrak merupakan kerangka kerja yang tepat untuk studi algoritma karena memungkinkan untuk menempatkan pengetahuan kinerja algoritma untuk segera digunakan : kita dapat menggantikan satu algoritma untuk yang lain untuk meningkatkan kinerja untuk semua klien tanpa mengubah kode klien apapun. 3
Using ADT (1)
Kita tidak perlu tahu bagaimana tipe data diimplementasikan agar dapat digunakan tetapi kita perlu tahu bagaimana menulis program yang menggunakan tipe data sederhana. class Counter : class yang menjelaskan bagaimana menulis program yang menggunakan tipe data sederhana yang memiliki atribut nama dan bilangan bulat positif dan operasi serta menginisialisasi ke nol, penambahan satu nilai dan menampilkan nilai saat ini. Abstraksi ini berguna dalam banyak konteks. Sebagai contoh, kasus pemungutan suara elektronik atau melacak operasi dasar ketika menganalisis kinerja algoritma.
4
Using ADT (2)
ADT memiliki banyak kesamaan dengan Java Library: ◦ Java class. ◦ Instance Methode dapat mengambil nol atau lebih argumen dari jenis tertentu, dipisahkan dengan koma dan diapit tanda kurung. (nilai untuk parameter) ◦ Dapat mengembalikan nilai(return) dari tipe tertentu atau tidak mengembalikan nilai(void). (function / procedure) Dan ada tiga perbedaan yang signifikan: ◦ Memiliki Constructor – methode yang digunakan untuk create object dengan melakukan setting nilai awal atribut. ◦ Metode tanpa static digunakan untuk operasi pada ADT. ◦ Terdapat inherits methods yang sesuai dengan konvensi milik Java. (di gambar ditandakan dengan warna abu-abu) 5
Inherited Methods Method dapat di inherit dari Object class atau Parent class. Inherit method dari kelas Object : ◦ toString() : mengembalikan nilai-nilai atribut dalam bentuk String ◦ getClass() : what class is this object? ◦ equals() : equivalent relation ◦ compareTo() : comparable relation ◦ hashCode() : has code for this object
6
Objects
Karakter dari Object memiliki 3 sifat penting : ◦ State : State dari sebuah object adalah nilai dari tipe datanya. Date, Time, Point, dll. ◦ Identity : Membedakan satu objek dari yang lain. birthDate vs hireDate. ◦ Behavior : Efek dari operasi data-tipe. Date : addDay(), addMonth(), addYear(), dll. Mekanisme untuk melakukan akses ke Object adalah Reference. 7
Creating Objects Biasa disebut instansiasi Keyword : new Sintaks :
Tipe_Data_Class nama_Object = new Constructor();
Setiap kali klien menggunakan new(), sistem : ◦ Membuat anggaran ruang memori untuk object. ◦ Memanggil konstruktor untuk menginisialisasi nilainya. ◦ Mengembalikan referensi ke object.
8
Invoking Instance Methods
9
Implementing ADT
Instance Variables (Attribute) Constructors (default / overloading) Instance Methods (default / overloading) Scope (Parameter variables, Local variables, Instance variables)
10
Instance Variables (Attribute) Atribut pada Date? day, month, year, … Atribut pada Mahasiswa? nim, name, jenisKelamin, umur, … Atribut pada Point? x, y
11
Constructors (default / overloading) Public class Manusia { private String nama; public Manusia() { nama = null; } //Constructor Default
Public Manusia(String nama) { this.nama = nama; } //Constructor Overloading public String toString() {
return “Nama Manusia : ” + nama; } }
Public class AppManusia {
public static void main(…) { Manusia m1 = new Manusia(); Manusia m2 = new Manusia(“Andi”); Manusia m3 = m2; } }
12
Instance Methods (default / overloading) dapat berupa function / procedure Public class Manusia { private int umur; public String makan() {
return nama + “ sedang makan”; } //method default public String makan(String lauk) { return nama + “ sedang makan ” + lauk;
} //method overloading public void kalkulasiUmur(Date tglLahir) { umur = (new Date() – tglLahir) / 365; }
Public class AppManusia {
}
public static void main(…) { Manusia m1 = new Manusia(); System.out.println(m1.makan()); System.out.println(m1.makan(“Nasi Goreng”)); m1.kalkulasiUmur(new Date(10, 10, 1990));
} }
13
Anatomy of a class that defines a data type
14
Scope (Parameter variables, Local variables, Instance variables)
15
API, Client’s, Implementation’s, Application
16
Data-typed Design
Encapsulation : Atribut disembunyikan, behaviour diperlihatkan Designing APIs : Satu class design untuk banyak program Algorithms and abstract data types : StaticSETofInts.java Interface Inheritance : seperti adaptor Implementation Inheritance : child class dapat memiliki behaviour dari parent class String Conversion : toString() and Parsing Wrapper Types : Boxing and UnBoxing Equality : equals() Memory Management : Pointer and GarbageCollector Immutability : tidak berubah vs Muttability : diharuskan berubah Design by Contract : ◦ Exceptions and Errors : throwable / try...catch... ◦ Assertions : Ekspresi boolean untuk menegaskan TRUE pada saat didalam program.
17
18