Properties

Bom dia pessoal.
Alguns dias atrás andei lendo e postando em um tópico sobre a aramdilha Java. No meio da conversa postei algo sobre properties, e um sujeito respondeu falando que properties são uma m**** pois feriam OO , geravam código procedural e criavam cáries.
Minhas perguntas são:
Em relação a OO: properties não são uma éspecie de alias para set e get? Tudo bem , deveriam ser métodos para ficar de acordo com as regras OO, mas no fim das contas não dá no mesmo?
Em relação ao código procedural: tódo código no fim é procedural, OO é mais uma forma de arranjar tudo de forma mais simples… ou properties possuem algum problema mesmo? Pessoalmente acretido que não.
Em relação as cáries: realmente não entendi, é algum tipo de gíria do pessoal ou ele estava só acabando de denegrir a coisa toda?

Se alguem souber o nome do participante que postou essas afirmações coloque o nome dele ai , pra ver se ele responde pessoalmente.
Sem flames e na boa, só fiquei curiosos mesmo, pq entre escrever um set e get e uma properties o serviço é o mesmo , na hora de usar as properties são mais fáceis (não que set e get seja díficil…).
Valeu e respondam com o máximo de detalhes. =)

Qndo vc diz properties está se referindo às propriedades que podem ser escritas num arquivo.properties, às properties do Delphi, ou outra coisa ainda!?

Olá,

Pois é, o sujeito sou eu.

Exato. Get/Set do jeito que são usados hoje em dia são a mesma coisa que properties (são inclusive chamados assim por algumas pessoas). A questão é isso não é OO. JavaBeans são um modelo de componentes falido criado pela Sun para componentes plugáveis.

As pessoas tendêm a usar Beans para criar structs/registers (estruturas de dados sem comportamento). Isso forma o famoso Anemic Domain Model, onde você tem um programa totalmente de maneira procedural usando uma linguagem OO.

O que você quer dizer com “tódo código no fim é procedural”? Que têm procedimentos, rotinas? Existem diferenças entre programar para objetos e programar para funções/procedimentos, mas todas têm procedimentos (como qualquer programa de computador) :wink:

[quote=“xenoob”]Em relação as cáries: realmente não entendi, é algum tipo de gíria do pessoal ou ele estava só acabando de denegrir a coisa toda?
[/quote]

Era uma brincadeira.

Você pdoeria ter visto meu nome na própria thread que citou :wink:

Opa!!!
Legal PCalcado.
Pois é , quem é vivo sempre dá as caras. Hehehe.
Cara você parece ser muito bom nesse lance de OO.
Me responde por favor:
Se a regrinha de encapsulamento diz que os atributos não devem ser acessiveis diretamente , ao declarar set/get não estariamos usando OO? Claro que outras coisas fazem parte de OO.
Sobre o lance do código procedural entendi o o que voçê falou, o problema é realmente com as properties. O problema é que não entendi como set e get e cosequentemente properties não são OO.
Pessoalmente: declaro os set e gets , coloco uma certa quantidade de validação (dentro de set e get).
Agora sobre as structs , eu concordo, uma struct não é um objeto. =). Nem deveria ser. Eu não uso uma classe para montar uma estrutura de dados, eu uso uma classe para modelar um objeto real. Real no sentido de que ele poderia exixtir de fato. Não conheço bean, e o autor do artigo parece ter razão, se criamos “algo” sem comportamento não estamos criando um objeto.
Mas voltando ao assunto: ao me fornecer esse link, você queria me mostrar que ao usar properties estamos programando de forma estruturada pois não escreveriamos comportamento para os objetos?
Cara, aproveita e me cita um exemplo de set e get feito de modo correto.
Outra, me cita(sem código) um exemplo de bean mal feito e um de bean bem feito.
Outra ainda: tu acha Mono uma m**** né ?
Pra acabar: vc está certo sobre o código procedural, foi isso mesmo que eu falei.
Opaaaaa: essas linguagens tipo SmallTalk e Lisp são uma boa? Ouvi dizer que nelas tudo é objeto =).
Valeu pelas suas respostas acima e responda com o máximo de detalhes.

xenoob, tu não vai erradicar arquivos .properties dos seus projetos… tu tem é q saber onde usá-los, qual a sua finalidade. Como por exemplo variáveis referentes a configurações globais da aplicação, como um tema gráfico a ser usado pela app por ex.

Oi,

Depende.

O que tem nos seus getters e setters? Qual o papel deles na classe?

De um jeito rápido, malvado e sujo: se você usa getters para saber algum atributo de um objeto, fazer alguma e coisa com ele, se você usa setters para definir o atributo de um objeto diretamente, seu código pode ser altamente procedural. pode até não ser, mas considerando o que eu vejo, eu diria que tenho bastante convicção que seja (ok, não estou falando de você, estou falando de nós programadores).

[quote=“xenoob”]O problema é que não entendi como set e get e cosequentemente properties não são OO.
Pessoalmente: declaro os set e gets , coloco uma certa quantidade de validação (dentro de set e get).
[/quote]

Um objeto não deve expôr seu estado (o valor de seus atributos) exceto em condições epseciais (previstas pela sua interface), ponto final :slight_smile:

E se você usar get/set como numa struct, qual a diferença entre uma struct e uma classe?

Comportamento, essa é a diferença.

Uma sruct guarda dados e não sabe o que fazer com eles. Ela depende de alguém (funções) que a manipulem.

Se eu colocar isso numa classe com getters e setters que pegam os atributos deste objeto para o manipular… cara, você só trocou “função” por “método de classe cliente”, na realidade é a mesma coisa.

Objetos devem saber o que fazer com seus atributos sem expô-los diretamente.

Exemplo clássico:

class Usuario{

private Date dataNascimento;

}

Preciso descobrir a idade do usuário. Abordagem procedural:

Date d = usuario.getDataNascimento();
int idade = calcularIdade(d);

Abordagem OO:

int idade = usuario.idade();

É um exemplo muito básico e boçal, mas a idéia é essa. Deixe o objeto se gerenciar.

É um tal de Martin Fowler:slight_smile:

Aliás, coloque esse bliki no seu leitor rss, você não vai se arrepender :).

Não exatamente, você pode precisar de properties do jeitão Delphi, mas isso é uma condição atípica num modelo OO.

O artigo fala de “objetos burros” sendo manipulados por “funções” em outros objetos. Objetos não deveriam ser manipulados, você não manipula um objeto, você manda uma mensagem, ele que se vire :wink:

Exemplo de javaBean tipo struct? Faça uma busca no fórum por “bean jsp”, eu diria que 95% dos resultados.

JavaBean “do bem”? Uhm… qualquer coisa que tenha sido feito apra ser manipulado por uma ferramenta e não para guardar regras de negócio.

Eu acho uma cosia muito da estranah esse Mono… ams isso é outro papo :slight_smile:

LISP clássico não é OO. Tente Eiffel.

PCalcado,
Estou pasmo com seus conhecimentos e vontade de esclarecer minhas dúvidas. =)
O exemplo da data foi perfeito. Entendi o que você quer dizer com programar de forma estruturada usando OO.
Pelo visto concordamos com os objetos, de forma muito tosca são uma struct com comportamentos e demais beneficios da OO.
No seu exemplo sobre as idades eu faria assim:
class Usuario{
private atributo1;
proprertie do atributo1;
metodos pertinentes a um usuario entre eles calcular a sua idade atual;
}

em algum main da vida:
Usu usuario = new Usuario();
int d = usuario.calcularIdade();// a idade do sujeito…
data = usuario.Data;// o dia do niver do sujeito…

Eu acho que isso não é estruturado. =)

Observe que eu uso o set e get para manipular diretamente os meus atributos, apenas os que devem ser visiveis pelos outros. O que seria acessar não diretamente?

PCalcado:
"E se você usar get/set como numa struct, qual a diferença entre uma struct e uma classe? "
A diferença seria a seguinte:os comportamentos da classe. Dentro de uma classe eu posso ter uma struct, por isso eu não vou declarar uma classe com “forma” de struct. Resumindo você escreveu o que eu já sabia…

Pô eu leio tanto , mas tanto, mas tanto mesmo… achei que sabia alguma coisa, mas estou preocupado com esse lance de procedural/OO.

Cara, só pra mudar um pouco o que você falou: properties não geram um códiigo procedural, mas facilitam essa geração. OK?

Onde eu arrumo material sobre coisas erradas na OO?
Tú fuça isso a quanto tempo PCalcado?
Quantos anos tu tem?
Tú é professor de OO ou coisa do tipo(pós como mestre ou especialista)?
De acordo com a OO quem veio primeiro o ovo ou a galinha? E na abordagem monolítica?
Fala do Mono… plz =)
Valeu…
Responde de forma bacana de novo …

->Esse cara ai do site é bom mesmo. Já vi uns livros dele,mas nunca reparei no nome, eu não reparo nos escritores,o andrew mesmo só quando eu fui estudar sistemas operacionais que eu reparei …

oi, antes de mais nada, tem uma discussão no GUJ nesse exato momento sobre isso tudo:

http://www.guj.com.br/posts/list/0/22189.java

Como muita coisa que você fala tá respondida lá, vamos ao que pode não estar:

Elas são tendenciosas :wink:

Comecei a realmente me interessar por teoria de objetos ano passado, acho. Cansado de retrabvalho idiota por uma coisa que não é bem feita :frowning:

22

Não, mas obrigado pela comapração :slight_smile: Eu apenas gosto bastante de tecnologia em geral e do tema em específico :wink:

Isso é uma maldtia dependência circular. Eu acho que deveria ser feito um puta refactoring nisso tudo :slight_smile:

Eu já fui muito mais contra o mono que sou hoje (mesmo porque algumas previsões minhas não se realizaram, o que mostrou que eu posso - e talvez esteja - estar redondamente enganado) mas o meu ponto é parecido com o do meu bom amigo Eustáquio Rangel, o TaQ:

http://beam.to/taq/

[]s