Encapsulation kwenye Dart:

Katika dart encapsulation inamaanisha kuficha data kwenye library, ili kuzizuia zisituike kusoko hitajika. Katika dart kila faili la .dart ni library. Library ni mkusanyika wa function na class.

 

Encapsulatio  inaweza kufanywa kwa kutumia njia mbili ambazo ni 

  1. Kuifanya class ni private kwa kutumia underscode (_)
  2. Kwa kutumia methods za getter na setter

Getter hii hutumika katika kuzifikia (access) value za property ambayo ni private na setter hutumika ku update values za property ambayo ni private.

 

Ili kufanya property iwe private tutatumia underscoce, mfano _jina

class Gari {

 // Private properties

 int? _namba;

 String? _jina;

}

 

Baada ya kutengeneza hizo private properties sasa ni wakati wa utengeneza method kwa ajili ya kuzifikia (access) hizo properties. Method hizo zinaitwa getter metods.

int pata_namba() {

 return _namba!;

}

String pata_jina() {

 return _jina!;

}

 

Baada ya kutengeneza getter method hatu wainayofuata ni kutengeneza method ambayo itatumi kwa ajili ya ku update taarifa za proerties. Methods hizo zinaitwa setter

void wka_namba(int id) {

 this._namba = _namba;

}

void weka_jina(String jina) {

 this._jina = jina;

}

 

Baada ya hapo hatuwa inayofuata ni kutengeneza object na kuweza ku update property kwa kuweka value. 

 

class Gari {

 // Private properties

 int? _namba;

 String? _jina;

// Getter method 

 int pata_namba() {

   return _namba!;

 }

 String pata_jina() {

   return _jina!;

 }

// Setter method

 void weka_namba(int namba) {

   this._namba = namba;

 }

 void weka_jina(String jina) {

   this._jina = jina;

 }

}

void main() {

 Gari toyota = new Gari();

 toyota.weka_jina("Toyota Avalon");

 toyota.weka_namba(72723);

 print(" Tunauza gari aina ya ${toyota.pata_jina()}. Yenye namba ya usajili ${toyota.pata_namba()}");

}

 

 

Wacha nikurudishe nyuma kidogo. Katika Dart tunaposema private property tunazungumzia kuwa ni private kwenye library na sio kwneye class. Ukitumia underscore unaifanya property n private kwenye hiyo library lakini bado itaweza kutumika kwenye hiyo class. Angalia mfano hapo chini:-

class Employee {

 // Private property

 var _name;

 

 // Getter method to access private property _name

 String getName() {

   return _name;

 }

 

 // Setter method to update private property _name

 void setName(String name) {

   this._name = name;

 }

}

 

void main() {

 var employee = Employee();

 employee._name = "John"; // It is working, but why?

 print(employee.getName());

}

 Katika mfano huo umeona kuwa umeweza ku update property bila hata ya kutumia setter ni kwa sababu name ni private property kwenye library na sio kwneye class. Kutatua tatizo hili tutatumia final . Hii itaifanya property isiweze ku badilishwa value yake.

 

class Student {

 final _schoolname = "ABC School";

 

 String getSchoolName() {

   return _schoolname;

 }

}

 

void main() {

 var student = Student();

 print(student.getSchoolName());

}

 

Katika mfano huu kama utafanya hivi student._schoolname = "XYZ School"; utapata error kwa sababu property imekuwa ni private hadi kwenye class. Huwezi kui update tena. Rejea somo la variable kuhusu matumizi ya final.


 

Kwa nini encapsulation ni muhimu:

Baada ya kupata utangulizi juu ya encapsulation sasa hapa nakwenda kukupa baadhi ya faida za kuitumia:-

  1. Hutumika kuficha data zisitumike nje ya library ama class hsika
  2. Inakuwezesha kutest data kabla ya kuzitumia
  3. Inawezesha kubadili matumizi ya class bilaya kuathiri class nyingine
  4. Husaidia katika usalaa wa progra.


 

Mwisho:

Katika somo linalofuata tutakwend akujifunza zaidi kuhusu seter na getter.