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

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

使用python拓展scratch的能力

極客小將2021-01-31-
更多精彩內容請關注我們
upload/article/images/2021-01-31/023178a0ff1e852baafd919cb5dc0c0f.jpg更多精彩內容請關注我們upload/article/images/2021-01-31/8f40ca84640925c0cd2b6abcc4ec6d5a.jpg如果我們有設備和材料的結構,在我們面前就開辟了另一條路徑。我們可以指導兒童的活動,使它們沿著一定方向運行,把它們漸漸引導到這條道路邏輯上必然要達到的目標上。? ? ? ? ? ? ?--約翰·杜威《學校與社會》

本文則旨在闡述,如何用最簡單的方式拓展Scratch3.0。無需了解codelab-adapter的插件機制,也無需了解Scratch3.0的插件機制,只需要寫一個Python函數,即可為scratch加入新功能。

考慮到多數Scratcher對Python并不熟悉,讓他們理解插件的模版代碼,從繼承一個類開始,接著理解線程機制,有些不近人情。本文將闡述Scratcher如何使用最少的Python代碼來擴展他們自己的項目。

upload/article/images/2021-01-31/260639e559826a27ddb569daf10a05eb.jpgupload/article/images/2021-01-31/c1f8e95041ca01ae9d39f626458befd1.jpg設計上的思考upload/article/images/2021-01-31/c1f8e95041ca01ae9d39f626458befd1.jpg

編程風格層面

Everything is message

盡可能保持Scratch風格,盡量不改變大家的編程習慣/范式。

基于消息的事件驅動風格是scratch編程的典型風格,繼承自smalltalk。

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

Smalltalk是一種面向對象的、動態類型的編程語言。Smalltalk由艾倫·凱,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC開發。

Smalltalk對其它眾多的程序設計語言的產生起到了極大的推動作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的許多軟件開發思想得利于Smalltalk,例如設計模式、敏捷編程和代碼重構等。

第一代的scratch采用smalltalk的方言squeak構建,所以scratch從smalltalk中繼承了很多設計原則。

scratch設計原則upload/article/images/2021-01-31/4fc0e4254aa2811072c6590df12f012e.jpg

1.如果一個系統要服務于創造精神,那么對于一個人來說,它必須是完全可以理解的。

2.系統應該用最少的且不可更改的部件構建; 這些部分應盡可能一般化; 系統的所有部分都應保持在統一的框架內。

3.計算應該被視為可通過發送消息來統一調用的對象的內在功能。

4.語言應圍繞一個強大的隱喻設計,這樣就可以統一應用于所有領域。

5.用戶可以訪問的每個組件都應該能夠以有意義的方式呈現自己,以便于用戶進行觀察和操作。

在scratch官方社區中,我們可以看到稍有規模的程序都會用到消息積木

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

上圖顯示的是scratch社區用戶創作的最受歡迎的游戲之一:

Bouncy Ninja 2(地址復制黏貼:

https://scratch.mit.edu/projects/227802255/editor)?程序之間的協同通過廣播消息來完成。 利用消息實現了程序的解耦。

我們進一步觀察,可以發現這個游戲使用了大量的消息:

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

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

消息機制是Scratch的核心機制。

消息是絕佳的解耦工具,如果你逛一逛Scratch社區,就可以看到人們構建了許多令人驚嘆的項目。它們中的許多并不簡單,消息是幫助他們克服復雜度的核心工具之一。這個特性繼承自smalltalk的設計原則:?計算應該被視為可通過發送消息來統一調用的對象的內在功能。

所以在編程風格層面,希望scratcher在使用Python拓展程序功能時,覺得是順滑的,不強行要求他們轉化范式。

教育層面

下邊說說教育層面的思考。

我們來討論下目前這個領域,大家所關心的:如何從圖形界面過渡/進階到代碼。

事實上,我不認為這種過渡是必須的。當然我也并不反對從圖形界面過渡到代碼。如果這種過渡是必要的,我希望它們是漸進的,而不是割裂的,否則就不叫過渡了。初學者熟悉scratch,也喜歡它,我知道大多數使用scratch的孩子,對它的好感大都勝過文本語言。你不必拋棄scratch,如果你需要一些更強大的功能,使用Python去擴展它,這個過程應該很愉快,你寫了很少的Python代碼,立馬就能應用到你喜歡的Scratch項目上,你看到你逐漸能做更多有趣的事,你感到充滿樂趣,所學的新知識,立馬應用在你感興趣的項目里。

我們反對割裂式的教學,學習者從scratch切換到Python,很長時間內只能通過print看到輸出,沒有生動的反饋,于是許多人便對階段感到沮喪,踏上一條從入門到放棄的路。

學習的過程,有時的確會遇到一些困難,有些困難是固有的,或者如康德所說的它是先天的。另一些則是人為的,教育者或者基礎設施建設者應該努力去清理那些人為的困難。

我不喜歡教育者們有時候提到的學習的過程,痛苦必不可少,所以你應當忍受這種宿命論的觀點,有時候它只是我們懶惰和無能的借口。

使用

下邊我們來演示如何使用它。

在插件目錄創建eim_script.py

ps: 插件目錄可以通過 菜單>插件>查看目錄 查看:

Mac/Linux用戶在:

~/scratch3_adapter/extensions,?

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

從一個最簡單的例子開始:

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

我們寫了一個名叫handle的函數來處理從Scratch EIM插件廣播過來的消息。

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

消息內容在message參數中,logger參數你暫時可以忽略。

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

完成之后啟動scratch3-adapter,勾選extension_eim_script插件(在最新的scratch3-adapter版本中,已經內置了這個插件), 即刻生效,可以看到Python對Scratch的擴展已經生效:

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

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

舊版本

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

下載插件

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

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


聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 纳雍县| 玉林市| 奎屯市| 通州市| 什邡市| 北川| 岚皋县| 新龙县| 敦化市| 新乡县| 垣曲县| 普宁市| 辽中县| 隆子县| 鄂托克前旗| 依兰县| 陆川县| 东源县| 谷城县| 康马县| 宕昌县| 康马县| 博湖县| 高陵县| 芒康县| 宣汉县| 浠水县| 沙雅县| 双峰县| 泰州市| 渭南市| 安阳市| 金沙县| 福建省| 略阳县| 堆龙德庆县| 新闻| 潢川县| 洪雅县| 楚雄市| 甘德县|