Exercicio Equipamento

eu estava praticando um pouco aqui e eis que me deparo com essa questão da qual eu juro que não consegui entender

Dada uma classe Equipamento na qual cada objeto representa um
conjunto de N equipamentos de uma empresa com seus respectivos
valores, cujo diagrama UML está representado a seguir:

Equipamento
valor integer[1…*]
Equipamento (numeroEquipamentos: integer)

getNumeroEquipamentos() : integer
getValor(numero: integer) : integer
setValor(numero: integer, valor: integer)
                                           ^
                                           |

EquipamentoCorrigido

mesCorrente: integer

EquipamentoCorrigido(numeroEquipamento: integer)
getMesCompra(numero : integer)
setMesCompra(numero: integer, mes: integer)
corrige( percentual: integer)
substitui(outro: EquipamentoCorrigido)

construtor - recebe como parâmetro o número de equipamentos e cria um
vetor de valores do respectivo tamanho
getNumeroEquipamentos - retorna o número de equipamentos
getValor - recebe como parâmetro o número do equipamento (começando
de zero) e retorna seu valor
setValor - recebe como parâmetro o número do equipamento e seu valor e o
registra
Cada equipamento possui um código numérico sequencial, começando de
zero, que corresponde a sua posição no vetor.
Escreva uma classe, herdeira da classe Equipamento, denominada
EquipamentoCorrigido em que cada objeto representa os mesmos
equipamentos com valor corrigido, conforme diagrama UML parcial
representado anteriormente.
Todo equipamento só é corrigido anualmente no mês em que foi comprado,
por este motivo a classe deve acrescentar para cada equipamento um
registro do seu mês de compra. Além disto, deve possuir os métodos:
construtor - recebe como parâmetros o número de equipamentos e o mês
corrente
getMesCompra - recebe como parâmetro o número do equipamento
(começando de zero) e retorna seu mês de compra
setMesCompra - recebe como parâmetro o número do equipamento e seu
mês de compra e o registra
corrige - este método recebe como parâmetro apenas o percentual de
correção e corrige todos os equipamentos cujo mês de compra seja igual ao
mês corrente; O objeto deve manter registrado em um atributo o mês
corrente, que deve começar sempre em janeiro (quando o objeto é
construído). Cada vez que este método é chamado, após a correção, o mês é
incrementado de um e, se estiver em dezembro, retorna para janeiro
substitui - recebe como parâmetro um outro objeto da classe
EquipamentoCorrigido e substitui o valor e o mês de compra de todos os
equipamentos do objeto corrente pelos do objeto recebido como parâmetro;
a operação só será realizada se ambos os objetos possuírem o mesmo
número de equipamentos
Note que o atributo “valor” da classe Equipamento é privado, portanto, só
poderá ser acessado indiretamente, até mesmo pela classe herdeira.

estou totalmente perdido nessa questão, alguém poderia me ajudar?

como coloco a restrição do programa para o usuario só poder digitar o número começando com 0? e esse setValor, como eu “registro”?

Se você está perdido, imagine o pessoal ler todo esse conteúdo?

Poderia resumir a sua duvida e ser bem claro, com exemplos de código e um texto mais condizente com a duvida.

eu gostaria de saber como eu coloco a restrição para o usuário digitar o 0 no começo ou se é necessário que eu faça isso

e como fazer esse set valor da classe equipamento

até aqui foi isso que fiz

 

public class Equipamento {
		int valor;
		int numeroEquipamento;
		
		
		public Equipamento(int numeroEquipamento) {

			int valor[] =  new int[numeroEquipamento];
		}
	
		
		public int getnumeroEquipamentos(){
			
			return numeroEquipamento;
		}

		public int getValor(int numeroEquipamento) {
			return valor;
		}

		public void setValor(int numeroEquipamento,int valor) {
			this.valor = valor;
			this.numeroEquipamento = numeroEquipamento;
		}

		
		
		
}

outra duvida é que no diagrama de classes não tem o atributo numeroEquipamento e na classe EquipamentoCorrigido também não tem o atributo mes de compra, preciso fazê - los? ou estou perdendo algo obvio aqui

tenho duvidas também nos metodos corrige e substitui da classe EquipamentoCorrigido

String valorDigitado = sc.nextLine();
if('0' != valorDigitado.charAt(0)) {
    //Apresenta o erro dizendo que o primeiro caractere deve ser 0
}

Isso é um pouco mais profundo que um simples sim ou não.
Veja, há dois entendimentos sobre diagramas de classes:

  1. Você deve colocar no diagrama de classes só o que é fundamental, ou seja, incluir só o que é estritamente necessário para o projeto existir, excluindo detalhes.
  2. Você deve colocar no diagrama de clases tudo o que for relacionado a cada classe e todas as clases que for utilizar no projeto.

Desta maneira, você deve interpretar o diagrama de acordo com o que já foi abordado antes e, de acordo com isso, seguir o item 1 ou 2 acima.
Se optar pelo item 1, sem detalhes no diagrama, você pode incluir esses atributos e/ou métodos que não estão descritos naquele diagrama. Porém, se optar pelo 2, não deve incluí-los, visto que o digrama não contempla os mesmos.

Nada é automágico.

if (meuObjetoString.startsWith("0")) {
    // O texto começa com zero
}

muito esclarecedor, então quer dizer que o Diagrama é algo mais abstrato?

imaginei que não seria, obrigado por postar solucionou uma de minhas dúvidas :slight_smile:

alguém pode me ajudar nesse metodo? eu no caso utilizaria meu array criado no construtor ,certo? como eu faria esse registro?

a ultima dúvida que tenho é sobre o método corrige da classe EquipamentoCorrigido, alguém poderia me explicar?

Não que seja abstrato (embora seja). A questão é que o objetivo do diagrama de classes é mostrar, de uma visão baseada em quais classes comporão o sistema, como elas são estruturadas (quais são e o que elas contém) e as relações entre elas (se uma estende outra, se há implementação de comportamentos, etc).
Um ponto importante aqui é que a construção do diagrama deveria ser um ponto fundamental para o desenvolvimento do sistema. Esta etapa deveria contemplar o entendimento de como tudo funciona. Afinal, é deste diagrama que será extraído o diagrama de sequencia, onde é mandatório definir o fluxo de mensagens e todos os objetos envolvidos nesse processo.

public void setValor(int numeroEquipamento, double seuValor) {
    //Faz algo aqui com tudo o que você precisa
}
public void setValor(String numeroEquipamento,double valor) {
		this.valor = valor;
		this.numeroEquipamento = numeroEquipamento;
	}

eu fiz assim mas acho que está errado pois o problema fala "- recebe como parâmetro o número do equipamento e seu valor e o
registra " eu não entendi essa parte do registra, poderia me ajudar?

alguém poderia me explicar como eu adiciono o equipamento no vetor levando em conta o número?

Um vetor pode ser entendido como uma sequência de casas de um determinado tipo.

| A | B | C | D | E |

O array acima corresponde a um vetor de caracteres.

| 0 | 1 | 2 | 3 | 4 |
| A | B | C | D | E |

A posição de cada casa é sempre indicada por um valor numérico, correspondente à sua posição no vetor, iniciando-se, sempre, em 0 (zero).

No teu caso, você terá um vetor de de equipamento. Cada posição (cada casa) do vetor pode receber um único equipamento e cada equipamento adicionado terá o valor de seu código definido com o valor da posição do array no qual o mesmo se encontra.
Como encontrar qual o valor correspondente à posição onde determinado equipamento se encontra? Itere sobre o vetor e identifique a primeira casa disponível (onde a casa tem valor nulo), então, defina aquele valor (correspondente a tal posição).

mas como eu adiciono os valores de acordo com o número do equipamento? por exemplo o equipamento 1 tem número 004 e o equipamento 2 tem o número 002, dai como faço para adicionar o equipamento 2 antes do 1?

Segundo a regra acima, você terá o equipamento 0 na posição 0,o equipamento 25, na posição 25 e assim por diante.

De onde os números vem preenchidos?

na classe equipamento existe o atributo numeração do equipamento