[Cascavel-pm] Transformando em objeto

Nilson Santos Figueiredo Junior acid06 em gmail.com
Quinta Novembro 30 08:36:12 PST 2006


On 11/30/06, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>   Perl não tem suporte a orientação à objetos.
>   Perl tem, sim, um "syntatic sugar" que permite ao programador se
> iludir, acreditando piamente que está trabalhando sobre o paradigma de
> orientação à objetos. Mas é pura ilusão de óptica.

Erm, eu *não* vou iniciar um flame war. ;-)
Mas digamos que eu não concordo com você.

> "package" é uma diretriz de programação do Perl que serve para definir
> que o código e as declarações que aparecerem naquele arquivo, daquele
> ponto em diante, estão associadas com o "namespace" declarado na
> diretriz "package". NADA MAIS.

Na verdade não tem a ver com arquivos e sim, somente com os
namespaces. Todas as declarações daquele ponto em diante serão
compiladas sob aquele namespace. Isso tem implicações em vários níveis
diferentes.

>   Perl não suporta "métodos", no sentido estrito da palavra: não é
> possível separar a interface do código que uma determinada chamada
> executa, e, mesmo que alguém consiga algum recurso para isso, não vai
> passar de um hack sujo ou uma brincadeira habilidosa sobre os
> /namespaces/ do Perl.

Erm, é completamente possível fazer isso. Só não existe muito o porquê
pra isso, já que interfaces são basicamente uma desculpa esfarrapada
pra conseguir metade da funcionalidade dada por MI, sem ter o recurso
disponível. Aí dada a limitação, começam a surgir idéias e teorias em
torno do recurso, mas nunca se esqueça que interfaces são simplesmente
uma limitação arbitrária.

>   Java NÃO É uma linguagem puramente orientada à objetos. A prova disso
> é a classe System, e em especial todos os descendentes de
> java.io.OutputStream e java.io.InputStream, que conseguem escrever e ler
> de um mundo essencialmente procedimental (e, logicamente, desmentindo
> que Java alguma vez foi ou será puramente procedimental).

A prova disso é a existência dos tipos primitivos, é o fato de que
várias outras coisas não são first-class objects, é a utilização de
classes simplesmente como namespaces em várias situações, entre outras
coisas.

O exemplo que você deu (se eu o entendi bem) me parece uma confusão
entre as linguagens serem puramente orientadas a objetos ou puramente
funcionais. Uma linguagem puramente funcional não poderia ter
side-effects (e.g. Haskell) contudo, essa limitação não existe no
paradigma OO. É perfeitamente normal a existência de classes que
representam streams de dados em qualquer linguagem, desde que elas
sejam objetos de primeira-classe (um filehandle em Perl, não é,
usualmente).

-Nilson Santos F. Jr.


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