Boa noite pessoal, poderiam por favor me tirar uma dúvida a respeito da questão abaixo:
5- Quais nomes de métodos obedecem ao padrão JavaBeans? (Marque todas as corretas)
A. addSize
B. getcust
C. deleteRep
D. isColorado
E. putDimensions
O livro dá como solução da questão as alternativas B e D.
Ai que está minha dúvida: A alternativa B não obedece ao camelCase, pois deveria ser getCust.
No padrão JavaBeans é obrigatório seguir a risca o camelCase ou o livro está correto em considerar a alternativa B correta?
Pelo padrão, todas as alternativas são corretas. O padrão não exige que o programador siga a convenção de código do java, já que ele pode definir um BeanInfo. Como ele também fala em nome de método, e não de propriedade, não há a obrigatoriedade de iniciar com get ou set, o método apenas precisa ser público, ou ser declarado no BeanInfo. Veja:
[quote=“especificação no capítulo 8.2”]
However, within Java Beans the use of method and type names that match design patterns is entirely optional. If a programmer is prepared to explicitly specify their properties, methods, and events using the BeanInfo interface then they can call their methods and types whatever they like. However, these methods and types will still have to match the required type signatures, as this is essential to their operation.
Although use of the standard naming patterns is optional, we strongly recommend their use as standard naming conventions are an extremely valuable documentation technique.[/quote]
[quote=“especificação no capítulo 8.5”] 8.5 Design Patterns for Methods
By default, we assume that all public methods of a Java Bean should be exposed as external methods within the component environment for access by other components or by scripting languages. By default, this includes any property accessor methods, and any event listener registry methods.[/quote]
Está claro, portanto, que seguir a convenção de camel case é totalmente opcional, mas é fortemente recomendada. O livro deveria reformular a pergunta para:
“Qual desses métodos seguem o padrão de propriedades do JavaBeans?” ou então
"Qual desses métodos seguem o padrão recomendado pelo JavaBeans?" (embora essa pergunta só invalidaria a B).
Primeiro obrigado a todos que responderam. quanto a questão acredito mesmo que seja erro do livro. quanto a especificação, somente fiquei com dúvida, pois no próprio livro está escrito que quando a questão se referir a padrões JavaBeans o mesmo estará explicito na questão como está no livro.
Tenho o livro em português e também está getcust.
Queria aproveitar o topico para tirar uma duvida na mesma questão.
A opção A da questão é addSize. No livro fala das regras para nomeação de Listeners.
Os prefixos para Listeners são add e remove.
No caso da questão está errada por nao se tratar de um Listener, como por exemplo:
addXListener?? No exercicio rapido do final do capitulo fala assim:
“Os metodos javabeans devem ser nomeados usando-se camelCase e,
dependendo do proposito do metodo, devem começar com set, get, is, add ou remove”
Nunca tinha pensado nessas sutilezas (nem lembro se caiu com tal grau de “pentelhosidade” na prova que fiz).
Achava que em provas, quando se fala de “padrão JavaBeans”, normalmente você está falando em getters (“getAlgumaCoisa”, “isAlgumaCoisa”) e setters (“setAlgumaCoisa”). Nem tinha imaginado que poderia entrar com essa parte de “event listeners” e outras coisas que normalmente não se costuma usar - já que hoje em dia os “java beans” acabaram ficando sinônimo de “POJOs”, não de “componentes visuais, como as OCX do VB 6”.
Lembro de um livro velho que eu tinha, chamado “JavaBeans for Dummies”, que realmente não era exatamente para “dummies” e falava nessas sutilezas. Hoje em dia talvez você possa considerar que “Java Bean” = “POJO” (Plain Old Java Object, ou seja, algo que só tem getters, setters e outros métodos).
O padrão javabens existe que os métodos listeners chamem addXXXListener. É necessário tanto o prefixo quanto o sufixo, por isso addSize() não se enquadraria.
Mas notem o erro do livro em relação a métodos. O padrão Java beans permite que os beans tenham métodos comuns, que não são propriedades e nem listeners. E esses podem ter qualquer nome.
Além disso, o padrão não exige para métodos o camel case, embora recomende fortemente. Por isso, em se tratando de métodos, todas as alternativas acima seriam válidas.
A questão claramente confundiu com a especificação para propriedades, que é um pouco mais rígida.
Então so pra resumir o topico: Para fins de certificação o padrão JavaBeans pede que os metodos tenham o prefixo get, set ou is seguindo o camelCase e dependendo do caso (listeners) deve ser add ou remove (addMyListener). No caso do listener deve ser usado a palavra listener como foi dito.