Concordo com voce, Renato: a partir do momento que voce comeca a chamar metodos de mensagens, a coisa faz bastante sentido e eh bastante plausivel quando voce vem do Smalltalk. Mas, como Smalltalk eh Smalltalk e Java eh Java, e infelizmente temos que ser amigos do compilador, a tipagem estatica te impede de abstrair a coisa e achar que tudo eh uma coisa so. Dai surgiu essa historia de sobrecarga de metodos. Bom, na verdade nao, mas a historia fica mais simples assim.
Alias, leitura recomendada pra qqer um que quer discutir tipagem:
Sobrecarga de método não é polimorfismo. A própria definição de polimorfismo já descarta a possibilidade de ser.
Um método é definido pelo seu nome e argumentos, logo se os argumentos mudam, estamos falando de métodos diferentes. Métodos diferentes, cada um com uma forma só, onde está o polimorfismo disso?
[quote=louds]Sobrecarga de método não é polimorfismo. A própria definição de polimorfismo já descarta a possibilidade de ser.
Um método é definido pelo seu nome e argumentos, logo se os argumentos mudam, estamos falando de métodos diferentes. Métodos diferentes, cada um com uma forma só, onde está o polimorfismo disso?
[/quote]
Discordo, não foi assim que aprendi polimorfismo, você está se atrelando à linguagem, não o conceito, NMO. Veja o exemplo do peido.
[quote=louds]Sobrecarga de método não é polimorfismo. A própria definição de polimorfismo já descarta a possibilidade de ser.
[/quote]
Eu concordo com você, mas diversos livros discordam
As pessoas pegaram a semântica original da palavra polimorfismo - múltiplas formas - e geraram outra interpretação. Alguns livros definem isso como foi originalmente chamado, i.e., polimorfismo paramétrico, mas outras literaturas já tiraram a segunda palavra do nome, deixando os iniciantes cada vez mais perdidos…
Putz, é tudo peido, mas cada um de um jeitinho diferente
Caras finjam que não existe computador nem linguagens de programação, pense nos objetos do mundo real e me digam…
@+ Por falar no Mister M, eu sempre achei sem graça suas revelações.
@+ (as revelações do Mister M o mágico, não o usuário do GUJ aqui!!!)
Não entendi o que você quer dizer, não estou dizendo que você pode peidar de todas as maneiras possíveis, em Marte, na cara do Bush, pela boca, durante duas horas, peidar pela internet etc só porque existe a mensagem “peido”.
Mas também você não pode dizer que as diversas combinações disso são coisas completamente diferentes. É tudo peido. Os argumentos são aspectos secundários de uma mensagem. No mundo real, não tão (e tão longe de ser) maravilhoso, você “dá comandos” e “passa argumentos” de uma maneira bem dinâmica. Ou seja, para uma mensagem existir, não precisa especificar os argumentos (meio a la varargs).
Uma vovó peidar em Londres, agora, com cheiro de repolho com ovo podre e cor verde (alguém já viu com cor? :shock: ), é a mesma ação que Renato peidar hoje à tarde na Tijuca ou o cachorro peidar. Veja que é tudo peidar, várias formas diferentes de se fazer a mesma coisa: peidar. uma forma de Polimorfismo.
PS: putz estamos chegando num alto nível de conversação hein com esses peidos :mrgreen:
Claro, isso tudo é como eu compreendo as coisas, até que alguém mude meus conceitos!!
Eu nao estou discordando - so estava querendo entender qual a sua posicao em relacao a chamar metodos com parametros que nao foram declarados na(s) assinatura(s) do(s) metodo(s) existente(s). A resposta foi meio vaga - “parece varargs”, mas tudo bem, passa
O que vc quer eh algo tipo ECMAScript (erhm, JavaScript), Python ou Ruby entao, onde os parametros que nao forem passados viram null e os que foram passados a mais sao ignorados. O problema com isso eh que nao podem existir dois metodos “peidar”. Voce teria que ter:
def peidar(local=null, horario=null, cheiro=null, cor=null):
# libera o gas de mil e uma formas possiveis
edit: existem peidos coloridos, sim, e a cor predominante desses eh marrom, mas aih a gente ja entra no assunto de multimethods e metaclasses. Melhor parar por aqui :mrgreen:
Michael, não conheco nenhum livro bom, traduzido ou não, que usa o termo polimorfismo para isso.
Renato, quando falamos de OO, uma mensagem tem conteudo fixo e pode ser distinta por ele. Então usando notação java:
a(1)
a(2)
São mensagens diferentes e se a lista de parâmetros mudar teremos outras mensagens. Para explicar polimorfismo vamos adotar uma simplificação, que o comportamento dos objetos é idepotente e não gera efeitos colaterais.
Polimorfismo é quando a resposta à mensagem muda apesar do remetente acreditar se tratar da mesma mensagem e mesmo destinatario.
Isso significa que:
R manda a(1) para D e recebe b, D neste caso é do tipo X
R manda a(1) para D e recebe c, D neste caso é do tipo Y
Então passar mensagens diferentes, outra lista de parâmetros, não constitui polimorfismo.
Em termos real, polimorfismo só existe quando acontece late-binding ou run-time dispatch.
[quote=mister__m]De onde você tirou isso? Uma coisa não tem nada a ver com a outra. O nome só identifica a mensagem se quem fizer a linguagem definir assim, oras. Em Java, foi definido que não é assim.
Polimorfismo de OO não tem nada a ver com isso, senão C puro já estaria com meio caminho andado pra ser OO ;-)[/quote]
Isso, não estou falando do Java.
[quote=mister__m][quote=renato3110]
Acima tem apenas uma mensagem (peide!), mas com formatos diferentes.
[/quote]
Em Java não. :-)[/quote]
Mas não estou falando de implementações de OO, estou falando de chamar ou não de polimorfismo.
[quote=mister__m][quote=renato3110]
:shock: E como é possível “privatizar” construtores?
[/quote]
Explique o que você quis dizer com isso e o que isso tem a ver com reduzir a visibilidade de um método.[/quote]
Tá explicado num post aí, você conseguiu ver?
Humm… sei lá, abstrato, subjetivo, conceitual, gnoissológico…[/quote]
No caso de uma linguagem específica, já existente, isso é bem concreto. :-)[/quote]
Estou falando de dizer que o modelo de classes está errado. Não tem a ver com a linguagem.
Não acho vaga, apenas a comparação é imprecisa. Tipo eu defino peido e o resto (os argumentos) vêm depois, de várias formas que interessam apenas a quem peidar, não a mim que estou criando os seres vivos e dando-lhes a capacidade de peidar.
[quote=cv]O que vc quer eh algo tipo ECMAScript (erhm, JavaScript), Python ou Ruby entao, onde os parametros que nao forem passados viram null e os que foram passados a mais sao ignorados. O problema com isso eh que nao podem existir dois metodos “peidar”. Voce teria que ter:
def peidar(local=null, horario=null, cheiro=null, cor=null):
# libera o gas de mil e uma formas possiveis
[/quote]
Eu só tô vianjando na maionese OO, não estou me referindo a linguagem nenhuma.
louds, bem interessante esse jeito de pensar, mas acho que é uma coisa meio subjetiva, é uma questão de decisão. Na verdade o seu conceito é uma coisa mais precisa a respeito do que é uma mensagem(método).
@+ Cadê o Fábio!!! O que é esse “reintroduce” no Delphi!!!
Agora não lembro de cabeça, mas essa discussão já aconteceu pelo menos 5 vezes no SouJava e sempre volta de tempos em tempos e pessoal cita os livros com snippets mesmo, além de um monte de material online. Note que não disse que eram livros bons…
Pense bem: o que identifica uma mensagem? Você supõe que é um nome, mas eu posso dizer que cada método é uma mensagem e logo todos os métodos de todas as classes são polimórficos
Não dá pra discutir isso sem um escopo extremamente definido, não vamos chegar a lugar nenhum assim…
Quando se fala de OO acho que não se precisa pensar em uma implementação específica. É desse modo que estou pensando. É uma questão de conceito. O que é mensagem? É um método com parâmetros ou os parâmetros são apenas detalhes secundários sobre uma mensagem? Os parâmetros caracterizam as mensagens? Bom o louds acha que sim, eu acho que não. Na verdade depois de ler o último post do louds, acho que às vezes sim (como ele diz), às vezes não(como eu digo), depende do contexto, do conceito.
Como disse: sei lá, abstrato, subjetivo, conceitual, gnoissológico (eu nem sei o que é esse aqui :lol: )…
“eu acho” não quer dizer que suponho que eu sou dono da verdade (e você está falando para eu me informar melhor), mas sim a minha opinião, que eu já falei na mensagem anterior. É o meu jeito de ver.
Na verdade eu não tô entendendo qual a sua opinião (você pensa como o louds ou pensa como eu?), nem esses textos do Smalltalk, nem porque o link que você indicou dá acesso negado
Mesmo que o power livro dos ultra livros de OO diga que os argumentos discernem as mensagens, acho que vai demorar eu mudar o meu jeito de pensar, que disse no post acima. É uma questão de como você vê as coisas.