Dúvida na questão 5 - Capítulo 1 - SCJP - Kathy

20 respostas
B

Pessoal,

tanto no decorrer do primeiro capítulo quanto no tópico “Exercícios Rápidos”, bem no início de “Identificadores”, está escrito o seguinte: “Os métodos JavaBeans devem ser nomeados usando-se camelCase e, dependendo do propósito do método, devem começar com set, get, is, add ou remove.”

A questão 5 deste mesmo capítulo (1), diz o seguinte:

Quais nomes de métodos obedecem ao padrão JavaBeans?

A. addSize
B. getCust
C. deleteRep
D. isColorado
E. putDimensions

Somente B e D estão corretas. Segundo explicações no livro, a alternativa “A” também não está correta?

Obrigado!

20 Respostas

Adriano_Almeida

E não está mesmo…

Add é só pra Listeners…

E pelo que você deve ter lido, Listener tem um padrão de nomenclatura:

addActionListener por exemplo.

Logo, addSize não é válido, pois, Size não é um listener.

B

Ah sim, agora entendi… Tipo o exemplo do livro: addMyListener

Blz, valeu irmão.

Abraço!

ViniGodoy

Mesmo? E o que você diz do método add da classe List? E o addElement da classe Vector?

Me parece que a razão é por que o método add remete ao fato de adicionar um “size”, quando correto seria você querer obter o valor de size e, portanto, o método deveria chamar getSize().

É um erro meio subjetivo. Se você tem uma classe que é um list de sizes, poderia SIM chamar o seu método de addSize.

Adriano_Almeida

Estava me referindo aos padrões para Listeners (ficou um pouco estranha a minha frase mesmo, generalizando)

:wink:

ViniGodoy

É que você falou que add é “só para listeners”. A generalização é que ficou estranha…

B

Enfim, addSize está errado porque o autor está supondo que deveria ser setSize?

Mas addSize está no padrão JavaBeans.

ViniGodoy

Então, para acabar com a dúvida peguei a norma dos Java Beans.

O colega ali estava certo. No padrão Java Beans, add e remove são somente usados para listeners. Neste caso, o correto seria dizer que addSize não é um método bean, pois deveria ser addSizeListener.

Eu confundi pois o método set() aceita propriedades indexadas, set(int index, Object valor) e nas classes que eu descrevi estas propriedades também estão presentes no método add. Mas embora sejam coisas da Collections Framework, não são coisas do padrão Java Bean.

E desculpe pela confusão!

derheimen

Os métodos de padrões JavaBeans, como get, set, is começam com a primeira letra minuscula, certo!!!
Depois do get, set ou is por exemplo, a segunda palavra deve conter letras maisculas ou aceita qualquer caixa alta ou baixa.
Fiquei com dúvidas em uma questão… alguém sabe???

gbmesso

Dúvida cruel: Esses padrões caem na prova ??? Por essa eu não espereva ???

LPJava

pode crer que cae, poucas mas caem eu ja peguei 2 perguntas dessas no whilabs e me quebrei… fiquei nessa mesma duvida…

ViniGodoy

As próximas palavras seguem o padrão CamelCase.

Embora não seja um consenso nem entre a própria Sun, o livro Effective Java recomenda que no caso de siglas, apenas a primeira letra também seja maiúscula.

Por exemplo:

isHttpRequested()

getArrivedMessage()

setArrivedMessage(String message)
derheimen

ViniGodoy declarar os métodos deta forma esta certo:

???/

ViniGodoy

Pelo que diz aqui na documentação o formato é
get<PropertyName>
set<PropertyName>
is<PropertyName>

Ou seja, a letra tem que ser maiúscula sim, não pode ser do jeito que você falou.

Qualquer coisa, confira o tópico 8.3 da documentação do Java Beans.
http://java.sun.com/products/javabeans/docs/spec.html

LPJava

Heider Matos

nada impede de vc por minusculo ou maiusculo em:
setidade, setIdade.

mais a pergunta eh sobre nomeação, e de acordo o que a nomeação diz eh invalido a forma escrita, mais nao quer dizer que o codigo nao compila… esse pergunta foi para testar se o cara ta atento em saber as regras de nomeação. O importante nao confudir que seja obrigatorio vc declara como quiser…

ViniGodoy

Bem observado Camilo.

O Java admite mesmo ambas as formas, mas a regra é válida apenas se você quer que sua classe esteja no padrão Java Bean.

derheimen

Bele galera, eu estava como essa dúvida.
Se a documentação diz assim, quem sou eu para contestar… :lol: :lol: :lol: :lol:
Valeu, muito obrigado.

LPJava

a nomeação é um padrao de desenvolvimento, que pode ser adotado ou não, o ideal que seja ne? caso o seu amigo programador morra, ou seja demitido ja pensou se ele nao segue a documentação como você ou outro programador que vai ficar com a tarefa dele, vai conseguir entender a sintaxe dele se no desenvolvimento ele usou uma forma que para ele seria a melhor, entao muitos gerente de projeto e empresas em si, a nomeação é adotada e o uso é obrigatorio, e alem a legibilidade do codigo heeh :smiley: quando começei a estudar bem no inicio nao usava nomeação depois começei a usar e percebi a rapidez que é de vc olhar uma class de um amigo e saber que isso eh metodo, isso eh um construtor, isso eh uma variavel de instancia… isso returna um tipo boolean… e por ai vai :smiley:

flw! espero ter ajudado.

ViniGodoy

Na verdade, acho que isso vale para qualquer tipo de padrão, seja o Java Bean, sejam aqueles definidos na sua própria empresa.

O java mesmo é muito pouco restritivo, por ele a seguinte classe é válida:

public class _ {
    private int __;

    public _(_ __) {
        this.__ = __.__;
    }

    public _(int __) {
        this.__ = __;
    }

    public int __() {
        return __;
    }
}
ceara

Show de bola o post, vim pra internet tirar exatamente essa dúvida.

Vlw galera!! :!:

rhuanbarros

idem acima, esse tópico realmente salva!
hsuahs fiquei com duvida na mesma questão do livro
vlw

Criado 25 de janeiro de 2007
Ultima resposta 10 de mar. de 2008
Respostas 20
Participantes 8