สับสนเกี่ยวกับคำจำกัดความของ 'abstraction' ใน OOP


16

ฉันพยายามที่จะเข้าใจความหมายของ 'abstraction' ใน OOP

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

คำจำกัดความ 1:

สิ่งที่เป็นนามธรรมเป็นแนวคิดของการหยิบวัตถุบางอย่างจากโลกแห่งความเป็นจริงและแปลงเป็นเงื่อนไขการเขียนโปรแกรม เช่นการสร้างHumanการเรียนและให้มันint health, int age, String nameฯลฯ คุณสมบัติและeat()วิธีการอื่น ๆ

คำจำกัดความ 2:

คำจำกัดความทั่วไปมากขึ้น Abstraction เป็นแนวคิดที่เกิดขึ้นได้ทุกที่ในระบบซอฟต์แวร์ที่เกี่ยวข้องกับ'การทำให้สิ่งต่าง ๆเป็นเรื่องธรรมดา/ ง่ายขึ้น / เป็นนามธรรม' ตัวอย่างบางส่วน:

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

  • การใช้การห่อหุ้มเพื่อซ่อนรายละเอียดของการใช้คลาสจากคลาสอื่น ๆ จึงทำให้คลาส 'นามธรรม' (ง่ายกว่า) สู่โลกของซอฟต์แวร์ภายนอก

คำจำกัดความ 3

นิยามทั่วไปอีกประการหนึ่ง: Abstraction เป็นแนวคิดของการย้ายโฟกัสจากรายละเอียดและการใช้สิ่งต่าง ๆ อย่างเป็นรูปธรรมกับประเภทของสิ่งต่าง ๆ (เช่นคลาส) การดำเนินการที่มีอยู่ (เช่นวิธีการ) ฯลฯ จึงทำให้การเขียนโปรแกรมง่ายขึ้น และนามธรรมมากขึ้น (สามารถเกิดขึ้นได้ทุกที่และในบริบทใด ๆ ในระบบซอฟต์แวร์) มันเกิดขึ้นเมื่อ encapsulating เพราะ encapsulation หมายถึงการซ่อนรายละเอียดของการใช้งานและแสดงเฉพาะประเภทของสิ่งต่าง ๆ และคำจำกัดความทั่วไปและนามธรรม ตัวอย่าง Anotehr จะใช้Listวัตถุใน Java วัตถุนี้จริงใช้รายละเอียดการดำเนินงานของนั้นArrayListหรือแต่ข้อมูลนี้เป็นใจลอยใช้ชื่อทั่วไปมากขึ้นLinkedListList

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


สิ่งที่เป็นนามธรรมคือการนิยาม "สิ่ง" ให้เป็นประเภทของสิ่งต่าง ๆ (สัตว์ => สุนัข) เพื่อ จำกัด ให้แคบลงยิ่งขึ้น (Dog => พุดเดิ้ล)
Christine

คำตอบ:


22

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

นี่คือคำอธิบายที่ดี:

คุณในฐานะบุคคลที่มีความสัมพันธ์ต่างกันในบทบาทที่แตกต่างกัน เมื่อคุณอยู่ที่โรงเรียนแล้วคุณจะเป็น"นักเรียน" เมื่อคุณอยู่ในที่ทำงานคุณเป็น"ลูกจ้าง" เมื่อคุณอยู่ที่สถาบันการศึกษาของรัฐคุณสามารถมองว่าเป็น"พลเมือง" ดังนั้นเราจึงต้องพิจารณาถึงบริบทที่เรากำลังมองหาเอนทิตี / วัตถุ ดังนั้นถ้าฉันกำลังสร้างแบบจำลองของระบบการจ่ายเงินเดือนผมจะมองไปที่คุณเป็นพนักงาน (PRN, งานประจำ / Part Time, การกำหนด) หากนการสร้างแบบจำลองระบบการลงทะเบียนหลักสูตรแล้วฉันจะพิจารณาประเด็นและลักษณะของคุณเป็นนักศึกษา (ม้วนจำนวน, อายุ, เพศ, สนามลงทะเบียน) และถ้าฉันเป็นแบบจำลองระบบข้อมูลประกันสังคมจากนั้นฉันจะดูรายละเอียดของคุณในฐานะพลเมือง (เช่น DOB, เพศ, ประเทศที่เกิด ฯลฯ )

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

def ครั้งที่ 1 ไม่ชัดเจนมาก Def 2 เป็นสิ่งที่ดี แต่มีแนวโน้มที่จะสร้างความสับสนให้กับมือใหม่เนื่องจากพยายามเชื่อมโยง Abstraction กับ Encapsulation และ Inheritance Def 3 เป็นคำจำกัดความที่ดีที่สุดหนึ่งใน 3 คำนิยามเนื่องจากนิยามสิ่งที่เป็นนามธรรมได้อย่างชัดเจน


3
ดังนั้นคุณจะบอกว่ามันเป็นลักษณะทั่วไปแทนที่จะเป็นสเปค?
Robert Rocha

1
@samyismyhero ตรง! เรามองหาคุณสมบัติทั่วไปและพฤติกรรมของวัตถุสำหรับสิ่งที่เป็นนามธรรม
Maxood

[สัตว์ => สุนัข] เป็นสิ่งที่เป็นนามธรรม คุณกำหนดชิ้นส่วนที่เป็นไปได้ที่ "สัตว์" สามารถสร้างได้ "สุนัข" (หาง, ขา, ขน, ฯลฯ ) จากนั้นคุณสามารถใช้คลาส "สุนัข" เพื่อกำหนดพุดเดิ้ลพิทบูลและอื่น ๆ ดังนั้นคุณจึงประกาศสายพันธุ์สุนัขโดยใช้คลาส "สุนัข" แทน "สัตว์"
Christine

3

คำจำกัดความ 1 ไม่ได้เป็นนามธรรมแน่นอน นั่นคือการอธิบายแบบจำลองให้ละเอียดยิ่งขึ้น

คำจำกัดความที่ 2 และ 3 อธิบายสิ่งเดียวกัน และทั้งคู่เป็นคำอธิบายที่ดีงามของสิ่งที่เป็นนามธรรม


นั่นคือสิ่งที่ฉันคิดว่า! abstract class Shapeฮ่า ๆ!
Robert Rocha

2

คำจำกัดความแต่ละคำเหล่านี้ใช้ได้

สิ่งที่เป็นนามธรรมคือสิ่งที่คุณมุ่งเน้นเฉพาะรายละเอียดที่สำคัญสำหรับวัตถุประสงค์ของคุณ

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

คำจำกัดความที่สองและสามดำเนินการต่อแนวคิดนี้นำไปใช้กับเอนทิตีซอฟต์แวร์

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