Linguagens e Ambientes de Programação (2016/2017)



Prática 11

Programação orientada pelos objetos em JavaScript usando classes. Exercícios 51 e 52.



Nota: Os exercícios da aula de hoje destinam-se a ser executados na consola. Nos laboratórios está instalado o JavaScript Rhino, que se invoca usando o comando "rhino".


Guião para usar a linguagem JavaScript na consola

  1. Usar um editor de texto qualquer para escrever um ficheiro "test.js". Gravar.
  2. Agora, para correr o programa, dar na consola o comando: "rhino test.js".

Guião para usar a linguagem JavaScript dentro do Eclipse

  1. Ativar Eclipse, escrevendo "eclipse" numa consola.
  2. Window > Open Perspective... mudar perspetiva para JavaScript.
  3. File > New > JavaScript Project. Escrever "Test" e fazer "Finish". O projeto foi criado.
  4. File > New > JavaScriptSource File. Dar o nome "Test" e será automaticamente criado o ficheiro "Test.js".
  5. Escrever o programa no ficheiro "Test.js" e fazer Ctrl-S (save) para gravar.
  6. A lado do "inseto" escolher "Debug Configurations" e lá dentro escolher "Rhino Javascript".
  7. Carregar no botão "New" e logo a seguir no botão "Debug". O programa vai correr pela primeira vez.
  8. Agora basta carregar no inseto para correr o programa novamente.

Instalação: Já está instalado nos laboratórios. Para instalar no seu computador pessoal, use o comando do Eclipse "Help>Install New Software...". Na caixa "Work with:" insira "http://download.eclipse.org/releases/luna" e depois escolha apenas "Programing Languages/JavaScript Development Tools".



  • 51 - Este é um problema de organização duma hierarquia de classes. É para ser programado em JavaScript, mas imitando as classes do Java, como se explicou na teórica 19.

    Resolva o problema usando como orientação os dois exemplos finais da aula teórica 19. Comece por copiar a classe JSRoot e as funções NEW e EXTENDS para o início do seu programa.

    Considere o problema da representação de sucessões numéricas em JavaScript. Vamos restringir-nos a três tipos de sucessões: aritméticas, geométricas e constantes.

    O objetivo é que cada objeto succ que represente uma sucessão consiga gerar os valores dessa sucessão através da invocação repetida de succ.next(). Na nossa representação, as sucessões devem portanto funcionar como iteradores que se lembram da posição corrente em que vão. Atenção: não guarde os valores gerados internamente num array - isso seria desperdiçar memória inutilmente.

    Cada tipo de sucessão deverá ser representado por uma classe distinta. Os objetos criados a partir dessas classes (usando a operação NEW), representarão sucessões concretas. As três classes devem ter a seguinte funcionalidade comum:

    Resolva este problema tendo em mente os seguintes objetivos:

    Não se preocupe com a eficiência.

    Antes de programar, desenhe num papel um esquema que ilustre a relação entre as classes que vai definir, e ainda quais são as variáveis e os métodos de instância de cada uma delas.

    [Sugestões: 1. Defina uma classe abstrata e fatorize nela o máximo de código. 2. Note que os métodos "at" e "print" podem ser habilidosamente definidos à custa dos métodos "first" e "next".]


  • 52 - Para provar que o sistema criado no problema anterior é realmente extensível, pedimos-lhe que o amplie com duas novas classes, representando dois novos tipos de sucessão:
  • 53 - Adicione ainda mais três tipos de sucessão ao sistema: