Mobilidade para Linguagem
Orientada a Objetos 1
Dimitri Malheiros
Évisson Lucena
Paulo Moura
Tópicos Abordados






Introdução
Linguagem JCSP
Implementação de Mobilidade de Canais em
LOO1
Dificuldades
BNF
Classes
Introdução





Extensão da Linguagem Orientada a Objetos 1
(LOO1)
Extensão de projeto desenvolvido anteriormente
Mobilidade, concorrência e canais de comunicação
Conceitos presentes nas linguagens pi-calculus e
CSP
Sintaxe e modo de operação semelhante a JCSP
JCSP


Biblioteca Java que implementa o modelo de
comunicação e concorrência de CSP/occam
(com restrições)
Um canal é um objeto de uma classe que
implementa uma das interfaces:
ChannelInput
 ChannelOutput
 ChannelInputInt
 ChannelOutputInt

JCSP


Um canal carrega algum tipo de informação
Canais podem levar informação a um processo
(output channels), ou trazer informação de um
processo (input channels)
class P implements CSProcess{
ChannelOutput a;
public void run() {
a.write(...);
}
}
class Q implements CSProcess{
ChannelInput a;
public void run() {
x = a.read();
}
}
JCSP (Send)
public class Send {
private final ChannelOutputInt chan;
private int i;
public Send(ChannelOutputInt chan, int i) {
this.chan = chan;
this.i = i;
}
public void run() {
while (true) {
chan.write(i);
i = i + 1;
}
}
}
JCSP (Read)
public class Read {
private final ChannelInputInt chan;
public Read(ChannelInputInt chan) {
this.chan = chan;
}
public void run() {
while (true) {
int i = chan.read();
System.out.println(i);
}
}
}
JCSP (Main)
public class ExampleMain {
public static void main (String[] args) {
One2OneChannelInt chan = new
One2OneChannelInt();
Send send = new Send(chan);
Read read = new Read (chan);
.
.
.
}
}
Implementação de Mobilidade de
Canais em LOO1


Canais assíncronos
Existem três tipos de canais:
Canal (canal “principal” passado como parâmetro –
pode dar tanto send quanto receive);
 Input (canal que só pode dar receive);
 Output (canal que só pode dar send)



Os canais são tipados: pode ser qualquer tipo,
inclusive o tipo canal
Canais são tratados como valores (permite
mobilidade)
Dificuldades






BNF original com problemas
Tratamento de canais como valor
O código não refletia a BNF do projeto anterior
Estudo da LOO1
Mudança de escopo
Checa tipos de canais
BNF
Programa ::= "{" DecClasse ";" Comando "}"
Comando ::= Atribuicao
| ComDeclaracao
| While
| IfThenElse
| IO
| Comando ";" Comando
| Skip
| New
| ChamadaMetodo
| ComandoSend
| ComandoReceive
| ComandoConcorrente
| DecCanal
BNF
Skip ::=
ComDeclaracao :: = "{" DecVariavel ";" Comando"}"
ComandoConcorrente :: = “concurrent” "(" Comando "," Comando")"
ComandoSend :: = “send” LeftExpression "(" Expressao ")"
ComandoReceive :: = “receive” LeftExpression "(" LeftExpression ")"
While ::= "while" Expressao do" "{" Comando"}"
IfThenElse ::= "if" Expressao "then" "{" Comando"}"
| "if" Expressao "then" "{" Comando"}" "else" "{"
Comando"}"
ChamadaMetodo ::= Expressao "." Id "(" ListaExpressao ")" | Expressao
"." Id "("")"
ListaExpressao ::= Expressao | Expressao "," ListaExpressao
New ::= LeftExpression ":=" "new" TipoClasse
Atribuicao ::= LeftExpression ":=" Expressao
BNF
IO ::= "write" "(" Expressao ")" | "read" "(" Id ")"
Expressao ::= Valor | ExpUnaria | ExpBinaria | LeftExpression | this
Valor ::= ValorConcreto
ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorNull
| ValorCanal
ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao
ExpBinaria ::= Expressao "+" Expressao
| Expressao "-" Expressao
| Expressao "and" Expressao
| Expressao "or" Expressao
| Expressao "==" Expressao
| Expressao "++" Expressao
LeftExpression ::= Id | AcessoAtributo
AcessoAtributo ::= LeftExpression.Id | this.Id
BNF
DecClasse ::= "classe" Id "{" DecVariavel ";" DecProcedimento "}"
| DecClasse "," DecClasse
DecVariavel ::= Tipo Id "=" Expressao
| DecVariavel "," DecVariavel
| TipoClasse Id ":=" "new" TipoClasse
| DecCanal
DecProcedimento ::= "proc" Id "(" ListaDeclaracaoParametro ")" "{"
Comando "}"
| DecProcedimento "," DecProcedimento
DecCanal ::= TipoCanal Id
ListaDeclaracaoParametro ::= Tipo Id | Tipo Id ","
ListaDeclaracaoParametro
Tipo ::= TipoClasse | TipoPrimitivo | TipoCanal
BNF
TipoClasse ::= Id
TipoCanal ::= “channel” “(“ Tipo “)”
| “input” “(“ Tipo “)”
| “output” “(“ Tipo “)”
TipoPrimitivo ::= "string" | "int" | "boolean"

Classes alteradas









Classes
OO1.jj
Send.java
Receive.java
New.java
DecVariavelObjeto.java
Concorrente.java
ContextoExecucao.java
DecCanal.java
Classes novas




ValorCanal.java
TipoCanal.java (classe nova)
TipoInput.java (classe nova)
TipoOutput.java (classe nova)
FIM

Dúvidas??
Download

Mobilidade para Linguagem Orientada a Objetos 1