[Rio-pm] importando métodos?

Adriano Ferreira aferreira em shopzilla.com
Quinta Novembro 6 09:43:40 PST 2008


2008/11/6 Eden Cardim <edencardim em gmail.com>:
> Por esse motivo, JavaScript é realmente orientado a objetos, a maioria
> das outras linguagens que alegam ser orientadas a objetos na verdade
> são orientadas a classes, inclusive Java e Python. Perl também é
> orientado a classes, mas como sempre, dá pra hackear algo parecido :).

Orientação a objetos baseada em classes é mais comum, desde Smalltalk,
e seguido por linguagens como Perl, Java e Python.  A razão da
proposição original tem a ver com usar a classe como o repositório
central das partes comuns (principalmente código / métodos), evitando
os problemas de implementação de objetos baseados em protótipos (que
precisa de levar em conta o dinamismo de acrescentar métodos e
atributos em tempo de execução quando os protótipos podem divergir --
o que obriga a sutis implementações de copy-on-write para ser
eficiente).

Orientação a objetos baseada em protótipos (embora seja o mais natural
como o Eden mesmo disse) foi avançado na implementação da linguagem
Self (que ninguém conhece :-) e é baseada em Smalltalk). A programação
com objetos de JavaScript também é baseada em protótipos, o que causa
uma certa estranheza para muitos programadores e que, talvez por causa
disso, não seja mais e melhor utilizada.

Eu não diria que orientação a objetos baseada em classe é um "hack".
Está mais para uma forma mais engessada de orientação a objetos, que
se tornou a forma mais popular. Uma coisa a se notar é que mesmo que a
terminologia Perl difira (e muito) da terminologia de objetos usual (
packages vs. classes, blessed references vs. objects ), a natureza da
implementação Perl (que muitos criticam como um hack impuro) é
diferente porque provê um modelo transparente de objeto (a referência
[abençoada] a uma estrutura de dados -- seja scalar, array ou hash) e
talvez por isto mesmo provê mais poder, permitindo variações como
inside-out objects e mesmo objetos com protótipos como em
Class::Classless, Class::Object, Object::Prototype, etc.)

Saudações,
Adriano.


Mais detalhes sobre a lista de discussão Rio-pm