Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/stdio2016/OOPS

OOPS! 這個語言好難。這才是純物件導向語言
https://github.com/stdio2016/OOPS

esolang interpreter object-oriented-programming

Last synced: about 2 months ago
JSON representation

OOPS! 這個語言好難。這才是純物件導向語言

Lists

README

        

# OOPS
OOPS! 這個語言好難。但這才是純物件導向語言

OOPS 是 Object Orient Programming System 的簡稱,裡面只有跟物件導向相關的指令,以及必要的標準輸入輸出指令

這裡提供一個 OOPS 語言的直譯器,讓你實際使用 OOPS

## 版本紀錄
* 2018/7/17:直譯器寫出來了
* 2018/7/21:加入垃圾收集機制
* 2018/7/22:加入堆疊檢查

## 特色
OOPS 語言中只有一種資料型態,就是物件。OOPS 實現了物件導向的封裝、繼承、多型等特性

### 物件與類別
OOPS 屬於類別導向 (class-based),所以在 OOPS 裡,要產生物件 (object),你必須要先宣告類別 (class)

類別可以想像成是設計圖,物件則可以想像成是成品。類別敘述物件可以做的事情,按照物件導向設計的用語,這稱為方法 (method)

### 訊息傳遞
為了讓物件能夠真的做到想要的功能,可以要求物件執行方法,稱作呼叫 (call)。OOPS 的呼叫語法是 `obj.methodName(args)`,其中 obj 是指定的物件,methodName 是方法的名稱,args 是參數

在 OOPS 裡,所有的方法都是公有 (public) 的,這表示,任何的程式都能呼叫這些方法

### 封裝
在 OOPS 裡,每個物件有自己的變數,稱為成員變數 (member variable),而且只有自己才能更改這些變數,因為它們都是私有 (*private*) 成員變數

### 繼承
OOPS 的類別 (class) 是可以繼承的。只要使用繼承,子類別 (subclass) 就可以使用父類別 (parent class) 的方法和成員變數。

如果需要,子類別也可以覆寫父類別的方法,因為所有的方法都是虛擬 (virtual) 的

### 多型
OOPS 支援多型,而且這大概是最常用到的物件導向特性,因為,啊~OOPS 沒有迴圈,也沒有判斷式語法 (我認為有了這些功能就不是純物件導向了)

## 編譯方法
請先安裝 bison 和 flex,一定要 bison ,因為我用了 bison 才有的功能 `%destructor`,還有一定要 flex,因為 lex 年代太久遠,有很多功能都不支援

進入 `src` 資料夾,然後在命令列下輸入 `make`

然後就會在資料夾裡面出現 `oops` 程式了!耶!

要在 Windows 底下編譯這個程式,需要先安裝 Cygwin,可以只安裝裡面的 flex、bison 和 gcc。
編譯輸入的指令要改成 `make CFLAGS="-L C:\cygwin64\lib"`,如果你安裝 Cygwin 的位置是 `C:\cygwin64`。
還有,要記得把 Cygwin 加進 PATH 環境變數

## 執行方法
用法: `./oops `

在 Windows 的命令列裡,請改成 `.\oops `

執行 OOPS 程式碼