Encapsulation vs Abstraction?


137

นี่คือคำจำกัดความสั้น ๆ ของการห่อหุ้มและนามธรรม

abstraction:

กระบวนการของ abstraction ใน Java นั้นใช้เพื่อซ่อนรายละเอียดบางอย่างและแสดงเฉพาะคุณสมบัติที่สำคัญของวัตถุ กล่าวอีกนัยหนึ่งมันเกี่ยวข้องกับมุมมองภายนอกของวัตถุ (อินเทอร์เฟซ) ตัวอย่างที่ดีที่ฉันเห็นในเว็บไซต์นี้คือส่วนต่อประสาน

encapsulation:

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

สิ่งที่เราประสบความสำเร็จกับการปรับเปลี่ยนเช่นprivate,publicยังซ่อนรายละเอียดที่ไม่จำเป็นออกจากโลกด้านซึ่งเป็นอะไร แต่ยังแนวคิดนามธรรม

ดังนั้นจากคำอธิบายข้างต้นดูเหมือนว่าการห่อหุ้มเป็นส่วนหนึ่งของสิ่งที่เป็นนามธรรมหรือเราสามารถพูดได้ว่ามันเป็นส่วนหนึ่งของสิ่งที่เป็นนามธรรม แต่ทำไมคำว่า encapsulation จึงถูกคิดค้นขึ้นเมื่อเราสามารถจัดการกับนามธรรมได้เท่านั้น? ฉันแน่ใจว่าควรมีความแตกต่างที่สำคัญซึ่งแยกพวกเขา แต่วัสดุส่วนใหญ่ในเน็ตกล่าวว่าเกือบเหมือนกันสำหรับพวกเขาทั้งสอง

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

อัปเดต: -หลังจาก 5 ปีที่ฉันได้คำตอบของตัวเองซึ่งเป็นส่วนสำคัญตามคำตอบในโพสต์นี้และด้านล่าง

  1. แตกต่างระหว่างนามธรรมและการห่อหุ้มหรือไม่?
  2. encapsulation vs Abstraction ตัวอย่างโลกแห่งความจริง

encapsulation ตามที่นิยามไว้ข้างต้นเป็นเครื่องมือของนามธรรม แต่ฉันมักจะคิดว่ามันเป็นสิ่งที่คลาสแค็ปซูล (ฟังก์ชั่น / ข้อมูลโดยไม่คำนึงถึงการเข้าถึง) ที่เป็นนามธรรมเป็นความรู้สึกของการเอาคุณออกจากความกังวลของการใช้งานที่เป็นรูปธรรม มันทำเสร็จแล้วและสิ่งที่ทำอย่างแน่นอนนั้นสามารถทำได้จากวิกิพีเดียAn 'abstraction' (noun) is a concept that acts as a super-categorical noun for all subordinate concepts, and connects any related concepts as a group, field, or category.
TI

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

คำตอบ:


98

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

สิ่งที่เป็นนามธรรมนั้นเป็นศัพท์ที่ใช้กันทั่วไปมากกว่า แต่มันยังสามารถทำให้สำเร็จได้โดย subclassing ยกตัวอย่างเช่นอินเตอร์เฟซListในไลบรารีมาตรฐานคือนามธรรมลำดับของรายการ, จัดทำดัชนีโดยตำแหน่งของพวกเขาตัวอย่างที่เป็นรูปธรรมของListเป็นหรือArrayList LinkedListโค้ดที่โต้ตอบกับListบทคัดย่อในรายละเอียดว่าเป็นรายการประเภทใด

สิ่งที่เป็นนามธรรมมักจะเป็นไปไม่ได้หากไม่มีการซ่อนสถานะพื้นฐานโดยการห่อหุ้ม - หากคลาส exposes สถานะภายในของมันก็ไม่สามารถเปลี่ยนการทำงานภายในของมันและดังนั้นจึงไม่สามารถเป็นนามธรรม


8
การห่อหุ้มหมายถึงกลุ่มของคุณสมบัติวิธีการและสมาชิกอื่น ๆ ที่เกี่ยวข้องจะถือว่าเป็นหน่วยเดียวหรือวัตถุ msdn.microsoft.com/en-us/library/dd460654.aspx
raberana

1
การห่อหุ้มนำไปสู่สิ่งที่เป็นนามธรรม
Martin

124

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

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

Encapsulationเป็นเทคนิค มันอาจจะใช่หรือไม่ใช่สำหรับการช่วยเหลือในสิ่งที่เป็นนามธรรม แต่แน่นอนเกี่ยวกับการซ่อนข้อมูลและ / หรือองค์กร มันต้องการข้อมูลและฟังก์ชั่นที่ถูกจัดกลุ่มในบางวิธี - แน่นอนว่าการปฏิบัติ OOP ที่ดีนั้นต้องการให้จัดกลุ่มตามสิ่งที่เป็นนามธรรม อย่างไรก็ตามมีการใช้งานอื่น ๆ ที่ช่วยในการบำรุงรักษา ฯลฯ


13
คำจำกัดความของคุณเกี่ยวกับ Abstraction เป็นสิ่งที่ดีที่สุดที่ฉันเคยเห็นและฉันรู้สึกเหมือนเป็นครั้งแรกที่เคยคลิกมันในหัวของฉันและเข้าท่า ฉันรู้ว่ามันนานกว่า 3 ปีแล้วที่คุณโพสต์สิ่งนี้ แต่ขอบคุณ
Casey Crookston

1
ว้าว .... สิ่งที่เป็นนามธรรม .... ที่แสดงออกในแง่ของศิลปะ ... สีแดงอาจจะเป็นความโกรธนั่นคือทั้งหมดที่เราต้องรู้! ขอบคุณสำหรับมุมมองแนวคิดนี้ :-)
SlowLearner

Encapsulation ใช้เพื่อให้ได้ "Loose Coupling & High Cohesion"
ตัวเรียงลำดับ

28

การห่อหุ้มเป็นส่วนหนึ่งของสิ่งที่เป็นนามธรรมหรือเราสามารถพูดได้ว่าเป็นส่วนหนึ่งของสิ่งที่เป็นนามธรรม

พวกเขาเป็นแนวคิดที่แตกต่าง

  • สิ่งที่เป็นนามธรรมคือกระบวนการปรับแต่งคุณสมบัติที่ไม่จำเป็น / ไม่สำคัญทั้งหมดของวัตถุและเก็บเฉพาะคุณลักษณะที่เหมาะสมที่สุดสำหรับโดเมนของคุณ

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

    สิ่งที่เป็นนามธรรมคือสิ่งที่การออกแบบของคุณเริ่มต้น

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

เราสามารถพูดได้ว่า Abstraction เป็นแนวคิดการออกแบบและ Encapsulation ส่วนใหญ่เกี่ยวกับการใช้งานการออกแบบที่เราตกลงกันไว้ในระหว่างการนามธรรม?
M Sach

1
ในการห่อหุ้มที่คุณกำหนดการดำเนินการที่สามารถ / ต้องนำไปใช้กับข้อมูลของคุณซึ่งสามารถเป็นส่วนหนึ่งของการออกแบบเช่นกันดึง SSN แต่ไม่แก้ไขมัน
Cratylus

25

Encapsulation ซ่อน ข้อมูลที่ไม่จำเป็นไว้ในแคปซูลหรือหน่วย

สิ่งที่เป็นนามธรรมแสดง คุณสมบัติที่สำคัญของวัตถุ

การห่อหุ้มถูกใช้เพื่อซ่อนสมาชิกจากคลาสภายนอกและส่วนต่อประสานการใช้ตัวดัดแปลงการเข้าถึงที่ให้ไว้ใน c # .like สาธารณะสาธารณะส่วนตัวป้องกัน ฯลฯ ตัวอย่าง:

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}

ที่นี่เรามีข้อมูลห่อในหน่วยหรือแคปซูลเช่นระดับ

สิ่งที่เป็นนามธรรมอยู่ตรงข้ามกับ Encapsulation

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

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }

ฉันเห็นด้วย. คนพวกนี้ตรงข้ามกัน oop ที่ดีมีแนวโน้มที่จะสรุปสิ่งที่ไม่เปลี่ยนแปลงและ [ห่อหุ้มสิ่งที่เปลี่ยนแปลง] [1] [1]: หลักการ
-wiki.net/…

15

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

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

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

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

ในการเปรียบเทียบ "encapsulation" เป็นคำที่เฉพาะเจาะจงและ จำกัด คำตอบอื่น ๆ สำหรับคำถามนี้ได้ให้คำจำกัดความที่ดีไว้แล้ว


14

ตอบคำถามของฉันเองหลังจาก 5 ปีที่ฉันรู้สึกว่ามันยังต้องการรายละเอียดเพิ่มเติม

abstraction:

คำจำกัดความทางเทคนิค: - Abstraction เป็นแนวคิดในการซ่อนรายละเอียดที่ไม่จำเป็น (ซับซ้อนหรือง่าย) และแสดงเฉพาะคุณสมบัติที่สำคัญของวัตถุ ไม่มีการนำไปใช้ที่นี่เป็นเพียงแนวคิด

ความหมายในทางปฏิบัติ: -เมื่อฉันบอกว่า บริษัท ของฉันต้องการสื่อ / อุปกรณ์บางอย่างเพื่อให้พนักงานสามารถเชื่อมต่อกับลูกค้าได้ นี่เป็นรูปแบบที่บริสุทธิ์ที่สุดของ abstaction (เช่นอินเตอร์เฟสใน java) เนื่องจากอุปกรณ์ / สื่อสามารถเป็นโทรศัพท์หรืออินเทอร์เน็ตหรือ skype หรือด้วยตนเองหรืออีเมลเป็นต้นฉันจะไม่เข้าไปในอุปกรณ์ / สื่อ

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

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

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

ความหมายในทางปฏิบัติ: - ตอนนี้เมื่อฉันพูดว่า บริษัท ของฉันต้องการ iPhone บางส่วนเพื่อให้พนักงานสามารถเชื่อมต่อกับลูกค้าผ่านการโทรด้วยเสียงตอนนี้ฉันกำลังพูดถึงวัตถุที่เป็นรูปธรรม (เช่น iphone) แม้ว่าฉันจะไม่เข้าไปในไอของทรายที่นี่เช่นกัน แต่ iphone ก็มีข้อมูล / การใช้งานที่เกี่ยวข้อง / ที่เกี่ยวข้องกับมันโดยที่อุปกรณ์ / สื่อไม่มี เมื่อฉันพูดวัตถุที่เป็นรูปธรรมจริง ๆ แล้วมันหมายถึงวัตถุใด ๆ ที่มีบางส่วน (ไม่สมบูรณ์เช่นจาวานามธรรมคลาส) การใช้งาน / ข้อมูลที่เกี่ยวข้องกับมัน

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

นี่คือส่วนสำคัญตามคำตอบในโพสต์นี้และด้านล่าง

  1. แตกต่างระหว่างนามธรรมและการห่อหุ้มหรือไม่?
  2. encapsulation vs Abstraction ตัวอย่างโลกแห่งความจริง

5

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

Abstraction - หลักการจะต้องปฏิบัติตามในการเขียนโปรแกรม OOP ที่พูดว่า "คุณต้องรวมไว้ในองค์ประกอบเฉพาะระดับที่น่าสนใจในงานของโปรแกรม" ตัวอย่างเช่น: นักเรียนวัตถุมีตัวละครจำนวนมากเป็นมนุษย์: ชื่อ, อายุ, น้ำหนัก, สีผม, สีตา, ฯลฯ แต่เมื่อคุณสร้างคลาสใน OOP เพื่อทำงานกับนักเรียนคุณควรรวมเฉพาะตัวละครเหล่านั้นที่จริง ๆ เรื่องสำหรับฐานข้อมูลนักเรียน: ชื่ออายุพิเศษระดับเครื่องหมาย ... ฯลฯ ใน C ++ คุณสามารถสร้างคลาสนามธรรมโดยใช้โมดิฟายเออร์ "เสมือน" ด้วยวิธีการใด ๆ ในชั้นเรียนและจะทำให้มันใช้ไม่ได้โดยตรง แต่คุณสามารถ สืบทอดคลาสอื่นจากคลาสนั้นและสร้างการนำไปใช้งานสำหรับสมาชิกด้วยการเพิ่มสมาชิกที่ต้องการตามภารกิจ


4

นี่คือวิธีที่ฉันเข้าใจ:

ในการเขียนโปรแกรมเชิงวัตถุเรามีสิ่งที่เรียกว่าชั้นเรียน สิ่งที่พวกเขาสำหรับ? พวกเขาจะเก็บบางรัฐและเก็บวิธีการบางอย่างเพื่อเปลี่ยนสถานะนั่นคือพวกเขากำลังแค็ปซูลรัฐและวิธีการ

มัน (คลาส) ไม่สนใจเกี่ยวกับการมองเห็นของตัวเองหรือเนื้อหาของมัน หากเราเลือกที่จะซ่อนสถานะหรือวิธีการบางอย่างมันเป็นการซ่อนข้อมูลที่หลบซ่อนข้อมูล

ตอนนี้ใช้สถานการณ์ของมรดก เรามีคลาสพื้นฐานและคลาสที่ได้รับมา แล้วคลาสเบสทำอะไรที่นี่? มันเป็นนามธรรมสิ่งต่าง ๆ จากคลาสที่ได้รับมา

พวกเขาต่างกันใช่มั้ย แต่เราผสมมันเพื่อเขียนโปรแกรมเชิงวัตถุที่ดี หวังว่าจะช่วย :)


3

สิ่งที่เป็นนามธรรมหมายถึงการนำเสนอบางสิ่งบางอย่างในบริบทเฉพาะ มันจะละเว้นรายละเอียดที่ไม่เกี่ยวข้องกับบริบทและรวมถึงรายละเอียดที่สำคัญตามบริบท

การห่อหุ้มนั้น จำกัดการเข้าถึงส่วนนอกของชิ้นส่วนและชุดของสิ่งนั้นด้วยวิธีการที่ใช้รัฐ


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


1

บันทึก:ฉันกำลังแบ่งปันสิ่งนี้ มันไม่ได้หมายความว่าที่นี่ไม่ใช่คำตอบที่ดี แต่เป็นเพราะฉันเข้าใจได้ง่าย

ตอบ:

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

ในทำนองเดียวกันพฤติกรรมที่เราจะมีในชั้นเรียนคืออะไร สิ่งที่เป็นนามธรรมก็ใช้ที่นี่ อะไรคือสิ่งที่จำเป็นในการมีที่นี่และยาเกินขนาดจะเป็นอย่างไร จากนั้นเราตัดข้อมูลบางส่วนออกจากชั้นเรียน กระบวนการนี้ใช้สิ่งที่เป็นนามธรรม

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

ไปที่นี่สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับหัวข้อนี้


1

ให้พยายามทำความเข้าใจในวิธีที่ต่างออกไป

จะเกิดอะไรขึ้นถ้า Abstraction ไม่มีและสิ่งที่อาจเกิดขึ้นได้หากไม่มี Encapsulation

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

หาก Encapsulation ไม่มีอยู่หรือไม่ได้ใช้งานอย่างถูกต้องคุณอาจนำวัตถุไปใช้ในทางที่ผิด อาจมีการใช้ข้อมูล / ส่วนประกอบในทางที่ผิด ใช้ตัวอย่างเดียวกันของทีวีหากไม่มีการห่อหุ้มที่ระดับเสียงของทีวีตัวควบคุมระดับเสียงอาจถูกนำไปใช้ในทางที่ผิดโดยทำให้อยู่ด้านล่างหรือเกินขีด จำกัด (0-40 / 50)


1

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

ตัวอย่างที่ดี Divider เป็นคลาสที่มีการจ่ายเงินปันผลและตัวหารตัวแปรสองตัวและวิธีการ getDividedValue

คุณคิดได้ไหมว่าถ้าตัวหารถูกตั้งค่าเป็น 0 ระบบ / พฤติกรรมภายใน (getDivided) จะพัง

ดังนั้นพฤติกรรมภายในของวัตถุสามารถป้องกันได้โดยการโยนข้อยกเว้นผ่านวิธีการ


0

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.