ULBRA-SmallTalk

Description

Trabalho de Paradigmas de Linguagens de Programação (ULBRA) - Grupo 5: Simulador de Frota de Veículos em Smalltalk/Pharo, com testes SUnit e CI

Details

Source
GitHub
Dialect
pharo (25% confidence)
Created
Sept. 13, 2026
Updated
Sept. 13, 2026

Categories

Testing System / OS

README excerpt

# Grupo 5 · Smalltalk · Simulador de Frota de Veículos

Integrantes: Lucas Gabriel, Yuri Soares, Ricardo Francisco, Caio Dias, Kaio

## Arquivos e pastas

```
ULBRA-SmallTalk/
├── Abrir-Pharo-Grupo5.bat           abre o Pharo pronto para a apresentação
├── FrotaVeiculos.st                 arquivo de entrega (GERADO pelo build: não edite à mão)
├── Smalltalk_Grupo5.pptx            slides (20), com notas do apresentador
├── README.md                        este guia
├── src/                             código-fonte no formato Tonel (um arquivo por classe)
│   ├── BaselineOfGrupo5FrotaVeiculos/   diz ao Metacello quais pacotes carregar e em que ordem
│   ├── Grupo5-FrotaVeiculos/            Veiculo, Carro, Caminhao e SimuladorFrota
│   └── Grupo5-FrotaVeiculos-Tests/      testes SUnit (VeiculoTest, CarroTest, CaminhaoTest, SimuladorFrotaTest)
├── scripts/
│   ├── testar.bat                   roda os testes numa cópia da imagem
│   ├── build.bat                    testa, gera o FrotaVeiculos.st e atualiza a imagem
│   ├── carregar.st / testar.st / build.st   as etapas do pipeline, em Smalltalk
│   └── cabecalho-FrotaVeiculos.txt  comentário de cabeçalho do .st gerado
├── .github/workflows/ci.yml         CI: roda os testes no GitHub a cada push
├── .smalltalk.ston                  configuração do smalltalkCI (usada pelo CI)
└── Pharo/                           Pharo 13.1 portátil com o código carregado (fora do Git)
```

| Arquivo | O que é |
|---|---|
| `Smalltalk_Grupo5.pptx` | Slides (20), com notas do apresentador em cada um |
| `FrotaVeiculos.st` | Código do programa (entregar no ambiente AULA) |

## Como executar (testado no Pharo 13.1)

**Jeito rápido:** dois cliques em `Abrir-Pharo-Grupo5.bat`. O Pharo abre com o código carregado,
o Playground à esquerda (comandos já digitados) e o Transcript à direita.
Deixe o cursor em `SimuladorFrota executar` e aperte **Ctrl+D**.

**Em outro computador (Pharo Launcher):**

1. Instale o **Pharo Launcher** (https://pharo.org/download), crie uma imagem **Pharo 13** e clique em *Launch*.
2. Abra **Browse → Playground** e **Browse → Transcript**.
3. No Playground, digite a linha abaixo (com o caminho real do arquivo), selecione e aperte **Ctrl+D**:
   ```smalltalk
   'C:\Users\SEU_USUARIO\Documents\Grupo5-Smalltalk\FrotaVeiculos.st' asFileReference fileIn
   ```
4. Rode a simulação (**Ctrl+D**). A saída aparece no Transcript:
   ```smalltalk
   SimuladorFrota executar
   ```

Teste extra ao vivo (cascata, valores escolhidos na hora):
```smalltalk
(Carro modelo: 'Gol') abastecer: 30; acelerar: 60; exibirEstado
```

## Fluxo de trabalho (para alterar o código)

O código-fonte oficial fica em `src/`. O `FrotaVeiculos.st` é gerado a partir dele.

1. Edite as classes em `src/` (ou no System Browser do Pharo e depois exporte para `src/`).
2. Rode `scripts\testar.bat`: carrega `src/` numa cópia da imagem e roda os testes SUnit.
3. Com o Pharo **fechado**, rode `scripts\build.bat`, que executa o pipeline completo:
   carregar → testar → gerar `FrotaVeiculos.st` → atualizar `Pharo\image\Grupo5.image`.
   - O build roda numa cópia temporária. Se algum teste falhar, nada é alterado.
   - A versão anterior da imagem fica em `Pharo\image\anterior\`, para voltar atrás se precisar.

Para carregar o projeto numa imagem Pharo qualquer (é o que o CI faz):
```smalltalk
Metacello new
	baseline: 'Grupo5FrotaVeiculos';
	repository: 'tonel://C:/caminho/ULBRA-SmallTalk/src';
	load.
```

## Testes

23 testes SUnit em `Grupo5-FrotaVeiculos-Tests`. Cada pilar tem testes próprios:

- **Encapsulamento**: valores inválidos são recusados (`abastecer: -10`, tanque cheio, carga de 35 t,
  distância negativa) e não existe `combustivel:` para alterar o estado de fora.
- **Herança**: `Carro` e `Caminhao` são subclasses de `Veiculo` e usam o `abastecer:` herdado.
- **Polimorfismo**: a mesma mensagem `acelerar: 120` gasta 10 L no carro e 60 L no caminhão carregado.
- **Roteiro**: `SimuladorFrota executar` termina no mesmo estado mostrado no slide da demonstração.

No Pharo, os testes também rodam pelo **Test Runner** (menu Browse), no pacote `Grupo5-FrotaVeiculos-Tests`.

## Integração contínua

Com o projeto num repositório GitHub, o workflow `.github/workflows/ci.yml` usa o
[smalltalkCI](https://github.com/hpi-swt/smalltalkCI) para baixar um Pharo 13 limpo, carregar a
Baseline e rodar os testes a cada push e pull request.

## Estrutura do código

- `Veiculo`: superclasse **abstrata** (`Veiculo isAbstract` → `true`) com `modelo`, `combustivel`,
  `quilometragem` e `capacidadeTanque`. Define `abastecer:` e `exibirEstado`.
  O `acelerar:` é **abstrato** (`subclassResponsibility`). O `printOn:` faz o *Print it* e o Inspector
  mostrarem o estado do veículo.
- `Carro`: subclasse. `initialize` define tanque de 50 L. `acelerar:` gasta 1 L a cada 12 km.
- `Caminhao`: subclasse com o atributo `carga`. `initialize` define tanque de 300 L.
  `acelerar:` gasta 1 L a cada 4 km (vazio) ou a cada 2 km (carregado).
  O limite de carga fica em um só lugar: `Caminhao cargaMaxima` (20 t).
- `SimuladorFrota executar`: roteiro da demonstração. Cada etapa é um método
  (`passo1InstanciarObjetos` … `passo7EstadoFinal`), e o `executar` devolve o simulador
  com a frota no estado final.

Pilares:
- **Encapsulamento**: atributos privados. Só existem métodos de leitura, e toda alteração passa por métodos que validam (`abastecer:`, `carregar:` e `acelerar:`).
- **Herança**: `Carro` e `Caminhao` herdam atributos e métodos de `Veiculo` e usam `super initialize`.
- **Polimorfismo**: a mesma mensagem `acelerar:` tem uma implementação em cada subclasse.

## Sugestão de divisão (20 min, todos apresentam)

| Integrante | Slides | Conteúdo |
|---|---|---|
| Lucas Gabriel | 1–4 | Abertura, roteiro, histórico |
| Yuri Soares | 5–8 | Paradigma, características e critérios |
| Ricardo Francisco | 9–11 | Sintaxe e semântica |
| Kaio | 12–14 | Abstração, amarração, compilação/interpretação |
| Caio Dias | 15–20 | Programa, 3 pilares, demonstração ao vivo e conclusão |

Dica: leiam as **notas do apresentador** de cada slide e expliquem com as próprias palavras.
Quem só lê o slide faz o grupo perder 0,3 ponto.
← Back to results