Download download

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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