ไม่วัตถุไม่จำเป็นต้องแสดงถึงเอนทิตี
ที่จริงแล้วฉันจะโต้แย้งว่าเมื่อคุณหยุดคิดเกี่ยวกับวัตถุในขณะที่หน่วยงานทางกายภาพคือเมื่อคุณได้รับผลประโยชน์ที่ OOP สัญญาไว้
นี่ไม่ใช่ตัวอย่างที่ดีที่สุด แต่การออกแบบเครื่องชงกาแฟน่าจะเป็นที่ซึ่งแสงเริ่มเข้ามาสำหรับฉัน
วัตถุเกี่ยวกับข้อความ พวกเขาเกี่ยวกับความรับผิดชอบ พวกเขาไม่ได้เกี่ยวกับรถยนต์ผู้ใช้หรือคำสั่งซื้อ
ฉันรู้ว่าเราสอน OO ด้วยวิธีนี้ แต่มันจะปรากฏให้เห็นชัดเจนหลังจากพยายามสักสองสามครั้งว่าวิธีที่น่าผิดหวังก็คือการรู้ว่าสิ่งต่าง ๆ เกิดขึ้นเมื่อคุณพยายามทำ MVC, MVVM หรือ MVWhething ไม่ว่าแบบจำลองของคุณจะกลายเป็นเรื่องน่าขันหรือตัวควบคุมของคุณทำ สำหรับการนำทางคุณควรรู้ว่าทุกสิ่งที่แตะยานพาหนะอยู่ในไฟล์ Vehicle.ext แต่เมื่อแอปพลิเคชันของคุณเกี่ยวกับยานพาหนะคุณจะต้องจบลงด้วยเส้นสปาเก็ตตี้ 3000 เส้นในไฟล์นั้น
เมื่อคุณมีข้อความใหม่ที่จะส่งคุณมีวัตถุใหม่อย่างน้อยหนึ่งรายการและอาจเป็นคู่ของพวกเขา ดังนั้นในคำถามของคุณเกี่ยวกับชุดวิธีการฉันขอยืนยันว่าคุณอาจพูดถึงกลุ่มของข้อความ และแต่ละคนอาจเป็นวัตถุของตัวเองโดยมีงานของตัวเองที่จะทำ และก็ไม่เป็นไร มันจะกลายเป็นชัดเจนเมื่อคุณแยกสิ่งต่าง ๆ ซึ่งสิ่งต่าง ๆ จริง ๆ ต้องอยู่ด้วยกัน และคุณรวมมันเข้าด้วยกัน แต่คุณจะไม่ทิ้งทุกวิธีไว้ในลิ้นชักที่เหมาะสมอย่างไม่ชัดเพื่อความสะดวกถ้าคุณต้องการที่จะสนุกกับ OO
มาพูดถึงฟังก์ชั่นถุงกัน
วัตถุอาจเป็นเพียงชุดของวิธีการและยังคงเป็น OO แต่"กฎ" ของฉันค่อนข้างเข้มงวด
คอลเลกชันควรมีความรับผิดชอบเดียวและความรับผิดชอบนั้นไม่สามารถเป็นเรื่องทั่วไปได้เช่นเดียวกับ ฉันอาจทำสิ่งต่าง ๆ เป็นส่วนหน้าของเลเยอร์บริการ แต่ฉันรู้อย่างจริงจังว่าฉันขี้เกียจเพราะเหตุผลในการนำทาง / การค้นพบไม่ใช่เพราะฉันพยายามเขียนรหัส OO
วิธีการทั้งหมดควรอยู่ในระดับที่สอดคล้องกันของสิ่งที่เป็นนามธรรม หากวิธีหนึ่งดึงวัตถุมอเตอร์และอีกวิธีหนึ่งคืนแรงม้าให้นั่นอาจเป็นเรื่องที่ไกลเกินไป
วัตถุควรทำงานกับข้อมูล "ชนิด" เดียวกัน วัตถุนี้ทำสิ่งต่าง ๆ ให้กับมอเตอร์ (สตาร์ท / หยุด) อันนี้ทำสิ่งที่มีความยาวข้อเหวี่ยงอันนี้จัดการการเรียงลำดับการจุดระเบิดอันนี้ใช้รูปแบบ html ข้อมูลนี้อาจเป็นฟิลด์บนวัตถุและดูเหมือนจะเหนียวแน่น
โดยทั่วไปฉันสร้างวัตถุประเภทนี้เมื่อฉันแปลงแปลงแต่งหรือไม่ต้องการกังวลเกี่ยวกับความไม่แน่นอน
ฉันพบว่าการมุ่งเน้นไปที่ความรับผิดชอบของวัตถุทำให้ฉันมีความสามัคคี จะต้องมีการรวมตัวกันเป็นวัตถุ แต่ไม่จำเป็นต้องมีเขตข้อมูลใด ๆ หรือพฤติกรรมมากเพื่อให้เป็นวัตถุ ถ้าฉันกำลังสร้างระบบที่ต้องการวิธีการมอเตอร์ทั้งห้าฉันจะเริ่มด้วยวัตถุต่าง ๆ 5 ตัวที่ทำสิ่งเหล่านั้น เมื่อฉันพบคนธรรมดาสามัญฉันจะเริ่มรวมสิ่งต่าง ๆ เข้าด้วยกันหรือใช้วัตถุ "ผู้ช่วยเหลือ" ทั่วไป สิ่งนี้ทำให้ฉันกลายเป็นข้อกังวลแบบเปิด / ปิด - ฉันจะแยกฟังก์ชันการทำงานนี้ออกได้อย่างไรฉันจึงไม่ต้องแก้ไขไฟล์นั้นอีกครั้ง แต่ยังคงใช้งานได้ตามต้องการ
วัตถุเกี่ยวกับข้อความ
ฟิลด์แทบไม่สำคัญกับวัตถุ - การรับและการตั้งค่าการลงทะเบียนจะไม่เปลี่ยนแปลงโลกภายนอกโปรแกรม การร่วมมือกับวัตถุอื่น ๆ จะทำให้งานสำเร็จ อย่างไรก็ตามจุดแข็งของ OO คือเราสามารถสร้าง abstractions ดังนั้นเราไม่ต้องคิดเกี่ยวกับรายละเอียดทั้งหมดในครั้งเดียว บทคัดย่อที่การรั่วไหลหรือไม่สมเหตุสมผลนั้นเป็นปัญหาดังนั้นเราจึงคิดอย่างลึกซึ้ง (มากเกินไป) เกี่ยวกับการสร้างวัตถุที่ตรงกับแบบจำลองทางจิตของเรา
คำถามสำคัญ: ทำไมวัตถุทั้งสองนี้จึงต้องพูดคุยกัน
คิดว่าวัตถุเป็นอวัยวะในบุคคล - มันมีจุดประสงค์เริ่มต้นและจะเปลี่ยนพฤติกรรมเมื่อได้รับข้อความเฉพาะที่สนใจ
ลองนึกภาพสถานการณ์ที่คุณอยู่ในทางแยกและรถกำลังมาเร็ว ในฐานะที่เป็นวัตถุสมองฉันตรวจพบแรงกดดัน ฉันบอกไฮโปทาลามัสให้ส่งฮอร์โมนคอร์ติโคโตรฟินออกมา ต่อมใต้สมองได้รับข้อความนั้นและปล่อยฮอร์โมนต่อมหมวกไตต่อมหมวกไต ต่อมหมวกไตได้รับข้อความนั้นและสร้างอะดรีนาลีน เมื่อวัตถุกล้ามเนื้อได้รับข้อความอะดรีนาลีนมันก็หดตัว เมื่อหัวใจได้รับข้อความเดียวกันมันก็เต้นเร็วขึ้น มีผู้เล่นทั้งหมดที่เกี่ยวข้องในการเริ่มต้นพฤติกรรมที่ซับซ้อนในการวิ่งข้ามถนนและเป็นข้อความที่สำคัญ วัตถุสมองรู้วิธีที่จะให้ hypothalamus ส่งการแจ้งเตือน แต่ไม่รู้โซ่ของวัตถุที่จะทำให้พฤติกรรมเกิดขึ้นในที่สุด ในทำนองเดียวกันหัวใจก็ไม่ทราบว่าอะดรีนาลีนมาจากไหน
ดังนั้นในวันนี้ ( ง่าย ) ตัวอย่างเช่นวัตถุต่อมหมวกไตเพียงต้องการที่จะรู้วิธีการใช้ ACTH และทำให้ตื่นเต้น มันไม่ต้องการฟิลด์ใด ๆ เพื่อทำสิ่งนั้น แต่มันก็ยังดูเหมือนว่าเป็นวัตถุสำหรับฉัน
ตอนนี้หากแอปพลิเคชันของเราออกแบบมาเพื่อวิ่งข้ามถนนฉันอาจไม่ต้องการต่อมใต้สมองและต่อมหมวกไต หรือฉันต้องการเพียงวัตถุต่อมใต้สมองที่ทำเพียงส่วนเล็ก ๆ ของสิ่งที่เราอาจเห็นว่าเป็นแนวคิด "แบบจำลองต่อมใต้สมอง" แนวคิดเหล่านี้มีอยู่เป็นเอนทิตี้ของแนวคิด แต่เป็นซอฟต์แวร์และเราสามารถสร้าง AdrenalineSender หรือ MuscleContractor หรืออะไรก็ตามและไม่ต้องกังวลมากเกี่ยวกับ "ความไม่สมบูรณ์" ของแบบจำลองของเรา