Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Matakuliah : KONSEP BAHASA PEMROGRAMAN Tahun : 2010 TIPE DATA ABSTRAK Pertemuan 8 Outline Materi •Konsep Abstraksi •Pengenalan Abstraksi Data •Isu Desain Tipe Data Abstrak •Contoh Bahasa •Tipe Data Abstrak dengan Parameter •Konstruksi Enkapsulasi •Naming Encapsulations Bina Nusantara University 3 Konsep Abstraksi • Asli di Simula 67 • Abstraksi adalah view atau representasi entitas yang hanya meliputi atribut yang paling siginifikan; atributatribut umum dapat diabaikan • Konsep abstraksi adalah fundamental di pemrograman (dan computer science) • Hampir semua bahasa pemrograman mendukung abstraksi proses dengan subprogram • Hampir semua bahasa yang dirancang sesudah 1980 mendukung abstraksi data Bina Nusantara University 4 Konsep Abstraksi (lanjutan) • Tujuan : penyederhanaan proses pemrograman • Tipe abstraksi – Abstraksi proses : subprogram – Abstraksi data (ADT) : enkapsulasi dan penyembunyian informasi • Abstraksi proses – sortInt(list, listLen); – Abstrasi kode sort yang algoritmanya tidak dispesifikasi – Atribut esensial • • • • Nama array Tipe elemen Panjang array Hasil – Atribut tak penting • Algoritma Bina Nusantara University 5 Abstraksi Data • TDA adalah enkapsulasi yang mencakup data dan subprogram. Instance suatu ADT disebut object. • Motivasi: menghindari kompleksitas • TDA adalah tipe data user-defined yang memenuhi dua kondisi berikut ini : – Representasi dan operasi pada object didefinisikan dalam satu unit sintatik – Representasi tope object disembunyikan dari unit program yeng menggunakan object tersebut sehingga hanya opeerasi yang disediakan dalam definisi tipe Bina Nusantara University 6 Keuntungan Abstraksi Data • Keutungan kondisi pertama – Organisasi program, modifiabilitas dan kompilasi terpisah – Modifikasi representasi/operasi dapat dilakukan di satu area • Keuntungan kondisi kedua – Reliabilitas—dengan menyembunyikan representasi data , pengguna tidak bisa langsung mengakses object atau yang tergantung pada representasi sehingga perubahan representasi tidak mempengaryhui kode – Meningkatkan integritas object – Klien tidak dapat melihat detil representasi Bina Nusantara University 7 Contoh • TDA built in : tipe floating point – Representasi di sel memori disembunyikan – Operation disediakna; pengguna tidak bisa meng-create operasi baru • TDA user defined : stack S – Operasi: create (), destroy (), empty(), full(), push(), pop(), top(). – Kode klien: • • • • Bina Nusantara University create (s); push(s,4); push(s,9); if (!empty(s)) temp = top(s); 8 Isu Desain • Unit sintatik untuk mendefinisikan TDA • Operasi built-in – Penugasan – Perbandingan • Operasi umum – – – – Iterator Aksesor Konstruktor Destruktor • TDA berparameter Bina Nusantara University 9 Ada • Konstruksi enkapsulasi disebut packages – Specification package (antarmuka) – Body package (implementasi name entitas di spesifikasi) • Penyembunyian informasi – Representasi tipe yang muncul dibagian spesifikasi disebut bagian private • Bentuk yang lebih restricted adalah limited private types – Definisikan ADT sebagai pointer dan menyediakan definisi pointed-to structure dalam body package Bina Nusantara University 10 Contoh package Stack_Pack is type stack_type is limited private; max_size: constant := 100; function empty(stk: in stack_type) return Boolean; procedure push(stk: in out stack_type; elem:in Integer); procedure pop(stk: in out stack_type); function top(stk: in stack_type) return Integer; private -- hidden from clients type list_type is array (1..max_size) of Integer; type stack_type is record list: list_type; topsub: Integer range 0..max_size) := 0; end record; end Stack_Pack Bina Nusantara University 11 C++ • Didasarkan pada tipe struct C dan class Simula 67 • Class adalah alat untuk enkapsulasi • Semua instance class sharing satu copy fungsi anggota • Setiap instance class masing-masing mempunyai copy data anggota class • Instance dapat static, stack dynamic, atau heap dynamic • Penyembunyian informasi – Private clause untuk hidden entities – Public clause untuk interface entities – Protected clause untuk inheritance Bina Nusantara University 12 C++ (lanjutan) • Konstruktor: – Fungsi untuk inisialisasi data anggota instance (mereka tidak membentuk object) – Mungkin juga mengalokasikan ruang jika sebagian object adalah heap-dynamic – Dapat mempunyai parameter untuk parameterisasi object, i.e. dapat lebih dari satu untuk satu class – Dipanggil secara implisit saat instance di- create – Dapat dipanggil secara eksplisit – Nama samadengan nama class – Tak ada return type Bina Nusantara University 13 C++ (lanjutan) • Destruktor – Fungsi untuk membersihkan sesudah instance di-destroy; biasanya hanya reclaim heap storage – Dipanggil secara implisit waktu-hidup obyek berakhir – Dapat dipanggil secxara eksplisit – Object heap dynamic hidup sampai de-alokasi secara eksplisit – Digunakan sebagai alat debugging, i.e. display atau cetak nilai object – Nama samadengan nama class, didahului oleh tilde (~) – Hanya satu destruktor – Tak ada return type Bina Nusantara University 14 C++ (lanjutan) class stack { private: int *stackPtr, maxLen, topPtr; public: stack() { // a constructor stackPtr = new int [100]; maxLen = 99; topPtr = -1; }; ~stack () {delete [] stackPtr;}; void push (int num) {…}; void pop () {…}; int top () {…}; int empty () {…}; } Bina Nusantara University 15 C++ (lanjutan) • Friend functions atau classes – untuk akses anggota private bagi sejumlah unrelated units atau functions – Perlu di C++ • C++ vs Ada – C++ mendukung ADTs mirip dengan yang dipunyai oleh Ada – Keduanya menyediakan mekanisme efektif untuk enkapsulasi dan penyembunyian informasi – Package Ada lebih umum daripada class C Bina Nusantara University 16 Java • Mirip C++, kecuali : – Semua tipe user-defined adalah class – Semua object dialokasikan dari heap dan diakses melalui variabel reference – Entitas individual dalam class mempunyai modifier kontrol akses (private atau public), bukannya klausa – Java mempunyai mekanisme scoping kedua, disebut package scope, yang dapat digunakan sebagai ganti fungsi/class friend • Semua entitas dalam semua class dalam package yang tidakmempunyai access control modifiers adalah visible diseluruh package Bina Nusantara University 17 Java (lanjutan) class StackClass { private: private int [] *stackRef; private int [] maxLen, topIndex; public StackClass() { // a constructor stackRef = new int [100]; maxLen = 99; topPtr = -1; }; public void push (int num) {…}; public void pop () {…}; public int top () {…}; public boolean empty () {…}; } Bina Nusantara University 18 C# • Basis pada C++ dan Java • Tambah dua modifier akses, internal dan protected internal • Semua instance class adalah heap dynamic • Konstruktor default tersedia untuk semua class • Garbage collection digunakan oleh sebagian besar object heap, sehingga destruktor jarang digunakan • structs adalah lightweight classes yang tidak mendukung inheritance Bina Nusantara University 19 C# (lanjutan) • Solusi umum untuk akses data anggota : metode accessor (getter dan setter) • C# menyediakan properties sebagai jalan untuk mengimplemantasikan getter dan setter tanpa memerlukan metode call secara eksplisit Bina Nusantara University 20 C# (lanjutan) public class Weather { public int DegreeDays { //** DegreeDays is a property get {return degreeDays;} set {degreeDays = value;} } private int degreeDays; ... } ... Weather w = new Weather(); int degreeDaysToday, oldDegreeDays; ... w.DegreeDays = degreeDaysToday; ... oldDegreeDays = w.DegreeDays; Bina Nusantara University 21 Parameterisasi TDA • Parameterisasi TDA mengijinkan merancang TDA yang dapat menyimpan tipe data sembarang • Dikenal dengan generic classes • C++ dan Ada mendukung TDA berparameter • Java 5.0 menyediakan bentuk terbatas dari TDA berparameter • C# sampai sekarang belum mendukung TDA berparameter Bina Nusantara University 22 Parameterisasi TDA Ada • Ada Generic Packages – Membuat tipe stack type lebih luwes dengan membuat tipe elemen dan ukuran stack generi generic Max_size: Positive; type Elem_Type is Private; package Generic_Stack is … function Top(Stk: in out StackType) return Elem_type; … end Generic_Stack; Package Integer_Stack is new Generics_Stack(100,Integer); Package Float_Stack is new Generics_Stack(100,Float); Bina Nusantara University 23 Paramerterisasi TDA C++ • Class dapat agak generik dengan menulis fungsi kontruktor berparameter template <class type> class stack { … stack (int size) { stk_ptr = new int [size]; max_len = size - 1; top = -1; }; … } stack stk(100); Bina Nusantara University 24 Konstruksi Enkapsulasi • Program besar mempunyai dua keinginan khusus – Bagaimana dia disusun, tidak hanya membagi menjadi sejumlah subprogram – Bagaimana dia dikompilasi, partial atau full compilation • Solusi obvious: kelompokkan subprogram yang logically related kedalam unit yang dapat dikompail terpisah • Koleksi seperti ini disebut encapsulation • Encapsulation adalah mekanisme untuk ADT Bina Nusantara University 25 Enkapsulasi di C dan C++ • C – File yang memuat satu atau lebih subprogram dapat dikompail secara independen – Interface dilatakkan di header file – Masalah: linker tidak mencek tipe antara header dan pasangan implementasinya – #include spesifikasi preprocessor • C++ – Mirip dengan C – Tambahan fungsi friend yang mempunyai akses ke anggota private dari friend class Bina Nusantara University 26 Ada Package • • • Spesifikasi package Ada dapat memuata sembarang banyak data dan deklarasi subprogram Package Ada dapat dikompail terpisah Spesifikasi package dan bagian bodi dapat dikompail terpisah Bina Nusantara University 27 C# Assemblies • Koleksi file yang muncul sebagai single dynamic link library or executable • Setiap file memuat modul yang dapat dikompail terpisah • DLL adalah koleksi class dan method yang di-link secara individual ke program yang dieksekusi • C# mempunyhai modifier akses internal; anggota class internal visible disemua class dalam assembly dimana dia muncul Bina Nusantara University 28 Naming Encapsulation • Program besar mendefine banyak nama global ; perlu cara untuk membaginya kedalam kelompok logikal • naming encapsulation digunakan untuk membentuk lingkup baru bagi nama • C++ Namespaces – Dapat meletakkan setiap library dalam namespacenya sendiri dan kualifikasi nama yang digunakan di luar dengan namespace – C# juga mancakup namespaces Bina Nusantara University 29 Naming Encapusulation • Java Packages – Packages dapat mmuat lebih dari satu definisi class; class dalam package adalah partial friends – Client dari package dapat menggunakan qualified name secara penuh atau menggunakan deklarasi import • Ada Packages – Packages didefine sercara hirarki yang berkorespondensi ke file hirarki – Visibilitas dari unit program dicapai melalui klausa with Bina Nusantara University 30 LATIHAN A. SOAL PILIHAN 1. Opsi-opsi berikut ini bukan merupakan keuntungan dari information hiding adalah a. client tidak dapat melihat representasi secara detil b. meningkatkan reliability c. increase integrity object d. modularity object 2. Bahasa yang konstruksinya tidak mencakup information hiding adalah a. SIMULA 67 b. Ada c. Java d. C++ 3. Konstruksi encapsulation di Ada disebut a. class b. package d. template 4. Generic atau parametrized ADT di C++ disebut a. template b. iterator c. constructor Bina Nusantara University c. module d. destructor 31 LATIHAN 5. Pilih yang benar a. C++ class dan Ada package adalah type. b. C++ class dan Ada package adalah encapsulation c. C++ class adalah type dan Ada package adalah encapsulation d. C++ class adalah encapsulation dan Ada package adalah type B. SOAL URAIAN 1. Definisikan apa yang disebut encapsulation? Jelaskan latar belakang dibalik munculnya ide atau gagasan mengapa kita membutuhkan encapsulation. Selanjutnya, uraikan bagaimana encapsulation di-provide di C++. 2. Apa yang disebut constructor dan destructor? Uraikan mengapa Java tidak mempunyai destructor? Bina Nusantara University 32 Ringkasan • Konsep TDA dan penggunaannya dalam rancangan program merupakan tonggak sejarah dalam pengembangan bahasa • Dua fitur utama TDA adalah paketkan data dengan operasinya dan penyembunyian informasi • Ada menyediakan packages untuk simulasi TDA • Abstraksi data C++ dilakukan melalui class • Abstraksi data Java mirip dengan C++ • Ada dan C++ menyediakan TDA berparameter • C++, C#, Java, dan Ada mendukung naming encapsulation Bina Nusantara University 33