我正在考慮利用一些空閒時間來設計和實施一門關於正式語言和自動機理論課程的教學工具。我正在試圖確定一個面向對象的實施是否合適,如果是的話,是否任何人都可以對我在下面概述的設計提出高層次的改進建議。用於教授正式語言和自動機的工具OOP設計
在語言學分析中有很多潛在的類。有些(如果我錯過了任何基礎知識,請告訴我)是:語法;非終結;終奌站;生產;正規語法;上下文無關語法;上下文敏感語法;無限制的語法;自動機;州;符號;過渡; DFA; NFA; NFA-LAMBDA; DPDA; PDA; LBA;圖靈機。
問題1:每種語法都應該在實現中獲得自己的類,還是應該用一種方法來確定它是什麼類型的語法(例如,「isRegular()」,「isContextFree ()「等)(更一般地說,在領域模型中,只有行爲方面差別很小的類應該通過實現中的繼承來表示,還是更好地簡單地推送不同種類的行爲到父類?)
問題2:像「符號」,「狀態」,「非終端」等事情得到自己的類在實現中,或者應該是d由他們的容器提名?(更普遍的,應在域模型非常簡單的類來給自己的類中實現 - 例如用於擴展性 - 或者應該說被壓入容器類?)
問題3:應該轉換爲在實現中它自己的類,如果是這樣,我需要將它繼承以支持每種自動機(因爲除了狀態方面的不同之外,它們在轉換期間也會有所不同)?(更普遍,是很好的做法,那裏是一個的孩子和另一個...耦合孩子之間的雙射兩個抽象父類?)
我意識到,在結束那一天,很多這些決定都只是設計決定,但我想知道你們對OOP設計中的最佳實踐的看法。此外,我不只是將「更普遍」的問題作爲純粹的面向對象設計問題提出的問題是,我希望來自具有這種域(語言&自動機)經驗的人的特殊視角。
任何幫助,非常感謝。
+1一個很好的答案。我很想看看其他人的想法,但是除非有一些不同尋常的東西,否則我很可能會在相當短的時間內接受這一點。 – Patrick87