12
Aspectos Teóricos da Linguagem de Programação Smalltalk Ailton Félix de Lima Filho Bruno Normande Lins Michel Alves dos Santos 1 Março de 2010 1 Bacharelandos em Ciência da Computação, Universidade Federal do Estado de Ala- goas(UFAL). E-mails: [email protected], [email protected], [email protected]. Dis- ciplina: Teoria e Paradigmas de Linguagens de Programação. Docente Responsável: Alcino Dall’Igna Júnior.

Aspectos Teóricos da Linguagem de Programação Smalltalk

Embed Size (px)

Citation preview

Aspectos Teóricos da Linguagem de ProgramaçãoSmalltalk

Ailton Félix de Lima FilhoBruno Normande Lins

Michel Alves dos Santos 1

Março de 2010

1Bacharelandos em Ciência da Computação, Universidade Federal do Estado de Ala-goas(UFAL). E-mails: [email protected], [email protected], [email protected]. Dis-ciplina: Teoria e Paradigmas de Linguagens de Programação. Docente Responsável: AlcinoDall’Igna Júnior.

Resumo

O ambiente Smalltalk foi desenvolvido pela equipe do Grupo de Pesquisas do Palo AltoResearch Center da Xerox (XeroxPARC) no início da década de 70[Kay93]. As principaisidéias do Smalltalk são creditadas a Alan Curtis Kay[Wik10a][Wik10b][Int10][Gas10]; mui-tas delas baseadas no Simula, LISP e SketchPad. Dan Ingalls, seu companheiro de trabalho,escreveu as primeiras janelas sobrepostas e menus pop-up opacos, muito comuns hoje emdia em plataformas mais populares, como o Microsoft Windows. Uma segunda versão doSmalltalk (Smalltalk/V) foi desenvolvida pela Digitalk em Los Angeles(Califórnia), comos fundadores da Ollivetti. Antes de ser comprada pela ParcPlace Systems Inc., a Digitalkera a líder de vendas deste produto. Logo em seguida, a IBM desenvolveu o VisualAgeSmalltalk em colaboração com a Object Technology International Inc. atual ObjectShare(antiga ParcPlace-Digitalk). Atualmente a IBM continua sendo um dos principais distri-buidores do ambiente de desenvolvimento Smalltalk. Para o acesso do público em geral,existem verdadeiras soluções completas que se destacam plena simplicidade, leveza e pu-reza de conceitos como é o caso dos ambientes Squeak(um ícone no meio educacional) ePharo(esse último, um fork da plataforma Squeak). Vale lembrar que Smalltalk não parouno tempo. Mesmo não tendo o forte apelo comercial de linguagens como COBOL, Clippere Java (entre outras) a plataforma mantêm uma comunidade fiel e atuante[Com10], cen-tenas de fontes de consulta, grupos de usuários[Gro10], fóruns, livros oficiais, ferramentaspara desenvolvimento web, servidores de aplicação, eventos internacionais e vem crescendoimpulsionada pelo espírito colaborativo que une pessoas ao redor do globo, situação seme-lhante ao fenômeno do Código Aberto.

Palavras-Chave: Linguagens de Programação, Tipagem Dinâmica, Smalltalk, Vincula-ções, Verificação de Tipos, Variáveis, Compatibilidade de Tipos.

1

Sumário

1 Introdução 31.1 Sobre Smalltalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 O Ambiente Smalltalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2.1 Smalltalk e a Orientação ao Objeto . . . . . . . . . . . . . . . . . . 4

2 Nomes, Vinculação, Checagem de Tipos e Escopos 52.1 Formas de Nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Caracteres Reservados . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Palavras Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.1 Nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.2 Apelidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.3 Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.4 Valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4 Vinculação de Atributos para Variáveis . . . . . . . . . . . . . . . . . . . . 72.4.1 Vinculação de Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4.2 Vinculação de Armazenamento e Tempo de Vida . . . . . . . . . . 7

2.5 Verificação de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.6 Escopo e Tempo de Vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.7 Ambiente referêncial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.8 Constantes com Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.9 Inicialização de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2

Capítulo 1

Introdução

1.1 Sobre SmalltalkSmalltalk foi a primeira linguagem concebida para tornar a programação orientada

a objetos uma prática popular entre os programadores de software. Diferente de C++ eADA que dão suporte a múltiplos paradígmas, Smalltalk (assim como Eiffeil) é o casomais próximo de linguagem voltada ao paradígma de orientação a objeto. Diferente deEiffeil, Smalltalk é uma linguagem totalmente dinâmica: cada objeto carrega o seu tipoem tempo de execução. O tipo de uma variável é determinado pelo tipo do objeto a qualela se refere em tempo de execução.

No decorrer do trabalho iremos prover uma breve introdução aos conceitos iniciais dalinguagem Smalltalk, sem no entanto executar uma cobertura completa da mesma.

1.2 O Ambiente SmalltalkSmalltalk foi desenvolvido para a escrita de aplicações em um ambiente/estação de

trabalho pessoal de alta interatividade. A linguagem é estritamente acoplada com o seuambiente, o que prové um estilo de interaçõa orientado a objeto. O usuário que utilizaSmalltalk estará interagindo em um ambiente onde os objetos estarão realmente “vivos“e esses poderão ser de qualquer natureza: desde de documentos que estão sendo editadosaté elementos de tela como botões e barras de rolagem. É possível enviar mensagenspara um determinado objeto apenas selecionando com o mouse e especificando a requiridaoperação através de um menu em cascata, o que mostra a versatilidade do ambiente. Asferramentas do ambiente Smalltalk são escritas em Smalltalk. O resultado disso é que alinguagem e o ambiente podem ser personalizados e estendidos de acordo com a necessidadedos usuários[GJ97].

3

1.2.1 Smalltalk e a Orientação ao ObjetoEm se tratando da linguagem Smalltalk, a mesma é puramente orientada a objeto.

Smalltalk foi a primeira línguagem para tornar a programação orientada a objeto popularentre os profissionais de software [GJ97].

Várias versões da linguagem Smalltalk foram lançadas no decorrer de sua existênciacomo o Smalltalk-71, Smalltalk-72, Smalltalk-76, Smalltalk-80 (Atualmente a versão maisutilizada) e a ANSI Smalltalk que foi ratificada em 1998 e representa a versão padrão doSmalltalk, que por sua vez é fortemente baseado no padrão Smalltalk-80. As análisesfeitas neste texto levarão em consideração as características da implementação Smalltalk-80 servindo como ferramenta de campo a aplicação Squeak que é uma versão rápida,open source e altamente portátil de Smalltalk possuindo uma máquina virtual inteiramenteescrita em Smallatlk[Squ10][Wik10c].

4

Capítulo 2

Nomes, Vinculação, Checagem deTipos e Escopos

2.1 Formas de NomesUm nome, ou identificador em Smalltalk é uma cadeia de caracteres iniciada por uma

letra e seguida de letras ou dígitos, onde o caracter inicial deve ser uma letra qualquerdo alfabeto (maíuscula ou minúscula) e o restante do identificador pode conter os dígitoscorrepondentes aos números de 0 a 9 ou outras letras. Em expressão regular teríamos :

Identificador � letra(letra + digito)*

As implementações baseadas em Smalltalk-80 são sensíveis ao caso, ou seja, diferemcaracteres maiúsculos de minúsculos.

2.1.1 Caracteres ReservadosSmalltalk também possui alguns caracteres reservados. São eles:

• := (ou �), que indica atribuição;

• ^ (ou �), que indica o retorno de um método;

• |var1 var2 var3|, declaração de variáveis temporárias (Ver seção Variáveis);

• $a, caractere a;

• #(abc 123), array contendo dois literais: o símbolo ‘abc’ e o número 123;

• . (ponto), fim de expressão;

• ; , mensagem em cascata;

• [ ], bloco de código (que também é visto como um objeto);

5

• "“, comentários;

• ‘’, cadeia de caracteres.

2.2 Palavras EspeciaisA implementação Smalltalk-80 possui seis pseudo-variáveis que funcionam como pala-

vras reservadas.[BDNP07] São elas:

• nil, instância singleton da Classe UndefinedObject;

• true, instância singleton da Classe True;

• false, instância singleton da Classe False;

• self, o objeto atual, recebedor da mensagem correspondente;

• super, referencia o mesmo objeto que self, mas, quando uma mensagem é enviadaa super, a busca por um método se inicia na classe pai daquela a qual super foichamada;

• thisContext, o contexto de execução ativo, ou o ambiente de execução corrente,(usando os métodos MethodContext ou BlockContext).

2.3 VariáveisEm Smalltalk-80, variáveis podem ser privadas ou compartilhadas, possuindo diferen-

tes tipos:

• Variáveis de instância, que representam objetos (instâncias das classes);

• Variáveis temporárias, que existem apenas durante alguma atividade, ou seja, nodecorrer da execução de um método.

• Variáveis de classe, que são compartilhadas por todas as instâncias de uma deter-minada classe.

• Variáveis globais, que são compartilhadas por todas as intâncias de todas as classes,ou seja, compartilhadas por todos os objetos do ambiente.

• Variáveis pool, que são compartilhadas por todas as intâncias de algumas classes(pré-determinadas).

6

2.3.1 NomesOs nomes de variáveis seguem as mesmas regras discutidas anteriormente. Exceto

as variáveis privadas que devem iniciar-se com letras minúsculas. Já as compartilhadasdevem iniciar-se com maiúsculas. Vale lembrar que tal padrão é seguido apenas a títulode convenção.

2.3.2 ApelidosTodas as variáveis em Smalltalk são referenciadas: “Smalltalk enxerga variáveis uni-

formemente como referências para objetos”[GJ97]. Dessa maneira, nenhuma variável ar-mazena o objeto em sí, mas sim uma referência ao mesmo. Com as atribuições e passagemde parâmetros sendo feitas por referência apenas. Os apelidos (aliases) passam a ser parteintegral da linguagem.

2.3.3 TiposEm Smalltalk as variáveis não possuem tipo a priori, pois são automaticamente inici-

alizadas com uma instância da classe UndefinedObject, dessa forma podem armazenaruma referência a qualquer objeto.

2.3.4 ValoresO valor de uma variável em Smalltalk é sempre uma referência a um objeto.

2.4 Vinculação de Atributos para Variáveis

2.4.1 Vinculação de TiposAs implementações baseadas em Smalltalk-80 exigem que toda variável seja decla-

rada antes de seu uso, dessa maneira a linguagem evita erros comuns, como a criação devariáveis indesejadas por acidente ou descuido. Apesar disso, em algumas implementaçõesde Smalltalk não é necessário declarar o tipo da variável.

Na verdade, as variáveis em Smalltalk são inicializadas como uma instância da classeUndefinedObject, dessa forma, toda variável deixa de ser vinculada a um tipo específicoa priori e pode guardar a referência a um objeto de qualquer classe.

2.4.2 Vinculação de Armazenamento e Tempo de VidaVariáveis em Smalltalk não possuem tipo a priori (são inicializadas com Undefi-

nedObject), assim qualquer variável pode apontar para um objeto, que pode ser umainstância de qualquer classe, por esse motivo afirmamos que as variáveis em Smalltalk são

7

dinamicamente tipadas. Todas são alocadas no heap implicitamente no momento em queum valor é atribuído a mesma.

Apesar disso, todas as variáveis precisam ser declaradas antes de seu uso, o que evitaerros como a criação de variáveis indesejadas a partir de erros de digitação. Uma variávelé alocada assim que sua declaração é encontrada. Inicialmente toda variável aponta parao objeto nil, e continua assim até o momento em que é feita uma atribuição. Toda de-salocação é executada implicitamente pelo garbage collector do sistema, quando identificauma variável que não está mais sendo usada.

2.5 Verificação de tiposA verificação de tipos em Smalltalk é dinâmica pois a mesma é realizada em tempo de

execução[Wik10d].

2.6 Escopo e Tempo de VidaSmalltalk possui escopo dinâmico pois é dinamicamente tipada.

2.7 Ambiente referêncialComo em Smalltalk todo o processamento se dá por meio do envio de mensagens a partir

de métodos definidos em classes, o que nos interessa saber é qual o ambiente referencial detais métodos. As variáveis que um método em uma classe pode acessar são classificadas emcinco diferentes tipos[GR83]. Dois deles são as variáveis privadas, disponíveis apenas paraum único objeto, que são subdivididas em: variáveis de instância e variáveis temporárias.Os outros três tipos podem ser acessados por mais de um objeto, são elas: as variáveisde classe, as variáveis globais e as variáveis de pool. Assim, o ambiente referencial deum determinado método é definido pelo conjunto de tais variáveis definidas na classe domesmo, e no próprio método.

2.8 Constantes com NomeSmalltalk não possui uma sintaxe especial para distinguir constantes de variáveis [BDNP07].

Na verdade, variáveis em Smalltalk são tratadas como ‘constantes’, devido a natureza demanipulação de referências a objetos e não valores primitivos dos mesmos.

2.9 Inicialização de VariáveisToda variável em Smalltalk é atribuída inicialmente e de maneira automática com o

objeto nil, assim, qualquer variável dentro do ambiente sempre irá se referir a um objeto.

8

Referências Bibliográficas

[BDNP07] Andrew P. Black, Stéphane Ducasse, Oscar Nierstrasz, and Damien Pollet.Squeak by Example, chapter 2.6, page 37. Square Bracket Associates, Switzer-land, first edition, September 2007.

[Com10] Smalltalk Community. Welcome to Smalltalk.org - Community and industrymeet inventing the future.TM. http://www.smalltalk.org/main/, 2010. [On-line; accessed 17-April-2010].

[Gas10] Scott Gasch. Biography Alan Curtis Kay. http://ei.cs.vt.edu/~history/GASCH.KAY.HTML, 2010. [Online; accessed 17-April-2010].

[GJ97] Carlo Ghezzi and Mehdi Jazayeri. Programming Language Concepts. JohnWiley & Sons, Inc., New York, NY, USA, 1997.

[GR83] Adele. Goldberg and David. Robson. Smalltalk-80 : the language and its im-plementation / Adele Goldberg and David Robson. Addison-Wesley, Reading,Mass. :, 1983.

[Gro10] European Smalltalk User Group. European Smalltalk User Group. http://www.esug.org/, 2010. [Online; accessed 17-April-2010].

[Int10] Intelius. Intelius People Search - Alan Curtis Kay. http://search.intelius.com/Alan-Kay, 2010. [Online; accessed 17-April-2010].

[Kay93] Alan C. Kay. The early history of smalltalk. In HOPL-II: The second ACMSIGPLAN conference on History of programming languages, pages 69–95, NewYork, NY, USA, 1993. ACM.

[Squ10] Squeak. Squeak. http://www.squeak.org/, 2010. [Online; accessed 10-May-2010].

[Wik10a] Wikipedia. English Wikipedia - Alan Curtis Kay. http://en.wikipedia.org/wiki/Alan_Kay, 2010. [Online; accessed 17-April-2010].

[Wik10b] Wikipedia. Portuguese Wikipedia - Alan Curtis Kay. http://pt.wikipedia.org/wiki/Alan_Kay, 2010. [Online; accessed 17-April-2010].

9

[Wik10c] Wikipedia. Squeak. http://en.wikipedia.org/wiki/Squeak, 2010. [Online;accessed 10-May-2010].

[Wik10d] Wikipedia. Type System. http://en.wikipedia.org/wiki/Type_system#Type_checking, 2010. [Online; accessed 10-May-2010].

10