Home / ພື້ນຖານ Java / Encapsulation
ໃນການຂຽນໂປຣແກຣມເຊີງວັດຖຸ encapsulation ຄືການປົກປິດ ຫລື ຄວບຄຸມການເຂົ້າເຖິງຂໍ້ມູນຂອງອອບເຈັກຈາກພາຍນອກ ເຊິ່ງວິທີການທີ່ໃຊ້ໃນການຄວບຄຸມຄືການເຮັດວຽກງານຜ່ານເມຕອດ ເພື່ອດຳເນີນການກັບຂໍ້ມູນນັ້ນ ໃນພາສາ Java ແລະພາສາທີ່ສະໜັບສະໜູນການຂຽນໂປຣແກຣມເຊີງວັດຖຸພາສາອື່ນໆ ນັ້ນສາມາດໃຊ້ຄຸນສົມບັດນີ້ໃນການປົກປິດສ່ວນປະກອບພາຍໃນຄາດໄດ້
ມັນເປັນຄຳເວົ້າແບບນາມະທຳທີ່ຈະອະທິບາຍຄວາມຫມາຍຂອງ encapsulation ໄດ້ຢ່າງຊັດເຈນ ຍົກຕົວຢ່າງເຊັ່ນ ເຮົາສັ່ງອາຫານ ແລະ ໃນອີກບໍ່ຈັກນາທີຕໍ່ມາເຮົາໄດ້ຮັບອາຫານທີ່ສັງໄປ ເຮົາບໍ່ຈຳເປັນຕ້ອງຮູ້ຂັ້ນຕອນໃນການທີ່ຈະໄດ້ອາຫານມາ ເຊັ່ນ ເຣີ່ມຕົ້ນດ້ວຍພນັກງານຮັບລາຍການອາຫານຈາກເຮົາ ຕໍ່ໄປຈັດກຽມສ່ວນປະກອບ ແລະ ອຸປະກອນໃນການເຮັດອາຫານ ລົງມືເລີ່ມຕົ້ນເຮັດອາຫານ ແລະ ນໍາມາບໍລິການໃຫ້ກັບເຮົາ
ນິ້ເປັນສິ່ງທີ່ເກິດຂື້ນທີ່ເຮົາບໍ່ຮູ້ ແລະ ມັນບໍ່ໄດ້ຈຳເປັນທີ່ຈະຕ້ອງຮູ້ ແຕ່ມັນກ່ຽວກັບວ່າເຮົາຮູ້ວ່າເຮົາຕ້ອງການຫຍັງ ແລະ ຕ້ອງເຮັດຢ່າງໃດເພື່ອໃຫ້ໄດ້ສິ່ງນັ້ນ ສຳລັບ encapsulation ນັ້ນເປັນເຊັ່ນດຽວກັນ ເຮົາຮຽກໃຊ້ງານເມຕອດຂອງຄາດເພື່ອວັຕຸປະສົງບາງຢ່າງ ເຮົາພຽງແຕ່ຮູ້ວິທີການຮຽກໃຊ້ມັນ ແລະ ຜົນລັບທີ່ໄດ້ແມ່ນຫຍັງເທົ່ານັ້ນເອງ
// TestTimer.java
public class TestTimer {
public static void main (String[] args) {
Timer time = new Timer();
time.setTime(9, 30, 55);
while (true) {
time.increaseTime();
System.out.println(time.getTime());
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println(ex);
}
}
}
}
class Timer {
public int timeStamp = 0;
private int second = 0;
private int minute = 0;
private int hour = 0;
public void setTime(int h, int m, int s) {
second = s; minute = m; hour = h;
timeStamp = (hour * 3600) + (minute * 60) + second;
}
public void increaseTime() {
timeStamp = (timeStamp + 1) % 86400;
updateMembers ();
}
private void updateMembers () {
second = timeStamp % 60;
minute = (timeStamp / 60) % 60;
hour = (timeStamp / 3600) % 24;
}
public String getTime() {
return String.format("%02d:", hour) +
String.format("%02d:", minute) +
String.format("%02d", second);
}
}
ໃນຕົວຢ່າງເປັນໂປຣແກຣມສະແດງໂມງທີຄືກັບໂມງໃນຄອມພິວເຕີຂອງເຮົາ ເຮົາໄດ້ສ້າງຄາດ Timer ເຊິ່ງເປັນຄາດຂອງໂມງ ແລະ ພາຍໃນຈະມີສະມາຊິກຕົວແປຣທີ່ເປັນ private ໄດ້ແກ່ second minute hour ແລະ ສະມາຊິກເມຕອດ updateMembers () ນັ້ນໝາຍຄວາມວ່າຂໍ້ມູນເຫຼົ່ານີ້ຖືກຫໍ່ຫຸ້ມ ເຮົາບໍ່ສາມາດເຂົ້າເຖິງມັນໄດ້ໂດຍກົງ ທາງດຽວທີ່ເຮົາສາມາດເຮັດໄດ້ຄືເຂົ້າເຖິງຂໍ້ມູນໂດຍເມຕອດ ຫລື ຕົວແປຣທີ່ເປັນ public ໃນຄຳສັ່ງ
Timer time = new Timer();
ໝາຍເຫດ: ເປັນການເພີ່ມເວລາຂຶ້ນໄປ 1 ວິນາທີ ເຮົາຮູ້ວ່າເມື່ອເມຕອດນີ້ເຮັດວຽກເວລາຈະເພີ່ມຂຶ້ນໄປ 1 ວິນາທີ ແຕ່ພາຍໃນການເຮັດວຽກງານຂອງມັນວ່າເປັນແບບໃດນັ້ນ ເຮົາບໍ່ໄດ້ຮູ້
System.out.println(time.getTime());
ເຊັ່ນດຽວກັນ ເຮົາຮູ້ວ່າເມຕອດນີ້ຈະສົ່ງຄ່າເວລາກັບມາໃຫ້ເຮົາ ແລະ ເຮົາບໍ່ຮູ້ວ່າມັນສົ່ງຂໍ້ມູນມາແບບໃດ ຫລື ປະເພດຂໍ້ມູນທີ່ເກັບນັ້ນເປັນແບບໃດ ສິ່ງເຫລົ້ານີ້ເອງເຮົາເອີ້ນວ່າ Encapsulation
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println(ex);
}
ຄຳສັ່ງນີ້ເປັນການຢຸດໂປຣແກຣມເປັນເວລາ 1 ວິນາທີ ກ່ອນທີ່ຈະເຮັດເທື່ອຕໍ່ໄປ ເພື່ອໃຫ້ໂປຣແກຣມສົມຈິງຫຼາຍຂຶ້ນ ສຳລັບເລື່ອງ exception ເຮົາຈະໄດ້ຮຽນພາຍຫຼັງ
09:30:56
09:30:57
09:30:58
09:30:59
09:31:00
09:31:01
09:31:02
09:31:03
09:31:04
09:31:05
.
.
.
ເປັນຜົນລັບຂອງໂປຣແກຣມ ມັນຈະນັບເວລາ ແລະ ສະແດງເວລາໄປເລື້ອຍໆ ເພາະເຮົາໃຫ້ infinity loop ເຮົາຕ້ອງອອກຈາກໂປຣແກຣມເພື່ອຈົບມັນ ໃນຄວາມຈິງ encapsulation ນັ້ນມີຢູ່ອ້ອມຕົວ ຫລື ເຮົາໃຊ້ມັນມາແລ້ວ ເຊັ່ນ ເມຕອດ println() ເຊິ່ງມີເບື້ອງຫຼັງການເຮັດວຽກງານທີ່ຈະຕ້ອງມີການຕິດຕໍ່ກັບຈໍພາບ ແລະ ອື່ນໆ ອີກຫລວງຫຼາຍ ແຕ່ເຮົາໃຊ້ມັນແຕ່ພຽງຄຳສັ່ງດຽວ ແລະ ໄດ້ຜົນລັບອອກມາ ຫລື ແມ່ນແຕ່ຕອນທີ່ເຮົາຂັບລົດແລ້ວປ່ຽນເກຍ ເຊິ່ງມີກົນໄກລຕ່າງໆ ທີ່ເກິດຂື້ນຫຼາຍກວ່າທີ່ເຮົາເຫັນເທິງໜ້າປັດຂອງລົດ ແຕ່ມັນຖືກປົກປິດແຕ່ເຮົາບໍ່ຮູ້ເທົ່ານັ້ນເອງ ມີພຽງແຕ່ຄວບຄຸນ ແລະ ນຳໃຊ້ມັນເທົ່ານັ້ນເອງ