Vous êtes sur la page 1sur 26

SMALLTALK

Denis, Fernando e Rodrigo

INTRODUO
Smalltalk uma verdadeira linguagem de programao orientada a objetos com um rico ambiente de desenvolvimento baseando em janelas. Smalltalk no apenas um boa lingagem de computadores OO (orientada a objeto), seu ambiente de desenvolvimento tambm merece crdito e foi copiado diversas vezes, do Apple OS ao MS-Windows. Muitos conceitos como browsers so vistos em vrias ferramentas de desenvolvimentos atuais. O ambiente de desenvolvimento integrado do Smalltalk facilita muito a tarefa de programar. Os programadores definem classes de objetos em suas aplicaes para imitarem o mundo real. Estas classes de objeto so organizadas hierarquicamente, de modo que seja possvel fazer novos objetos com caractersticas de outros objetos, com poucas mudanas. Smalltalk relativamente fcil de aprender comparado a linguagens como C++ e ADA. O cdigo-fonte Smalltalk extremamente fcil de ler, o que o torna a linguagem de programao ideal para iniciantes

HISTRICO
Smalltalk foi desenvolvido pela equipe do Grupo de Pesquisas do Centro de Pesquisas da Xerox em Palo Alto, no incio dos anos 70. As principais idias do Smalltalk so baseadas no Simula, LISP e SketchPad. Dan Ingalls escreveu as primeiras janelas sobrepostas e menus pop-up opacos (muito comuns hoje nos programas mais populares, como o Microsoft Windows). Uma Segunda verso do Smalltalk (Smalltalk/V) foi desenvolvida pela Digitalk em Los Angeles, Califrnia, com fundadores da Ollivetti. Antes de ser comprada pela ParcPlace Systems Inc., a Digitalk era a lder de vendas deste produto. A IBM desenvolveu o VisualAge Smalltalk em colaborao com a Object Technology International Inc. Atualmente, ObjectShare (antiga ParcPlaceDigitalk) e a IBM continuam sendo os principais distribuidores do ambiente de desenvolvimento Smalltalk.

PARADIGMAS
Todos os elementos do sistema so objetos. Todo objeto uma instncia de alguma classe. Cada objeto, alm de possuir uma estrutura de dados particular, ativo, no sentido de que reage a mensagens que lhe so enviadas, retornando um valor, que tambm um objeto. Para cada classe, suas instncias "compreendem" apenas as mensagens que fazem parte do seu protocolo de comunicao, rejeitando as demais. A cada mensagem corresponde um mtodo especfico, que fica localizado na classe. Qualquer componente de um objeto s pode ser acessado, ou modificado, por meio de mensagens especialmente implementadas para tal fim.

Objetos podem ter estruturas bastante gerais, e podem ser construdos a partir de outros objetos previamente implementados. Este mecanismo permite definir, construir e manipular estruturas de grande complexidade. Toda a computao em Smalltak obedece ao mesmo paradigma de classes, objetos e mensagens, formando um ambiente uniforme e integrado. Essa caracterstica torna possvel que uma classe, uma vez definida, possa ser utilizada em diversas aplicaes, estimulando a criao de classes de utilidade ampla. Smalltalk uma linguagem extensvel. Ela permite criar novas classes, e para cada classe existente, permite adicionar ou retirar mtodos. Isso significa que o sistema pode ser ampliado e modificado, mantendo sempre sua uniformidade.

SINTAXE
Nmeros
3 30.498 -28 8r457 (octal) 2r0100010110 (binrio) 16rAF3D0 (hexa) 1.78e-3 (notao cientfica) 1/3 ( uma frao que guardada como tal, sem perder preciso)

Caracteres
$a $A $8

Strings
Eu adoro o Smalltalk

Smbolos
#eu um smbolo um identificador nico; eles se parecem com strings mas cada smbolo nico.

Arrays
#(1 2 3) #(('um' 1) ('dois' 2)) #[ 2 03 230 95 3 0] (esse um ByteArray, um tipo especfico de Array)

VARIVEIS
Relativamente ao seu alcance, em SmallTalk, as variveis podem ser:
Privada: esto acessveis apenas a um nico objeto Temporrias: usadas em mtodos ou blocos, so desalocadas aps o termino do mesmo.
Ex: | var1 var2|

Instncia: guardam informaes relativas a uma instncia. Partilhada: so acessveis a vrios objetos.

Pseudo-Variveis
um indentificador que no pode aparecer no lado esquerdo de uma atribuio. Exemplo disso so os objetos nicos, as variveis especiais:
true false nil

e os argumentos dos mtodos:


self super thisContent

SEMNTICA DA ATRIBUIO
O valor por omisso para qualquer objeto o objeto nil. Para atribuir um novo valor a uma varivel utiliza-se o operador := . Na memria os objetos so representados por um identificador de objetos.
Ex: |p| p := Ponto x:3.2 y:1.0

Onde cada --> representa uma ligo entre um nome e um valor e cada retngulo representa um objeto em memria.

A expresso obj2 := obj1 significa liga o obj2 ao objeto referenciado obj1 e no copia o contedo do obj1 para o espao de memria reservado para obj2. Assim, obj2 e obj1 referem ao mesmo objeto.

EXPRESSES E COMANDOS
Mensagens e Precendncias
Uma mensagem um pedido para que um objeto execute um de seus mtodos.
Ex: 5 + dy

5 o objeto receptor da mensagem + dy. Neste caso, + o seletor da mensagem e dy o argumento. Para compreender como uma expresso valida em Smalltalk, temos que identificar os seguintes tipos de mensagens:

Unrias: mensagens que envolvem apenas um nico objeto, o receptor.


Ex: 3 factorial str class

Binrias: envolvem dois objetos, o receptor e o argumento.


Ex: 2 + 3 x >= 2

Mensagens com palavras chave: incluem todas as mensagens no contempladas nos casos anteriores
Ex: 3 max: 5 anArray at: 1 put: 0

Ao contrrio do que acontece com outras linguagens, em SmallTalk as regras de precedncia so triviais:
1. 2. 3. 4. Efetua-se as expresses entre parnteses; Efetua-se as mensagens unrias; Efetua-se as mensagens binrias; Efetua-se as mensagens com palavras chave.

As mensagens de igual precedncia so avaliadas da esquerda para a direita.

ESTRUTURAS DE CONTROLE
Estrutura de seleo
O clculo do sinal de um nmero x pode ser escrito em Java/C++ como se segue:
If (x>0) return 1; else if (x<0) return -1; else return 0;

Em SmallTalk escrevemos:
x>0 ifTrue:[^1] ifFalse:[x<0 ifTrue:[^-1] ifFalse:[0]

Ciclos nmericos
Ex: 4 timesRepeat: [quantia := quantia + 10]

Seletores como to:, by: e do: corresponde a um mtodo que implemente um ciclo em que possvel especificar a expresso de atualizao da varivel de ciclo. Temos ainda outro tipo de ciclo numrico que permite especificar diretamento o nmero de iteraes pretencidas, como o timesRepeat mostrado no exemplo.

Ciclos condicionais
Existem os seguintes ciclos condicionas: whileTrue: e whileFalse: . avaliado o bloco enquanto o receptor for true, no caso do whileTrue:, ou false, no caso do whileFalse:.
Ex: indice := 1. [indice <= tamanho] whileTrue: [list at: indice put: 0. indice := indice + 1]

MODULARIZAO
Mtodos
Um mtodo uma sequncia de expresses precedida pelo padro da mensagem que o ativa e, opcionalmente, por uma declarao de variveis temporrias.
Um mtodo sempre implementado dentro de uma determinada classe e ser ativado sempre que alguma instncia de sua classe, ou de uma subclasse desta, receber uma mensagem com o seu padro de mensagem

Ex: potencia: expoente |result| result := 1. expoente timesRepeat: [result := self * result]. ^ result

A primeira linha o padro da mensagem, onde o seletor potencia:, com um argumento formal, expoente. A varivel temporria result usada somente para apoiar o algoritmo. A pseudo-varivel self refere-se ao objeto receptor da mensagem que , no caso, o nmero a ser elevado potncia expoente. A ltima linha indica que o mtodo retornar o valor final de result.

POLIMORFISMO
Polymorphism in Smalltalk The situation is different in Smalltalk (listing 6). If a Smalltalk-object receives a message it checks whether it understands the message. If it does, the appropriate method is executed otherwise an exception is raised. In Smalltalk, a message consists of one or more keywords. The complete message forms the selector which corresponds to a signature. Methods with the same signature can be implemented in independent classes, e.g. A>>hello and B>>hello. Even if class Object is a common ancestor of every class in Smalltalk, A and B have no common base class which implements hello. During run time, a variable may hold exemplars of any of these classes and it will behave correctly when receiving the message hello. This form of polymorphism does not depend on a type system or inheritance. It is verified during run time whether a message is known to the receiving object. Hence the compiler can not detect if inappropriate messages are sent to objects. This special form of polymorphism is called signature-based polymorphism as opposed to inclusion polymorphism which is also referred to as inheritance-bound polymorphism [Eis93]. In Smalltalk, every method is in some sense "generic" as C++ templates except that it works at run time too. Listing 6: Polymorphism in Smalltalk A>>hello "A inherits from Object - Object does not implement 'hello' Transcript show: 'Exemplar of A'; cr B>>hello "A inherits from Object - Object does not implement 'hello'" Transcript show: 'Exemplar of B'; cr "Execute the following code:" |v| v := A new. v hello. v := B new. v hello

Coero
Se dois objetos envolvidos numa operao matemtica so de duas classes Number diferentes, um deles tem que ser convertido para assegurar resultados corretos. Este processo chamado coero e consiste em trs passos:
a) a operao falha devido aos operandos serem de classes diferentes, b) determina qual o operando que pertence classe mais geral, c) converte todos os operandos para essa classe.

A seguir mostram-se as vrias subclasses de Number com a sua generalidade (valor que define as prioridades para a coero, quanto mais alto o valor maior a prioridade).
CLASSE Double Float FixedPoint Fraction Interger SmallInterger GENERALIDADE 90 80 70 60 40 20

TRATAMENTO DE EXCESO
Toda exceo uma subclasse de Exception, objetos desse tipo possuem vrios atributos como:
messageText (que descreve o erro); originator (o objeto que gerou o erro); isResumable (dizendo se o programa pode ser continuado ou no); Vrios contextos (pilha de execuo) relacionados a exceo (signalContext, handlerContext, outerContext)

Ex:

|x y| x := 7. y:=0. [x / y] on: ZeroDivide do: [:exception | Transcript show: 'Tentativa de divisao por zero']

Note que o objeto exceo gerado passado como parmetro ao bloco tratador da exceo; O parmetro passado ao seletor on: pode conter uma lista de excees separados por vrgulas.

BIBLIOGRAFIA
http://www.inf.ufsc.br/poo/smalltalk/jonathan/ SLIDES QUE O DENIS PASSOU (poot*.pdf) http://accu.org/index.php/journals/538 http://www.gnu.org/software/smalltalk/manual/html_node/I nheritance-and-Polymorphism.html http://w3.ualg.pt/~hdaniel/poo/Smalltalk.pdf http://www4.fct.unesp.br/rogerio/LP/Smalltalk.pdf

Vous aimerez peut-être aussi