ฉันได้อ่านประวัติต้นของสมอลล์ทอล์คและมีการกล่าวถึง "การมอบหมาย" สองสามอย่างซึ่งทำให้ฉันถามความเข้าใจเกี่ยวกับความหมายของมัน:
แม้ว่า OOP มาจากแรงจูงใจหลายอย่าง แต่ก็เป็นศูนย์กลาง มาตราส่วนขนาดใหญ่คือการค้นหาโครงร่างโมดูลที่ดีกว่าสำหรับระบบที่ซับซ้อนที่เกี่ยวข้องกับการซ่อนรายละเอียดและมาตราส่วนขนาดเล็กคือการค้นหาการมอบหมายรุ่นที่ยืดหยุ่นมากขึ้นแล้วพยายามกำจัดมันทั้งหมด
(จากปี1960-66 - OOP ยุคแรกและแนวคิดการก่อสร้างอื่น ๆ ของอายุหกสิบเศษมาตรา I)
สิ่งที่ผมได้จาก Simula ก็คือว่าตอนนี้คุณสามารถใช้ทดแทนการผูกและการมอบหมายกับเป้าหมาย สิ่งสุดท้ายที่คุณต้องการให้โปรแกรมเมอร์ทำคือยุ่งกับสถานะภายในแม้ว่าจะถูกนำเสนอเป็นรูปเป็นร่าง แต่วัตถุที่ควรจะนำเสนอเป็นเว็บไซต์ของพฤติกรรมในระดับสูงที่เหมาะสมมากขึ้นเพื่อใช้เป็นส่วนประกอบแบบไดนามิก (... ) มันเป็นเรื่องที่โชคร้ายที่สิ่งที่เรียกว่า "การเขียนโปรแกรมเชิงวัตถุ" ในทุกวันนี้เป็นเพียงการเขียนโปรแกรมแบบเก่า ๆ โปรแกรมจำนวนมากถูกโหลดด้วยการดำเนินการ "สไตล์การมอบหมาย" ซึ่งขณะนี้ทำโดยขั้นตอนการเชื่อมต่อที่มีราคาแพงกว่า
(จากสไตล์ "เชิงวัตถุ"ส่วนที่ IV)
ฉันถูกต้องในการตีความเจตนาว่าวัตถุนั้นมีความหมายว่าเป็นส่วนหน้าและวิธีการใด ๆ (หรือ "ข้อความ") ที่มีวัตถุประสงค์เพื่อตั้งค่าตัวแปรอินสแตนซ์บนวัตถุ (เช่น "การมอบหมาย") เป็นการเอาชนะวัตถุประสงค์หรือไม่ การตีความนี้ดูเหมือนจะได้รับการสนับสนุนโดยสองข้อความในภายหลังในหัวข้อที่สี่:
เทคนิคสี่อย่างที่ใช้ร่วมกัน - สถานะถาวร, พหุสัณฐาน, การสร้างอินสแตนซ์และวิธีการตามเป้าหมายสำหรับวัตถุ สิ่งเหล่านี้ไม่จำเป็นต้องใช้ "ภาษาเชิงวัตถุ" ซึ่ง ALGOL 68 สามารถเปลี่ยนเป็นรูปแบบนี้ได้และ OOPL เพียง แต่มุ่งเน้นความคิดของนักออกแบบในทิศทางที่มีผลเฉพาะ อย่างไรก็ตามการทำ encapsulation ที่ถูกต้องนั้นเป็นพันธสัญญาที่ไม่เพียง แต่จะทำให้รัฐเป็นนามธรรมเท่านั้น แต่ยังเพื่อกำจัดคำอุปมาอุปมัยที่มุ่งเน้นจากรัฐ
...และ:
คำแถลงการมอบหมาย - แม้เป็นนามธรรม - แสดงถึงเป้าหมายในระดับต่ำมากและจะต้องมีอีกหลายอย่างเพื่อให้งานเสร็จ โดยทั่วไปเราไม่ต้องการให้โปรแกรมเมอร์ยุ่งกับสถานะไม่ว่าจะจำลองหรือไม่ก็ตาม
มันจะยุติธรรมหรือไม่ที่จะพูดว่าตัวอย่างที่ทึบแสงและไม่เปลี่ยนแปลงกำลังได้รับการส่งเสริมที่นี่? หรือมันเป็นเพียงการเปลี่ยนแปลงสถานะโดยตรงที่ท้อแท้? ตัวอย่างเช่นถ้าฉันมีBankAccount
ชั้นก็ตกลงที่จะมีGetBalance
, Deposit
และWithdraw
วิธีการเช่นข้อความ /; ตรวจสอบให้แน่ใจว่าไม่มีSetBalance
วิธี / ข้อความอินสแตนซ์ใช่หรือไม่