• Nenhum resultado encontrado

SELF. O poder da simplicidade Fabio Brzostek Muller Daniel Jorge Renjiffo

N/A
N/A
Protected

Academic year: 2021

Share "SELF. O poder da simplicidade Fabio Brzostek Muller Daniel Jorge Renjiffo"

Copied!
36
0
0

Texto

(1)

SELF

O poder da simplicidade

(2)

Agenda

● Motivação ● História ● Linguagem ● Semântica ● Demonstração

(3)

Motivação

(4)

Motivação

Peter Wegner

● Classes ● Objetos ● Herança

(5)

História

Em 1986, Randall Smith fez o Alternate Reality Kit

● Simulações gráficas para crianças aprenderem física ● Não havia cores nem 3D nos computadores

● Vários conceitos que depois apareceram em Self

● Uniformidade

● Estado e comportamento unificados ● Protótipos

● Reflexão

(6)
(7)

História

● Criado por David Ungar e Randall Smith na Xerox PARC em 1986

● Randall foi para Londres, Ungar continuou o projeto em Stanford a partir de 1987

● Randall voltou, ambos trabalharam com o projeto na Sun de 1991 até 1995

(8)

História

● Segundo Ungar, “Sun não entendeu o que tinha em mãos”

● Dois dos principais desenvolvedores da VM criaram startup, portaram código para Java

● Alguns anos depois, Sun comprou a tecnologia dessa VM de volta por dezenas de milhões de dólares

(9)
(10)

História

O legado e a influência de Self incluem

● NewtonScript, linguagem para o Apple Newton (1993); adaptação de Self mais rápida, leve e textual

● JavaScript, assim como Self, é baseada em protótipos, não em classes

● Lua não tem classes, POO usa protótipos; novos objetos são clonados ou feitos com método Fábrica ● GUI Morphic de Self foi portada para Smalltalk

(11)
(12)

Linguagem

Conceitos gerais

● Tipagem dinâmica (distinção interna entre tipos abstratos e concretos)

● Não há classes nem variáveis; metáfora de protótipos ● Acesso ao estado é unificado com envio de

mensagens; para acessar, se usa mensagens

(13)

Linguagem

Conceitos

● Mensagens no fundo: envio de mensagens é a operação fundamental

● Economia conceitual/minimalismo: tudo é objeto, pode fazer papel de instância ou de repositório para

compartilhar informação

● Concretude: tentar representar as coisas da forma mais concreta possível

(14)

Linguagem

Experiência

● Programadores vivem no mundo real, respondem a sentidos, não só pensamentos racionais

● Humanos interagem com objetos físicos; para ter uniformidade, Self é composta apenas por objetos ● Protótipos permitem manipulação direta dos objetos

● Implementação, linguagem e interface trabalham juntas para criar uma experiência unificada

(15)

Linguagem

Protótipos

● Objetos em Self têm slots que guardam estado e comportamento

● Slots com objetos pais permitem herança (compartilhar

comportamento)

● Objeto tem características próprias, pai tem as compartilhadas

(16)
(17)

Linguagem

Vantagens dos protótipos

● Relações mais simples: “é um” e “é tipo de” X “herda de”

● Criação pela cópia: basta copiar para criar, sem ter que interpretar informações de formato

● Exemplos: protótipos são exemplos típicos de objetos; mais fáceis de entender, encorajam reutilização

(18)
(19)

Linguagem

Classe carro:

Atributos: Comportamento: motor frente ano ré modelo abrirPorta portas fecharPorta

(20)

Linguagem

Ressalvas sobre protótipos

● Com protótipos e herança, próximo passo seria guardar comportamento no protótipo; mudar tudo facilmente

● Mas protótipos perderiam o que têm de especial; solução: objetos de traits, pais até do protótipo ● Mudança no protótipo só afeta ele mesmo

(21)

Linguagem

Misturando estado e comportamento

● Acesso de dados em slots é por envio de mensagem ● Acessar estado por mensagens deixa herança mais

flexível

● Compartilhamento de estado fica mais fácil

● Distinção entre acesso e comportamento diminuiria o poder das mensagens

(22)
(23)

Linguagem

Interface de usuário

● GUI Morphic, criada por Randall Smith e John Maloney ● Assim como na linguagem, os elementos gráficos são

todos objetos diretamente manipuláveis

● Objetivo é fazer a experiência ficar o mais simples possível

● Dois conceitos principais: reificação estrutural e edição instantânea

(24)

Linguagem

Interface de usuário: Reificação estrutural

● Estrutura fundamental são os morphs (grego: coisa/forma)

● Hierarquia de morphs: no topo, o protótipo; todos são visíveis

● Todo morph pode ter submorphs; composição se dá “colando” um no outro

● Layout determinado por objetos de layout, também visíveis, mostrando seu funcionamento diretamente

(25)

Linguagem

Interface de usuário: Edição instantânea

● A qualquer momento, objetos podem ser diretamente modificados e mostram mudanças instantaneamente ● Meta-menus permitem manipulações gráficas

● Menu outliner mostra informações sobre o morph no nível da linguagem (slots, edição)

● Slots podem ser editados mesmo com objeto na tela

(26)

Sintaxe/Semântica

Literais

● Inteiros. Ex.: 17, 2r10000, 16rFF ● Floats. Ex.: 3.14159, -3e6, 5.0

● Strings. Ex.: 'Hello world!', 'Quebra\n linha' ● Comentários ficam dentro de aspas duplas

● Palavras reservadas são self e resend

● Identificadores podem ter letras, números e underline e têm que começar com letra minúscula

(27)

Sintaxe/Semântica

Mensagens

● Unárias. Ex.: 3.14 sin, atom mass

● Binárias. Ex.: 3 + 4, 23 @ 47, 'bla ' , 'bla' ● Com palavras-chave. Ex.: vec at: 2 Put: 50,

x > y ifTrue: 1 False: 0

● Precedência: unárias -> binárias -> palavras-chave ● Mensagens binárias têm precedência sempre igual

(28)

Sintaxe/Semântica

Objetos

● Objetos planos: lista de slots. Ex.: (| x. y. z |) é um objeto com 3 slots (getters/setters automáticos)

● Slot constante tem que ser inicializado com = e um

valor. Ex.: (| x = 3. y = 4 |)

● Slot variável é inicializado com <- e um valor (ou sem

nada). Ex.: (| x <- 5. y <- 6 |)

● Slots de pais têm asterisco após nome.

(29)

Sintaxe/Semântica

Métodos

● São objetos, podem ter código além de slots

● Slots de métodos servem como variáveis locais

● Retornam resultado da última expressão de código (ou retorno explícito com ^)

● Argumentos podem ficar na lista de slots. Ex.:

(30)

Sintaxe/Semântica

Blocos

● Parecem métodos, mas ficam entre [] e seu código só é executado quando recebem mensagem value

● Similares a funções anônimas/lambdas

● Podem ter argumentos (value:, value:With:, value:With:With:)

● Permitem criação de estruturas de controle

● Ex.: x != 0 ifTrue: [1/x] False: [0] [i < j] whileTrue: [i: i * 2]

(31)

Sintaxe/Semântica

Resends

● Equivalente ao super de outras linguagens

● Método de pai ou escolher entre pais diferentes

● Ex.: (|pai* = (|foo = (x + y)|). x <- 8. y <- 9. foo = (resend.foo - 1)|)

(32)

Sintaxe/Semântica

Operadores e objetos especiais

● Operadores aritméticos: +, -, *, /, /+, /-, %, square, squareRoot, sin, cos, tan, negate ● Operadores lógicos: =, ==, &&, ||, not

● true, false e nil são Singletons

● Ao serem "copiados", na verdade retornam self

● Slots que não recebem nem um valor inicial nem um

(33)

Sintaxe/Semântica

Coleções

● Vetores (tamanho fixo, ordenados, começam em zero); métodos at:Put:, first, last etc.

● Strings são vetores, podem ser mutáveis ou não; imutáveis usam padrão Flyweight

● Conjuntos e dicionários são desordenados, elementos comparáveis e retornam inteiro como valor hash;

(34)

Sintaxe/Semântica

Coleções

● do: recebe bloco e o aplica a cada elemento (e chave, se houver) da coleção

● mapBy:, filterBy: e outros mapeiam e filtram os elementos da coleção

● asDictionary, asVector, asList convertem

● Listas de coletores formadas pelo método & podem ser convertidas para coleções.

(35)
(36)

Referências

● UNGAR, David e SMITH, Randall B. - Self: The Power of Simplicity, Lisp

and Symbolic Computation 4(3), Kluwer Academic Publishers, June, 1991.

Disponível em: http://bibliography.selflanguage.org/_static/self-power.pdf

● UNGAR, David e SMITH, Randall B. - Programming as an Experience:

The Inspiration for Self, ECOOP ‘95 Conference Proceedings, Aarhus,

Denmark, August, 1995. Disponível em: http://bibliography.selflanguage.

org/_static/programming-as-experience.pdf

● http://www.selflanguage.org (em especial os dois vídeos)

● http://handbook.selflanguage.org/4.5/

● http://www.self-support.com

Referências

Documentos relacionados

Entre as funções do delegado do CREF está a de recepcionar documentos enviados pela sede do CREF12/PE e disponibilizá-los para retirada pelos profissi- onais, prestando

Vetor viral não replicante (adenovírus) Doses/ intervalo 2 doses 4-12 semanas Efeitos colaterais mais frequentes Dor local, náuseas, mialgia CORONAVAC Laboratório

Tanto o professor quanto o aluno são responsáveis pela correção ou autoavaliação, pois ambos fazem parte do processo. O professor pode ser simplesmente um mediador quando o

APÊNDICE A – Questionário aplicado aos alunos do curso de Licenciatura em Ciências Biológicas das Faculdades Integradas de Itapetininga para Pesquisa para a Monografia da

O Longest Drive foi para o Paulo Nunes e as bo- las mais perto do buraco nos pares 3, #2, #14 e #18 foram para Paulo Nunes, José Dinis Sousa e Tiago Rocha

A existência de comentários no feed do projeto poderá beneficiar tanto o fundador como o financiador. Através dos comentários é possível que os usuários percebam se aqueles

Denominado pela sigla “PF” – forma desdobrada e abreviada cujo codinome inicial era “POR FAZER”, este projeto sinalizava a noção de obra como proposição, como instrução,

Retorna o índice da primeira ocorrência do caracter ou substring, caso contrário retorna -1;. int