Criar as classes Serie e Inflacao como descritas no diagrama UML mostrado a seguir:
Serie |
---|
- descricao : String |
- dados : double[] |
+ Serie(desc: String, dados : double[]) |
+ dados() : double[] |
+ valor(ind : int) : double |
+ descricao(): String |
+ toString(): String |
+ equals(obj : Object) : boolean |
Inflacao
- ano : int
- acumulado: double
- Inflacao(desc : String, ano : int, valores : double[], acumulado : double)
- indices ()
double[] - ano() : int
- indiceMes(mes : int) : double
- acumulado() : double
- toString() : String
- equals(obj: Object) : boolean
Observe a assinatura dos métodos para descobrir sua funcionalidade.
Passo 1
Beleza, então a gente tem que criar duas classes: Serie e Inflacao, conforme o diagrama UML que você compartilhou. A matéria aqui é Programação Orientada a Objetos (POO), especificamente sobre como definir classes, atributos e métodos em Java. Vamos precisar entender como estruturar uma classe, declarar atributos privados, criar construtores e implementar métodos públicos para acessar e modificar esses atributos.
Passo 2
Vamos começar criando a classe Serie. Primeiro, definimos os atributos privados
descricao
do tipo String
e dados
que é um array de double
. Em Java, usamos private
para encapsular os dados, garantindo que só possam ser acessados através dos métodos da classe.public class Serie {
private String descricao;
private double[] dados;
// Construtor
public Serie(String desc, double[] dados) {
this.descricao = desc;
this.dados = dados;
}
}
Passo 3
Agora, vamos adicionar os métodos da classe Serie. Primeiro, o método
dados()
que retorna o array de double
:public double[] dados() {
return this.dados;
}
Passo 4
Em seguida, o método
valor(int ind)
que retorna o valor no índice especificado do array dados
. Precisamos verificar se o índice está dentro dos limites do array para evitar erros:public double valor(int ind) {
if(ind >= 0 && ind < dados.length) {
return dados[ind];
} else {
throw new IndexOutOfBoundsException("Índice fora dos limites.");
}
}
Passo 5
O método
descricao()
simplesmente retorna a descrição da série:public String descricao() {
return this.descricao;
}
Passo 6
O método
toString()
é usado para retornar uma representação em forma de string do objeto. Vamos sobrescrevê-lo para mostrar a descrição e os dados:@Override
public String toString() {
return "Descricao: " + descricao + ", Dados: " + Arrays.toString(dados);
}
Passo 7
O método
equals(Object obj)
serve para comparar se dois objetos Serie são iguais. Vamos verificar se os objetos são da mesma classe e se seus atributos são iguais:@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(obj == null || getClass() != obj.getClass()) return false;
Serie serie = (Serie) obj;
return Objects.equals(descricao, serie.descricao) && Arrays.equals(dados, serie.dados);
}
Passo 8
Agora, vamos criar a classe Inflacao que estende a classe Serie. Além dos atributos de Serie, ela tem
ano
e acumulado
. Vamos definir esses atributos e o construtor:public class Inflacao extends Serie {
private int ano;
private double acumulado;
public Inflacao(String desc, int ano, double[] valores, double acumulado) {
super(desc, valores);
this.ano = ano;
this.acumulado = acumulado;
}
}
Passo 9
Vamos adicionar os métodos da classe Inflacao. Primeiro,
indices()
que retorna o array de índices:public double[] indices() {
return this.dados();
}
Passo 10
O método
ano()
retorna o ano da inflação:public int ano() {
return this.ano;
}
Passo 11
O método
indiceMes(int mes)
retorna o índice de inflação para um determinado mês. Novamente, precisamos verificar se o mês está dentro dos limites do array:public double indiceMes(int mes) {
return valor(mes);
}
Passo 12
O método
acumulado()
retorna o valor acumulado da inflação:public double acumulado() {
return this.acumulado;
}
Passo 13
Implementamos o método
toString()
para Inflacao, sobrescrevendo o método da classe Serie:@Override
public String toString() {
return super.toString() + ", Ano: " + ano + ", Acumulado: " + acumulado;
}
Passo 14
Por fim, implementamos o método
equals(Object obj)
para Inflacao, garantindo que também compara os novos atributos:@Override
public boolean equals(Object obj) {
if(!super.equals(obj)) return false;
Inflacao inflacao = (Inflacao) obj;
return ano == inflacao.ano && Double.compare(inflacao.acumulado, acumulado) == 0;
}
Resposta
As classes Serie e Inflacao foram criadas conforme o diagrama UML, com todos os atributos, construtores e métodos implementados corretamente.