Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

3
respostas

Desafio: hora da prática Java: aplicando a Orientação a Objetos

Pessoa:

public class Pessoa {
    String nome;
    int idade;
    String ocupacao;

    void falar() {
        System.out.println("\n Olá, mundo!");
    }
}

public class Main {
    public static void main(String[] args) {
        Pessoa p1 = new Pessoa();
        p1.falar();

    }
}

Calculadora:

public class Calculadora {
    int vezesDois(int n) {
        return n * 2;
        
    
    }
}

public class Main {
    public static void main(String[] args) {
        Calculadora v2 = new Calculadora();
        System.out.println("\n O resultado é: " + v2.vezesDois(100));

    
    }
}

Musica:

// Crie uma classe Musica com atributos titulo, artista, anoLancamento, 
// avaliacao e numAvaliacoes, e métodos para exibir a ficha técnica, 
// avaliar a música e calcular a média de avaliações.

public class Musica {
    String titulo;
    String artista;
    int anoLancamento;
    double avaliacao;
    double totAvaliacao;
    int numAvaliacoes;
    
    

    void exibirFichaTecnica() {
        System.out.println("\nTítulo: " + titulo + ".");
        System.out.println("Artista: " + artista + ".");

    }

    void avaliar(double nota) {
        totAvaliacao+=nota;
        numAvaliacoes++;

    }

    double calcularMedia() {
        return totAvaliacao / numAvaliacoes;
    }
}

public class Main {
    public static void main(String[] args) {
        Musica rB = new Musica();
        rB.titulo = "Conversei com Deus";
        rB.artista = "Carol Biazin";

        rB.exibirFichaTecnica();

        rB.avaliar(10);
        rB.avaliar(10);
        double resultado = rB.calcularMedia();
        System.out.println(resultado);

        Musica pagode = new Musica();
    
        pagode.titulo = "Eu nunca amei assim";
        pagode.artista = "Kamisa 10";

        pagode.exibirFichaTecnica();

        pagode.avaliar(10);
        pagode.avaliar(7);
        pagode.avaliar(10);

        System.out.println(pagode.calcularMedia());
    
    }
    
}

Carro:

// Crie uma classe Carro com atributos modelo, ano, cor e métodos 
// para exibir a ficha técnica e calcular a idade do carro.

public class Carro {
    String modelo;
    int ano;
    String cor;
    int idade;

    void exibirFichaTecnica() {
        System.out.println("\nModelo: " + modelo);
        System.out.println("Ano: " + ano);
        System.out.println("Cor: " + cor);
    }

    int calcularIdadeCarro() {
        return 2026 - ano;
    }
}


public class Main {
    public static void main(String[] args) {
        Carro car1 = new Carro();
        car1.modelo = "Fiat Cronos";
        car1.ano = 1999;
        car1.cor = "Cinza";

        car1.exibirFichaTecnica();
        car1.calcularIdadeCarro();
        car1.idade = car1.calcularIdadeCarro();
        System.out.println("Idade: " + car1.idade);
    }
}

Aluno:

//  Crie uma classe Aluno com atributos nome, idade, e um método
//  para exibir informações. Crie uma instância da classe Aluno,
//  atribua valores aos seus atributos e utilize o método
//  para exibir as informações.

public class Aluno {
    String nome;
    int idade;

    void exbirInfo() {
        System.out.println("\nNome: " + nome);
        System.out.println("Idade: " + idade);
    }

}

public class Main {
    public static void main(String[] args) {
        Aluno a1 = new Aluno();

        a1.nome = "Débora";
        a1.idade = 27;

        a1.exbirInfo();


    }
}
3 respostas

Olá, Débora. Como vai?

Obrigado por compartilhar sua resolução do desafio de Orientação a Objetos em Java. Analisei os códigos enviados e, de forma geral, eles atendem ao que foi proposto na atividade. Você criou as classes, definiu atributos, implementou métodos e realizou a instanciação dos objetos de maneira adequada, colocando em prática os principais conceitos apresentados durante o capítulo.

Há apenas uma observação que pode tornar sua implementação ainda melhor. Na classe Carro, o atributo idade não é necessário, já que esse valor pode ser obtido sempre que o método calcularIdadeCarro() for chamado. Em vez de armazená-lo no objeto, você pode simplesmente exibir o retorno do método, evitando manter uma informação que pode ser calculada quando necessário. Além disso, na classe Musica, o atributo avaliacao foi declarado, mas não está sendo utilizado. Como a média é calculada a partir de totAvaliacao e numAvaliacoes, esse atributo pode ser removido sem alterar o funcionamento da solução.

Como próximo passo, que tal experimentar criar construtores para inicializar objetos como Musica, Carro e Aluno, reduzindo a necessidade de atribuir os valores atributo por atributo após a instanciação?

Parabéns pelo empenho na atividade. Continue compartilhando suas soluções. O fórum está à disposição para acompanhar sua evolução e ajudar sempre que necessário.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Correção dos exercícios:

  • ainda sem implementar construtores e afins;

Na classe Carro, o atributo idade não é necessário, já que esse valor pode ser obtido sempre que o método calcularIdadeCarro() for chamado. Em vez de armazená-lo no objeto, você pode simplesmente exibir o retorno do método, evitando manter uma informação que pode ser calculada quando necessário.

  • E eu criei a variável idade, pois achei que talvez não fosse boas práticas colocar um método dentro do print sem deixar mais apresentável. Mas essa dúvida você pode me tirar.
// Crie uma classe Carro com atributos modelo, ano, cor e métodos 
// para exibir a ficha técnica e calcular a idade do carro.

public class Carro {
    String modelo;
    int ano;
    String cor;

    void exibirFichaTecnica() {
        System.out.println("\nModelo: " + modelo);
        System.out.println("Ano: " + ano);
        System.out.println("Cor: " + cor);
    }

    int calcularIdadeCarro() {
        return 2026 - ano;
    }
}

public class Main {
    public static void main(String[] args) {
        Carro car1 = new Carro();
        car1.modelo = "Fiat Cronos";
        car1.ano = 1999;
        car1.cor = "Cinza";

        car1.exibirFichaTecnica();
        car1.calcularIdadeCarro();

        System.out.println("Idade: " + car1.calcularIdadeCarro());
    }
}

Além disso, na classe Musica, o atributo avaliacao foi declarado, mas não está sendo utilizado. Como a média é calculada a partir de totAvaliacao e numAvaliacoes, esse atributo pode ser removido sem alterar o funcionamento da solução.

// Crie uma classe Musica com atributos titulo, artista, anoLancamento, 
// avaliacao e numAvaliacoes, e métodos para exibir a ficha técnica, 
// avaliar a música e calcular a média de avaliações.

public class Musica {
    String titulo;
    String artista;
    int anoLancamento;
    double totAvaliacao;
    int numAvaliacoes;
    
    

    void exibirFichaTecnica() {
        System.out.println("\nTítulo: " + titulo + ".");
        System.out.println("Artista: " + artista + ".");

    }

    void avaliar(double nota) {
        totAvaliacao+=nota;
        numAvaliacoes++;

    }

    double calcularMedia() {
        return totAvaliacao / numAvaliacoes;
    }
}

public class Main {
    public static void main(String[] args) {
        Musica rB = new Musica();
        rB.titulo = "Conversei com Deus";
        rB.artista = "Carol Biazin";

        rB.exibirFichaTecnica();

        rB.avaliar(10);
        rB.avaliar(10);
        double resultado = rB.calcularMedia();
        System.out.println(resultado);

        Musica pagode = new Musica();
    
        pagode.titulo = "Eu nunca amei assim";
        pagode.artista = "Kamisa 10";

        pagode.exibirFichaTecnica();

        pagode.avaliar(10);
        pagode.avaliar(7);
        pagode.avaliar(10);

        System.out.println(pagode.calcularMedia());
    
    }
    
}

Oi, Débora.

As alterações ficaram corretas. Na classe Musica, remover o atributo avaliacao foi uma boa decisão, já que ele realmente não era utilizado. Sobre sua dúvida da classe Carro, chamar car1.calcularIdadeCarro() diretamente no System.out.println() é uma prática comum quando o método apenas retorna um valor simples. Se esse retorno fosse usado em vários pontos do código, faria sentido armazená-lo em uma variável local, por exemplo int idade = car1.calcularIdadeCarro();, e depois utilizá-la. Isso melhora a legibilidade sem adicionar um atributo desnecessário à classe.

Obrigado por compartilhar a versão atualizada.