Yang lain menjawab dengan benar "Tidak" dengan contoh bahasa. Saya pikir saya dapat memperluas dengan menambahkan contoh tentang cara menambahkan pengecualian ke bahasa tanpa melibatkan OOP.
Saya akan melakukan ini dalam hal DSKL (Declarative Sequential Kernel Language) dari OZ , bahasa yang cocok untuk hal-hal akademis seperti ini. DSKL (atau DKL) dapat dilihat di sini (hasil pencarian acak), bagian Pernyataan dan Nilai. Definisi yang tepat tidak penting, selain ini menjadi bahasa yang sangat sederhana tanpa variabel yang dapat dimodifikasi (mereka dideklarasikan dan kemudian diikat), dan tidak ada OOP bawaan.
OOP bahkan tidak dapat ditambahkan sebagai abstraksi linguistik ke bahasa kernel ini. Dengan menambahkan nama unik ke bahasa kernel (NewName) dan menggunakan pelingkupan lokal, enkapsulasi dapat dicapai. Atau dengan menambahkan status yang dapat diubah ke bahasa kernel (NewCell) dan menggunakan cakupan lokal OOP yang tepat dengan enkapsulasi dapat dicapai. Tetapi tidak bisa dapat dicapai dengan bahasa kernel yang ditentukan saja.
Jika kemudian kita menambahkan pengecualian ke bahasa kernel kita akan memiliki bahasa tanpa dukungan OOP tetapi memiliki pengecualian. Biarkan saya tunjukkan caranya:
Mendefinisikan mesin abstrak dengan tumpukan dan penyimpanan, kita dapat mendefinisikan apa yang harus dilakukan oleh setiap pernyataan dalam bahasa kita ( semantik pernyataan itu). Misalnya skip
dalam stack tidak melakukan apa-apa, A = 3
dalam stack harus mengikat (/ menyatukan) A ke (/ dengan) 3.
Kita mulai dengan menambahkan sintaks tentang bagaimana pengecualian kita harus didefinisikan. Kami melakukan ini dengan menambahkan dua klausa lain ke <statement>
dalam DKL.
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
Berikut ini adalah try / catch yang dikenal, dan cara untuk menaikkan / melempar pengecualian.
Kami mendefinisikan semantik mereka dengan bagaimana mereka harus bekerja pada mesin abstrak:
Coba
Pernyataan semantiknya adalah: (try <statement1> catch <id> then <statement2> end)
Lakukan:
- Dorong ke tumpukan pernyataan semantik
(catch <id> then <statement2> end)
- Dorong ke tumpukan pernyataan semantik
(<statement1>)
Perhatikan bahwa pernyataan 1 akan berada di atas tumpukan, dan coba dieksekusi terlebih dahulu.
Naikkan
Pernyataan semantik adalah: (raise <id> end)
Lakukan:
- Jika tidak ada lagi yang ada di tumpukan, hentikan dan laporkan pengecualian yang tidak tertangkap.
- Lain, pop pernyataan semantik pertama dari tumpukan. Jika itu bukan pernyataan penangkapan, lanjutkan ke langkah 1.
- Kami mendapatkan tangkapan, pada formulir
(catch <id> then <statement> end)
Push (<statement>)
ke tumpukan.
Tangkapan
Jika kita melihat pernyataan tangkap selama eksekusi normal, ini berarti bahwa apa pun yang ada di dalam dieksekusi tanpa menaikkan pengecualian hingga tingkat ini. Jadi kita hanya membuang catch
tumpukan dan tidak melakukan apa pun.
QED, kami memiliki bahasa dengan pengecualian dan tidak ada kemungkinan OOP.
Saya telah menghapus bagian lingkungan dari mesin abstrak untuk membuatnya lebih sederhana.