Getter dan Setter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 19 dari 61.
Dengan pointer opaque, member struct tersembunyi dari kode luar. Namun, jika kode eksternal tidak dapat mengakses data secara langsung, bagaimana kita membaca atau mengubahnya? Jawabannya adalah fungsi getter dan setter: antarmuka publik yang menyediakan akses terkontrol ke data privat.
Getter mengembalikan nilai dari member tersembunyi:
// counter.h
int counter_get_value(const Counter *c);
// counter.c
int counter_get_value(const Counter *c) {
return c->value;
}
setter mengubah member tersembunyi:
// counter.h
void counter_set_value(Counter *c, int new_value);
// counter.c
void counter_set_value(Counter *c, int new_value) {
c->value = new_value;
}
Perhatikan konvensi penamaan: awali nama fungsi dengan nama tipe (counter_) untuk menghindari konflik dan memperjelas API. Getter menggunakan pointer const karena tidak mengubah object.
Sekarang kode eksternal dapat berinteraksi dengan data tersembunyi secara aman:
// main.c
Counter *c = create_counter(10);
printf("%d\n", counter_get_value(c)); // 10
counter_set_value(c, 25);
printf("%d\n", counter_get_value(c)); // 25
Pola ini memberimu kendali penuh atas cara data diakses. Ini menjadi dasar yang akan kita kembangkan pada pelajaran berikutnya saat kita menambahkan logika validasi ke setter.
Tantangan
MudahMari buat module Score yang menggunakan pola pointer opak dengan fungsi getter dan setter. Kamu akan membuat pelacak skor tersembunyi yang hanya dapat diakses oleh kode eksternal melalui antarmuka publik yang kamu sediakan.
Kamu akan membuat tiga file:
score.h: Antarmuka publikmu. Deklarasikan tipeScoreopak menggunakan deklarasi awal (tanpa isi struct!). Deklarasikan fungsi-fungsi berikut:create_score: menerima bilangan bulat untuk poin awal dan mengembalikan pointer Scorefree_score: menerima pointer Score dan membebaskan memoriscore_get_points: getter yang menerimaconst Score *dan mengembalikan poin saat iniscore_set_points: setter yang menerimaScore *dan bilangan bulat, lalu memperbarui nilai poin
SCORE_H.score.c: Definisikanstruct Scoreyang sebenarnya dengan satu anggota tersembunyi:int points. Implementasikan keempat fungsi. Getter-mu harus mengembalikan nilai tersembunyi, dan setter-mu harus memperbaruinya. Ingat, getter menggunakan pointerconstkarena tidak mengubah object.main.c: Tunjukkan penggunaan module-mu dengan membuat skor, membaca nilainya, mengubahnya melalui setter, lalu membacanya lagi.
Kamu akan menerima dua input: poin awal (bilangan bulat) dan nilai poin baru (bilangan bulat) yang akan ditetapkan.
Di file utamamu, buat Score dengan poin awal, cetak nilai saat ini menggunakan getter, perbarui nilainya menggunakan setter dengan nilai baru, cetak nilai yang telah diperbarui, lalu bebaskan skor dan cetak konfirmasi.
Cetak output dengan format berikut:
Initial: {points}
Updated: {points}
FreedContohnya, dengan input 100 dan 250, output-nya adalah:
Initial: 100
Updated: 250
FreedPerhatikan bahwa main.c tidak dapat mengakses points secara langsung. Kode harus menggunakan fungsi getter dan setter. Inilah enkapsulasi: kamu mengendalikan dengan tepat cara data tersembunyi dibaca dan diubah.
Coba sendiri
#include <stdio.h>
#include "score.h"
int main() {
int initial_points, new_points;
scanf("%d", &initial_points);
scanf("%d", &new_points);
// TODO: Buat Score dengan initial_points
// TODO: Cetak nilai awal menggunakan getter
// Format: "Initial: {points}"
// TODO: Perbarui skor menggunakan setter dengan new_points
// TODO: Cetak nilai yang sudah diperbarui menggunakan getter
// Format: "Updated: {points}"
// TODO: Bebaskan memori skor dan cetak "Freed"
return 0;
}
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