Classes java

bom pessoal

estou com uma duvida…

tenho uma classe(barra) que será adicionada em diversas outras classes ao longo de minha aplicação… gostaria de saber se tem como eu identificar dentro dessa classe barra a que classe ela está adicionada…

desde já muito obrigado

Acho que isso é a função da documentação. Um diagrama de classes mostrando as dependências resolve. Mas nada impede que vc adicione um comentário dizendo onde ela é instanciada. Mas considere a documentação.

não entendi como posso fazer isso usando documentação…
poderia me dar mais algumas dicas?

grato pela atenção

vc conhece análise OO e UML? Um diagrama de classes é um diagrama da UML.

alguns links:

www.omg.org/uml/
www.uml.org/
www.uml.com.br/

bem seu maresp!
eu conheço sim análise OO e UML e sei muito bem o que é um diagrama de classes… acontece que eu acho que vc não entendeu direito o meu problema, ou a minha dúvida…
eu sei qual classe esta adicionando a classe barra, afinal fui eu quem fiz essa chamada… e tenho um diagrama UML para me ajudar inclusive…

Acontece que tenho inúmeras classes chamando esta classe barra e quero saber como a classe barra pode identificar quem a chamou, em tempo de execução, pois preciso executar funções da classe que a instaciou assim que determinado evento ocorreu. Isso tem ser genérico. É possível? Como posso fazer isso? Espero ter me explicado direito agora.

Obrigado

ok… desculpe… realmente não entendí sua dúvida.

Bem, deixa eu ver agora se entendí. Vc quer saber quais classes instanciam “barra” em runtime.

Uma solução seria adicionar um atributo de classe i[/i] do tipo ArrayList. Fica mais ou menos assim:

Classe Barra:

[code]public class Barra {
// atributo de classe
static ArrayList al = new ArrayList();

// nomeDaClasse é o nome da Classe que instancia Barra
public Barra(String nomeDaClasse) {
al.add(nomeDaClasse);
}
}[/code]

Uma classe que instancie Barra:

[code]public class A {

Barra b = new Barra("A");

}[/code]

Não sei se isso resolve…

obs: não precisa me chamar de sr. não, só tenho 25 anos.

Isso eh meio feio, Marcelo… podem acontecer alguns bugs bem sutis - por exemplo, o de vc ter duas classes com o mesmo nome (sim, isso acontece - basta carregar a mesma classe em dois ClassLoaders).

O melhor jeito seria imitar o modelo de eventos da Swing (que, na verdade, eh o modelo de eventos dos JavaBeans):

[code]public class Barra {
private List listeners = new ArrayList();

public Barra() { … }

public addBarraListener(BarraListener listener) {
this.listeners.add(listener);
}

public void doStuff() {
for(Iterator i = listeners.iterator(); i.hasNext(); ) {
((Listener) i.next()).doStuffPerformed(new BarraEvent("bar"));
}
}
}[/code]

public class Foo implements BarraListener { public void doStuffPerformed(BarraEvent e) { System.out.println(e.getName()); } }

é… vivendo e aprendendo… mas esse atributo listeners não deveria ser static… se não, explique pq, please.

Aih eh decisao sua… se vc quer que os listeners sejam notificados quando qualquer instancia da classe Barra disparar um evento, marque o atributo como estatico, mas se vc quer que os listeners escutem apenas eventos disparados a partir de uma unica instancia de Barra, deixe como esta :slight_smile: