Jinsi ya Kutekeleza Programu ya Kielelezo katika C: Ufungashaji, Urithi, na Utofauti Imeelezwa

1. Utangulizi

Lugha ya C inapendwa na programu nyingi kwa sababu ya historia yake na udhibiti wa kiwango cha chini. Hata hivyo, C sio lugha inayoelekeza vitu. Kwa maneno mengine, tofauti na Java au C++, C yenyewe haiaiungi mkono vipengele vya kuelekeza vitu kama madarasa, urithi, au ufungashaji. Hata hivyo, inawezekana kuiga dhana za programu inayoelekeza vitu (OOP) katika C na kufikia kiwango fulani cha utendaji wa OOP. Katika makala hii, tutaeleza jinsi unaweza kutekeleza programu inayoelekeza vitu katika C, tukizingatia dhana kuu za ufungashaji, urithi, na polimorfizimu.

2. Dhana za Msingi za Programu Inayoelekeza Vitu

Programu inayoelekeza vitu (OOP) inalenga kusimamia data na mbinu zinazofanya kazi kwenye data hiyo kama kitengo kimoja. Mbinu hii inasaidia kufafanua muundo wa programu na kuboresha uwezo wa kutumia tena na uwezo wa kudumisha. Dhana kuu katika OOP ni ufungashaji, urithi, na polimorfizimu. Ingawa C haiaiungi mkono vipengele hivi moja kwa moja, kwa busara fulani, unaweza kuzitekeleza kwa namna inayofanana.

2.1 Ufungashaji

Ufungashaji unamaanisha kuunganisha data na shughuli zake (mbinu) kama kitengo kimoja na kudhibiti ufikiaji kutoka nje. Katika C, unaweza kuunganisha data kwa kutumia structs. Structs hufanya kazi sawa na madarasa kwa kuwa zinaunganisha vipande vingi vya data katika muundo mmoja.

typedef struct {
    int age;
    char name[50];
} Person;

Katika muundo huu, aina ya data Person inafunga maelezo ya umri na jina. Hii inakuruhusu kuunda na kufanya kazi kwenye mifano ya Person.

2.2 Urithi

C haina kipengele cha urithi asili, kwa hivyo huwezi kuunda uhusiano wa mzazi-mtoto kama ungefanya na madarasa. Hata hivyo, kwa kujumuisha muundo mmoja kama mwanachama wa mwingine, unaweza kufikia utaratibu sawa na urithi.

typedef struct {
    int age;
} Parent;

typedef struct {
    Parent parent;
    int studentID;
} Child;

Katika msimbo huu, muundo wa Child una muundo wa Parent, unaowakilisha aina ya urithi bandia.

2.3 Polimorfizimu

Polimorfizimu inamaanisha uwezo wa shughuli sawa kuwa na tabia tofauti kulingana na aina ya kitu. Katika C, unaweza kufikia hii kwa kutumia viashiria vya kazi. Kiashiria cha kazi ni kigeuza kinachoshikilia anwani ya kazi, kuruhusu kukuita kazi tofauti kwa nguvu.

typedef int (*OperationFunc)(int, int);

int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}

OperationFunc op = add;  // Set to add function
printf("%d", op(3, 4));  // Output: 7
op = multiply;            // Switch to multiply function
printf("%d", op(3, 4));   // Output: 12

Kama inavyoonyeshwa, unaweza kufanya shughuli tofauti kwa kutumia kiashiria cha kazi sawa.

3. Jinsi ya Kutekeleza Madarasa katika C

Ili kuleta programu inayoelekeza vitu kwa C, unahitaji kuiga dhana ya madarasa. Hii inafanywa kwa kuunganisha muundo na viashiria vya kazi ili kuunda miundo inayofanana na darasa.

3.1 Kutumia Muundo kama Madarasa

Ili kutekeleza madarasa katika C, tumia muundo kuunganisha data na mbinu pamoja. Mbinu zinafafanuliwa kama kazi na kusimamiwa ndani ya muundo kwa kutumia viashiria vya kazi.

typedef struct {
    int age;
    void (*setAge)(struct Person*, int);
    int (*getAge)(struct Person*);
} Person;

void setAge(struct Person* p, int age) {
    p->age = age;
}

int getAge(struct Person* p) {
    return p->age;
}

Person person = {0, setAge, getAge};
person.setAge(&person, 25);
printf("Age: %d", person.getAge(&person));  // Output: 25

Katika mfano huu, muundo wa Person una mbinu za setAge na getAge, zinazowezesha tabia inayofanana na darasa.

4. Kutekeleza Mbinu

Ili kuzalisha “mbinu,” kipengele muhimu cha OOP, katika C, tumia viashiria vya kazi. Hii inakuruhusu kufafanua mbinu kama wanachama wa muundo.

typedef struct {
    int age;
    void (*setAge)(struct Person*, int);
} Person;

void setAge(struct Person* p, int age) {
    p->age = age;
}

5. Muhtasari na Maombi

Ingawa unaweza kutekeleza vipengele vya uelekeo wa vitu katika C, kumbuka kwamba lugha yenyewe haikuunga mkono OOP asili. Utahitaji ubunifu, ukitumia kikamilifu structs, viashiria vya kazi, na usimamizi wa kumbukumbu ili kuingiza dhana za darasa na urithi kama.

侍エンジニア塾