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.
Görev
KolayBir 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 birint valueüyesine sahipCounterstruct 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) vecounter_get(bir Counter işaretçisi alır ve mevcut değerini döndürür).COUNTER_Hsembolü 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: 8Kopya 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;
}
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
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şisi