สิ่งที่พวกเขาเรียกว่าการเขียนโปรแกรมเชิงวัตถุก่อนที่อลันเคย์คิดค้นคำนี้


22

Alan Kay อ้างว่า "ฉันสร้างคำว่า" เชิงวัตถุ "และฉันสามารถบอกคุณได้ว่าฉันไม่มี C ++ ในใจ" แน่นอนว่าเขามีสิ่งที่อยู่ในใจคือสมอลทอล์ค แต่เขาไม่ได้เขียนโปรแกรมเชิงวัตถุ เขาได้รับแนวคิดพื้นฐานจาก Simula ดังนั้นถ้าคำนั้นยังไม่ถูกประดิษฐ์ขึ้นมาพวกเขาเรียกการเขียนโปรแกรมเชิงวัตถุใน Simula ว่าอย่างไร?

คำตอบ:


39

อันที่จริง Alan Kay ไม่มี Smalltalk ในใจเมื่อเขามากับคำว่า "การเขียนโปรแกรมเชิงวัตถุ":

ที่ยูทาห์ในช่วงหลัง พ.ย. 66 เมื่อได้รับอิทธิพลจาก Sketchpad, Simula, การออกแบบสำหรับ ARPAnet, Burroughs B5000 และพื้นหลังของฉันในชีววิทยาและคณิตศาสตร์ฉันคิดว่าสถาปัตยกรรมสำหรับการเขียนโปรแกรม อาจเป็นในปี 1967 เมื่อมีคนถามฉันว่าฉันกำลังทำอะไรอยู่และฉันก็พูดว่า: "เป็นโปรแกรมเชิงวัตถุ"

แนวคิดดั้งเดิมของมันมีส่วนต่าง ๆ ดังต่อไปนี้

  • ฉันคิดว่าวัตถุเป็นเหมือนเซลล์ชีวภาพและ / หรือคอมพิวเตอร์แต่ละเครื่องบนเครือข่ายเท่านั้นที่สามารถสื่อสารกับข้อความได้ (ดังนั้นการส่งข้อความจึงมาตั้งแต่เริ่มต้น - ใช้เวลาสักครู่เพื่อดูวิธีการส่งข้อความในภาษาโปรแกรมได้อย่างมีประสิทธิภาพเพียงพอ จะมีประโยชน์).
  • ฉันต้องการกำจัดข้อมูล B5000 เกือบทำสิ่งนี้ผ่านสถาปัตยกรรม HW ที่แทบไม่น่าเชื่อ ฉันรู้ว่าคำเปรียบเทียบเซลล์ / คอมพิวเตอร์ทั้งเครื่องจะกำจัดข้อมูลและ "<-" จะเป็นเพียงข้อความอีกโทเค็น (ฉันใช้เวลาสักครู่ในการคิดสิ่งนี้เพราะฉันคิดว่าสัญลักษณ์เหล่านี้เป็นชื่อสำหรับ ฟังก์ชั่นและขั้นตอน
  • ภูมิหลังทางคณิตศาสตร์ของฉันทำให้ฉันรู้ว่าแต่ละวัตถุอาจมีจีบราส์หลายอันที่เกี่ยวข้องกับมันและอาจมีครอบครัวของสิ่งเหล่านี้และสิ่งเหล่านี้จะมีประโยชน์มาก คำว่า "polymorphism" ถูกกำหนดไว้มากในภายหลัง (ฉันคิดว่า Peter Wegner) และมันไม่ถูกต้องนักเนื่องจากมันมาจากการตั้งชื่อของฟังก์ชันและฉันต้องการมากกว่าฟังก์ชั่นเล็กน้อย ฉันสร้างคำว่า "genericity" เพื่อจัดการกับพฤติกรรมทั่วไปในรูปแบบเสมือนพีชคณิต
  • ฉันไม่ชอบวิธีที่ Simula ฉันหรือ Simula 67 ได้รับมรดก (แม้ว่าฉันคิดว่า Nygaard และ Dahl เป็นเพียงนักคิดและนักออกแบบที่ยิ่งใหญ่) ดังนั้นฉันจึงตัดสินใจที่จะละทิ้งมรดกเป็นคุณลักษณะในตัวจนกว่าฉันจะเข้าใจได้ดีขึ้น

Smalltalk เป็นผลมาจากความคิดนี้ยืมและขยายแนวคิดของ "วัตถุ" และ "คลาส" จาก Simula ซึ่ง Simula ซึ่งสืบทอดมาจาก ALGOL ตามที่อธิบายไว้ใน"การพัฒนาภาษา Simula"โดย Kristen Nygaard และ Ole-Johan ดาห์ล (1978, หน้า 253):

ใน ALGOL บล็อก (รวมถึงขั้นตอน) จะเห็นภายนอกเป็นการดำเนินการทั่วไป โดยการแนะนำกลไกสำหรับการเรียงลำดับกึ่งขนาน ~ โดยพื้นฐานแล้วโครงสร้างเดียวกันสามารถเล่นบทบาทของกระบวนการในแบบคู่ขนานและผ่านกลไกสำหรับการตั้งชื่ออินสแตนซ์บล็อกและเข้าถึงเนื้อหาของพวกเขาพวกเขาสามารถทำงานเป็นวัตถุข้อมูลทั่วไป ประโยชน์ที่สำคัญของการรวมข้อมูลและการดำเนินงานในโครงสร้างเดียวนั้นมีอยู่แล้วเพื่อให้มีการสำรวจ

ผลลัพธ์อย่างหนึ่งของการสำรวจนี้คือการค้นพบว่า "แอตทริบิวต์ของขั้นตอน" อาจมีประโยชน์ ตัวอย่างต่อไปนี้ของคลาสของวัตถุรถยนต์ "นามธรรม" ถูกยกมาจากเอกสารนิยามภาษา (Dahl และ Nygaard 1965) นิกาย 5.3

แรงบันดาลใจเพิ่มเติมโดยเฉพาะอย่างยิ่งสำหรับการจัดกลุ่มย่อยเป็นระดับบันทึกของ CAR Hoare (หน้า 258):

แนวคิดย่อยของ Hoare (68) เป็นจุดเริ่มต้นตามธรรมชาติ แต่มีสองปัญหา:

  1. เราต้องการคลาสย่อยของกระบวนการที่มีการกระทำของตัวเองและสแต็คข้อมูลท้องถิ่นไม่เพียง แต่บันทึกข้อมูลบริสุทธิ์
  2. เราจำเป็นต้องจัดกลุ่มคุณสมบัติกระบวนการทั่วไปร่วมกันในลักษณะที่พวกเขาสามารถนำมาใช้ในภายหลังในสถานการณ์ที่แตกต่างหลากหลายที่ไม่จำเป็นต้องทราบล่วงหน้า

มีการใช้เวลามากในช่วงฤดูใบไม้ร่วงปี 2509 เพื่อพยายามปรับโครงสร้างชั้นบันทึกของ Hoare เพื่อให้ตรงกับความต้องการของเราโดยไม่ประสบความสำเร็จ การแก้ปัญหาเกิดขึ้นอย่างฉับพลันด้วยแนวคิด "คำนำหน้า" ในเดือนธันวาคม 1966 เรากำลังคิดในแง่ของบูธอะทอลล์บนสะพานด้วยคิวรถยนต์ซึ่งเป็นรถบรรทุกหรือรถโดยสาร (ตัวอย่างนี้ปรากฏขึ้นอีกครั้งใน (Dahl และ Nygaard 1968))

คำว่า "คลาส" และ "วัตถุ" ยังปรากฏในSIMULA 67 ภาษาเบสพื้นฐานโดย Ole-Johan Dahl, Bjorm Myhrhaug และ Kristen Nygaard (หน้า 4-5):

แนวคิดของบล็อกสอดคล้องกับแนวคิดที่เข้าใจง่ายของ "sub-problem" หรือ "sub-algorithm" ซึ่งเป็นหน่วยที่มีประโยชน์ของการสลายตัวในพื้นที่แอปพลิเคชันดั้งเดิม

บล็อกเป็นคำอธิบายอย่างเป็นทางการหรือ "รูปแบบ" ของโครงสร้างข้อมูลรวมและขั้นตอนวิธีและการกระทำที่เกี่ยวข้อง

...

แนวคิดการบล็อกแบบขยายถูกนำเสนอผ่านการประกาศ "คลาส" และกลไกการโต้ตอบที่เกี่ยวข้องเช่น "การอ้างอิงวัตถุ" (ตัวชี้), การเข้าถึงจากระยะไกล ", การดำเนินการ" กึ่งขนาน "และบล็อก" การต่อข้อมูล "

ชั้นเรียนมีการอธิบายรายละเอียดเพิ่มเติมในบทที่ 1.3.3 (หน้า 5):

แนวคิดใหม่ที่สำคัญใน Simula 67 คือ "วัตถุ" วัตถุคือโปรแกรมที่มีในตัวเอง (อินสแตนซ์บล็อก) ซึ่งมีข้อมูลในตัวเครื่องและการกระทำที่กำหนดโดย "การประกาศคลาส" การประกาศคลาสกำหนดรูปแบบของโปรแกรม (ข้อมูลและการกระทำ) และวัตถุที่สอดคล้องกับรูปแบบนั้นจะถูกกล่าวว่า "เป็นของคลาสเดียวกัน"

...

ดังนั้นแม้ว่าคำว่า "object oriented" ยังไม่ได้ถูกประดิษฐ์ขึ้น แต่ทั้ง "class" และ "object" ถูกใช้ในลักษณะเดียวกันกับการใช้ที่ทันสมัยก่อนที่ Alan Kay จะเริ่มพัฒนา Smalltalk ในปี 1969

Ivan Sutherlandไปจนถึงการระบุ Simula เป็นภาษาโปรแกรมเชิงวัตถุในSketchpad: ระบบการสื่อสารแบบกราฟิกของเครื่องจักร (หน้า 4), ยังตระหนักถึง CAR Hoare's, Douglas T. Ross ' , อิทธิพลของ ALGOL และ Sketchpad:

อย่างไรก็ตามความพยายามของ Sutherland ในการลบการแบ่งระหว่างผู้ใช้และโปรแกรมเมอร์ไม่ใช่เพียงระบบเดียวเท่านั้นที่ล้มเหลวในการทำเช่นนั้นหากความคิดสร้างสรรค์ก้าวกระโดดไปสู่กระบวนทัศน์การเขียนโปรแกรมใหม่ Nygaard และ Dahl's Simula [7] เป็นภาษาการเขียนโปรแกรมแรกที่รวมหลักการของการวางแนวของวัตถุ แต่การนำไปปฏิบัติในชั้นเรียนของ Sketchpad และการสืบทอดมรดกตามอินสแตนซ์

ดูเหมือนว่าจะมีอิทธิพลร่วมกันผ่านงานของดักลาสทีรอสส์ซึ่งถูกกล่าวถึงในหนังสือรับรองของวิทยานิพนธ์นี้และอ้างถึงในรายงานทางเทคนิคของ MIT Lincoln Laboratory ตามที่กล่าวไว้ รอสส์นั่งอยู่บนคณะกรรมการอัลกอล 68 กับ CAR Hoare ในช่วงกลางทศวรรษ 1960 ที่งานก่อนหน้าของเขาในโครงสร้างข้อมูลที่เรียกว่าเพล็กซ์ (เรียกว่าเพล็กซ์) มีอิทธิพลต่อแนวคิดของ Hoare ในประเภทข้อมูลนามธรรม [3] เป็นที่มาของกลไกนิยามคลาสใน Simula [7]

โครงการ Dynabook น้ำเชื้อของ Alan Kay ซึ่งนำไปสู่ ​​Xerox Star และการระเบิดของความสนใจในการเขียนโปรแกรมเชิงวัตถุผ่านภาษา Smalltalk ของเขาได้รับอิทธิพลโดยตรงจาก Sketchpad เคย์เขียนถึงข้อเท็จจริงที่ว่าต้นกำเนิดของสมอลล์ทอล์คปรากฏตัวในลักษณะบังเอิญบนโต๊ะทำงานของเขาทั้งคู่เป็นเทปการแจกจ่ายซิมูล่าและสำเนาของสเกตช์ช์วิทยานิพนธ์ของซูทเทอร์แลนด์ [5] เคย์จำได้ว่าทั้งสองระบบนั้นมีพื้นฐานมาจากแนวคิดประเภทเดียวกัน (เห็นได้ชัดว่าได้มาจากสองเส้นทางที่แตกต่างจากเพล็กซ์ของรอส) และสิ่งเหล่านี้สามารถสร้างพื้นฐานของระบบการเขียนโปรแกรมที่ใช้งานได้อย่างกว้างขวาง ในการเปรียบเทียบเส้นทางที่มีอิทธิพลทั้งสองนี้ Simula เป็นโครงการที่ใหญ่กว่า Sketchpad ซึ่งได้รับการยอมรับอย่างถูกต้องว่าเป็นภาษาโปรแกรมเชิงวัตถุตัวแรก

อย่างไรก็ตาม Alan Kay เห็นได้ชัดว่า Smalltalk เป็นภาษาเชิงวัตถุตัวแรก :

แม้ว่ามันจะมีบรรพบุรุษที่สูงส่ง แต่การมีส่วนร่วมของ Smalltalk เป็นกระบวนทัศน์การออกแบบใหม่ - ซึ่งฉันเรียกว่า object-oriented - เพื่อโจมตีปัญหาใหญ่ของโปรแกรมเมอร์มืออาชีพ การออกแบบเชิงวัตถุเป็นความพยายามที่ประสบความสำเร็จในการปรับปรุงประสิทธิภาพของการสร้างแบบจำลองระบบไดนามิกที่ซับซ้อนมากขึ้นและความสัมพันธ์กับผู้ใช้ที่เกิดขึ้นจากการระเบิดของซิลิคอน

ฉันคิดว่ามีการถกเถียงกันไม่มากนัก

ในการตอบคำถามของคุณในที่สุด: แนวคิดหลักของการวางแนววัตถุบางอย่างเกิดขึ้นบน Simula และในภาษาก่อนหน้านี้เช่น Algol และ LISP แต่กระบวนทัศน์นั้นไม่ได้เป็นเช่นนั้นจึงไม่จำเป็นต้องมีชื่อจริง

Smalltalk ได้รับการออกแบบโดยคำนึงถึงการวางแนวของวัตถุอย่างน้อยที่สุดสิ่งที่Alan Kay คิดว่าเป็นการวางแนวของวัตถุ :

OOP สำหรับฉันหมายถึงเฉพาะการส่งข้อความการเก็บรักษาในท้องถิ่นและการป้องกันและการซ่อนกระบวนการของรัฐและการผูกมัดปลายสุดของทุกสิ่ง มันสามารถทำได้ใน Smalltalk และ LISP อาจมีระบบอื่น ๆ ที่เป็นไปได้ แต่ฉันไม่ทราบ

สถาปัตยกรรมอาจดูเหมือนเป็นการรวมตัวกันของแนวคิดก่อนหน้านี้ แต่แนวคิดหลักของมันถูกนำมาใช้โดย Smalltalk ดังนั้นการทำเครื่องหมายการดำเนินการครั้งแรกของกระบวนทัศน์


2
+1 ตามปกติคำตอบที่ยอดเยี่ยม Yannis! ฉันเรียนรู้จากนี้เล็กน้อย
Jonathan Henson

6
จริงๆแล้วมีการถกเถียงกันมากมายและมีเหตุผลที่ดี แม้ว่า Alan Kay จะอ้างสิทธิ์ในการอ้างสิทธิ์ใน "กระบวนทัศน์ใหม่" ด้วยตนเอง แต่ก็ไม่มีวิธีใดที่จะนิยาม "object oriented" ซึ่งรวมถึง Smalltalk แต่ไม่รวม Simula แนวคิด "ทุกอย่างเป็นวัตถุ" มีอยู่ในการใช้งานบางอย่าง (และส่วนใหญ่ก็เป็นแนวคิดใน Smalltalk ด้วยเช่นกันเมื่อการปรับให้เหมาะสมวัตถุจำนวนเต็มขนาดเล็กมีการแสดงที่ค่อนข้างจะแยกไม่ออกจากสิ่งที่ C หรือ Pascal ใช้)
Jerry Coffin

1
@JerryCoffin ฉันไม่เห็นด้วยว่าแนวคิดและหลักการส่วนใหญ่อยู่ที่นั่นไม่มีอะไรใหม่ภายใต้ดวงอาทิตย์บนประวัติศาสตร์ยุคแรกของ Smalltalk Kay แม้จะอ้างอิง Plato เป็นแรงบันดาลใจในการวางแนววัตถุท่ามกลางอิทธิพลอื่น ๆ โดยส่วนตัวแล้วฉันจะคิดว่าสมอลล์ทอล์คนั้นได้นำกระบวนทัศน์นี้มาใช้เพราะเป็นครั้งแรกที่ได้รับการออกแบบโดยคำนึงถึงกระบวนทัศน์ในขณะที่การใช้งานก่อนหน้านี้เกี่ยวกับแนวคิดที่เกี่ยวข้องที่คุณสมบัติหลักหรือรอง แต่ไม่ใช่ปรัชญาการขับขี่ ออกมาเป็นภาษา
yannis

1
@JerryCoffin (ต่อ ... ) แต่อย่างไรก็ตามมันก็เป็นเขตสงครามเพลิงและฉันไม่คิดว่ามันจะสำคัญ ฉันคิดว่าคำกล่าวอ้างของ Sutherland ที่ฉันได้นำเสนอมานั้นมีความจริงที่ว่าไม่ใช่ทุกคนที่เห็นด้วยว่า Kay "ประดิษฐ์" กระบวนทัศน์และความเห็นส่วนตัวของฉันเกี่ยวกับเรื่องนี้ไม่มีอะไรมากไปกว่าเชิงอรรถ
yannis

5
ที่จริงแล้วแนวคิดหลักไม่ใช่ "ทุกเอนทิตีเป็นวัตถุ" แต่ "ทุกการกระทำคือการส่งข้อความ" Alan Kay ยังบอกด้วยว่าเขารู้สึกเสียใจที่ตั้งชื่อมันว่า "object-oriented" และบางอย่างเช่น "message-oriented" จะเป็นคำที่ดีกว่า
Jörg W Mittag
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.