23 คะแนน โดย alstjr7375 2021-12-14 | 6 ความคิดเห็น | แชร์ทาง WhatsApp
  • ความแตกต่างที่ใหญ่ที่สุดระหว่างคลาสกับโปรโตไทป์คือวิธีการสร้างอ็อบเจ็กต์ [คลาส -> อินสแตนซ์ vs อ็อบเจ็กต์ -> อ็อบเจ็กต์ที่ถูกคัดลอก].

  • จุดร่วมที่ใหญ่ที่สุดคือแนวคิดเชิงวัตถุ โดยแบ่งโปรแกรมออกเป็นหน่วยที่เรียกว่าอ็อบเจ็กต์และทำให้มีปฏิสัมพันธ์กัน.

  • วิธีที่ง่ายที่สุดในการทำ encapsulation ซึ่งเป็นหัวใจของ object-oriented ให้ดี คือการทำ abstraction ให้ดี.

    • abstraction สามารถแบ่งมุมมองได้เป็น คุณลักษณะที่เน้นข้อมูล (OOP แบบดั้งเดิม), รูปแบบ (type), สถานะ (data-driven design) และมิติที่เน้นความสัมพันธ์อย่าง เวลา (procedural), พฤติกรรม (functional), นิยาม (logical), สถานการณ์ (domain-driven design, AOP) เป็นต้น.

    • เพื่อให้จัดหมวดหมู่และออกแบบได้ดี หากมีความเข้าใจในหมวดหมู่ที่หลากหลายซึ่งช่วยให้ตระหนักถึงรูปแบบของการคิดก็จะเป็นประโยชน์ [เช่น 4 หมวด 12 หัวข้อของคานท์].

  • ปรัชญาและกระบวนทัศน์

    • เชิงกระบวนการ: เวลาเป็นปัจจัยที่ส่งผลต่อ abstraction ส่วนใหญ่ และไวยากรณ์ที่ทำให้ context ปะปนกันอย่าง Goto นั้นไม่ดี.

    • เชิงฟังก์ชัน: เพราะพยายามแสดงออกในรูปของพฤติกรรม จึงมีความสัมพันธ์ลึกซึ้งกับ type (รูปแบบ).

    • เชิงตรรกะ: สร้างตรรกะจากข้อเท็จจริงและกฎ และสามารถได้ผลลัพธ์ของ predicate logic ผ่านการทำ query.

    • OOP แบบดั้งเดิม: เข้าใจได้ง่ายตามสัญชาตญาณ แต่เป็นไปไม่ได้ที่จะค้นหาคุณสมบัติที่สมบูรณ์แบบทั้งหมด.

    • การออกแบบที่ขับเคลื่อนด้วยข้อมูล: ต่างจากเชิงฟังก์ชันที่พยายามจัดการสถานะของลอจิก แนวทางนี้พยายามลดสถานะภายในตัวคอมพิวเตอร์เอง ช่วยเพิ่ม cache hit และนำไปสู่ประสิทธิภาพที่ดีขึ้น.

    • การออกแบบที่ขับเคลื่อนด้วยโดเมน: ต่างจาก OOP แบบดั้งเดิมตรงที่ออกแบบแตกต่างกันไปตามโดเมนและบริบท (คล้ายกับ picture theory-use semantics) และหากใช้ AOP สำหรับทำ dependency injection ของ subdomain ก็จะทำให้การนำไปใช้สะดวกขึ้น.

  • MVP

    • การทำโปรโตไทป์: ต้องมีฟังก์ชันสำคัญรวมอยู่ด้วย และอาจแตกต่างกันไปตามมุมมองของดีไซเนอร์ นักพัฒนา การเงิน ฯลฯ เป็นข้อกำหนดทั่วไปตามระดับความคล้ายคลึงกับผลิตภัณฑ์ที่หลายคนมองว่าสำคัญ.

    • MVP: ต้องสามารถใช้งานได้จริงโดยมีระดับความสมบูรณ์ขั้นต่ำที่รับประกัน และควรออกแบบให้คล้ายกับผลิตภัณฑ์ที่มองว่าเป็นขั้นสุดท้าย.

  • เชิงวัตถุและภาวะการมีอยู่

    • เพลโต: เสนอว่าคุณลักษณะสากลนั้นไม่เปลี่ยนแปลงและมีอยู่จริง ส่วนสิ่งมีอยู่เฉพาะแต่ละอย่างดำรงอยู่โดยขาดคุณลักษณะสากลเหล่านั้น.

    • อริสโตเติล: เสนอว่ามีเพียงปัจเจกแต่ละหน่วยเท่านั้นที่เป็นสสารพื้นฐาน ส่วนสิ่งสากลเป็นเพียงภาพแทนที่ปรากฏในความสัมพันธ์แบบลำดับชั้น/การรวมอยู่ภายใน.

    • คลาส-อินสแตนซ์คล้ายกับทฤษฎีอีเดียของเพลโต ส่วนโปรโตไทป์-อ็อบเจ็กต์ที่ถูกคัดลอกคล้ายกับสสารนิยมของอริสโตเติล.

เป้าหมายที่ตั้งใจจะเขียนในตอนแรกคือ

  • OOP แบบดั้งเดิมคล้ายกับ picture theory ส่วนการออกแบบที่ขับเคลื่อนด้วยโดเมนคล้ายกับ use semantics.

  • คลาส-อินสแตนซ์คล้ายกับทฤษฎีอีเดียของเพลโต ส่วนโปรโตไทป์-อ็อบเจ็กต์ที่ถูกคัดลอกคล้ายกับสสารนิยมของอริสโตเติล.

มีอยู่สองข้อ แต่กลายเป็นว่ายาวกว่าที่คิดมากครับ.

ถ้าไม่มีพื้นความรู้มาก่อนเลย อาจรู้สึกว่าอ่านค่อนข้างยากนิดหน่อย.

6 ความคิดเห็น

 
alstjr7375 2021-12-14

ทำไม JavaScript ถึงเลือกใช้ prototype

https://th.news.hada.io/topic?id=5532

เป็นบทความที่เขียนขึ้นเพราะนึกอะไรบางอย่างได้ระหว่างอ่านลิงก์นี้

 
laeyoung 2021-12-14

ลองอ่านไปพร้อมกับการเปรียบเทียบแบบในบทความนี้กันครับ!

 
alstjr7375 2021-12-14

ขอบคุณมากครับ!!

 
alstjr7375 2021-12-14

เอ๊ะ? ดูเหมือนว่าจะใส่สเปซหลายตัวไม่ได้สินะ ฮือฮือ

 
xguru 2021-12-14

อ๋อ มีบางกรณีที่ตั้งใจเว้นพื้นที่ไว้ด้วย..

เลยตั้งค่าให้ลดบรรทัดว่างและช่องว่างหลาย ๆ ช่องลงแล้ว เศร้า

 
alstjr7375 2021-12-14

เข้าใจแล้วครับ

คราวหน้าตอนโพสต์คงต้องคำนึงถึงเรื่องนี้ด้วยนะครับ