Differences

This shows you the differences between two versions of the page.

Link to this comparison view

smalltalk-1-trabalho [2012/03/19 11:23] (current)
adenauer created
Line 1: Line 1:
 +====== Smalltalk ======
  
 +{{ :smalltalk.jpeg | Smalltalk}}
 +
 +Grupo: Guilherme Povala e Lívia Amaral
 +
 +^ Nome                | Smalltalk |
 +^ Versão estável      | Smalltalk-80 version 2 (1980) |
 +^ Ano                 | Desenvolvido desde 1969, tornou-se público em 1972 |
 +^ Criado por          | Alan Kay, Dan Ingalls, Adele Goldberg |
 +^ Desenvolvedores     | Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, Scott Wallace, Peter Deutsch and Xerox PARC|
 +^ Paradigma           | Orientação a Objetos | 
 +^ Tipagem             | Dinâmica |
 +^ Compiladores        | Pharo, Squeak, GNU Smalltalk, VisualWorks, Dolphin Smalltalk, Smalltalk/X, VA Smalltalk |
 +^ Dialetos            | Squeak |
 +^ Influenciada Por    | [[lisp-1-trabalho|Lisp]], [[simula-1-trabalho|Simula]], Logo, Sketchpad |
 +^ Influenciou         | [[objectivec-1-trabalho|Objective-C]], Self, Java, [[php-1-trabalho|PHP 5]], Dylan, AppleScript, Lisaac, D, NewtonScript, [[python-1-trabalho|Python]], [[ruby-1-trabalho|Ruby]], Scala, [[perl-1-trabalho|Perl 6]], **C**ommon **L**isp **O**bject **S**ystem (CLOS), Falcon, Io, Ioke|
 +^ Sistema Operacional | Multi-Plataforma |
 +
 +===== Índice =====
 +
 +  * [[#introducao | Introdução]]\\
 +  * [[#historia | História]]\\
 +  * [[#visao_da_linguagem | Visão da Linguagem]]\\
 +  * [[#avaliacao | Avaliação]]\\
 +  * [[#comandos | Comandos]]\\
 +    * [[#timesRepeat | timesRepeat]] 
 +    * [[#to_do_e_to_by | to... do e to... by]]
 +    * [[#ifTrue_e_ifFalse | ifTrue e ifFalse]]
 +    * [[#whileTrue_e_whileFalse | whileTrue e whileFalse]]
 +  * [[#exemplos | Exemplos]]\\
 +    * [[#hello_world | Hello world]]
 +    * [[#instrucao_for | Instrução FOR]]
 +    * [[#numero_perfeito | Número Perfeito]]
 +    * [[#classes | Classes]]
 +    * [[#metodos | Métodos]]
 +    * [[#invocacao | Invocação]]
 +    * [[#poligonos_equilateros | Polígonos Equiláteros]]
 +  * [[#fontes_e_links | Fontes e Links]]\\
 +===== Introdução =====
 +
 +**Smalltalk-80**, ou apenas **Smalltalk**, é uma linguagem de programação orientada a objeto com tipagem dinâmica. Smalltalk foi a primeira linguagem de programação com suporte completo à programação orientada a objetos. Trouxe, também, o conceito de interação com os usuários através de janelas. Nunca foi amplamente utilizada em comparação a outras linguagens, porém, a programação orientada a objetos é, atualmente, o caso da maioria das linguagens imperativas populares como Java e C++.\\
 +Smalltalk é relativamente fácil de aprender comparado a linguagens como C++ e [[ada-1-trabalho|Ada]]. O código-fonte Smalltalk é fácil de ler, o que o torna a linguagem de programação ideal para iniciantes.
 +
 +===== História =====
 +
 +Smalltalk foi desenvolvida pelo Xerox Palo Alto Research Center no ínicio dos anos 70. Foi baseada em linguagens como [[simula-1-trabalho|Simula]], Logo, Sketchpad e [[lisp-1-trabalho|Lisp]].\\
 +No final dos anos 60, Alan Kay vislumbrou a disponibilidade futura de computadores de mesa, que seriam usados por usuários não programadores e assim, precisariam de uma grande capacidade de interação humano-computador, ou seja, os computadores deveriam ser altamente interativos e usar interfaces gráficas.\\
 +Inicialmente, Kay pensou em um sistema chamado Dynabook, na qual o usuário interagiria com várias janelas, tanto por meio de um teclado, quanto tocando a tela com seus dedos. Quando Kay apresentou suas ideias sobre o Dynabook na Xerox, foi contratado e levado a ajudar no nascimento do Xerox Learning Research Group. O objetivo do grupo era projetar uma linguagem para suportar o paradigma de programação de Kay e implementá-lo no melhor computador pessoal possível. Assim surgiu um Dynabook composto do hardware Xerox Alto e do software Smalltalk-72.\\
 +Vários projetos de pesquisa foram conduzidos com esse sistema, incluindo experimentos para ensinar programação para crianças. Com os experimentos feitos, vieram desenvolvimentos que culminaram no Smalltalk-80.
 +
 +===== Visão da Linguagem =====
 +
 +Em Smalltalk, os números, as classes, os métodos, e etc, são todos objetos. Ou seja, toda a computação feita em Smalltalk é feita pela mesma técnica: envia-se uma mendagem a um objeto para invocar um de seus métodos. Uma resposta a uma mensagem é um objeto, o qual retorna a informação requisitada ou notifica o chamador que o processamento solicitado foi completado.\\
 +Não há tipos primitivos, ao contrário de outras linguagens orientadas a objeto; strings, números e caracteres são implementados como classes em Smalltalk, por isso esta linguagem é considerada puramente orientada a objetos. Tecnicamente, todo elemento de Smalltalk é um objeto de primeira ordem.\\
 +A diferença entre uma chamada e uma chamada a subprograma é que uma mensagem é enviada para um objeto de dados, especificamente para um dos métodos definidos para o objeto. O método chamado é então executado, geralmente modificando os dados do objeto para a qual a mensagem foi enviada; uma chamada a subprograma é uma mensagem ao código de um subprograma.\\
 +A sintaxe de Smalltalk é diferente de todas as outras linguagens, não se parecendo com nenhuma. Em grande parte por causa do uso de mensagens, em vez de expressões lógicas e aritméticas e sentenças de controle  convencionais. 
 +
 +===== Avaliação =====
 +
 +Smalltalk teve uma grande papel na promoção de dois aspectos separados da computação: interfaces gráficas com o usuário e programação orientada a objetos. O sistema de janelas que é agora o método dominante de interfaces com o usuário em sistemas de software cresceu a partir do Smalltalk. Atualmente, as metodologias de projeto de software e as linguagens mais significativas são orientadas a objetos. Apesar de algumas das ideias das ideias originais de linguagens orientadas a objetos serem do [[simula-1-trabalho|Simula 67]], elas alcançaram a maturidade apenas em Smalltalk. O impacto do Smalltalk no mundo da computação é extenso e terá vida longa.
 +
 +===== Comandos =====
 +
 +==== timesRepeat ====
 +
 +Executa um bloco de instruções um número específico de vezes.
 + 
 +<code smalltalk>anInteger timesRepeat: [bloco_instruções]</code>
 + 
 +  * **anInteger** - número de vezes a repetir
 +  * **bloco_instruções** - bloco de instruções a repetir
 + 
 +=== Exemplo ===
 +
 +<code smalltalk>4 timesRepeat: [quantia := quantia + 10]</code>
 +
 +==== to... do e to... by ====
 +
 +Executa um bloco múltiplas vezes baseado em um valor de início e um de final.
 + 
 +<code smalltalk>anInteger1 to: anInteger2 do: [bloco_instruções]
 +anInteger1 to: anInteger2 by: anInteger3 do: [bloco_instruções]</code>
 +
 +  * **anInteger1** - valor inicial de contagem
 +  * **anInteger2** - valor de parada
 +  * **anInteger3** - passo da contagem
 +  * **bloco_instruções** – bloco de instruções a repetir
 + 
 +=== Exemplo ===
 +
 +<code smalltalk>|anArray|
 +anArray:=(#1 2 3).
 +1 to: anArray size by: i do: [:i| anArray at: i put: 0
 +</code>
 +
 +==== ifTrue e ifFalse ====
 +
 +Executa um bloco de instruções caso uma condição booleana seja atendida (ou não).
 +
 +<code smalltalk>condição_booleana ifTrue: [bloco_instruções]
 +condição_booleana ifFalse: [bloco_instruções]</code>
 + 
 +<code smalltalk>
 +condição_booleana
 +    ifTrue: [bloco_instruções_se_verdadeiro]
 +    ifFalse: [bloco_instruções_se_falso]
 +</code>
 +<code smalltalk>
 +condição_booleana
 +    ifFalse: [bloco_instruções_se_falso]
 +    ifTrue: [bloco_instruções_se_verdadeiro]
 +</code>
 +
 +Para se obter uma condição booleana, basta enviar uma mensagem de comparação **(=, <, >, <=, >=, ~=, ==, ~~)** a um objeto.
 +
 +=== Exemplo ===
 +
 +<code smalltalk>a=b
 +    ifTrue: [a:=b+1. b:=b-2]
 +    ifFalse: [b:=a]
 +</code>
 +
 +==== whileTrue e whileFalse ====
 +
 +Executa o código enquanto a condição for satisfeita.
 +
 +<code smalltalk>[bloco_receptor] whileTrue: [bloco_argumento]</code>
 +
 +No caso da mensagem **whileTrue**, o ciclo funciona da seguinte forma: o bloco receptor recebe a mensagem value. Se a resposta a esta mensagem é true, então a mensagem value é enviada ao bloco de argumento. O ciclo repete-se até que o bloco receptor retorne false.
 + 
 +<code smalltalk>[bloco_receptor] whileFalse: [bloco_argumento]</code>
 + 
 +A mensagem **whileFalse** funciona de forma contrária. Em alguns casos, todo o trabalho útil é feito no bloco receptor e o bloco de argumentos pode ser dispensado. Nestes casos, omite-se o **argumentBlock**.
 +
 +===== Exemplos =====
 +
 +==== Hello world ====
 +<code smalltalk>
 +Transcript show: 'Hello, world!!!'
 +</code>
 +
 +==== Instrução FOR ====
 +<code smalltalk>
 +1 to:10 do:[:i|
 +    Transcript show: (i asString).
 +].
 +</code>
 +
 +==== Número Perfeito ====
 +<code smalltalk>
 +Integer extend [
 + 
 +    "Traduzido da versão em C"
 +     isPerfectC [ |tot| tot := 1.
 +         (2 to: (self sqrt) + 1) do: [ :i |
 +            (self rem: i) = 0
 +            ifTrue: [ |q|
 +                tot := tot + i.
 +                q := self // i. 
 +                q > i ifTrue: [ tot := tot + q ]
 +            ]
 +         ].
 +    ^ tot = self
 +    ]
 + 
 +    "Outra maneira"
 +    isPerfect [
 +        ^ ( ( ( 2 to: self // 2 + 1) select: [ :a | (self rem: a) = 0 ] )
 +            inject: 1 into: [ :a :b | a + b ] ) = self
 +    ]
 +].
 +</code>
 +
 +==== Classes ====
 +<code smalltalk>
 +Object subclass: #MessagePublisher
 +    instanceVariableNames: ''
 +    classVariableNames: ''
 +    poolDictionaries: ''
 +    category: 'Smalltalk Examples'
 +</code>
 +
 +==== Métodos ====
 +<code smalltalk>
 +publish
 +    Transcript show: 'Hello, world!'
 +</code>
 +
 +==== Invocação ====
 +<code smalltalk>
 +MessagePublisher new publish
 +</code>
 +
 +==== Polígonos Equiláteros ====
 +
 +<code smalltalk>
 +"Uma definição de classe, instanciações que podem desenhar polígonos equiláteros de qualquer número de lados"
 +class name Polygon
 +superclass Object
 +instance variable names ourPen
 +numSides
 +sideLenght
 +"Métodos de Classe"
 +"Cria uma instância"
 +new
 +    ^ super new getPen
 +
 +"Obtém uma caneta para desenhar o polígono"
 +getPen
 +ourPen <- Pen new defaultNib: 2
 +"Métodos de instância"
 +"Desenha um polígono"
 +draw
 +    numSides timesRepeat: [ourPen go: sideLenght; turn: 360 // numSides]
 +"Configura o tamanho dos lados"
 +length: len
 +    sideLenght <- len
 +"Configura o número de lados"
 +sides: num
 +    numSides <- num
 +</code>
 +
 +===== Fontes e Links =====
 +
 +[[http://www.grupoa.com.br/site/exatas-sociais-e-aplicadas/2/71/75/3895/3896/0/conceitos-de-linguagens-de-programacao.aspx | Conceitos de Linguagens de Programação (Livro)]]\\
 +[[http://stephane.ducasse.free.fr/FreeBooks/Gnu/ProgrammingUsingGnuSmalltalk.pdf | Programming
 +using GNU Smalltalk (Livro)]]\\
 +
 +[[wp>Smalltalk]]\\
 +[[http://www.smalltalk.org/| Smalltalk.org]]\\
 +[[http://www.squeak.org/ | Squeak]]\\
 +[[http://zeromeia.net84.net/smalltalk/comandos.html | Comandos Smalltalk]]
 
smalltalk-1-trabalho.txt · Last modified: 2012/03/19 11:23 by adenauer · [Old revisions]