• Save
Aspectos Teóricos da Linguagem de Programação Smalltalk
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

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

on

  • 1,047 views

Smalltalk 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++ e ADA que dão suporte a ...

Smalltalk 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++ e ADA que dão suporte a múltiplos paradígmas, Smalltalk (assim como Eiffeil) é o caso mais próximo de linguagem voltada ao paradígma de orientação a objeto. Diferente de Eiffeil, Smalltalk é uma linguagem totalmente dinâmica: cada objeto carrega o seu tipo em tempo de execução. O tipo de uma variável é determinado pelo tipo do objeto a qual ela se refere em tempo de execução. No decorrer do trabalho iremos prover uma breve introdução aos conceitos iniciais da linguagem Smalltalk, sem no entanto executar uma cobertura completa da mesma.

Statistics

Views

Total Views
1,047
Views on SlideShare
1,047
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 1. 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 1Bacharelandos em Ciência da Computação, Universidade Federal do Estado de Ala- goas(UFAL). E-mails: afdlf2@gmail.com, normandelins@gmail.com, michel.mas@gmail.com. Dis- ciplina: Teoria e Paradigmas de Linguagens de Programação. Docente Responsável: Alcino Dall’Igna Júnior.
  • 2. Resumo O ambiente Smalltalk foi desenvolvido pela equipe do Grupo de Pesquisas do Palo Alto Research Center da Xerox (XeroxPARC) no início da década de 70[Kay93]. As principais idé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 em dia em plataformas mais populares, como o Microsoft Windows. Uma segunda versão do Smalltalk (Smalltalk/V) foi desenvolvida pela Digitalk em Los Angeles(Califórnia), com os fundadores da Ollivetti. Antes de ser comprada pela ParcPlace Systems Inc., a Digitalk era a líder de vendas deste produto. Logo em seguida, a IBM desenvolveu o VisualAge Smalltalk 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) e Pharo(esse último, um fork da plataforma Squeak). Vale lembrar que Smalltalk não parou no tempo. Mesmo não tendo o forte apelo comercial de linguagens como COBOL, Clipper e 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, ferramentas para desenvolvimento web, servidores de aplicação, eventos internacionais e vem crescendo impulsionada 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.
  • 3. 1
  • 4. Sumário 1 Introdução 3 1.1 Sobre Smalltalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.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 5 2.1 Formas de Nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 Caracteres Reservados . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Palavras Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1 Nomes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.2 Apelidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.3 Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.4 Valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4 Vinculação de Atributos para Variáveis . . . . . . . . . . . . . . . . . . . . 7 2.4.1 Vinculação de Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.2 Vinculação de Armazenamento e Tempo de Vida . . . . . . . . . . 7 2.5 Verificação de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.6 Escopo e Tempo de Vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.7 Ambiente referêncial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.8 Constantes com Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.9 Inicialização de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2
  • 5. Capítulo 1 Introdução 1.1 Sobre Smalltalk Smalltalk 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++ e ADA que dão suporte a múltiplos paradígmas, Smalltalk (assim como Eiffeil) é o caso mais próximo de linguagem voltada ao paradígma de orientação a objeto. Diferente de Eiffeil, Smalltalk é uma linguagem totalmente dinâmica: cada objeto carrega o seu tipo em tempo de execução. O tipo de uma variável é determinado pelo tipo do objeto a qual ela se refere em tempo de execução. No decorrer do trabalho iremos prover uma breve introdução aos conceitos iniciais da linguagem Smalltalk, sem no entanto executar uma cobertura completa da mesma. 1.2 O Ambiente Smalltalk Smalltalk 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 seu ambiente, o que prové um estilo de interaçõa orientado a objeto. O usuário que utiliza Smalltalk 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 editados até elementos de tela como botões e barras de rolagem. É possível enviar mensagens para um determinado objeto apenas selecionando com o mouse e especificando a requirida operação através de um menu em cascata, o que mostra a versatilidade do ambiente. As ferramentas do ambiente Smalltalk são escritas em Smalltalk. O resultado disso é que a linguagem e o ambiente podem ser personalizados e estendidos de acordo com a necessidade dos usuários[GJ97]. 3
  • 6. 1.2.1 Smalltalk e a Orientação ao Objeto Em 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 popular entre os profissionais de software [GJ97]. Várias versões da linguagem Smalltalk foram lançadas no decorrer de sua existência como o Smalltalk-71, Smalltalk-72, Smalltalk-76, Smalltalk-80 (Atualmente a versão mais utilizada) e a ANSI Smalltalk que foi ratificada em 1998 e representa a versão padrão do Smalltalk, que por sua vez é fortemente baseado no padrão Smalltalk-80. As análises feitas 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 inteiramente escrita em Smallatlk[Squ10][Wik10c]. 4
  • 7. Capítulo 2 Nomes, Vinculação, Checagem de Tipos e Escopos 2.1 Formas de Nomes Um 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 qualquer do alfabeto (maíuscula ou minúscula) e o restante do identificador pode conter os dígitos correpondentes 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, diferem caracteres maiúsculos de minúsculos. 2.1.1 Caracteres Reservados Smalltalk 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
  • 8. • "“, comentários; • ‘’, cadeia de caracteres. 2.2 Palavras Especiais A 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 é enviada a super, a busca por um método se inicia na classe pai daquela a qual super foi chamada; • thisContext, o contexto de execução ativo, ou o ambiente de execução corrente, (usando os métodos MethodContext ou BlockContext). 2.3 Variáveis Em 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, no decorrer 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
  • 9. 2.3.1 Nomes Os 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 compartilhadas devem iniciar-se com maiúsculas. Vale lembrar que tal padrão é seguido apenas a título de convenção. 2.3.2 Apelidos Todas 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 passagem de parâmetros sendo feitas por referência apenas. Os apelidos (aliases) passam a ser parte integral da linguagem. 2.3.3 Tipos Em 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 armazenar uma referência a qualquer objeto. 2.3.4 Valores O 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 Tipos As 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 de variáveis indesejadas por acidente ou descuido. Apesar disso, em algumas implementações de 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 classe UndefinedObject, dessa forma, toda variável deixa de ser vinculada a um tipo específico a priori e pode guardar a referência a um objeto de qualquer classe. 2.4.2 Vinculação de Armazenamento e Tempo de Vida Variá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 uma instância de qualquer classe, por esse motivo afirmamos que as variáveis em Smalltalk são 7
  • 10. dinamicamente tipadas. Todas são alocadas no heap implicitamente no momento em que um valor é atribuído a mesma. Apesar disso, todas as variáveis precisam ser declaradas antes de seu uso, o que evita erros 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 para o 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 identifica uma variável que não está mais sendo usada. 2.5 Verificação de tipos A verificação de tipos em Smalltalk é dinâmica pois a mesma é realizada em tempo de execução[Wik10d]. 2.6 Escopo e Tempo de Vida Smalltalk possui escopo dinâmico pois é dinamicamente tipada. 2.7 Ambiente referêncial Como 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 de tais métodos. As variáveis que um método em uma classe pode acessar são classificadas em cinco diferentes tipos[GR83]. Dois deles são as variáveis privadas, disponíveis apenas para um ú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áveis de classe, as variáveis globais e as variáveis de pool. Assim, o ambiente referencial de um determinado método é definido pelo conjunto de tais variáveis definidas na classe do mesmo, e no próprio método. 2.8 Constantes com Nome Smalltalk 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 de manipulação de referências a objetos e não valores primitivos dos mesmos. 2.9 Inicialização de Variáveis Toda 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
  • 11. 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 industry meet 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. John Wiley & 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 ACM SIGPLAN conference on History of programming languages, pages 69–95, New York, 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
  • 12. [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