结论
1、陈述性知识的教学应该将知识放到知识的来源上,从具体到抽象,追问这个概念是什么,为什么需要这个概念;
2、程序性知识的教学应该将知识放到具体的案例中,通过实践深度加工;
3、策略性知识的教学应该将知识放到现实的问题情境中;
4、陈述性知识、程序性知识、策略性知识三者应该相互策应,这三者并不是逐次发生的,通过一者学习深度的增加可以加深另一者的习得程度。
引子
活在当下的计算机工作者都应该听说过“面向对象编程”一词。其实在程序开发领域,上世纪70年代,Smalltalk编程语言还未诞生之前,还没有提出面向对象编程这个概念的时候,这种思想已经被几乎被所有常人习得且无意识地在生活中使用了。然而很悲哀的是,在程序设计领域科研工作者将其总结归纳、概念化的之后,这却成了很多编程初学者难以理解的知识,也是多数初学者从C(面向过程编程)转向其他面向对象的编程语言,如python、Java语言之后很难跨越的一道大门。
关于“面向对象编程“,有一种比较正式的说法:
"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。”
事实上,这样的说法只适合已经理解“面向对象编程“这个概念已经理解,且能在程序设计过程中进行运用的专业人士的自我整理或者他们之间的相互交流。
当然,也有很多人将其解释成非常通俗的大白话。如以下这段来自知乎的内容。
“
一句话说明什么是面向对象?你个土鳖,你们全家都是土鳖!
好像有人说过这样的话,当头棒喝的方式虽然情感上不易接受,但记忆效果十分显著。
好吧,如果你觉得“土鳖”实在难听也不能准确定位你的档次,你可以自行将其替换为“土豪”,whatever。
面向对象思想有三大要素:封装、继承和多态。
封装:不管你是土鳖还是土豪,不管你中午吃的是窝头还是鲍鱼,你的下水都在你肚皮里,别人看不到你中午吃了啥,除非你自己说给他们听(或者画给他们看,whatever);
继承:刚说了,你个土鳖/豪,你们全家都是土鳖/豪。冰冻三尺非一日之寒,你有今天,必定可以从你爸爸爷爷那里追根溯源。正所谓虎父无犬子,正恩同学那么狠,他爹正日就不是什么善茬,更甭说他爷爷日成,明白了吗?
多态:哲学家说过,世上不会有两个一模一样的双胞胎。即使你从你父亲那里继承来的土鳖/豪气质,也不可能完全是从一个模子里刻出来的,总会有些差别。比如你爸喜欢蹲在门前吃面,你喜欢骑在村口的歪脖子树上吃,或者反过来。当然,也可能令尊爱吃龙虾鲍鱼时旁边有几个艺校小女生喝酒唱歌助兴,你可能更喜欢弄个街舞乐队来吹拉弹唱。
作者:成心文
链接: