• Nenhum resultado encontrado

An´ alise da estrutura interna do Scratch

menus de contexto, dentro e fora das ferramentas como o System Browser, permite o acesso a diversas funcionalidades e a outras ferramentas, como o Debugger, Inspector e Explorer (para “olhar” para o interior de um objecto e ver os valores associados `as suas vari´aveis de instˆancia e explorar directamente a hierarquia dos tipos dessas vari´aveis), Process Browser (para saber que processos est˜ao a executar num dado momento), ferramentas para encontrar m´etodos (quer indicando parte ou totalidade do nome, ou fornecendo um exemplo do seu comportamento), ferramentas para exportar/importar c´odigo feito por outros e ainda um sistema de controlo de vers˜oes distribu´ıdo chamado Monticello. O c´odigo fonte do Scratch ´e distribu´ıdo, como tal, como uma imagem do c´odigo do Squeak juntamente com as classes do Scratch. No entanto, esta imagem traz a vers˜ao 2.8 do Squeak, pelo que das ferramentas referidas, apenas s˜ao fornecidas o System Browser, Debugger, Inspector e as que permitem encontrar m´etodos.

No que toca a modifica¸c˜oes do c´odigo fonte do Scratch, ´e importante reter algumas restri¸c˜oes impostas pela sua licen¸ca:

• A licen¸ca permite a distribui¸c˜ao de projectos derivados a partir do c´odigo fonte do Scratch para uso n˜ao comercial;

• N˜ao ´e permitido o uso da palavra “Scratch” para referir projectos derivados (excepto na frase “Baseado no Scratch do MIT Media Laboratory”);

• N˜ao ´e permitido uso do logotipo nem do gato oficial do Scratch em projectos derivados; • N˜ao ´e permitida a implementa¸c˜ao da capacidade de enviar projectos para qualquer p´agina

do Scratch do MIT [Scr12a];

• C´opias ou projectos derivados tˆem de manter a licen¸ca e nota de direitos de autor do Scratch;

• Projectos derivados tˆem de disponibilizar publicamente o seu c´odigo fonte.

Antes de se passar `a apresenta¸c˜ao das funcionalidades desenvolvidas, tem interesse salientar que a referˆencia a um dado m´etodo de uma dada classe seguir´a uma conven¸c˜ao tipogr´afica usada por Black et al. [BDNP07], Classe≫etodo, que ´e comum entre os programadores de Smalltalk.

5.3

An´alise da estrutura interna do Scratch

A estrutura interna do Scratch ´e representada pelo conjunto de classes que lhe d˜ao suporte. No Squeak, as classes est˜ao organizadas em pacotes, aos quais se d´a o nome de “categorias do sistema” (system categories). Dentro de cada classe, o explorador de classes do Squeak ainda fornece um outro n´ıvel de organiza¸c˜ao chamado “protocolo”, que ´e um agrupamento de m´etodos relacionados. Numa primeira fase, torna-se importante a an´alise das categorias de classes que suportam o Scratch:

• Scratch-Objects: classes que implementam os Sprites e o Palco e que definem os ele- mentos media (imagens, v´ıdeos e sons);

• Scratch-Blocks: classes que representam os diferentes tipos de blocos;

• Scratch-Execution Engine: classes relativas `a execu¸c˜ao de um script (eventos, processos e stack frame);

46 Cap´ıtulo 5. An´alise e desenvolvimento de extens˜oes

• Scratch-UI-Dialogs: classes que implementam janelas de interac¸c˜ao com o utilizador; • Scratch-UI-Panes: classes que representam os v´arios pain´eis da interface do Scratch (pa-

lete, ´area de scripting, etc);

• Scratch-UI-Watchers: classes que implementam os monitores de vari´aveis, com as suas diversas op¸c˜oes;

• Scratch-UI-Support: classes de suporte `a interface;

• Scratch-Paint: classes que representam o editor de imagens integrado do Scratch; • Scratch-Sound: classes para edi¸c˜ao e manipula¸c˜ao de sons;

• Scratch-Translation: classes que suportam a utiliza¸c˜ao de m´ultiplos idiomas no Scratch; • Scratch-Networking: cont´em apenas a classe ScratchServer, que permite a comunica¸c˜ao

ponto-a-ponto entre instˆancias do Scratch ou entre o Scratch e outras aplica¸c˜oes.

Esta estrutura pode ser visualizada nos diagramas de classes das FigurasA.1aA.12, presentes no AnexoA.

Olhando em particular para as classes que representam os blocos do Scratch, obt´em-se o diagrama presente na FiguraA.13do Anexo A. As classes que nele figuram s˜ao:

• Kernel-Objects :: Object: superclasse de todas as classes, fornece comportamento por omiss˜ao a todas as suas subclasses (e.g., acesso, c´opia, compara¸c˜ao, tratamento de erros, envio de mensagens e reflex˜ao);

• Morphic-Kernel :: Morph: classe que representa a entidade morph;

• Scratch-Blocks :: BlockMorph: superclasse de todas as classes que representam os blo- cos;

• Scratch-Blocks :: CommandBlockMorph: classe que representa blocos do tipo stack ou reporter ;

• Scratch-Blocks :: IfElseBlockMorph: classe que representa um bloco em forma de ‘E’, implementando a estrutura de controlo if-then-else;

• Scratch-Blocks :: CBlockMorph: classe que representa um bloco que pode conter uma sequˆencia aninhada de v´arios blocos (e.g., um ciclo);

• Scratch-Blocks :: SetterBlockMorph: classe que representa um bloco que permite al- terar o valor de uma vari´avel;

• Scratch-Blocks :: ReporterBlockMorph: superclasse de todas as classes que represen- tam blocos do tipo reporter ;

• Scratch-Blocks :: ListContentsBlockMorph: classe que representa um bloco do tipo reporter que devolve o conte´udo de uma lista;

• Scratch-Blocks :: VariableBlockMorph: classe que representa um bloco do tipo repor- ter que devolve o valor de uma vari´avel, seja ela predefinida ou criada pelo utilizador; • Scratch-Blocks :: HatBlockMorph: superclasse de todas as classes que representam blo-

5.3. An´alise da estrutura interna do Scratch 47

• Scratch-Blocks :: EventHatMorph: superclasse das classes que representam blocos do tipo hat que s˜ao activados por eventos do Scratch;

• Scratch-Blocks :: KeyEventHatMorph: classe que representa blocos do tipo hat que s˜ao activados por eventos do teclado;

• Scratch-Blocks :: MouseClickEventHatMorph: classe que representa blocos do tipo hat que s˜ao activados pelo clique do rato num objecto;

• Scratch-Blocks :: WhenHatBlockMorph: classe que representa blocos do tipo hat que suportam argumentos booleanos. Esta classe encontra-se obsoleta, n˜ao sendo utilizada na vers˜ao actual do Scratch;

• Scratch-Blocks :: CommentBlockMorph: classe que representa um bloco que ´e um co- ment´ario. Esta classe encontra-se obsoleta, n˜ao sendo utilizada na vers˜ao actual do Scratch; • Morphic-Basic :: BorderedMorph: classe que define uma borda com uma dada largura

(em p´ıxeis) e uma cor para a preencer;

• Scratch-Blocks :: ArgMorph: superclasse abstracta de todos os tipos de morphs que podem ser usados como argumentos de blocos;

• Scratch-Blocks :: BooleanArgMorph: classe que representa os argumentos booleanos de alguns blocos;

• Scratch-Blocks :: ChoiceArgMorph: classe que representa os argumentos que permitem ao utilizador escolher uma op¸c˜ao a partir de um menu de op¸c˜oes;

• Scratch-Blocks :: AttributeArgMorph: classe que representa os argumentos que s˜ao atributos de Sprites ou do Palco;

• Scratch-Blocks :: ChoiceOrExpressionArgMorph: classe que representa os argumentos que tanto podem ser op¸c˜oes escolhidas a partir de um menu como podem ser substitu´ıdos por blocos do tipo reporter que sejam num´ericos;

• Scratch-Blocks :: ColorArgMorph: classe que representa um argumento que ´e uma cor, que pode ser alterada atrav´es dum selector de cores;

• Scratch-Blocks :: EventTitleMorph: classe que representa o nome de eventos a usar em blocos do tipo hat ;

• Scratch-Blocks :: ExpressionArgMorph: classe que representa um argumento que pode ser um n´umero ou uma string e que pode ser editado;

• Scratch-Blocks :: ExpressionArgMorphWithMenu: classe que adiciona `a sua superclasse ExpressionArgMorph a possibilidade de definir o valor do argumento atrav´es de um menu; • Scratch-Blocks :: SpriteArgMorph: classe que representa um argumento que pode ser

um Sprite ou o Palco.

Ainda que n˜ao sendo uma classe que implemente um bloco, ´e importante referenciar a classe ScratchCommentMorph, respons´avel pelos coment´arios que o utilizador do Scratch pode colocar nos seus scripts. As suas duas superclasses n˜ao s˜ao abordadas, estando presentes no diagrama apenas para estabelecer a liga¸c˜ao entre a hierarquia principal e a classe dos coment´arios.

Por forma a mapear as classes dos blocos nas suas representa¸c˜oes gr´aficas, construiu-se a Tabela5.1.

48 Cap´ıtulo 5. An´alise e desenvolvimento de extens˜oes Classe Bloco CommandBlockMorph IfElseBlockMorph CBlockMorph SetterBlockMorph ReporterBlockMorph ListContentsBlockMorph VariableBlockMorph EventHatMorph KeyEventHatMorph MouseClickEventHatMorph

Tabela 5.1: Classes dos blocos do Scratch e respectivas representa¸c˜oes gr´aficas.

Para facilitar a identifica¸c˜ao dos componentes da interface do Scratch e associ´a-los mais facil- mente `as vari´aveis que os representam no c´odigo fonte (bem como `as classes que os representam) foi elaborado um esquema de cores (FigurasB.1aeB.1bdo AnexoB), em que cada cor identifica um componente (classe).

Estes esquemas ajudam a conhecer os principais componentes do Scratch e a memorizar os seus nomes, auxiliando no processo de desenvolvimento das extens˜oes.

Documentos relacionados