Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 tipe Score opak menggunakan deklarasi awal (tanpa isi struct!). Deklarasikan fungsi-fungsi berikut:
    • create_score: menerima bilangan bulat untuk poin awal dan mengembalikan pointer Score
    • free_score: menerima pointer Score dan membebaskan memori
    • score_get_points: getter yang menerima const Score * dan mengembalikan poin saat ini
    • score_set_points: setter yang menerima Score * dan bilangan bulat, lalu memperbarui nilai poin
    Gunakan include guard dengan simbol SCORE_H.
  • score.c: Definisikan struct Score yang sebenarnya dengan satu anggota tersembunyi: int points. Implementasikan keempat fungsi. Getter-mu harus mengembalikan nilai tersembunyi, dan setter-mu harus memperbaruinya. Ingat, getter menggunakan pointer const karena 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}
Freed

Contohnya, dengan input 100 dan 250, output-nya adalah:

Initial: 100
Updated: 250
Freed

Perhatikan 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online