เราสามารถคิดถึง OOP ว่าเป็นแบบจำลองพฤติกรรมของระบบ โปรดทราบว่าระบบไม่จำเป็นต้องมีอยู่ใน 'โลกแห่งความจริง' แม้ว่าคำอุปมาอุปมัยในโลกแห่งความเป็นจริงจะมีประโยชน์ในบางครั้ง (เช่น "ท่อ", "โรงงาน" ฯลฯ )
หากระบบที่เราต้องการซับซ้อนเกินไปที่จะสร้างแบบจำลองทั้งหมดในครั้งเดียวเราสามารถแบ่งมันออกเป็นชิ้นเล็ก ๆ และสร้างโมเดล (โดเมนปัญหา) ซึ่งอาจเกี่ยวข้องกับการทำลายต่อไปเรื่อย ๆ จนกว่าเราจะได้ชิ้นที่ตรงกับพฤติกรรม (มากหรือน้อย) ของวัตถุภาษาในตัวเช่นตัวเลขสตริงรายการ ฯลฯ
เมื่อเรามีชิ้นส่วนง่าย ๆ เหล่านั้นเราสามารถรวมเข้าด้วยกันเพื่ออธิบายพฤติกรรมของชิ้นส่วนที่ใหญ่กว่าซึ่งเราสามารถรวมเข้าด้วยกันเป็นชิ้น ๆ ที่มีขนาดใหญ่ขึ้นเรื่อย ๆ จนกว่าเราจะสามารถอธิบายส่วนประกอบทั้งหมดของโดเมนที่จำเป็นสำหรับทั้ง ระบบ.
มันคือขั้นตอน "รวมกัน" ซึ่งเราอาจจะเขียนบางคลาส เราเขียนคลาสเมื่อไม่มีวัตถุที่มีอยู่ซึ่งทำงานในแบบที่เราต้องการ ตัวอย่างเช่นโดเมนของเราอาจมี "foos" คอลเลกชันของ foos ที่เรียกว่า "บาร์" และคอลเลกชันของบาร์ที่เรียกว่า "bazs" เราอาจสังเกตว่า foos นั้นง่ายพอที่จะจำลองด้วยสตริงดังนั้นเราจึงทำเช่นนั้น เราพบว่าแท่งต้องมีเนื้อหาของพวกเขาที่จะปฏิบัติตามข้อ จำกัด บางอย่างที่ไม่ตรงกับสิ่งที่ Python ให้ในกรณีนี้เราอาจจะเขียนคลาสใหม่เพื่อบังคับใช้ข้อ จำกัด นี้ บางทีบาซไม่มีลักษณะเฉพาะดังกล่าวดังนั้นเราจึงสามารถนำเสนอรายการเหล่านั้นด้วยรายการ
โปรดทราบว่าเราสามารถเขียนคลาสใหม่สำหรับส่วนประกอบเหล่านั้น (foos, bar and bazs) แต่เราไม่จำเป็นต้องทำถ้ามีบางอย่างที่มีพฤติกรรมที่ถูกต้องอยู่แล้ว โดยเฉพาะอย่างยิ่งสำหรับคลาสที่มีประโยชน์จะต้อง 'ให้' บางสิ่ง (ข้อมูลวิธีการค่าคงที่คลาสย่อย ฯลฯ ) ดังนั้นแม้ว่าเราจะมีคลาสแบบกำหนดเองหลายเลเยอร์เราต้องใช้คุณลักษณะในตัวบางอย่างในที่สุด ตัวอย่างเช่นถ้าเราเขียนคลาสใหม่สำหรับ foos มันก็อาจจะมีเพียงสตริงดังนั้นทำไมไม่ลืมคลาส foo และให้บาร์คลาสมีสตริงเหล่านั้นแทน โปรดทราบว่าคลาสนั้นเป็นวัตถุในตัวด้วยเช่นกันพวกมันเป็นเพียงวัตถุที่ยืดหยุ่นเป็นพิเศษ
เมื่อเรามีโมเดลโดเมนของเราเราสามารถนำอินสแตนซ์ของชิ้นส่วนเหล่านั้นมาจัดเรียงเป็น "การจำลอง" ของระบบเฉพาะที่เราต้องการสร้างโมเดล (เช่น "ระบบการเรียนรู้ของเครื่องสำหรับ ... ")
เมื่อเรามีการจำลองนี้เราสามารถเรียกใช้และเฮ้โอมเพี้ยงเรามีระบบการเรียนรู้เครื่องจักร (จำลอง) สำหรับ ... (หรืออะไรก็ตามที่เรากำลังสร้างแบบจำลอง)
ตอนนี้ในสถานการณ์เฉพาะของคุณคุณกำลังพยายามจำลองพฤติกรรมของส่วนประกอบ "ตัวแยกฟีเจอร์" คำถามคือมีวัตถุในตัวที่ทำตัวเหมือน "ตัวแยกคุณลักษณะ" หรือคุณจะต้องแยกมันออกเป็นสิ่งที่ง่ายกว่าหรือไม่? ดูเหมือนว่าตัวแยกคุณลักษณะจะทำตัวเหมือนกับฟังก์ชั่นออบเจ็กต์มากดังนั้นฉันคิดว่าคุณน่าจะใช้สิ่งเหล่านี้เป็นแบบจำลองของคุณได้
สิ่งหนึ่งที่ต้องจำไว้เมื่อเรียนรู้เกี่ยวกับแนวความคิดเหล่านี้คือภาษาต่าง ๆ สามารถให้คุณสมบัติและวัตถุต่าง ๆ ในตัว (และแน่นอนว่าบางคนไม่ใช้คำศัพท์เช่น "วัตถุ"!) ดังนั้นวิธีแก้ไขที่เข้าใจได้ง่ายในภาษาหนึ่งอาจมีประโยชน์น้อยกว่าในอีกภาษาหนึ่ง
ในอดีตวรรณกรรม OOP จำนวนมาก (โดยเฉพาะ "รูปแบบการออกแบบ") ได้มุ่งเน้นไปที่ Java ซึ่งค่อนข้างแตกต่างจาก Python ตัวอย่างเช่นคลาส Java ไม่ใช่วัตถุ Java ไม่ได้มีฟังก์ชั่นวัตถุจนกระทั่งเมื่อเร็ว ๆ นี้ Java มีการตรวจสอบประเภทที่เข้มงวด (ซึ่งสนับสนุนการเชื่อมต่อและคลาสย่อย) ในขณะที่ Python สนับสนุนการพิมพ์ด้วยเป็ด Java ไม่มีวัตถุโมดูล ลอย / ฯลฯ ไม่ใช่วัตถุการเขียนโปรแกรมเมตา / การวิปัสสนาใน Java ต้องใช้ "การสะท้อน" และอื่น ๆ
ฉันไม่ได้พยายามเลือกบน Java (เป็นอีกตัวอย่างหนึ่งทฤษฎี OOP มากมายหมุนรอบ Smalltalk ซึ่งแตกต่างจาก Python อีกครั้ง) ฉันแค่พยายามชี้ให้เห็นว่าเราต้องคิดอย่างรอบคอบเกี่ยวกับบริบทและ ข้อ จำกัด ในการแก้ปัญหาที่ได้รับการพัฒนาและไม่ว่าจะตรงกับสถานการณ์ที่เรากำลัง
ในกรณีของคุณวัตถุฟังก์ชั่นดูเหมือนจะเป็นทางเลือกที่ดี หากคุณสงสัยว่าทำไมแนวปฏิบัติที่ดีที่สุดไม่ได้กล่าวถึงฟังก์ชั่นของวัตถุเป็นวิธีแก้ปัญหาที่เป็นไปได้อาจเป็นเพราะแนวทางเหล่านั้นเขียนขึ้นสำหรับ Java เวอร์ชันเก่า!