Intro | Guide | Shell | Draft |
---|
Faça o modelo de uma lapiseira que pode conter um único grafite.
O objetivo dessa atividade é implementar uma lapiseira que permite inserir, remover grafite e escrever em uma folha, considerando a dureza e tamanho do grafite.
-
Descrição
- A lapiseira é capaz de iniciar, inserir e remover grafite, além de escrever em uma folha.
- Para inserir um grafite, é necessário especificar o calibre (float), a dureza (string) e o tamanho em mm (int).
- A remoção do grafite só é possível se houver algum na lapiseira.
- A escrita na folha só é possível se houver grafite suficiente e se o tamanho do grafite for superior a 10mm.
- A quantidade de grafite gasto varia de acordo com a dureza do grafite. Quanto mais macio, mais ele se desgasta.
- Quando o tamanho do grafite atinge 10mm, não é mais possível escrever.
- Se não houver grafite suficiente para terminar a escrita na folha, é emitido um aviso de texto incompleto.
-
Responsabilidades
- A classe Grafite
Lead
é responsável por armazenar as informações do grafite.thickness
é a espessura e terá valores como 0.3, 0.5, 0.7.hardness
é a dureza e poderá ter os seguintes valores:HB, 2B, 4B, 6B
.- O método
usagePerSheet
retorna a quantidade de grafite gasto por folha.- Um grafite
HB
gasta1mm
por folha. - Um grafite
2B
gasta2mm
por folha. - Um grafite
4B
gasta4mm
por folha. - Um grafite
6B
gasta6mm
por folha.
- Um grafite
size
representa o tamanho do grafite emmilímetros
.
- A classe
Pencil
é responsável por gerenciar as operações de inserção, remoção de grafite e escrita na folha.- Ela referencia um único objeto lapiseira como atributo.
- E também possui um indicador de espessura
thickness
.
- A classe Grafite
-
Comandos
- Todos os comandos seguem o modelo
$comando arg1 arg2 ...
. $iniciar calibre
- Inicializa a lapiseira com um determinado calibre.$inserir calibre dureza tamanho
- Insere um grafite com o calibre, dureza e tamanho especificados.- erros:
fail: calibre incompativel
- Se o calibre do grafite for diferente do calibre da lapiseira.fail: ja existe grafite
- Se já houver um grafite na lapiseira.
- erros:
$remover
- Remove o grafite da lapiseira, se houver.- erros:
fail: nao existe grafite
- Se não houver grafite na lapiseira.
- erros:
$escrever
- Escreve na folha, considerando o grafite presente na lapiseira.- O grafite é gasto de acordo com a dureza.
- erros:
fail: nao existe grafite
- Se não houver grafite na lapiseira.fail: tamanho insuficiente
- Se o tamanho do grafite for insuficiente para começar a escrita.fail: folha incompleta
- Se o grafite não for suficiente para terminar a escrita.
- Todos os comandos seguem o modelo
-
Parte 1: Inserir
- Crie a classe Grafite
Lead
com o atributo tamanhosize
. - Crie a classe Lapiseira
Pencil
com o atributo pontatip
inicializado comonull
. - Implemente o método tem grafite
hasGrafite
que retornatrue
se houver grafite na lapiseira. - Implemente o método inserir
insert
que insere um grafite na lapiseira, se não houver grafite. - Implemente o método
toString
que mostra a lapiseira e o grafite presente.
- Crie a classe Grafite
-
Parte 2: Remover Grafite
- Implemente o método
remove
que retira o grafite da lapiseira, se houver. - Verifique se o método
remove
retorna o grafite removido ounull
se não havia grafite.
- Implemente o método
-
Parte 3: Escrever na Folha
- Implemente o método
writePage
que escreve na folha. - Implemente o método
usagePerSheet
que retorna a quantidade de grafite gasto por folha. - Verifique se a lapiseira consegue escrever na folha.
- Faça as verificações antes de escrever na folha.
- Para ver se o grafite será suficiente para escrever na folha, verifique qual o tamanho final que ele teria se fizesse a folha completa.
- Se esse tamanho for menor que 10mm, ele deve gastar o que for possível e parar a folha pela metade.
- Implemente o método
#TEST_CASE inserindo grafites
$init 0.5
$show
calibre: 0.5, grafite: null
#TEST_CASE incompativel
$insert 0.7 2B 50
fail: calibre incompativel
$insert 0.5 2B 50
$show
calibre: 0.5, grafite: [0.5:2B:50]
$end
#TEST_CASE inserindo
$init 0.3
$insert 0.3 2B 50
$show
calibre: 0.3, grafite: [0.3:2B:50]
#TEST_CASE ja existe
$insert 0.3 4B 70
fail: ja existe grafite
$show
calibre: 0.3, grafite: [0.3:2B:50]
#TEST_CASE removendo
$remove
$show
calibre: 0.3, grafite: null
#TEST_CASE reinserindo
$insert 0.3 4B 70
$show
calibre: 0.3, grafite: [0.3:4B:70]
$end
#TEST_CASE sem grafite
$init 0.9
$write
fail: nao existe grafite
#TEST_CASE escrevendo 1
$insert 0.9 4B 14
$write
$write
fail: tamanho insuficiente
$show
calibre: 0.9, grafite: [0.9:4B:10]
$end
#TEST_CASE escrevendo 2
$init 0.9
$insert 0.9 4B 16
$write
$show
calibre: 0.9, grafite: [0.9:4B:12]
#TEST_CASE escrevendo 3
$write
fail: folha incompleta
$show
calibre: 0.9, grafite: [0.9:4B:10]
$end
- cpp
- java
- ts