Jump to content

Java e Classes


SkyGazeR
 Share

Recommended Posts

Boas,

comecei a programar Java há algum tempo e surgiu-me agora um projecto um pouco maior quando comparado com os anteriores. Difere pelo facto que, pela análise que fiz, serão necessárias mais de 2 classes (5 penso). Devido a minha falta de prática estou com algumas dúvidas quanto a abordagem a seguir, uma delas é a comunicação entre classes:

denominemos as classe de A..D

A os objectos da classe B vai ser geridos pelos da A.  O objecto da classe C vai ser manipulado pelo os objectos da classe B e D.

Onde tenho de criar o objecto C para que possa ser gerido pelo B e D? Tenho de o criar globalmente? Género no main:

public ObjectoC c  = new ObjectoC;

😞 estou um pouco confuso...sugestões ou elucidações? Se acharem muito abstracto eu posso colocar um cenário mais concreto  😉

Link to comment
Share on other sites

Se até agora não sentiste necessidade de usar mais de 2 classes, então se calhar não tens mesmo programado em Java... e esse será um primeiro problema. O segundo é que a forma como explicas o problema não é propriamente fácil de perceber.

Nem a explicação nem o problema, ora se precisas de um local para gerir um conjunto de classes então cria-o, se é no método main é contigo e com a forma como estás a resolver o problema.

Objectos públicos é que é algo difícil de perceber, é muito raro ter-se um objecto que tenha de ser público.

Link to comment
Share on other sites

Sim é verdade, como disse, comecei a programar em java recentemente e só agora agora surgiu esta questão das várias classes.

Nem a explicação nem o problema, ora se precisas de um local para gerir um conjunto de classes então cria-o, se é no método main é contigo e com a forma como estás a resolver o problema.

Ok, uma situação mas concreta. Tenho um programa para gerir os funcionários de uma empresa. A gerência dos referidos é efectuada através de comandos (no estou a trabalhar com GUI). O programa deve permitir também macros, ou seja, ficheiros à parte com conjunto de comandos que facilitarão a gerência dos trabalhadores. Depreendemos então as seguintes possíveis classes:

1. main (óbvia)

2. trabalhador (cada objecto representa um trabalhador)

3. gestor de macros (gere uma array de objectos do tipo macro)

4. gestor dos trabalhadores (gere a array de objectos do tipo trabalhador)

5. macro (as referidas macros, basicamente representam um conjunto de instruções e os respectivos métodos para as interpretar);

Quando o programa começa, o objecto gestor_de_trabalhadores é imediatamente inicializado. No main o user tem um menu com as operações e os respectivos comandos. Se o user quiser adicionar um novo trabalhador, simplesmente escreve "INSERIR nome idade salário" e programa irá chamar o método gestorDeEmpregados.addEmpregado(nome, idade, salario). Sem problemas por enquanto.

Agora vem a parte mais difícil. Como escrevi, o programa deve fornecer um gestor de macros, exemplo: tem-se o seguinte ficheiro de texto:

"INSERIR Joao 34 400

INSERIR ROberto 23 500

INSERIR Ze 44 1000"

O programa deve poder carregar este ficheiro na memória. A minha abordagem foi guardar cada linha na posição de uma array dentro de um objecto Macro, ou seja: gestorDeMacros.addMacro("caminho do ficheiro .txt", nome_da_macro). Quando o utilizador der o comando para correr a macro irá chamar o gestorDeMacros.executeMacro(nome_macro), que terá por missão procurar o objecto do tipo macro com o atributo nome igual ao da macro pretendida. Após encontrá-la, chama o método macro.execute() . Agora aqui é que está a grande questão. O objecto gestorDeEmpregados foi inicializado na main. Posso chamar métodos do objecto gestorDeEmpregados dentro do método execute() da macro?

Link to comment
Share on other sites

Agora aqui é que está a grande questão. O objecto gestorDeEmpregados foi inicializado na main. Posso chamar métodos do objecto gestorDeEmpregados dentro do método execute() da macro?

Porque é que precisas chamar métodos dessa forma?

Para mim, a diferença entre gestor de empregados e gestor de macros não faz sentido. Queres criar um programa para gerir funcionário e que tenha uma funcionalidade para aplicar diversos comandos de forma sequencial a ele mesmo. Ora tens uma classe, chamemos-lhe Gestor, com métodos para adicionar, remover, enfim, gerir os funcionários. Este gestor existe dentro da classe que representa a tua aplicação, e essa classe, que conterá o método main, pode ter o método que lê os comandos do ficheiro e os aplica directamente ao gestor.

Neste caso objectos que representem macros não serão necessários.

Link to comment
Share on other sites

Porque é que precisas chamar métodos dessa forma?

Não percebi : |

Este gestor existe dentro da classe que representa a tua aplicação, e essa classe, que conterá o método main, pode ter o método que lê os comandos do ficheiro e os aplica directamente ao gestor.

Hum...bem visto  ?  É uma forma nova de ver as coisas. Vou pensar nessa abordagem, avançar um bocado e ver no que é que dá  😉

Thanks  😞

Link to comment
Share on other sites

A pergunta era para saber porque é que precisavas de chamar métodos do gestor dentro do método execute da macro. Isto porque assim como tinhas, dava a ideia que a macro era mais que uma macro, dava a ideia que a macro era também gestora.

A ideia era ter um gestor que geria as várias macros. O gestor apenas fazia isso, adiciona/removia e mandava executar a macro desejada. A execução da macro era um método próprio: o execute(). Quando no gestor de macro encontrasse a macro desejada chamava o método execute() da mesma. A maior recomendação que recebo no aprendizado de java é para reduzir tudo a objectos...se calhar estou a exagerar  😞

Já agora, conheces alguma fonte que explique melhor o paradigma de programação orientado a objectos (em ambiente java)? Algo que foque em detalhe esta parte; ciclos e estrutura é desnecessário.

Link to comment
Share on other sites

Na wiki do p@p está um tutorial para Java que aborda essa parte. Bem como no tutorial da Sun.

Passar tudo a objectos é uma boa forma para aprender POO, mas antes de passares as coisas para objectos convém ver se realmente fazem sentido como tal. As classes e objectos devem aproximar a resolução do problema de objectos que possamos entender e que façam sentido existir, por exemplo, se estivesses a modelar um circuito eléctrico, os fios e interruptores podiam ser objectos, mas a electricidade nem por isso 😞

Do mesmo modo, uma macro pode ser um objecto, mas será que é necessário um outro gestor para aplicar as macros? Tens a classe da tua aplicação, um gestor para os teus dados, precisas de outro gestor só para as macros? Que operações tens de fazer sobre as macros que justifiquem mais um "gestor"? A questão é mesmo essa, tudo bem que ao aprender devemos usar muito os objectos mas é preciso que esses objectos façam sentido na resolução do problema.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.