Dúvida na criação de classes
Tenho duas classes : FormaPagamento e CaixaItem. Em FormaPagamento tenho as propriedades ID e Nome e mais outras 10 propriedades.
Minha duvida esta em CaixaItem. Ela possui uma ligação em FormaPagamento. Devo ter em CaixaItem somente a propriedade FormaPagamentoID ou devo ter um objeto FormaPagamento como propriedade dessa classe?
Minha duvida esta em CaixaItem. Ela possui uma ligação em FormaPagamento. Devo ter em CaixaItem somente a propriedade FormaPagamentoID ou devo ter um objeto FormaPagamento como propriedade dessa classe?
Rjun
Curtidas 0
Respostas
Yallebr
25/10/2006
Rjun,
Pode ter das 2 formas. O mais coerente seria apenas a ligação. Porque?
Na OO vc tem a ideia que as classes devem ser a mais independente possível. Se vc criar a classe dentro da outro vc tem uma ´Composição´ se vc apenas ligar você tem uma ´Agregação´
A ´composição´ tem a ideia que a classe so tem sentido existir se a outra existir, a ´agregação´ indica que a classe depende da outra mas pode existir sem a outra e até mesmo ter ligações com outras classes.
Ou seja se a classe ´CaixaItem´ não existir não posso sem tirar um relatório de ´FormaPagamento´ ? Se sim faça ´composição´ para ficar melhor encapsulada, se não faça ´agregação´
Se não ficou claro poste novamente.
Yalle Paixão
Pode ter das 2 formas. O mais coerente seria apenas a ligação. Porque?
Na OO vc tem a ideia que as classes devem ser a mais independente possível. Se vc criar a classe dentro da outro vc tem uma ´Composição´ se vc apenas ligar você tem uma ´Agregação´
A ´composição´ tem a ideia que a classe so tem sentido existir se a outra existir, a ´agregação´ indica que a classe depende da outra mas pode existir sem a outra e até mesmo ter ligações com outras classes.
Ou seja se a classe ´CaixaItem´ não existir não posso sem tirar um relatório de ´FormaPagamento´ ? Se sim faça ´composição´ para ficar melhor encapsulada, se não faça ´agregação´
Se não ficou claro poste novamente.
Yalle Paixão
GOSTEI 0
Rjun
25/10/2006
Na verdade CaixaItem e FormaPagamento são independentes. Mas CaixaItem necessita de FormaPagamento. O problema é que eu preciso de mais duas propriedades de FormaPagamento(Nome/CreditoImediato). Acho que não tem muito sentido em criar essas duas propriedades em CaixaItem já que elas dizem respeito a FormaPagamento. Mas não sei se é correto eu criar um objeto sendo que utilizarei apenas duas propriedades desse objeto.
GOSTEI 0
Rjun
25/10/2006
Gostaria de debater outra coisa. Imagine o seguinte cenário:
- Classe Contato que representa todos os contatos de uma empresa (Cliente, vendedor, fornecedor, transportadora, etc.).
- Classe Venda que representa as movimentação de venda.
- Classe ItemVenda que representa os itens de uma venda.
- Classe Produto que representa os produtos da empresa.
Na classe venda tenho 3 propriedades do tipo Contato, para representar o cliente, o vendedor e a transportadora. Mas as propriedades de contato que me interessam no momento de uma venda são apenas o ID e o Nome. Não é necessário eu preencher as outras propriedades de contato, correto? Isso também se refere aos itens de venda, ja que cada item de venda possui uma propriedade do tipo produto e nesse momento não preciso de todas as propriedades de produto. Carrego somente a que eu necessitar?
Agora imagine que tenho dois grids, um com os clientes da empresa e outra com as vendas, e queira exibir uma janela com os detalhes de cliente. Essa janela pode ser exibida clicando-se na janela de cliente ou de vendas. Repare que na lista do cliente o objeto selecionado tera todas as suas propriedades exibidas e na janela de vendas somente estarão preenchidas as propriedades ID e Nome. Como faço nesse caso. Passo somente o ID para a janela de edição de cliente e ela faz a carga das propriedades?
Agradeço qualquer colaboração.
- Classe Contato que representa todos os contatos de uma empresa (Cliente, vendedor, fornecedor, transportadora, etc.).
- Classe Venda que representa as movimentação de venda.
- Classe ItemVenda que representa os itens de uma venda.
- Classe Produto que representa os produtos da empresa.
Na classe venda tenho 3 propriedades do tipo Contato, para representar o cliente, o vendedor e a transportadora. Mas as propriedades de contato que me interessam no momento de uma venda são apenas o ID e o Nome. Não é necessário eu preencher as outras propriedades de contato, correto? Isso também se refere aos itens de venda, ja que cada item de venda possui uma propriedade do tipo produto e nesse momento não preciso de todas as propriedades de produto. Carrego somente a que eu necessitar?
Agora imagine que tenho dois grids, um com os clientes da empresa e outra com as vendas, e queira exibir uma janela com os detalhes de cliente. Essa janela pode ser exibida clicando-se na janela de cliente ou de vendas. Repare que na lista do cliente o objeto selecionado tera todas as suas propriedades exibidas e na janela de vendas somente estarão preenchidas as propriedades ID e Nome. Como faço nesse caso. Passo somente o ID para a janela de edição de cliente e ela faz a carga das propriedades?
Agradeço qualquer colaboração.
GOSTEI 0
Marco Salles
25/10/2006
Aqui temos a mesma ideologia Rjun..
Antes de proseguir , gostaria de deixar uma interroçação no ar..
citação de yallebr
Eu gostariade levantar um outra definição
O termo composição , apesar de muito sugestivo , não pode ser entendido como algo que se esta ´compondo´ uma classe .... Para isto se usa o termo Agregação....Na realidade , composição , se refere a constituição dos objetos.. Por exemplo uma classe automovel [b:ba79e6733b]é composto por[/b:ba79e6733b] : motor , caixa de marcha , porta-mala etc...
O termo composição , nen aparece nas operações básicas no processo de abstração..São eles:
Antes de proseguir , gostaria de deixar uma interroçação no ar..
citação de yallebr
A ´composição´ tem a ideia que a classe so tem sentido existir se a outra existir, a ´agregação´ indica que a classe depende da outra mas pode existir sem a outra e até mesmo ter ligações com outras classes.
Eu gostariade levantar um outra definição
A [b:ba79e6733b]agregação/decomposição [/b:ba79e6733b]-->>> implica em um aclopamento forte entre as entidades envolvidas..A existência de Agregação fica caracterizada , quando uma entidade é parte integrante da outra , não fazendo sentido a existência se uma sem a existência da outra...
O caso de [b:ba79e6733b]Associação[/b:ba79e6733b] , ai sim ... teremos existências independentes , porem podemos ter um ligação ou ligaçoes entre as classes dependendo da processo de abstração envolvido
O termo composição , apesar de muito sugestivo , não pode ser entendido como algo que se esta ´compondo´ uma classe .... Para isto se usa o termo Agregação....Na realidade , composição , se refere a constituição dos objetos.. Por exemplo uma classe automovel [b:ba79e6733b]é composto por[/b:ba79e6733b] : motor , caixa de marcha , porta-mala etc...
O termo composição , nen aparece nas operações básicas no processo de abstração..São eles:
Classificação/Instanciação
Generalização/Especialização
Agregação/Decomposição
Associação
GOSTEI 0
Rjun
25/10/2006
Isso não é uma critica e sim uma constatação. Reparem que tópicos sobre OO não prosperam. Isso ocorre também no forum de C# do MSDN. Acho que é por que a maioria dos programadores de C são oriundos de VB e Delphi.
GOSTEI 0
Fabiano Góes
25/10/2006
concordo com vc Rjun,
ta dificil de conseguir que um tópico de OO prospere !!!
ta dificil de conseguir que um tópico de OO prospere !!!
GOSTEI 0
Marco Salles
25/10/2006
Desculpe discordar de voces...O fato de assuntos como POO não prosperar se deve no meu modo de ver a vários ramificaçoes... Primeiro por se tratar de um assunto aonde envolve a bastração... O modelo é pessoal e subjetivo.. Segundo pela nossa capacidade de ainda raciocinar com o modelo relacional.. Terceiro o não conhecimento em alguns casos de quem faz a pergunta sobre o tema.....A maior dúvida para mim é quando não se tem a duvida por não saber de fato qual é a duvida... E isto que se observa nos tópicos sobre POO...
Que ver um exemplo:
http://forum.clubedelphi.net/viewtopic.php?t=81879
Como ira propesparar um tópico desse... Não to aqui fazendo critica ao amigo que fez o tópico. Pois ele tem e deve ter todo o direito de saber , so que fica uma pergunta solta no ar e não da para em um tópico dizer o que tem em quinhentas páginas de alguns livros...
O que eu acho importante é ter os conceitos , estudar os exemplo(Clube delphi edição 75 tem um bom exemplo) e moldar o conhecimento para nossos casos especificos
Aquel livro que indiquei para voce Fabiano Góes é excelente... Voce ja comprou o livro ??? Não esqueça que te devolvo o dinheiro de volta caso não goste...
Que ver um exemplo:
http://forum.clubedelphi.net/viewtopic.php?t=81879
Como ira propesparar um tópico desse... Não to aqui fazendo critica ao amigo que fez o tópico. Pois ele tem e deve ter todo o direito de saber , so que fica uma pergunta solta no ar e não da para em um tópico dizer o que tem em quinhentas páginas de alguns livros...
O que eu acho importante é ter os conceitos , estudar os exemplo(Clube delphi edição 75 tem um bom exemplo) e moldar o conhecimento para nossos casos especificos
Aquel livro que indiquei para voce Fabiano Góes é excelente... Voce ja comprou o livro ??? Não esqueça que te devolvo o dinheiro de volta caso não goste...
GOSTEI 0