Menu
Coddy logo textTech

Nesne Olarak Struct'lar

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 6 / 61.

Nesne yönelimli dillerde bir nesne (object), verileri (durum) bu veriler üzerinde işlem yapan fonksiyonlarla (metotlar) bir araya getiren bir varlıktır. C'nin yerleşik nesneleri yoktur, ancak aynı kavramı structs ve fonksiyonlar kullanarak gerçekleştirebiliriz.

Bir struct'ı bir nesnenin "veri" kısmı olarak düşünün. Durumu, yani nesnenin o an ne olduğunu tanımlayan değerleri tutar:

typedef struct {
    int value;
} Counter;

Bu Counter struct'ı, tek bir durum parçasına sahip bir varlığı temsil eder: güncel değeri. Ona davranış kazandırmak için, struct'ı bir parametre olarak kabul eden fonksiyonlar yazarız:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Bu fonksiyonlar metotlar gibi davranır; özellikle Counter verileri üzerinde işlem yaparlar. Yapıyı fonksiyonlara geçirerek, counter.increment() çağırdığınızda diğer dillerin otomatik olarak yaptığı şeyi simüle ediyoruz.

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Yazdırır: 1
    return 0;
}

typename_action (counter_increment gibi) isimlendirme kuralı, kodunuzu düzenlemenize yardımcı olur ve bir fonksiyonun hangi struct'a ait olduğunu netleştirir. Bu desen, C'de nesne yönelimli programlamanın temelidir.

challenge icon

Görev

Kolay

Bir struct yapısını davranışa sahip bir nesne gibi ele alan basit bir Counter modülü oluşturalım. Verileri, onlar üzerinde işlem yapan fonksiyonlarla paketleme pratiği yapmak için kodunuzu üç dosya halinde düzenleyeceksiniz.

Üç dosya oluşturacaksınız:

  • counter.h: Tek bir int value üyesine sahip Counter struct yapısını tanımlayan başlık dosyanız. Ayrıca sayaç için "metot" görevi gören iki fonksiyon tanımlayın: counter_increment (bir Counter işaretçisi alır ve değerini 1 artırır) ve counter_get (bir Counter işaretçisi alır ve mevcut değerini döndürür). COUNTER_H sembolü ile include guard kullanın.
  • counter.c: Her iki fonksiyonu da uygulayan kaynak dosyanız. Başlık dosyanızı dahil etmeyi unutmayın.
  • main.c: Bir Counter oluşturan, üzerinde işlemler gerçekleştiren ve sonuçları görüntüleyen ana dosyanız.

İki tam sayı girdisi alacaksınız: sayacınız için başlangıç değeri ve sayacı artırma sayısı.

Ana dosyanızda, bir Counter yapısını başlangıç değeriyle başlatın, ardından belirtilen sayıda counter_increment fonksiyonunu çağırın. Son olarak, nihai değeri almak ve yazdırmak için counter_get fonksiyonunu kullanın.

Sonucu şu formatta yazdırın:

Final value: {result}

Örneğin, 5 başlangıç değeri ve 3 artırma işlemi ile çıktı şöyle olacaktır:

Final value: 8

Kopya kağıdı

C dilinde, yapıları (veri) bu yapılar üzerinde işlem yapan fonksiyonlarla (davranış) birleştirerek nesne yönelimli programlamayı simüle edebiliriz.

Durumu tutmak için bir yapı (struct) tanımlayın:

typedef struct {
    int value;
} Counter;

Yapıyı bir parametre olarak kabul ederek "metot" gibi davranan fonksiyonlar oluşturun:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Yapıyı ve fonksiyonları birlikte kullanın:

Counter my_counter = {0};
counter_increment(&my_counter);
printf("%d\n", counter_get(&my_counter)); // Yazdırır: 1

typename_action (örneğin, counter_increment) isimlendirme kuralı, kodu düzenlemeye yardımcı olur ve bir fonksiyonun hangi yapı üzerinde işlem yaptığını netleştirir.

Kendin dene

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

int main() {
    // Girdiyi oku
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Bir Counter oluşturun ve onu starting_value ile başlatın
    
    // TODO: counter_increment fonksiyonunu belirtilen sayıda çağırın
    
    // TODO: Son değeri almak için counter_get kullanın ve yazdırın
    // Yazdırma formatı: "Final value: {result}"
    
    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.

Object Oriented Programming bölümündeki tüm dersler