มีภาษาการเขียนโปรแกรมเชิงวัตถุใด ๆที่ไม่ได้ขึ้นอยู่กับกระบวนทัศน์ของชั้นเรียนหรือไม่?
มีภาษาการเขียนโปรแกรมเชิงวัตถุใด ๆที่ไม่ได้ขึ้นอยู่กับกระบวนทัศน์ของชั้นเรียนหรือไม่?
คำตอบ:
เท่าที่ผมรู้ว่าตัวเองเป็นภาษาเดิมที่คิดค้น "ชั้นฟรี" กระบวนทัศน์บนพื้นฐานของต้นแบบ มันมีอยู่แล้ว (ในระยะทดลอง) ในช่วงทศวรรษ 1980 และผลักดันการใช้งานต้นแบบอันงดงามของSmalltalkไปสู่รูปแบบสุดขั้วซึ่งชั้นเรียนจะถูกกำจัดอย่างสมบูรณ์
มันมีอิทธิพลต่อภาษา OO "คลาสฟรี" อื่น ๆ ทั้งหมดที่ฉันรู้:
ภาษาอย่างจาวาสคริปต์นั้นมีพื้นฐานมาจากต้นแบบที่ซึ่งพฤติกรรมนั้นสามารถนำกลับมาใช้ใหม่ได้โดยการโคลนวัตถุที่มีอยู่ บทความ Wikipedia ที่ฉันเชื่อมโยงไปถึงบ่งชี้ว่า Lua, ActionScript และภาษาอื่น ๆ จำนวนมากเป็นไปตามกระบวนทัศน์นี้
ภาษาการเขียนโปรแกรมเชิงวัตถุที่เป็นที่นิยมมากที่สุดในโลกไม่มีคลาสเรียกว่า Javascript และเป็นแบบตัวอย่าง: http://en.wikipedia.org/wiki/Prototype-based_programming
การวางแนววัตถุเป็นคำศัพท์สำหรับแนวคิดที่สำคัญหลายประการที่เกิดขึ้นเพียงบางส่วนเท่านั้น ยกตัวอย่างเช่นการสืบทอดสามารถประกาศเป็นกรณี ๆ ไประหว่างกรณีมากกว่าระหว่างคลาสหรือทั้งชั้นสามารถแสดงโดยprototype
วัตถุที่เป็นรูปธรรม ตามที่โทมัสเขียน เป็นเรื่องปกติที่จะแยกคำอธิบายโครงสร้างออกจากการสร้างอินสแตนซ์ ในทำนองเดียวกันการโยงล่าช้าหมายความว่าวัตถุที่มีวิธีการเดียวกันในนามไม่จำเป็นต้องทำสิ่งเดียวกันเมื่อมีการเรียกใช้และการตัดสินใจถูกทำขึ้นที่รันไทม์ นั่นก็เป็นไปได้เช่นกันด้วยวิธีการที่ใช้ต้นแบบ และการห่อหุ้มนั้นมีความเป็นอิสระอย่างสมบูรณ์ว่าวัตถุของคุณเป็นอินสแตนซ์ของคลาสที่ประกาศหรือไม่
ที่กล่าวว่าภาษา OO ส่วนใหญ่อยู่ในค่ายตามระดับชั้นเรียนอย่างมั่นคง แต่ถึงกระนั้นก็มีสำนวนที่พร่ามัวสาย: การออกแบบโดเมนขับเคลื่อนมักจะนำไปสู่ระบบที่ตัวตนของวัตถุเฉพาะมีความสำคัญมากกว่าแผนภาพคลาสคงที่และมัณฑนากรอนุญาตให้วัตถุในชั้นเรียนหรืออินเตอร์เฟซเดียวกันมีมาก พฤติกรรมที่แตกต่าง
Fortressเป็นภาษาเชิงวัตถุตามลักษณะแทนที่จะเป็นคลาส ความแตกต่างส่วนใหญ่ในองค์ประกอบการใช้งาน พฤติกรรมของวัตถุ (คำจำกัดความวิธี) ยังคงถูกกำหนดโดยการประกาศ ณ จุดเฉพาะในข้อความของโปรแกรม ดังนั้นในแง่นั้นมันคล้ายกับระบบที่ใช้ในระดับเดียวกัน
มีวัตถุแบบแคลคูลัส (โดย Cardelli ฉันคิดว่า) ที่เป็นวัตถุล้วนๆ ทุกวิธีเป็นสมาชิกอินสแตนซ์ คุณสร้างวัตถุใหม่โดยการนำเนื้อหาของวัตถุที่มีอยู่และเพิ่มลบหรือแทนที่สมาชิกบางส่วน มันแตกต่างจากต้นแบบเล็กน้อยเนื่องจากวัตถุใหม่ไม่มีลิงก์ไปยังวัตถุเก่าเพียงเนื้อหาบางส่วน
IIRC เป็นไปได้ที่จะตั้งโปรแกรมในลักษณะที่คล้ายกันโดยใช้ Python และภาษา hashtable ที่มุ่งเน้นอื่น ๆ : คุณสามารถเพิ่มฟังก์ชั่นในฐานะสมาชิกอินสแตนซ์แล้วเรียกมันว่าเป็นวิธีการ
Ada จากการปรับปรุงในปี 1995 Ada เป็นแบบเชิงวัตถุ แต่ไม่เหมือนกับภาษา OO อื่น ๆ มากมายมันไม่ได้รวมประเภทและโมดูลเชิงวัตถุไว้ในโครงสร้างเดียวที่เรียกว่า "คลาส" แทนที่จะประกาศประเภทเป็น "class Foo" และการประกาศเมธอดที่เกี่ยวข้องทั้งหมดภายในการประกาศคลาสคุณต้องประกาศแพ็คเกจและประกาศประเภท (เป็นrecord
) และสิ่งอื่น ๆ ภายในแพ็คเกจ ไม่ใช่ "คลาสฟรี" ในลักษณะที่ภาษาอื่น ๆ พูดถึง แต่เป็นวิธีการจัดระเบียบสิ่งต่าง ๆ เล็กน้อย
คุณสมบัติเชิงวัตถุของ Ada 95 ถูกเพิ่มเข้ามาในภาษาที่มีอยู่ในปี 1983; มันขยายระเบียนที่มีอยู่และสร้างแพ็คเกจเพื่อสนับสนุนการสืบทอดและ
Ioเป็นภาษาเชิงวัตถุต้นแบบอีกประเภทหนึ่ง จริง ๆ แล้วมันได้แรงบันดาลใจจากหลายภาษาที่ได้กล่าวไปแล้วในคำตอบอื่น ๆ
Io เป็นภาษาการเขียนโปรแกรมแบบไดนามิก ความคิดใน Io ส่วนใหญ่ได้รับแรงบันดาลใจจาก Smalltalk (ค่าทั้งหมดเป็นวัตถุ), Self (ต้นแบบ - based), NewtonScript (การสืบทอดที่แตกต่าง), Act1 (นักแสดงและฟิวเจอร์สสำหรับการทำงานพร้อมกัน), Lisp (รหัสคือ Lua (เล็กฝังได้)
Erlang และใช่ Erlang เป็นภาษาเชิงวัตถุเนื่องจากเป็นไปตามคำนิยามของ OO ทั้งสามข้อ