国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現(xiàn)在的位置是:首頁(yè) » scratch編程資訊

資訊內(nèi)容

使用python拓展scratch的能力

極客小將2021-01-31-
更多精彩內(nèi)容請(qǐng)關(guān)注我們
upload/article/images/2021-01-31/023178a0ff1e852baafd919cb5dc0c0f.jpg更多精彩內(nèi)容請(qǐng)關(guān)注我們upload/article/images/2021-01-31/8f40ca84640925c0cd2b6abcc4ec6d5a.jpg如果我們有設(shè)備和材料的結(jié)構(gòu),在我們面前就開(kāi)辟了另一條路徑。我們可以指導(dǎo)兒童的活動(dòng),使它們沿著一定方向運(yùn)行,把它們漸漸引導(dǎo)到這條道路邏輯上必然要達(dá)到的目標(biāo)上。? ? ? ? ? ? ?--約翰·杜威《學(xué)校與社會(huì)》

本文則旨在闡述,如何用最簡(jiǎn)單的方式拓展Scratch3.0。無(wú)需了解codelab-adapter的插件機(jī)制,也無(wú)需了解Scratch3.0的插件機(jī)制,只需要寫(xiě)一個(gè)Python函數(shù),即可為scratch加入新功能。

考慮到多數(shù)Scratcher對(duì)Python并不熟悉,讓他們理解插件的模版代碼,從繼承一個(gè)類開(kāi)始,接著理解線程機(jī)制,有些不近人情。本文將闡述Scratcher如何使用最少的Python代碼來(lái)擴(kuò)展他們自己的項(xiàng)目。

upload/article/images/2021-01-31/260639e559826a27ddb569daf10a05eb.jpgupload/article/images/2021-01-31/c1f8e95041ca01ae9d39f626458befd1.jpg設(shè)計(jì)上的思考upload/article/images/2021-01-31/c1f8e95041ca01ae9d39f626458befd1.jpg

編程風(fēng)格層面

Everything is message

盡可能保持Scratch風(fēng)格,盡量不改變大家的編程習(xí)慣/范式。

基于消息的事件驅(qū)動(dòng)風(fēng)格是scratch編程的典型風(fēng)格,繼承自smalltalk。

什么是Smalltalk?upload/article/images/2021-01-31/9c7d135dde7a6a28b209183eaf3d73a1.jpg

Smalltalk是一種面向?qū)ο蟮摹?dòng)態(tài)類型的編程語(yǔ)言。Smalltalk由艾倫·凱,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC開(kāi)發(fā)。

Smalltalk對(duì)其它眾多的程序設(shè)計(jì)語(yǔ)言的產(chǎn)生起到了極大的推動(dòng)作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的許多軟件開(kāi)發(fā)思想得利于Smalltalk,例如設(shè)計(jì)模式、敏捷編程和代碼重構(gòu)等。

第一代的scratch采用smalltalk的方言squeak構(gòu)建,所以scratch從smalltalk中繼承了很多設(shè)計(jì)原則。

scratch設(shè)計(jì)原則upload/article/images/2021-01-31/4fc0e4254aa2811072c6590df12f012e.jpg

1.如果一個(gè)系統(tǒng)要服務(wù)于創(chuàng)造精神,那么對(duì)于一個(gè)人來(lái)說(shuō),它必須是完全可以理解的。

2.系統(tǒng)應(yīng)該用最少的且不可更改的部件構(gòu)建; 這些部分應(yīng)盡可能一般化; 系統(tǒng)的所有部分都應(yīng)保持在統(tǒng)一的框架內(nèi)。

3.計(jì)算應(yīng)該被視為可通過(guò)發(fā)送消息來(lái)統(tǒng)一調(diào)用的對(duì)象的內(nèi)在功能。

4.語(yǔ)言應(yīng)圍繞一個(gè)強(qiáng)大的隱喻設(shè)計(jì),這樣就可以統(tǒng)一應(yīng)用于所有領(lǐng)域。

5.用戶可以訪問(wèn)的每個(gè)組件都應(yīng)該能夠以有意義的方式呈現(xiàn)自己,以便于用戶進(jìn)行觀察和操作。

在scratch官方社區(qū)中,我們可以看到稍有規(guī)模的程序都會(huì)用到消息積木

https://cdn.china-scratch.com/timg/190531/16353a922-7.gif

上圖顯示的是scratch社區(qū)用戶創(chuàng)作的最受歡迎的游戲之一:

Bouncy Ninja 2(地址復(fù)制黏貼:

https://scratch.mit.edu/projects/227802255/editor)?程序之間的協(xié)同通過(guò)廣播消息來(lái)完成。 利用消息實(shí)現(xiàn)了程序的解耦。

我們進(jìn)一步觀察,可以發(fā)現(xiàn)這個(gè)游戲使用了大量的消息:

https://cdn.china-scratch.com/timg/190531/1635401331-8.gif

Scratcher之所以依賴消息機(jī)制,其中的原因:

消息機(jī)制是Scratch的核心機(jī)制。

消息是絕佳的解耦工具,如果你逛一逛Scratch社區(qū),就可以看到人們構(gòu)建了許多令人驚嘆的項(xiàng)目。它們中的許多并不簡(jiǎn)單,消息是幫助他們克服復(fù)雜度的核心工具之一。這個(gè)特性繼承自smalltalk的設(shè)計(jì)原則:?計(jì)算應(yīng)該被視為可通過(guò)發(fā)送消息來(lái)統(tǒng)一調(diào)用的對(duì)象的內(nèi)在功能。

所以在編程風(fēng)格層面,希望scratcher在使用Python拓展程序功能時(shí),覺(jué)得是順滑的,不強(qiáng)行要求他們轉(zhuǎn)化范式。

教育層面

下邊說(shuō)說(shuō)教育層面的思考。

我們來(lái)討論下目前這個(gè)領(lǐng)域,大家所關(guān)心的:如何從圖形界面過(guò)渡/進(jìn)階到代碼。

事實(shí)上,我不認(rèn)為這種過(guò)渡是必須的。當(dāng)然我也并不反對(duì)從圖形界面過(guò)渡到代碼。如果這種過(guò)渡是必要的,我希望它們是漸進(jìn)的,而不是割裂的,否則就不叫過(guò)渡了。初學(xué)者熟悉scratch,也喜歡它,我知道大多數(shù)使用scratch的孩子,對(duì)它的好感大都勝過(guò)文本語(yǔ)言。你不必拋棄scratch,如果你需要一些更強(qiáng)大的功能,使用Python去擴(kuò)展它,這個(gè)過(guò)程應(yīng)該很愉快,你寫(xiě)了很少的Python代碼,立馬就能應(yīng)用到你喜歡的Scratch項(xiàng)目上,你看到你逐漸能做更多有趣的事,你感到充滿樂(lè)趣,所學(xué)的新知識(shí),立馬應(yīng)用在你感興趣的項(xiàng)目里。

我們反對(duì)割裂式的教學(xué),學(xué)習(xí)者從scratch切換到Python,很長(zhǎng)時(shí)間內(nèi)只能通過(guò)print看到輸出,沒(méi)有生動(dòng)的反饋,于是許多人便對(duì)階段感到沮喪,踏上一條從入門(mén)到放棄的路。

學(xué)習(xí)的過(guò)程,有時(shí)的確會(huì)遇到一些困難,有些困難是固有的,或者如康德所說(shuō)的它是先天的。另一些則是人為的,教育者或者基礎(chǔ)設(shè)施建設(shè)者應(yīng)該努力去清理那些人為的困難。

我不喜歡教育者們有時(shí)候提到的學(xué)習(xí)的過(guò)程,痛苦必不可少,所以你應(yīng)當(dāng)忍受這種宿命論的觀點(diǎn),有時(shí)候它只是我們懶惰和無(wú)能的借口。

使用

下邊我們來(lái)演示如何使用它。

在插件目錄創(chuàng)建eim_script.py

ps: 插件目錄可以通過(guò) 菜單>插件>查看目錄 查看:

Mac/Linux用戶在:

~/scratch3_adapter/extensions,?

windows用戶在:C:Users[你的用戶名]scratch3_adapterextensions

從一個(gè)最簡(jiǎn)單的例子開(kāi)始:

def handle(message,logger):return message + ' from script'

我們寫(xiě)了一個(gè)名叫handle的函數(shù)來(lái)處理從Scratch EIM插件廣播過(guò)來(lái)的消息。

upload/article/images/2021-01-31/337de6a24be2eb72bc1aa8e338d66920.jpg

消息內(nèi)容在message參數(shù)中,logger參數(shù)你暫時(shí)可以忽略。

upload/article/images/2021-01-31/8f40ca84640925c0cd2b6abcc4ec6d5a.jpg這個(gè)插件的功能是: 將Scratch廣播過(guò)來(lái)的消息末尾加上from script,返回給Scratch那邊。它不具備實(shí)際的用途,為了展示原理,它盡可能簡(jiǎn)單。

完成之后啟動(dòng)scratch3-adapter,勾選extension_eim_script插件(在最新的scratch3-adapter版本中,已經(jīng)內(nèi)置了這個(gè)插件), 即刻生效,可以看到Python對(duì)Scratch的擴(kuò)展已經(jīng)生效:

upload/article/images/2021-01-31/414fd093c6f38e3e0bc15f73481c2125.jpg

每次修改eim_script.py建議重啟scratch3-adapter。

舊版本

extension_eim_script已經(jīng)內(nèi)置在0.3.0之后的版本中。如果你使用的scratch3-adapter版本低于0.3.0(通過(guò)菜單>關(guān)于>version查看版本),你需要先下載extension_eim_script插件。

下載插件

在scratch3-adapter中下載插件很簡(jiǎn)單,點(diǎn)擊 菜單>插件>下載,彈出輸入框,將插件的url鏈接復(fù)制粘貼其中即可。

extension_eim_script插件的鏈接是:?https://github.com/Scratch3Lab/scratch3_adapter_extensions/blob/master/extension_eim_script.py

下載完成之后重啟軟件,即可看到插件。

所有插件列表在scratch3_adapter_extensions 地址:

https://github.com/Scratch3Lab/codelab_adapter_extensions


聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除

預(yù)約試聽(tīng)課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 绥德县| 门头沟区| 杭锦后旗| 巍山| 汶川县| 遵义市| 镇沅| 兰西县| 忻城县| 南开区| 繁峙县| 巴东县| 合阳县| 香格里拉县| 射阳县| 富裕县| 蚌埠市| 承德市| 湄潭县| 保康县| 乌拉特后旗| 西宁市| 攀枝花市| 惠州市| 商河县| 三明市| 女性| 南溪县| 苍山县| 平乡县| 南丹县| 吉首市| 佳木斯市| 黑水县| 锦州市| 尉氏县| 名山县| 宝鸡市| 柳江县| 灵山县| 洛阳市|