การห่อหุ้มเทียบกับสิ่งที่เป็นนามธรรม
Encapsulation และ Abstraction เป็นสองแนวคิดที่แตกต่างกันแต่พบได้ในภาษา OOP (Object Oriented Programming) การห่อหุ้มเป็นแนวคิดในการรวมข้อมูลและพฤติกรรมเข้าด้วยกันเป็นเอนทิตีเดียว ในทางกลับกัน สิ่งที่เป็นนามธรรมคือกระบวนการในการนำเสนอว่าเอนทิตีมีพฤติกรรมอย่างไร\ดูเหมือนตรงข้ามกับวิธีการดำเนินการ
การห่อหุ้มคืออะไร
การห่อหุ้มเป็นกระบวนการห่อข้อมูลและการดำเนินการที่ดำเนินการกับข้อมูลเหล่านั้นในเอนทิตีเดียว โดยพื้นฐานแล้วหมายความว่าในการเข้าถึงข้อมูล ควรใช้วิธีการที่กำหนดไว้ล่วงหน้าบางอย่างกล่าวคือไม่สามารถเข้าถึงข้อมูลที่ห่อหุ้มได้โดยตรง สิ่งนี้ทำให้แน่ใจได้ว่าความสมบูรณ์ของข้อมูลได้รับการเก็บรักษาไว้เนื่องจากผู้ใช้ไม่สามารถเข้าถึงและแก้ไขข้อมูลได้โดยตรงตามที่ต้องการ ผู้ใช้จะได้รับหรือตั้งค่าข้อมูลผ่านวิธีการที่เปิดเผยต่อผู้ใช้เท่านั้น วิธีการเหล่านี้มักจะให้การตรวจสอบความถูกต้องของข้อมูลเพื่อให้สามารถแทรกเฉพาะข้อมูลในรูปแบบที่เหมาะสมลงในฟิลด์ได้ ดังนั้นประโยชน์ของการห่อหุ้มจึงมีสามเท่า โปรแกรมเมอร์สามารถสร้างฟิลด์ของคลาสแบบอ่านอย่างเดียวหรือเขียนเท่านั้นผ่านการห่อหุ้ม ประการที่สอง คลาสสามารถควบคุมสิ่งที่จัดเก็บไว้ในฟิลด์ได้ทั้งหมด สุดท้ายนี้ ผู้ใช้คลาสไม่จำเป็นต้องกังวลถึงวิธีการจัดเก็บข้อมูล ใน Java โปรแกรมเมอร์สามารถประกาศตัวแปรอินสแตนซ์ทั้งหมดให้เป็นส่วนตัวและจัดเตรียมวิธีการรับและตั้งค่า (ที่เป็นสาธารณะ) เพื่อเข้าถึงและแก้ไขฟิลด์ส่วนตัว
นามธรรมคืออะไร
นามธรรมคือกระบวนการแยกรายละเอียดการนำเสนอออกจากรายละเอียดการใช้งานสิ่งนี้ทำเพื่อให้นักพัฒนาคลายรายละเอียดการใช้งานที่ซับซ้อนมากขึ้น โปรแกรมเมอร์สามารถมุ่งเน้นไปที่การนำเสนอหรือรายละเอียดพฤติกรรมของเอนทิตีแทน ในแง่ง่ายๆ สิ่งที่เป็นนามธรรมจะเน้นที่วิธีการใช้เอนทิตีบางอย่างมากกว่าที่จะนำไปใช้ นามธรรมโดยพื้นฐานแล้วจะซ่อนรายละเอียดการนำไปใช้งาน ดังนั้นแม้ว่าวิธีการนำไปใช้จะเปลี่ยนแปลงไปตามกาลเวลา โปรแกรมเมอร์ก็ไม่ต้องกังวลว่าจะส่งผลต่อโปรแกรมของเขาอย่างไร ระบบสามารถแยกออกเป็นหลายชั้นหรือหลายระดับได้ ตัวอย่างเช่น เลเยอร์นามธรรมระดับต่ำจะเปิดเผยรายละเอียดของฮาร์ดแวร์ ในขณะที่นามธรรมระดับสูงจะเปิดเผยเฉพาะตรรกะทางธุรกิจของเอนทิตีเท่านั้น คำว่า abstraction อาจใช้เพื่ออ้างถึงทั้งเอนทิตีและกระบวนการ และสิ่งนี้นำไปสู่ความสับสน ในกระบวนการ สิ่งที่เป็นนามธรรมหมายถึงการดึงรายละเอียดที่จำเป็นในขณะที่ละเลยรายละเอียดที่ไม่จำเป็นของรายการหรือกลุ่มของรายการ ในขณะที่ในฐานะที่เป็นเอนทิตี สิ่งที่เป็นนามธรรมหมายถึงแบบจำลองหรือมุมมองของเอนทิตีที่มีเฉพาะรายละเอียดที่จำเป็นเท่านั้นใน Java โปรแกรมเมอร์สามารถใช้คีย์เวิร์ด abstract เพื่อประกาศคลาสเป็นเอนทิตี abstract ซึ่งแสดงถึงลักษณะการกำหนดที่สำคัญของเอนทิตีในโลกแห่งความเป็นจริง
สิ่งที่ห่อหุ้มและนามธรรมต่างกันอย่างไร
แม้ว่า Encapsulation และ Abstraction จะเป็นแนวคิดที่เกี่ยวข้องกันอย่างมากซึ่งพบในภาษาการเขียนโปรแกรมเชิงวัตถุ แต่ก็มีความแตกต่างที่สำคัญ นามธรรมเป็นเทคนิคที่ช่วยให้เราระบุสิ่งที่ควรมองเห็นและสิ่งที่ควรซ่อน การห่อหุ้มเป็นเทคนิคในการแพ็คข้อมูลเพื่อให้มองเห็นสิ่งที่ควรมองเห็นได้และซ่อนสิ่งที่ควรซ่อนไว้ กล่าวอีกนัยหนึ่ง Encapsulation สามารถระบุได้ว่าเป็นขั้นตอนเดียวนอกเหนือจากสิ่งที่เป็นนามธรรม แม้ว่าสิ่งที่เป็นนามธรรมจะลดวัตถุในโลกแห่งความเป็นจริงให้เหลือคุณลักษณะที่กำหนดที่สำคัญ การห่อหุ้มขยายแนวคิดนี้โดยการสร้างแบบจำลองและเชื่อมโยงการทำงานนี้ของเอนทิตีนั้น