zel*_*ell 6 java project-management design-patterns
我正在重写Jack Crenshaw的"让我们构建一个编译器"从Turbo Pascal 4.0到JAVA.这是激励因为经典书籍还没有OO版本
这本书包含15章.编译器以递增方式呈现:第一章提供整个编译器的样板代码,然后每章为前一章的Pascal过程添加一些行.
我已经翻译了前两章,每章作为一个包,每个Pascal过程作为JAVA中的静态保护方法,一章的过程被收集在一个类中,扩展了从其先前章节翻译的类.
package td1;
public class Cradle {
protected final static char TAB='\t';
protected static char look;
protected static void getChar() throws IOException {
look=(char) System.in.read();
}
...
}
package td2;
public class Cradle extends td1.Cradle{
protected static void factor() throws IOException {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我来到td3时,我必须更新td2.Cradle的因子(),但我不想在td2.Cradle中更改因子(),因为这会使得td2中的factor()做的比它应该在td2中呈现.我想到了"扩展"td2.Cradle(),但是,扩展静态类似乎是不可能的.
也许我应该将每个静态方法更改为非静态方法?
我当然需要一些设计模式,任何人都可以提供帮助吗?我希望我很清楚.总之,这个项目逐步为每个过程提供越来越多的指令,我希望使用一些JAVA机制(如继承)来记录中间步骤.
Pascal代码是LBC的经典书籍.我觉得尝试使用继承,因为
我的实际解决方案是将tp1.Cradle的方法保持为静态.tp2.Cradle,tp3.Cradle,...中的方法,直到tp15.Cradle将是非静态的,它们都静态导入 tp1.Cradle.*.此外,对于大于2的每个整数,tp [i] .Cradle 扩展 tp [i-1] .Cradle.
不要犹豫,告诉我更好的解决方案.
听起来你走在正确的轨道上。为了能够重写这些方法,它们应该是实例方法。因此,您应该从依赖这些“全局方法”的模型转向基于实例的模型,在该模型中创建 Cradle 类的实例并在该实例上调用适当的方法。
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |