Sei sulla pagina 1di 76

ESCOLA SUPERIOR ABERTA DO BRASIL - ESAB CURSO DE PS-GRADUAO LATO SENSU EM ENGENHARIA DE SISTEMAS

THIAGO VIEIRA DOS SANTOS

ORIENTAO A OBJETOS: a importncia do Smalltalk ontem e hoje.

VILA VELHA ES 2011

THIAGO VIEIRA DOS SANTOS

ORIENTAO A OBJETOS: a importncia do Smalltalk ontem e hoje.

Monografia apresentada ao curso de Ps-Graduao lato sensu em Engenharia de Sistemas da Escola Superior Aberta do Brasil como requisito para obteno do ttulo de Especialista em Engenharia de Sistemas, sob orientao do Prof. Mestre Cleyverson Pereira Costa.

VILA VELHA ES 2011

THIAGO VIEIRA DOS SANTOS

ORIENTAO A OBJETOS: A IMPORTNCIA DO SMALLTALK ONTEM E HOJE.

Monografia aprovada em ___ de _______ de _____

Banca Examinadora

______________________________

______________________________

______________________________

VILA VELHA ES 2011

DEDICATRIA

Dedico este trabalho a todos aqueles que tm coragem de seguir em frente, mesmo sob as intempries da vida.

AGRADECIMENTO

Agradeo minha querida Irene pela pacincia e dedicao.

A melhor maneira de prever o futuro inventando-o (Alan Curtis Kay)

RESUMO

Palavras-chave: Smalltalk, linguagem de programao, orientao a objetos.

As principais linguagens de programao utilizadas atualmente suportam a orientao a objetos para o desenvolvimento de softwares. O paradigma orientado a objetos teve a linguagem Smalltalk como norteadora dos seus princpios fundamentais. O objetivo principal desta pesquisa exploratrio-descritiva com abordagem qualitativa analisar por que Smalltalk ainda no alcanou uma considervel projeo comercial no mercado de desenvolvimento de software, tendo como objetivos especficos: definir os conceitos bsicos de classe, herana e polimorfismo da programao orientada a objetos; percorrer algumas linhas relevantes da histria primitiva da programao orientada a objetos, destacando o legado da linguagem Smalltalk como fruto deste processo; apresentar uma viso geral da linguagem, demonstrando suas principais qualidades e diferencial; e por fim detectar, a partir da percepo de especialistas da rea, as perspectivas com relao s potencialidades de aplicao e ao futuro da linguagem de programao Smalltalk e de sua comunidade de desenvolvedores.

LISTA DE FIGURAS
Figura 1 - Exemplo de uma classe e seus objetos .................................................... 16 Figura 2 - Classe com atributos e mtodos ............................................................... 16 Figura 3 - Hierarquia de classes com herana .......................................................... 18 Figura 4 - Exemplo de polimorfismo .......................................................................... 20 Figura 5 - Genealogia das linguagens de programao mais conhecidas ................ 31 Figura 6 - rea de trabalho e menu World do Pharo ................................................. 44 Figura 7 - System Object, Workspace e Transcript ................................................... 45 Figura 8 - System Object ........................................................................................... 47 Figura 9 - Tutorial de sintaxe ProfStef ....................................................................... 49 Figura 10 - Ranking de popularidade de linguagens de programao ...................... 59 Figura 11 - Porcentagem de linguagens por categoria .............................................. 59

LISTA DE TABELAS
Tabela 1 Comparao das linguagens de programao ........................................ 42 Tabela 2 Comparao do suporte orientao a objetos ...................................... 43

SUMRIO

INTRODUO ............................................................................................................ 9 1. PROGRAMAO ORIENTADA A OBJETOS ..................................................... 11 1.1 CLASSES ............................................................................................................ 15 1.2 HERANA ........................................................................................................... 17 1.3 POLIMORFISMO ................................................................................................ 19 1.4 CONSIDERAES PARCIAIS ........................................................................... 21 2. UM POUCO DE HISTRIA................................................................................... 23 2.1 PRIMEIRAS LINGUAGENS DE ALTO NVEL..................................................... 23 2.2 PRIMRDIOS DA ORIENTAO A OBJETO .................................................... 25 2.3 ALAN KAY E O DYNABOOK .............................................................................. 26 2.4 EVOLUO DA SMALLTALK ............................................................................. 27 2.5 CONSIDERAES PARCIAIS ........................................................................... 32 3. VISO GERAL DA SMALLTALK ......................................................................... 35 3.1 CONCEITOS FUNDAMENTAIS .......................................................................... 36 3.2 PRIMEIROS PASSOS IDE E REGRAS DE SINTAXE ..................................... 43 3.3 CONSIDERAES PARCIAIS ........................................................................... 54 4. SMALLTALK HOJE APLICABILIDADES E PERSPECTIVAS ......................... 56 4.1 CONSIDERAES PARCIAIS ........................................................................... 67 CONCLUSO ........................................................................................................... 69 REFERNCIAS ......................................................................................................... 71

INTRODUO

Na atualidade, o desenvolvimento de software cada vez mais complexo, preciso e seguro de falhas fator primordial na gesto de sistemas de informao. Grandes demandas por aplicaes que solucionem novos problemas e pelo aperfeioamento de sistemas legados surgem a todo o momento dentro das mais variadas instituies. Neste cenrio, as linguagens de programao orientadas a objetos apresentam grande importncia para o atendimento de tais demandas.

Desenvolvido a partir da dcada de 1970, com a linguagem Smalltalk, o paradigma orientado a objetos hoje o mais divulgado e utilizado no desenvolvimento de softwares, atravs das linguagens Java, C++, Ruby e outras.

Sem a pretenso de esgotar o assunto, este trabalho levantada algumas questes e hipteses pertinentes para aqueles que procuram mais informaes sobre a linguagem Smalltalk e seu legado.

Trata-se, em parte, de um estudo histrico que se debrua sobre algumas indagaes e procura levantar respostas delineando algumas passagens

relacionadas ao surgimento da programao orientada a objetos. Por outro lado, tem o carter de estudo de viabilidade, uma vez que procura apontar quais so as perspectivas quanto aplicabilidade prtica da linguagem Smalltalk e quanto ao crescimento da comunidade smalltalker, principalmente do ponto de vista comercial.

Em resumo, temos o seguinte problema de pesquisa: por que a SmallTalk to pouco conhecida fora dos meios acadmicos?

O objetivo geral analisar por que a linguagem SmallTalk ainda no alcanou uma considervel projeo comercial no mercado de desenvolvimento de software. Os objetivos especficos so: definir linguagem de programao orientada a objetos; traar um histrico da programao orientada a objetos e suas linguagens, destacando a linguagem SmallTalk neste processo; identificar a percepo de

10

especialistas da rea sobre a linguagem SmallTalk; detectar quais so as perspectivas com relao ao futuro da linguagem SmallTalk, assim como suas principais potencialidades de aplicao.

O presente estudo uma pesquisa exploratrio-descritiva com abordagem qualitativa, em que os dados foram coletados atravs de prospeco bibliogrfica e da experincia emprica com os softwares diretamente relacionados com o objeto da pesquisa.

Tambm serviram como fonte os relatos de experincia de especialistas da rea, a partir de um questionrio divulgado em um frum na Internet (YAHOO, 2010-2011). As questes foram publicadas no dia 22 de janeiro de 2011 para um pblico de aproximadamente 50 membros. E, infelizmente, at o dia 15 de maio de 2011, quando o grupo j contava com 94 membros, foram recebidas apenas 2 respostas. De toda forma, outros tpicos do frum tambm foram relevantes na construo de uma viso geral dos usurios da linguagem Smalltalk.

O tema desta pesquisa torna-se relevante a programadores e analistas de sistemas, uma vez que apresenta uma importante linguagem e diversos conceitos fundamentais, importantes de serem estudados por todo aquele que lida diretamente com o desenvolvimento de software.

11

1. PROGRAMAO ORIENTADA A OBJETOS

Hoje, o projeto, a anlise e a programao orientada a objetos formam o principal e mais difundido paradigma de desenvolvimento de software. Neste captulo a programao orientada a objetos destacada das demais categorias de linguagens e so apresentados os conceitos fundamentais de classe, herana e polimorfismo.

Uma definio simples de linguagem de programao orientada a objetos dada por Brookshear (2002, p. 226), ainda que possa ser pouco esclarecedora para um leigo:
[...] o paradigma da orientao a objeto leva ao desenvolvimento de unidades de programa ativas, chamadas objetos, em que cada uma contm procedimentos que descrevem como esses objetos devem responder a vrios estmulos.

Sem sombra de dvida os objetos so o foco neste paradigma. Mais adiante, na apresentao do conceito de classes, ser explicitado mais detalhadamente o que vem a ser um objeto. Por hora, pode-se afirmar que um objeto simula algo pertencente ao mundo real, dentro do contexto do problema a ser solucionado computacionalmente, conforme mostra Sebesta (2003, p. 96):
A essncia da programao orientada a objeto resolver problemas, identificando os objetos do mundo real do problema e o processamento exigido desses objetos, e depois criar simulaes desses objetos, de seus processos e da comunicao requerida entre eles.

Antes de prosseguir com os conceitos da programao orientada a objetos importante conhecer um pouco sobre os tipos de linguagens de programao. De acordo com a tipologia de Melo & Silva (2010, p. 12-13), pode-se dividir as linguagens de programao em assertivas e declarativas. As assertivas dividem-se em imperativas e orientadas a objetos. J as declarativas dividem-se em funcionais, lgicas e orientadas a satisfaes de restries.

Atualmente, essas categorias no representam compartimentos totalmente isolados, uma vez que possvel identificar trocas de influncias e at mesmo incorporao

12

de paradigmas, conforme ser visto mais adiante. Algumas linguagens modernas, com suporte a programao orientada a objetos, j nasceram com a explcita inteno de ser multi-paradigma, o caso de linguagens como Ruby e Scala. Cada tipo de linguagem [...] apresenta caractersticas que a torna mais adequada para certos tipos de problemas. Essas caractersticas determinam os recursos e propriedades sintticas e semnticas desejveis nas linguagens [...] (MELO & SILVA, 2010, p. 13).

Basicamente, as linguagens imperativas funcionam atravs de uma seqncia de comandos ordenados de forma a gerar uma soluo computacional para um determinado problema (SEBESTA, 2003, p. 29). Segundo Melo & Silva (2010, p. 143) [...] o fundamento para a programao imperativa o conceito de mquina de Turing, baseado nas funes computveis desenvolvidas pelo pesquisador Alan Turing nos anos 30 e mais tarde utilizadas por John Von Neumann na criao da principal arquitetura de computadores utilizada at hoje. Portanto, o paradigma imperativo o mais antigo de todos e remete aos primeiros esforos de desenvolvimento das linguagens de alto nvel.

As linguagens declarativas (funcionais, lgicas e baseadas em propagao de restries) so, geralmente, aplicadas em algumas reas da Inteligncia Artificial. A linguagem funcional LISP a mais utilizada neste ramo. J dentre as linguagens lgicas destaca-se a Prolog (SEBESTA, 2003, p. 61 e 91 e MELO & SILVA, 2010, p. 187).

De acordo com Melo & Silva (2010, p. 130):


Um programa puramente funcional uma expresso que caracteriza uma funo matemtica, juntamente com um elemento do domnio daquela funo. A execuo de um programa funcional um processo computacional que permite determinar qual o elemento da imagem da funo que corresponde ao elemento do domnio fornecido como parte d programa.

13

A diferena entre linguagens funcionais e imperativas apresenta por Sebesta (2003, p. 61) da seguinte forma:
Nem as instrues de atribuio, nem as variveis que abundam nos programas em linguagens imperativas so necessrias nos programas em linguagem funcional. Alm disso, processos iterativos podem ser especificados com chamadas a funo recursivas, tornando os laos desnecessrios. Esses conceitos bsicos da programao funcional tornamna significativamente diferente da programao em uma linguagem imperativa.

Porm, recursos tipicamente imperativos, como o compartilhamento de variveis, acabam sendo incorporados por linguagens funcionais, facilitando e agilizando a construo dos programas, mas dificultando a anlise destes programas (MELO & SILVA, 2010, p. 130).

As linguagens funcionais apresentam simplicidade de sintaxe, de semntica e de execuo concorrente. Mas, apesar de todos esses aspectos positivos, tais linguagens perdem no quesito eficincia para as linguagens imperativas. Ainda assim, [...] muitos pesquisadores de linguagens de programao acreditam que a programao funcional uma abordagem muito melhor ao desenvolvimento de software do que o uso de linguagens imperativas (SEBESTA, 2003, p. 581 e 61).

As poucas linguagens lgicas existentes constituem um paradigma de programao bastante diverso dos demais. De acordo com Melo & Silva (2010, p. 170):
A programao em lgica uma forma de implementar computaes que coincidem com provas de teoremas. Dessa forma, ela possibilita uma dupla interpretao dos passos de computao que ocorrem durante a execuo de um programa, permitindo que as especificaes lgico-formais de certos problemas sejam tambm os prprios programas executveis que resolvem aqueles problemas.

Atravs de sua semntica declarativa, a programao lgica se diferencia das linguagens imperativas, conforme mostra Sebesta (2003, p. 591 e 35-36):
Uma linguagem de programao lgica um exemplo de linguagem baseada em regras. Em uma linguagem imperativa, um algoritmo especificado com grandes detalhes, e a ordem de execuo especfica das instrues ou dos comandos deve ser includa. Em uma linguagem baseada em regras, estas so especificadas sem nenhuma ordem particular, e o

14

sistema de implementao deve escolher uma ordem de execuo que produza o resultado desejado.

Por fim, a definio dada por Melo & Silva (2010, p. 187-188) para programao baseada em propagao de restries abrange as linguagens derivadas da programao lgica, como por exemplo Chip e Eclipse. Trata-se, na verdade, de uma generalizao dos mecanismos utilizados na programao lgica, onde possvel programar atravs da especificao do problema a ser solucionado. Alm da rea de inteligncia artificial, sua utilizao ocorre em bases de dados, otimizao combinatria e construo de interfaces com usurios.

Conforme visto anteriormente, as linguagens imperativas e orientadas a objetos compem o conjunto das linguagens assertivas. A principal vantagem da orientao a objetos sobre o paradigma imperativo a incluso da abstrao de dados. Desta forma, observa-se com a orientao a objetos uma mudana significativa no s na forma de codificar software, mas em todo o processo de engenharia de software. As influncias da orientao a objetos, segundo Brookshear (2002, p. 201), podem ser notadas tambm em outras reas da computao. Tais influncias se estendem inclusive aos bancos de dados, conforme se pode ver em Jacobson (1992, p. 285).

De acordo com Baranauskas (2011, p. 2):


A idia bsica do paradigma orientado a objetos imaginar que programas simulam o mundo real: um mundo povoado de objetos. Dessa maneira, linguagens baseadas nos conceitos de simulao do mundo real devem incluir um modelo de objetos que possam enviar e receber mensagens e reagir a mensagens recebidas. Esse conceito baseado na idia de que no mundo real frequentemente usamos objetos sem precisarmos conhecer como eles realmente funcionam.

Este uso dos objetos descrito pela autora exemplificado por Melo & Silva (2010, p. 157) da seguinte maneira:
O paradigma de programao orientada por objetos tem como princpio a soluo de problemas pela cooperao de vrios elementos, da mesma forma que usamos a prestao de servio de outras pessoas para resolver vrios dos nossos problemas.

15

O carter ativo dos objetos contrasta com os elementos passivos do paradigma imperativo tradicional (BROOKSHEAR, 2002, p. 200). Porm, a maioria das linguagens de programao modernas, de variados paradigmas, tambm sofreram influncia das linguagens imperativas, inclusive Smalltalk. Os procedimentos de resposta dos objetos, mais conhecidos como mtodos, [...] so essencialmente pequenas unidades de programas imperativos (BROOKSHEAR, 2002, p. 201). Outras caractersticas herdadas do paradigma imperativo e, em parte, da arquitetura de hardware so as variveis, as atribuies, as expresses e na maioria dos casos - Smalltalk uma exceo - as estruturas de controle (SEBESTA, 2003, p. 33-36).

Uma das principais vantagens do paradigma orientado a objetos a possibilidade de manter o foco na soluo do problema real atravs de um [...] ambiente no qual as mquinas se adaptam s caractersticas humanas (BROOKSHEAR, 2002, p. 197).

Aqui, em conformidade com Sebesta (2003, p. 96), so apresentadas as trs caractersticas fundamentais que toda linguagem moderna orientada a objetos precisa respeitar: abstrao de dados (classes), herana e vinculao dinmica (polimorfismo).

1.1 CLASSES

Atravs da definio de classes de objetos do mundo real, a programao torna-se muito mais intuitiva e gil. Segundo Brookshear (2002, p. 301), definindo uma classe de objetos, consegue-se:
[...] uma maneira mais completa de estender os tipos disponveis em uma linguagem de programao. [A classe] [...] apenas um modelo, distinto das [suas] instncias. [Ela] incorpora tanto um sistema de armazenamento de dados [...] como uma coleo de procedimentos que definem as operaes que podem ser realizadas nos dados do sistema.

Em outras palavras, uma classe representa um modelo para determinado conjunto de objetos, incluindo seus atributos e mtodos. A Figura 1 ilustra um exemplo de

16

classe e alguns objetos da mesma, onde: Person a classe. Tom, John e Mary so os objetos ou instncias da classe Person.

Figura 1 - Exemplo de uma classe e seus objetos Fonte: JACOBSON (1992, p. 51)

Conforme destaca Sebesta (2003, p. 81), [...] um programa pode criar e usar qualquer nmero de instncias de uma classe particular. Toda classe deve descrever o que comum a todos os seus objetos. Por exemplo, no caso da Figura 1, ao definir atributos e mtodos para a classe Person, deve-se ter em mente que tais atributos e mtodos sero aplicveis a todas as instncias da classe Person. Na Figura 2 possvel visualizar alguns atributos e mtodos definidos para a classe Person.

Figura 2 - Classe com atributos e mtodos Fonte: Elaborao prpria (2011)

17

Desta forma, cada pessoa instanciada a partir da classe Person ter o conjunto de atributos: nome, data_de_nascimento e sexo. E ainda ter o conjunto de mtodos: trabalhar, estudar e descansar. Cabe aqui salientar que os valores dos atributos podem ser diferentes para cada objeto criado. Porm, via de regra, um mtodo implementado em uma classe executar sempre a mesma ao, independente do objeto que chamou o mtodo.

importante ressaltar que algumas linguagens conseguem alterar um mtodo dinamicamente, mesmo aps o objeto ter sido instanciado. Mas as boas prticas sugerem uma modelagem de classes onde todos os mtodos definidos executem aes comuns a qualquer objeto daquela classe.

Outro aspecto que merece ser mencionado com relao s classes o suporte ao encapsulamento. Vrias linguagens orientadas a objetos implementam, cada uma ao seu modo, formas de encapsulamento de atributos e mtodos. Encapsular atributos e mtodos nada mais do que restringir o acesso direto a atributos ou mtodos. Um exemplo seria encapsular determinado atributo de forma que o mesmo s pudesse ser acessado atravs de um mtodo. Ou encapsular um mtodo de forma que o mesmo s pudesse ser acessado atravs de outro mtodo.

Usando o exemplo da nossa classe Person, pode-se criar um mtodo chamado frias e encapsular o mtodo descansar, de forma que o mesmo s pudesse ser executado a partir do mtodo frias. O encapsulamento tido como uma boa prtica na programao orientada a objetos, principalmente em projetos que envolvem uma grande equipe de desenvolvimento.

1.2 HERANA

A herana uma importante propriedade da orientao a objetos. Atravs dela possvel criar uma relao hierrquica de classes, de modo que classes filhas

18

herdem atributos e mtodos de sua classe me. A figura 3 ilustra uma relao hierrquica de classes com herana. As setas apontam para as classes me, indicando a origem da herana.

Figura 3 - Hierarquia de classes com herana Fonte: Elaborao prpria (2011)

Supondo-se que estas classes faam parte de um sistema acadmico, como a classe Professor herda de Funcionrio e que por sua vez herda de Pessoa, todo e qualquer professor deste suposto sistema, teria os seguintes atributos:

cod_professor, registro_funcional, CPF, nome e data_nascimento. E tambm teria os seguintes mtodos: ensinar, bater_ponto e dialogar. J um Aluno teria apenas os atributos: matricula, CPF, nome e data_nascimento. E os seguintes mtodos: marcar_presenca, estudar e dialogar.

De acordo com Budd (apud MELO & SILVA, 2010, p. 163), a herana pode ocorrer atravs de especializao, generalizao ou combinao. Na especializao a subclasse mantm todos os elementos da classe pai, podendo adicionar e redefinir mtodos de forma compatvel com a classe pai. Na generalizao, alm de poder adicionar outros atributos e mtodos, a subclasse tambm pode ocultar atributos e

19

mtodos definidos na classe pai. J a combinao permite o compartilhamento de atributos e mtodos entre classes que no possuem relao conceitual dos seus objetos. Segundo Sebesta (2003, p. 96) A herana constitui um mtodo efetivo de reutilizao de cdigo.

1.3 POLIMORFISMO

O polimorfismo uma poderosa propriedade das linguagens de programao orientada a objetos. O significado da palavra polimorfismo vem do grego, significando muitas formas ou muitos tipos (JACOBSON, 1992, p. 100) . Ou seja, atravs dele possvel abstrair relaes de herana em que determinados atributos ou mtodos podem assumir mais de uma forma.

Para exemplificarmos o funcionamento do polimorfismo imagine a modelagem de um jogo em que o jogador conta com vrios tipos de armas a sua disposio, porm, podendo usar apenas uma de cada vez. O primeiro passo , atravs de herana, modelar uma classe para cada tipo de arma como um subtipo de uma classe mais genrica.

A Figura 4, na pgina seguinte, mostra uma parte da modelagem de um jogo deste tipo, onde as classes Faca, Pistola, Rifle e Metralhadora so subtipos da classe Arma e herdam desta ltima seus atributos e mtodos. Todos os subtipos da classe Arma tm um mtodo shot implementado de acordo com suas caractersticas prprias. Cada um destes mtodos sobrescreve o mtodo abstrato da classe Arma. Como a maior parte das armas do jogo so armas de tiro, pode-se nomear o mtodo polimrfico como shot (tiro), ainda que facas no atirem. Na verdade, trata-se de uma conveno bastante conveniente nestes tipos de jogos, uma vez que um mesmo boto ou tecla utilizado para executar aes semelhantes das armas, porm com formas diferentes (atirar, golpear, etc.).

20

Por outro lado, no faz sentido a classe Faca ter um atributo numBalas, como nos demais subtipos de Arma. Apenas o atributo estQuebrada, indicando o estado da arma, deve aparecer em todos os subtipos da classe Arma e, por isso mesmo, deve ser implementado na prpria classe Arma.

Figura 4 - Exemplo de polimorfismo Fonte: Elaborao prpria (2011)

Usado para indicar a arma que um jogador tem na mo, o atributo armaAtual da classe Jogador referencia um objeto do tipo Arma. A seta que liga a classe Jogador classe Arma indica esta referncia. Na verdade, o objeto referenciado deve ser uma instncia de algum dos subtipos de Arma, uma vez que a classe Arma no passa de uma abstrao usada para reunir os diversos tipos de armas.

Por fim, o mtodo shot da classe Jogador deve, em resumo, chamar o mtodo shot a partir do objeto referenciado no atributo armaAtual. Ou seja, dependendo de qual arma o jogador esteja utilizando, ser chamado um mtodo shot especfico.

Algumas linguagens do paradigma orientado a objetos utilizam o conceito de classe abstrata para implementar esse tipo de situao polimrfica. Outras linguagens no suportam classes abstratas, porm, sem deixar de dar o suporte ao polimorfismo.

21

Isto exemplifica o fato de que o suporte especfico dado a orientao a objetos [...] varia amplamente entre as linguagens [...] (SEBESTA, 2003, p. 432).

O principal objetivo do polimorfismo, conforme explica Jacobson (1992, p. 100), possibilitar que o desenvolvedor no se preocupe em saber qual a classe da instncia que chamou determinado mtodo. Seja qual for a classe, o mtodo estar implementado e a mesma o reconhecer.

O nvel de abstrao proporcionado pelo polimorfismo sem dvida um dos maiores benefcios da programao orientada a objetos, simplificando e muito a soluo de problemas envolvendo hierarquia de tipos e requisitos funcionais com muitas regras entrelaadas. A reutilizao de cdigo tambm um benefcio explcito do polimorfismo.

1.4 CONSIDERAES PARCIAIS

As linguagens imperativas esto intimamente relacionadas com a arquitetura de hardware dos computadores. Isso contribuiu para que durante dcadas tais linguagens fossem as mais utilizadas no desenvolvimento de software. No incio de minha experincia como programador, antes do boom da Internet, linguagens imperativas como Clipper, Delphi e Visual Basic eram as mais utilizadas no desenvolvimento de aplicaes comerciais. Apesar do paradigma orientado a objetos existir a muitos anos, somente na ltima dcada pde-se perceber o seu uso mais intenso.

Na minha opinio so muitas as vantagens da orientao a objetos. Atravs dela possvel dividir problemas complexos em partes menores, mais fceis de serem solucionadas. Essa segmentao do problema tambm possibilita a reutilizao de cdigo e facilita a refatorao do mesmo. Em conjunto com metodologias geis como o Scrum e tcnicas de desenvolvimento como o Test Driven Development

22

(TDD), a orientao a objetos torna-se ainda mais produtiva, proporcionando um ambiente de desenvolvimento de software completo e eficiente.

De um modo geral, na minha opinio, os softwares desenvolvidos com linguagens imperativas costumam ser mais difceis para dar manuteno. Ainda que o uso de functions e procedures possibilitem um certo aproveitamento de cdigo nas linguagem funcionais, tal aproveitamento no comparvel com o que ocorre no uso de classes de objetos, principalmente em uma linguagem puramente orientada a objetos e com tipagem dinmica, como Smalltalk.

Atualmente, trabalho com uma linguagem que herdou muito de Smalltalk, a linguagem Ruby, interpretada e tambm com tipagem dinmica. A mais de um ano venho desenvolvendo softwares baseados na web, usando a orientao a objetos como principal paradigma de desenvolvimento. Esta experincia tem sido riqussima, pois a orientao a objetos nos possibilita exercer a criatividade e permite manter o foco na soluo do problema, resultando em uma boa produtividade.

23

2. UM POUCO DE HISTRIA

2.1 PRIMEIRAS LINGUAGENS DE ALTO NVEL

At o incio da dcada de 1950 os computadores eram programados usando cdigo de mquina, uma vez que a tecnologia utilizada na poca no contava com as facilidades que temos hoje com o uso do software. Os cdigos de mquina utilizados para especificar as instrues tornava os programas ilegveis, alm de ser bastante complicado o seu processo de depurao. Surge da uma das principais motivaes para a criao das linguagens de montagem e seus montadores (BARANAUSKAS, 2011, p. 2).

No ano de 1954, o surgimento do computador IBM 704 motivou fortemente o desenvolvimento do FORTRAN, que considerada a primeira linguagem de alto nvel compilada e bem aceita para a poca. O FORTRAN uma linguagem imperativa (ou procedural), ou seja, faz uso de seqncias de comandos que devem ser executados para a soluo do problema. A principal contribuio do FORTRAN foi aproximar a linguagem dos computadores linguagem humana, facilitando a tarefa de escrever e ler os cdigos dos programas (SEBESTA, 2003, p. 53-57 e BARANAUSKAS, 2011, p. 2).

Inicialmente, a linguagem FORTRAN era considerada propriedade da IBM e estava restrita ao hardware produzido por esta empresa. Devido diferentes arquiteturas de hardware, houve a necessidade de ser pensar na elaborao de uma linguagem que pudesse se tornar universal. Aps a formao de um comit internacional, uma nova linguagem foi projetada generalizando recursos do FORTRAN I e adicionando vrias construes e conceitos novos. Trata-se da linguagem ALGOL 58, que foi idealizada para a programao cientfica, [...] a principal rea de aplicao dos computadores naquela poca (SEBESTA, 2003, p. 63-64):

24

O ALGOL 58 formalizou o conceito de tipo de dados, no obstante somente variveis que no eram nmeros reais exigissem declarao explcita. Essa linguagem agregou a idia de instrues compostas, que a maioria das linguagens subseqentes incorporou.

Outra importante linguagem surgida no final da dcada de 1950 foi o COBOL, considerada pioneira no desenvolvimento de aplicaes comerciais, conforme destaca Sebesta (2003, p. 20):
O uso de computadores para aplicaes comerciais iniciou-se na dcada de 50. Equipamentos especiais foram desenvolvidos para tal propsito, juntamente com linguagens especiais. A primeira linguagem de alto nvel bem-sucedida para negcios foi o COBOL [...]

Depois de seu desenvolvimento inicial, o COBOL passou a ser patrocinado pelo Departamento de Defesa dos Estados Unidos. Graas facilidade proporcionada para o desenvolvimento de aplicaes comerciais e a impresso de relatrios, o COBOL [...] levou mecanizao eletrnica da contabilidade, o que se constituiu em uma importante revoluo sob todos os aspectos (SEBESTA, 2003, 70-71).

Conforme foi explicitado no captulo 1, o paradigma imperativo de programao est diretamente ligado ao surgimento das primeiras linguagens de alto nvel. Isso inclui o FORTRAN, o ALGOL e o COBOL. Porm, foi ainda no final da dcada de 1950 que surgiu a primeira linguagem funcional: o LISP. O LISP nasce [...] para oferecer recursos de linguagem para processamento de listas, cuja necessidade surgiu a partir das primeiras aplicaes na rea da inteligncia artificial (IA). As principais caractersticas do LISP eram: suporte a funes recursivas, expresses condicionais, alocao de armazenagem dinmica e desalocao implcita (SEBESTA, 2003, p. 58-59).

At hoje o LISP e suas linguagens derivadas so o padro no campo da Inteligncia Artificial, predominando nas reas de representao do conhecimento, de aprendizagem de mquina, de processamento de linguagem natural, de sistemas de treinamento inteligente e de modelagem da fala e da viso (SEBESTA, 2003, p. 580581).

25

Em 1960, o uso de procedimentos recursivos foi uma das importantes modificaes apresentadas na nova verso do ALGOL. Entre outras inovaes do ALGOL 60 tambm estavam o uso de matrizes dinmicas na pilha, a introduo do conceito de estrutura em bloco e a passagem de parmetros por valor ou por referncia (SEBESTA, 2003, p. 66).

2.2 PRIMRDIOS DA ORIENTAO A OBJETO

Entre os anos de 1962 e 1964, os noruegueses Kristen Nygaard e Ole-Johan Dahl desenvolveram no Norwegian Computing Center (NCC) a linguagem SIMULA I, projetada exclusivamente para simulao de sistemas e implementada no final de 1964 em um computador UNIVAC 1107 (SEBESTA, 2003, p. 81).

Posteriormente, os criadores do SIMULA I comearam a estender a linguagem para o desenvolvimento de aplicaes com propsitos mais gerais, resultando na apresentao do SIMULA 67, em maro de 1967. Herdando a estrutura em bloco e a estrutura de controle do ALGOL 60, a linguagem SIMULA 67 trouxe um avano significativo idia de abstrao de dados atravs da construo de classes organizadas em hierarquia (SEBESTA, 2003, p. 81).

Segundo Sebesta (2003, p. 35):


Os benefcios da abstrao de dados no foram amplamente reconhecidos at o incio da dcada de 70. Porm, a maioria das linguagens projetadas desde o final daquela dcada suporta abstrao de dados [...]

Conforme visto no captulo 1, a herana e o polimorfismo fazem parte dos trs conceitos fundamentais da programao orientada a objetos. Porm, apesar da SIMULA 67 j fazer uso de classes, segundo Abdala & Wangenheim (2002, p. 8): As idias de polimorfismo e herana no faziam parte dos conceitos da linguagem.

26

A linguagem SIMULA 67 acabou por influenciar algumas linguagens orientadas a objetos. A primeira delas foi a Smalltalk. Na verdade, conforme destaca Sebesta (2003, p.432) e fica explcito mais adiante, O conceito de programao orientada a objeto tem suas razes na SIMULA 67, mas no foi amplamente desenvolvido at que a evoluo da Smalltalk resultasse na produo de sua verso 80.

2.3 ALAN KAY E O DYNABOOK

A linguagem de programao Smalltalk tem origem [...] no trabalho de dissertao de Ph.D de Alan Kay, no final da dcada de 60, na Universidade de Utah (SEBESTA, 2003, p. 96-97):
Kay teve uma notvel previso ao antever a disponibilidade futura de computadores de mesa poderosos. Lembre-se que os primeiros microcomputadores somente foram comercializados em meados da dcada de 70, e eles estavam apenas longinquamente relacionados com as mquinas pressentidas por Kay, que eram vistas para executar um milho ou mais de instrues por segundo e conter vrios megabytes de memria. Essas mquinas, na forma de estaes de trabalho, tornaram-se amplamente disponveis somente no incio da dcada de 80.

Pensando no uso de computadores por no programadores, Alan Kay observou a importncia da interatividade (ele j pensava em telas do tipo touch) e do uso de grficos sofisticados na interface com os usurios. Na dissertao de Alan Kay so fermentadas as primeiras idias de um sistema que mais tarde seria chamado de Dynabook. Inicialmente, o software era baseado, em parte, em uma herdeira do SIMULA 67, a linguagem Flex que Alan Kay ajudou a projetar (SEBESTA, 2003, p. 97).

O Dynabook, segundo Abdala e Wangenheim (2002, p.8):


[...] tinha como objetivo prover um ambiente completo, tanto para crianas como para adultos, num novo computador, revolucionrio, de onde derivaram posteriormente as idias de Interface Grfica, Sistema de Janelas, Mouse ou Apontador Grfico, conexo entre computadores (usando linha telefnica ou conexo para LAN's atravs de interface

27

Ethernet), reproduo de sons conectando-se a um aparelho de som e tantos outros.

O projeto do Dynabook foi apresentado para o Xerox Palo Alto Research (Xerox Parc), onde Alan Kay passou a trabalhar e, na sequncia, surgiu o Learning Research Group, contando com nomes importantes como Adele Goldberg, Dan Ingalls, Diana Merry-Shapiro, Ted Kaehler, Larry Tesler e Bob Flegel (BECK, 1997). A primeira misso do Learning Research Group era [...] projetar uma linguagem para suportar o paradigma de programao de Kay e implement-la no melhor computador pessoal ento disponvel. O primeiro resultado foi um hardware Xerox Alto (com tamanho e custo acima do ideal) em conjunto com a linguagem Smalltalk72. Essa tecnologia serviu de base para o desenvolvimento de uma srie de pesquisas, incluindo experimentos para ensinar programao a crianas. O projeto desenvolveu-se durante toda a dcada de 1970. Em 1980, o hardware aperfeioado da Xerox, em conjunto com o Smalltalk-80 j se aproximava bastante do que Alan Kay havia imaginado inicialmente (SEBESTA, 2003, p. 97).

Segundo matria divulgada no incio de 2010, na seo de tecnologia do portal de notcias do Terra (2010, np), a idia do Dynabook aparece como um ponto de partida na histria que leva at os tablets de hoje em dia. Ainda segundo a matria, as mquinas Xerox Alto usadas no Learning Research Group influenciaram [...] o desenvolvimento do Macintosh e, indiretamente, dos PCs como os conhecemos hoje. Porm, Alan Kay [...] considera que seu invento ainda no existe pois falta um ponto crucial: o software. O que mais se aproxima do ideal de Alan Kay o XO-1 do projeto One Laptop per Child (OLPC, 2010, np). Projeto este que Alan Kay participa ativamente.

2.4 EVOLUO DA SMALLTALK

A linguagem Smalltalk nasceu em 1969, mesmo ano da dissertao de Alan Kay. Porm, as caractersticas que tornaram Smalltalk a primeira linguagem de

28

programao totalmente orientada a objetos foram sendo implementadas aos poucos em verses que levavam o ano de lanamento afixado ao nome da linguagem. Segundo Abdala e Wangenheim (2002, p. 3), Smalltalk foi o produto de longas e minuciosas pesquisas, desenvolvido juntamente com o prprio conceito de orientao a objetos: ambos evoluram em conjunto.

Inicialmente, os conceitos grficos foram inspirados na linguagem LOGO, de Seymour Papert, usada no ensino de programao para crianas. A programao recursiva e o fato de que todo mtodo retorna algum valor uma influncia da linguagem LISP. J a modularidade uma das caracterstica herdadas do SIMULA 67 (ABDALA & WANGENHEIM, 2002, p. 9). O editor grfico Sketchpad tambm exerceu influncia direta nos conceitos grficos e de orientao a objetos da Smalltalk (KAY, 1993, p. 4-5).

Devido aos estudos de Alan Kay e as pesquisas no Learning Research Group, fica claro que os primitivos conceitos de orientao a objetos do Smalltalk foram de fato diretamente influenciados pela linguagem SIMULA 67, conforme apontam Abdala & Wangenheim (2002, p. 9) e Sebesta (2003, p. 97).

Da mesma forma que a SIMULA 67, a Smalltalk-72 (primeira verso propriamente dita) tambm no continha o conceito de herana. A Smalltalk-74 j suportava [...] interface grfica, mapeamento de imagem por bits (os Bitmaps) e tambm o conceito de memria virtual. Estes melhoramentos possibilitaram a criao do primeiro sistema de gerenciamento de janelas. O [...] conceito de interao com o usurio de Smalltalk-74 de fato inspirou os sistemas de janelas atualmente em uso: MS Windows e X-Windows. muito citada na literatura uma visita de Bill Gates a Palo Alto, de onde voltou com muitas idias (ABDALA & WANGENHEIM, 2002, p. 9, grifo do autor). A herana finalmente aparece no Smalltalk-76, assim como o [...] conceito de bytecodes e mquina virtual (VM Virtual Machine), o que desvinculou a linguagem de programao do hardware especfico de cada mquina [...]. J o Smalltalk-78 apenas otimizou o cdigo da verso anterior. Nesta poca a popularidade da

29

linguagem crescia e a Xerox decidiu tornar pblica a linguagem lanando uma srie de artigos (ABDALA & WANGENHEIM, 2002, p. 9-10).

O padro de projeto MVC (Model-View-Controller) utilizado hoje em diversas linguagens de programao para separar as regras de negcio da interface visual da aplicao j se desenvolvia no Smalltalk, como um framework, pelo programador Trygve Reenskang (ABDALA & WANGENHEIM, 2002, p. 3 e 239).

A Smalltalk-80 foi lanada como uma verso mais enxuta que a Smalltalk-78, mas que continha uma grande biblioteca de classes e j apresentava todas as caractersticas da orientao a objetos. Alm de suportar a orientao a objetos, o prprio ambiente de desenvolvimento integrado da linguagem fazia uso dos objetos, inclusive o prprio compilador. Devido ao conceito de bytecode gerado pelo prcompilador, [...] a Xerox convidou algumas empresas para desenvolverem as mquinas virtuais para suas plataformas. Dentre elas, podemos citas a gigante Hewlett Packard, a emergente Apple Computer e a Digital Equipment. (ABDALA & WANGENHEIM, 2002, p. 11)

Com o passar do tempo, de acordo com Abdala & Wangenheim (2002, p. 11):
[...] uma grande variedade de implementaes do Smalltalk comeou a surgir. Muitos projetos tiveram incio dentro dos Estados Unidos, Japo e Europa. A Apple apresentou um particular interesse em relao linguagem e vrios pesquisadores do projeto original foram para esta empresa com o intuito de criar uma nova arquitetura de computador, que deu origem ao sistema operacional da Apple baseado em interface grfica. A IBM no deixou por menos. Desenvolveu vrias pesquisas e criou a sua verso do Smalltalk chamada Smalltalk V. O Smalltalk V foi o primeiro Smalltalk a rodar tambm em DOS e tornou-se extremamente popular no final da dcada de 80. Posteriormente, a IBM mudou o nome de sua implementao de Smalltalk para VisualAge for Smalltalk [...]

A prpria Xerox, onde a linguagem foi criada, no obteve muito sucesso com a mesma. Mas, em 1987, criou a Parc Place, uma nova empresa para cuidar especificamente dos negcios do Smalltalk. Em 1990, a Parc Place lana o ObjectWorks, que mais tarde passa a se chamar VisualWorks e ganha um [...] ambiente para programao visual de interfaces grficas de usurio (ABDALA & WANGENHEIM, 2002, p. 12):

30

O VisualWorks tem duas linhas. Uma de produtos comerciais, com uma extensa biblioteca de classes e com inmeras possibilidades, que vo desde a capacidade de se criar aplicaes para rodar na Internet, at objetos para suporte de programao distribuda e ferramentas de controle de verses de cdigo fonte. A outra linha para distribuio no comercial, para estudantes e curiosos, porm sem algumas das funcionalidades da verso comercial [...].

De acordo com o site da CINCOM (2010, np), empresa que assumiu os negcios da Parc Place, a linha no comercial do VisualWorks est em sua verso 7.7.1.

O GNU Smalltalk uma implementao livre do Smalltalk-80 que pode ser usada em ambiente Linux como uma ferramenta de scripts e no como um ambiente de desenvolvimento integrado. Em 1991, a verso 1.1.x foi disponibilizada e atualmente encontra-se na verso 3.2.3 (GNU Smalltalk, 2010, np).

Em 1996 surgiu o Squeak, uma implementao de livre distribuio cuja origem remonta a um grupo de pesquisas da Apple Computer, que contava com Alan Kay e outros antigos pesquisadores da Xerox. Mais tarde, o mesmo grupo passou a desenvolver o Squeak na Walt Disney Imagineering (SQUEAK, 2010, np).

Em 2008 iniciou-se o projeto de mais uma implementao de livre distribuio: o Pharo. Baseado no Squeak, o Pharo teve sua primeira verso lanada em 2010 e atualmente encontra-se na verso 1.1.1 (PHARO, 2010, np). Mais adiante esta implementao ser apresentada com mais detalhes.

Este captulo finalizado com o diagrama da Figura 5, apresentado na pgina seguinte. Neste diagrama possvel visualizar algumas das linguagens de programao mais conhecidas de todos os tempos.

31

Figura 5 - Genealogia das linguagens de programao mais conhecidas Fonte: Elaborao prpria com base em O'REILLY (2010, np)

32

2.5 CONSIDERAES PARCIAIS

Primeiramente, em relao ao diagrama apresentado na Figura 5, importante observar que as dcadas apresentadas indicam apenas a poca de lanamento das linguagens, no tendo nenhuma relao com as linguagens mais utilizadas nestes perodos, visto que algumas linguagem sequer chegaram a ter um uso generalizado (ainda que tenham a sua importncia) e outras j so utilizadas amplamente durante dcadas.

As setas indicam uma relao de acentuada presena de influncia. O objetivo mostrar a existncia de legados diretos e indiretos de linguagens mais antigas para linguagens mais recentes, possibilitando uma melhor compreenso da dinmica de evoluo das linguagens de programao.

Com base neste diagrama e no que foi apresentado neste captulo, possvel tecer algumas consideraes preliminares. A partir das primeiras dcadas apresentadas, observa-se que a maioria das linguagens de programao so herdeiras do paradigma imperativo via ALGOL e mais tarde ramificando-se a partir do C ou do Pascal.

Mais tarde, as prprias linguagens imperativas passaram a incorporar o suporte orientao a objetos, trazendo muito sucesso para linguagens com C++ e Delphi num primeiro momento e posteriormente a forte presena da linguagem Java que desde sua origem herdou caractersticas tanto do paradigma imperativo como do orientado a objetos.

Por outro lado, marcante a presena da linguagem Smalltalk como a primeira a aglutinar as idias do paradigma funcional do LISP com a abstrao de dados da SIMULA e como uma das linguagens com maior nmero de herdeiras diretas e indiretas, o que reflete a sua importncia como linguagem norteadora do paradigma orientado a objetos.

33

As linguagens Java e C# aparecem como as linguagens que mais sofreram influncias diretas e indiretas de outras linguagens. Por sinal, so linguagens com suporte orientao a objetos, herdeiras do paradigma desenvolvido juntamente com a linguagem Smalltalk. Porm, em comparao com Smalltalk, no so linguagens puramente orientada a objetos.

Talvez, linguagens multiparadigma, como Ruby, venham a se desenvolver em maior nmero. Porm, sempre existiro problemas em que um determinado paradigma se encaixe melhor. E a orientao a objetos tem seu lugar garantido em um vasto campo de atuao.

A tipagem dinmica, usada em Smalltalk, tambm se apresenta como uma tendncia em linguagens recentes. A prpria linguagem Java j ganhou uma verso com suporte a tipagem dinmica, chamada JavaFx (JAVAFX, 2011, np).

Outra considerao importante de ser feita que, muitas vezes, na rea de TI (Tecnologia da Informao), os aspectos puramente tcnicos se destacam mais do que os contextos em que as tecnologias esto inseridas. Na minha opinio, a histria pode e deve ser uma grande aliada dos profissionais de TI.

Atravs de estudos histricos como os apresentados por SEBESTA (2003), possvel compreender de que forma chegamos at as atuais tecnologias. Hoje a orientao a objetos um paradigma conhecido, amplamente divulgado e utilizado. Porm, mesmo nos dias de hoje, fcil encontrar programadores que utilizam a linguagem Java, por exemplo, e que desconhecem Smalltalk, sua ancestral mais importante; alguns programadores web usam MVC e sequer desconfiam que este padro de projeto j era utilizado na dcada de 1980.

Isto me faz pensar que certamente outras tecnologias esto se desenvolvendo em segundo plano na atualidade e que somente daqui a vrios anos se difundiro na prtica dos desenvolvedores atravs de ferramentas aceitas pelo mercado. Da a importncia do profissional de TI estar atento a tudo o que acontece na rea.

34

claro que nem todos esto prximos dos lugares onde as coisas acontecem. Smalltalk e inmeras outras tecnologias so frutos tpicos do ambiente semeado em Palo Alto e outras cidades do Vale do Silcio. Porm, cabe a ns buscar conhecimento e desenvolver pesquisa e criar nosso prprio Vale do Silcio.

35

3. VISO GERAL DA SMALLTALK

Nesta captulo ser apresentada a linguagem Smalltalk e a forma como a orientao a objetos utilizada na mesma. Existe pouca referncia em portugus sobre Smalltalk se compararmos com a quantidade de material disponvel sobre outras linguagens, como Java, por exemplo. Basicamente, possvel encontrar o livro de Abdala & Wangenheim (2003) e alguns poucos documentos eletrnicos disponveis em sites de alunos ou professores universitrios, como por exemplo, o material do professor Miguel Jonathan (1994).

Porm, existe vasta literatura em ingls, com muitas obras disponveis na prpria Internet. Os primeiros textos a alcanarem um pblico externo ao grupo da Xerox, foram os artigos publicados na revista Byte no final da dcada de 1970. Trs livros fazem parte da literatura mais clssica da linguagem: os famosos Blue Book, Orange Book e Green Book, publicados pela Xerox no incio da dcada de 1980, como parte da estratgia de tornar pblica a linguagem Smalltalk.

Devido s vrias implementaes da linguagem Smalltalk, possvel encontrar algumas divergncias de sintaxe em cada uma delas. Mas apesar da existncia dos vrios dialetos, todas as sintaxes so mais parecidas do que diferentes, no sendo um problema, portanto, para um programador de determinada implementao, compreender um cdigo de outra implementao (ALPERT; BROWN; WOOLF, 1998, p. 12) .

A implementao que mais se diferencia do Smalltalk-80 o GNU Smalltalk que alm de no contam com as facilidades das IDEs disponveis para outras implementaes, tem uma sintaxe um pouco mais complexa.

Pelo menos uma implementao de Smalltalk est disponvel nas plataformas Windows, Mac, UNIX e at mainframes IBM. Uma lista com vrias das implementaes existentes pode ser encontrada em SMALLTALK (2010, np).

36

3.1 CONCEITOS FUNDAMENTAIS

Aqui so apresentados alguns conceitos importantes que diferenciam a linguagem Smalltalk de outras linguagens orientadas a objetos. Comparaes com a linguagem C++ sero utilizadas para exemplificar algumas situaes.

Smalltalk uma linguagem puramente orientada a objetos, diferente de linguagens hbridas, como o C++. Toda a rotina computacional relevante para a programao na linguagem Smalltalk somente ocorre atravs de respostas s mensagens enviadas aos objetos. Tudo objeto, incluindo os tipos primitivos de dados, como nmeros, caracteres e strings. Diferente de C++, no possvel ter funes globais que no so inerentes a qualquer classe. Portanto, necessrio refletir sobre qual classe deve realmente ficar responsvel por cada pedao de funcionalidade. Ainda que as linguagens hbridas tirem proveito dos diversos paradigmas, a abordagem pura torna-se mais compreensvel (ALPERT; BROWN; WOOLF, 1998, p. 5-6).

Segundo Sebesta (2003, p. 436), uma desvantagem da exclusividade do uso de objetos est no desempenho do processo de passagem de mensagens, que perde para as instrues do modelo imperativo.

Tudo em Smalltalk objeto porque at as classes so objetos em tempo de execuo. Elas so capazes de enviar e receber mensagens, e normalmente participam de toda a parte computacional. A criao de instncia uma das tarefas cumpridas pelos objetos classe. A diferena de outras linguagens orientadas a objetos, como C++ por exemplo, est no fato de que a distino entre criacional e comportamental menor. Portanto, criar uma instncia apenas uma

especializao de comportamento. E ter uma classe como um objeto pleno faz parte de uma srie de padres da linguagem (ALPERT; BROWN; WOOLF, 1998, p. 6).

Um dos maiores benefcios do ambiente Smalltalk o seu grande conjunto de classes bsicas, que foram aperfeioados e depurado ao longo dos anos. At

37

mesmo os tipos abstratos de dados de baixo nvel includos nestas bibliotecas foram aprimorados com o tempo para possuir capacidades abrangentes. A reutilizao de funcionalidades um dos benefcios desta extensa biblioteca de classes (ALPERT; BROWN; WOOLF, 1998, p. 6).

Os tipos abstratos de dados, como nmeros, strings e colees so implementados como classes modificveis pelo usurio e no como tipos intrnsecos linguagem propriamente dita. Isso significa que possvel aumentar a funcionalidade dos objetos atravs da definio de mtodos prprios dentro destas classes. Se precisarmos de um novo tipo de Iterator, por exemplo, pode-se escrever um novo mtodo na classe Collection, em vez de ter que definir uma nova classe de Iterators (ALPERT; BROWN; WOOLF, 1998, p. 6).

Smalltalk utiliza uma tipagem de ligao dinmica (ou ligao tardia). As variveis no so declaradas para serem de uma classe particular e, de fato, elas no so de nenhum tipo especfico at que os objetos venham a ser instanciados e referenciados por estas variveis (ALPERT; BROWN; WOOLF, 1998, p. 6-7).

Autores como Sebesta (2003, p. 30) demonstram ser favorvel a uma tipagem esttica e forte, de preferncia em tempo de compilao. Em Smalltalk, devido compilao incremental que ser vista mais adiante, possvel detectar rapidamente incoerncias de tipo.

Qualquer varivel simples, em Smalltalk, pode apontar para instncias de qualquer classe (em toda a hierarquia) em pontos diferentes no tempo, enquanto que em C++ podem ser instncias de apenas uma determinada classe ou de suas subclasses derivadas. O mesmo vlido para os objetos dentro das colees. Em C++, todos os objetos em uma lista devem ser de um tipo especfico ou classe (ou de suas subclasses), enquanto que em Smalltalk, uma coleo, em geral, pode conter instncias heterogneas de quaisquer classes. Por exemplo, em Smalltalk, iteradores so mais poderosos porque so intrinsecamente polimrficos, no precisando definir os diferentes tipos de iteradores para listas com diferentes tipos de elementos (ALPERT; BROWN; WOOLF, 1998, p. 7).

38

Outra importante construo da linguagem Smalltalk so os blocos. Um bloco um objeto que contm um pedao de cdigo que no executado at que o bloco receba uma mensagem para faz-lo. Ou seja, a avaliao do bloco de cdigo no ocorre quando ele encontrado em um mtodo seqencial. Para executar as instrues contidas no bloco preciso enviar explicitamente uma mensagem value (ou uma de suas variaes). Como os blocos so objetos, pode-se cri-los em cdigo e pass-los para que outros objetos os avaliem. Geralmente, esta situao acaba sendo extremamente til em diversos padres de projeto. Blocos tambm so eficazes para permitir anexar um cdigo especfico em uma instncia individual de uma classe (por oposio aos mtodos, cujo comportamento se aplica a todas as instncias de uma classe). Os blocos permitem definir estruturas de controle prprias dentro da linguagem, ao invs de se limitar a um conjunto fixo de estruturas condicionais e laos (ALPERT; BROWN; WOOLF, 1998, p. 7).

Smalltalk permite escrever cdigo para obter informaes sobre o seu prprio ambiente. possvel explorar as classes e mtodos existentes na biblioteca padro de classes, descobrir de que forma as classes se relacionam dentro da hierarquia de classes, quais so os mtodos do processo em execuo num determinado momento, ou ainda, quais mensagens so passveis de resposta por uma instncia especfica de uma classe. Tais recursos so componentes fundamentais no kit de ferramentas do programador Smalltalk. As ferramentas reflexivas do prprio ambiente de desenvolvimento - navegadores de classe e mtodo, depurador, etc. podem ser modificadas na prpria linguagem Smalltalk. Uma vez que algum cdigo includo nas bibliotecas de classe, possvel melhorar e aperfeioar estas ferramentas para atender novas necessidades ou integr-las com novas ferramentas. Um programador Smalltalk sente-se confortvel ao usar as

capacidades reflexivas da linguagem para construir e integrar novas ferramentas de programao para o ambiente de desenvolvimento (ALPERT; BROWN; WOOLF, 1998, p. 7-8).

possvel armazenar um seletor de mensagem de forma simblica e em qualquer momento invocar essa mensagem em um objeto usando a mensagem perform: (ou suas variaes). Isso semelhante capacidade do C++ de chamar uma funo usando um ponteiro de funo. A diferena que em Smalltalk pode-se usar uma

39

representao simblica da assinatura de uma mensagem (ALPERT; BROWN; WOOLF, 1998, p. 7-8).

Em Smalltalk, cada classe tem apenas uma nica superclasse, diferente de C++, que suporta a herana mltipla. A herana mltipla oferece uma soluo imediata para alguns problemas. Porm, apresenta maior complexidade e problemas com herana repetida, como por exemplo, herdar de duas classes que herdam da mesma superclasse (ver em Sebesta (2003, p. 439) o problema da herana diamante). Em Smalltalk, possvel encontrar solues alternativas para problemas que teoricamente necessitem de herana mltipla. Na verdade, a herana mltipla foi deliberadamente deixada de fora no Smalltalk por no ser suficientemente til para compensar a complexidade que ela traz (especialmente para a compreenso do programa) (ALPERT; BROWN; WOOLF, 1998, p. 8).

Em C++, por exemplo, a ligao dinmica de uma funo (declarada em uma superclasse e substituda em uma ou mais subclasses) s funciona se a funo for declarada como virtual na superclasse. Isso pode ser um impedimento extensibilidade e reutilizao incremental (reutilizao de partes comuns do comportamento de uma superclasse atravs da herana, substituindo apenas os mtodos de especializao da subclasse) (ALPERT; BROWN; WOOLF, 1998, p. 8).

O desenvolvimento em Smalltalk - em suas implementaes mais importantes ocorre sempre no contexto de um ambiente de desenvolvimento interativo. H uma srie de implicaes, inclusive facilitando a experimentao, o teste e a disponibilidade de ferramentas para compreender o programa e encontrar classes reutilizveis e mtodos. Com relao ao design, no existe uma deciso de projeto definitiva. O ambiente oferece a compilao incremental de mtodos individuais, na medida em que eles so salvos. No preciso recompilar ou mesmo possuir todo o cdigo fonte de uma classe para modificar ou adicionar mtodos dessa classe. Desta forma, no existe a preocupao de onde o cdigo de uma nova funcionalidade deve ser inserido. Basta saber a qual classe o mtodo pertence logicamente (ALPERT; BROWN; WOOLF, 1998, p. 9).

40

Ainda falando sobre a compilao incremental, importante salientar que Smalltalk usada, na maioria das vezes, como um linguagem de implementao hbrida. Durante a compilao o cdigo traduzido para uma linguagem intermediria chamada cdigo de bytes (bytecode). Durante a execuo do programa este cdigo de bytes interpretado atravs do uso de uma mquina virtual (virtual machine) capaz de reconhecer o cdigo de bytes e transform-lo em instrues de mquina (SEBESTA, 2003, p. 43).

O ambiente de desenvolvimento integrado - Integrated Development Environment (IDE) do Smalltalk, diferente de IDE's de outras linguagens, surge de forma concomitante prpria linguagem, demonstrando assim a importncia deste ambiente dentro da mentalidade de programao proposta. Nas palavras de Sebesta (2003, p. 44 e 98), A interface com o ambiente altamente grfica, fazendo muito uso de janelas sobrepostas e menus suspensos (pop-up) e de um dispositivo de entrada (mouse), visando [...] oferecer ao usurio uma interface uniforme a todas as ferramentas.

Diferente de C++, Smalltalk no prev um mecanismo em tempo de compilao para declarar e fazer respeitar a privacidade de um mtodo. Os programadores podem documentar um mtodo como privado (por exemplo, com os comentrios), mas no h nenhum mecanismo interno para evitar realmente que um objeto externo chame esse mtodo. Da mesma forma, Smalltalk no tem nenhum mecanismo para evitar a instanciao de uma classe destinada a ser abstrata. Porm, existem certos padres de projeto que podem ser utilizados para tais casos, prevalecendo a mentalidade da liberdade e da responsabilidade do desenvolvedor (ALPERT; BROWN; WOOLF, 1998, p. 9).

Tal mentalidade pressupe que a linguagem de programao no deve tutelar o programador, impondo muitas restries de segurana, conforme destaca Sebesta (2003, p.21) sobre o desenvolvimento de sistemas operacionais. A linguagem C++ desenvolvida para a eficincia e a preveno de erros por parte dos programadores. J Smalltalk se destina a ser uma linguagem mais flexvel (ALPERT; BROWN; WOOLF, 1998, p. 9).

41

Elementos importantes da capacidade de escrita da linguagem Smalltalk so a simplicidade e a ortogonalidade (falta de excees s regras da linguagem). Abdala e Wangenheim (2002, p. 51) apontam o alto grau de ortogonalidade da linguagem como um fator determinante de sua expressividade.

Um nmero reduzido de construes primitivas e um conjunto consistente de regras para combinar tais construes [...] muito melhor do que, simplesmente, ter um nmero grande de primitivas. Por outro lado, muita ortogonalidade [...] pode resultar em prejuzos para a capacidade de escrita. Erros ao escrever programas podem no ser detectados, uma vez que quase todas as combinaes de primitivas so legais (SEBESTA, 2003, p. 28-29).

Smalltalk apresenta apenas seis palavras reservadas: nil, true, false, self, super, thisContext (FIGUEIREDO & TEDESQUE, 2010, np). Esse nmero reduzido de palavras reservas vai ao encontro de uma maior liberdade ao desenvolvedor. Porm, esta questo apresenta-se na forma de um conflito entre a [...] simplicidade resultante de um nmero menor de palavras reservadas [...] e a maior legibilidade que pode resultar do uso de um nmero maior de palavras reservadas [...] (SEBESTA, 2003, p. 27).

Nas tabelas 1 e 2 das pginas seguintes, possvel visualizar alguns dados comparativos entre linguagens de programao, incluindo Smalltalk. A marcao N/A indica que o tpico ou recurso no se aplica linguagem.

42

Eiffel Orientao a objeto Tipagem Classes Genricas Pura Esttica Sim

Smalltalk Pura Dinmica N/A

Ruby Pura Dinmica N/A Simples com classes; mltipla com "mixins" Sim No Sim Blocos Sim (blocos) Marcao e varredura Sim Sim

Java Hbrida Esttica No Simples com classes; mltipla com interfaces No Sim No No No Marcao e varredura ou Geracional No Sim

C# Hbrida Esttica No Simples com classes; mltipla com interfaces No Sim Sim No No Marcao e varredura ou Geracional No Sim

C++ Hbrida / Multi paradigma Esttica Sim

Python Hbrida Dinmica N/A

Perl Add-On / Hbrida Dinmica N/A

Visual Basic Suporte parcial Esttica No

Herana

Mltipla

Simples

Mltipla

Mltipla

Mltipla

No tem

Renomeamento de recursos Sobrecarga de mtodos Sobrecarga de operadores Funes de ordem superior Closures

Sim No Sim Agents (na verso 5) Sim (inline agents) Marcao e varredura ou Geracional Sim No Sim (a partir da verso 5)

No No Sim (?) Blocos Sim (blocos) Marcao e varredura ou Geracional N/A Sim

No Sim Sim No No

No No Sim Expresso lambda Sim (desde verso 2.1) Contagem de referncia No No

No No Sim Sim (?) Sim

No No No No No

Garbage Collection

No tem

Contagem de referncia No No

Contagem de referncia No No

Acesso uniforme Variveis e mtodos da classe Reflexo

No Sim

Sim

Sim

Sim

Sim public, protected, private, internal, protected internal No

No

Sim

Sim (?)

No

Encapsulamento

Selective export

Protectd Data, Public Methods

public, protected, private

public, protected, "package", private

public, protected, private, "friends"

Name Mangling

None

public, private

Programao por contrato

Sim

No

Add-on

No

No

No

No

No

Multithreading

Dependen- Dependente de te de implemen- implementao tao No No C, C++, Java No No No

Sim

Sim

Sim

Bibliotecas

Sim

No

Sim

Expresses regulares Aritmtica de ponteiros Integrao de linguagens Segurana embutida

Embutido No C, C++, Java Sim

Biblioteca padro No C, de certa forma em C++ Sim

Biblioteca padro Sim Nas linguagens .NET Sim

No Sim C, Assembler No

Biblioteca padro No C, C++, Java No (?)

Embutido No

No No C (via DCOM) No

C, C++ Sim (perlsec)

No

Tabela 1 Comparao das linguagens de programao Fonte: VOEGELE (2011, np).

43

Eiffel

Smalltalk

Ruby

Java

C#

C++

Python

Perl

Visual Basic

Encapsulamento

Sim

Sim

Sim

Sim

Sim

Sim

No

Sim (?)

Sim (?)

Herana

Sim

Sim

Sim

Sim

Sim

Sim

Sim

Sim (?)

No

Polimorfismo

Sim

Sim

Sim

Sim

Sim

Sim

Sim

Sim (?)

Sim, por delegao

Todos os tipos pr-definidos so objetos? Todas as operaes so mensagens para objetos? Todas os tipos definidos pelo usurio so objetos?

Sim

Sim

Sim

No

No

No

Sim

No

No

Sim

Sim

Sim

No

No

No

No

No

No

Sim

Sim

Sim

Sim

Sim

No

Sim

No

No

Tabela 2 Comparao do suporte orientao a objetos Fonte: VOEGELE (2011, np).

3.2 PRIMEIROS PASSOS IDE E REGRAS DE SINTAXE

A linguagem

Smalltalk ser apresentada

a partir de sua mais recente

implementao: a IDE Pharo. Esta implementao uma alternativa open-source, derivada do Squeak, que pode ser gratuitamente adquirida no site do projeto (PHARO, 2010, np). Trata-se de um ambiente de desenvolvimento integrado, com interface grfica, mquina virtual e vrias ferramentas a disposio do programador.

Conforme visto no captulo anterior, os prprios elementos do ambiente de desenvolvimento integrado so objetos. Portanto, no s as aplicaes que esto sendo desenvolvidas iro funcionar via passagem de mensagens. Durante todo o

44

desenvolvimento das aplicaes usa-se passagem de mensagens para acessar os mtodos de criao de classe, criao de mtodos, etc.

Ao iniciar este ambiente de desenvolvimento, visualiza-se uma rea de trabalho onde possvel abrir vrias janelas (que tambm so objetos) e executar algumas aes especficas atravs de um menu chamado World, bastando apenas clicar com o mouse na rea de trabalho. possvel visualizar o referido menu na Figura 6.

Figura 6 - rea de trabalho e menu World do Pharo Fonte: elaborao prpria.

Tambm possvel usar um menu de contexto nos objetos da IDE clicando com o boto direito do mouse para apresentar aes interessantes que podem ajudar muito durante o desenvolvimento. No menu World as opes Save e Save as... so usadas para salvar o arquivo de imagem. Ao salvar uma imagem, todo o cenrio do ambiente de desenvolvimento

45

armazenado no arquivo com extenso .image. Com a imagem salva, possvel sair do Pharo e retornar com todas as janelas na mesma posio e at mesmo com os objetos criados e referenciados em variveis na ltima sesso.

Os objetos fundamentais utilizados no desenvolvimento com o Pharo so: Workspace, System Browser e Transcript. Trata-se de objetos clssico, presentes em todas as implementaes do Smalltalk, ainda que possivelmente com outros nomes. A Figura 7 mostra os trs objetos visveis ao mesmo tempo.

Figura 7 - System Object, Workspace e Transcript Fonte: elaborao prpria

O Workspace e o Transcript so bastante semelhantes, mas tm finalidades diferentes. O primeiro consiste em uma rea onde possvel trocar mensagens entre objetos, bastante utilizada para pequenos testes ou procedimentos simples necessrios durante o desenvolvimento, como configuraes, etc. J o Transcript mais usado para mostrar resultados de mensagens enviadas atravs do Workspace,

46

apesar de tambm ser capaz de receber instrues via teclado igualmente ao Workspace.

Um exemplo simples de como o Workspace funciona em conjunto com o Transcript demonstrado logo abaixo:

Transcript clear. Transcript show: Hello World!.

A primeira linha de cdigo limpa toda a rea do Transcript. A segunda linha mostra Hello World! no Transcript. Observe que o objeto Transcript est enviando as mensagens clear e show:. No caso, o Hello World! um objeto passado como parmetro.

Nem o Workspace, nem o Transcript so interpretadores de linha de comando. Para executar um trecho de cdigo, como o apresentado acima, preciso selecionar o trecho de cdigo que se deseja executar e usando o menu de contexto (boto direito do mouse) usar o do it (control+d). Outras aes possveis so o print it, o inspect it, o explore it e o debug it, trazendo uma facilidade enorme para os desenvolvedores testarem pequenos trechos de cdigo.

A Figura 8, na pgina seguinte, mostra em destaque o System Browser. O System Browser um navegador e editor de classes, mtodos e suas respectivas categorias. Da esquerda para a direita pode-se observar: as categorias de classe; as classes relativas categoria de classe selecionada; as categorias de mtodos; os mtodos relativos categoria de mtodos selecionada. Na parte inferior do System Browser possvel visualizar e editar as definies de classes, mtodos e categorias. Abaixo da listagem de classes possvel observar trs botes: instance, "?" e class. O boto ? apresenta a documentao da classe selecionada. J os botes instance e class, referem-se aos mtodos de instncia e mtodos da classe, ou seja, aqueles que podem ser executados diretamente atravs do envio de

47

mensagem a partir da instncia da classe e aqueles que podem ser executados diretamente atravs do envio de mensagem a partir da prpria classe.

Figura 8 - System Object Fonte: elaborao prpria

Portanto, ao clicarmos em instance apenas os mtodos de instncia aparecem na listagem de mtodos, assim como apenas as categorias dos mtodos de instncia aparecem. J ao clicarmos em class apenas os mtodos da classe aparecem, juntamente com as categorias de mtodos da classe. Importante salientar que apenas os mtodos definidos na prpria classe (seja de instncia ou de classe) so exibidos no System Browser. O boto browse abre um novo System Browser a partir do elemento corrente. J o boto hierarchy abre o HierarchyBrowser, onde possvel visualizar as classes de forma hierarquizada. Trata-se de um navegador idntico ao System Browser, apenas no contendo a lista de categorias de classe, por ser desnecessria para o modo de visualizao pretendido pelo HierarchyBrowser.

48

O boto variables abre uma instncia de OBVariablesBrowser onde possvel visualizar todas as variveis, inclusive as herdadas das superclasses. Ao clicar em uma das variveis, todos os mtodos que utilizam tal varivel so exibidos logo ao lado, por hierarquia de classe.

Todos os outros botes apenas aparecem habilitados se um mtodo estiver selecionado, caso contrrio eles ficam desabilitados. O boto implementors mostra todas as classes que implementam o mtodo selecionado. Ao clicar em algum mtodo de alguma classe apresentada, apresentada uma lista com os mtodos usados no mtodo que foi clicado. O boto inheritance mostra lado a lado, toda a herana do mtodo selecionado. O boto versions mostra diferentes verses do mtodo selecionado. Uma nova verso adicionada toda vez que se efetua alguma modificao no mtodo. O boto view mostra diferentes vises do mtodo selecionado. Aqui possvel visualizar a sintaxe do bytecode gerado pela compilao incremental. O boto senders mostra todos os remetentes do mtodo selecionado. Ou seja, todos os mtodos que utilizam o mtodo selecionado.

Usando o menu de contexto sobre as listas do System Browser possvel visualizar inmeras operaes disponveis para ajudar durante o processo de desenvolvimento. O find class uma delas, possibilitando localizar uma determinada classe facilmente. Apenas observando o System Browser j possvel ter uma idia da facilidade que o ambiente de desenvolvimento integrado trs para os desenvolvedores.

Agora, ser possvel conhecer o bsico da sintaxe da linguagem Smalltalk. Para isso vamos utilizar algumas lies de um tutorial de sintaxe chamado ProfStef. Para abrir o tutorial, basta usar o menu World e acessar Help, ProfStef Browser. A Figura 9 mostra a tela do tutorial com a lista de lies e os botes de navegao entre as lies.

A primeira lio do tutorial diz respeito aos comentrios da linguagem. Qualquer texto entre aspas duplas considerado um comentrio. Exemplo:

49

Isso um comentrio

A prxima lio uma forma de mostrar que tudo em Smalltalk um objeto, inclusive o prprio tutorial. A mensagem "next" enviada ao tutorial indicando que o mesmo deve prosseguir.

ProfStef next.

A prxima lio apresenta alguns objetos interessantes, incluindo o System Browser j explorado anteriormente.

Browser open. SmalltalkImage current aboutThisSystem.

Figura 9 - Tutorial de sintaxe ProfStef Fonte: elaborao prpria

50

A expresso SmalltalkImage current aboutThisSystem. mostra uma janela de dilogo com informaes sobre a licena do Pharo. A partir desta expresso j possvel adiantar uma das regras do cdigo Smalltalk: as expresses so executadas da esquerda para a direita. No exemplo apresentado, dois objetos esto enviando mensagens. Primeiramente, o objeto SmalltalkImage envia a mensagem current e o objeto retornado envia a mensagem aboutThisSystem.

A prxima lio mostra algumas outras expresses possveis, contendo objetos e envio de mensagens.

1 + 2. Date today. Time now. SmalltalkImage current datedVersion.

A esta altura voc j deve ter percebido que o ponto encerra as expresses. A prxima lio mostra que os parnteses precisam ser usados para alterar a precedncia das operaes.

2. 20 factorial. 1000 factorial / 999 factorial. (1/3). (1/3) + (2/3). 1 class. 1 class maxVal class. (1 class maxVal + 1) class.

No caso do cdigo abaixo:

1/3+2/3

as mensagens seriam enviadas normalmente da esquerda para a direita. Portanto, 1 seria dividido por 3; o resultado seria somado a 2; e por fim ocorreria a diviso por 3.

51

A mensagem class enviada a qualquer objeto indica qual o tipo do objeto, ou seja, a que classe ele pertence. Aqui possvel perceber que cada tipo numrico na verdade uma classe. A mensagem maxVal indica o valor mximo suportado por cada classe de nmeros. A penltima mensagem retorna SmallInteger, que a prpria classe do objeto 1. J a ltima mensagem retorna LargePositiveInteger.

A prxima lio mostra os objetos da classe Character.

$A. $A class. $B charCode. Character cr. Character space. "You can print all 256 characters of the ASCII extended set:" Character allByteCharacters.

Pode-se representar um nico caractere usando o sinal de $ e o prprio caractere. A terceira expresso retorna 66, o cdigo ASCII para a letra B. A mudana de linha e o espao tambm so caracteres representados por cr e space respectivamente. A ltima expresso retorna um objeto Array contendo os 256 caracteres da tabela ASCII.

A prxima lio mostra os objetos da classe String.

'ProfStef'. 'ProfStef' size. 'abc' asUppercase. 'Hello World' reverse. 'ProfStef' at: 1. "String concatenation uses the comma operator:" 'ProfStef', ' is cool'.

52

Qualquer texto entre aspas simples um objeto da classe String. A mensagem size retorna o tamanho da string, enquanto asUppercase retorna uma string com letras em maiscula e reverse inverte a ordem dos caracteres. Na penltima expresso o primeiro caractere da string retornado, ou seja, a letra P. Por fim, a vrgula usada para concatenar strings. Apenas lembrando: a vrgula, neste caso, uma mensagem enviada pela string ProfStef, passando is cool como argumento.

A prxima lio ensina a trabalhar com objetos da classe Symbol e a comparar objetos. ProfStef' asSymbol. #ProfStef asString. (2 asString) == (2 asString). (2 asString) asSymbol == (2 asString) asSymbol. (Smalltalk at: #ProfStef) next.

Um smbolo identificado pelo caractere # seguido do nome que o identifica. Na primeira expresso, asSymbol retorna #ProfStef como resultado. Na expresso seguinte asString retorna ProfStef. A primeira expresso de comparao usando a mensagem == retorna false, pois no se trata do mesmo objeto. So duas strings 2, porm, so objetos diferentes, pois cada um deles foi o retorno mensagens enviadas em tempos diferentes. J a segunda expresso usando a mensagem == retorna true, mostrando que os smbolos so identificadores nicos, ou seja, apontam sempre para o mesmo objeto na memria. Exemplos:

#banana == #banana. #banana == #maca. banana == banana.

A primeira expresso retorna true, a segunda retorna false e a terceira expresso, usando strings, tambm retorna true, pois as duas strings surgem ao mesmo tempo, sendo portanto o mesmo objeto.

53

possvel fazer referncia a um objeto usando Smalltalk at: e passando o smbolo que identifica o objeto.

A sintaxe da passagem de mensagens (que ativam os mtodos das classes) uma lio fundamental para a compreenso da programao em Smalltalk. A passagem de mensagens unrias compostas apenas pelo objeto e uma nica mensagem.

1 class. false not. Time now. Date today. Float pi.

J as mensagens binrias so compostas por um objeto, uma mensagem e um argumento (que tambm um objeto).

3 * 2. Date today + 3 weeks. false | false. true & true. true & false. 10 @ 100. 10 <= 12. 'ab', 'cd'. Date today < Date yesterday.

Por fim, as mensagens com palavras-chave apresentam um ou mais objetos como argumentos.

4 between: 0 and: 10. 1 max: 3. Color r:1 g:0 b:0.

54

Alm das expresses serem executadas da esquerda para a direita, tambm existem outras regras de precedncia. As mensagens unrias so executadas antes das binrias, que por sua vez, so executadas antes das mensagens com palavraschave.

2 + 3 squared. 2 raisedTo: 3 + 2. -3 abs negated reciprocal. Portanto, na primeira expresso, primeiro executado 3 squared. Na segunda expresso executado primeiro 3 + 2. E na terceira expresso usa-se a regra da esquerda para a direita, j que todas as mensagens so unrias.

Existem algumas outras lies, mas o que j foi apresentado at aqui j suficiente para demonstrar de que forma funciona a orientao a objetos em Smalltalk e instigar o aprofundamento dos estudos desta linguagem. Segundo Deck (2006, p.15 e 27), o estudo de Smalltalk gera melhores programadores e oferece uma perspectiva diferente sobre a experincia com computadores. De acordo com o autor, preciso estar preparado para um choque cultural, uma vez que Smalltalk no difcil, mas diferente.

3.3 CONSIDERAES PARCIAIS

Num primeiro momento, at mesmo programadores acostumados com a orientao a objetos podem estranhar a linguagem Smalltalk. Mas ao passo que os benefcios da linguagem vo se apresentando possvel verificar todo o seu potencial.

Aps certo tempo codificando classes e mtodos, acostuma-se com a sintaxe minimalista da linguagem, que tende na maioria das situaes a se aproximar de uma linguagem natural. Smalltalk estimula o exerccio da criatividade. Basta estar aberto ao aprendizado.

55

O ambiente de desenvolvimento integrado o que mais desperta a ateno dos programadores acostumados com o ciclo codificar/compilar/executar. A substituio dos tradicionais arquivos de cdigo fonte pela imagem da IDE algo que particularmente me agrada muito. O uso dos browsers para navegar pelas classes, mtodos e objetos da linguagem algo que certamente tende a aumentar muito a produtividade dos desenvolvedores.

Alis, Smalltalk ajudou a desenvolver as metodologias geis de desenvolvimento. Atravs do seu ambiente de desenvolvimento integrado o foco do programador mantido na soluo do problema. Outra prtica pioneira da linguagem Smalltalk que j tive a oportunidade de sentir na pele a sua importncia o desenvolvimento orientado a testes. A partir do SUnit foram derivados os demais frameworks de testes desenvolvidos para as mais variadas linguagens de programao.

56

4. SMALLTALK HOJE APLICABILIDADES E PERSPECTIVAS

Neste captulo so levantados alguns fatores que podem ter contribudo para que a linguagem Smalltalk fosse to pouco disseminada fora dos meios acadmicos, buscando detectar quais so as perspectivas com relao s potencialidades de aplicao e ao futuro da linguagem.

Para atingir os objetivos propostos, foi elaborado um questionrio para tentar identificar a percepo de especialistas na linguagem Smalltalk. O questionrio foi apresentado na Internet ao grupo de usurios st-br: Smalltalk Brasil (YAHOO, 20102011, np) a partir do dia 22 de janeiro de 2011 e apresenta os seguintes questionamentos:

Voc utiliza Smalltalk por hobby, estudo ou profissionalmente? Especifique o que voc j fez com Smalltalk e o que se pretende fazer. A instituio onde voc trabalha utiliza Smalltalk? Se sim, de que forma? (desenvolvimento de sistemas da rea administrativa, ensino de programao orientada a objetos, pesquisas cientficas, prototipao ou outra). Especifique o que j foi feito com Smalltalk e o que se pretende fazer.

Em sua opinio, por que a Smalltalk to pouco conhecida fora dos meios
acadmicos? Em sua opinio, existe alguma perspectiva de ampliao da linguagem Smalltalk no desenvolvimento de softwares comerciais? Em sua opinio, levando em considerao a importncia do desenvolvimento da Web na atualidade, possvel que VisualWave, Seaside ou outro framework baseado em Smalltalk venha a se popularizar, de forma semelhante linguagem Ruby e o framework Rails?

O grupo st-br um espao para a troca de informaes entre os smalltalkers do Brasil, mas que conta com a participao de membros da comunidade estrangeira, com destaque para os argentinos, que aparentam apresentar uma experincia mais interessante que a dos brasileiros, do ponto vista comercial. No incio da pesquisa o

57

grupo contava com aproximadamente 50 membros e no dia 15 de maio de 2011 contava com 94 membros.

Infelizmente, apenas dois usurios do grupo responderam ao questionrio, impossibilitando qualquer tipo de tabulao relevante quantitativamente. Porm, as respostas obtidas com o questionrio so indcios que apontam para as provveis causas do problema estudado. Tambm houve a tentativa de contato com os autores do livro Conhecendo o Smalltalk (ABDALA & WANGENHEIM, 2002), mas no houve um retorno. Tanto as respostas ao questionrio elaborado, assim como outras informaes obtidas a partir de outros tpicos do grupo st-br e ainda outros materiais de diversos sites da Internet sero apresentadas no decorrer deste captulo.

Segundo Abdala e Wangenheim (2002, p. 13):


No Brasil, Smalltalk ainda no muito utilizado comercialmente, apesar de alguns bancos j possurem partes de seus sistemas desenvolvidos em Smalltalk. Suas maiores aplicaes residem nas reas de pesquisa e ensino, principalmente em Universidades Federais, como a Universidade Federal de Santa Catarina (UFSC), a Universidade Federal do Rio Grande do Sul (UFRGS) e a Universidade Federal de Pernambuco (UFPE).

A seo Smalltalk Jobs! do site www.clubsmalltalk.org apresenta um banco de dados constantemente atualizado sobre oportunidades de emprego para

desenvolvedores Smalltalk. A partir deste banco de dados, pode-se ter uma idia sobre o uso comercial da linguagem Smalltalk. Ofertas de emprego para smalltalkers so oferecidas na Argentina, Estados Unidos, Reino Unido, Irlanda, Frana, Holanda, Alemanha, Dinamarca, Blgica, Luxemburgo, Sua, ustria, Repblica Tcheca, frica do Sul, ndia, Filipinas e Austrlia.

Esta constatao vai ao encontro do que apresentado por Abdala e Wangenheim (2002, p. 13): Na Europa, Smalltalk extensivamente utilizado comercialmente e praticamente todas as Universidades de Computao a utilizam como ferramenta para ensino do paradigma de programao orientada a objetos.

58

Uma listagem de empresas que j usaram ou usam Smalltalk est disponvel em um interessante site sobre programao Smalltalk (KANATH, 2010, np). Esta listagem reflete a mesma constatao. Apenas duas empresas brasileiras aparecem no meio de centenas de empresas mundo afora. Mais adiante algumas informaes so apresentadas sobre estas empresas.

Conforme visto no captulo 2, Smalltalk acabou influenciando e ainda influencia diversas linguagens de programao posteriores a ela. Tambm vimos que FORTRAN, ALGOL e COBOL foram linguagens pioneiras que introduziram uma srie de conceitos absorvidos pelas linguagens que as seguiram. Porm, elas prprias no conseguiram chegar at os dias de hoje com a mesma importncia que tiveram inicialmente.

Acredita-se que, de certa forma, o mesmo aconteceu com a linguagem Smalltalk, ou seja, a base do paradigma de programao orientado a objetos nasce com Smalltalk, mas a linguagem em si no alcana uma projeo significativa. Por exemplo: embora COBOL ainda tenha, hoje em dia, muitos sistemas legados e mesmo tendo incorporado mais recentemente os conceitos da programao orientada a objetos, j no tem mais a mesma popularidade de antes. De acordo com o ranking de popularidade de linguagens de programao da TIOBE Software (2011a, np) o COBOL ocupa apenas a 37 posio.

O ranking da TIOBE construdo com base nos mecanismos de busca e fruns de discusso na Internet e serve como um termmetro das linguagens para desenvolvedores, pesquisadores e estudantes de programao. Segundo Fabio Akita (2011, np), este tipo de estatstica no tem um valor qualitativo expressivo, pois o mtodo utilizado na construo deste ranking no exclui textos repetidos ou mesmo textos que no so significativos do ponto de vista da popularidade da linguagem. Ainda assim, o TIOBE costuma ser referenciado como uma fonte vlida no mapeamento das citaes sobre linguagens de programao na Internet.

Em janeiro de 2011, as cinco primeiras linguagens do ranking eram: Java, C, C++, PHP e Python. possvel observar na Figura 6, logo a seguir, as 20 linguagens de programao mais populares em janeiro de 2011.

59

Figura 10 - Ranking de popularidade de linguagens de programao Fonte: TIOBE (2011a, np)

O mesmo ranking tambm aponta que 55.8% das linguagens utilizadas atualmente so orientadas a objetos, conforme mostra a Figura 7.

Figura 11 - Porcentagem de linguagens por categoria Fonte: TIOBE (2011a, np)

60

Em janeiro de 2011, Smalltalk somente aparecia abaixo das 50 primeiras linguagens, demonstrando uma popularidade muito baixa. Mas em maro de 2011 a linguagem j aparece em 47 (TIOBE, 2011b, np). De fato, se levarmos em considerao uma simples pesquisa no Google, pode-se chegar a alguns nmeros bastante divergentes. Uma pesquisa por C++ retorna 44.500.000 resultados. J uma pesquisa por Smalltalk retorna 7.620.000 resultados. E uma pesquisa por Java retorna 211.000.000 resultados. Cobol apresenta apenas 7.030.000 resultados.

Infelizmente, atravs deste ranking, no possvel saber quais linguagens so mais usadas do ponto de vista comercial, uma vez que algumas das linguagens ali apresentadas so mais usadas para fins acadmicos. Levando isto em considerao importante observar que as duas primeiras linguagens do ranking (Java e C), ainda que tenham uso comercial, so muito utilizadas didaticamente na educao formal de programadores e analistas.

Conforme destaca Sebesta (2003, p.18), tambm preciso atentarmos que:


Embora normalmente seja possvel determinar o motivo pelo qual uma linguagem particular de programao tornou-se popular, nem sempre claro, pelo menos em retrospectiva, que as linguagens mais populares so as melhores disponveis.

Em determinados momentos, alguns fatores externos linguagem propriamente dita acabam por torn-la mais conhecida e despertar a curiosidade de alguns desenvolvedores. o caso da escalada exponencial da linguagem Objective-C no ranking apresentado, reflexo do sucesso de produtos como o iPhone e o iPad da empresa Apple, que utiliza o Objective-C nestas plataformas.

Com relao linguagem Smalltalk no ter uma projeo maior fora do mundo acadmico, pode-se observar que, em parte, este um fato mais acentuado no Brasil. Porm, mesmo no exterior possvel perceber que a linguagem Smalltalk no tem o mesmo marketing que as linguagens exploradas pela empresas Microsoft, IBM e Oracle (antiga Sun), assim como o nmero de desenvolvedores treinados

61

nestas linguagens. Esta a percepo de um membro do grupo st-br que teve 7 anos de experincia com Smalltalk, trabalhando para o exrcito argentino e para uma empresa que desenvolve sistemas bancrios, mas que atualmente no trabalha mais com a linguagem devido escassez de vagas e falta de desenvolvimento profissional. Abdala e Wangenheim afirmam que [...] as reas de aplicao de Smalltalk so extremamente extensas: quanto mais complexo o problema a ser resolvido, maiores as vantagens de se utilizar Smalltalk para o desenvolvimento de uma soluo (ABDALA & WANGENHEIM, 2002, p. 13).

Um dos projetos mais interessantes envolvendo Smalltalk o projeto OLPC (One Laptop per Child). Tal projeto tem por objetivo desenvolver e disseminar um novo fazer pedaggico usando laptops eficientes, porm de baixo custo, dotados de softwares educativos. O hardware utilizado no projeto atualmente o laptop XO (OLPC, 2010, np). Uma verso do Squeak chamada Squeak Etoys utilizada como ferramenta de construo do conhecimento (SQUEAKLNDIA, 2010, np).

Dentro de um contexto pedaggico (ESCOLABR, 2010, np), pode-se dizer que o uso do Squeak:
[...] proporciona uma mudana na forma de dar aula. [...] parte da evoluo no mundo da informtica tem seguido um caminho equivocado, que tem convertido os usurios em clientes e [Squeak] pretende devolver o controle do computador e de seu processo de aprendizagem. [...] no um programa, um ambiente especial onde se executam programas com uma inteno fundamentalmente educativa; [...] um mundo para criar mundos. [...] pretende, no que os alunos aprendam a programar, mas que os alunos programem para aprender.

O sucesso desse projeto, que atualmente j conta com mais de dois milhes de laptops distribudos pelo mundo, com certeza tem contribudo para a divulgao da linguagem Smalltalk, atravs do Squeak (OLPC, 2010, np). No Brasil ainda so apenas 2600 laptops (OLPC BRAZIL, 2010, np). Porm, iniciativas educativas neste sentido tendem a se expandir e podem de fato ajudar a desenvolver experincias to inovadoras quanto a prpria linguagem Smalltalk.

62

Existem algumas iniciativas interessantes usando Smalltalk como sistema operacional de algumas mquinas. Inclusive chegou-se a cogitar que o Squeak seria o sistema operacional do XO. Em SQUEAKNOS (2010, np) possvel obter informaes sobre o projeto do sistema SqueakNOS.

Como exemplos de aplicaes comerciais desenvolvidas com a linguagem Smalltalk, Abdala e Wangenheim (2002, p. 13) citam:
[...] a Deutsche Bank, que em meados da dcada de 90 passou todo o seu sistema de gerncia de mercado financeiro para Smalltalk, e uma das maiores cadeias de supermercados da Europa, que na mesma poca reestruturou completamente seu setor de informtica, passando todo o sistema para Smalltalk.

Aldo von Wangenheim, um dos autores da obra referenciada acima, fez parte de um grupo de pesquisas da Universidade de Kaiserslautern e, em 1995, participou dos trabalhos de reestruturao da referida rede de supermercados, utilizando o VisualAge for Smalltalk como ambiente de desenvolvimento. A facilidade de aprendizado da linguagem Smalltalk foi importante pois os desenvolvedores ainda no tinham noo da orientao a objetos e precisaram de treinamento. O programa deste treinamento foi adaptado e deu origem ao curso de Smalltalk, como extenso universitria, do Departamento de Informtica da Universidade Federal de Santa Catarina. (ABDALA & WANGENHEIM, 2002, p. 13-14)

Outro projeto importante envolvendo os autores Abdala e Wangenheim o Cyclops, que usa linguagem Smalltalk no desenvolvimento de ferramentas de diagnstico por imagem, na rea da tele medicina. (MAIA, 2004, np)

Segundo Abdala e Wangenheim (2002, p.1), dentro do contexto do desenvolvimento de solues que necessitem essencialmente da orientao a objetos e do contexto do ensino deste paradigma:
[...] Smalltalk ainda a nica linguagem de programao comercialmente aplicada realmente orientada a objetos, pois a nica que de fato implementa de forma consistente todos os aspectos da teoria da orientao a objetos. [...] e, de longe, a melhor linguagem para o primeiro contato do aluno com a arte de programar, pela forma intuitiva com que trata a modelagem do mundo real sob a forma de programas de computador.

63

Uma das empresas que utiliza Smalltalk no Brasil a Objective Solutions, desenvolvendo sistemas de CRM & Billing para empresas de telecomunicaes desde 1995 nesta linguagem. Segundo descrio da prpria empresa (KANATH, 2010, np), o seu software de faturamenteo considerado um dos melhores no mundo. E seu CRM utilizado por mais de 450 pessoas simultaneamente. A Objective Solutions atual em So Paulo-SP, Curitiba-PR e Maring-PR

(OBJECTIVE, 2010, np)

Outra empresa que tambm faz uso de Smalltalk a Flowing, de Foz do Iguau-PR. Trata-se uma empresa nova que vem a pouco tempo (desde 2010) apostando no Pharo e no framework web Seaside (KANATH, 2010, np). O lema da Flowing Aplicativos web onde o design e a experincia importam. E o principal produto da empresa o airflowing (AIRFLOWING, 2010, np), um sistema para obter coisas feitas e pagar. Recentemente, a Flowing teve destaque em uma revista eletrnica como a primeira startup de Foz do Iguau-PR. (PARQUE, 2011, np)

Algumas das mais importantes aplicaes Smalltalk, desenvolvidas no exterior, podem ser conhecidas atravs do site Smalltalk dot org (2011, np). Uma dessas aplicaes o Croquet. Com cdigo fonte aberto, o Croquet um ambiente virtual que roda sobre uma arquitetura de rede para colaborao e compartilhamenteo de recursos entre um grande nmero de usurios. Essa colaborao feita no contexto de um sistema distribudo de informao em larga escala. O software e a arquitetura constituem um framework para a entrega de interface escalveis, persistentes e extensveis aos recursos da rede.

O Dabble DB, um servio de banco de dados pessoais online, tambm utiliza o framework web Seaside. Porm, a empresa Smallthought Systems, que

administrava o servio, foi adquirida pelo Twitter em junho de 2010 e agora no possvel abrir novas contas do servio. DABBLE (2010, np)

Segundo Abdala & Wangenheim (2002, p. 1-2):


[...] deixaram de existir todos os impedimentos que havia para que Smalltalk se tornasse, 20 anos atrs, uma linguagem de programao amplamente utilizada na indstria e em softwares comerciais. Hoje em dia, um

64

computador com muita memria, um processador razovel e um monitor grande e com boa resoluo tornaram-se comuns, e no h mais impedimentos tecnolgicos ao desenvolvimento de software aplicativo comercial em Smalltalk. Isto tem se traduzido em um interesse crescente, principalmente por parte da indstria e de bancos, no desenvolvimento de softwares em Smalltalk. Este interesse vem crescendo em ritmo constante, desde meados da dcada de 90, devido facilidade e rapidez de modelagem de processos complexos oferecida por Smalltalk e a sua fcil adaptao a programas com requisitos em constante mutao.

Portanto, hoje em dia, o hardware no um fator limitador para o uso da linguagem Smalltalk, mas sim, um facilitador. A Internet, hoje em dia, tambm uma forte aliada das linguagens menos conhecidas, como Smalltalk. No caso especfico do Brasil, importante observar que at meados da dcada de 1990 a Internet no tinha o alcance que tem hoje.

Segundo um membro do st-br, hoje em dia difcil de se montar equipes de desenvolvimento usando Smalltalk nas empresas porque a maioria dos sistemas em uso foram feitos usando outras tecnologias e no existe muita autonomia por parte dos desenvolvedores (os principais conhecedores do valor de uma linguagem) para decidir com qual tecnologia trabalhar. Segundo outro membro do st-br, a prpria comunidade smalltalker precisa divulgar mais a linguagem e as vantagens de se utilizar a mesma.

O caso da startup Flowing apresentado anteriormente demonstra que Smalltalk de fato uma alternativa para o desenvolvimento web. Partindo desta premissa, foram efetuados testes como o framework Seaside, hospedando uma imagem no servio Seaside-Hosting (SEASIDE-HOSTING, 2010, np). A aplicao pode ser acessada no endereo <thiago.seasidehosting.st>.

De um modo geral, o desempenho no deixou muito a desejar em relao a outras linguagens, mesmo sem usar a nova mquina virtual (Cog JIT VM) disponibilizada em junho de 2010, com capacidade para executar aplicaes de duas a dez vez mais rpido. SQUEAK (2010, np). Portanto, o desempenho das aplicaes em Smalltalk tende a atingir nveis muito interessantes. Por ser stateful (manter o estado da navegao), o desenvolvimento web com Smalltalk permite um novo olhar sobre os sistemas na Internet. (MARTINS, 2008, np)

65

Os desenvolvedores do st-br que responderam ao questionrio, no crem num sucesso to grande para o Seaside como aconteceu com o Ruby on Rails. Em interessante artigo no portal VidaGeek.net (LUIZ, 2010, np) so apresentados os pontos fortes e fracos de Seaside e Rails. O autor fala da subverso do Seaside aos padres da web ao adotar o stateful e aponta as principais crticas ao dois framework's:
Rails: tem muita complicao no sistema de arquivos; para qu tantos arquivos e diretrios? Para que tantos arquivos de configurao? Por que a dependncia do banco de dados, por padro? Tudo bem, o escopo de Rails bem pequeno, mas talvez as convenes estejam um pouco complicadas demais. Seaside: faltam pacotes para acrescentar algumas tarefas comuns ao Seaside. Faltam, tambm, arcabouos de teste mais atualizados e com melhor documentao (no h um Cucumber e a documentao do SSpec). Por fim, o Smalltalk praticamente impe uma IDE para voc e impede o uso dos recursos utilizados em outras linguagens (SVN, pastebin, etc.)

O artigo de Ronaldo M. Ferraz (2010, np) aponta que:


Smalltalk uma linguagem que est retornando com fora total depois de mais de 20 anos vivendo s margens de outras linguagens tecnicamente no to interessantes e isso muito bom. Seaside possivelmente o framework Web mais avanado em existncia atualmente e muitas das idias que vo influenciar o mercado nos prximos anos esto sendo testadas na prtica no projetosem contar tambm os inmeros projetos associados que esto avanando outras reas. A comunidade Smalltalk uma das poucas que est produzindo contedo real que implicar em mudanas de paradigmas e avano na parte essencial da computao (dentro da diviso feita por Fred Brooks).

Em seu blog, Ronaldo M. Ferraz (2010, np) publicou uma entrevista com Randal L. Schwartz, um nome importante na comunidade de software livre, Perl e tambm Smalltalk. Ele esteve no FISL (Frum Internacional de Software Livre) de 2008 e parecia bastante otimista quanto ao futuro da linguagem Smalltalk.

Transcrevo a seguir alguns trechos desta entrevista.


[...] Quais so as vantagens de Smalltalk sobre outras linguagens tradicionais como Perl, Ruby ou Python, por exemplo?

66

Smalltalk tem uma sintaxe muito simples: eu posso ensinar a sintaxe completa a algum em cerca de 20 minutos, e, de fato, a incluo em minhas palestras introduzindo as pessoas ao Seaside. As principais implementaes Smalltalk (com exceo de GNU Smalltalk) tambm possuem IDEs maduros permitindo a fcil explorao do cdigo, de modo que aprender as bibliotecas somente uma questo de olhar a implementao e uso das mesmas. E isso tambm um bnus: ns temos duas implementaes comerciais (Cincom e GemStone/S) e duas abertas (Squeak e GNU Smalltalk), todas suportando Seaside. Isso permite que gerentes mais preocupados, que podem hesitar ao selecionar uma linguagem estritamente suportada por voluntrios, escolherem entre dois provedores comerciais para suporte. Opes so sempre boas! Voc acha que Smalltalk finalmente vai alcanar status mainstream, isto , ganhar aceitao do mercado em geral? Bem, Smalltalk tinha status mainstream no meio dos anos 90, logo antes de Java entrar na histria, pelo menos do que tange a firmas grandes de Wall Street e outras instituies que desejavam desenvolvimento rpido de GUIs para ficar frente da competio. Mas sim, eu acredito que Smalltalk est posicionada para entrar o mercado novamente como um grande player. Sua palestra tinha o ttulo, Seaside: Seu Prximo Framework Web. O que h de to interessante sobre o Seaside? Eu gosto da forma como Seaside consegue abstrair tanto o fluxo de controle (ao longo de um eixo) e a representao (ao longo do outro eixo) com relativa facilidade. Seaside parece colocar as coisas certas relacionadas perto uma das outras. Eu tambm gosto do depure uma pgina com erro dentro da prpria pgina: quando algum erro aconteceu, eu posso explorar a situao dentro do depurador normalmente, consertar o que est quebrado, limpar a baguna, e continuar a execuo da pgina como se nada houvesse acontecido. Da mesma forma, a persistncia tradicional em Rails feita atravs do Active Record, que requer que objetos passem por um mapeador objeto-relacional para chegar em SQL. Seaside pode fazer a mesma coisa (via GLORP), mas possui solues melhores pulando inteiramente o mapeamento, e usando coisas como Magma (OODBMS), que aberto, ou algo como GemStone/S Virtual Machine, que comercial. Quando voc tira a camada ORM, voc ganha muita velocidade e um ambiente de programao bem mais confortvel. [...] Voc acha que o mercado est pronto para o Seaside? Sim. O Rails reabriu as discusses sobre o que fazer em um mundo aps o Java, voltando para linguagens com late-binding como Perl, Python e Smalltalk. E Seaside um framework maduro, ainda mais velho do que Rails. Somente no to conhecido. Eu espero mudar isso.

Importante observar a forma como que ele cita a linguagem Java: antes de Java entrar na histria e em um mundo aps o Java, demonstrando que o papel desempenhado pela Java no mercado foi determinando para outras linguagens, como Smalltalk. Porm, antes, ele cita como vantagens principais da Smalltalk, a sintaxe e a maturidade de sua IDE, dois fatores apresentados no captulo 3 desta pesquisa.

67

No artigo de Mrcio Bueno (2010, np) possvel ler um comentrio que aponta o surgimento da linguagem Java com uma sintaxe parecida com C e C++, como um empecilho para o crescimento do Smalltalk. Outra observao importante deste comentrio que quando Java apareceu j era gratuita, enquanto Smalltalk ainda no tinha as implementaes gratuitas que tem hoje.

Uma das forma da linguagem Smalltalk conquistar maior penetrao no mercado de aplicaes comerciais atravs do desenvolvimento de prottipos, visto que nesta rea, recomenda-se o uso de uma linguagem de programao diferente da linguagem utilizada no design da aplicao que ir para a produo.

Outra possibilidade para o crescimento da linguagem seria o lanamento de alguma implementao suportada por uma das grandes corporaes de softwares da atualidade. A prpria Oracle (antiga Sun) tem o seu Smalltalk, chamado Self. Mas na pgina do projeto existe um alerta indicando que as pesquisas com a linguagem esto desativadas. Portanto, no existe perspectiva da Oracle lanar algo neste sentido, pelo menos por enquanto. (SELF, 2011, np) De acordo com Ferraz (2007, np): Sem dvida, todas outras linguagens e frameworks ganhariam muito com uma ressurgncia do Smalltalk.

4.1 CONSIDERAES PARCIAIS

Desde o incio deste trabalho venho estudando Smalltalk e at o momento meus testes tm demonstrado que a linguagem possui grande capacidade para o desenvolvimento de softwares comerciais, ainda que muitos ainda olhem para ela como uma linguagem acadmica. claro que Smalltalk a melhor opo para o ensino da orientao a objetos. Porm, penso que o uso da linguagem no deve se restringir apenas aos ambientes de ensino de programao.

68

Na minha opinio, com base na experincia que tive com a imagem de teste publicada no endereo <thiago.seasidehosting.st>, o framework Seaside um dos possveis subprodutos da linguagem Smalltalk que podem atingir certa penetrao no mercado de aplicaes Web. A facilidade com que possvel manipular os objetos mesmo aps o deployment do projeto um dos pontos fortes deste framework.

69

CONCLUSO

Conforme visto durante este trabalho, a orientao a objetos, com todos os seus elementos constitutivos (classes, mtodos, mensagens, herana, polimorfismo, etc.) o paradigma mais utilizado na atualidade para o desenvolvimento de software. Paradigma este, edificado h dcadas pela linguagem Smalltalk. Uma linguagem que representa a mais pura forma de se implementar a orientao a objetos, sem a interferncia de outros paradigmas. Programar em Smalltalk manter o foco nos objetos a todo instante.

O principal problema da pesquisa foi compreender por que a linguagem Smalltalk no alcanou uma considervel projeo no mercado de desenvolvimento de software. Diversos fatores contriburam para que a linguagem Smalltalk no chegasse at os dias de hoje entre as linguagens de programao mais populares do ponto de vista comercial. Podemos considerar as limitaes de hardware como a principal causa do anonimato da Smalltalk, devido os requisitos peculiares do ambiente de desenvolvimento integrado da linguagem. Requisitos que plenamente alcanveis. hoje so

Dentre outros fatores apresentados nas fontes consultadas podemos citar: o carter acentuado do problema estudado, especificamente no Brasil; o fato de novas tecnologias precisarem de um tempo longo de amadurecimento e aceitao; mais recentemente (incio da dcada de 1990), a falta de implementaes gratuitas da Smalltalk quando do surgimento da linguagem Java; questes mais diretamente ligadas ao meio dos negcios, como o marketing.

Um fator que penso tambm ter sido um empecilho para a proliferao do conhecimento da linguagem foi a falta de um meio de comunicao como a Internet durante o seu desenvolvimento inicial e posterior, principalmente no Brasil.

Durante este trabalho, com base em uma atenta pesquisa bibliogrfica, procuramos introduzir o leitor dentro do universo conceitual do paradigma da programao

70

orientado a objetos. Definimos e destacamos o paradigma da orientao a objetos dos demais paradigmas: imperativo, funcional e lgico. Trabalhamos os conceitos de classe, herana e polimorfismo, destacando de que forma os atributos e os mtodos se encaixam dentro destes conceitos.

Traamos em linhas gerais um pouco da histria primitiva das linguagens de programao de alto nvel, onde inicialmente delineou-se o paradigma imperativo para depois chegarmos na orientao a objetos, passando pela sua proto-histria com a linguagem Simula. Apontamos o papel da linguagem Smalltalk no desenvolvimento da programao orientada a objetos. E sua importncia como uma linguagem de grande legado para linguagens recentes.

Pesquisamos e apresentamos os fundamentos da linguagem Smalltalk e sua mais recente implementao, o Pharo. E refletimos sobre a questo da popularidade das linguagens de programao, elencando algumas aplicaes desenvolvidas com a linguagem Smalltalk e procurando traar perspectivas para o futuro da linguagem e de sua comunidade de desenvolvedores.

Atravs do questionrio apresentado no captulo 4, procuramos captar a opinio de especialistas da rea. Infelizmente, no conseguimos um retorno quantitativamente satisfatrio, mas que, ainda assim, nos apresentou alguns indcios significativos.

Espero ter contribudo para a divulgao da linguagem especificamente e que este trabalho sirva de subsdio para outros. Pessoalmente, finalizo esta pesquisa com a certeza de que adquiri muito conhecimento e com a vontade de continuar indo alm. Comecei com uma curiosidade desinteressada e agora, termino esta pesquisa apaixonado pela linguagem Smalltalk, com um outro olhar sobre a orientao a objetos e com vontade de me aprofundar muito mais na arte de programar.

Penso que muito ainda precisa ser pesquisado e principalmente resgatado sobre a linguagem Smalltalk. Um trabalho em portugus falando especificamente dos meandros histricos da linguagem seria de grande valia e esclarecimento para os desenvolvedores de hoje em dia.

71

REFERNCIAS

ABDALA, Daniel Duarte; WANGENHEIM, Aldo von. Conhecendo o Smalltalk. Santa Catarina: Visual Books, 2002. AIRFLOWING (2010). Airflowing. Disponvel em:<http://airflowing.com>. Acesso em: 11 dez. 2010. AKITA, Fabio (13 abr. 2008). Off Topic: Nunca confie no TIOBE. Disponvel em: <http://akitaonrails.com/2008/04/13/off-topic-nunca-confie-no-tiobe>. Acesso em: 12 jan. 2011. ALPERT, Sherman R.; BROWN, Kyle; WOOLF, Bobby. The Design Patterns Smalltalk Companion. Reading, Mass: Addison-Wesley, 1998. BARANAUSKAS, Maria Ceclia Calani (2011). Procedimento, funo, objeto ou lgica? Linguagens de programao vistas pelos seus paradigmas. Disponvel em: <http://im.ufba.br/pub/MATA56/Exercicios/%28Leitura_e_Resenha%29_ArtigoDiscus saoParadigmas.pdf>. Acesso em: 7 maio 2011. BECK, Kent. Smalltalk Best Practice Patterns. Upper Saddle River: Prentice, 1997. BROOKSHEAR, J. Glenn. Cincia da Computao: uma viso abrangente. Porto Alegre: Bookman, 2005. 7 ed. Traduo: Cheng Mei Lee. BUENO, Marcio (2010). Smalltalk uma das primeiras linguagens orientadas a objetos. Disponvel em: <http://marciobueno.com/linguagensprogramacao/smalltalk-primeiras-linguagens-orientadas-objetos/>. Acesso em: 18 dez. 2010. CINCOM (2010). CINCOM Smalltalk. Disponvel em: <http://www.cincomsmalltalk.com/main/>. Acesso em: 11 dez. 2010. CLUB SMALLTALK (2010). Smalltalk Jobs!. Disponvel em: <http://www.clubsmalltalk.org/web/index.php?option=com_newsfeeds&view=newsfee d&id=22&Itemid=75>. Acesso em: 12 dez. 2010. DABBLE DB (2010). Dabble DB. Disponvel em: <http://dabbledb.com/>. Acesso em: 11 dez. 2010. DECK, Diego Gmez. Programando com Smalltalk. Madrid: Edit Lin Editorial S.L., 2006. ESCOLABR (2010). Squeak. Disponvel em: <http://www.escolabr.com/virtual/wiki/index.php?title=A_Ferramenta_que_trar%C3% A1_a_revolu%C3%A7%C3%A3o_educativa%3F>. Acesso em: 18 dez. 2010.

72

FERRAZ, Ronaldo Melo (20 abr. 2008). Seaside e Smalltalk avanando no Brasil. Disponvel em: <http://logbr.reflectivesurface.com/2008/04/20/seaside-e-smalltalkavancando-no-brasil/>. Acesso em: 4 dez. 2010. FERRAZ, Ronaldo Melo (30 abr. 2008). Conversa com Randal L. Schwartz. Disponvel em: <http://logbr.reflectivesurface.com/2008/04/30/conversa-com-randal-lschwartz/>. Acesso em: 4 dez. 2010. FERRAZ, Ronaldo Melo (6 fev. 2007). Smalltalk: variaes sobre um mesmo tema. Disponvel em: <http://logbr.reflectivesurface.com/2007/02/06/versoes-desmalltalk/>. Acesso em: 4 dez. 2010. FIGUEIREDO, Cristiane S. G. & TEDESQUE, Fernanda H. Smalltalk. Disponvel em: <http://www4.fct.unesp.br/rogerio/LP/Smalltalk.pdf>. Acesso em: 4 dez. 2010 FLOWING (2010). Flowing. Disponvel em: <http://flowingconcept.com>. Acesso em: 11 dez. 2010. GNU SMALLTALK (2010). GNU Smalltalk. Disponvel em:<http://smalltalk.gnu.org/>. Acesso em: 11 dez. 2010. INFOBLOGS (2010). Smalltalk: o Big-Bang das linguagens de programao. Disponvel em: <http://infoblogs.com.br/view.action?contentId=13703&Smalltalk-oBigBang-das-linguagens-de-programacao.html>. Acesso em: 4 dez. 2010. JACOBSON, Ivar. Object-Oriented Software Engineering: a use case driven approach. New York: ACM Press, 1992. JAVAFX (2011). JavaFx. Disponvel em: <http://javafx.com/>. Acesso em: 4 fev. 2011. JONATHAN, Miguel. Introduo programao orientada a objetos com Smalltalk. Rio de Janeiro: UFRJ, 1994. KANATH, Monty (2010). Companies that use Smalltalk. Disponvel em: <http://www.goodstart.com/who-uses-smalltalk.ssp>. Acesso em: 12 dez. 2010. KAY, Alan C. The early history of Smalltalk. New York: Association for Computing Machinery, 1993 LUIZ (2010). FISL 10: Seaside versus Rails. Disponvel em: <http://vidageek.net/2009/06/27/fisl-10-seaside-versus-rails/>. Acesso em: 4 dez 2010. MAIA, Rafael Simon. Cyclops Series Editor: uma ferramenta de visualizao de imagens e auxlio ao laudo e ao diagnstico (Trabalho de Concluso de Curso). Florianpolis: UFSC, 2004. Disponvel em: <http://projetos.inf.ufsc.br/arquivos_projetos/projeto_179/TCC%20-%20Final.pdf>. Acesso em: 4 dez. 2010.

73

MELO, Ana Cristina Vieira de; SILVA, Flvio Soares Corra da. Princpios de linguagens de programao. So Paulo: Blucher, 2010. MARTINS, Daniel (30 set. 2008). Seaside: um framework web de verdade. Disponvel em: <http://weblog.destaquenet.com/2008/09/30/seaside-um-frameworkweb-de-verdade/>. Acesso em: 5 dez. 2010. OREILLY Media Inc. (2004). History of Programming Languages. Disponvel em: <http://oreilly.com/news/graphics/prog_lang_poster.pdf>. Acesso em: 23 dez. 2010. OBJECTIVE Solutions (2010). Objective Solutions. Disponvel em: <http://www.objectivesms.com.br/default.asp>. Acesso em: 11 dez 2010. OLPC (2010). One laptop per child. Disponvel em: <http://laptop.org/en/children/index.shtml>. Acesso em: 18 dez. 2010. OLPC BRAZIL (2010). OLCP Brazil. Disponvel em: <http://wiki.laptop.org/go/OLPC_Brazil>. Acesso em: 18 dez. 2010. PARQUE Notcias Eletrnico (118 ed., 2011). Empreendedorismo: Flowing a primeira empresa startup de Foz. Disponvel em: <http://jornal.pti.org.br/edicao_118/destaque02_pt.html>. Acesso em: 4 fev. 2011. PHARO (2010). Pharo Open Source Smalltalk. Disponvel em: <http://pharoproject.org/home>. Acesso em: 11 dez. 2010. SCHRLI, Nathanael; BLACK, Andrew P.; DUCASSE, Stphane. Object-oriented Encapsulation for Dynamically Typed Languages. Disponvel em: <http://scg.unibe.ch/archive/papers/Scha04bOOEncapsulation.pdf>. Acesso em: 5 fev. 2011. SEASIDE-HOSTING (2010). Seaside-Hosting. Disponvel em: <http://www.seasidehosting.st/>. Acesso em: 4 de dez. 2010. SEBESTA, Robert W. Conceitos de linguagens de programao. Porto Alegre: Bookman, 2003. SELF (2011). Self. Disponvel em: <http://labs.oracle.com/self/>. Acesso em: 5 fev. 2011. SMALLTALK dot org (2010). Versions of Smalltalk. Disponvel em: <http://www.smalltalk.org/versions>. Acesso em: 11 dez. 2010. SMALLTALK dot org (2011). Applications Built Using Smalltalk. Disponvel em: <http://www.smalltalk.org/applications>. Acesso em: 15 jan. 2011. SQUEAK (2010). Squeak Smalltalk. Disponvel em: <http://www.squeak.org/>. Acesso em: 11 dez. 2010.

74

SQUEAKLNDIA (2010). Squeaklandia. Disponvel em: http://www.squeaklndia.pt/index.php/In%C3%ADcio. Acesso em: 18 dez. 2010. SQUEAKNOS (2010). SqueakNOS. Disponvel em: <http://wiki.squeak.org/squeak/1762>. Acesso em: 4 dez. 2010. TERRA (3 fev. 2010). Conhea a histria de quase meio sculo dos tablets. Disponvel em: <http://tecnologia.terra.com.br/noticias/0,,OI4243378-EI15607,00Conheca+a+historia+de+quase+meio+seculo+dos+tablets.html>. Acesso em: 12 dez. 2010. TIOBE Software (2011a). TIOBE Programming Community Index for January 2011. Disponvel em: <http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html>. Acesso em: 12 jan. 2011. TIOBE Software (2011b). TIOBE Programming Community Index for January 2011. Disponvel em: <http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html>. Acesso em: 27 mar. 2011. VOEGELE, Jason. Programming Language Comparison. Disponvel em: <http://www.jvoegele.com/software/langcomp.html>. Acesso em: 28 mar. 2011. YAHOO (2010-2011). st-br: Smalltalk Brasil. Disponvel em: <http://tech.groups.yahoo.com/group/st-br/>. ltimo acesso em: 6 fev. 2011.

Potrebbero piacerti anche