Abstract Data Type
Tipe data abstrak
ADT pertama kali ditemukan oleh para ilmuan komputer untuk memisahkan struktur
penyimpanan dari perilaku tipe data yang abstrak seperti misalnya,
Tumpukan(Stack) serta antrian(Queue). Seperti kita duga, pemrogram tidak perlu
tahu bagaimana Tumpukan(Stack) perubahan inplementasi ADT tidak mengubah
program yang menggunakannya secara keseluruhan, dengan catatan bahwa interface
ADT tersebut dengan ‘dunia luar’ tetap dipertahankan.
Pemakaian dan
pembuatan ADT dapat dilakukan secara terpisah. yang perlu dibicarakan antara
pembuat dan pengguna ADT adalah interface ADT yang bersangkutan.
ADT merupakan
sarana pengembangan sistem yang bersifat modular, memungkinkan suatu sistem
dikembangkan oleh beberapa orang anggota tim kerja dimana masing-masing anggota
tim bisa melakukan bagiannya sendiri-sendiri dengan tetap mempertahankan
keterpaduannya dengan anggota tim yang lain.
Dalam hal ini perlu dibedakan antara pengertian struktur data dan ADT.
Struktur data hanya memperlihatkan bagaimana data-data di organisir, sedangkan
ADTmempunyai cakupan yang lebih luas, yaitu memuat/mengemas struktur data
tertentu sekaligus dengan operasi-operasi yang dapat dilakukan pada struktur
data tersebut. Dengan demikian, definisi umum tentang ADT di atas dapat
diperluas sebagai berikut:
- Abstract Data Type (ADT) dapat didefinisikan sebagai model matematika dari objek data yang menyempurnakan tipe data dengan cara mengaitkannya dengan fungsi-fungsi yang beroprasi pada data yang bersangkutan. (Nugroho 2008)
- Abstract data type (ADT) merupakan model matematika yang merujuk pada sejumlah bentuk struktur data yang memiliki kegunaan atau perilaku yang serupa; atau suatu tipe data dari suatu bahasa pemrograman yang memiliki sematik yang serupa. (Barbara Liskov 1974)
- Abstract Data Type adalah sebuah definisi TYPE dan sekumpulan PRIMITIF(Operasi dasar) terhadap TYPE tersebut.
Persoalan Abstraksi Data :
- Struktur data seharusnya menjadi satu bagian internal yang tersembunyi.
- Pemakai modul tidak perlu mengetahui struktur data yang digunakan untuk mengimplementasikan suatu mosul.
- Pemakai modul hanya diberikan gambaran perilaku, bukan struktur internal dari modul.
- Fokus paa perilaku objek, membentuk basis pemrograman berorientasi objek.
- Abstraki data memungkinkan kita mengabstraksikan rincian-rincian cara data diimplementasikan, menjadi bagaimana objek-objek berperilaku,
- Abstraki data memungkinkan kita memperluas Bahasa pemrograman dengan tipe data baru.
- Abstraksi data berisi sekumpulan objek.
- Abstraksi data pada prinsipnya merupakan dasar pemrograman berorientasi objek.
Tujuan Abstract Data Type :
- ADT memisah struktur penyimpanan (lokasi memori) dari perilaku.
- ADT menyembunyikan informasi atau pengkapsulan, yaitu : 1) perubahan implementasi ADT tidak mengubah teks program lain bila antarmuka tidak berubah. 2) pemakaian dan pembuatan ADT dapat dilakukan terpisah, hanya perlu kesepakatan antarmuka pemakaian ADT.
- ADT merupakan sarana pemrograman modular dan menjadi landasan pembentukan tim pemrograman.
- ADT merupakan sarana
untuk membuat modul-modul yang menyerupai dengan konsep-konsep yang ditemukan pada
domain persoalan.
Jenis-Jenis ADT:
- ADT Homogen yaitu Struktur data yang mampu menampung beberapa variable yang memiliki tipe data yang sama. Dengan kata lain ADT Homogen adalah Array.
- ADT Heterogen yaitu tipe data bentukan yang berisi kumpulan variable dengan tipe data yang sama ataupun berbeda. Dengan kata lain ADT Heterogen adalah Struct.
Tahapan Pembuatan ADT :
-
Spesifikasi.
-
Implementasi.
-
Pemrograman.
Bentuk umum penulisannya adalah sebagai
berikut.
Typedef struct {
<Statement>
<Statement>
} <namaADT>;
|
2.1
Hasil dan Pembahasan
ADT Jam
/* File : boolean.h */
|
#ifndef
BOOLEAN_H
#define
BOOLEAN_H
#define
boolean unsigned char
#define
true 1
#define
false 0
#endif
|
/* File : jam.h */
|
#ifndef
jam_H
#define
jam_H
#include
"boolean.h"
#include
"stdio.h"
#define
Hour(J) (J).HH
#define
Minute(J) (J).MM
#define
Second(J) (J).SS
typedef
struct
{
int HH;
int MM;
int SS;
} Jam;
Jam
MakeJam(int H, int M, int S);
boolean
IsJValid(int H, int M, int S);
void
BacaJam(Jam *J);
void
TulisJam(Jam J);
int
JamToDetik(Jam J);
Jam
DetikToJam(int N);
#endif
|
/* File :
Jam.c *\
|
#include
"jam.h"
Jam
MakeJam(int H, int M, int S)
{
Jam J1;
Hour(J1) = H;
Minute(J1) = M;
Second(J1) = S;
return J1;
}
boolean
IsJValid(int H, int M, int S)
{
return ((H >= 0 && H <= 23)
&& (M >= 0 && M <= 59) && (S >= 0 &&
S <= 59));
}
void
BacaJam(Jam *J)
{
int H, M, S;
do {
printf("Masukkan jam :
");scanf("%d",&H);
printf("Masukkan menit :
");scanf("%d",&M);
printf("Masukkan detik :
");scanf("%d",&S);
} while(!IsJValid(H,M,S));
*J = MakeJam(H,M,S);
}
void
TulisJam(Jam J)
{
printf("%d:%d:%d",Hour(J),Minute(J),Second(J));
}
int
JamToDetik(Jam J)
{
return(3600 *Hour(J) + 60 *Minute(J) +
Second(J));
}
Jam
DetikToJam(int N)
{
int sisa;
Jam JOut;
Hour(JOut) = N / 3600;
sisa = N % 3600;
Minute(JOut) = sisa / 60;
Second(JOut) = sisa % 60;
return JOut;
}
|
/* File : Mjam.c *\
|
#include
"jam.h"
#include
"jam.c"
int
main()
{
Jam J1, J2;
BacaJam(&J1);
printf("Jam sekarang: ");
TulisJam(J1); printf("\n");
printf("Konversi menjadi detik:
%d\n",JamToDetik(J1));
J2 = DetikToJam(5000);
printf("5000 detik sama dengan jam :
");
TulisJam(J2);
return 0;
}
|
Tampilan Program :
Analisis :
Waktu (Time) terdiri atas infoemasi
JAM, MENIT dan Detik. ADT JAM didefinisikan dengan nilai-nilai JAM, MENIT dan
DETIK dengan ketentuan masing-masing 1 jam = 60 menit, 1 menit = 60 detik.
Primitif (operasi dasar) untuk ADT
JAM antara lain :
TulisJam à output dalam bentuk HH:MM:SS.
JamToDetik à mengubah ke jumlah
waktu dalam detik.
DetikToJam à mengubah ke jumlah
waktu dalam jam.
Konstruktor/Creator à pembentuk nilai.
Namanya biasanya diawali dengan kata
MAKE contoh (MakeJam).
ADT
DATE
/* File : tanggal.h
*\
Typedef struct {
Int tgl;
Int bulan;
Int tahun;
} tanggalan;
|
/* File : main.cpp *\
#include <iostream>
#include <tanggal.h>
Using namespace std;
Int Main () {
tanggalan tang;
tang.tgl = 24;
tang.bulan = 1;
tang.tahun = 1997;
Cout<<”Tanggal = “<<tang.tgl<<endl;
Cout<<”Bulan =
“<<tang.bulan<<endl;
Cout<<”Tahun = “<<tang.tahun<<endl;
Return 0;
}
|
Tampilan Program :
Tanggal = 24
Bulan = 1
Tahun = 1997
(program exited with code:
0)
Press return to continue. . .
|
Analisis :
Dari program diatas, kta bisa mengelompokan
file-file nya kedalam 3 kelompok, yaitu :
1.
File Header, file
ni biasanya bertipe .h dalam program di atas, file headernya adalah tanggal.h.
2.
File yang berisi
body dari file header yang bersangkutan. Biasanya file ini menggunakan format
file.c akan tetapi program di atas tidak memiliki file berisi body ini.
3.
File yg berisi
main program. Program di atas memiliki main program dengan nama main.cpp.
2.2 Tugas
ADT POINT
/* File : kepala.h */
|
#ifndef
HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
typedef
struct
{
int x;
int y;
} point;
point
makepoint(int x,int y);
void
bacapoint(point *p);
int
getabsis (point p);
int
getordinat(point p);
void
tulispoint(point p);
#endif
|
/* File : kepala.c */
|
#include <stdio.h>
#include
"kepala.H"
point
makepoint( int x, int y)
{
point temp;
temp.x = x;
temp.y = y;
return temp;
}
void
bacapoint(point *p)
{
int x,y;
printf("Masukkan nilai X : ");
scanf("%d", &x);
printf("Masukkan nilai Y : ");
scanf("%d", &y);
*p = makepoint(x,y);
}
int
getabsis(point p)
{
return p.x;
}
int
getordinat(point p)
{
return p.y;
}
void
tulispoint(point p)
{
printf("P(%d,%d)",p.x,p.y);
}
|
/* File : main.cpp */
|
#include
<iostream>
#include
"kepala.h"
#include
"kepala.c"
using
namespace std;
int
main()
{
int x,y;
point P;
bacapoint(&P);
tulispoint(P);
cout<<"\n";
cout<<"Nilai absis \t
:"<< getabsis(P)<<"\n";
cout<<"Nilai ordinat \t
:"<<getordinat(P);
}
|
Tampilan Program :
Analisa :
File di atas adalah kepala.h dan kepala.c, dimana kepala.h adalah sebuah header file dari main program sedangkan kepala.c berisi
operasi-operasi dasar yang akan dipakai pada main program yaitu main.cpp.



0 Comments