Abstract Data Type
Abstract Data Type
Sebuah program dalam bahasa C yang "utuh", seringkali terdiri dari beberapa modul program.
Sebuah modul mungkin mewakili sekumpulan rutin sejenis, ADT (Abstract Data Type: definisi
type dan primitifnya), atau mesin (definisi state variable dari mesin dan primiritfnya).
Pada hakekatnya sebuah program utuh terdiri dari kelompok file sebagai berikut:
1. File header, dengan nama xxx.h. Untuk setiap type dan primitifnya, ada sebuah file xxx.h.
Contoh:
Jika anda memerlukan ADT JAM, DATE dan mesin KATA maka ada 3 buah file header
yaitu Jam.h, DATE.h dan KATA.h
2. File yang berisi BODY dari File header yang bersangkutan: xxx.c. File ini disebut sebagai
file realisasi dari prototype yang didefinisikan pada xxx.h. Akan ada sebuah xxx.c untuk
setiap xxx.h.
Untuk contoh di atas, akan ada JAM.c, DATE.c dan KATA.c.
3. File yang berisi main program (dan prosedur/fungsi lain yang hanya dibutuhkan oleh main),
misalnya dengan nama main.c
Contoh program dalam beberapa file atau biasa disebut dengan modul. Modul berikut adalah
untuk manipulasi jam :
/* File : jam.h */
/* deklarasi TYPE dan prototype type jam */
#ifndef jam_H
#define jam_H
typedef struct {
int HH;
int MM;
int SS;
}jam;
/* prototype */
void ResetJam (jam * J);
/* Mengisi sebuah jam J dengan 00:00:00 */
void TulisJam (jam J);
/* menulis sebuah jam */
int JamToDetik (jam J);
/* konversi jam ke detik */
jam DetikToJam (int d);
/* konversi dari detik menjadi jam */
#endif
/* File : jam.c */
/* Body prototype type jam */
#include "jam.h"
/* BODY prototype */
void ResetJam (jam * J)
/* Mengisi sebuah jam J dengan 00:00:00 */
{
/* KAMUS LOKAL */
/* ALGORITMA */
(*J).HH = 0;
(*J).MM = 0;
(*J).SS = 0;
}
/* ALGORITMA */
J.HH = d / 3600;
sisa = d % 3600;
J.MM = sisa / 60;
J.SS = sisa % 60;
return J;
}
/* File : mjam.c */
/* memanfaatkan primitif jam */
#include "jam.h"
int main ()
{/* KAMUS */
jam J1;
jam J2;
int dt=1000;
/* PROGRAM */
printf ("hello\n");
ResetJam (&J1);
TulisJam (J1);
printf("Konversi jam ke detik: %d\n",JamToDetik(J1));
J2=DetikToJam(dt);
TulisJam(J2);
return 0;
}
Studi kasus
1. Dari contoh modul di atas, representasikan jam.c di atas kedalam jam dengan format am/pm
#ifndef POINT_H
#define POINT_H
/* PROTOTYPE */
/*KELOMPOK CREATOR */
void MakePoint(POINT *P, int XX, int YY);
/*Prosedur untuk membuat POINT dengan nilai dari user*/
/*KELOMPOK VALIDASI*/
/* Tidak ada Validasi, Asumsi : koordinat Point tidak terbatas*/
/*KELOMPOK GET/SET */
int GetX(POINT P);
/*mengembalikan nilai X dari sebuah Point P */
/*KELOMPOK PRINT/CETAK*/
/*KELOMPOK LAIN */