SlideShare a Scribd company logo
1 of 12
Download to read offline
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.
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.
1
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
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
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
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
• "“, 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
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
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
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
[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

More Related Content

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

Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++
Lindomar ...
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 

Similar to Aspectos Teóricos da Linguagem de Programação Smalltalk (20)

Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Latex2e - guia rápido e básico
Latex2e - guia rápido e básicoLatex2e - guia rápido e básico
Latex2e - guia rápido e básico
 
1livro latex 1_1_pdf
1livro latex 1_1_pdf1livro latex 1_1_pdf
1livro latex 1_1_pdf
 
Programacao em java
Programacao em javaProgramacao em java
Programacao em java
 
Html
HtmlHtml
Html
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Desenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em DartDesenvolvimento de aplicações web em Dart
Desenvolvimento de aplicações web em Dart
 
Linux
LinuxLinux
Linux
 
GoF.ppt
GoF.pptGoF.ppt
GoF.ppt
 
Curso python
Curso pythonCurso python
Curso python
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com
 
Android juliana-mono
Android juliana-monoAndroid juliana-mono
Android juliana-mono
 
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO ILIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
 

More from Michel Alves

More from Michel Alves (20)

Texture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU UseTexture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU Use
 
Intelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color PalettesIntelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color Palettes
 
A Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresA Framework for Harmonic Color Measures
A Framework for Harmonic Color Measures
 
Effectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesEffectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment Indexes
 
Introduction to Kernel Functions
Introduction to Kernel FunctionsIntroduction to Kernel Functions
Introduction to Kernel Functions
 
About Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV SpaceAbout Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV Space
 
Color Harmonization - Results
Color Harmonization - ResultsColor Harmonization - Results
Color Harmonization - Results
 
Wave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseWave Simulation Using Perlin Noise
Wave Simulation Using Perlin Noise
 
Similarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexSimilarity Maps Using SSIM Index
Similarity Maps Using SSIM Index
 
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color HarmonizationQualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and Reports
 
Month Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJMonth Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJ
 
Color Palettes in R
Color Palettes in RColor Palettes in R
Color Palettes in R
 
Sigmoid Curve Erf
Sigmoid Curve ErfSigmoid Curve Erf
Sigmoid Curve Erf
 
Hue Wheel Prototype
Hue Wheel PrototypeHue Wheel Prototype
Hue Wheel Prototype
 
Cosine Curve
Cosine CurveCosine Curve
Cosine Curve
 
Triangle Mesh Plot
Triangle Mesh PlotTriangle Mesh Plot
Triangle Mesh Plot
 
Triangle Plot
Triangle PlotTriangle Plot
Triangle Plot
 
Capacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesCapacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video Slides
 
Capacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function CatalogCapacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function Catalog
 

Recently uploaded

Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
rfmbrandao
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
LidianeLill2
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 

Recently uploaded (20)

O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Questões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPQuestões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LP
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
 
Acessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeAcessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidade
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 

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

  • 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