Apakah ada teori / abstraksi di balik OOP?

13

Pemrograman fungsional memiliki Lambda Calculus yang sangat elegan dan variannya sebagai teori cadangan. Apakah ada hal seperti itu untuk OOP? Apa yang dimaksud dengan abstraksi untuk model berorientasi objek?

Viclib
sumber
5
Banyak dan banyak. Sudahkah Anda mencoba Google? Misalnya, ada seri lokakarya yang disebut FOOL yang ditujukan untuk Yayasan Bahasa Berorientasi Objek yang berjalan sejak tahun 1993. Itu hanya menggores permukaan.
Dave Clarke
@DaveClarke. Saya tidak begitu setuju. Kalkulus Lambda adalah dasar untuk pemrograman fungsional dalam arti yang sangat tepat. Misalnya, laporan Haskell mengatakan bahwa seluruh bahasa Haskell dapat dianggap hanya gula sintaksis untuk bahasa inti yang setara dengan kalkulus lambda yang diketik. Saya tidak tahu bahasa berorientasi objek apa pun yang membuat klaim serupa sehubungan dengan kalkulus. Jadi, Anda benar bahwa ada "banyak". Tapi tidak ada yang benar.
Uday Reddy
@UdayReddy: Ini mungkin karena kekayaan bahasa berorientasi objek.
Dave Clarke
1
@DaveClarke Kekayaan topik dapat berarti bahwa (1) itu adalah kata kunci yang bagus, (2) kita tidak benar-benar memahami topik untuk membangun konsensus, (3) kami mencampur beberapa masalah yang cukup banyak ortogonal . Meskipun saya belum mengikuti literatur (baru-baru ini) tentang pemrograman OO, saya selalu merasa bahwa itu mencampur masalah tanpa menjadi sangat eksplisit tentang hal itu (tentu saja ini lebih berlaku untuk bahasa daripada pekerjaan teoritis). Masalah-masalah ini termasuk pengetikan, abstraksi, status, paralelisme, penggunaan kembali kode. Teori (satu) tidak mungkin menjelaskan semua varian.
babou

Jawaban:

15

Ada empat pendekatan utama, meskipun ini hanya menggores permukaan yang tersedia:

  • melalui lambdas dan catatan: idenya adalah untuk menyandikan objek, kelas dan metode dalam hal konstruksi yang lebih tradisional. Karya Benjamin Pierce dari pertengahan 90 - an mewakili pendekatan ini.
  • Kalkulator objek Abadi dan Cardelli (lihat buku Abadi dan Cardelli A Theory of Objects : abstraksi utama mereka adalah rekaman metode, dan pendekatannya lebih dekat dengan realisasi prototipe berbasis pemrograman berorientasi objek, meskipun kelas dan pewarisan dapat dikodekan dalam hal unsur yang lebih primitif.
  • Kalkulus multimethod Castagna (lihat buku Castagna, Object-Oriented Programming A Unified Foundation ): pendekatannya mengambil multimethod adalah kunci abstraksi.
  • Kalkulus berbasis kelas (seperti dalam buku Kim Bruce, Yayasan Bahasa yang Berorientasi Objek: Tipe dan Semantik atau Featherweight Java ): pendekatan ini bertujuan untuk menangkap esensi pemrograman berbasis kelas dan fokus pada kelas dan warisan.
Dave Clarke
sumber
12

Koneksi antara inti model objek dan teori himpunan dijelaskan dalam dokumen-dokumen berikut:

Dokumen-dokumen menyajikan struktur hubungan contoh dan pewarisan antara objek. Struktur seperti itu dapat dianggap sebagai abstraksi OOP setinggi mungkin. Ini ditunjukkan bagaimana struktur berlaku untuk bahasa pemrograman tertentu (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) dan juga untuk bahasa ontologi (Skema RDF dan OWL 2 Full).

Dalam dokumen, pendekatan class are object diambil sehingga struktur inti diurutkan tunggal. Dalam bentuk utama, struktur dapat dinyatakan sebagai (O, ϵ , ≤, .ec) di mana

  • O adalah himpunan objek ,
  • ϵ adalah relasi keanggotaan (objek) , penyempurnaan dari instance-of relation,
  • ≤ adalah hubungan warisan , dan
  • .ec adalah peta powerclass yang merupakan subrelasi dibedakan, mungkin kosong, dari ϵ.

Contoh struktur inti menurut model objek Ruby ditunjukkan oleh diagram berikut. Tautan hijau menunjukkan hubungan warisan dalam reduksi transitif refleksif, tautan biru menunjukkan hubungan keanggotaan dalam "pengurangan subsumsi" - tautan biru dari titik x ke wadah paling sedikit x . Powerclass map .ec dibentuk oleh tautan biru horisontal. Objek dari gambar peta ini adalah powerclasses (berwarna abu-abu). Dalam Ruby mereka disebut eigenclasses atau juga kelas tunggal (istilah terakhir agak usang). Objek s , u dan v (berwarna merah muda) adalah terminal, objek yang tersisa adalah keturunan dari akar warisan 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

Bagian inti dari model objek dari semua bahasa di atas dapat dilihat sebagai spesialisasi struktur, tanpa atau hanya beberapa konstituen tambahan. Dari sudut pandang teoretis, kasus yang paling signifikan dari konstituen tambahan adalah peta tunggal (dilambangkan .ɛϲ ) yang diperkenalkan oleh Dylan. Ini menjadikan Dylan satu-satunya bahasa pemrograman (dari yang disebutkan di atas) yang tidak tunduk pada kondisi monotonitas (≤) ○ (ϵ) ⊆ (ϵ) di mana simbol komposisi ○ ditafsirkan dari kiri ke kanan.

Salah satu cara untuk meresmikan hubungan antara inti model objek dan teori himpunan adalah melalui keluarga struktur (O, ≤, r, .ec, .ɛϲ) yang disebut struktur metaobject dalam dokumen yang dirujuk karena x.ec atau x.ɛϲ dapat dipertimbangkan sebagai metaobjects dari x . Dalam struktur ini x.ec didefinisikan untuk setiap objek x dan x.ɛϲ didefinisikan untuk setiap objek yang dibatasi ("kecil") x . Struktur tunduk pada sembilan aksioma di bawah ini. Aksiomaasi menggunakan ekstensi definisi yang cukup sederhana untuk delapan aksioma pertama ( Tmenunjukkan himpunan objek terminal - yang bukan merupakan turunan dari r , dan .ec adalah penutupan transitif refleksif dari .ec ) melainkan terlibat untuk aksioma terakhir.

  1. Warisan, , adalah urutan parsial.
  2. Peta powerclass, .ec , adalah penyisipan urutan (O, ≤) ke dalam dirinya sendiri.
  3. Objek dari T.ec * minimal.
  4. Setiap powerclass adalah turunan dari r .
  5. Set r.ec tidak memiliki batas bawah.
  6. Peta tunggal, .ɛϲ , bersifat injeksi.
  7. Objek dari O.ɛϲ.ec minimal.
  8. Untuk setiap objek x , y sedemikian sehingga x.ɛϲ didefinisikan, x.ɛϲ ≤ y.ec ↔ x ≤ y .
  9. Untuk setiap objek x , x.ɛϲ didefinisikan ↔ xd <ϖ .

Dalam aksioma terakhir, ϖ adalah batas tetap ordinal, dan .d adalah fungsi peringkat yang diturunkan oleh ekstensi definisi. Relasi keanggotaan objek, ϵ, diperoleh sebagai (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Menurut aksioma terakhir, pembatasan domain ϵ ke himpunan objek terikat sama dengan ( .ɛϲ ) ○ (≤). Dalam dokumen yang direferensikan, hubungan ini disebut keanggotaan terikat dan dilambangkan ∊. Sebagai karakteristik yang signifikan, hubungan ini beralasan. Ini berbeda dengan ϵ yang tidak beralasan sejak r ϵ r. Ternyata korespondensi utama antara (bagian inti dari) teknologi objek dan teori himpunan dapat dinyatakan sebagai

∊ ↔ ∈

yaitu keanggotaan terikat berhubungan dengan mengatur keanggotaan antara set yang beralasan. Sebagai kasus khusus, alam semesta parsial von Neumann dari peringkat ϖ + 1 adalah struktur metaobjek dengan ekstensi definisi. Secara umum, setiap abstrak ( ϖ + 1 ) - superstruktur (O,) secara definitif setara dengan struktur metaobjek lengkap . Setiap struktur metaobject dapat dengan setia tertanam ke dalam struktur metaobject yang lengkap yang pada gilirannya dapat dengan setia tertanam ke dalam alam semesta von Neumann.

Istilah struktur dasar digunakan untuk generalisasi struktur metaobject. Dalam generalisasi ini, .ec dan .ɛϲ diizinkan untuk (sewenang-wenang) parsial, mungkin kosong. Secara khusus, struktur dasar yang terbatas dimungkinkan, dengan struktur minimum yang hanya mengandung akar warisan r . Setiap struktur dasar dapat diperluas ke struktur metaobject oleh penyelesaian powerclass diikuti oleh penyelesaian tunggal yang pada gilirannya membuat struktur dasar setia ditanamkan ke dalam alam semesta von Neumann.

paon
sumber
@ Raphael Jauh lebih baik - terima kasih, paon!
David Richerby