SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Erick Dennel & Patrícia Felinto
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
Apresentação
 – Variáveis
 – Tipos primários
 – Igualdade estrutural
 – Números
 – Literais
 – Registros
Apresentação
  – Tuplas
  – Listas
  – Strings Virtuais
  – Operador de teste de igualdade
  – Matrizes
  – If Statement
• Conclusão
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?
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
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
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
Linguagem
 Multiparadigma
OZ
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
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
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
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
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
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
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
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
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
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
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
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.
Tipos Primários em Oz
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
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
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
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"
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)
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)]
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]
Strings virtuais
• Representa uma string através de uma
  concatenação virtual

           123#"-"#23#" is "#100
   representação da string: "123-23 is 100"
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
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
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
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]
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
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
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
Referências
• Documentação da linguagem
  – http://www.mozart-oz.org/documentation/tutorial/
  – http://www.mozart-oz.org/documentation/notation/
     node2.html#chapter.lexical
Fim

Mais conteúdo relacionado

Mais procurados

A Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em JogosA Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em Jogos
elliando dias
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Adriano Teixeira de Souza
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Flávio Freitas
 

Mais procurados (20)

Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10Paradigmas de linguagens de programacao - aula#10
Paradigmas de linguagens de programacao - aula#10
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introdução a Python
Introdução a PythonIntrodução a Python
Introdução a Python
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
A Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em JogosA Linguagem Lua e suas Aplicações em Jogos
A Linguagem Lua e suas Aplicações em Jogos
 
Aula2 ambientação a linguagem deprogramação python
Aula2   ambientação a linguagem deprogramação pythonAula2   ambientação a linguagem deprogramação python
Aula2 ambientação a linguagem deprogramação python
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Programação funcional no dia a dia
Programação funcional no dia a diaProgramação funcional no dia a dia
Programação funcional no dia a dia
 
Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6Paradigmas de Linguagens de Programacao - Aula #6
Paradigmas de Linguagens de Programacao - Aula #6
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
Minicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetosMinicurso - Web sites dinâmicos: PHP com orientação a objetos
Minicurso - Web sites dinâmicos: PHP com orientação a objetos
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Python
PythonPython
Python
 

Semelhante a Oz

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
Jocelma Rios
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 
Aula 02 operadores aritiméticos
Aula 02   operadores aritiméticosAula 02   operadores aritiméticos
Aula 02 operadores aritiméticos
Tácito Graça
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
Pedro Augusto
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
Fabio Spanhol
 

Semelhante a Oz (20)

Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Elixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioElixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistério
 
Aulas 13 e 14 - Algoritmos
Aulas 13 e 14 - AlgoritmosAulas 13 e 14 - Algoritmos
Aulas 13 e 14 - Algoritmos
 
Aula02
Aula02Aula02
Aula02
 
Aula 02 operadores aritiméticos
Aula 02   operadores aritiméticosAula 02   operadores aritiméticos
Aula 02 operadores aritiméticos
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Pged 03
Pged 03Pged 03
Pged 03
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1Resumo Tipos de Dados - LP1
Resumo Tipos de Dados - LP1
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de Dados
 
02_revisao_OO.pdf
02_revisao_OO.pdf02_revisao_OO.pdf
02_revisao_OO.pdf
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 

Último

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Oz

  • 1. Erick Dennel & Patrícia Felinto
  • 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
  • 3. Apresentação – Variáveis – Tipos primários – Igualdade estrutural – Números – Literais – Registros
  • 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
  • 39. Referências • Documentação da linguagem – http://www.mozart-oz.org/documentation/tutorial/ – http://www.mozart-oz.org/documentation/notation/ node2.html#chapter.lexical
  • 40. Fim