Aula de Laboratório Caché: DGBD Pós-Relacional

Preview:

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Aula de LaboratórioCaché: 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

A

B

CDE

Universidade Empresa

Classes e objetos

• uma definição de classe consiste:

propriedades;

métodos;

consultas SQL;

parâmetros: constantes para a classe;

um objeto é uma instância de uma classe;

uma classe é uma definição dos dados juntos com sua aplicação lógica;

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 suaclasse;

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 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()

Métodos

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 comum 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 damesma 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)

Loops For

For <valor inicial>:<valor do incremento>:<valor final { <bloco de código> }

Codificação

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)

topicosinícioValidade

fimValidade

autPrinctipoPubllocalPubldataPubl

codigo objetivodocumentosnomecoordenador

codigoDocnomeclassificação

artigos nomeespecializaçãosaláriobônusProdução

Projeto

BuscaProjetoCadastraProjetoMostraDocumentosEliminaProjeto

Documento

Mostra

Relatório Técnico

CadastraRTMostra

Artigo

CadastraArtMostra

Pesquisador

BuscaPesquisador CadastraPesquisador

BD de Projeto simplificado

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 0set proj = ##class(Aula.Projeto).%New()set proj.codigo = codigoset proj.objetivo = objset proj.nome = nomeProjetoset 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 errowrite "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 documentosfor 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 ..tipoPublwrite "nome", !write ..nome

Classe RelatórioTécnico

método Mostra()

write "inicio: "write $zd(..inicioValidade) ;converte para o formato de datawrite !,"fim: "write $zd(..fimValidade) ;converte para o formato de datawrite !,"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 = bonusset pesq.salario = salarioset pesq.nome = nomeset pesq.especializacao = especializacaodo 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 = codDocset relatorio.nome = nomeDocset relatorio.classificacao = classificset relatorio.tópicos = topicosset relatorio.inicio = $zdh(inicioVal) ;converte para o formato de dataset relatorio.fim = $zdh(fimVal) ;converte para o formato de datado relatorio.%Save();inserir o relatório no projetoset documentos = projeto.documentosdo 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 = bonusset pesq.salario = salarioset pesq.nome = nomeset pesq.especializacao = especializacaodo 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 = codDocset artigo.nome = nomeDocset artigo.classificacao = classificset artigo.tipoPubl = tipoPublset artigo.dataPubl = $zdh(data) ;converte para o formato de dataset artigo.localPubl = localPublset artigo.autPrinc = pesquisadordo artigo.%Save();inserir o artigo no projetoset documentos = projeto.documentosdo 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 = ..artigosfor 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