Menu
Coddy logo textTech

Getter ve Setter Metotları

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 19 / 61.

Opak işaretçilerle, yapının üyeleri dışarıdaki koddan gizlenir. Ancak harici kod verilere doğrudan erişemiyorsa, onları nasıl okur veya değiştiririz? Yanıt getter ve setter işlevleridir: özel verilere kontrollü erişim sağlayan herkese açık arayüzler.

Bir getter, gizli bir üyenin değerini döndürür:

// counter.h
int counter_get_value(const Counter *c);

// counter.c
int counter_get_value(const Counter *c) {
    return c->value;
}

Bir setter gizli bir üyeyi değiştirir:

// 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;
}

Adlandırma kuralına dikkat edin: çakışmaları önlemek ve API'yi anlaşılır kılmak için işlevlere tür adıyla (counter_) ön ek verin. Getter'lar nesneyi değiştirmediği için const işaretçileri kullanır.

Artık harici kod, gizli verilerle güvenli bir şekilde etkileşim kurabilir:

// 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

Bu pattern, verilere nasıl erişileceği üzerinde tam kontrol sağlar: setter’lara doğrulama mantığı ekleyeceğimiz bir sonraki derste üzerine inşa edeceğimiz bir temel.

challenge icon

Görev

Kolay

Getter ve setter işlevleriyle opak işaretçi desenini kullanan bir Score modülü oluşturalım. Dış kodun verilere yalnızca sağladığınız genel arayüz üzerinden erişebileceği gizli bir skor takipçisi oluşturacaksınız.

Üç dosya oluşturacaksınız:

  • score.h: Genel arayüzünüz. İleri bildirim kullanarak opak bir Score türü bildirin (struct gövdesi olmadan!). Şu işlevleri bildirin:
    • create_score: başlangıç puanları için bir tamsayı alır ve bir Score işaretçisi döndürür
    • free_score: bir Score işaretçisi alır ve belleği serbest bırakır
    • score_get_points: bir const Score * alan ve mevcut puanları döndüren bir getter
    • score_set_points: bir Score * ve bir tamsayı alan, puan değerini güncelleyen bir setter
    SCORE_H sembolüyle include guard kullanın.
  • score.c: tek bir gizli üyeye sahip gerçek struct Score yapısını tanımlayın: int points. Dört işlevin tamamını uygulayın. Getter gizli değeri döndürmeli, setter ise bu değeri güncellemelidir. Getter'ların nesneyi değiştirmedikleri için const işaretçiler kullandığını unutmayın.
  • main.c: bir skor oluşturarak, değerini okuyarak, setter aracılığıyla değiştirerek ve tekrar okuyarak modülünüzü gösterin.

İki girdi alacaksınız: başlangıç puanları (bir tamsayı) ve ayarlanacak yeni puan değeri (bir tamsayı).

Ana dosyanızda başlangıç puanlarıyla bir Score oluşturun, getter'ı kullanarak mevcut değeri yazdırın, setter'ı yeni değerle kullanarak güncelleyin, güncellenmiş değeri yazdırın, ardından skoru serbest bırakın ve bir onay iletisi yazdırın.

Çıktıyı şu biçimde yazdırın:

Initial: {points}
Updated: {points}
Freed

Örneğin, 100 ve 250 girdileriyle çıktı şöyle olur:

Initial: 100
Updated: 250
Freed

main.c dosyasının points değerine doğrudan erişemediğine dikkat edin. Erişim, getter ve setter işlevleriniz üzerinden gerçekleştirilmelidir. Bu, kapsüllemenin iş başındaki hâlidir: gizli verilerin nasıl okunup değiştirilebileceğini tam olarak siz kontrol edersiniz.

Kendin dene

#include <stdio.h>
#include "score.h"

int main() {
    int initial_points, new_points;
    scanf("%d", &initial_points);
    scanf("%d", &new_points);
    
    // TODO: initial_points ile bir Score oluştur
    
    // TODO: getter kullanarak başlangıç değerini yazdır
    // Biçim: "Initial: {points}"
    
    // TODO: setter kullanarak score'u new_points ile güncelle
    
    // TODO: getter kullanarak güncellenmiş değeri yazdır
    // Biçim: "Updated: {points}"
    
    // TODO: score'u serbest bırak ve "Freed" yazdır
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi