Intro | Guide | Shell | Draft |
---|
Este é um projeto de modelagem e implementação de uma motoca motorizada em um parque. A ideia é simular o funcionamento dessa motoca através de classes em um programa. Para isso, serão implementadas duas classes principais: Pessoa
e Moto
.
- Descrição
- A classe
Moto
representa a motoca em si. Ela possui atributos como potência, tempo e a pessoa que está atualmente utilizando-a. - A motoca inicia com potência 1, sem minutos e sem ninguém.
- Apenas uma pessoa pode estar na motoca por vez.
- As funcionalidades principais da motoca incluem subir uma pessoa, descer uma pessoa, comprar tempo, dirigir por um tempo determinado e buzinar.
- A classe
Pessoa
representa os usuários da motoca. Ela possui os atributos nome e idade.
- A classe
- Comandos
- Todos os comandos seguem o modelo
$comando arg1 arg2 ...
. Em caso de erro, uma mensagem adequada deve ser impressa. $show
- Mostra o estado atual da motoca, incluindo potência, tempo e pessoa atualmente na motoca.f"power:{this.power}, time:{this.time}, person:{this.person}"
- power:1, time:0, person:(marcos:4)
$init
- Reinicia a motoca para o estado inicial, com potência 1, sem minutos e sem ninguém.$enter
- Permite uma pessoa subir na motoca. Deve ser seguido pelos argumentosnome
eidade
da pessoa.$leave
- Faz a pessoa atualmente na motoca descer.$buy
- Permite comprar tempo em minutos para utilizar a motoca. O tempo recebido é incrementado ao tempo atual.$drive
- Permite dirigir a motoca por um tempo determinado.$honk
- Permite buzinar a motoca.
- Todos os comandos seguem o modelo
- Classe Pessoa
- Crie a classe
Pessoa
com os atributosage
ename
. - Defina os atributos como privados.
- Crie o construtor da classe que recebe
name
como uma string eage
como um número. - Crie os métodos
getAge()
egetName()
para retornar a idade e o nome da pessoa, respectivamente. - Crie o método
toString()
para retornar uma string no formato "nome:idade".
- Crie a classe
- Parte 1: Inserir
- Crie a classe
Motoca
com os atributospotencia
,time
epessoa
. - Inicialize os atributos no construtor, onde
potencia
inicia com 1,time
inicia com 0 epessoa
inicia como nulo. - Crie o método
inserir(pessoa: Pessoa): bool
que permite inserir uma pessoa na motoca. - Verifique se há uma pessoa na motoca. Se houver, imprima "fail: busy motorcycle" e retorne falso.
- Caso contrário, insira a pessoa na motoca e retorne verdadeiro.
- Crie o método
toString()
para mostrar o estado da motoca.
- Crie a classe
- Parte 2: Remover
- Crie o método
remover(): Pessoa | null
que permite remover a pessoa da motoca. - Verifique se há uma pessoa na motoca. Se não houver, imprima "fail: empty motorcycle" e retorne nulo.
- Caso contrário, remova a pessoa da motoca e retorne a pessoa removida.
- Crie o método
- Parte 3: Comprar Tempo
- Crie o método
buyTime(time: number)
que permite comprar tempo em minutos para utilizar a motoca. - Incremente o tempo da motoca com o tempo passado como parâmetro.
- Crie o método
- Parte 4: Dirigir
- Crie o método
drive(time: number)
que permite dirigir a motoca por um tempo determinado. - Verifique se há tempo disponível na motoca. Se não houver, imprima "fail: buy time first".
- Verifique se há uma pessoa na motoca. Se não houver, imprima "fail: empty motorcycle".
- Verifique se a idade da pessoa na motoca é maior que 10 anos. Se for, imprima "fail: too old to drive".
- Calcule o novo tempo após dirigir. Se o novo tempo for menor ou igual a 0, imprima "fail: time finished after X minutes".
- Atualize o tempo da motoca.
- Crie o método
- Parte 5: Buzinar
- Crie o método
honk()
que permite buzinar a motoca. - Construa a string da buzina, onde o número de "e" é igual à potência da motoca.
- Retorne a buzina.
- Crie o método
-
Cada linguagem tem suas formas de definir ausência de valor.
-
Por exemplo, vamos criar uma variável que pode ser um inteiro ou não ter valor.
-
Python
null
é o valor padrão para ausência de valor.variavel: int | null = null
- Define uma variável que pode serint
ounull
.variavel = 5
- Define a variável com um valor inteiro.- Teste:
if variavel is not null:
-
Java
null
é o valor padrão para ausência de valor.- Tipos primitivos não podem ser null.
- Todos as referências a objetos podem ser null.
- Referências não inicializadas são null.
Integer variavel = null
- Define uma variável que pode serInteger
ounull
.variavel = 5
- Define a variável com um valor inteiro.- Teste:
if (variavel != null) {
-
C++
nullptr
é o valor padrão para ausência de valor.- Apenas ponteiros podem ser nullptr.
- Valores estáticos não podem ser nullptr.
- Opções de abordagem com ponteiros:
int* variavel = nullptr
- Define um ponteiro que pode serint
ounullptr
.std::shared_ptr<int> variavel = nullptr
- Define um ponteiro que pode serint
ounullptr
.variavel = new int(5)
- Define a variável com um valor inteiro.- Teste:
if (variavel != nullptr) {
- Opções de abordagem estática utilizando wrapper(empacotador).
std::optional<int> variavel = std::nullopt
- Define uma variável que pode serint
oustd::nullopt
.variavel = 5
- Define a variável com um valor inteiro.- Teste:
if (variavel.has_value()) {
-
TypeScript
null
eundefined
são os valores padrão para ausência de valor.let variavel: number | null = null
- Define uma variável que pode sernumber
ounull
.variavel = 5
- Define a variável com um valor inteiro.- Teste:
if (variavel !== null) {
#TEST_CASE subindo e buzinando
$show
power:1, time:0, person:(empty)
#TEST_CASE subindo
$enter marcos 4
$show
power:1, time:0, person:(marcos:4)
#TEST_CASE ocupada
$enter marisa 2
fail: busy motorcycle
$show
power:1, time:0, person:(marcos:4)
$end
#TEST_CASE subindo2
$init 5
$show
power:5, time:0, person:(empty)
#TEST_CASE buzinando
$enter marcos 4
$show
power:5, time:0, person:(marcos:4)
$end
#TEST_CASE subindo e trocando
$init 7
$enter heitor 6
$show
power:7, time:0, person:(heitor:6)
$leave
heitor:6
#TEST_CASE empty
$leave
fail: empty motorcycle
#TEST_CASE replace
$enter suzana 8
$show
power:7, time:0, person:(suzana:8)
$end
#TEST_CASE no time
$init 7
$buy 30
$show
power:7, time:30, person:(empty)
$buy 10
$show
power:7, time:40, person:(empty)
$end
#TEST_CASE buy time
$init 7
$drive 10
fail: buy time first
$buy 50
#TEST_CASE empty
$drive 10
fail: empty motorcycle
$enter suzana 8
#TEST_CASE driving
$drive 30
$show
power:7, time:20, person:(suzana:8)
$end
#TEST_CASE limite de idade
$init 7
$buy 20
$enter andreina 23
$drive 15
fail: too old to drive
$show
power:7, time:20, person:(andreina:23)
$end
#TEST_CASE acabou o tempo
$init 7
$buy 20
$enter andreina 6
$drive 15
$show
power:7, time:5, person:(andreina:6)
$drive 10
fail: time finished after 5 minutes
$show
power:7, time:0, person:(andreina:6)
$end
#TEST_CASE buzinando
$init 1
$honk
Pem
$init 5
$honk
Peeeeem
$end
- cpp
- java
- ts