[转]小学生作文技法和面向对象编程思想之间千丝万缕的联系

2021-09-09 14:24:31 Author: blog.csdn.net 阅读量: 14 收藏

大约在2013年,有一首歌在YouTube广为流传,这首歌里有大量的鸡鸣狗叫的“鬼畜”声音,一点都不严肃:

这种类型的歌很受小学生的欢迎,徐小胖读小学的时候,我还有幸参与到他的班级活动中,用三脚猫的水平剪辑了这首歌,作为班级演唱表演的背景乐,很是欢乐。

这首歌看似“鬼畜”,走的是”屎尿屁“的套路,但是,当我们静下心来看,就会发现它的歌词的写作手法是很不错的。

*

歌词

这首歌名为"狐狸怎么叫(What does the fox say)“, 这是个很无厘头的问题,作曲人为了在这首歌中回答这个问题,开篇是这么写的:

1

开篇

Dog goes "woof"

Cat goes "meow"

Bird goes "tweet"

And mouse goes "squeak"

Cow goes "moo"

Frog goes "croak"

And the elephant goes "toot"

Ducks say "quack"

And fish go "blub"

And the seal goes "ow ow ow"

开篇用了这么大的篇幅,百兽悉数上场,但是以它们在排比句式中的位置,显然只是群演,主角一定是在最后登场,吊足人胃口:我们已经知道了这么多动物的叫声,那么,狐狸呢?

1

点出主角

But there's one sound

That no one knows

What does the fox say?

接下来,就是各种鬼哭狼嚎的演唱,但是,因为有开篇的结构设计和悬念的设定,歌词结构可以保持形散神不散。

这种用排比来组织文章结构,逐渐递进,最后引出主旨的行文技巧,在歌曲作词中非常常见,随便举个例子,陈粒的”奇妙能力歌“:

1

奇妙能力歌

我看过沙漠下暴雨

看过大海亲吻鲨鱼

看过黄昏追逐黎明

没看过你

。。。

我包容六月清泉结冰

包容不老的生命

包容世界的迟疑

没包容你

。。。

这么厉害的文法,当然不会只是出现在流行歌词中,在写作中也是非常常见的。

*

作文

小学生的语文课本收录了老舍的名篇,《济南的冬天》:

1

济南的冬天

对于一个在北平住惯的人,像我,冬天要是不刮风,便觉得是奇迹;济南的冬天是没有风声的。对于一个刚由伦敦回来的人,像我,冬天要能看得见日光,便觉得是怪事;济南的冬天是响晴的。自然,在热带的地方,日光是永远那么毒,响亮的天气,反有点叫人害怕。可是,在北中国的冬天,而能有温晴的天气,济南真得算个宝地。

老舍用相同的句式讲了北平的冬天、伦敦的冬天,以此对比,突出济南的冬天的特色。

这种写法简直是中小学生写作文的一把AK47,简单粗暴,行之有效。

比如,写景,写上海外滩,那就先列一堆景点做陪衬:

1

美丽的外滩

我看过北京天安门,看过西安古城墙,看过青海湖,看过长白山,而我印象最深刻的,是上海的外滩。

比如,写景,写家门口的臭水沟,先列一堆景点做陪衬:

1

美丽的小水沟

我看过北京天安门,看过西安古城墙,看过青海湖,看过长白山,看过上海外滩,而我印象最深刻的,是家门口的那条小水沟。

比如,写物,写精酿啤酒,先列一堆酒做陪衬:

1

上海520言酒所

我喝过青岛纯生,喝过勇闯天涯,喝过来自丹麦的嘉士伯,喝过湖北家乡的金龙泉,而我印象最深刻的,是520言酒所的精酿啤酒。

这种行文结构对于小学生作文来说,还有一个非常大的优势:字数可以灵活调节,如果作文字数要求不高,那就简单写两句,反之,排比句多排一点,字数就够了。

如果在排比句还能做到基本对仗工整,还能用上一些“好词好句”,读者是不是会忍不住要拍灯?

如果能把“拍灯“换成”击节叹赏“,文章是不是看起来又高大上一点点了?

前几天,我让徐小雅写成语故事“画龙点睛”,她在文中轻描淡写地用”大家发现神龙没有眼睛”来描写“点睛”的前提条件,我问了她两个问题:

1

徐小雅的“画龙点睛”的问题

第一,如果这条龙画得很差,爪子跟鸡爪差不多,尾巴跟老鼠尾巴差不多,大家会不会特别留意到龙的眼睛没有画好?

第二,这条龙的眼睛没有画,很可能是粗心造成的(虽然在这个故事中不是这样的),那会不会还有其他地方也没有画好,如果是这样的话,光“点睛”也不够,对不?

所以,更合理和套路的写法(再加上理科生应有的逻辑性),应该是要细数整体的完美,才能更好地反衬缺失部分的突兀,从而可以自然而然地展开”点睛“的环节:

1

更合理的点睛

大家看到巨龙神气活现,尾巴XXX,爪子YYY,鳞甲ZZZ,龙角MMM,胡须QQQ,但是。。。

*

代码

再回到开头的鬼畜神曲,这首歌里描写了不同的动物的叫声,如果用Python来表达这样的编程场景,我们需要用到面向对象思想。

首先,创建一个Animal的基类,这个类有一个方法,叫做“say”:

class Animal:
    def say(self):
        pass

具体的动物类继承自它,并且重写(override)say方法:

class Dog(Animal):


    def say(self):
        print("woof")


class Cat(Animal):


    def say(self):
        print("meow")


class Cow(Animal):


    def say(self):
        print("moo")


这样,我们就可以用一致的方式处理(排比。。。)Animal类型的对象:

animals = [Dog(), Dog(), Cow(), Cat()]
for animal in animals:
    animal.say()
woof
woof
moo
meow

但是,这首歌自始至终都没有给出答案:狐狸到底是怎么叫的,所以,Fox类的实现大概是这样的:

class Fox(Animal):
    def say(self):
        print("?????")

在实际编程中,我们通常会把"say"这样的行为设计为接口(Interface), 然后让类去实现这样的接口,只是,Python没有接口的概念,所以我们只能用类的继承来做到这一点。

在Animal这个基类的say函数中,我们用的是一个简单的pass来“实现”,如果派生类不去重写这个方法,那派生类对象可以调用这个方法,只是这个方法不会做任何事情。

但是,在现实世界中,并不是所有的动物都可以发声,比如,长颈鹿就没有声带,所以,“长颈鹿怎么叫”是个伪命题,我们需要在设计中显式地阻止这样的调用:

class Giraffe(Animal):


    def say(self):
        raise Exception("Giraffe cannot say!")

小学生作文和面向对象编程之间有没有联系?

还是有一点吧?

点击上方蓝字关注Python阅码场




觉得文章还不错?,点我收藏



如果文章侵犯到您的版权,请联系我:buaq.net[#]pm.me