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.

Exercícios relacionados