CodeBlanks Logo Icon CodeBlanks

Opaç türler

  • C kursu
  • Orta seviye
  • Ders 109/116
  • 5 dk

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.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>

// Counter türünü opak olarak bildir
// counter_new, counter_add, counter_get fonksiyonlarını yaz
// main'de sayacı kullan ve yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#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;
}

Beklenen çıktı

8

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Opaç türün avantajı nedir?

  • İç yapı gizli kalır, sonra değiştirilebilir Doğru cevap
  • Otomatik bellek yönetimi
  • Daha az bellek kullanır
  • Daha hızlı derlenir

Açıklama: Opaç tür iç yapıyı gizler; sonradan değiştirebilirsin ve kullanıcı kodu bozulmaz.

2 Counter fonksiyonlarını eşle

Kavram Anlamı
counter_new Yeni sayaç
counter_add Değer ekle
counter_get Değer oku
Counter * Opak işaretçi

3 counter_add çağrısını tamamla

Soru
counter_add(c, ____);
Cevap
counter_add(c, 5);

Açıklama: counter_add(c, 5); sayaca 5 ekler.

Orta seviye bölümündeki tüm dersler