Programação com Objectos/Projecto de Programação com Objectos/Máquina Virtual e Contentores

From Wiki**3

AVISOS - Avaliação em Época Normal

Esclarecimento de dúvidas:

  • Consultar sempre o corpo docente atempadamente: presencialmente ou através do endereço oficial da disciplina [1].
  • Não utilizar fontes de informação não oficialmente associadas ao corpo docente (podem colocar em causa a aprovação à disciplina).
  • Não são aceites justificações para violações destes conselhos: quaisquer consequências nefastas são da responsabilidade do aluno.

Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Programação com Objectos):

  • O material de apoio é de uso obrigatório e não pode ser alterado.
  • Verificar atempadamente (mínimo de 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.

Processo de avaliação (ver informação completa em Avaliação do Projecto):

  • Datas: 2026/10/16 12:00 (inicial); 2026/11/20 12:00 (intercalar); 2026/12/18 12:00 (final); 2026/12/18 (early bird) 2027/01/06 (normal) (teste prático).
  • Todas as entregas são cruciais para o bom desenvolvimento do projecto, sendo obrigatórias: a não realização de uma entrega implica a exclusão da avaliação do projecto e, por consequência, da avaliação da disciplina.
  • Verificar atempadamente (até 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de avaliação, incluindo a capacidade de acesso ao repositório.
  • Apenas se consideram para avaliação os projectos existentes no repositório oficial. Apenas se considera para avaliação o ramo 'master'.
  • Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório ou de outros materiais, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.
  • A avaliação do projecto pressupõe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de avaliação.
  • Fraudes na execução do projecto terão como resultado a exclusão dos alunos implicados do processo de avaliação.
Material de Uso Obrigatório
As bibliotecas po-uilib e o conteúdo inicial do repositório GIT são de uso obrigatório:
  • po-uilib (classes de base) po-uilib-202609131913.tar.bz2 (não pode ser alterada) - javadoc
  • erp-core (classes do "core") (via GIT) (deve ser completada -- os nomes das classes fornecidas não podem ser alterados)
  • erp-app (classes de interacção) (via GIT) (deve ser completada -- os nomes das classes fornecidas não podem ser alterados)
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio.
Uso Obrigatório: Repositório GIT
Apenas se consideram para avaliação os projectos existentes no repositório GIT oficial.

Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.


Máquina Virtual

A máquina virtual da disciplina é baseada em openSUSE Tumbleweed. Este ambiente é providenciado como conveniência e não é estritamente necessário: outros ambientes com as versões adequadas de Java e de clientes GIT poderão ser utilizados (mas ver avisos abaixo). Em alternativa à máquina virtual, existe também um contentor com o mesmo ambiente (ver secção Contentores).

A versão mais recente da máquina virtual da disciplina, poo 2026.08 está disponível em:

A máquina virtual é fornecida nos formatos VMDK (VMware, VirtualBox), VHD (Microsoft HyperV) e qcow2 (KVM e outros).

A máquina permite configurações básicas (password de root, etc.) no primeiro arranque. Existe um utilizador normal chamado "poo" (password "linux").

A máquina vem sem ambiente gráfico, mas é simples instalar um com a ferramenta "yast".

Em caso de indisponibilidade da máquina virtual, ver em Pacotes Binários e Ambiente Oficial como reproduzir o ambiente de teste a partir de openSUSE Tumbleweed.
Tempo e esforço perdidos com ambientes ou ferramentas não recomendados ou não suportados é da inteira responsabilidade do aluno e quaisquer resultados negativos, incluindo possível reprovação, são igualmente da responsabilidade do aluno (i.e., não fazer parte da avaliação por ter usado material ou ambientes não recomendados não será aceite como justificação para qualquer falha de desempenho).

Aplicação Exemplo/Tutorial: Banco

A máquina virtual contém os JARs da aplicação bancária: uma aplicação exemplo/tutorial completamente implementada e que tem a mesma estrutura do projecto.

Contentores (docker & podman)

Embora as máquinas virtuais permitam reproduzir o ambiente de testes, os contentores permitem correr os testes sem ser necessária virtualização explícita.

O contentor contém exactamente o mesmo ambiente de desenvolvimento da máquina virtual (mesma versão de Java, mesmas ferramentas e os mesmos pacotes da disciplina), mas arranca em segundos, ocupa menos espaço e não exige a configuração de uma máquina virtual.

A imagem oficial da disciplina está disponível em:

  • registry.opensuse.org/home/d4vid/po26/images/poo:latest

A imagem é construída para as arquitecturas x86_64 e aarch64, pelo que funciona nativamente tanto em computadores com processadores Intel/AMD como em computadores ARM (por exemplo, Apple Silicon). Não é necessário indicar a arquitectura: o pull escolhe automaticamente a variante correcta.

Obter a imagem

podman pull registry.opensuse.org/home/d4vid/po26/images/poo:latest

Com o docker, basta substituir podman por docker em todos os comandos desta secção.

Utilização interactiva

A forma habitual de trabalhar é montar o directório do projecto dentro do contentor:

podman run --rm -it \
    -v "$PWD":/work:z -w /work \
    registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash

O directório corrente da máquina do aluno passa a estar acessível em /work dentro do contentor, que é também o directório de trabalho inicial. Os ficheiros são partilhados: o que for editado fora do contentor (por exemplo, num IDE) é imediatamente visível lá dentro, e vice-versa. A opção --rm faz com que o contentor seja descartado no fim, sem deixar lixo no sistema.

Notas de portabilidade:

  • Em Windows PowerShell, usar ${PWD} em vez de "$PWD".
  • O sufixo :z só é necessário em sistemas com SELinux (Fedora, RHEL, openSUSE com SELinux activo); noutros sistemas pode ser omitido.

Permissões dos ficheiros

Por omissão o contentor corre como root, pelo que os ficheiros criados lá dentro podem ficar com dono errado no sistema do aluno. Para evitar isso:

# podman
podman run --rm -it --userns=keep-id \
    -v "$PWD":/work:z -w /work \
    registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash

# docker
docker run --rm -it -u "$(id -u):$(id -g)" \
    -v "$PWD":/work -w /work \
    registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash

Conteúdo da imagem

A imagem inclui, entre outros:

  • JDK 26 (java e javac);
  • os pacotes da disciplina, incluindo po-uilib e os JARs da aplicação bancária;
  • git e clientes SSH;
  • make, gcc, zsh, python3 e utilitários de linha de comandos;
  • localização en_US.UTF-8 e fuso horário Europe/Lisbon.

Utilização em integração contínua

A mesma imagem pode ser usada directamente em pipelines de CI. Num ficheiro .gitlab-ci.yml basta:

image: registry.opensuse.org/home/d4vid/po26/images/poo:latest

Como todas as ferramentas já estão instaladas, não é necessário instalar pacotes no início de cada execução.

Ver exemplo aqui: https://gitlab.rnl.tecnico.ulisboa.pt/leic-a-po26/eval/po26

O contentor é a forma mais rápida de reproduzir o ambiente oficial de avaliação, em particular em computadores ARM, onde a máquina virtual x86 não corre nativamente.
O contentor não substitui a máquina virtual como ambiente completo: não tem ambiente gráfico nem gestor de serviços (systemd), destinando-se apenas a compilar e testar o projecto. A etiqueta latest é actualizada sempre que os pacotes de base são actualizados no openSUSE Tumbleweed; antes de uma entrega, recomenda-se voltar a fazer pull para garantir que se está a usar a versão corrente do ambiente.

Curiosidades e Outras Aplicações

A máquina virtual e os contentores podem ser úteis noutros contextos e leitores interessados podem aceder às definições de construção no "build service" (a mesma descrição KIWI produz as imagens de máquina virtual e o contentor):