มีทฤษฎี / นามธรรมหลัง OOP หรือไม่?


13

ฟังก์ชั่นการเขียนโปรแกรมมีแลมบ์ดาแคลคูลัสที่สง่างามและตัวแปรในฐานะทฤษฎีสำรอง มีสิ่งนี้สำหรับ OOP หรือไม่? นามธรรมสำหรับแบบจำลองเชิงวัตถุคืออะไร


5
โหลดและโหลด คุณลองใช้ Google แล้วหรือยัง ตัวอย่างเช่นมีชุดการประชุมเชิงปฏิบัติการที่เรียกว่า FOOL อุทิศให้กับมูลนิธิของภาษาเชิงวัตถุที่ทำงานมาตั้งแต่ปี 1993 ซึ่งเป็นเพียงรอยขีดข่วนพื้นผิว
Dave Clarke

@DaveClarke ฉันไม่ค่อยเห็นด้วย แลมบ์ดาแคลคูลัสเป็นรากฐานสำหรับการเขียนโปรแกรมการทำงานในแง่ที่แม่นยำมาก ยกตัวอย่างเช่นรายงานของ Haskell กล่าวว่าภาษา Haskell ทั้งหมดนั้นสามารถนำมาพิจารณาเป็นเพียงประโยคน้ำตาลสำหรับภาษาหลักที่เทียบเท่ากับแคลคูลัสแลมบ์ดาที่พิมพ์ ฉันไม่รู้ภาษาเชิงวัตถุใด ๆ ที่ทำให้มีการอ้างสิทธิ์คล้ายกันกับแคลคูลัส ดังนั้นคุณถูกต้องว่ามี "โหลด" แต่มันไม่ถูกต้อง
Uday Reddy

@UdayReddy: นี่อาจเป็นเพราะความร่ำรวยของภาษาเชิงวัตถุ
Dave Clarke

1
@DaveClarke ความอุดมสมบูรณ์ของหัวข้ออาจหมายถึง (1) มันเป็นคำศัพท์ที่ดี (2) เราไม่เข้าใจหัวข้อที่เพียงพอสำหรับการสร้างฉันทามติ (3) เรากำลังผสมหลายประเด็นที่มีมุมฉากค่อนข้างมาก . แม้ว่าฉันจะไม่ได้ติดตามวรรณกรรม (ล่าสุด) อย่างใกล้ชิดในการเขียนโปรแกรม OO ฉันมักจะรู้สึกว่ามันเป็นปัญหาการผสมโดยไม่ต้องกังวลมากเกี่ยวกับเรื่องนี้ (แน่นอนว่าสิ่งนี้ใช้กับภาษามากกว่างานทางทฤษฎี) ปัญหาเหล่านี้รวมถึงการพิมพ์, นามธรรม, statefulness, ขนาน, การใช้รหัส ทฤษฎี (หนึ่ง) ไม่น่าจะอธิบายถึงตัวแปรทั้งหมดได้
Babou

คำตอบ:


15

มีสี่วิธีหลักแม้ว่าสิ่งเหล่านี้เพียงเกาพื้นผิวของสิ่งที่มีอยู่:

  • ผ่าน lambdas และบันทึก: ความคิดคือการเข้ารหัสวัตถุคลาสและวิธีการในแง่ของการสร้างแบบดั้งเดิมมากขึ้น งานของเบนจามินเพียร์ซในช่วงกลางยุค 90เป็นตัวแทนของแนวทางนี้
  • แคลคูลัสของ Abadi และ Cardelli (ดูหนังสือ Abadi และ Cardelli's A Aory of Objects : สิ่งที่เป็นนามธรรมหลักของพวกเขาคือบันทึกวิธีการและวิธีการนั้นอยู่ใกล้กับต้นแบบการทำให้เกิดการเขียนโปรแกรมเชิงวัตถุขึ้นแม้ว่าคลาสและการสืบทอดสามารถเข้ารหัส แง่ขององค์ประกอบดั้งเดิมมากขึ้น
  • แคลคูลัสแบบหลายขั้นตอนของ Castagna (ดูที่การเขียนโปรแกรมเชิงวัตถุเชิงวัตถุพื้นฐานของ Castagna ): วิธีการของเขาใช้หลายวิธีคือสิ่งที่เป็นนามธรรม
  • คลาส - แคลคูลัส (เช่นในหนังสือของคิมบรูซรากฐานของภาษาเชิงวัตถุ: ประเภทและความหมายหรือเฟเธอร์เวทเวทชวา ): วิธีการเหล่านี้มีจุดมุ่งหมายเพื่อจับสาระสำคัญของการเขียนโปรแกรมตามระดับชั้นเรียน

12

การเชื่อมต่อระหว่างแกนโมเดลวัตถุและทฤษฎีเซตอธิบายไว้ในเอกสารต่อไปนี้:

เอกสารนำเสนอโครงสร้างของอินสแตนซ์และความสัมพันธ์ระหว่างการสืบทอดระหว่างวัตถุ โครงสร้างดังกล่าวถือได้ว่าเป็นนามธรรมที่เป็นไปได้สูงสุดของ OOP มันแสดงให้เห็นว่าโครงสร้างที่ใช้กับภาษาการเขียนโปรแกรมเฉพาะ (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) และภาษาออนโทโลจี (RDF Schema และ OWL 2 เต็ม)

ในเอกสารคลาสเป็นวัตถุเข้าใกล้เพื่อให้โครงสร้างหลักเป็นแบบเรียงเดี่ยว ในรูปแบบหลักโครงสร้างสามารถแสดงเป็น(O, ϵ , ≤, .ec)โดยที่

  • Oคือชุดของวัตถุ ,
  • ϵ คือความสัมพันธ์สมาชิก (วัตถุ)การปรับแต่งอินสแตนซ์ของความสัมพันธ์
  • ≤เป็นความสัมพันธ์ทางมรดกและ
  • .ecคือแผนที่ powerclassซึ่งมีความแตกต่างอาจว่างเปล่า subrelation ของ ϵ

โครงสร้างแกนตัวอย่างตามโมเดลวัตถุทับทิมแสดงโดยแผนภาพต่อไปนี้ การเชื่อมโยงสีเขียวแสดงความสัมพันธ์มรดกในการลดสกรรมกริยาสะท้อนการเชื่อมโยงสีฟ้าแสดงความสัมพันธ์ของสมาชิกใน "ลด subsumption" - การเชื่อมโยงสีฟ้าจากxจุดไปยังภาชนะที่น้อยที่สุดของx แม็พpowerclass .ecถูกสร้างโดยลิงก์สีน้ำเงินแนวนอน วัตถุจากภาพของแผนที่นี้คือpowerclasses (เป็นสีเทา) ในทับทิมพวกเขาจะเรียกว่าeigenclassesหรือชั้นเดียว (ระยะหลังถูกเลิกค่อนข้าง) วัตถุs , uและv (เป็นสีชมพู) เป็นเทอร์มินัลวัตถุที่เหลือเป็นลูกหลานของรากมรดก R

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

ส่วนหลักของโมเดลวัตถุของภาษาทั้งหมดข้างต้นสามารถมองเห็นได้เป็นความเชี่ยวชาญของโครงสร้างโดยไม่มีองค์ประกอบเพิ่มเติมหรือไม่กี่รายการ จากมุมมองเชิงทฤษฎีกรณีที่สำคัญที่สุดขององค์ประกอบเพิ่มเติมคือแผนที่ซิงเกิล (แสดงโดย. ɛϲ ) ที่ Dylan แนะนำ สิ่งนี้ทำให้ดีแลนเป็นภาษาการเขียนโปรแกรมเพียงอย่างเดียว (จากที่กล่าวถึงข้างต้น) thas ไม่ได้อยู่ภายใต้เงื่อนไขความน่าเบื่อ (≤) ○ (ϵ) ⊆ (ϵ) โดยที่สัญลักษณ์องค์ประกอบ composition ตีความจากซ้ายไปขวา

วิธีหนึ่งที่จะทำให้การเชื่อมต่อระหว่างวัตถุจำลองหลักและทฤษฎีเซตเป็นทางการคือผ่านตระกูลของโครงสร้าง(O, ≤, r, .ec, .ɛϲ) ที่เรียกว่าโครงสร้าง metaobjectในเอกสารอ้างอิงเนื่องจากสามารถพิจารณาx.ecหรือx.ɛϲได้ เป็น metaobjects ของx ในโครงสร้างเหล่านี้x.ecถูกกำหนดสำหรับวัตถุทุกxและx.ɛςถูกกำหนดไว้สำหรับทุกกระโดด ( "เล็ก") วัตถุx โครงสร้างเหล่านี้ขึ้นอยู่กับความจริงทั้งเก้าด้านล่าง axiomatization นั้นใช้ส่วนขยายที่กำหนดซึ่งค่อนข้างง่ายสำหรับแปด axioms แรก ( Tหมายถึงชุดของวัตถุเทอร์มินัล - สิ่งที่ไม่ได้เป็นลูกหลานของrและ. e คือการปิดการสะท้อนแสงของ. e ) แต่มีส่วนเกี่ยวข้องกับสัจพจน์สุดท้าย

  1. การสืบทอดเป็นคำสั่งบางส่วน
  2. แผนที่ powerclass, .ecคือการฝังคำสั่ง(O, ≤)ลงในตัวเอง
  3. วัตถุจากT.ec นั้นน้อยที่สุด
  4. ทุก powerclass เป็นลูกหลานของอา
  5. ชุดr.ec ไม่มีขอบเขตที่ต่ำกว่า
  6. แผนที่ซิงเกิล, .ɛϲเป็นแบบหัวฉีด
  7. วัตถุจากO.ɛϲ.ec มีค่าน้อยที่สุด
  8. ทุกวัตถุx , y ที่ดังกล่าวว่าx.ɛςกำหนด x.ɛς≤ y.ec ↔ x ≤ Y
  9. สำหรับวัตถุทุกx , x.ɛςถูกกำหนด↔ XD

ในสัจพจน์สุดท้ายϖเป็นเลขลำดับคงที่และ. dคือฟังก์ชันอันดับที่ได้มาจากส่วนขยายที่กำหนด ความสัมพันธ์สมาชิกวัตถุ, ϵ, ได้รับเป็น (( .ɛϲ ) ∪ ( .ec )) ○ (≤) ตามความจริงที่ผ่านมาการ จำกัด โดเมนของ ϵ กับชุดของวัตถุที่มีขอบเขตเท่ากับ ( .ɛϲ ) ○ (≤) ในเอกสารอ้างอิงความสัมพันธ์นี้เรียกว่าการเป็นสมาชิกแบบมีขอบเขตและแสดงว่า ∊ ในฐานะที่เป็นลักษณะสำคัญความสัมพันธ์นี้ได้รับการก่อตั้งขึ้นอย่างดี นี้เป็นในทางตรงกันข้ามกับεซึ่งเป็นที่ไม่ดีก่อตั้งขึ้นตั้งแต่R ε R. ปรากฎว่าการติดต่อหลักระหว่าง (ส่วนแกนกลาง) เทคโนโลยีวัตถุและทฤษฎีเซตสามารถแสดงได้

∊ ↔∈

สมาชิกที่ถูกผูกมัดเช่นสอดคล้องกับการตั้งค่าการเป็นสมาชิกระหว่างชุดที่ก่อตั้งขึ้นอย่างดี เป็นกรณีพิเศษส่วนฟอนนอยมันน์เอกภพในระดับϖ + 1เป็นโครงสร้าง metaobject โดยการขยายอย่างละเอียด โดยทั่วไปทุก ๆ นามธรรม ( ϖ + 1 ) - โครงสร้างเหนือชั้น (O,)นั้นมีความหมายเทียบเท่ากับโครงสร้าง metaobject ที่สมบูรณ์ ทุกโครงสร้างของ metaobject สามารถฝังลงในโครงสร้างของ metaobject ได้อย่างสมบูรณ์ซึ่งสามารถฝังลงในจักรวาลของ von Neumann ได้อย่างซื่อสัตย์

โครงสร้างพื้นฐานของคำนี้ใช้สำหรับการวางโครงสร้างทั่วไปของ metaobject ในลักษณะทั่วไปนี้. eและ. ɛϲได้รับอนุญาตให้เป็นบางส่วน (โดยพลการ) อาจว่างเปล่า โดยเฉพาะอย่างยิ่งโครงสร้างพื้นฐาน จำกัด ที่เป็นไปได้ที่มีโครงสร้างขั้นต่ำที่มีเพียงรากมรดกR ทุกโครงสร้างพื้นฐานสามารถขยายไปยังโครงสร้าง metaobject โดยการทำ Powerclass ตามด้วยการบรรลุผลแบบซิงเกิลตันซึ่งจะทำให้โครงสร้างพื้นฐานสามารถฝังเข้าไปในจักรวาลของ von Neumann ได้อย่างซื่อสัตย์


@ ราฟาเอลดีกว่ามาก - ขอบคุณ paon!
David Richerby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.