Linguagens e Ambientes de Programação (2022/2023)



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 Node.js, que se invoca usando o comando "nodejs".


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: "nodejs 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. Para correr, basta clicar na seta branca dentro da bola verde. O output de todas as chamadas de console.log aparece na consola do Eclipse.

Instalação: Já está instalado nos laboratórios. Para instalar no seu computador pessoal, primeiro veja se o nodejs está instalado. Se não estiver, dê o comando sudo apt install nodejs. Depois use o comando do Eclipse "Help>Install New Software...". Na caixa "Work with:" clique na seta que aponta para baixo e escolha "2018-12 - http://download.eclipse.org/releases/2018-12", ou algo de equivalente. Depois escolha para instalar 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 21. A ideia é usar o suporte para classes que foi introduzido em 2015 no padrão ECMAScript 6.

    Resolva o problema usando como orientação os dois exemplos finais da aula teórica 21.

    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 diagrama 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. Para representar uma classe abstrata, use um círculo. Para representar uma classe concreta, use um retângulo.

    O seu programa final vai ser um ficheiro contendo a definição de quatro classes. Para testar o programa, convém gerar algum output. Acrescente no final, por exemplo, a seguinte linha de código:

    [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:

    Vídeos antigos

    Estes vídeos poderão estar um pouco desatualizados, pois foram feitos no contexto duma edição anterior do LAP. Contudo, partes dos vídeos poderão continuar a ter alguma utilidade.

    Nota: Esta aula prática foi gravada no ano letivo passado de 2019/20, com a designação de aula prática 12.

    (lap prática 11 parte2)