C
Opaç türler
Opaç (opaque) türler ve bilgi gizleme öğrenirsin.
Opaç türler
Bir opaç tür (opaque type), iç yapısını kullanıcıdan gizleyen türdür. Başlık dosyasında yalnızca typedef struct Counter Counter; bildirimi olur; struct Counter'ın tanımı kaynak dosyasında gizli kalır.
Kullanıcı, Counter * işaretçisini tutar ama içeriğine erişemez. Yapıya yalnızca sağladığın fonksiyonlar (counter_new, counter_add, counter_get) üzerinden erişilir. Bu, C'de soyutlama sağlamanın temel yoludur. Kullanıcı iç yapıyı bilmediği için, sen yapıyı sonradan değiştirebilirsin; kullanıcı kodu bozulmaz. Bu desen, gerçek kütüphanelerde yaygındır; örneğin FILE türü opaktır.
Counter opak türü
Bir Counter opak türü, art arda çağrılarla değer biriktirir. Kullanıcı yalnızca üç fonksiyon görür: counter_new, counter_add ve counter_get.
Örnek kullanım: Counter *c = counter_new(); counter_add(c, 5); counter_add(c, 3); printf("%d\n", counter_get(c));. Çıktı 8 olur. Kullanıcı c->value yazamaz; çünkü struct Counter'ın tanımını göremez. Bu, güvenli bir arayüzdür: yalnızca izin verilen işlemler yapılabilir. Bu desen, C'de nesne yönelimli programlamanın karşılığıdır; veri ve onu işleyen fonksiyonlar bir arada paketlenmiştir.
Uygulama Opak Counter yaz
typedef struct Counter Counter; ile opak bildirimi yap. struct Counter { int value; }; tanımını ekle. Counter *counter_new(void), void counter_add(Counter *c, int n) ve int counter_get(Counter *c) fonksiyonlarını yaz. main içinde Counter *c = counter_new(); counter_add(c, 5); counter_add(c, 3); printf("%d\n", counter_get(c)); free(c); yaz.
Örnek çözümü göster
#include <stdio.h>
#include <stdlib.h>
typedef struct Counter Counter;
struct Counter { int value; };
Counter *counter_new(void) {
Counter *c = malloc(sizeof(Counter));
c->value = 0;
return c;
}
void counter_add(Counter *c, int n) {
c->value += n;
}
int counter_get(Counter *c) {
return c->value;
}
int main(void) {
Counter *c = counter_new();
counter_add(c, 5);
counter_add(c, 3);
printf("%d\n", counter_get(c));
free(c);
return 0;
}
Kendini test et
-
Opaç türün avantajı nedir?
- İç yapı gizli kalır, sonra değiştirilebilir
- Otomatik bellek yönetimi
- Daha az bellek kullanır
- Daha hızlı derlenir
Cevabı göster
İç yapı gizli kalır, sonra değiştirilebilir — Opaç tür iç yapıyı gizler; sonradan değiştirebilirsin ve kullanıcı kodu bozulmaz.
-
Counter fonksiyonlarını eşle
- counter_new
- Yeni sayaç
- counter_add
- Değer ekle
- counter_get
- Değer oku
- Counter *
- Opak işaretçi
-
counter_add çağrısını tamamla
counter_add(c, ____);
Cevabı göster
counter_add(c, 5);
Sıradaki ders: typedef ve enum