• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedruss

Relacionamento de Objectos (many-to-one)

10 mensagens neste tópico

Boas,

Estou a fazer um trabalho para a escola que consiste numa aplicação que auxilie a gestão de clientes, artigos e fornecedores.... Já fiz o UML e agora estou a implementar para o Visual C++. Mas a teórica é bem mais bonita que a prática... :biggrin:

A dúvida que me está a surgir consiste no seguinte: tenho uma classe "loja" e uma classe "cliente", a relação existente entre estas duas classes é de um para muitos(many-to-one)

Pergunta: Como é que vou fazer para que um objecto "loja" tenha conhecimento de todos os objectos "cliente"? Isto é necessário para depois poder aceder, através da classe "loja", aos clientes para efectuar, por exemplo, uma listagem de todos os clientes, pesquisa de um cliente, etc....

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma das formas é guardares os clientes na loja. Usa um vector<Cliente>.  Assim não tens problemas em lista-los.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto em termos de BD é ao contrario, ou seja o cliente tem um apontador para loja, que é outra forma de fazer, mas para o caso é melhor a lista.

Agora... eu acho que devia ser um (many-to many) porque um cliente pode pertencer a mais lojas, a não ser que os dados sejam apenas usados localmente por cada loja, nesse caso faz sentido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Infelizmente o trabalho tem de ser feito sem recurso a base de dados... ;)

Já agora outra pergunta, estava a pensar fazer uma superclasse "pessoa" onde derivava as sub-classes "cliente", "fornecedor" e "funcionario". Neste caso tambem posso usar vectores? Se usar vectores tenho de meter na classe "loja" o vector de cliente, fornecedores e funcionários da mesma forma?

Brigadão pela a ajuda!  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar vectores para todos os tipos de dados que quiseres incluindo as classes, não percebi a dúvida.

Não tens de por os vectores na classe loja mas essa deve ser a melhor maneira. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Não sabia se podia colocar classes derivadas... Mas estou a ver que posso...  (ops, desculpem a "maçariquice"...:-[ )

Neste caso quem fala em vectores também fala em listas (da STL), certo? (foi aqui que começou a minha dúvida presente na sala de discussão "SOS - classe list com objectos", mas agora já estou a perceber o encadeamento da "coisa"...  :hmm: )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Não sabia se podia colocar classes derivadas... Mas estou a ver que posso...  (ops, desculpem a "maçariquice"...:-[ )

Neste caso quem fala em vectores também fala em listas (da STL), certo? (foi aqui que começou a minha dúvida presente na sala de discussão "SOS - classe list com objectos", mas agora já estou a perceber o encadeamento da "coisa"...  :hmm: )

As estruturas de dados dão para pôr o que quiseres lá dentro. Seja qual estrutura de dados for seja qual tipo de dados for. Isto se estiverem escritas para tal, o que é o caso da STL. É mesmo essa a ideia de uma linguagem orientada a objectos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que nada melhor que um exemplo para te esclarecer. Falta implementar excepçoes, erros, etc etc, mas o essencial está aqui, tudo muito "orientado a objectos" como eles gostam nas cadeiras de OOP :)

Só mais umas coisas:

- Acho que não deves misturar Fornecedores, Clientes e Funcionarios nos HashMaps/Listas, etc, embora eles devam ser todos subclasses de "Pessoa".

- Acho que pode ser bastante melhorados se for separado em várias classes os métodos:

    - Class GerirClientes co-existirna mesma package e faz as operações básicas sobre Clientes e é chamada pela Loja.

PS: Esqueci-me de dizer que fica tambem um exemplo de overriding só pra ficar bonito lol

Cumprimentos :)

class Loja
{
HashMap<int, Cliente> _clientes = new HashMap<int, Cliente>;

public Loja()
{
	..
}

public void criarCliente(int id, String nome, String morada)
{
	Cliente novo = new Cliente(id);
	novo.setNome(nome);
	novo.setMorada(morada);

	_clientes.put(id, novo);
}

private void imprimeLinhaCliente(Cliente c)
{
	System.out.println( c.getId() + " | " + c.getNome() );
}

public void listarClientes()
{
	System.out.println("-- Listagem Clientes");

	for ( Cliente c : _clientes )
	{
		imprimeLinhaCliente(c);
	}
}

public void procurarCliente(int id)
{
	System.out.println("-- Resultado Pesquisa ID: " + id);

	for ( Cliente c : _clientes )
	{
		if ( c.getId() == id )
		{
			imprimeLinhaCliente(c);
		}
	}
}

public void procurarCliente(String nome)
{
	System.out.println("-- Resultado Pesquisa Nome: " + nome);

	for ( Cliente c : _clientes )
	{
		if ( c.getNome() == nome )
		{
			imprimeLinhaCliente(c);
		}
	}
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias ter dado um exemplo que não se relacionasse directamente com o que ele tem que fazer.

Anda tudo muito ajudante hoje... ::)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que ás vezes importa dar exemplos e também não reparei que isto era C++ portanto ele tem de "traduzir" o Java para C++ ainda vai aprender pelo menos com isso :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora