10 Aralık 2013 Salı

C 'de Handle Sistemleri

    Merhaba arkadaşlar bugünkü yazımızda handle sistemlerini sizlere anlatmaya çalışacağım. Handle sistemleri aslında görünüşte nesne yönelimli programlamayı andırmaktadır. Tabiki sınıf anlamında bahsetmekteyim herhangi kalıtım, polimorfizim gibi özellikler tabi ki C 'de mevcut değil. Sadece nesne yönelimli programlamaya benzetmeye çalışacağız.
    Gelelim handle nedir? Handle bir veri yapısına erişmek için kullanılan anahtarlara benzetilebilir. Bir yapı(struct) yada sadece bir tamsayı olabilir. Örnek olarak bir tamsayı olduğunu ve dizi indexini tuttuğunu varsayalım dizide de bizim bilgilerimiz olursa fonksiyonlar aracılığı ile müşteriye(client)'a çesitli bilgiler verebiliriz.
    Handle sistemleri 3 grupta incelenir bunlar;

 1- Handle Başlatan Fonksiyonlar : Bunlar çağıran her kullanıcı için bir adet handle oluşturur ve yapılandırırlar. Nesne yönelimlideki constructor(yapılandırıcı fonksiyon) gibi davranır ve fonksiyon handle değeri ile geri döner. Bunlar genelde create___  veya open___ şeklindedirler.

ÖR :
FILE *fopen(const char *, const char *);


2- Handle Sistemini Kullanan Fonksiyonlar : Bunlar handle'ı alarak müşteriye çeşitli atamalar ve işlemler yapmak için oluşturulurlar. Handle kullanan fonksiyonların bir parametresi Handle'ın kendisidir. Bunlar genelde set ve get fonsiyonlarıdır.

ÖR :
int fputc(int, FILE *);

3- Handle 'ı Sonlandıran Fonksiyonlar : Bu fonksiyonlar handle ile işi biten müşterinin handle'ını yok etmek için kullanılır. Bellekten temizler ve atanacak ya da set edilecek değişkenler var ise onları set eder. Nesne yönelimlideki destructor gibi davranırlar. Bunlar genelde close____ veya destroy___ şeklindedirler.

ÖR :
void fclose(FILE *);


Handle sistemleri kütüphane yazarken çok yardımcı bir araçtır. Handle sistemi ile ilgili bir örnek düşünürsek.

Örneğin bir kare ile ilgili işlemler yapan kütüphane yazacağız. Bunun için kare isimli bir handle 'a ihtiyacımız var. Biz bu handle 'ı müşteriye vererek setArea getArea vb. fonksiyonlar ile müşteriye istediği tüm değerleri verebiliriz. Bu zorlama ve basit bir örnek olduğu kanaatimdeyim daha güzel fikirler sizlerde üretebilirsiniz örneğin matrix ile ilgili olabilir bir şirkette çalışanları tutan olabilir.

// kare.h 



#ifndef    _KARE_H_

#define   _KARE_H_



typedef struct tagKare{

    //Kenarları

    int a, b, c, d;



}Kare;



int getArea(Kare *);

int setEdge(int, int, int, int, Kare *);

//buraya bircok fonk yazılabilir



#endif





// kare.c

#include "kare.h"



int getArea(Kare *k){

    return (k->a) * (k->b) * (k->c) * (k->d);

}



int setEdge(int a, int b, int c, int d, Kare *k){

    k->a = a;

    k->b = b;

    k->c = c;

    k->d = d;

}



Kısa fakat anlaşılır bir örnek olduğunu düşünüyorum sizlerde bunun gibi verdiğimiz matris örneğini yapabilirsiniz.
Bugünde yazımın sonuna gelmiş bulunmaktayım hepinize bol bilgili günler.




Hiç yorum yok:

Yorum Gönder