Ir ao conteúdo
  • Cadastre-se
Gabriel Gomes da Silva

Java RESOLVIDO Orientada a Objeto ou Estruturada

Recommended Posts

Pessoal fiz um trabalho para a faculdade, nesse trabalho era necessário que eu fizesse um programa em O.O. que tivesse algo a ver com sustentabilidade(ele pediu que fosse bem simples e que usasse os recursos de orientação a objeto), então desenvolvi um quis sobre reciclagem. E enviei para o professor ele avaliou e disse que meu programa estava estruturado, mas eu não consigo ver o porque sendo que eu usei várias coisas de O.O. como:Abstração,herança,método construtor etc. Queria que alguém aqui me desse uma luz pois agora estou perdido. 

 

 

Eu anexei meu projeto ai ele foi desenvolvido em JAVA, pelo eclipse, se puderem dar uma olhada e um feedback eu seria muito grato.

QuizAPS.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, tudo bom? Você falou que usou vários métodos de O.O Abstração,herança,método construtor, mas isso não é somente programar orientado a objeto. Isso é programar utilizando artifícios de java, orientar a objeto é programar de acordo com as características de cada objeto e então criar um programa.

 

Vamos ver um exemplo de classe "jogador de futebol"(já que estamos na copa), a classe é jogador de futebol e o objeto é o próprio jogador, como por exemplo o Cristiano Ronaldo. E então o Cristiano Ronaldo é um objeto da classe jogador de futebol que vai ter seus próprios atributos. Os atributos do objeto Cristiano Ronaldo vão ser Atacante, ai vai ter a altura do cara, gols de bola parada, nome completo e etc.

 

Isso é mais ou menos orientar a objeto, um pouco filosófico, não? Orientar a objeto muitas vezes dá mais trabalho do que programar estruturado, mas o teu programa vai ser bem mais elegante.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
43 minutos atrás, PédePano disse:

Rapaz, tudo bom? Você falou que usou vários métodos de O.O Abstração,herança,método construtor, mas isso não é somente programar orientado a objeto. Isso é programar utilizando artifícios de java, orientar a objeto é programar de acordo com as características de cada objeto e então criar um programa.

 

Vamos ver um exemplo de classe "jogador de futebol"(já que estamos na copa), a classe é jogador de futebol e o objeto é o próprio jogador, como por exemplo o Cristiano Ronaldo. E então o Cristiano Ronaldo é um objeto da classe jogador de futebol que vai ter seus próprios atributos. Os atributos do objeto Cristiano Ronaldo vão ser Atacante, ai vai ter a altura do cara, gols de bola parada, nome completo e etc.

 

Isso é mais ou menos orientar a objeto, um pouco filosófico, não? Orientar a objeto muitas vezes dá mais trabalho do que programar estruturado, mas o teu programa vai ser bem mais elegante.

Entendi, esse conceito, e foi o que eu fiz com o meu programa é um quis,então eu fiz 2 classes a primeira é uma classe abstrata que guarda os pontos do usuário de acordo com a  resposta que ele escolher, e armazena o nome dele, e verifica se é válido o nome ou se o campo não está em branco. E então fiz outra classe que herda a primeira e nessa classe ficam as perguntas que no caso são os objetos do programa ai cada um tem um questão especifica e o ponto de acordo com cada resposta que o usuário digitar.

adicionado 14 minutos depois

Olha ai a UML do projeto 

UMLAPS1.jpg

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, percebe essa classe pergunta, você tá fazendo ela de forma estruturada. O certo em POO é criar uma classe pergunta, em que o objeto tenha atributos, por exemplo, strings como, a própria pergunta, o item A, B,C,D, a questão correta, pontuação de cada resposta e a pontuação conseguida na pergunta. E então na main você vai criar um objeto para cada pergunta e vai d dar os dados necessários.

 

No meu exemplo acima eu posso ainda ampliar isso para um classe questões e uma pergunta kkkkk. Só para você ver como pode ficar ainda mais elegante. Em orientação a objeto se você tá digitando de mais uma classe é por que você esqueceu de criar alguma classe kkkkk. O lance é bem mais abstrato.

 

Quando eu estudava Java na faculdade muitas vezes meu professor pedia classes de 20 linhas que eu achava totalmente desnecessário em um programa de 1000 linhas ou mais, mas o miserável fazia questão kkkkk.

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa abstração é difícil de pegar, por eu ter começado por estruturado e ter programado muito só em estruturado.;-;

Então ao invés de eu colocar por exemplo as perguntas dentro dos métodos perguntas eu coloco como atributo? Ai na main é só digitar a pergunta dentro do objeto? AI estaria melhor o código só com essa mudança?

Obrigado pelo ajuda!

 

adicionado 0 minutos depois

@PédePano

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu tem que ver quais outros elementos do código também podem ser estudados como objeto e classe. Do mesmo jeito que a gente fez com perguntas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PédePano

3 horas atrás, PédePano disse:

Tu tem que ver quais outros elementos do código também podem ser estudados como objeto e classe. Do mesmo jeito que a gente fez com perguntas.

Achei que sabia fazer essa analise mas não consigo. Por exemplo os objetos pergunta1, pergunta2 etc, eles tem atributos que são cada uma das questões e tb as alternativas e a pontuação de cada uma delas, mas eu teria que mudar isso? Colocando isso na hora de criar o objeto? é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém pode me ajudar? Fui hoje conversar com o professor e mostrei a mesma UML que postei mais a cima, ai ele simplesmente me disse que se eu colocasse os métodos pergunta dentro da classe quis funcionaria e por isso é estruturado???? Eu entendi o que ele quis dizer, mas não sei como arrumar. 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Gomes da Silva Basicamente com o colega acima tentou explicar, para dar certo na orientação a objetos, é necessário criar as classes que serão utilizadas para criar um objeto. Isso você já sabe. Pois estou acompanhando o tópico.

 

Você cria a classe Perguntas, dentro dela terá os atributos da pergunta como a pergunta, as alternativas dela e o valor dela.

Vou dar um exemplo, mas fique ciente de que todos os professores pesquisam aqui, para saber se o aluno copia algo, ou se só está buscando conhecimento para implementar sozinho!

 

/*
 * Classe Perguntas
 */
package quis;

/**
 *
 * @author DIF
 */
public class Perguntas {
    //Atributos da classe Perguntas
    private String pergunta, a1,a2,a3,a4, Respostacerta;
    private int valor;

    //Construtor da classe
    public Perguntas(String pergunta, String a1, String a2, String a3, String a4, String Respostacerta, int valor) {
        this.pergunta = pergunta;
        this.a1 = a1;
        this.a2 = a2;
        this.a3 = a3;
        this.a4 = a4;
        this.Respostacerta = Respostacerta;
        this.valor = valor;
    }

   
   //Aqui gera-se os Getter e Setters
    public String getPergunta() {
        return pergunta;
    }

    public void setPergunta(String pergunta) {
        this.pergunta = pergunta;
    }

    public String getA1() {
        return a1;
    }

    public void setA1(String a1) {
        this.a1 = a1;
    }

    public String getA2() {
        return a2;
    }

    public void setA2(String a2) {
        this.a2 = a2;
    }

    public String getA3() {
        return a3;
    }

    public void setA3(String a3) {
        this.a3 = a3;
    }

    public String getA4() {
        return a4;
    }

    public void setA4(String a4) {
        this.a4 = a4;
    }

    public String getRespostacerta() {
        return Respostacerta;
    }

    public void setRespostacerta(String Respostacerta) {
        this.Respostacerta = Respostacerta;
    }

    public int getValor() {
        return valor;
    }

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

 

Com esta classe Perguntas,  agora podemos brincar na classe Main para testar ela:

public static void main(String[] args) {
        
        /*Instaciamos o objeto pergunta1 da classe Perguntas.
         *Os dados foram incluídos direto no construtor como pode ver a estrutura é desta forma:
         * <classe>Perguntas pergunta<objeto> = new Perguntas(pergunta, a1, a2, a3, a4, Respostacerta, 0)
         * Onde o pergunta é a pergunta, a1 a a4 são as alternativas, RespostaCerta é a resposta, e zero 
         * é o valor que ela tem, no caso deixaria como 1, onde a questão vale 1 ponto
         */
        Perguntas pergunta1 = new Perguntas("Quanto é 2 mais 2?", "2", "4", "1", "5", "4", 1);
        
        System.out.println(pergunta1.getPergunta());
        System.out.println("A) "+pergunta1.getA1());
        System.out.println("B) "+pergunta1.getA2());
        System.out.println("C) "+pergunta1.getA3());
        System.out.println("D) "+pergunta1.getA4());
        System.out.println("Esta questão vale "+pergunta1.getValor()+" ponto");
              
    }   
}

O que vemos ali é um mero exemplo, onde fazemos uma instância de objeto da classe Perguntas, definindo os atributos pelo construtor da classe.

 

Veja que depois de instanciar o objeto, você fica apto a acessar o método getter dos atributos da classe.

 

Então  pergunta1.getPergunta()  retorna a pergunta,  pergunta1.getA1() retorna a primeira alternativa...

 

Veja que isso é só um exemplo bem básico,  no caso, você pode usar este conhecimento para implementar a classe Jogador para ter os dados do jogador e a classe quis, para montar a estrutura do jogo, as perguntas, respostas, loop , contagem de pontos.. e etc.  E por fim, na classe Main, você instancia o objeto da classe quis, porque ela é quem vai gerar o jogo!

 

O paradigma da orientação a objetos é magnifico! 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DiF Entendi melhor olhando pelo código. Mas queria pegar o jeito de como implementar isso no meu projeto e em outros futuros. Me recomenda alguma apostila, vídeo aula ou algum exercício especifico para treinar esse pensamento orientado objeto?

 

 

Desde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Gomes da Silva Infelizmente, não tenho nenhum material para recomendar. Apenas o Youtube e muita pesquisa no google.

 

21 horas atrás, Gabriel Gomes da Silva disse:

algum exercício especifico para treinar esse pensamento orientado objeto?

No paradigma orientado a objetos, você deve sempre pensar em tudo como um objeto. Ou seja, para ele existir, é preciso ter uma classe na qual você possa instanciar o objeto.

 

O melhor exercício é fazer coisas simples. Como o caso do meu exemplo acima. O que postei  no post #09 é um exemplo bem simples de como criar um objeto de uma classe e acessar os métodos dela.

 

Pensa no seguinte(Leia com  voz do Marcelo Rezende kkk)

Todo objeto tem características, suas propriedades e funções.

 

Vamos ao exemplo de uma pessoa.

 

Qual as propriedades(caracteristicas) de uma pessoa?( de forma simples, sem muitos detalhes)

Ela tem uma idade, um nome, um tamanho, cor de olhos, cor do cabelo, corpo magro ou gordo. Quais são as funcionalidades de uma pessoa?   Vamos supor Comer, Dormir, falar....

 

Com isso temos ali as propriedades dela e os métodos dela.

Em código você pensa assim:

public class Pessoa{
   //As caracteristicas da pessoa
   private String nome;
   private int idade;
   private Double altura;
   private String porteFisico;
   private String olhos;
   private String corCabelo;
   
}

Declaramos ali na classe Pessoa, os atributos dela. Ou seja, as característicos da pessoa.

 

Com elas declarada, podemos agora implementar dois métodos para cada variável chamado de Getter e Setter

Onde o Getter é responsável por recuperar o valor e o Setter é responsável por setar(definir) um valor.

 

Assim criamos:

public String getNome(){
  return nome;
}

public void setNome(String nome){
   this.nome = nome;
}

No setter,  você tem que definir de  acordo com o tipo de variável e precisa ser "void"

Porque ele não retorna um valor como o getter.

 

Então por exemplo no caso da idade e altura ficaria:

public String getAltura(){
  return altura;
}

public void setAltura(Double altura){
   this.altura = altura;
}

 

Com todos os Getters e Setters criado dentro da classe Pessoa, você precisa instanciar, ou seja, criar um objeto desta classe lá no main.

 

Desta forma:

public static void main(String[] args) {
     Pessoa pai = new Pessoa();
 
}

Como podemos ver, criamos um objeto "pai" da classe Pessoa.

 

Agora como podemos dar um nome, uma idade e depois retornar este nome e esta idade?

 

Simples, chamando o objeto criado seguido do método Setter que foi criado lá na classe.

Vejamos:

 

public static void main(String[] args) {
     Pessoa pai = new Pessoa();
  
     //Define os valores de cada variável
     pai.setNome("Robervaldo");
     pai.setIdade(43);
     pai.setAltura(1.80); 
 
}

Ok, foi definido os valores.... como eu recupero eles??

 

Simples, chamos o objeto criado seguido do método de Getter

Vejamos:

public static void main(String[] args) {
     Pessoa pai = new Pessoa();
  
     //Define os valores de cada variável
     pai.setNome("Robervaldo");
     pai.setIdade(43);
     pai.setAltura(1.80); 
  
  
    //Recupera os valores definidos para o objeto
    System.out.println("O nome do Pai é "+ pai.getNome());
    System.out.println("Ele tem "+ pai.getIdade()+ " anos");
    System.out.println("Ele mede "+ pai.getAltura() + " metros");
 
}

Então se compilar isso, retornaria a seguinte coisa:

Citação

 

O nome do Pai é Robervaldo

Ele tem 43 anos

Ele mede 1.80 metros

 

 

Lembre-se,  você pode, implementar um construtor na classe Pessoa, para ter uma inicialização e poder instanciar o objeto em uma linha.

 

Assim, não precisaria ficar definindo os setters no main.

Veja o exemplo do post #09 onde eu criei um construtor na classe perguntas, e quando instanciei o objeto da classe pergunta, eu preenchi os dados dentro da instância da classe.

 

PS: Outra coisa muito importante é que você deve atentar-se aos modificadores de acesso das variáveis na classe.  São elas: public. private, protected e final.

 

O public, como o nome sugere, deixa as variáveis publicas, o private, deixa as variaveis privadas ou seja, elas agem somente dentro da classe, internamente. O protected, protege e só permite que sejam acessadas pelas classes do mesmo pacote e heranças.

O final serve para não permitir estender.

 

https://www.devmedia.com.br/metodos-atributos-e-classes-no-java/25404

 

Enfim, Recomendo você estudar bastante esta parte, é imprescindível que você entenda como funciona os modificadores de acesso.

  • Curtir 3
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu recomendo para estudar, a apostila da Caelum de java orientado a objetos, o meu professor usou elas como base para dar essa disciplina na faculdade, e ela é bem resumida. Comparada com os livros de java é claro!

A revista da Caelum você pode tanto ler online ou você pode baixar, mas para baixar você tem que fornecer alguns dados como e-mail, fica a seu critério.

Apostilas da Caelum

Apostila da Caelum de java orientado a objeto

 

Abs e boa sorte meu amigo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×