Konsep Opaque Pointer
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 17 dari 61.
Sejauh ini, saat kita mendefinisikan struct di file header, siapa pun yang menyertakan header tersebut dapat melihat dan mengakses semua anggotanya secara langsung. Ini melanggar enkapsulasi: prinsip menyembunyikan detail internal dari kode di luar.
C menyediakan teknik yang ampuh bernama opaque pointers untuk mengatasi masalah ini. Idenya sederhana: nyatakan bahwa sebuah struct ada di header, tetapi jangan ungkapkan isinya. Ini dilakukan dengan menggunakan tipe tidak lengkap:
// wallet.h
typedef struct Wallet Wallet; // Hanya deklarasi, tanpa isi!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Perhatikan bahwa tidak ada kurung kurawal. Kita tidak pernah mendefinisikan isi Wallet. Compiler mengetahui bahwa tipe ini ada, tetapi tidak mengetahui ukurannya atau anggotanya. Artinya, kode yang menyertakan header ini hanya dapat menggunakan pointer ke Wallet, tidak pernah struct itu sendiri secara langsung.
Mengapa ini penting? Karena definisi struct yang sebenarnya tersembunyi di file .c, kode apa pun yang menggunakan header-mu tidak dapat menulis w->balance atau sizeof(Wallet). Kode tersebut harus menggunakan fungsi yang kamu sediakan. Kamu mengendalikan semua akses ke data, dan kamu dapat mengubah struktur internalnya nanti tanpa merusak kode apa pun yang bergantung pada header-mu.
Di pelajaran berikutnya, kamu akan berlatih mendefinisikan isi struct yang sebenarnya di dalam file sumber, sehingga pola pointer opaque menjadi lengkap.
Coba sendiri
Pelajaran ini tidak memiliki tantangan kode.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online