การซ่อนข้อมูลใน C ++ คืออะไร คำอธิบายนามธรรมและการห่อหุ้ม

เผยแพร่แล้ว: 2021-05-24

สารบัญ

บทนำสู่การซ่อนข้อมูล

ข้อมูลเป็นองค์ประกอบที่ละเอียดอ่อนและผันผวนมากที่สุดของโปรแกรม ซึ่งหากจัดการ อาจส่งผลให้เกิดผลลัพธ์ที่ไม่ถูกต้องและเป็นอันตรายต่อความสมบูรณ์ของข้อมูล นี่คือจุดที่การซ่อนข้อมูลพิสูจน์ให้เห็นถึงความจำเป็น ในศัพท์แสงทางเทคนิค การซ่อนข้อมูลเรียกอีกอย่างว่าการซ่อนข้อมูล เป็นกลไกการเขียนโปรแกรมเชิงวัตถุโดยธรรมชาติ (OOP) เพื่อซ่อนรายละเอียดของวัตถุภายในจากผู้ใช้ปลายทาง

วัตถุประสงค์พื้นฐานของการซ่อนข้อมูลคือการปกปิดข้อมูลภายในคลาสจากการเข้าถึงโดยไม่ได้รับอนุญาต และหลีกเลี่ยงการเจาะข้อมูลที่ไม่จำเป็นจากภายนอกคลาส การซ่อนข้อมูลรับประกันการเข้าถึงข้อมูลที่มีข้อจำกัด เพื่อให้มั่นใจในความสมบูรณ์ของวัตถุ และป้องกันการเปลี่ยนแปลงโปรแกรมที่เป็นปัญหาโดยไม่ได้ตั้งใจหรือตั้งใจ

พูดง่ายๆ ก็คือ การซ่อนข้อมูลใช้บางส่วนของรหัสโปรแกรมและคัดกรองจากสมาชิกของอ็อบเจ็กต์ หากสมาชิกของอ็อบเจ็กต์พยายามเข้าถึงข้อมูลที่ซ่อน โปรแกรมจะส่งคืนข้อผิดพลาด นี่เป็นกลไกเตือนที่นำมาใช้เพื่อให้แน่ใจว่าโปรแกรมเมอร์ละเว้นจากการเชื่อมต่อกับข้อมูลที่ผิดพลาดที่ถูกซ่อนไว้ มักเป็นส่วนประกอบภายในที่ผู้ใช้ไม่จำเป็นต้องซ่อนไว้ล่วงหน้า

การซ่อนข้อมูล การแยกข้อมูล และการห่อหุ้มข้อมูล

การซ่อนข้อมูลใน C ++ มีความสัมพันธ์อย่างใกล้ชิดกับคุณสมบัติ OOP อื่นอีกสองรายการ - นามธรรมและการห่อหุ้ม

นามธรรมข้อมูล

การแยกข้อมูลเป็นกลไกในการแสดงเฉพาะส่วนต่อประสานโปรแกรมที่เกี่ยวข้องแก่ผู้ใช้ปลายทาง และซ่อนรายละเอียดการใช้งานที่ซับซ้อนและซับซ้อนยิ่งขึ้น ลองพิจารณาตัวอย่างในชีวิตจริงเพื่อความเข้าใจที่ดีขึ้น พิจารณาโทรทัศน์ของคุณ คุณสามารถเปิดและปิดโทรทัศน์ เปลี่ยนช่อง ปรับระดับเสียง และเพิ่มส่วนประกอบภายนอก เช่น VCR เครื่องเล่นดีวีดี และลำโพง แต่คุณไม่รู้กลไกภายในของโทรทัศน์

คุณลืมวิธีการรับสัญญาณ แปล และในที่สุดก็แสดงผลลัพธ์ออกมา ดังนั้น โทรทัศน์จึงเป็นตัวอย่างที่ชาญฉลาดของการแยกระหว่างการดำเนินการภายในและอิทธิพลภายนอก การนำข้อมูลไปใช้ในคลาสจะได้รับการปกป้องจากข้อผิดพลาดโดยไม่ได้ตั้งใจและพัฒนาเพื่อตอบสนองต่อข้อกำหนดที่เปลี่ยนแปลงไปหรือรายงานจุดบกพร่องโดยปราศจากการแทรกแซงระดับผู้ใช้

การห่อหุ้มข้อมูล

การห่อหุ้มข้อมูลหมายถึงการรวมกลุ่มของข้อมูลและหน้าที่ที่เกี่ยวข้องกันเป็นหน่วยเดียวที่เรียกว่าคลาส สมมุติว่า ถ้าคุณมีแอตทริบิวต์ที่มองไม่เห็นจากภายนอกของวัตถุ และรวมเข้ากับวิธีการที่ให้การเข้าถึงแบบอ่านหรือเขียน คุณสามารถซ่อนข้อมูลที่ละเอียดอ่อนและควบคุมการเข้าถึงสถานะภายในของสิ่งของได้

ดังนั้น ขึ้นอยู่กับวิธีการที่คุณใช้ คุณมีหน้าที่ตัดสินใจว่าจะสามารถอ่านและเปลี่ยนแปลงแอตทริบิวต์ได้หรือไม่ หรือเป็นแบบอ่านอย่างเดียวหรือมองไม่เห็นเลย

ความแตกต่างระหว่างการซ่อนข้อมูลและการห่อหุ้มข้อมูล

ในการหารือเกี่ยวกับ OOP การซ่อนข้อมูลและการห่อหุ้มข้อมูลมักใช้สลับกันได้เนื่องจากแนวคิดทั้งสองนี้ร่วมมือกันเพื่อบรรลุผลสำเร็จของผู้เฝ้าประตูที่มีวัตถุประสงค์เสริมร่วมกันของข้อมูลที่ละเอียดอ่อน แนวคิดของการห่อหุ้มข้อมูลนั้นเทียบได้กับการใช้งานจริงกับการซ่อนข้อมูลอย่างไม่ต้องสงสัย แต่เนื่องจากพวกมันทำงานในระดับที่ต่างกัน พวกมันจึงมีโครงสร้างที่แตกต่างกัน

แม้ว่าจะเกี่ยวข้องกันโดยเนื้อแท้ แต่ก็มีความแตกต่างที่สำคัญระหว่างการซ่อนข้อมูลและการห่อหุ้มข้อมูล

  1. ความแตกต่างหลัก ระหว่างการซ่อนข้อมูลและการห่อหุ้มคือ ก่อนหน้านี้เน้นที่การเพิ่มความปลอดภัยของข้อมูลในโปรแกรม ในขณะที่ส่วนหลังเกี่ยวข้องกับการซ่อนความซับซ้อนของโปรแกรม
  2. การซ่อนข้อมูลมุ่งเน้นไปที่การเข้าถึงของสมาชิกของวัตถุภายในชั้นเรียน ในขณะที่การห่อหุ้มข้อมูลจะเน้นที่วิธีการเข้าถึงข้อมูลและลักษณะการทำงานของวัตถุที่แตกต่างกัน การห่อหุ้มสามารถทำได้โดยการซ่อนข้อมูลเป็นหลัก ไม่ใช่แค่การปกปิดข้อมูลเท่านั้น ซึ่งหมายความว่าโปรแกรมเมอร์ซ่อนโครงสร้างของสมาชิกของอ็อบเจ็กต์และซ่อนการดำเนินการตามวิธีการทั้งหมด
  3. แม้ว่าการซ่อนข้อมูลจะเน้นที่การจำกัดการใช้ข้อมูลในโปรแกรมเพื่อให้มั่นใจในความปลอดภัยของข้อมูล การห่อหุ้มข้อมูลจะเน้นที่การรวม (หรือการห่อหุ้ม) ข้อมูลที่ซับซ้อนเพื่อนำเสนอมุมมองที่ง่ายกว่าแก่ผู้ใช้
  4. ในการซ่อนข้อมูล ข้อมูลจะต้องกำหนดเป็นแบบส่วนตัวเท่านั้น ในการห่อหุ้มข้อมูล ข้อมูลอาจเป็นแบบสาธารณะหรือแบบส่วนตัวก็ได้
  5. การซ่อนข้อมูลเป็นทั้งกระบวนการและเทคนิคในตัวเอง ในขณะที่การห่อหุ้มข้อมูลเป็นกระบวนการย่อยในการซ่อนข้อมูล

ตัวระบุการเข้าถึง

C++ รองรับการซ่อนข้อมูล และโดยการขยาย การแยกข้อมูลและการห่อหุ้มข้อมูลผ่านการสร้างประเภทที่ผู้ใช้กำหนดเอง เรียกว่าคลาส ขอบเขตของสมาชิกของคลาสที่สร้างขึ้นนี้ถูกกำหนดโดยคีย์เวิร์ดที่เรียกว่าตัวระบุการเข้าถึง โดยทั่วไป มีสามประเภทของการป้องกันหรือตัวระบุการเข้าถึงที่มีอยู่ในหมวดหมู่ - ส่วนตัว, การป้องกันและสาธารณะ ซึ่งใช้ในการสร้างความสามารถในการห่อหุ้มของคลาส

ตัวระบุการเข้าถึงช่วยกำหนดวิธีที่ตัวแปรและฟังก์ชันของประเภทสามารถเข้าถึงได้จากภายนอกชั้นเรียน โดยปกติ ข้อมูลภายในคลาสจะเป็นแบบส่วนตัวเพื่อกำจัดอินสแตนซ์การจัดการโดยไม่ได้ตั้งใจ และการดำเนินการของข้อมูลนั้นเป็นแบบสาธารณะ อย่างไรก็ตาม ความสามารถในการเข้าถึงภายในอันดับไม่ได้ผูกมัดด้วยข้อจำกัดใดๆ

ตัวแปร/ฟังก์ชันส่วนตัว: สามารถเข้าถึงได้โดยสมาชิกที่กำหนดให้เป็นส่วนหนึ่งของชั้นเรียนเท่านั้น

ตัวแปร/ฟังก์ชันสาธารณะ: สามารถเข้าถึงได้จากทุกที่ในโปรแกรม

ตัวแปร/ฟังก์ชันที่ได้รับการป้องกัน เป็นส่วนตัวภายในคลาสและพร้อมใช้งานสำหรับการเข้าถึงระยะไกลในคลาสที่ได้รับเท่านั้น

แอพลิเคชันของการซ่อนข้อมูล

เพื่อให้เข้าใจการซ่อนข้อมูลได้ดีขึ้น ให้เราพิจารณาตัวอย่างต่อไปนี้ เมื่อพิจารณาว่าคุณเป็นโปรแกรมเมอร์ ให้เราถือว่าคุณประกาศคลาสโดยใช้ชื่อ 'CheckAccount' ซึ่งคุณได้กำหนดสมาชิกข้อมูลด้วยคำว่า 'Balance' ซึ่งหมายถึงยอดเงินในบัญชีธนาคารของผู้ใช้

ในตัวอย่างนี้ สมาชิกข้อมูล 'ยอดคงเหลือ' เป็นข้อมูลที่ละเอียดอ่อน แม้ว่าคุณอาจเสนอการเข้าถึงแอปพลิเคชันภายนอกเพื่อดูข้อมูลที่ละเอียดอ่อนนี้ แต่ในทุกโอกาส คุณจะไม่ปล่อยให้แอปพลิเคชันภายนอกนี้เปลี่ยนแปลงแอตทริบิวต์ของข้อมูลที่จัดเก็บไว้ในยอดคงเหลือของสมาชิก ผลลัพธ์นี้สามารถทำได้โดยใช้การซ่อนข้อมูล และโดยเฉพาะอย่างยิ่ง ถูกควบคุมโดยการใช้ตัวระบุการเข้าถึงแบบส่วนตัว

  1. การซ่อนข้อมูลโดยทั่วไปจะดำเนินการกับข้อมูลที่คาดเดาไม่ได้และละเอียดอ่อน ข้อมูลประเภทนี้เป็นพื้นฐานในการรันโปรแกรมอย่างมีประสิทธิภาพและรวดเร็ว เนื่องจากการเข้าถึงอย่างไม่เหมาะสม ข้อมูลการเปลี่ยนแปลงข้อมูลที่ได้จะเป็นแบบถาวรและกำหนดให้ต้องปรับปรุงในส่วนของโปรแกรมเมอร์ให้สมบูรณ์ก่อนใช้งานต่อไป
  2. การซ่อนข้อมูลช่วยปกป้องสมาชิกในชั้นเรียนจากการมองข้ามโดยไม่ได้ตั้งใจ คลาสมักจะประกอบด้วยฟิลด์ที่เกี่ยวข้องต่าง ๆ ที่ต้องอยู่ในสถานะที่เชื่อถือได้ สมมติว่าโปรแกรมเมอร์ได้รับอนุญาตให้ควบคุมฟิลด์เหล่านี้อย่างตรงไปตรงมา ในกรณีนั้น มีความเป็นไปได้ที่คุณอาจแปลงหนึ่งพื้นที่โดยไม่ต้องเปลี่ยนฟิลด์ที่เกี่ยวข้องที่สำคัญ ทำให้คลาสของคุณอยู่ในสถานะที่ขัดแย้งกัน

ประโยชน์ของการซ่อนข้อมูล

ประโยชน์ของการซ่อนข้อมูลมีหลายประการ:

  1. ใช้เพื่อลดความคาดเดาไม่ได้ของข้อมูลและความซับซ้อนของข้อมูล
  2. ปรับปรุงการใช้ซ้ำของโปรแกรม
  3. ด้วยการจำกัดการพึ่งพาซึ่งกันและกันระหว่างส่วนประกอบซอฟต์แวร์ ยังช่วยลดความซับซ้อนของระบบเพื่อเพิ่มความทนทานอีกด้วย
  4. ซ่อนการออกแบบการจัดเก็บทางกายภาพสำหรับข้อมูล ซึ่งช่วยในการกำหนดอินเทอร์เฟซอย่างชัดเจน ปรับปรุงความสามารถในการอ่านและความเข้าใจ
  5. ให้การรับรองข้อมูลจากความเสียหายและการเข้าถึงโดยไม่ได้รับอนุญาต กล่าวอีกนัยหนึ่ง ช่วยปกปิดข้อมูลสำคัญ ดังนั้นจึงมั่นใจได้ถึงโปรโตคอลความปลอดภัยที่เพิ่มขึ้นจากแฮกเกอร์ หากข้อมูลภายในทั้งหมดถูกเปิดเผยต่อสาธารณะ แฮกเกอร์สามารถเจาะข้อมูลภายในได้อย่างง่ายดายและทำการเปลี่ยนแปลงโดยเจตนามุ่งร้ายเพื่อเปลี่ยนแปลงการทำงานของโปรแกรม การซ่อนข้อมูลทำให้ถอดรหัสยากขึ้นมาก เนื่องจากข้อมูลที่ซ่อนไว้จะไม่ปรากฏให้สมาชิกภายนอกชั้นเรียนและแฮ็กเกอร์มองไม่เห็น
  6. คลาสที่ห่อหุ้มนั้นตรงไปตรงมา ง่ายต่อการจัดการ และอำนวยความสะดวกในการพัฒนาแอปพลิเคชันในอนาคต

ข้อเสียของการซ่อนข้อมูล

ข้อเสียเพียงอย่างเดียวของการซ่อนข้อมูลคือการเข้ารหัสเพิ่มเติม การซ่อนข้อมูลทำให้โปรแกรมเมอร์ต้องเขียนโค้ดที่ยาวขึ้นเพื่อสร้างเอฟเฟกต์ที่ต้องการในข้อมูลที่ซ่อนอยู่

เรียนรู้ หลักสูตรวิศวกรรมซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

บทสรุป

การซ่อนข้อมูลนั้นคล้ายกับเกม Russian Roulette ใน Russian Roulette มีเพียงหนึ่งในหกหลุมเท่านั้นที่มีสัญลักษณ์แสดงหัวข้อย่อย ให้เราจินตนาการว่าช็อตนี้เป็นภัยคุกคามต่อข้อมูลที่สามารถรับรู้ได้ คุณยินดีที่จะใช้โอกาสหรือไม่? อาจมีห้าสถานการณ์ที่เหมาะกับคุณ แต่คุณสามารถระบุภัยคุกคามโดยเฉพาะได้หรือไม่? คำตอบคือไม่ สถานการณ์ทั้งหมดแบกรับภาระความสงสัยและความกลัวที่เท่าเทียมกัน แทนที่จะยอมจำนนต่อความไม่แน่นอนนี้ ให้ยืนหยัดต่อต้านการคุกคามของข้อมูล ปลอมตัวไปพร้อมกับการปกปิดข้อมูล

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java, OOP และการพัฒนาซอฟต์แวร์ฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์ฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ

การห่อหุ้มในการเขียนโปรแกรมเชิงวัตถุคืออะไร?

การห่อหุ้มเป็นวิธีการผูกข้อมูลและรหัสที่ทำงานบนข้อมูลเข้าด้วยกัน เป็นกลไกที่ใช้ในการซ่อนรายละเอียดการนำข้อมูลไปใช้ในขณะที่เปิดเผยข้อมูลที่เป็นนามธรรมสู่โลกภายนอก กระบวนการซ่อนข้อมูลเบื้องหลังอินเทอร์เฟซที่กำหนดไว้อย่างดีเรียกว่าการห่อหุ้ม การห่อหุ้มเป็นแนวคิดที่มีประสิทธิภาพของการเขียนโปรแกรมเชิงวัตถุ เป็นกระบวนการซ่อนข้อมูลภายในและการดำเนินการของวัตถุจากโลกภายนอกโดยการสร้างฟังก์ชันการเข้าถึง

สิ่งที่เป็นนามธรรมในการเขียนโปรแกรมเชิงวัตถุคืออะไร?

Abstraction เป็นเทคนิคที่ใช้ในการเขียนโปรแกรมเชิงวัตถุเพื่อแยกอินเทอร์เฟซของคลาสออกจากรายละเอียดการใช้งานของแต่ละวัตถุ ซึ่งหมายความว่ารหัสสามารถเปลี่ยนแปลงได้โดยไม่ต้องเปลี่ยนรหัสที่ใช้ชั้นเรียน ในการเขียนโปรแกรมเชิงวัตถุ (OOP) สิ่งที่เป็นนามธรรมหมายถึงวัตถุที่สามารถจัดการได้ แต่ไม่ได้กำหนดไว้อย่างชัดเจน นามธรรมเป็นส่วนสำคัญของ OOP; เป็นกระบวนการแยกอินเทอร์เฟซของคลาสออกจากการใช้เมธอด

คลาสและอ็อบเจ็กต์โต้ตอบในการเขียนโปรแกรมเชิงวัตถุอย่างไร

คลาสและอ็อบเจ็กต์เป็นพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ (OO) การเขียนโปรแกรมเชิงวัตถุเป็นกระบวนทัศน์การเขียนโปรแกรม ซึ่งใช้วัตถุและคลาสเพื่อสร้างแบบจำลองในโลกแห่งความเป็นจริง คลาสคือพิมพ์เขียวหรือเทมเพลต เป็นคำอธิบายหรือข้อกำหนดว่าวัตถุควรเป็นอย่างไร กำหนดลักษณะ พฤติกรรม และข้อมูลของวัตถุประเภทใดประเภทหนึ่ง ออบเจ็กต์คือตัวอย่างหรือตัวอย่างของคลาส แต่ละอ็อบเจ็กต์ในโปรแกรมสามารถจำแนกได้เป็นหนึ่งคลาสหรือมากกว่า คลาสสามารถสืบทอดคุณสมบัติ เมธอด และคุณลักษณะอื่นๆ ของคลาสอื่นได้ นี้เรียกว่าเป็นมรดก