Contratos Nulos [Dúvida]  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
jujo
JavaTeenager

Membro desde: 29/09/2003 01:03:38
Mensagens: 173
Localização: Curitiba - PR
Offline

Olá galerinha.

Estive lendo um artigo do shoes, sobre contratos Nulos. Achei bem legal ele e a discussão que trouxe.
Porém me restou uma dúvida quanto a "solução" proposta. Talvéz alguém que tenha lido ou mesmo o philip possa me esclarecer.
Bom no começo do artigo ele trata do problema levantado pelo Todd Huss em algum post. E fala de uma solução que tods fazem que é:


O que seria igual que se o método lançasse uma NPE.

Depois ele discorre sobre várias outras soluções propostas, e no final trata do Design by Contract. E sua solução é implementar o pré-contrato e pós-contrato em métodos específicos, que mudam o estado do objeto.

Bom, segundo os seus exemplos ele acaba verificando os atributos da classe e parametros dos métodos e lança exceptions se elas não cumprirem o contrato, e a implementação continua igual a acima citada (código acima). Gostaria de saber no exemplo citado acima por ele, como fazer a implementação? (Verificar parâmetros null) Continuo verificando igual os objetos passados para o método e lanço exception? Eu entendi o resto do artigo e sobre os contratos e tudo mais. Só que ficou essa dúvida, pois a solução citada (código acima) foi meio criticada segundo o artigo e depois acabou em algo muito parecido (igual?!).

Agradeço quem puder me esclarecer isso.

Abraços!

Juliano D. Carniel
http://julianocarniel.blogspot.com
[WWW] [MSN] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Oi,

A questao levantada no artigo eh que nao se deve simplesmente conferir se um valor eh nulo ou nao. Nao adianta checar valores nulos apenas, deve-se obedecer o contrato.

Quando alguem diz que NPE eh erro de programador,e sta certo, mas o que eh preciso de definir sao contratos de utilizacao dos objetos.

O que ficar definido como pre-condiçao contratual deve ser obedecido. Se isso implica em "parametro X nao pode ser nulo", isso deve ser obedecido por quem o chama.

Como escrevi la, infelizmente Java nao da suporte a DbC como fazem outras linguagens mais puristas, entao voce vait er que escolher entre checar "manualmente" as pre-condiçoes ou definir que se um objeto chamador nao obedecer o contrato, voce nao pode obedecer a pos condiçao.

A primeira opçao eh indicada nos metodos que voce expoe como interface a usuarios ou outros sistemas, como actions num MVC qualquer. Voce nao sabe se quem esta invocando a operaçao vai cumprir o contrato, nao eh voce quem escreve este codigo.

A segunda alternativa eh a mais utilizada. Se voce nao recebeu sua pre-condiçao correta, nao garante sua pos condiçao, entao uma NPE eh possivel, mas o erro nao eh (neste caso) do metodo chamado, eh de quem o chamou, que nao obedeceu a pre-condiçao.

Mesmo linguagens como Eiffel, com aplo suporte a pre e pos condiçoes, definem que se pode "ligar" ou "desligar" a chacagem de contrato para performance. Geralmente se liga esta checagem enquanto se esta desenvolvendo e em debug.

Resumindo: Nao adianta checar NPEs, o que se deve fazer eh estipular e obedecer contratos

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
jujo
JavaTeenager

Membro desde: 29/09/2003 01:03:38
Mensagens: 173
Localização: Curitiba - PR
Offline

Valeeuuuu Shoes!



Agora esclareceu minhas dúvidas . Pode ser que não havia prestado muito atenção no negócio. Mas enfim, parabéns pelo artigo lá bem interessante.

Se me permite, achei alguns erros nele, principalemente de palavras repitidas, e outras palavras perdidas no texto.

Abraço!

Juliano D. Carniel
http://julianocarniel.blogspot.com
[WWW] [MSN] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

jujo wrote:
Se me permite, achei alguns erros nele, principalemente de palavras repitidas, e outras palavras perdidas no texto.


Alemd o meu conehcido problema na digitaçao, tem o copiar e colar maldito

Se ahcar algo grave, por favor me avise


Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Tenta o pdf que ele indica, houve uma tentativa de "refactoring" nele uhauhauhauhahua
fzampa
Virtual Machine Man
[Avatar]

Membro desde: 05/11/2004 18:22:45
Mensagens: 615
Localização: Belo Horizonte
Offline

Pessoal, desculpe mas to chegando agora neste tópico e gostaria de saber onde está este artigo do Shoes.

Algum link?

valeus!


[MSN]
rodrigo_gomes
GUJ Master
[Avatar]

Membro desde: 25/11/2003 15:45:21
Mensagens: 1088
Localização: São Paulo
Offline

olá,

http://www.fragmental.com.br/arquivos/contratosnulos.pdf

rodrigo de paiva gomes




http://twitter.com/rod_gomes
[WWW] [MSN] [ICQ]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Nunca fui fã de DBC, não acho que traduza direito em código. Eiffel é uma prova disso, a linguagem é horrivel de usar.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
fzampa
Virtual Machine Man
[Avatar]

Membro desde: 05/11/2004 18:22:45
Mensagens: 615
Localização: Belo Horizonte
Offline

louds wrote:Nunca fui fã de DBC, não acho que traduza direito em código. Eiffel é uma prova disso, a linguagem é horrivel de usar.


Bom,

eu li o artigo e achei interessante, apesar de em alguns momentos o código poder ficar meio confuso dependendo do que for feito (lógico).

Então, a comparação de campos com null é uma boa saída pra vc?

Como vc propõe que seja feito o controle dos objetos?



[MSN]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Use o padrão null-object ou exceptional-case object.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
cmilfont
JavaBaby
[Avatar]

Membro desde: 23/02/2005 10:58:35
Mensagens: 84
Offline

Louds, voce poderia indicar material sobre esses padrões "null-object ou exceptional-case object"?

http://www.milfont.org/tech/
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

louds wrote:Use o padrão null-object ou exceptional-case object.


Muito interessante e prático o null-object, entretanto todos os exemplos que eu vi tinham algum tipo de singleton - alguma razão em especial ?

Agora, não encontrei, ainda que tenha pesquisado apenas alguns minutos, nada sobre o "exceptional-case object", poderiam me dar mais detalhes?

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
maurenginaldo
JavaEvangelist
[Avatar]

Membro desde: 26/04/2006 18:16:41
Mensagens: 435
Localização: Belo Horizonte-MG
Offline

Bom,

já faz um tempo que esse post foi aberto, mas é um assunto muito interessante.

Se eu for estabelecer contratos para um Entity Bean, onde ficariam a checagem dos atributos: na própria classe ou em outra classe?

Outra questão: O hibernate validator seria uma implementação de "design by contract", onde colocamos uma anotação por exemplo @Lenght(min=5,max=10) como definição da invariante. Porém a pré e pós condição é tratada por ele ao persistir o objeto.

O que acham disso?



Mauren Ginaldo Souza
______________________________________________________________
"Quis Custodie Ipsos Custodes." Quem guardará os guardiões.
[Email] [WWW] [MSN]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

maurenginaldo wrote:
Se eu for estabelecer contratos para um Entity Bean, onde ficariam a checagem dos atributos: na própria classe ou em outra classe?


Geralmente na classe. Uma classe é responsável por se manter em estado válido e lançar exceções caso este seja violado.

maurenginaldo wrote:
Outra questão: O hibernate validator seria uma implementação de "design by contract", onde colocamos uma anotação por exemplo @Lenght(min=5,max=10) como definição da invariante. Porém a pré e pós condição é tratada por ele ao persistir o objeto.


Qual a questão?

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
mateusbrum
JavaBaby
[Avatar]

Membro desde: 21/01/2007 22:55:29
Mensagens: 84
Offline

Google...
Você quis dizer....

Outra questão: O hibernate validator seria uma implementação de "design by contract"?( onde colocamos uma anotação por exemplo @Lenght(min=5,max=10) como definição da invariante.)
Porém (infelizmente) a pré e pós condição é tratada por ele ao persistir o objeto.

Mateus Henrique Brum
Analista Programador Java

Sun Certified Java Programmer 6.0
Sun Certified Web Component Developer 5.0
[Email]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team