Skip to content

Commit

Permalink
feat (lab/oo): new worm lab
Browse files Browse the repository at this point in the history
  • Loading branch information
santanche committed Apr 8, 2021
1 parent 59eb255 commit 421227a
Showing 1 changed file with 227 additions and 0 deletions.
227 changes: 227 additions & 0 deletions notebooks/pt/c02oo-java/s02lab/s01lombriga/lab-lombriga.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "cardiovascular-narrative",
"metadata": {},
"source": [
"# Lombriga no Aquário\n",
"\n",
"Escreva uma classe em Java em que cada objeto representa uma lombriga em um aquário.\n",
"\n",
"## Lombriga\n",
"\n",
"A lombriga é representada por um caractere da cabeça `O` seguido por uma sequência de caracteres `@`, cujo número de total caracteres (incluindo a cabeça) é equivalente ao tamanho. Por exemplo, uma lombriga de tamanho 4 seria representada assim:\n",
"\n",
"~~~\n",
"@@@O\n",
"~~~\n",
"\n",
"A cabeça indica o lado para o qual a lombriga está virada. No exemplo anterior, a lombriga está virada para a direita.\n",
"\n",
"## Aquário\n",
"\n",
"O espaço do aquário também é representado por uma sequência de caracteres `#`. Por exemplo, um aquário de tamanho 8 é representado assim:\n",
"\n",
"~~~\n",
"########\n",
"~~~\n",
"\n",
"## Lombriga no Aquário\n",
"\n",
"Sempre o aquário e a lombriga são representados em uma única linha. A lombriga ocupa espaços vazios do aquário. Por exemplo, uma lombriga de tamanho 4 em um aquário de tamanho 8, pode ser representado assim:\n",
"\n",
"~~~\n",
"#@@@O###\n",
"~~~\n",
"\n",
"## Se Movendo pelo Aquário\n",
"\n",
"Note que a lombriga pode estar em qualquer posição do aquário, desde que ela caiba no espaço disponível.\n",
"\n",
"A lombriga pode se mover pelo aquário sempre para a direção para a qual ela está virada. No exemplo anterior, a lombriga daria um passo assim:\n",
"\n",
"~~~\n",
"##@@@O##\n",
"~~~\n",
"\n",
"## Tamanho da Lombriga\n",
"\n",
"A lombriga pode crescer de tamanho, sempre uma unidade de cada vez na direção oposta à cabeça. No exemplo anterior, se a lombriga crescer ela fica assim:\n",
"\n",
"~~~\n",
"#@@@@O##\n",
"~~~\n",
"\n",
"## Virar de Lado\n",
"\n",
"Uma lombriga pode virar de lado. No exemplo anterior, se a lombriga virar de lado ela fica assim:\n",
"\n",
"~~~\n",
"#O@@@@##\n",
"~~~"
]
},
{
"cell_type": "markdown",
"id": "facial-cylinder",
"metadata": {},
"source": [
"# Tarefa\n",
"\n",
"Escreva uma classe denominada `AquarioLombriga` em que cada objeto representa uma lombriga dentro de um aquário (ambos estarão juntos em um único objeto).\n",
"\n",
"## Atributos\n",
"\n",
"Você deve decidir quais os atributos definirá.\n",
"\n",
"## Métodos\n",
"\n",
"* `construtor` - no construtor é informado como parâmetro: o tamanho do aquário, o tamanho da lombriga e a posição da lombriga no aquário (a primeira posição é um);\n",
"* `crescer` - a lombriga cresce uma unidade dentro do aquário somente se houver espaço para ela crescer na direção oposta à cabeça -- a lombriga só cresce se houver espaço no aquário na direção do crescimento, caso contrário, ela não crescerá, mesmo que o método seja chamado;\n",
"* `mover` - a lombriga se move uma unidade na direção para a qual está virada à cabeça; se ela estiver no limite do aquário (para o lado que ela está virada a cabeça) e for chamado este método ela vira de lado em vez de andar;\n",
"* `virar` - a lombriga vira de lado;\n",
"* `apresenta` - retorna uma String contendo a apresentação da lombriga no aquário no estado atual, conforme foi descrito anteriormente."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "willing-india",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "conventional-contribution",
"metadata": {},
"source": [
"# Animando a Lombriga no Aquário\n",
"\n",
"Escreva uma classe em Java que representa uma sequência de ações para animar uma lombriga em um aquário. A sequência de ações é representada pela string:\n",
"\n",
"~~~\n",
"AALLPP$$$$$$$$$$\n",
"~~~\n",
"\n",
"* `AA` - é um número (sempre ocupando dois caracteres) representando o tamanho do aquário; por exemplo, `08` representa um aquário de tamanho 8;\n",
"* `LL` - é um número (sempre ocupando dois caracteres) representando o tamanho da lombriga; por exemplo, `04` representa uma lombriga de tamanho 4;\n",
"* `PP` - é um número (sempre ocupando dois caracteres) representando a posição inicial da lombriga no aquário -- a lombriga começa sempre virada para a direita, portanto trata-se da posição da ponta da cauda; por exemplo, `02` representa uma lombriga na posição 2.\n",
"\n",
"A sequência:\n",
"\n",
"~~~\n",
"080402\n",
"~~~\n",
"\n",
"Representa um aquário de tamanho 8, com uma lombriga de tamanho 4, na posição 3:\n",
"\n",
"~~~\n",
"##@@@O##\n",
"~~~\n",
"\n",
"* `$` - cada caractere subsequente (que aparece como `$`) representa um dos possíveis comandos de animação, equivalentes aos métodos da lombriga:\n",
" * `C` - a lombriga cresce;\n",
" * `M` - a lombriga se move;\n",
" * `V` - a lombriga se vira.\n",
"\n",
"~~~\n",
"080402MCMVM\n",
"~~~\n",
"\n",
"A lombriga do exemplo anterior os passos de animação são: se move, cresce, se move, vira e se move."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "public-affairs",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "foreign-vietnamese",
"metadata": {},
"source": [
"# Tarefa\n",
"\n",
"Escreva uma classe denominada `Animacao` em que cada objeto representa uma animação de uma lombriga em um aquário.\n",
"\n",
"## Atributos\n",
"\n",
"Você deve decidir quais os atributos definirá.\n",
"\n",
"## Métodos\n",
"\n",
"* `construtor` - no construtor é informado como parâmetro: a string de animação, conforme a descrição anterior;\n",
"* `apresenta` - retorna uma String com a lombriga no aquário no estado atual (a primeira vez que o método é chamado, apresenta o estado inicial da lombriga - sem animação);\n",
"* `passo` - executa um único passo da animação.\n",
"\n",
"Por exemplo, considere a animação do exemplo anterior:\n",
"~~~\n",
"080402MCMVM\n",
"~~~\n",
"\n",
"Considere que foi chamada a seguinte sequência de métodos:\n",
"* `construtor` - passa como parâmetro `080402MCMVM`;\n",
"* `apresenta` - retorna `##@@@O##`\n",
"* `passo` - executa primeira ação `M`\n",
"* `apresenta` - retorna `###@@@O#`\n",
"* `passo` - executa próxima ação `C`\n",
"* `apresenta`- retorna `##@@@@O#`\n",
"* `passo` - executa próxima ação `M`\n",
"* `apresenta` - retorna `###@@@@O`\n",
"* `passo` - executa próxima ação `V`\n",
"* `apresenta`- retorna `###O@@@@`\n",
"* `passo` - executa próxima ação `M`\n",
"* `apresenta` - retorna `##O@@@@#`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "visible-anatomy",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "plastic-monthly",
"metadata": {},
"source": [
"# Programa\n",
"\n",
"Escreva um programa que use as suas classes para mostrar todos os paços da animação: `080402MCMVM`, conforme foi ilustrado anteriormente."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "first-poverty",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Java",
"language": "java",
"name": "java"
},
"language_info": {
"codemirror_mode": "text/x-java",
"file_extension": ".java",
"mimetype": "",
"name": "Java",
"nbconverter_exporter": "",
"version": "1.8.0_121"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

0 comments on commit 421227a

Please sign in to comment.