I have created a Snap library to help with OOP (Object Oriented Programming).
<blocks app="Snap! 5.1, http://snap.berkeley.edu" version="1"><block-definition s="%'key' of %'object'" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%obj"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="object"/><block s="reportNewList"><list></list></block></block><script><custom-block s="error %txt"><l>key not found in object</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="object"/></block></block></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="object"/></block></block></block></script></block><block s="doReport"><custom-block s="%s of %obj"><block var="key"/><block s="reportCDR"><block var="object"/></block></custom-block></block></script></block-definition><block-definition s="set %'key' of %'object' to %'value'" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%obj"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="object"/><block s="reportNewList"><list></list></block></block><script><custom-block s="error %txt"><l>Key not found in object</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="object"/></block></block></block><script><block s="doReplaceInList"><l>2</l><block s="reportListItem"><l>1</l><block var="object"/></block><block var="value"/></block><block s="doStopThis"><l><option>this block</option></l></block></script></block><custom-block s="set %s of %obj to %s"><block var="key"/><block s="reportCDR"><block var="object"/></block><block var="value"/></custom-block></script></block-definition><block-definition s="error %'msg'" type="command" category="control"><header></header><code></code><translations>pt:lança o erro _
</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="run method %'key' of %'object' with inputs %'inputs'" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%obj"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><custom-block s="%s of %obj"><block var="key"/><block var="object"/></custom-block><block s="reportCONS"><block var="object"/><block var="inputs"/></block></block></script></block-definition><block-definition s="call method %'key' of %'object' with inputs %'inputs'" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%obj"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="%s of %obj"><block var="key"/><block var="object"/></custom-block><block s="reportCONS"><block var="object"/><block var="inputs"/></block></block></block></script></block-definition><block-definition s="cat %'name'" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">Bob</input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l><CLASSNAME></l><l>cat</l></list></block><block s="reportNewList"><list><l>name</l><block var="name"/></list></block><block s="reportNewList"><list><l>alive</l><block s="reportBoolean"><l><bool>true</bool></l></block></list></block><block s="reportNewList"><list><l>meow</l><block s="reifyScript"><script><block s="doIf"><custom-block s="%s of %obj"><l>alive</l><block var="self"/></custom-block><script><block s="doSayFor"><block s="reportJoinWords"><list><custom-block s="%s of %obj"><l>name</l><block var="self"/></custom-block><l>: Meow!</l></list></block><l>2</l></block></script></block></script><list><l>self</l></list></block></list></block><block s="reportNewList"><list><l>sleep</l><block s="reifyScript"><script><block s="doIf"><custom-block s="%s of %obj"><l>alive</l><block var="self"/></custom-block><script><block s="doSayFor"><block s="reportJoinWords"><list><custom-block s="%s of %obj"><l>name</l><block var="self"/></custom-block><l> slept for </l><block var="hours"/><l> hours</l></list></block><l>2</l></block></script></block></script><list><l>self</l><l>hours</l></list></block></list></block><block s="reportNewList"><list><l>die</l><block s="reifyScript"><script><block s="doIf"><custom-block s="%s of %obj"><l>alive</l><block var="self"/></custom-block><script><custom-block s="set %s of %obj to %s"><l>alive</l><block var="self"/><block s="reportBoolean"><l><bool>false</bool></l></block></custom-block></script></block></script><list><l>self</l></list></block></list></block></list></block></block></script></block-definition><block-definition s="new empty %'class'" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s">cat</input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l><CLASSNAME></l><block var="class"/></list></block></list></block></block></script></block-definition><block-definition s="add %'key' = %'value' to %'object'" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%obj"></input></inputs><script><block s="doAddToList"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block><block var="object"/></block></script></block-definition></blocks>
It comes with some blocks to create classes and an already defined class called "cat", which has a name, whether it's alive and 3 methods.