O documento apresenta a linguagem de programação Oz, que é multiparadigma e integra características de programação imperativa, funcional, lógica e orientada a objetos. Oz possui variáveis de atribuição única, tipos básicos como números e registros, além de estruturas de dados como listas, tuplas e matrizes. O modelo de programação Oz é baseado no conceito de espaço computacional onde tarefas executam instruções e compartilham um depósito de restrições.
2. Apresentação
• Introdução
– Linguagens multiparadigma
• Oz
– O que é
– Como surgiu
– Características
– A linguagem
– O modelo de programação Oz (OPM)
• Espaço computacional
• Constraint Store
4. Apresentação
– Tuplas
– Listas
– Strings Virtuais
– Operador de teste de igualdade
– Matrizes
– If Statement
• Conclusão
5.
6. Introdução
• As linguagens de programação existem em
grande número porém não são todas
radicalmente diferentes entre si
• As linguagens similares àquela usual do
programador geralmente o são porque
pertencem ao mesmo paradigma de
programação
• Mas por que existem diferentes paradigmas
de programação?
7. Introdução
• Todos os paradigmas de programação têm o
mesmo poder computacional
• No entanto, as soluções para um problema
específico podem ter atributos muito
diferentes quando implementadas em
linguagens de paradigmas distintos
• Um dos ramos da pesquisa sobre linguagens
de programação lida com as chamadas
linguagens multiparadigma
8. Linguagens multiparadigma
– Integração de vários paradigmas de programação em
um simples modelo
– Permite o entendimento de várias formas de
computação como partes de um fenômeno simples
– Engloba a codificação de algoritmos em um estilo
"natural“
– O objetivo é permitir ao programador expressar-se da
melhor maneira possível ao resolver um problema
específico sem ter de trocar de linguagem de
programação
9. Linguagens multiparadigma
– Programação imperativa ou procedural - são uma
seqüência de comandos para o computador executar
– Programação funcional - enfatiza a aplicação de
funções
– Programação lógica - faz uso da lógica matemática
para realizar computações por dedução
– Programação orientada a objeto - organiza as
atividades computacionais em entidades chamadas
objetos
– Programação com restrições - se refere ao uso de
restrições na construção de relações entre variáveis
11. O que é
• Poderoso modelo multiparadigma
• Sua sintaxe e semântica não estão limitadas a
nenhum paradigma básico
• É utilizado na solução de problemas clássicos
do universo do desenvolvimento em lógica,
funcional e orientado a objetos
• Apesar do seu enfoque multiparadigma
permite a utilização de conceitos de
paradigmas básicos
12. Como surgiu
• A pesquisa começou em 1990
• Gert Smolka fundou o Laboratório de
Programação de Sistemas no Centro Germânico
de Pesquisa em Inteligência Artificial (DFKI -
German Research Center for Artificial
Intelligence) na Alemanha
• Este modelo possui como base a linguagem AKL
– Criada no Instituto Sueco de Ciência da Computação
– Primeira linguagem concorrente restrita com busca
encapsulada
13. Como surgiu
• Sua primeira implementação foi lançada em
Setembro de 1992
• Daí evoluiu rapidamente, até um ponto fixo
que foi alcançado em Janeiro de 1995
• De lá pra cá seu desenvolvimento está parado,
mas está estável
• Seus criadores afirmam que pode substituir
linguagens de alto nível seqüenciais, tais
como Lisp, Prolog e Smalltalk
14. Características
• Suporta
– Procedimentos de Primeira Classe
– Conceito de thread
• Utiliza o conceito de Porta (procedimento
ligado a uma stream) para comunicação
• Implementa Busca Encapsulada
• Controle em Tempo Real
15. Características
• Reúne características
– Imperativas (o modelo de computação são
threads executando instruções em seqüência, e as
instruções podem ter efeitos colaterais),
– Funcionais (funções) e
– Orientadas a objeto (um sistema de classes com
herança múltipla)
• Dinamicamente tipada
• Interpretada por uma máquina virtual
16. Características
• Valores e Estruturas de dados
– Valores em OZ incluem integers, floats,
strings,listas e registros
– Vetores e dicionários são tratados como objetos
– Estruturas de dados compostas combinam-se com
variáveis lógicas e valores do mais alto nível
– Estruturas de dados cíclicas e correntes infinitas
são facilmente expressadas
17. A linguagem
• Não há outra linguagem concorrente que combine um rico
sistema de objetos com aspectos avançados para
processamento simbólico e solução de problemas
• As primeiras aplicações do OZ incluem:
– Simulações
– Sistemas multi-agentes
– Processamento de linguagem natural
– Realidade virtual
– Interfaces de usuário gráficas
– Programações
– Utilização de tabelas e configurações
• A programação multiparadigma empregada utiliza
programação concorrente restrita (ccp) como fundamento
18. O modelo de programação Oz (OPM)
• É um modelo de programação concorrente
resumindo programação funcional e
programação orientada a objetos como partes
de um modelo geral
• A computação no OPM é feita em um
chamado espaço computacional
19. Espaço computacional
• Hospeda um número de tarefas conectadas a
um depósito compartilhado
– A computação avança pela redução das tarefas, as
quais podem manipular o depósito e criar novas
tarefas
– Quando uma tarefa é reduzida ela desaparece.
– Enquanto a computação avança, o depósito
acumula relações entre as variáveis em um
depósito chamado de constraint store
20. Constraint store
• Lugar onde são armazenadas as informações
sobre os valores que estão participando de
um cálculo.
• Um exemplo de como o OZ pode guardar
informações parciais de variáveis:
X = Y ^Y = Z|U ^Z = 3
• As tarefas podem sincronizar-se no depósito
de maneira que elas sejam reduzidas somente
se o depósito satisfizer certas condições
21. Variáveis
• Variáveis são "single-assignment“(atribuição
única)
• Estados:
– Não definida, aguardando uma atribuição
• Thread é bloqueada, se for preciso utilizar o valor dessa
variável
– Definida, não pode ser mais mudada
22. Variável
• Declaração de variáveis:
– declaração de uma variável local:
• local X Y Z in S end
– declaração de uma variável global:
• declare X Y Z in S
• Em OZ as variáveis são tipadas
dinamicamente.
24. Igualdade Estrutural
• Os tipos Número(number), Registro(record) e
seus subtipos têm valores iguais somente se
suas estruturas forem similares - um for
subtipo do outro.
• Ou seja, para dois números serem iguais eles
têm que ser do mesmo tipo, ou um ser
subtipo do outro
25. Números
• Declaração de três variáveis, um inteiro, um
float e um character:
local I F C in
I=5
F = 5.5
C = &t
end
• C=&t, caracteres possuem uma representação
de inteiros, neste caso, o inteiro 48
26. Literais
• Não possuem estrutura interna.
• Literais são dividos em atomos e nomes.
– Atomos: é uma entidade simbólica identificada por
uma sequencia de caracteres em lower case
• a foo '=' ':=' 'OZ 3.0‘ 'Hello World‘
– Nomes: o único meio de se criar nomes é chamando o
procedimento {NewName X}
local X Y B in
X = foo
{NewName Y}
B = true
end
27. Registros
• São estruturas de entidades compostas. Um
registro tem um label e um número fixo de
componentes ou argumentos.
tree(key: I value: Y left: LT right: RT)
Cada argumento consiste em um par
"característica:campo"
28. Tuplas
• Muito parecidos com registros, mas há
omissão das características.
• Este recurso vêm da programação lógica e é
conhecido como termo composto. Exemplo:
tree(I Y LT RT), é apenas uma notação sintática do
registro: tree(1:I 2:Y 3:LT 4:RT)
29. Tuplas
• Exemplo:
declare T I Y LT RT W in
T = tree(key:I value:Y left:LT right:RT)
I = seif
Y = 43
LT = nil
RT = nil
W = tree(I Y LT RT)
{Browse [T W]}
• Neste exemplo, são criados um registro e uma tupla, depois
os dois são imprimidos:
[tree(key:seif value:43 left:nil right:nil)
tree(seif 43 nil nil)]
30. Listas
• Há várias formas de se representar listas:
– 1|2|3|X -> lista com cauda
– [1 2 3] -> lista fechada
– "OZ 3.0" -> lista: [79 90 32 51 46 48]
ou [&O &Z & &3 &. &0]
31. Strings virtuais
• Representa uma string através de uma
concatenação virtual
123#"-"#23#" is "#100
representação da string: "123-23 is 100"
32. Operador de teste de
igualdade
• Procedimento básico {Value . '==' X Y R}
– tenta testar se X e Y são iguais ou não, e retorna o
resultado em R
• Normalmente usado como uma expressão
funcional, ao invés de uma declaração
• Também pode ser escrito R = X == Y
33. Is Statement
• if B then S1 else S2 end
– B deve ser um valor booleano
• Fornece um número de procedimentos utilizados para
comparação
– incluem == que vimos anteriormente, assim como = =< < >= >
local X Y Z in
X = 5 Y = 10
if X >= Y then Z = X else Z = Y end
end
• Neste exemplo Z está vinculado ao máximo de X e Y ou seja, Y
34. Matrizes
• {NewArray + L + H + I ?A}
– Cria uma matriz A
– L é o menor índice vinculado
– H é o maior índice vinculado
– I é o valor inicial dos elementos da matriz
35. Matrizes
• {Array . low + A ?L}
– retorna o menor índice
• {Array . high + A ?L}
– retorna o maior índice
• R := A . I
– retorna A[I] em R
• A . I := X
– atribui X à entrada A[I]
36. Ambiente de
desenvolvimento
• Nos últimos anos, vários trabalhos de
pesquisa vêm sendo desenvolvidos para
criação de uma plataforma distribuída para
o modelo Oz
• Esta plataforma é denominada Mozart
37. Conclusão
• Oz não foi construído a partir de nenhum
paradigma básico
• Os criadores de Oz propõem um novo
modelo baseado nos conceitos dos
paradigmas existentes
• O principal conceito para compreensão de
Oz é o espaço computacional onde são
executados os programas
• Oz é um modelo de programação concorrente
38. Conclusão
• O modelo computacional que suporta a execução
de diversas tarefas compartilhando um
armazenamento (espaço computacional) é
inerentemente concorrente
• Oz possui um ambiente de desenvolvimento
composto de um compilador e um depurador
• No entanto, o modelo Oz não propõe uma
metodologia completa de desenvolvimento
• Não é apresentada uma proposta para
modelagem de sistemas complexos através de
instrumentos gráficos