𝗔𝗯𝘀𝘁𝗿𝗮𝗰𝘁𝗶𝗼𝗻 𝗶𝗻 𝗢𝗢𝗣: 𝗞𝘂𝗳𝗶𝗰𝗵𝗮 𝗨𝘁𝗮𝘁𝗮
Unaendesha gari kwa kukanyaga pedali na kuzungusha usukani. Huhitaji kuelewa mfumo wa kuingiza mafuta (fuel injection) au mwendo wa pistoni. Gari huficha maelezo haya kwako. Unatumia tu kiolesura (interface) rahisi.
Programu (Software) hufanya kazi kwa njia hiyo hiyo.
Fikiria kuhusu kutuma barua pepe. Kodi yako huenda inafanana na hii:
emailService.send(email);
Inaonekana rahisi. Nyuma ya pazia, mfumo hufanya kazi nyingi:
- Huhakiki anwani.
- Huunganisha na seva ya SMTP.
- Huthibitisha utambulisho wa mtumiaji.
- Huandaa ujumbe.
- Hushughulikia majaribio ya marudio.
- Huandikisha makosa.
Huhitaji kuona hatua hizi. Unajali tu kwamba barua pepe imetumwa.
Ukionyesha kila hatua, unaleta matatizo. Wazia ikiwa kila mwanatengeneza (developer) angekuwa na lazima aitie wito (call) kwa mkono:
connect()authenticate()buildMessage()sendMessage()disconnect()
Hii hufanya kodi yako iwe dhaifu. Ukibadilisha mtoa huduma wako wa barua pepe, lazima ubadilishe kila sehemu kwenye programu yako. Kodi yako inakuwa imefungamana sana na utekelezaji (implementation).
Abstraction hutatua hili.
Abstraction huonyesha kile ambacho kitu (object) hufanya. Huficha jinsi kinavyokifanya. Unamwonyesha mtumiaji tu kile anachohitaji.
Mtumiaji huingiliana na kiolesura (interface) thabiti. Hawajali kuhusu mantiki yako ya uthibitisho (authentication logic) au mkakati wako wa majaribio ya marudio. Maelezo hayo yanabaki yaliyofichwa.
Watu wengi huchanganya Abstraction na Encapsulation. Hii hapa ndiyo tofauti:
Encapsulation huuliza: Nani anaweza kubadilisha hali (state) ya kitu hiki? Inalinda data.
Abstraction huuliza: Ni maelezo gani mtumiaji anapaswa kuona? Huficha utata.
Zinafanya kazi pamoja ili kujenga mifumo bora zaidi.
Kinachofuata, tutajadili Inheritance. Tutatazama jinsi ya kushughulikia tabia zinazoshirikiwa bila kuandika kodi ile ile mara mbili.