อันที่จริง 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) เป็นจุดเริ่มต้นตามธรรมชาติ แต่มีสองปัญหา:
- เราต้องการคลาสย่อยของกระบวนการที่มีการกระทำของตัวเองและสแต็คข้อมูลท้องถิ่นไม่เพียง แต่บันทึกข้อมูลบริสุทธิ์
- เราจำเป็นต้องจัดกลุ่มคุณสมบัติกระบวนการทั่วไปร่วมกันในลักษณะที่พวกเขาสามารถนำมาใช้ในภายหลังในสถานการณ์ที่แตกต่างหลากหลายที่ไม่จำเป็นต้องทราบล่วงหน้า
มีการใช้เวลามากในช่วงฤดูใบไม้ร่วงปี 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 ดังนั้นการทำเครื่องหมายการดำเนินการครั้งแรกของกระบวนทัศน์