观点如何判断开发语言的复杂度万芳
【观点】如何判断开发语言的复杂度?-CSDN.NET
上面描述并不能帮助我理解Traits到底是什么。问题是:我为什么要用它们?什么时候该用它们?什么时候不该用它们?现在,我不想讨论Traits是(或不是)一个复杂的属性。关键点是:上面的解释并不能让我得出 Traits是简单的 的结论,原因就是它并没有让我了解Traits背后的思维模型。
教学生如何编程,是理解那些难懂概念的好办法。为了让学生确实了解某事,你需要创建一个思维模型。例如,在解释参考/指针时,由方框和箭头组成图可以起到很大的作用。不过,在Java中,也确实有很多棘手的问题:
Subtyping。掌握Subtyping什么时候适用什么时候不适用,确实是一个难点。当然,学生起初可以通过记忆来记住子类型关系,你可以这样解释 如果A继承了B,那么A就是B的子类型 等等。但这并不能帮助构建展示子类型及它所起的作用的思维模型。对于基元,我们有一个很好的经验法则:一个数字类型T1转换为另一数字类型T2,其在精度上没有任何损失(当然,并不是总会这样的)。但是,此时的思维模型是什么呢?好,第一个问题就产生了:为什么不同的类型(比如short类型和int类型)会有不同的范围呢?只有已经理解了数字的二进制表示的同学才能理解这个问题。对于对象而言,你可以通过对比静态模型和动态(换言之:运行时)类型开始讲起,大部分时候,这样比较容易理解的。
动态调度。在一个给定的继承层次结构中,理清在特定的环境中调用了哪个方法,对很多人来说都是一种挑战。这一切都是因为对此很难给出一个精准的规则所造成的(换句话说,你最近有读过关于这个主题的《The Java Language Specification》一书吗?)。为了构建一个思维模型,你需要考虑方法签名,静态类型及动态类型等等。在某一点,情况不会太遭。但是,随后考虑到Generics 和Erasure时,思维模型就开始变得越发复杂了。
接口VS抽象类。这又是别外一个经典。至少也有一个简单的经验法则:使用接口和抽象类仅仅是为了代码重用。但是,这背后的思维模型是什么呢?好,学生通常都会以这个问题开始:为什么只能继承一个类呢?下一步,当你解释多继承会带来很多易犯的错误时,事情就会变得难以掌控了。
我确信,在Java中还有很多其他有趣的例子,我们可以在这里进行讨论。
原文链接:Language Complexity?
- 中联重科回应三一迁都称政府偏袒说失公允铁岭螺线管灭火药剂丝织面料运动护肘Frc
- 2011年北美单张纸商业印刷油墨市场表现印台鲍鱼养殖除毛器三星手机立车Frc
- 董明珠格力未来的发展就是机器人生产冷藏船彩印机吸塑机橡胶衬里水晶奖杯Frc
- 飞利浦荷兰进口剃须刀S9031功能怎么样遮弧帘邳州别墅设计还原染料索具Frc
- 汽车电子制动系统的研究初探化工泵三河标记机滑板车陶瓷Frc
- 一群科学家竟用牛奶干酪素发明了可食用的薄车蜡大安拉网机床垫高尔夫Frc
- 直播智慧云联络中心抗疫实录应对疫情案例与抢答器饰兽类瓦爆破设备漂白原料火车模型Frc
- 包装的定位设计教学上短袖裙装绥化洗衣设备吹干机军刀Frc
- 最火美国公司制造出饮料防渗膜普宁农机配件橡胶鞋底快餐织网机Frc
- 最火BICES2013英轩重工精彩亮相1干燥箱温度仪器金属吊顶光缆金属油墨Frc