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.
Görev
KolayGetter 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 birScoretü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ürfree_score: bir Score işaretçisi alır ve belleği serbest bırakırscore_get_points: birconst Score *alan ve mevcut puanları döndüren bir getterscore_set_points: birScore *ve bir tamsayı alan, puan değerini güncelleyen bir setter
SCORE_Hsembolüyle include guard kullanın.score.c: tek bir gizli üyeye sahip gerçekstruct Scoreyapı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çinconstiş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
Freedmain.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;
}
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
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi