Tipe Data Abstract - Day 01
Tags: programming, 100daysofcode, beginners, tutorial
Published: 2021-10-24 16:33:13


## Theory 1
Sebagai developer, kami sering diberi tugas dalam istilah non-teknis, dan terserah kami untuk mencari tahu bagaimana sebenarnya mengimplementasikan ide ke tingkat yang lebih tinggi. Bagaimana kita memilih alat apa yang akan digunakan untuk melakukan tugas ini? Biasanya, tugas yang ada memiliki persyaratan tertentu, jadi kami menjelajahi dokumentasi bahasa favorit kami (*atau sebagai alternatif hanya mencari di Google dan memilih hasil StackOverflow pertama, hhehehe... Just Kidding!!*) dan memilih sesuatu yang memiliki fungsi yang memenuhi persyaratan untuk tugas kami.

Sebagai contoh, katakanlah kita ingin menyimpan nilai dari banyak siswa di sebuah kelas dengan cara kita dapat query struktur data dengan nama siswa dan mengembalikan nilai siswa tersebut. Jelas, kasus ini bisa diselesaikan dengan jenis struktur data "map", yang memetakan "keys" (nama siswa) ke "values" (nilai). Jika kami tidak terlalu khawatir tentang kinerja, kami tidak perlu peduli tentang bagaimana struktur data menjalankan tugas-tugas ini: kami hanya peduli bahwa itu menyelesaikan pekerjaan.

Apa yang kami jelaskan, suatu model untuk tipe data di mana tipe data ditentukan oleh perilakunya dari sudut pandang pengguna data (yakni, dengan fungsi apa yang diklaim pengguna perlu dimiliki) adalah Tipe Data Abstrak ( ADT).

## Theory 2
Kami baru saja memperkenalkan istilah, "tipe data abstrak", tetapi artikel ini tentang "struktur data", jadi apa bedanya? Kedua istilah ini terdengar sangat mirip, tetapi sebenarnya memiliki implikasi yang sangat berbeda. Seperti yang saya sebutkan, Tipe Data Abstrak didefinisikan oleh fungsi apa yang harus dapat dilakukan, tetapi sama sekali tidak tergantung pada bagaimana sebenarnya melakukan fungsi-fungsi tersebut (yaitu, tidak spesifik untuk implementasi). Di sisi lain, Struktur Data adalah representasi data yang konkret: terdiri dari semua mur dan baut, bagaimana data direpresentasikan (bagaimana mereka disimpan dalam memori, algoritma untuk melakukan berbagai operasi, dll.).

Misalnya, katakanlah seorang pengguna ingin kita mendesain wadah "set" yang berisi bilangan bulat. Pengguna memutuskan bahwa wadah ini harus memiliki fungsi berikut:
- Fungsi "insert" yang akan mengembalikan True setelah penyisipan elemen baru, atau False jika elemen sudah ada.
- Fungsi "find" yang akan mengembalikan True jika ada elemen, jika tidak False.
- Fungsi "union" yang akan menambahkan semua elemen dari "set" lain ke dalam "set" ini.

Pengguna telah berhasil menjelaskan fungsionalitas apa yang akan dimiliki wadah "set", tanpa detail spesifik implementasi apa pun (yakni, bagaimana ketiga fungsi yang dijelaskan akan bekerja). Akibatnya, wadah "set" ini adalah Tipe Data Abstrak. Sekarang terserah kita, para developer, untuk mencari cara yang benar untuk mengimplementasikan Tipe Data Abstrak ini.

Bisakah kita mengetahui kompleksitas waktu dari salah satu dari tiga fungsi yang dijelaskan dalam wadah "set" di atas? Sayangnya tidak ada! Tipe Data Abstrak hanya menjelaskan fungsionalitas, bukan implementasi, kompleksitas waktu dari fungsi-fungsi ini sepenuhnya tergantung pada bagaimana programmer memilih untuk mengimplementasikan "set" (yakni, Struktur Data apa yang kami pilih untuk digunakan untuk mendukung wadah ini).

## Theory 3
Singkatnya, Tipe Data Abstrak hanya menjelaskan serangkaian fitur, dan berdasarkan fitur yang ingin kita miliki, kita perlu memilih Struktur Data yang sesuai untuk digunakan sebagai tulang punggung untuk mengimplementasikan ADT.

Misalnya, bagaimana jika pengguna ingin ADT menyimpan daftar lagu? Saat kita mendengarkan musik, apakah kita selalu ingin mengulang lagu sesuai urutan kemunculannya? Biasanya, kami suka memiliki kemampuan untuk memilih lagu tertentu, yang dapat muncul di suatu tempat di tengah daftar lagu. Akibatnya, mungkin masuk akal bagi kami, para pemrogram, untuk menggunakan struktur berbasis array untuk mengimplementasikan ADT ini karena memiliki akses acak terbukti bermanfaat. Namun, kami dapat menggunakan Linked List untuk mengimplementasikan ADT ini sebagai gantinya! Fungsionalitasnya akan tetap benar, tetapi mungkin tidak secepat menggunakan struktur berbasis array.

![Tipe Data Abstract](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8n7ouki9rmm7q2r7bb76.jpg)

Pada bagian selanjutnya, kita akan membahas beberapa Tipe Data Abstrak yang mendasar dan akan membahas pendekatan berbeda yang dapat kita gunakan untuk mengimplementasikannya (serta trade-off dari setiap pendekatan).