儘可能減小特殊容器的存在,能通用就通用,減小重複的類同代碼。java
基礎容器的存在,就是爲上述目標而服務的。數據結構
private Map<String, UmlElement> elementMap; private MultiValueMap<ElementType, UmlElement> typeMap; private DuoMap<String, ElementType, UmlElement> nameMap; private DuoMap<String, ElementType, UmlElement> parentIdMap;
所謂演進,就是上述原則理解的不斷深化,和實際運用的不斷深化。多線程
處理表達式的輸入輸出,以及對錶達式求導。架構
不管數字、加號、乘號、減號、指數符號、sin函數、cos函數,均可以稱之爲函數,都是由函數自己,以及參數構造而成,造成一種樹形結構,即表達式樹。框架
對其一視同仁能夠完成很是簡化的設計架構,全部的函數,這裏叫他函子。ide
分離層次的目的是爲了每一部分都足夠的簡單,並且相互解離,能夠獨立或者一步步的設計構建,減輕腦力負擔。函數
從第一單元接觸到stream,學習運用,到第三單元,stream的運用已經在個人代碼裏到處都是,能夠減少代碼的複雜度。單元測試
從簡潔、通用的角度出發,不該該爲每一種UML元素的關係結構都設置對應的類或容器進行存儲與獲取學習
在這些元素與元素之間有不少關係直接從元素自己就能夠構建獲得,也即我所使用的4個類型無關Map,經過這4個Map,個人代碼中沒有大量的存儲容器,這就是共性的效果。測試
所謂面對對象,就是在抽離相似對象之間的共性,以這些共性組織代碼,提高代碼的抽象程度,減輕編寫的體力勞動。
在編寫代碼時,疏漏不可避免,這時就體現出分層與解離的好處了,當你的代碼分離的層次清晰時,就能夠快速地定位到發生錯誤的所在,這也是OO課程中我努力趨向的目標。
歷來自c語言、數據結構課程的單純經過輸入輸出數據來約束代碼的正確性,我又學到了單元測試這一利器,以及爲了解決正確性問題而發明的JML形式驗證語言,這些都是約束程序的正確性的辦法。
我OO的歷程,就是不斷地提高本身的解耦代碼的能力,即提取共性的能力,第二單元時我以爲第一單元用接口以及實現接口能夠寫的複雜度下降一些,如今我回過頭看我第一單元的代碼,我發現,有不少操做均可以進一步提取共性,簡化代碼,這就是進步,不斷地掌握抽象的思惟方法。
每個單元,每一次project,最重要的是進步,所謂收穫,也就是從一次次的做業中,體會到的本身的思路、設計的進步。
第一單元
第一單元的難度能夠適當的下降,下降的方法能夠是提供官方的架構,而後讓學生填寫實現便可,好比表達式的求導,能夠設置以下簡易結構(四個接口):
public interface Differentiable { Differentiable derivate(); } public interface Recursive extends Differentiable { Collection<Differentiable> getChildren(); } public interface Mergeable extends Recursive { Differentiable merge(); } public interface Coryled extends Recursive { Differentiable uncoryled(); }
而後給出表達式項的模板(一種項的例子,省略初始化和構造):
public class Plus implements Differentiable, Recursive, Mergeable, Coryled { private List<Differentiable> children; @Override public Collection<Differentiable> getChildren() { return children; } @Override public Differentiable derivate() { Plus plus = new Plus(); for (Differentiable diff : getChildren) { plus.addChild(diff.derivate()); } return plus; } @Override public Differentiable uncoryled() { return this; // TO BE IMPLEMENTED } @Override public Differentiable merge() { return this; // TO BE IMPLEMENTED } public void addChild(Differentiable diff) { children.add(diff); } }
設置結構與模板的目的,是爲了學生易於掌握面對對象的內涵,並快速地理解Java裏的類的繼承和接口的實現。
面對對象,即解離出對象與對象之間的共性,上面四個接口,就是表達式項的四種特性:
並且,第一單元夾雜的輸入處理部分,比重和難度較大,能夠予以改良,好比像上述框架通常,也提供相似的框架。
對於大多數學生來講,剛剛學習面對對象的思惟,既然在對面對對象一無所知的狀況下你們寫出的代碼都是面向過程,不如官方提供一個或數個框架,讓學生按圖索驥,照貓畫虎,這樣,既減輕了第一單元的課業難度,又讓學生友好的接觸這一門課程,何樂而不爲?
評分:單元測試
首先,像JML和UML這樣的單元,評分的方式和標準是否能夠改變呢?
由於這兩個單元咱們寫代碼,都是按照官方的接口來實現,那麼評分是否能夠按照單元測試來給分呢,這樣也必定工程的須要,鍛鍊你們測試的能力。
評價:架構考察
而後就是架構的考察,一個學期,如此多的project,我以爲,這個課程,學生最應該提高的能力,就是必定程度上,駕馭複雜架構的能力,而伴隨課程推動的,應該是學生的進步,對這一方面能力的進步與否,也應予以考察。