[RESOLVIDO]Dúvida para criação de classe no Java

11 respostas Resolvido
W

Pessoal, podem me passar dicas de como vocês “percebem” que é necessário criar uma nova classe, estou começando agora e tenho muita dificuldade em saber se o ítem em questão vai ser uma nova classe ou apenas um atributo de uma classe. Por exemplo, em um exercício que estava fazendo tinha a classe turma que tinha o atributo aluno, algumas páginas depois foi informado que aluno deveria ser uma classe. Porém se eu for partir desse método eu vou criar classes infinitas (pais, estado, cidade, escola, turma, aluno…etc) e acabar ficando maluco!!@@

11 Respostas

F
Solucao aceita

Bom noite William,

é uma decisão que com o tempo você consegue ter sem muitos problemas, no inicio você pode ficar um pouco confuso mesmo, mas tente usar a seguinte técnica, vamos a um exemplo.

Você citou que aluno pertecente a uma turma, correto, existe a necessidade da identificação de mais dados do aluno? por exemplo, eu preciso saber o nome do aluno, idade dele, nome do pai, nome da mãe, etc.
então esses dados são atributos de um aluno, são dados que compoêm um aluno, que por sua vez vão compor um objeto Aluno, e que esse objeto será uma classe chamada Aluno.

poderia colocar os valores (atributos) de aluno, nome, nomePai, nomeMae, etc, dentro da classe
turma? poderia! mas fazendo isso você perderia todo o conceito de orientado a objetos e os padrões de projeto que nos guiam a ter um desenvolvimento com qualidade, desacoplado e coeso.

Então sempre que pensar, que um determinado objeto da vida real, no caso o Aluno, devo ter identificado algum valor do mesmo em futuro próximo ou no presente momento, o ideal é criar uma classe, mas isso sempre vai ser uma questão de análise e de circustância do momento, tente sempre se questionar, pensar e análisar um pouco a situação e seu projeto.

J

Essa parte de modelação está relacionado mais à UML do que a programação em si. Geralmente quando programador, você passa a analisar a modelação já pronta ou em desenvolvimento. Digo isso no caso de ir trabalhar numa empresa. Até mesmo quem já tem pratica em criar abstrações, as vezes demora um certo tempo para que a ideia amadureça.

No seu exemplo, Aluno pode ser um atributo de Turma, na propria linguagem java já tem algo para você se adequar a isso. Por exemplo, usando Composição, Agragação, Encapsulamento, Herança. No caso da composição, na pratica ficaria assim:

Turma turma = new Turma(new Aluno());

Onde a Classe turma recebe como parametro o objeto Aluno. Então, ela passa a usar tambem todos os seus atributos ao preencher os dados da Turma.

R

Isso é bem simples:

1 conceito = 1 classe

então sim, você deve ter uma classe para cada conceito: pais, estado, cidade, escola, turma, etc. Cada um destes conceitos origina uma classe. Mesmo que esta classe tenha um único atributo, como nome por exemplo.

T

Acredito que a ideia se embase na resposta do nosso colega Felipe_Miranda. Vocês não deve criar uma classe para tudo, pois senão como você disse acabará se perdendo em meio ao código, inicialmente é claro pensando em grandes projetos isso sim é possível e muito utilizado, mas inicialmente desenvolva sua capacidade de organização, nomenclatura e etc que se tornará bem tranquilo com o tempo. Comece imaginando algo, por exemplo a turma (classe), sabemos que podemos ter n dados (atributos) em relação a turma, como por exemplo ingresso, professor, aluno, sala, ingresso e etc, se concentre na informações importante para a turma no seu projeto, então esses serão seu atributos. Ah! mas talvez você precise de mais informações do aluno por exemplo, nesse momento então é interessante criar uma nova classe (aluno) com suas informações importante (nome, sobrenome, nascimento, nomedoPai e etc), e então como o nosso colega Jonas disse você herda nesse caso você tira o atributo aluno na turma, ou seja não precisa ter la (String aluno;), você apenas herda as informações(atributos) da classe aluno para a classe turme ( turma t = new turma(new aluno());). A respeito do endereço do aluno, se for endereço simples (somente o nome da rua por exemplo) você pode mante-lo como atributo dentro da classe aluno, porém se for um endereço mais detalhado, quadra, cidade, cep, número, de acordo com a necessidade do seu sistema você pode reserva o endereço para um classe especifica, e utiliza-la para outra classe como professor por exemplo herdando assim as informações e simplificando o código, pois não precisará de duas classes de endereços. Resumindo então você tem que imaginar coisa que são cruciais para seu projeto, coisas que precisam de informações especificas, então essas serão suas classes.

J

rmendes08 não dá para fazer uma classe só para colocar um atributo. Exceto em caso muito excepcional. Geralmente interefaces apenas um atributo. Caso você fizer uma classe para um atributo você está desconsiderando polimorfismo, herança, e toda a abstração necessaria para uma boa implementação

J

Exatamente. E no caso da turma possuir um aluno e um aluno possuir um endereco.

Endereco endereco = new Endereco();

Aluno possui um endereco, então terá no seu construtor um objeto endereco

Aluno aluno = new Aluno(endereco);

aluno.setNome("");

aluno.getEndereco().setRua("");

Turma turma = new Turma(aluno);
turma.setNomeTurma("");

Assim o objeto turma terá informações completas sobre si mesma e do aluno/endereco

A

Ele não disse atributo, ele falou conceito e está completamente certo.

O Aluno é um “CONCEITO”, NÃO um “ATRIBUTO”. Os atrbutos de um aluno são NOME, DATA NASC., COR DA PELE, ENDERECO (que pode ser um conceito também), etc.

J

você deve ter uma classe para cada conceito: pais, estado, cidade, escola, turma, etc. Cada um destes conceitos origina uma classe.

Não faz sentido pais, cidade ser uma classe ou conceito. O conceito como voce diz, deveria ser a classe Endereco. A abstração funciona assim, sabendo o que pertence a grupo, e a abstração maior ficaria no topo, sendo a Classe mais Abstrata.

E aluno sim, nesse caso é um atributo. Não como os atributos que voce pensa, mas um atributo do Tipo Aluno, na classe Turma…

public class Turma {

private String nomeTurma;

private Aluno aluno;  // Viu que aluno é atributo da classe Turma?

}

A

Acho que você entendeu errado. Aluno aí é uma classe. É um atributo de relacionamento, mas existe um Aluno.java em algum lugar com seus próprios atributos.

A dúvida do amigo é se na classe principal dele deveria ser um [String aluno] ou um [Aluno aluno].

Releia o tópico principal e verá que a dúvida é se essa deveria ser a abstração. Então nesse caso sim, 1 CONCEITO = 1 CLASSE.

Porque não? País tem atributos específicos e dependendo do tamanho e tipo de informações do seu domínio essa classe pode ter 2-N atributos.

J

Willian_Ferreira: “Por exemplo, em um exercício que estava fazendo tinha a classe turma que tinha o atributo aluno, algumas páginas depois foi informado que aluno deveria ser uma classe.”

adriano_si: “A dúvida do amigo é se na classe principal dele deveria ser um [String aluno] ou um [Aluno aluno].”

Pelo que vi a dúvida não era exatemente essa que você diz. Releia as respostas minhas. E
não existe relacionamento de 2-N. Você é que não leu todas as minhas respostas.

Quis dizer que ele pode fazer agregação entre as classes. Onde Turma POSSUI Aluno, e Aluno POSSUI Endereco. O endereço é que deve ter os atributos obviamente relacionados, pais, cidade, estado, etc. A turma, usando esta agregação receberia no cadastro, ela propria com seus atributos, receberia os atributos do aluno que por sua vez tem os atributos do endereço: receberia num unico objeto todas essas informações.

Você deve crirar uma classe pais, em um caso excepcional. Um programa de estatistica por exemplo, onde PAIS pode ter muitas informações, o que creio que não se adequaria a questão do William

W

Obrigado pelas respostas galera, ajudaram bastante!!!

Criado 27 de junho de 2016
Ultima resposta 15 de jul. de 2016
Respostas 11
Participantes 6