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?
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?
Jawaban:
Ada empat pendekatan utama, meskipun ini hanya menggores permukaan yang tersedia:
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
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.
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.