Aula de Laboratório
Caché: DGBD Pós-Relacional
• Principais características
• Criação de Classes, Propriedades e
Métodos
• Linguagem para codificação de métodos
• Execução de métodos
O que é o Caché
• SGBD pós-relacional
• Um ambiente de desenvolvimento orientado
a objetos
• Acesso integrado a objeto e SQL
Caché
Caché
Arquitetura
Estrutura Básica
Namespaces
Bancos de Dados
Universidade
E
Empresa
B
A
D
C
Classes e objetos
Cuma classe é uma definição dos dados juntos com sua aplicação lógica;
• uma definição de classe consiste:
<propriedades;
<métodos;
<consultas SQL;
<parâmetros: constantes para a classe;
Cum objeto é uma instância de uma classe;
Criação de classes
Criação de classes
Criação de classes
Criação de propriedades
Criação de propriedades
Criação de propriedades
Criação de métodos
Criação de métodos
Criação de métodos
Métodos
<nome, valor de retorno
<especificação formal de argumentos, características e o seu código.
Características
<um método privado pode ser usado somente por outros métodos de sua
classe;
<um méotod Final não pode ser sobre-escrito por subclasses que o herdem;
<um método que não é um método de Classe é um método de instância;
Métodos
Métodos de instância:
<sempre é chamado para um objeto particular aberto;
do cust.%Save() ; salva este cliente!
do cust.%Close() ; fecha este cliente!
Métodos de classe:
<não referencia um objeto aberto e deve usar a sintaxe ##class
set cus = ##class(User.Customer).%OpenId(id)
set mi = ##class(User.MenuItem).%New()
Codificação
<cada linha do código precisa começar com o caracter <tab>;
<para especificar o valor retornado pelo método, use o comando Quit com
um argumento;
<erros de sintaxe serão indicados por uma marca vermelha;
Any syntax errors will be indicated by a red mark;
<para métodos de expressão, entre sem o <tab>;
<a sintaxe “..” é usada para se referir a outro método ou propriedade da
mesma classe; exemplo: ..Print()
..<prop> (acessando propriedades deste objeto)
..<método de instância> (outro método desta classe)
..<método de classe> (outro método desta classe)
Codificação
Loops For
For <valor inicial>:<valor do incremento>:<valor final { <bloco de código> }
Condição:
if <condição> {código}
elseif <condição> {código}
else {código}
Salvando um objeto em um método:
set st = cust.%Save()
if (st '= 1) {quit st}
Script para Objetos
Básico
Criar um novo objeto:
set <oref> = ##class(<pack>.<class>).%New()
Abrir um objeto existente:
set <oref> = ##class(<pack>.<class>).%OpenId(<id>)
Salvar um objeto:
set st = <oref>.%Save()
Fechar um objeto:
do <oref>.%Close()
Básico
Remover um objeto:
do ##class(<package>.<class>).%DeleteId(<id>)
Remover todos os objetos salvos:
do ##class(<package>.<class>).%KillExtent()
Escrever uma propriedade:
write <oref>.<prop>
Atribuir valor para uma propriedade:
set <oref>.<prop> = <value>
Básico
Ligando dois objetos:
set <oref1>.<prop> = <oref2>
Populando uma classe:
do ##class(<package>.<class>).Populate(<count>)
Fechando todos os objetos na memória:
do $system.OBJ.CloseObjects()
Listar todos os objetos em memória:
do $system.OBJ.ShowObjects() ; "d" for details
Listas
Criar uma nova lista:
set <oref>=##class(%Library.ListOfDataTypes).%New()
Inserir um elemento em uma lista:
do <oref>.Insert(<value>)
Mostrar um elemento de uma lista:
write <oref>.GetAt(<position>)
Mostrar o tamanho de uma lista:
write <oref>.Count()
Limpar os elementos de uma lista:
do <oref>.Clear()
Arrays
Criar um novo array:
set <oref>=##class(%Library.ArrayOfDataTypes).%New()
Inserir um elemento em um array:
do <oref>.SetAt(<value>,<key>)
Mostrar um elemento de um array:
write <oref>.GetAt(<key>)
Mostrar o tamanho de um array:
write <oref>.Count()
Limpar os elementos de um array:
do <oref>.Clear()
Exercício
Implementação do exemplo: Banco de
Dados de Projeto (simplificado)
Projeto
BuscaProjeto
CadastraProjeto
MostraDocumentos
EliminaProjeto
codigo
objetivo
documentos
nome
coordenador
topicos
inícioValidade
fimValidade
Documento
Mostra
Relatório
Técnico
CadastraRT
Mostra
Artigo
CadastraArt
Mostra
Pesquisador
BuscaPesquisador
CadastraPesquisador
BD de Projeto simplificado
codigoDoc
nome
classificação
autPrinc
tipoPubl
localPubl
dataPubl
artigos
nome
especialização
salário
bônusProdução

Classe Projeto
método CadastraProjeto (nomeCoord: %Library.String,
codigo:%Library.Integer, obj: %Library.String, nomeProjeto: %Library.String)
retorna %Library.Status
set pesq = ##class(Aula.Pesquisador).BuscaPesquisador(nomeCoord)
if pesq = 0 quit 0
set proj = ##class(Aula.Projeto).%New()
set proj.codigo = codigo
set proj.objetivo = obj
set proj.nome = nomeProjeto
set proj.coordenador = pesq
do proj.%Save()
quit 1
Classe Pesquisador
método BuscaPesquisador(nome: %Library.String) retorna Pesquisador
&sql(DECLARE iterator CURSOR FOR SELECT ID FROM
Aula.Pesquisador WHERE nome = :nome)
&sql(OPEN iterator) ;"roda" a consulta (depois de “;” vem um comentário)
&sql(FETCH iterator INTO :identificador)
quit:(SQLCODE '= 0) 0 ;retorna 0 se der algum erro
write "identificador: "
write identificador,! ; “!” indica uma quebra de linha
&sql(CLOSE iterator)
set resposta = ##class(Aula.Pesquisador).%OpenId(identificador)
quit resposta
Classe Projeto
método BuscaProjeto (codigoProj: %Library.Integer) retorna Projeto
&sql(DECLARE iterator CURSOR FOR SELECT ID FROM
Aula.Projeto WHERE codigo = :codigoProj)
&sql(OPEN iterator) ;"roda" a consulta
&sql(FETCH iterator INTO :identificador)
quit:(SQLCODE '= 0) 0
write "identificador: "
write identificador,!
&sql(CLOSE iterator)
set resposta = ##class(Aula.Projeto).%OpenId(identificador)
quit resposta
Classe Projeto
método MostraDocumentos (codProjeto: %Library.Integer)
set p= ##class(Aula.Projeto).BuscaProjeto(codProjeto)
set docs = p.documentos ;recupera todos os documentos
for y=1:1:docs.Count() ;percorre esses documentos
{
set d = docs.GetAt(y)
do d.Mostra( )
}
Classe Documento
método Mostra( )
write “execucao do método Documento.Mostra",!
Classe Artigo
método Mostra()
write "tipo", !
write ..tipoPubl
write "nome", !
write ..nome
Classe RelatórioTécnico
método Mostra()
write "inicio: "
write $zd(..inicioValidade) ;converte para o formato de data
write !,"fim: "
write $zd(..fimValidade) ;converte para o formato de data
write !,"nome: “, ..nome
Classe Projeto
método EliminaProjeto (codProj: %Library.Integer) retorna %Library.Status
set proj = ..BuscaProjeto(codProj)
if proj = 0
{
write "nao existe o projeto especificado",!
quit 0
}
set oid = proj.%Oid()
write “oid encontrado: ", oid, !
do ##class(Aula.Projeto).%Delete(oid)
quit 1
Classe Pesquisador
método CadastraPesquisador (nome: %Library.String, especializacao:
%Library.String, salario: %Library.Float, bonus: %Library.Float ) retorna
%Library.Status
set pesq = ##class(Aula.Pesquisador).%New()
set pesq.bonus = bonus
set pesq.salario = salario
set pesq.nome = nome
set pesq.especializacao = especializacao
do pesq.%Save()
quit 1
Classe RelatorioTecnico
método CadastraRT (codDoc: %Library.Integer, nomeDoc: %Library.String, classific:
%Library.String, topicos: %Library.String, codProj: %Library.Integer, inicioVal:
%Library.Date, fimVal: %Library.Date) retorna %Library.Status
set projeto = ##class(Aula.Projeto).BuscaProjeto(codProj)
if projeto = 0
{ write "Nao existe o projeto especificado"
quit 0 }
set relatorio = ##class(Aula.Relatorio).%New()
set relatorio.codigodoc = codDoc
set relatorio.nome = nomeDoc
set relatorio.classificacao = classific
set relatorio.tópicos = topicos
set relatorio.inicio = $zdh(inicioVal) ;converte para o formato de data
set relatorio.fim = $zdh(fimVal) ;converte para o formato de data
do relatorio.%Save()
;inserir o relatório no projeto
set documentos = projeto.documentos
do documentos.Insert(relatorio)
do projeto.%Save()
quit 1
Terminal
• zn “Aula" //muda para o namespace que se deseja trabalhar
• set teste = ##class(Aula.Pesquisador).%New() //cria um novo objeto
• set value = teste.%Save()
• set resultado = ##class(Aula.Pesquisador).BuscaPesquisador("pesquisador1")//chama o
método de classe
• do teste.%Close()
• set teste = ##class(Aula.Pesquisador).%OpenId(5)
• set teste.bonus = 50
• set teste.salario = 5000
• set teste.nome = "pesquisador5"
• set teste.especializacao = "especializacao5"
• do teste.%Save()
• do ##class(Aula.Projeto).CadastraProjeto("pesquisador3",3,"objetivo3","projeto3")
• do ##class(Aula.Relatorio).CadastraRT(4,"relatorio4","classif4", "topico4", "4/4/40", "4/4/44",2)
• set x = ##class(Aula.Projeto).BuscaProjeto(1)
• do ##class(Aula.Projeto).MostraDocumentos(1)
• set x = ##class(Aula.Pesquisador).CadastraPesquisador("pesquisador7","especializacao7",
700, 70)
• set x = ##class(Aula.Projeto).EliminaProj(1)
Classe Pesquisador
método CadastraPesquisador (nome: %Library.String, especializacao:
%Library.String, salario: %Library.Float, bonus: %Library.Float ) retorna
%Library.Status
set pesq = ##class(Aula.Pesquisador).%New()
set pesq.bonus = bonus
set pesq.salario = salario
set pesq.nome = nome
set pesq.especializacao = especializacao
do pesq.%Save()
quit 1
Classe Artigo
método CadastraArt (codDoc: %Library.Integer, nomeDoc: %Library.String, classific: %Library.String,
tipoPubl: %Library.String, localPubl: %Library.String, data: %Library.Date, autPrinc: %Library.String, codProj :
%Library.String) retorna %Library.Status
{
write "começou o método CadastraArt",!
set projeto = ##class(Aula.Projeto).BuscaProjeto(codProj)
if projeto = 0
{ write "Nao existe o projeto especificado"
quit 0 }
set pesquisador = ##class(Aula.Pesquisador).BuscaPesquisador(autPrinc)
if pesquisador = 0
{ write "Nao existe o pesquisador especificado"
quit 0 }
set artigo = ##class(Aula.Artigo).%New()
set artigo.codigoDoc = codDoc
set artigo.nome = nomeDoc
set artigo.classificacao = classific
set artigo.tipoPubl = tipoPubl
set artigo.dataPubl = $zdh(data) ;converte para o formato de data
set artigo.localPubl = localPubl
set artigo.autPrinc = pesquisador
do artigo.%Save()
;inserir o artigo no projeto
set documentos = projeto.documentos
do documentos.Insert(artigo)
do projeto.%Save()
write "terminou o método CadastraArt",!
quit 1
}
Classe Pesquisador
método MostraArtigos ( ) retorna null
write "Artigos publicados por ", ..nome, ":", !
set arts = ..artigos
for i=1:1:arts.Count()
{
set temp = arts.GetAt(i)
write "Nome do artigo: ", temp.nome,!
write "Local da publicacao: ", temp.localPubl,!
write "Classificacao: ", temp.classificacao,!
write "Data da publicacao: ", $zd(temp.data),!!
}
write "Fim da lista de artigos de ", ..nome
Download

O que é o Caché