เพื่อสรุปเนื้อหาก่อนหน้านี้ object หมายถึงสิ่งใดสิ่งหนึ่ง และ class หมายถึงประเภทของอ็อบเจ็กต์ ออบเจ็กต์สามารถมีสถานะและการดำเนินการ กล่าวคือ สมาชิกข้อมูลและวิธีการ
จนถึงขณะนี้สมาชิกข้อมูลและวิธีการได้เปิดให้ผู้ใช้ทั้งภายในและภายนอก ภายในวัตถุ เราใช้สิ่งนี้เพื่อเรียกสมาชิกข้อมูลและวิธีการของวัตถุ ภายนอกวัตถุ เช่น เมื่อเราเรียกวัตถุในคลาสอื่น เราสามารถใช้สมาชิก object.data และ object.method() เพื่อเรียกสมาชิกข้อมูลและวิธีการของวัตถุ
เราจะสรุปสมาชิกของออบเจ็กต์ (สมาชิกประกอบด้วยสมาชิกข้อมูลและวิธีการ) ดังนั้นจึงอนุญาตให้เฉพาะสมาชิกบางคนเท่านั้นที่ถูกเรียกจากภายนอก การใช้การห่อหุ้มทำให้เราสามารถปรับปรุงความสะดวกในการใช้งานและความปลอดภัยของออบเจ็กต์ได้
การห่อหุ้มและส่วนต่อประสาน
การห่อหุ้มเป็นคำทั่วไปสำหรับคอมพิวเตอร์ ซึ่งหมายถึงการรักษาอินเทอร์เฟซภายนอกที่จำกัด และซ่อนรายละเอียดการใช้งานเฉพาะ ตัวอย่างเช่น ในสถาปัตยกรรม Linux คุณจะเห็นว่าระบบปฏิบัติการ Linux สรุปรายละเอียดเฉพาะของฮาร์ดแวร์พื้นฐาน โดยคงไว้เพียงอินเทอร์เฟซการเรียกของระบบ ผู้ใช้อยู่นอกแพ็คเกจและสามารถดำเนินการที่จำเป็นผ่านอินเทอร์เฟซเท่านั้น
การห่อหุ้มเป็นเรื่องธรรมดามากในชีวิต ตัวอย่างเช่น นี่คือไฟฉายแบบชาร์จไฟได้:
แม้จะไม่ได้อ่านคู่มือ แต่ผู้ใช้สามารถเดาการทำงานของไฟฉายนี้ได้: การสลับและการชาร์จ ไฟฉายนี้ใช้เปลือกพลาสติกเพื่อซ่อนรายละเอียดภายในที่ผู้ใช้ไม่จำเป็นต้องสัมผัส เหลือเพียง 2 อินเทอร์เฟซคือสวิตช์และปลั๊กไฟ การใช้อินเทอร์เฟซทั้งสองนี้ ผู้ใช้ก็เพียงพอแล้วที่จะใช้ฟังก์ชันที่ผลิตภัณฑ์ได้รับการออกแบบมาให้บรรลุผล หากผู้ใช้เปิดเผยรายละเอียดทั้งหมดพร้อมกัน ผู้ใช้จะรู้สึกว่าผลิตภัณฑ์ล้นหลาม (เช่น รีโมทคอนโทรลแบบไม่มีฝาครอบด้านล่าง) ดังนั้นการห่อหุ้มจึงช่วยเพิ่มความสะดวกในการใช้งานผลิตภัณฑ์
หากผลิตภัณฑ์ไม่ได้บรรจุหีบห่อ ผู้ใช้จะต้องเปิดเผยรายละเอียดหลายอย่างของไฟฉายหรือรีโมทคอนโทรล เช่น แบตเตอรี่ วงจร ยางปิดผนึก ฯลฯ แม้ว่าสิ่งนี้จะทำให้ผู้ใช้สามารถใช้งานผลิตภัณฑ์ได้อย่างอิสระมากขึ้น เช่น การคายประจุแบตเตอรี่โดยตรง การถอดไฟ LED ออก เป็นต้น อย่างไรก็ตาม ผู้ใช้มักจะมีความเสี่ยงที่จะทำให้ผลิตภัณฑ์เสียหายมากขึ้น ดังนั้นการห่อหุ้มจึงช่วยเพิ่มความปลอดภัยของผลิตภัณฑ์
ผลิตภัณฑ์ซอฟต์แวร์ Java เหมือนกับผลิตภัณฑ์ในชีวิตประจำวัน วัตถุสามารถมีสมาชิกจำนวนมาก (สมาชิกข้อมูลและวิธีการ) อยู่ข้างใน สมาชิกข้อมูลและวิธีการบางอย่างใช้ภายในเท่านั้น ในเวลานี้เราหวังว่าจะมีกลไกในการ "แพ็ค" วัตถุเพื่อห่อหุ้มวัตถุ ด้วยวิธีนี้ ผู้ใช้สามารถเรียนรู้และใช้อินเทอร์เฟซภายนอกได้ง่ายขึ้น โดยไม่ต้องติดต่อกับสมาชิกภายใน
การห่อหุ้มสมาชิกของวัตถุ
Java ใช้คำหลักสามคำเพื่อควบคุมการมองเห็นภายนอกของสมาชิกของออบเจ็กต์: สาธารณะ ส่วนตัว ได้รับการป้องกัน
1.public: สมาชิกสามารถมองเห็นได้จากภายนอก กล่าวคือ สมาชิกนั้นเป็นส่วนหนึ่งของอินเทอร์เฟซ
2.ส่วนตัว: สมาชิกนี้ไม่สามารถมองเห็นได้จากภายนอกและสามารถใช้ได้เฉพาะภายในเท่านั้นและไม่สามารถเข้าถึงได้จากภายนอก
(การคุ้มครองเกี่ยวข้องกับแนวคิดเรื่องการสืบทอดซึ่งจะกล่าวถึงในภายหลัง)
ก่อนอื่นมาสรุปคลาส Human ที่กำหนดไว้ก่อนหน้านี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
การทดสอบในชั้นเรียนสาธารณะ
-
โมฆะสาธารณะคง main (String [] args)
-
Human aPerson = มนุษย์ใหม่ (160);
System.out.println(aPerson.getHeight());
aPerson.growHeight(170);
System.out.println(aPerson.getHeight());
aPerson.repeatBreath(100);
-
-
คลาสมนุษย์
-
-
* ตัวสร้าง
-
มนุษย์สาธารณะ(int h)
-
นี่.ความสูง = h;
System.out.println("ฉันเกิด");
-
-
*อุปกรณ์เสริม
-
สาธารณะ int getHeight()
-
กลับ this.height;
-
-
* มิวเทเตอร์
-
โมฆะสาธารณะ growHeight (int h)
-
this.height = this.height + h;
-
-
* ห่อหุ้มสำหรับใช้ภายใน
-
ลมหายใจเป็นโมฆะส่วนตัว ()
-
System.out.println("hu...hu...");
-
-
* โทรลมหายใจ()
-
โมฆะสาธารณะทำซ้ำ Breath (ตัวแทน int)
-
ฉัน;
สำหรับ(i = 0; i <ตัวแทน; i++) {
นี้.ลมหายใจ();
-
-
ความสูง int ส่วนตัว // ห่อหุ้มสำหรับใช้ภายใน
-
วิธีการภายในไม่ได้รับผลกระทบจากการห่อหุ้ม วิธีการภายในของมนุษย์สามารถเรียกสมาชิกคนใดก็ได้ แม้กระทั่งส่วนสูงและ Breath() ที่ตั้งไว้เป็นส่วนตัว
วิธีการภายนอกสามารถโทรหาสมาชิกสาธารณะเท่านั้น เมื่อเราอยู่นอก Human เช่นใน Test เราจะเรียกได้เฉพาะสมาชิกที่ระบุว่าเป็นสาธารณะใน Human เท่านั้น แต่ไม่สามารถเรียกสมาชิกที่ระบุว่าเป็นส่วนตัวได้
ผ่านการห่อหุ้ม คลาส Human จะคงไว้เพียงวิธีการต่อไปนี้เป็นส่วนต่อประสาน:
1.getHeight()
2.เติบโตความสูง()
3.repBreath()
เราสามารถเป็นตัวแทนของคลาส Human และอินเทอร์เฟซได้ดังนี้:
"รีโมทคอนโทรลพร้อมเคส"
หากเราบังคับความสูงของการโทรจาก main:
คัดลอกรหัสรหัสดังต่อไปนี้:
System.out.println(aPerson.height);
จะมีข้อความแสดงข้อผิดพลาดดังต่อไปนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
Test.java:6: ความสูงมีการเข้าถึงแบบส่วนตัวใน Human
System.out.println(aPerson.height);
-
1 ข้อผิดพลาด
บี๊บ คุณถูกไฟฟ้าช็อต! สมาชิกที่ประกาศเป็นส่วนตัวไม่สามารถถูกเรียกจากภายนอกได้
ในข้อกำหนดปกติของ Java สมาชิกข้อมูลที่แสดงสถานะ (เช่น ความสูง) จะถูกตั้งค่าเป็นแบบส่วนตัว การแก้ไขสมาชิกข้อมูลจะต้องดำเนินการผ่านวิธีการที่ได้รับจากอินเทอร์เฟซ (เช่น getHeight() และ growHeight()) ข้อกำหนดนี้มีบทบาทในการปกป้องข้อมูล ผู้ใช้ไม่สามารถแก้ไขข้อมูลได้โดยตรงและต้องใช้วิธีการที่เกี่ยวข้องในการอ่านและเขียนข้อมูล ผู้ออกแบบคลาสสามารถเพิ่มข้อกำหนดการใช้ข้อมูลให้กับวิธีอินเทอร์เฟซได้
การห่อหุ้มคลาส
ในไฟล์ .java มีคลาสเดียวเท่านั้นที่มีคีย์เวิร์ดสาธารณะ เช่น คลาส Test ด้านบน ดังนั้นจากคลาสอื่นเราสามารถเรียกคลาสนี้ได้โดยตรง ชนชั้นมนุษย์ไม่มีคำสำคัญ ก่อนหน้านี้ สมาชิกของออบเจ็กต์ของเราไม่มีคำหลัก การขาดคีย์เวิร์ดนี้ยังแสดงถึงการมองเห็นประเภทหนึ่งด้วย ซึ่งฉันจะอธิบายเชิงลึกเมื่ออธิบายแพ็คเกจ
ฝึกห่อหุ้มคลาสคบเพลิงเพื่อเป็นตัวแทนของไฟฉาย อินเทอร์เฟซมีการสลับและชาร์จ สมาชิกภายในมีอำนาจ
สรุป
การห่อหุ้ม, อินเทอร์เฟซ
ส่วนตัวสาธารณะ