OO e Smalltalk

Embed Size (px)

Citation preview

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 FIGURASFigura 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 TABELASTabela 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

9

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, 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