PRAKTIKUM ALGORITMA DAN STRUKTUR DATA BAB II

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.

Post a Comment

0 Comments