ฉันเข้าใจแนวคิดของวัตถุและในฐานะที่เป็นโปรแกรมเมอร์ Java ฉันรู้สึกว่ากระบวนทัศน์ OO นั้นค่อนข้างเป็นธรรมชาติสำหรับฉันในทางปฏิบัติ
อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันพบว่าตัวเองกำลังคิด:
รอสักครู่สิ่งที่เป็นประโยชน์จริงของการใช้วัตถุมากกว่าการใช้คลาสคงที่ (มีการห่อหุ้มที่เหมาะสมและการปฏิบัติ OO)?
ฉันนึกถึงประโยชน์สองประการของการใช้วัตถุ (ทั้งสองอย่างมีความสำคัญและมีประสิทธิภาพ):
ความแตกต่าง: ช่วยให้คุณสามารถสลับการทำงานแบบไดนามิกและยืดหยุ่นในช่วงรันไทม์ ยังอนุญาตให้เพิ่ม 'ส่วน' การทำงานใหม่และทางเลือกให้กับระบบได้อย่างง่ายดาย ตัวอย่างเช่นหากมี
Car
คลาสที่ออกแบบมาเพื่อทำงานกับEngine
วัตถุและคุณต้องการเพิ่ม Engine ใหม่ให้กับระบบที่รถยนต์สามารถใช้ได้คุณสามารถสร้างEngine
คลาสย่อยใหม่ และเพียงส่งวัตถุของคลาสนี้ไปยังCar
วัตถุโดยไม่ต้องCar
เปลี่ยนอะไรเกี่ยวกับ และคุณสามารถตัดสินใจได้ในระหว่างรันไทม์ความสามารถในการ 'ผ่านฟังก์ชันการทำงานรอบ ๆ ': คุณสามารถส่งผ่านวัตถุรอบ ๆ ระบบแบบไดนามิก
แต่มีข้อได้เปรียบเพิ่มเติมใด ๆ กับวัตถุที่อยู่เหนือคลาสแบบคงที่
บ่อยครั้งที่ฉันเพิ่ม 'ส่วน' ใหม่ลงในระบบฉันทำได้โดยการสร้างคลาสใหม่และสร้างอินสแตนซ์ของวัตถุจากมัน
แต่เมื่อเร็ว ๆ นี้เมื่อฉันหยุดและคิดเกี่ยวกับมันฉันรู้ว่าชั้นคงที่จะทำเช่นเดียวกับวัตถุในสถานที่จำนวนมากที่ฉันมักจะใช้วัตถุ
ตัวอย่างเช่นฉันกำลังทำงานเพื่อเพิ่มกลไกการบันทึก / โหลดไฟล์ลงในแอพของฉัน
ด้วยวัตถุบรรทัดของรหัสโทรจะมีลักษณะเช่นนี้: Thing thing = fileLoader.load(file);
ด้วยคลาสแบบคงที่มันจะมีลักษณะเช่นนี้: Thing thing = FileLoader.load(file);
ความแตกต่างคืออะไร?
บ่อยครั้งที่ฉันไม่สามารถนึกถึงเหตุผลในการสร้างอินสแตนซ์ของวัตถุได้เมื่อสแตติกคลาสธรรมดาจะทำหน้าที่เหมือนกัน แต่ในระบบ OO คลาสสแตติกจะค่อนข้างหายาก ดังนั้นฉันจะต้องหายไปบางสิ่งบางอย่าง
มีข้อได้เปรียบเพิ่มเติมใด ๆ กับวัตถุอื่นจากทั้งสองที่ฉันระบุไว้? กรุณาอธิบาย.
แก้ไข:เพื่อชี้แจง ฉันค้นหาวัตถุที่มีประโยชน์มากเมื่อสลับการใช้งานหรือส่งผ่านข้อมูล ตัวอย่างเช่นฉันเขียนแอพที่แต่งทำนอง MelodyGenerator
มีคลาสย่อยหลายคลาสที่สร้างท่วงทำนองต่างกันและวัตถุของคลาสเหล่านี้สามารถเปลี่ยนได้ (รูปแบบกลยุทธ์)
ท่วงทำนองก็เป็นวัตถุเช่นกันเพราะมันมีประโยชน์ที่จะผ่านมันไป ดังนั้นคอร์ดและเครื่องชั่งก็เป็นเช่นนั้น
แต่สิ่งที่เกี่ยวกับส่วน 'คงที่' ของระบบ - ที่จะไม่ถูกส่งไปรอบ ๆ ? ตัวอย่างเช่น - กลไก 'บันทึกไฟล์' เหตุใดฉันจึงควรนำไปใช้ในวัตถุและไม่ใช่คลาสแบบสแตติก
FileLoader
สิ่งที่อ่านจากซ็อกเก็ต หรือเยาะเย้ยสำหรับการทดสอบ? หรือไฟล์ที่เปิดไฟล์ zip?
System.Math
ใน. NET เป็นตัวอย่างของบางสิ่งที่มีความหมายมากกว่าคลาสแบบสแตติก: คุณไม่จำเป็นต้องสลับมันหรือเยาะเย้ยมันและไม่มีการดำเนินการใด ๆ ฉันไม่คิดว่าตัวอย่าง 'การบันทึก' ของคุณจะเหมาะกับใบเรียกเก็บเงินนั้น
Thing
อะไร