BT

Programação Orientada a Objetos: Estamos no caminho errado?

por Dave West , traduzido por Anderson Duarte Vaz em 22 Jul 2010 |

“Se você olhar para trás quando a orientação a objeto vinha do Smalltalk-80 com passagem de mensagens, e olhar a situação atual com heranças e coisas do tipo, teriamos nós seguido o caminho errado?” Essa foi a questão de abertura em uma entrevista a QCon de Londres com Joe Armstrong, o desenvolvedor original do Erlang, e Ralph Johnson, muito associado com Smalltalk, POO, e padrões de projeto. Ambos os entrevistados sugeriram que sim, mas isso é devido as falhas de implementações da idéia de objetos e não a idéia em si. Esse, de fato, é o ponto inicial de Ralph Johnson:

Uma das coisas que sempre acontece quando você tem uma idéia é que você a expõe e as pessoas a acham muito radical. Muitas pessoas não adotam a coisa como um todo, eles pegam uma parte disso e então você tem essa aproximação.

Mesmo o Smalltalk, tido para muito desenvolvedores como uma linguagem OO exemplar, é vista como uma aproximação da idéia de objetos.

Dr. Johnson sugere dois problemas específicos com Smalltalk:

...Eu acho que o Smalltalk teve um erro fundamental. Eu acho que é muito difícil para pessoas que não são programadores Smalltalk apreciarem, mas quando você é um programador Smalltalk, quando você está depurando com Smalltalk, você está depurando o sistema todo.

e

Devido ao Smalltalk ter tudo na imagem. Você não consegue monitorar as versões entre velhas e novas... e existe também um problema de complexidade. Você constrói um sistema, então ele chega ao limite que algumas pessoas podem fazer e é ai onde o Smalltalk não funciona muito bem.

O fato de que tudo (suas classes de aplicação, desenvolvimento e ferramentas de depuração, e bibliotecas) fica na ‘imagem’, gera um problema para o Smalltalk, mesmo para os admiradores mais fervorosos da linguagem. Entretanto isso não impediu pessoas de construírem sistemas críticos (e gigantes) - como o Projeto Cargill Lynx. O Lynx é um sistema de negociação global de grãos que suporta mais de 1.500 usuários em 150 lugares ao redor dos Estados Unidos e está em produção há mais de uma década. Durante sua existência, o Lynx envolveu mais de 100 programadores, com controle completo de versão e robustos testes e depurações. Sistemas de grande porte de sucesso, como o Projeto Lynx, não condizem com as preocupações do Ralph Johnson, e muito menos eles refutam a premissa de que Smalltalk tinha uma implementação incorreta das idéias de objeto; eles meramente trazem uma perspectiva adicional.

A questão sobre quais conjuntos de características faz uma linguagem ser orientada a objetos foi extensivamente, e emocionalmente, debatida nos anos 90. Na entrevista a QCon de Londres, Joe Armstrong, um dos fundadores da tese, citou um argumento muito similar:

Eu comecei a pensar o que era programação orientada a objetos e achei que Erlang não era orientada a objetos, achei que ela fosse uma linguagem de programação funcional. Então, meu orientador disse “Você está errado, Erlang é extremamente orientada a objetos”. Eu poderia considerar, embora eu não tenha certeza se eu acredito nisso ou não, que o Erlang pode ser a única linguagem orientada a objetos por causa dos 3 princípios da programação orientada a objetos que ela é baseada, como passagem de mensagem, isolação entre objetos e polimorfismo.

Dr. Armstrong demonstrou que ele não estava totalmente convencido com os argumentos de seu orientador, mas parecia pensar que Erlang “talvez seja a única linguagem orientada a objetos”. Em adição a três caracteristicas citadas, herança simples e tipagem dinâmica são muitas vezes tidas como “requerimentos absolutos” para ser uma linguagem orientada a objetos.

Na entrevista, ambos Dr. Johnson e Dr. Armstrong, parecem pensar que a idéia de objetos foi e é muito importante. Dr. Armstrong usou seu tempo mostrando como Erlang tenta implementar as idéias de objeto e características de linguagens orientadas a objeto. Já Dr. Johnson passou mais tempo criticando tentativas anteriores de implementar a idéia de objetos, especificamente a do Smalltalk.

Dave Thomas é outra pessoa muito ligada com objetos e com Smalltalk. O time dele criou o primeiro “Goodies Packs” (Pacotes de Extras) para a Digitalk’s Methods (o primeiro Smalltalk para PC), ele foi fundador e CEO da companhia que criou o que veio a ser o Smalltalk VisualAge da IBM, e o time dele desenvolveu a muito popular ferramenta de desenvolvimento, Eclipse (originalmente escrita em e para Smalltalk). Dr. Thomas disse : “Objetos foram um equívoco,” e “Eu sou um completo pecador”. Essas declarações foram feitas com um tom e efeito dramático, mas também para apontar “erros” na implementação do Smalltalk em relação a idéia de objetos - em outras palavras o foco no estado, a falta de bons modelos de concorrência nas classes, uma linguagem baseada em imagem e a falta de foco em mensageria.

Mesmo Alan Kay o primeiro a utilizar o termo “orientação a objeto”. Em uma entrevista recente para ComputerWorld da Austrália disse:

Eu fiz uso desse termo (e isso foi uma mal escolha devido a subestimação da idéia mais importante do envio de mensagem). Parte da idéia existiu (em vários sistemas). Eu poderia ver que uma base mais abrangente poderia ter sido feita indo pelo caminho de pensar num conjunto eficiente de máquinas virtuais se comunicando somente por mensagens. Isso forneceria escalabilidade, seria uma versão virtual do que a minha comunidade de pesquisa, ARPA-IPTO [O Escritório de Técnicas de Processamento de Informações nas instalações de pesquisa do Departamento de Defesa do Estados Unidos] começou a fazer com redes de alta escala, que também deveria ter algumas poderosas propriedades “algébricas” (como polimorfismo). ... Entretanto, eu também não sou um grande fã de Smalltalk, mesmo ela sendo comparada favoravelmente com a maioria das linguagens atuais (Eu não gosto de nenhuma delas, e eu não acho que nenhuma delas são apropriadas para os problemas reais de hoje em dia, tanto para sistemas quando para usuários finais).

A recente enxurrada de críticas direcionadas a Smalltalk traz a mente um lado repetitivo da música do velho Coasters, Charlie Brown: “(Porque é que todo mundo sempre implica comigo)”. Johnson, Armstrong, Kay, e Thomas não estão, é claro, “implicando comigo (Smalltalk)” implicitamente na entrevista à QCon de Londres, e nas outras críticas, a questão é saber até quando uma idéia que é “muito radical para a maioria das pessoas” (Dr. Johnson), deve ser implementada em uma linguagem de programação?

É também possível que a idéia de objeto não atenda diretamente a definição e estrutura de uma linguagem de programação. Na entrevista para Computerworld da Austrália, Dr. Kay também apontou:

Para mim, uma das coisas legais sobre a semântica de objetos reais é que eles são “computadores reais por completo (RCATWD - Real Computers All The Way Down)” - isto é, eles sempre mantém a total capacidade de representar qualquer coisa. A maneira antiga traz duas coisas que não são computadores - dados e procedimentos - e todo aquela súbita capacidade de adiar otimizações e decisões particulares em favor de comportamentos foi perdida. Em outras palavras, com objetos sempre existe a capacidade de simular qualquer coisa que você quiser, e enviar isso ao redor do planeta. ... E RCATWD também fornece proteção perfeita em ambas direções. Nós podemos ver isso no modelo de hardware da Internet (possivelmente o único sistema real orientado a objetos funcionando). Você consegue extensibilidade praticamente de graça por simplesmente concordar com as convenções para os formatos de mensagem. Meu pensamento na década de 70 era que a Internet, que todos nós trabalhavámos ao lado da computação pessoal, tinha um bom modelo escalável, e que nós deveríamos fazer uma internet virtual de máquinas virtuais que poderia ser armazenados em cache pelo hardware das máquinas. É realmente muito ruim isso não ter acontecido.

E você leitor, o que pensa disso?

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Estamos no caminho errado by Gil Adriano

Sim, estamos no caminho errado, principalmente se as pessoas considerarem normal o mercado/faculdades fixar uma linguagem péssima como o javinha para padrão de linguagem e querer sucatear linguagens verdadeiramente orientadas à objeto e à produtividade como DELPHI, ou voces acham que só por instanciarem umas coisinhas no java já estão programando orientado à objetos, não estão não, estão muito longe, o que voce faz em Delphi com 3 programadores, no java voce precisa 20 vezes mais programadores, e isso não é brincadeira não, é o que eu tenho constatado na prática, é só voces pesquisarem e conferirem.

Re: Estamos no caminho errado by Gerson Batista

Gil Adriano, ou eu li o artigo errado ou sou muito burro mesmo o artigo nao ta trantando qual a linguagem mais produtiva, e sim a forma como as linguagens injetam o conceito de orientação a objeto, e ai meu amigo, aparece coisas bizarras.

Re: Estamos no caminho errado by Daniel Moreira Yokoyama

Afff...
Como se já não fosso o fato do artigo não tratar plataformas específicas, mas o conceito de OOP em si. Você ainda resolveu comparar duas plataformas completamente distintas: o Java, que apesar de todos os inconvenientes, não deixa de ser uma linguagem/plataforma estável, com um bom mercado e que foi altamente adotado por uma geração de desenvolvedores que são praticamente responsáveis por toda a propaganda atual a respeito de boas práticas e design patterns, e do outro lado o Delphi, decadente, inútil e absurdamente longe de ser comparável a qualquer linguagem/plataforma atuais, seja Java, Ruby, Scala ou .Net (que é o que eu uso no meu dia-a-dia).

Então, Orient. a Objeto é implementado em componentes!!! by Gil Adriano

Pois é Gerson, eu acho que tem tudo a ver falar de linguagem junto com Orient. a objetos, vc disse "a forma como as linguagens injetam o conceito de orientação a objeto", acontece que tem linguagem que não implementa bem o conceito, resumindo: precisa ter uma boa implementação de componentes na linguagem, daí dá produtividade, porque os componentes encapsulam milhares de linhas de código e aí vc não precisa escrever tudo "na mão" .... e quanto ao seu comentário Daniel, eu entendo que vc tenha essa visão sobre Delphi, eu trabalho em uma empresa que tem muitas dezenas de projetos em Delphi, é um megaprojeto que substituiu o mainframe IBM e portanto é uma linguagem muito útil e na verdade Delphi está agora retomando a força que tinha antes porque é muito mais produtivo que várias linguagens e é a melhor implementação da orientação a objetos (na minha opinião), desde a versão 1.0. Quanto às linguagens atuais, não basta ser atual para uma linguagem ser boa, não é esse o critério, mas os que vendem (Estados Unidos da América) vão colocar nas cabeças que esse é o critério, quanto mais moderna a linguagem melhor, deixa eles pensarem que é assim.

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

4 Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT