การห่อหุ้มและการออกแบบโปรแกรม
แนะนำใหม่| English | ความหมาย |
|---|---|
| abstraction/əbˈstrækʃn/ | การ추่นาม |
| procedural abstraction/prəˈsiːdʒərəl əbˈstrækʃn/ | การ 추่นามแบบขั้นตอน |
| method decomposition/ˈmeθəd ˌdiːkɒmpəˈzɪʃn/ | การแยกวิธี |
การซ่อนรายละเอียด
- การห่อหุ้ม (Abstraction) หมายถึง การซ่อนรายละเอียด เพื่อโฟกัสที่แนวคิดหลัก
- คุณขับรถโดยใช้พวงมาลัยและแป้นเหยียบ — ไม่ใช่ด้วยการรู้รายละเอียดภายในของเครื่องยนต์
- ในโค้ด การห่อหุ้มช่วยให้คุณใช้สิ่งใดสิ่งหนึ่งโดยดูที่ สิ่งที่มันทำได้ ไม่ใช่ วิธีการ
- นี่คือแนวคิดที่สำคัญที่สุดสำหรับการจัดการโปรแกรมขนาดใหญ่
การห่อหุ้มแบบขั้นตอน
- การห่อหุ้มแบบขั้นตอน บรรจุพฤติกรรมลงใน เมธอด ที่คุณเรียกใช้โดยชื่อ
- เมื่อเขียนเสร็จแล้ว
average(scores)ถูกใช้เพื่อผลลัพธ์ — โค้ดด้านในจะถูกซ่อน - ชื่อเมธอดและพารามิเตอร์ (อินเทอร์เฟซของมัน) เป็นสิ่งที่ผู้เรียกใช้ต้องการทั้งหมด
- นี่คือวิธีที่คุณใช้เมธอดจากไลบรารีอย่าง
Math.sqrtพอดี
การแยกย่อยเมธอด
- แยกปัญหาใหญ่ออกเป็นพฤติกรรมย่อยๆ แต่ละอันเป็นเมธอดของตัวเอง — การแยกย่อยเมธอด
- "ประมวลผลคำสั่งซื้อ" →
checkStock(),chargeCard(),ship(). - เมธอดเล็กๆ ที่มีชื่อบ่งบอกง่ายต่อการเขียน ทดสอบ และนำกลับมาใช้ใหม่
- เมธอดหลักจึงอ่านเหมือนบทสรุประดับสูง
การวางแผนคลาส
- ในการออกแบบ คลาส ตัดสินใจว่า ข้อมูล ที่มันมีคืออะไร และ พฤติกรรม ที่มอบให้คืออะไร
- A
Studentมีข้อมูล (ชื่อ, คะแนน) และพฤติกรรม (addScore,average) - การออกแบบที่ดีจัดกลุ่มข้อมูลและพฤติกรรมที่เกี่ยวข้องเข้าด้วยกัน
- การวางแผนล่วงหน้าทำให้การสร้าง อ่าน และการนำกลับมาใช้โปรแกรมง่ายขึ้น
Interface หรือ implementation?
Abstraction ซ่อนวิธีการทำงานไว้เบื้องหลังสิ่งที่ต้องการอย่างเรียบง่าย เรียงลำดับแต่ละรายการ
การห่อหุ้มเป็นเรื่องของอินเทอร์เฟซ ไม่ใช่การนำไปใช้ ผู้เรียกใช้ average(scores) ต้องการเพียง ชื่อ, อินพุต, และผลลัพธ์ ของมัน — ไม่ต้องรู้ลูปด้านใน ออกแบบแต่ละเมธอดให้ทำ งานเดียวชัดเจน (การแยกย่อยเมธอด); เมธอดที่ทำห้าอย่างที่ไม่เกี่ยวข้องกันยากที่จะตั้งชื่อ ทดสอบ และนำกลับมาใช้ วางแผนคลาสเป็น ข้อมูล + พฤติกรรม ก่อนเขียนโค้ด
การออกแบบคลาส Student:
- ข้อมูล: ชื่อของนักเรียนและรายการคะแนน
- พฤติกรรม:
addScore(s),average(),highest() - ผู้เรียกใช้ใช้
student.average()เพื่อผลลัพธ์ — การคำนวณถูกซ่อนอยู่ด้านใน
การห่อหุ้ม ซ่อนรายละเอียดเพื่อโฟกัสที่แนวคิดหลัก; การห่อหุ้มแบบขั้นตอน ช่วยให้คุณใช้ เมธอด ได้โดยดูที่ สิ่งที่มันทำได้ ไม่ใช่ วิธีการ การแยกย่อยเมธอด แยกปัญหาใหญ่ออกเป็นพฤติกรรมเล็กๆ ที่มีชื่อบ่งบอก ออกแบบ คลาส โดยการตัดสินใจ ข้อมูล และ พฤติกรรม ของมัน — การออกแบบที่ดีทำให้โค้ดสร้าง อ่าน และนำกลับมาใช้ได้ง่ายขึ้น
Abstraction อธิบายได้ดีที่สุดว่าเป็น...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Abstraction ซ่อนวิธีการทำงานเพื่อให้คุณสามารถใช้สิ่งที่มันทำได้
Procedural abstraction ทำให้คุณใช้ method ได้โดยการ...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คุณเรียก它以ชื่อและอินพุต ไม่ใช่โดยรายละเอียดภายใน
การแบ่งปัญหาใหญ่ให้เป็นพฤติกรรมเล็กๆ ที่มีชื่อ (methods) เรียกว่า method ___ (คำเดียว)
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Method decomposition แบ่งงานออกเป็น methods ที่มุ่งเน้น
เมื่อออกแบบ class คุณควรตัดสินใจเรื่องอะไร?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Design是关于 data + behaviors grouping logically — not addresses.
การออกแบบโปรแกรมที่ดีทำให้โปรแกรมสร้าง อ่าน และนำกลับมาใช้ได้ง่ายขึ้น
Difficulty 1/5 · 100 coins + a small bonus on first completion today
นั่นคือประโยชน์ของการ hibernation และการ decompose