สิ่งที่เป็นนามธรรมกับการห่อหุ้ม: ความแตกต่างระหว่างสิ่งที่เป็นนามธรรมและการห่อหุ้ม
เผยแพร่แล้ว: 2021-02-09สารบัญ
บทนำ
โปรแกรมเมอร์ทุกคนเติบโตเพื่อพัฒนาโค้ดที่เรียบร้อยและสะอาด และเขาต้องใช้อาวุธที่เหมาะสมจากชุดเกราะหรือแนวคิด OOP การใช้แนวคิด OOP ที่เหมาะสมจะช่วยลดความซับซ้อนและเอนทิตีของออบเจกต์จะแยกส่วนกับส่วนอื่นๆ ของโค้ด นอกจากนี้ยังช่วยเพิ่มความสามารถในการอ่านและสามารถปรับเปลี่ยนได้ง่ายหากต้องการ
นอกจากนี้ แนวคิด OOP เช่น การสืบทอด ยังช่วยให้สามารถขยายโค้ดได้อีกด้วย แนวคิดเหล่านี้มีประโยชน์สำหรับการกำหนดคลาสนามธรรม อัปเดตโค้ดที่นำไปใช้ก่อนหน้านี้ การนำแอปพลิเคชันไปใช้ในสถานการณ์จริง
สิ่งที่เป็นนามธรรม การห่อหุ้มเป็นแนวคิดพื้นฐานในการเขียนโปรแกรมเชิงวัตถุ และโปรแกรมเมอร์ทุกคนใช้แนวคิดเหล่านี้เพื่อให้โค้ดสะอาดและนำกลับมาใช้ใหม่ได้ แต่มีความแตกต่างกันมากระหว่างแนวคิดทั้งสองนี้ มาทำความเข้าใจกันในบทความนี้
ขั้นแรก เรามาทำความรู้จักกับแนวคิดเรื่องนามธรรมและการห่อหุ้มอย่างรวดเร็วกัน
สิ่งที่เป็นนามธรรม
นามธรรมเป็นกระบวนการของการซ่อนข้อมูลที่ไม่จำเป็นและแสดงเฉพาะข้อมูลที่เกี่ยวข้อง จากมหาสมุทรของข้อมูล เราเพียงรักษาความโปร่งใสของข้อมูลบางอย่างต่อผู้ใช้เท่านั้น แนวคิดที่สำคัญในการเขียนโปรแกรมเชิงวัตถุนี้จะช่วยลดความซับซ้อนของโค้ดและเพิ่มความสามารถในการอ่าน
ตัวอย่างเช่น สมมติว่าเราได้รับมอบหมายงานเพื่อสร้างพอร์ทัลการลงทะเบียนหลักสูตรออนไลน์ และช่องข้อมูลที่เรามีคือ {ชื่อ, อายุ, อาชีพปัจจุบัน, ชื่อวิทยาลัย, ชื่อหลักสูตร, วิธีการชำระเงิน, ชื่อพี่น้อง, สถานภาพการสมรส, ยานพาหนะ ตัวเลข}.
หลังจากที่ได้ดูช่องข้อมูลที่พร้อมใช้งาน เราจะเข้าใจว่าบางช่องไม่จำเป็นสำหรับพอร์ทัลการลงทะเบียนหลักสูตร ฟิลด์เช่น {ชื่อพี่น้อง สถานภาพการสมรส หมายเลขรถ} ไม่จำเป็นสำหรับการลงทะเบียนหลักสูตร
ดังนั้น เราต้องเจาะจงและเลือกเฉพาะข้อมูลที่เกี่ยวข้องเท่านั้น ตอนนี้ฟิลด์ที่จำเป็นคือ {ชื่อ อายุ อาชีพปัจจุบัน ชื่อวิทยาลัย ชื่อหลักสูตร วิธีการชำระเงิน} นี่เป็นตัวอย่างของสิ่งที่เป็นนามธรรมใน OOP เนื่องจากเราได้รวบรวมข้อมูลที่เลือกจากข้อมูลทั้งหมด
ตอนนี้ ข้อมูลใหม่นี้ยังสามารถใช้กับแอปพลิเคชันอื่นๆ เช่น ตัวติดตามสถานะหลักสูตร บันทึกการจบหลักสูตร ฯลฯ เราสามารถใช้ข้อมูลเดียวกันโดยไม่มีการเปลี่ยนแปลงใดๆ
หลายคนมักสับสนเกี่ยวกับ abstraction และ abstract class ทั้งคู่มีความเกี่ยวข้องกันหรือไม่?
คลาสนามธรรมแตกต่างจากนามธรรม คลาส/เมธอดนามธรรมถูกสร้างขึ้นโดยมีจุดประสงค์ที่จะนำไปใช้ในคลาสย่อยหรือคลาสย่อย ในขณะที่สิ่งที่เป็นนามธรรมเป็นเพียงการซ่อนข้อมูล และแสดงเฉพาะข้อมูลที่เกี่ยวข้องโดยใช้ตัวระบุการเข้าถึง เช่น สาธารณะ การป้องกัน ส่วนตัว
การห่อหุ้ม
การห่อหุ้มเป็นการผูกข้อมูลสมาชิกกับตัวแปรสมาชิก สิ่งนี้จะหลีกเลี่ยงการเข้าถึงตัวแปรโดยตรง เนื่องจากการเข้าถึงตัวแปรโดยตรงอาจละเมิดความเป็นส่วนตัว และการซ่อนการใช้งานจะไม่สามารถทำได้
เราอาจเคยใช้เมธอดคลาสสิกบางอย่างในคลาส เช่น set and get โดยที่เมธอด set ใช้เพื่ออัปเดตหรือจัดสรรค่าให้กับตัวแปร และใช้เมธอด get เพื่ออ่านหรือดึงค่าของตัวแปร ที่นี่เราสามารถเข้าถึงตัวแปรได้โดยตรงโดยใช้วัตถุของคลาสนั้น แต่ถ้าเราต้องการทำให้ตัวแปรเป็นส่วนตัว เราควรใช้การตั้งค่าเหล่านี้และรับเมธอด
แนวคิดนั้นง่าย เราจะตั้งค่าเมธอดให้เป็นสาธารณะ และตัวแปรเป็นแบบส่วนตัว ดังนั้นตัวแปรสามารถเข้าถึงได้ผ่านเมธอดสาธารณะภายนอกคลาสเท่านั้น เนื่องจากอ็อบเจกต์ส่วนตัวไม่สามารถเข้าถึงได้นอกคลาส แต่สามารถเข้าถึงได้ภายในคลาส แนวคิดของการผูกหรือการรวมกลุ่มตัวแปรด้วยเมธอดนี้เรียกว่าการห่อหุ้ม
ให้เราดูที่โปรแกรมจาวาง่าย ๆ เพื่อทำความเข้าใจสิ่งนี้ให้ดีขึ้น
การลงทะเบียน เรียน หลักสูตร { สตริง ส่วนตัว student_name; สตริง ส่วนตัว course_name; สตริง สาธารณะ getName (){ ส่งคืน student_name; } โมฆะ สาธารณะ setName (ชื่อสตริง){ .student_name=name นี้ ; } สตริง สาธารณะ getCourse (){ กลับ course_name; } โมฆะ สาธารณะ setCourse (หลักสูตรสตริง){ .course_name=course นี้ } } ชั้นเรียน สาธารณะ pGrad { โมฆะ คงที่ สาธารณะ หลัก (สตริง[] args){ CourseRegistration c = CourseRegistration ใหม่ (); c.setName( “มิถุน” ); c.setCourse( “วิทยาศาสตร์ข้อมูล” ); System.out.println(c.getName()); System.out.println(c.getCourse()); } } |
ในโค้ดด้านบนนี้ เราได้สร้าง CourseRegistration ของชั้นเรียน โดยที่ตัวแปรของสมาชิก ชื่อนักเรียน และชื่อหลักสูตรเป็นแบบส่วนตัว แต่เรากำลังเข้าถึงคลาสนี้ในคลาสอื่นโดยใช้ชื่อที่ตั้งไว้และรับฟังก์ชันชื่อ ในคลาสหลัก เราได้สร้างอ็อบเจ็กต์ประเภท CourseRegistration เรากำลังเริ่มต้นและเข้าถึงตัวแปรสมาชิกโดยใช้ฟังก์ชัน set และ get
ตอนนี้เราได้เห็นคำจำกัดความและตัวอย่างของสิ่งที่เป็นนามธรรมแล้ว เรามาพูดถึงข้อดีและความแตกต่างระหว่างสิ่งที่เป็นนามธรรมกับการห่อหุ้ม
ข้อดีของนามธรรม
- ความเป็นส่วนตัวของข้อมูลได้รับการเก็บรักษาไว้เนื่องจากผู้ใช้จะมองเห็นเฉพาะข้อมูลที่เกี่ยวข้องเท่านั้น
- ลดความซับซ้อนของโค้ดและเพิ่มความสามารถในการอ่าน
- คลาสที่ใช้ abstraction สามารถใช้เป็นคลาสพาเรนต์ได้โดยการสืบทอด ดังนั้น ปรับปรุงความสามารถในการนำกลับมาใช้ใหม่ และลดความซ้ำซ้อน
ข้อดีของการห่อหุ้ม
- ช่วยในการผูกข้อมูลสมาชิกกับฟังก์ชันสมาชิก
- ปรับปรุงประสิทธิภาพและเป็นมิตรกับผู้ใช้สำหรับการวิเคราะห์ข้อผิดพลาด
- ให้ความยืดหยุ่นแก่โปรแกรมเมอร์ในการควบคุมการเข้าถึงและความโปร่งใสของข้อมูล
ความแตกต่างระหว่างสิ่งที่เป็นนามธรรมและการห่อหุ้ม
คำนิยาม
- สิ่งที่เป็นนามธรรมคือการซ่อนรายละเอียดและการใช้งานโค้ด
- การห่อหุ้มกำลังซ่อนข้อมูลและควบคุมการมองเห็นรหัส
เฟส
- นามธรรมเป็นกระบวนการระดับการออกแบบ
- การห่อหุ้มเป็นกระบวนการระดับการใช้งาน
ความสามารถที่สำคัญ
- สิ่งที่เป็นนามธรรมมีความกังวลเกี่ยวกับสิ่งที่อินสแตนซ์ของคลาสสามารถทำได้ แทนที่จะเป็นการนำคลาสไปใช้
- การห่อหุ้มช่วยในการผูกข้อมูลและควบคุมการรักษาความโปร่งใสของข้อมูล
ใช้กรณี
- นามธรรมเป็นกระบวนการระดับการออกแบบ และใช้เพื่อลดความซับซ้อนในขั้นตอนการออกแบบของโครงการ
- การห่อหุ้มเป็นกระบวนการระดับการนำไปปฏิบัติ และใช้เพื่อให้ความเป็นส่วนตัวและรักษาการควบคุมความโปร่งใสของข้อมูลในขั้นตอนการดำเนินการของโครงการ
วิธีดำเนินการ
- นามธรรมสามารถทำได้โดยใช้คลาสและอินเทอร์เฟซในจาวา
- การห่อหุ้มยังดำเนินการโดยใช้คลาส และการควบคุมความเป็นส่วนตัวของข้อมูลได้มาจากการระบุตัวระบุการเข้าถึง เช่น การป้องกัน สาธารณะ ส่วนตัว
เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
บทสรุป
เราได้ผ่านความสำคัญของแนวคิด OOP แล้ว เข้าใจคำจำกัดความของสิ่งที่เป็นนามธรรมและการห่อหุ้ม เดินผ่านตัวอย่างของสิ่งที่เป็นนามธรรมและการห่อหุ้ม นอกจากนี้เรายังได้พิจารณาถึงข้อดีของการใช้แนวคิด OOP เช่น นามธรรมและการห่อหุ้ม และสุดท้าย เราได้ผ่านความแตกต่างระหว่างสิ่งที่เป็นนามธรรมและการห่อหุ้ม
เมื่อคุณทราบคำจำกัดความและการนำสิ่งที่เป็นนามธรรมไปใช้แล้ว การห่อหุ้มแล้ว ให้ลองนำไปใช้ในโค้ดของคุณ และลองลดความซับซ้อนของโค้ดที่คุณจะเขียนต่อจากนี้ไป!
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java, การพัฒนาแบบฟูลสแตก, ลองดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง, โครงการมากกว่า 9 โครงการ และการมอบหมายงาน สถานะศิษย์เก่า IIIT-B โครงการหลักและความช่วยเหลือด้านงานกับบริษัทชั้นนำ
สิ่งที่เป็นนามธรรมในการเขียนโปรแกรมเชิงวัตถุคืออะไร?
นามธรรมในการเขียนโปรแกรมเชิงวัตถุเป็นเทคนิคในการแสดงข้อมูลระดับสูงเกี่ยวกับปัญหาโดยการสร้างวัตถุ สิ่งที่เป็นนามธรรมจะดำเนินการโดยใช้อินเทอร์เฟซและการใช้งานอินเทอร์เฟซทำได้โดยใช้โค้ดจริง สิ่งที่เป็นนามธรรมถูกนำไปใช้โดยที่รายละเอียดที่เป็นรูปธรรมถูกซ่อนจากโมดูลที่ใช้โดยการจัดหาอินเทอร์เฟซที่แตกต่างกัน สิ่งที่เป็นนามธรรมถูกนำมาใช้เพื่อซ่อนรายละเอียดการใช้งานของรายละเอียดระดับต่ำ นอกจากนี้ยังใช้เพื่อซ่อนรายละเอียดที่ซับซ้อนและให้ส่วนต่อประสานที่ง่ายกว่าแก่ผู้ใช้
คลาสและอ็อบเจ็กต์ทำงานอย่างไรในการเขียนโปรแกรม?
คลาสและอ็อบเจ็กต์เป็นสองแนวคิดหลักที่ใช้ในภาษาการเขียนโปรแกรมเชิงวัตถุทั้งหมด ทุกคลาสมีชุดของตัวแปรและวิธีการที่สามารถใช้และจัดการได้ ในภาษาการเขียนโปรแกรมเชิงวัตถุ อ็อบเจ็กต์ทั้งหมดในโปรแกรมมีประเภทเฉพาะ และตัวแปรและเมธอดของอ็อบเจ็กต์สามารถจัดการได้โดยวิธีการประเภทเดียวกันเท่านั้น ในภาษาเชิงวัตถุส่วนใหญ่ คลาสนี้ใช้เพื่อสร้างอ็อบเจ็กต์และในทางกลับกัน โปรแกรมเชิงวัตถุประกอบด้วยอ็อบเจ็กต์ โพรซีเดอร์ และชนิดข้อมูล ทุกอย่างในโปรแกรมเชิงวัตถุ รวมถึงข้อมูลและโค้ด ล้วนเป็นวัตถุ
encapsulation กับ abstraction ต่างกันอย่างไร?
นามธรรมเป็นวิธีการลบรายละเอียดที่ไม่จำเป็นในโค้ดและเน้นส่วนที่เกี่ยวข้อง ตัวอย่างเช่น แทนที่จะเขียนฟังก์ชันที่คูณตัวเลขสองตัว เราสามารถเขียนฟังก์ชัน "คูณ" และใช้เพื่อคูณตัวเลขใดๆ กับตัวเลขใดๆ ก็ได้ นามธรรมเป็นวิธีการแสดงข้อมูลเฉพาะบางอย่าง การห่อหุ้มเป็นวิธีการซ่อนความซับซ้อนของบางสิ่งและเปิดเผยเฉพาะส่วนที่คุณต้องการเปิดเผย ตัวอย่างเช่น หากคุณมีคลาสที่มีฟิลด์ส่วนตัวตั้งแต่หนึ่งฟิลด์ขึ้นไปที่คุณใช้เก็บข้อมูล แสดงว่าคุณอยู่ในการห่อหุ้ม คลาสมีข้อมูลและมีวิธีการที่เปิดเผยข้อมูลสาธารณะ