O documento descreve um programa sobre programação orientada a objetos com NHibernate. O programa é dividido em 4 dias abordando fundamentos de NHibernate, associações, herança e objetos de valor. Cada dia inclui explicações e exercícios práticos sobre os tópicos.
O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo:
1) Objetos Python possuem atributos (dados) e métodos (comportamentos);
2) Classes definem tipos de objetos com atributos e métodos comuns;
3) Instâncias de classes são objetos concretos que herdam atributos e métodos da classe.
TREINAMENTO PARA SOLUCIONAR PROBLEMAS COMPUTACIONAIS COM A LINGUAGEM DE PROGRAMAÇÃO C++
Estrutura geral de um programa C/C++. Principais Comandos.
Estruturas condicionais e Estruturas de Repetição.
Exercícios.
O documento apresenta 10 exercícios de programação orientada a objetos em Java. Os exercícios abordam conceitos como polimorfismo, encapsulamento, tipos de retorno de métodos, laços de repetição, vetores e diagrama de classes para um sistema simples de reserva de quartos de hotel.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
Este documento apresenta uma palestra introdutória sobre C++. Aborda conceitos básicos como estrutura de programa, variáveis, tipos de dados e operadores. Também discute objetos, classes e recursos interessantes como containers e templates. Por fim, lista referências bibliográficas e conclusões.
O documento fornece uma introdução às principais características da linguagem C++, incluindo sua história, compilação, tipos de dados, ponteiros, referências, arrays, estruturas de controle e namespaces. É destacado que C++ é uma linguagem multi-paradigma que oferece programação procedural, orientada a objetos e metaprogramação.
O documento apresenta os conceitos de objetos, classes, construtores, destrutores e encapsulamento em C++. Introduz objetos e classes no mundo real e em C++, explicando que classes classificam objetos com atributos e funções semelhantes. Discute construtores para inicializar objetos e destrutores para limpar a memória. Também explica como o encapsulamento controla o acesso aos membros de uma classe usando especificadores de acesso como público e privado.
O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo:
1) Objetos Python possuem atributos (dados) e métodos (comportamentos);
2) Classes definem tipos de objetos com atributos e métodos comuns;
3) Instâncias de classes são objetos concretos que herdam atributos e métodos da classe.
TREINAMENTO PARA SOLUCIONAR PROBLEMAS COMPUTACIONAIS COM A LINGUAGEM DE PROGRAMAÇÃO C++
Estrutura geral de um programa C/C++. Principais Comandos.
Estruturas condicionais e Estruturas de Repetição.
Exercícios.
O documento apresenta 10 exercícios de programação orientada a objetos em Java. Os exercícios abordam conceitos como polimorfismo, encapsulamento, tipos de retorno de métodos, laços de repetição, vetores e diagrama de classes para um sistema simples de reserva de quartos de hotel.
O documento discute conceitos de orientação a objetos em Python, definindo objetos como componentes de software que incluem dados e comportamentos. Explica que classes definem tipos de objetos abstratos e instâncias de classes são objetos concretos. Demonstra a criação de uma classe Cao e instância rex para ilustrar a relação entre classe e objeto.
Este documento apresenta uma palestra introdutória sobre C++. Aborda conceitos básicos como estrutura de programa, variáveis, tipos de dados e operadores. Também discute objetos, classes e recursos interessantes como containers e templates. Por fim, lista referências bibliográficas e conclusões.
O documento fornece uma introdução às principais características da linguagem C++, incluindo sua história, compilação, tipos de dados, ponteiros, referências, arrays, estruturas de controle e namespaces. É destacado que C++ é uma linguagem multi-paradigma que oferece programação procedural, orientada a objetos e metaprogramação.
O documento apresenta os conceitos de objetos, classes, construtores, destrutores e encapsulamento em C++. Introduz objetos e classes no mundo real e em C++, explicando que classes classificam objetos com atributos e funções semelhantes. Discute construtores para inicializar objetos e destrutores para limpar a memória. Também explica como o encapsulamento controla o acesso aos membros de uma classe usando especificadores de acesso como público e privado.
Este documento apresenta uma palestra sobre classes em C++. Aborda novos conceitos como organização de projetos em arquivos separados, sobrecarga de funções e construtores, parâmetros padrão e cópia de objetos. A próxima palestra aprofundará ainda mais os conhecimentos sobre classes.
1) O documento descreve um curso de MATLAB que aborda tópicos especiais como importação e exportação de dados, interfaces de programação, arquivos de áudio e vídeo e interfaces gráficas com o usuário.
2) É detalhada a importação e exportação de dados através de arquivos de texto, Excel, MATLAB e a comunicação dinâmica de dados com o Excel e Word via ActiveX.
3) Também são apresentados exemplos de leitura de arquivos de áudio, imagens, compilação de funções em C e criação
O documento descreve conceitos e definições relacionados a estruturas em C, incluindo:
1) Estruturas agrupam variáveis de diferentes tipos sob um único nome e são usadas para armazenar registros em arquivos;
2) A declaração de estruturas define os membros mas não aloca memória, enquanto variáveis de estrutura alocam memória;
3) Os membros de uma estrutura podem ser acessados usando o operador ponto ou seta.
O documento discute conceitos de programação como variáveis dinâmicas, abstração e recursividade. Ele introduz tópicos como sistemas analógicos versus digitais, computadores, software, linguagens de programação e compiladores. Também explica variáveis dinâmicas versus estáticas, alocação dinâmica de memória, estruturas de dados dinâmicas e ponteiros. Por fim, aborda abstração, tipos abstratos de dados, interfaces, classes e métodos abstratos.
Este documento discute pacotes e encapsulamento na API Java 2. Aborda os principais pacotes da API Java como java.lang, java.util, java.io e java.net. Explora classes fundamentais como Object e classes utilitárias como Date e Math. Também explica como criar pacotes personalizados e arquivos JAR e métodos importantes como equals(), hashCode() e clone().
O diagrama de colaboração modeliza o processo de saída de um veículo de um parque de estacionamento com cancela automática, representando a interação entre os objetos cancela, sensor e maquineta. O condutor introduz o cartão na maquineta, que verifica a situação do cartão e levanta a cancela. O sensor notifica a maquineta quando o veículo passa, fazendo-a descer a cancela.
1) O documento apresenta fundamentos da programação orientada a objetos em Java, incluindo classes, atributos, métodos, herança, abstração e encapsulamento.
2) A programação orientada a objetos modela sistemas como coleções de objetos que cooperam através de mensagens, ao contrário da programação estruturada que se concentra em funções.
3) Classes descrevem os dados e comportamentos de objetos através de atributos e métodos.
Python não força o programador a pensar em objetos, mas eles fazem parte da linguagem desde o início, incluindo conceitos avançados como sobrecarga de operadores, herança múltipla e introspecção. Com sua sintaxe simples, é muito natural aprender orientação a objetos em Python
O documento descreve como C# é uma linguagem de programação moderna e orientada a objetos. Ele explica porque usar C# ao invés de linguagens de baixo nível como Assembly, e como a Common Language Runtime permite que programas C# sejam executados em diferentes plataformas. O documento também cobre tópicos como tipos de dados, operadores, condições, ciclos, exceções, orientação a objetos, interfaces e namespaces na linguagem C#.
Este documento apresenta uma série de exercícios sobre tipos primitivos em Java, incluindo inteiros, reais, caracteres e booleanos. Os exercícios cobrem tópicos como declaração e atribuição de variáveis, operações aritméticas, conversão de tipos e métodos matemáticos.
Aula teórica 6 da unidade (disciplina) de Programação Orientada por Objectivos para os cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.
O documento discute polimorfismo e classes abstratas em programação orientada a objetos. O polimorfismo permite que métodos sejam invocados de forma unificada em subclasses de uma superclasse, enquanto classes abstratas definem comportamentos comuns sem permitir instanciação de objetos.
[1] O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo classes, polimorfismo, abstração, herança, construtores, especialização de classes e herança múltipla. [2] Também aborda atributos de classes e instâncias, métodos mágicos, protocolos e getters/setters. [3] O documento fornece exemplos de como esses conceitos são implementados na linguagem Python.
O documento discute iteração em diferentes linguagens de programação como C, Java e Python. Ele apresenta exemplos de como iterar sobre argumentos da linha de comando, strings e outros iteráveis em cada linguagem. O documento também explica conceitos-chave relacionados à iteração em Python como iteráveis, iteradores, geradores e o uso do método enumerate().
O documento discute técnicas de programação orientada a objetos, incluindo polimorfismo, sobrecarga e herança múltipla. Aborda conceitos como polimorfismo de inclusão, redefinição de métodos e exemplos de sobrecarga de métodos construtores e operadores.
1) O documento apresenta uma introdução ao Python, abordando tópicos como tipos de dados básicos, operadores, strings, listas e como aprender a programar de forma autodidata.
2) São explicados conceitos como blocos de código, comentários, números inteiros e de ponto flutuante, booleanos, None, strings, conversão entre encodings e operações com listas.
3) Dicas como usar o interpretador interativo, help, dir e documentação são dados para quem deseja aprender Python de forma independente.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Este documento discute três tópicos principais: 1) A operação toString que é usada para converter objetos em strings; 2) A diferença entre classes, instâncias e objetos; 3) Como realizar leituras usando a classe Scanner.
Concepts and types of anomaly detection and also step-by-step explanation on how to detect anomalies with normal distribution and multivariate normal distribution.
Um Ambiente Grafico para Desenvolvimento de Software de Controle para Robos M...Humberto Marchezi
Slides apresentam um ambiente de desenvolvimento estilo IDE para robos móveis. O código escrito nesse ambiente é executado pelo servidor de robô do projeto Player Stage e pode funcionar num robô real também.
O documento apresenta padrões de projeto, divididos em três partes: padrões estruturais, comportamentais e criacionais. Os padrões de projeto são soluções reutilizáveis para problemas comuns na programação, prevenindo a reinvenção da roda e promovendo melhor comunicação entre desenvolvedores.
Este documento apresenta uma palestra sobre classes em C++. Aborda novos conceitos como organização de projetos em arquivos separados, sobrecarga de funções e construtores, parâmetros padrão e cópia de objetos. A próxima palestra aprofundará ainda mais os conhecimentos sobre classes.
1) O documento descreve um curso de MATLAB que aborda tópicos especiais como importação e exportação de dados, interfaces de programação, arquivos de áudio e vídeo e interfaces gráficas com o usuário.
2) É detalhada a importação e exportação de dados através de arquivos de texto, Excel, MATLAB e a comunicação dinâmica de dados com o Excel e Word via ActiveX.
3) Também são apresentados exemplos de leitura de arquivos de áudio, imagens, compilação de funções em C e criação
O documento descreve conceitos e definições relacionados a estruturas em C, incluindo:
1) Estruturas agrupam variáveis de diferentes tipos sob um único nome e são usadas para armazenar registros em arquivos;
2) A declaração de estruturas define os membros mas não aloca memória, enquanto variáveis de estrutura alocam memória;
3) Os membros de uma estrutura podem ser acessados usando o operador ponto ou seta.
O documento discute conceitos de programação como variáveis dinâmicas, abstração e recursividade. Ele introduz tópicos como sistemas analógicos versus digitais, computadores, software, linguagens de programação e compiladores. Também explica variáveis dinâmicas versus estáticas, alocação dinâmica de memória, estruturas de dados dinâmicas e ponteiros. Por fim, aborda abstração, tipos abstratos de dados, interfaces, classes e métodos abstratos.
Este documento discute pacotes e encapsulamento na API Java 2. Aborda os principais pacotes da API Java como java.lang, java.util, java.io e java.net. Explora classes fundamentais como Object e classes utilitárias como Date e Math. Também explica como criar pacotes personalizados e arquivos JAR e métodos importantes como equals(), hashCode() e clone().
O diagrama de colaboração modeliza o processo de saída de um veículo de um parque de estacionamento com cancela automática, representando a interação entre os objetos cancela, sensor e maquineta. O condutor introduz o cartão na maquineta, que verifica a situação do cartão e levanta a cancela. O sensor notifica a maquineta quando o veículo passa, fazendo-a descer a cancela.
1) O documento apresenta fundamentos da programação orientada a objetos em Java, incluindo classes, atributos, métodos, herança, abstração e encapsulamento.
2) A programação orientada a objetos modela sistemas como coleções de objetos que cooperam através de mensagens, ao contrário da programação estruturada que se concentra em funções.
3) Classes descrevem os dados e comportamentos de objetos através de atributos e métodos.
Python não força o programador a pensar em objetos, mas eles fazem parte da linguagem desde o início, incluindo conceitos avançados como sobrecarga de operadores, herança múltipla e introspecção. Com sua sintaxe simples, é muito natural aprender orientação a objetos em Python
O documento descreve como C# é uma linguagem de programação moderna e orientada a objetos. Ele explica porque usar C# ao invés de linguagens de baixo nível como Assembly, e como a Common Language Runtime permite que programas C# sejam executados em diferentes plataformas. O documento também cobre tópicos como tipos de dados, operadores, condições, ciclos, exceções, orientação a objetos, interfaces e namespaces na linguagem C#.
Este documento apresenta uma série de exercícios sobre tipos primitivos em Java, incluindo inteiros, reais, caracteres e booleanos. Os exercícios cobrem tópicos como declaração e atribuição de variáveis, operações aritméticas, conversão de tipos e métodos matemáticos.
Aula teórica 6 da unidade (disciplina) de Programação Orientada por Objectivos para os cursos de LIGE, LEI e LETI no ISCTE-IUL no 2.º semestre do ano lectivo de 2009/2010.
O documento discute polimorfismo e classes abstratas em programação orientada a objetos. O polimorfismo permite que métodos sejam invocados de forma unificada em subclasses de uma superclasse, enquanto classes abstratas definem comportamentos comuns sem permitir instanciação de objetos.
[1] O documento discute conceitos fundamentais de orientação a objetos em Python, incluindo classes, polimorfismo, abstração, herança, construtores, especialização de classes e herança múltipla. [2] Também aborda atributos de classes e instâncias, métodos mágicos, protocolos e getters/setters. [3] O documento fornece exemplos de como esses conceitos são implementados na linguagem Python.
O documento discute iteração em diferentes linguagens de programação como C, Java e Python. Ele apresenta exemplos de como iterar sobre argumentos da linha de comando, strings e outros iteráveis em cada linguagem. O documento também explica conceitos-chave relacionados à iteração em Python como iteráveis, iteradores, geradores e o uso do método enumerate().
O documento discute técnicas de programação orientada a objetos, incluindo polimorfismo, sobrecarga e herança múltipla. Aborda conceitos como polimorfismo de inclusão, redefinição de métodos e exemplos de sobrecarga de métodos construtores e operadores.
1) O documento apresenta uma introdução ao Python, abordando tópicos como tipos de dados básicos, operadores, strings, listas e como aprender a programar de forma autodidata.
2) São explicados conceitos como blocos de código, comentários, números inteiros e de ponto flutuante, booleanos, None, strings, conversão entre encodings e operações com listas.
3) Dicas como usar o interpretador interativo, help, dir e documentação são dados para quem deseja aprender Python de forma independente.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Este documento discute três tópicos principais: 1) A operação toString que é usada para converter objetos em strings; 2) A diferença entre classes, instâncias e objetos; 3) Como realizar leituras usando a classe Scanner.
Concepts and types of anomaly detection and also step-by-step explanation on how to detect anomalies with normal distribution and multivariate normal distribution.
Um Ambiente Grafico para Desenvolvimento de Software de Controle para Robos M...Humberto Marchezi
Slides apresentam um ambiente de desenvolvimento estilo IDE para robos móveis. O código escrito nesse ambiente é executado pelo servidor de robô do projeto Player Stage e pode funcionar num robô real também.
O documento apresenta padrões de projeto, divididos em três partes: padrões estruturais, comportamentais e criacionais. Os padrões de projeto são soluções reutilizáveis para problemas comuns na programação, prevenindo a reinvenção da roda e promovendo melhor comunicação entre desenvolvedores.
We present basic concepts of machine learning such as: supervised and unsupervised learning, types of tasks, how some algorithms work, neural networks, deep learning concepts, how to apply it in your work.
This document provides an overview of machine learning concepts including supervised and unsupervised learning algorithms. It describes naive Bayes classifiers which use probabilistic models to classify data based on features. It also describes k-means clustering which groups unlabeled data into k clusters by minimizing distances between data points and assigned cluster centroids. The document provides examples of applying these algorithms to tasks like document and image classification, customer segmentation, and grouping related news articles.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
1) O documento discute o Domain-Driven Design (DDD), uma abordagem focada no domínio e na lógica de negócios.
2) As duas principais premissas do DDD são desenvolver um modelo que reflita o domínio e usar uma linguagem ubíqua compartilhada entre os especialistas de negócios e a equipe de desenvolvimento.
3) O DDD enfatiza a separação de camadas com base no domínio, utilizando conceitos como entidades, valores, agregações, serviços, fábricas e repositó
Este documento discute as aplicações da linguagem Tcl e Starkits. Ele explica como scripts podem ser interativos, de alto nível e portáteis. Também descreve a sintaxe básica de Tcl, como listas, arrays, dicionários e namespaces funcionam, e como criar aplicações encapsuladas em Starkits.
1) O documento introduz a linguagem R, abordando sua história, instalação, editores de texto, manipulação de objetos, entrada e saída de dados, e distribuições de probabilidade.
2) São apresentados conceitos sobre modos e atributos de objetos no R, como vetores, matrizes, listas e data frames.
3) O documento também explica a importação e exportação de dados, e como gerar gráficos e saídas em diferentes formatos a partir do R.
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
O documento apresenta os principais conceitos da linguagem C, incluindo estruturas de dados como vetores e matrizes, uso de ponteiros, funções e diretivas de compilação.
O documento apresenta os principais conceitos da linguagem C, incluindo estruturas de dados como vetores e matrizes, uso de ponteiros, funções e diretivas de compilação. O objetivo é preparar o ambiente de desenvolvimento e revisar a sintaxe da linguagem C.
O documento descreve uma linguagem de programação chamada Pascal. O Pascal foi criado em 1971 por Niklaus Wirth para promover o uso de código estruturado. O Pascal foi muito popular na década de 1980 e é frequentemente usado para ensinar conceitos básicos de programação. O documento explica elementos-chave do Pascal como variáveis, constantes, operadores, estruturas de decisão e repetição.
O documento apresenta uma introdução à linguagem C, incluindo seu histórico, estrutura básica de programas, diretivas para incluir bibliotecas, e exemplos de entrada e saída de dados. É apresentado o ambiente Dev-C++ para desenvolvimento de programas em C.
O documento apresenta uma introdução à linguagem C, incluindo seu histórico, estrutura básica de programas, diretivas para incluir bibliotecas, e exemplos de entrada e saída de dados. É descrito como usar o ambiente de desenvolvimento Dev-C++ para editar, compilar e executar programas em C.
Este documento apresenta uma introdução à linguagem de programação C. Ele começa explicando o processo de tradução de código fonte para código objeto e as diferenças entre compiladores e interpretadores. Em seguida, descreve brevemente a história da linguagem C e sua estrutura básica de programação. Por fim, apresenta diretivas para pré-processadores, variáveis, entrada e saída de dados e o ambiente de desenvolvimento Dev-C++.
O documento apresenta os objetivos e conteúdos de uma disciplina de Algoritmos e Estrutura de Dados II. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados e listas ligadas, com foco em definir formalmente estruturas de dados e selecioná-las para aplicações.
O documento apresenta os objetivos e conteúdos de uma disciplina sobre algoritmos e estruturas de dados. Os tópicos incluem listas lineares, pilhas, filas, classificação de dados, recursividade e tipos abstratos de dados.
O documento resume as principais características do MongoDB, um banco de dados NoSQL orientado a documentos e esquema-livre. Ele explica que o MongoDB é escalável, de alto desempenho e open source, armazena dados em formato de documentos JSON ou BSON, permite esquemas flexíveis e não requer migrations. Além disso, ressalta que as propriedades ACID ficam a cargo do programador e apresenta alguns comandos básicos para usar o MongoDB via terminal.
1) O documento discute tipos abstratos de dados e listas lineares.
2) Apresenta conceitos fundamentais sobre definição de tipos abstratos usando a linguagem C.
3) Discutem propriedades e operações básicas de listas lineares seqüenciais e encadeadas.
1. Introdução a estruturas de dados, incluindo Tipos de Dados Abstractos (TDA), ponteiros, funções e estruturas definidas pelo programador.
2. Listas lineares como listas sequenciais, ligadas, circulares e duplamente ligadas e implementações de pilhas e filas.
3. Árvores, incluindo representação, terminologia e tipos como binárias e balanceadas.
4. Ordenação com métodos como seleção, inserção, shellsort e quicksort.
5. Pesquisa com métodos sequencial, binária e em
Slides do mini-curso de MongoDB realizado no Workshop de Software Livre 2010 do CInLUG, no Centro de Informática da Universidade Federal de Pernambuco em 24/08/2010. Instrutores: Brunno Gomes (@brunnogomes) e Daker Fernandes (@dakerfp).
O documento discute as vantagens de usar linguagens de script como Tcl e XOTcl para desenvolvimento rápido de aplicações. Ele apresenta ferramentas como Starkits, Critcl e Bibliotheca que permitem empacotar scripts e extensões de forma portável e criar interfaces gráficas ricas. O documento também descreve como XOTcl adiciona suporte a objetos, classes, filtros e slots para Tcl, permitindo desenvolvimento orientado a objetos.
O documento resume os principais conceitos sobre estruturas em C/C++. Em 3 frases:
1) Apresenta o que são estruturas (structs) em C/C++, que permitem agrupar variáveis de tipos diferentes sob um único nome para manipulação conveniente de dados.
2) Explica que estruturas e tipos abstratos de dados (TADs) podem ser implementados em C/C++ através de typedef e structs, encapsulando dados e operações em funções.
3) Fornece um exemplo de implementação de um TAD ContaBanc
O documento apresenta uma introdução à linguagem de programação C, abordando seus principais conceitos como variáveis, tipos de dados, operadores, funções printf() e scanf(), entre outros. Em 3 frases: O documento fornece uma visão geral da sintaxe da linguagem C, apresentando seus elementos básicos como declaração de variáveis, tipos de dados, funções de entrada e saída e operadores aritméticos.
2. Programação OO com NHibernate
Agenda
Dia 1: Fundamentos de NHibernate
Para que serve ?
Quais as vantagens ?
O que é mapeamento objeto-relacional ?
Como funciona o mapeamento objeto-relacional no NHibernate ?
Exercícios (Mapeando uma classe simples – apenas
propriedades)
3. Programação OO com NHibernate
Agenda
Dia 2: Associações no NHibernate
Como implementar uma associação vários-para-um (simples) ?
Exercício
Como implementar uma associação vários-para-um (posse) ?
Exercício
Como implementar uma associação um-para-vários ?
Exercício
4. Programação OO com NHibernate
Agenda
Dia 3: Associações no Nhibernate e Herança
Como implementar uma associação vários-para-vários ?
Exercício
Herança
Uma Tabela para cada Classe
Exercício
Uma Tabela para Toda a Herança
Exercício
5. Programação OO com NHibernate
Agenda
Dia 4: Objetos de Valor
Objetos de Valor e Entidades
Como implementar um objetos de valor
Exercício
6. Fundamentos de NH
Para que serve ?
Automatizar a relação entre dois mundos:
As tabelas/visões do banco relacional ( dados )
As classes do mundo dos objetos ( domínio do problema )
Modelo de Objetos Modelo de Dados
class PessoaFisica table PessoaFisica
session
select
class Documento .SaveUpdate(p); table Documento
insert
NHibernate
update
class Endereco session table Endereco
remove
.Remove(p);
class table
TipoDocumento TipoDocumento
7. Fundamentos de NH
Para que serve ?
Geração Automática de Comandos SQL
TipoDocumento tp = new TipoDocumento(); insert into Geral_TipoDocumento
tp.Descricao = “Tipo Doc Qualquer”; ( descricao ) values
( “Tipo Doc Qualquer” )
session.SaveOrUpdate(tp);
select
TipoDocumento tp = session tp.codTipoDocumento, tp.descricao
.Get<TipoDocumento>(12); from Geral_TipoDocumento tp
where tp.codTipoDocumento = 12
tp.Descricao = “Outro Tipo Doc”;
update Geral_TipoDocumento tp
set
session.SaveOrUpdate(tp); tp.descricao = “Outro Tipo Doc”
where tp.codTipoDocumento = 12
session.Delete(tp); delete Geral_TipoDocumento
where tp.codTipoDocumento = 12
8. Fundamentos de NH
Ao invés disso (Programação comum)
if (nome == string.Empty)
Vantagens {
throw new Exception(“nome vazio”);
POO – Abstrair }
if (numCPF == null)
complexidade das {
throw new Exception(“cpf não foi informado”);
regras de negócio }
......... Lógica para validar o CPF..........
(Escrever código que if (numCEP == null)
parece fácil) {
throw new Exception(“CEP não informado”);
}
Isso (Programação OO)
............. Lógica para validar o CEP ...............
PessoaFisica p=new PessoaFisica( ............. Lógica para trazer endereco pelo CEP..
nome, string sql = “insert into Pessoa (nome, cpf,
new DocumentoCPF(numCPF), numero, cep, codLogradouro, codBairro,
new Endereco(numCEP, codLocalidade, codEstado, codPais) values
numEndereco)); (“nome + ”,” + cpf + ”,” + numero + ”,” + cep + ”,” +
codLogr.................................
session.Save(p); SqlCommand sql = new SqlCommand(sql);
.......... Continua e nem cabe aqui o código .......
9. Fundamentos de NH
Vantagens
Essa relação não precisa ser 1 classe = 1
tabela havendo um espaço para flexibilidade
entre os dois modelos
Modelo de Objetos Modelo de Dados
Pessoa TabPesso
a
Pessoa Pessoa TabDocument
o
Document Taxa
o TabDocument
ValorFinanceiro o
10. Fundamentos de NH
Vantagens
Permite que o DBA se concentre na melhor
forma de modelar os dados e os
Analistas/Programadores se concentrem na
melhor forma de representar as entidades e
regras do problema a ser modelado
11. Fundamentos de NH
Vantagens
Classes podem ser escritas em C# puro sem
qualquer tipo de implementação específica
como herdar de classe específica ou
public classinterface
ImpostoX public class ImpostoX public class ImpostoX
{ { {
protected decimal _valor; protected decimal _valor; protected decimal _valor;
protected ImpostoX() { } public ImpostoX() { } public ImpostoX() { }
public ImpostoX(decimal valor) public decimal Valor { public void AtribuirValor
{ get { return _valor; } (decimal valor)
_valor = valor; set { _valor = value; } {
} } _valor = valor;
public decimal Valor } }
{ public decimal ObterValor( )
get { return _valor; } {
} return _valor;
} }
}
12. Fundamentos de NH
Vantagens
Reuso de código ao invés de copy/paste
Garantia de qualidade: testes unitários
Legibilidade, manutenibilidade, extensibilidade, etc.
13. Fundamentos de NH
O que é mapeamento objeto-relacional ?
Técnica que consiste em traduzir (criar um tipo
“de .... - para ... “) entre as classes e suas
propriedades no modelo-de-objetos e as
tabelas/visões e suas colunas no modelo de dados
No NHibernate esse mapeamento é feito através de
arquivos no padrão XML ( *.hbm.xml )
A partir desses arquivos, o NHibernate sabe como
gerar os SQLs automatizados para as classes
14. Fundamentos de NH
O que é mapeamento objeto-relacional ?
public class TipoHistorico
{
protected TipoHistorico( ) { }
public TipoHistorico
(string descricao) { tabela Geral_TipoHistorico
_descricao = descricao;
} codTipoHistorico int PK
protected long _id;
public long Id { descricao varchar(50)
get { return _id; }
set { _id = value; }
}
protected string _descricao;
public string Descricao {
get { return _descricao; }
set { _descricao = value; }
}
15. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
TipoDocumento.cs
using System;
namespace ControleCorporativo.ControleGeral.DP
{
public class TipoDocumento
{
private long _id;
public long Id
{ get { return _id; } set { _id = value; } }
private string _descricao;
public string Descricao
{ get { return _descricao; } set { _descricao =
value; } }
}
}
16. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Tabela Geral_TipoDocumento
create table Geral_TipoDocumento
(
codTipoDocumento INT primary key,
descricao varchar(60)
)
17. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
TipoDocumento.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="SistemaX.Dominio">
<class name="ControleCorporativo.ControleGeral.DP.TipoDocumento"
table="Geral_TipoDocumento">
<id name="Id" column="codTipoDocumento">
<generator class="identity"/>
</id>
<property name="Descricao" column="descricao" access="field.camelcase-
underscore"/>
</class>
</hibernate-mapping>
18. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Configuração: ( necessárioconfiguração para o NHibernate
Criando uma classe de na primeira vez )
using System;
using NHibernate.Cfg;
namespace SistemaX.Persistencia
{
public class ConfiguracaoNH
{
public static Configuration CriarConfiguracao()
{
Configuration config = new Configuration();
config.Properties["query.substitutions"] = "true 1,false 0";
config.Properties["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";
config.Properties["dialect"] = "NHibernate.Dialect.MsSql2000Dialect";
config.Properties["connection.driver_class"] = "NHibernate.Driver.SqlClientDriver";
config.Properties["connection.connection_string"] =
"server=ColibriSQL2005;database=bdcurso;user id=usr_aluno;"+
"password=aluno;connect timeout=60";
config.AddAssembly("SistemaX.Dominio");
return config;
}
}
}
19. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Criando um singleton para a ISessionFactory vez )
Configuração: ( necessário na primeira (NHibernateHelper.cs)
using NHibernate;
namespace SistemaX.Persistencia
{
public class NHibernateHelper
{
// A ISessionFactory é unica para toda a aplicação e
// é responsável por processar todos os mapeamentos
// do NHibernate
private static readonly ISessionFactory sessionFactory =
ConfiguracaoNH.CriarConfiguracao().BuildSessionFactory();
public static ISessionFactory ObterSessaoFactory()
{
return sessionFactory;
}
}
}
20. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Inserindo
// Abre a sessao com o banco
ISession sessao = NHibernateHelper.ObterSessaoFactory().OpenSession();
// Cria um tipo de documento
TipoDocumento tp = new TipoDocumento() { Descricao = “Novo Tipo Documento” };
// Inicia Transação
ITransaction tx = sessao.BeginTransaction();
// Salva o tipo de documento
sessao.Save(tp);
// Confirma Transação
tx.Commit();
// Fecha a sessão com o banco
sessao.Close();
21. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Alterando
// Abre a sessao com o banco
ISession sessao = NHibernateHelper.ObterSessaoFactory().OpenSession();
// Cria um tipo de documento
TipoDocumento tp = sessao.Get<TipoDocumento>(10);
// Inicia Transação
ITransaction tx = sessao.BeginTransaction();
// Salva o tipo de documento
sessao.Update(tp);
// Confirma Transação
tx.Commit();
// Fecha a sessão com o banco
sessao.Close();
22. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Removendo
// Abre uma sessão com o banco
ISession session = NHibernateHelper.ObterSessaoFactory().OpenSession();
// Inicia uma transação
ITransaction transacao = session.BeginTransaction();
// Recupera um tipo de documento com chave = 10
TipoDocumento tipoDocumento = session.Get<TipoDocumento>(10);
// Deletando um tipo de documento
session.Delete(tipoDocumento);
// Confirma a transação
transacao.Commit();
// Fecha a sessão com o banco
session.Close();
23. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Consultando (com HQL)
// Abre uma sessão com o banco
ISession session = NHibernateHelper.ObterSessaoFactory().OpenSession();
// Executa uma consulta em HQL, resultado como lista de objetos
string strHQL = “from TipoDocumento tp where tp.Descricao like '%CP%'”;
IList<TipoDocumento> lstResultado = session.CreateQuery(strHQL)
.List<TipoDocumento>();
string strMensagem = string.Empty;
foreach(TipoDocumento tp in lstResultado)
{
strMensagem += “ Id = “ + tp.Id + “ Desc = “ + tp.Descricao + “n”;
}
MessageBox.Show(strMensagem);
// Fecha a sessão com o banco
24. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Consultando (com HQL)
// Abre uma sessão com o banco
ISession session = NHibernateHelper.ObterSessaoFactory().OpenSession();
// Executa uma consulta em HQL, resultado como lista de objetos
IList<TipoDocumento> lstResultado = (from tp in session.Linq<TipoDocumento>()
where
tp.Descricao.Contains(“CP”)
select tp).ToList();
string strMensagem = string.Empty;
foreach(TipoDocumento tp in lstResultado)
{
strMensagem += “ Id = “ + tp.Id + “ Desc = “ + tp.Descricao + “n”;
}
MessageBox.Show(strMensagem);
// Fecha a sessão com o banco
25. Fundamentos de NHibernate
Como funciona o mapeamento objeto-relacional no
NHibernate ?
Template de mapeamento
<?xml version ="1.0" encoding ="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2 " assembly="[DLL onde está a classe] "
namespace="[namespace da classe (using)] ">
<class name="[nome da classe] " table="[nome da tabela] " lazy="true">
<id name="[propriedade de id] " column="[chave primária] " type="[nome do tipo na classe] ">
<generator class="[ native | identity | sequence | assigned | outros ] "/>
</id>
<property name="[campo1 da classe] " type="[tipo na classe] " column="[coluna1 na tabela] "
accessor ="field.camelcase-underscore " />
<property name="[campo2 da classe] " type="[tipo na classe] " column="[coluna2 na tabela] "
accessor ="field.camelcase-underscore " />
<property name="[campo3 da classe] " type="[tipo na classe] " column="[coluna3 na tabela] "
accessor ="field.camelcase-underscore " />
: : : : : : : : : : : :
<property name="[campoN da classe] " type="[tipo na classe] " column="[colunaN na
tabela]"accessor ="field.camelcase-underscore " />
</class>
</hibernate-mapping >
26. Fundamentos de NHibernate
Exercício
Dada a classe Pessoa ( em pseudo código ) e a tabela Pessoa abaixo, criar uma mini-
aplicação web de cadastro utilizando NHibernate.
class Orgao { public long Id {get;set;}; public string Descricao
{get;set;}; }
create table Orgao (codOrgao INT primary key, descricao varchar(50) NOT
NULL )
Campos Incluir
txtDesc da mini aplicação web:
r
Nome:
txtId Remov
Id:
er
txtId txtDesc Alterar
r
txtDesc Pesquisa
Id: Nome:
r r
ListBox
28. Associações no NHibernate
Convenção para notação de classes em C#.NET
TipoDocumento.cs (Completo) TipoDocumento.cs (Simplificado)
using System; public class TipoDocumento
namespace ControleCorporativo.ControleGeral.DP {
{ public long Id { get; set; }
public class TipoDocumento public string Descricao {get;
{ set; }
private long _id; }
public virtual long Id
{
get { return _id; }
protected set { _id = value; }
}
private string _descricao;
public string Descricao
{
get { return _descricao; }
set { _descricao = value; }
}
}
29. Associações no NHibernate
Como implementar mapeamento sem
associacões ?
C#.NET SQL
public class Orgao create table Orgao
{ (
public long Id { get; set; } codOrgao INT primary key,
public string Descricao {get; set;} descricao varchar(50)
} )
Orgao.hbm.xml
<?xml version="1.0" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="SistemaX.Dominio">
<class name="SistemaX.Dominio.Orgao" table="Orgao">
<id name="Id" column="codOrgao">
<generator class="identity"/>
</id>
<property name="Descricao" column="descricao" access="field.camelcase-underscore"/>
</class>
</hibernate-mapping>
30. Associações no NHibernate
Associação vários-para-um (Associação)
C#.NET SQL
public class Pessoa create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50),
public Orgao Lotacao { get; set; } codOrgao INT
} )
public class Orgao create table Orgao
{ (
public long Id { get; set; } codOrgao INT primary key,
public string Descricao { get; set; } descricao varchar(50)
} )
32. Associações no NHibernate
Associação vários-para-um (Associação)
Exemplo de código C# para alteração do Orgão onde uma Pessoa esta lotada:
ISession sessao = NHibernateHelper.ObterSessaoFactory().OpenSession();
ITransaction trans = sessao.BeginTransaction();
// Obtem um orgao do banco-de-dados
Orgao orgao = sessao.Get<Orgao>((long)45);
// Cria uma nova pessoa
Pessoa p = sessao.Get<Pessoa>((long)70);
p.Lotacao = orgao;
// Salva a pessoa
sessao.Save(p);
trans.Commit();
sessao.Close();
33. Associações no NHibernate
Exercício (vários-para-um) (associação)
Incluir Pessoa
Nome txtNome Incluir
Orgao cmbbxOrgao
Alterar Pessoa
Pelo Id txtIdPessoa Nome txtNome Alterar
Orgao cmbbxOrgao
Remover Pessoa
Remove
Pelo Id txtIdPessoa
r
34. Associações no NHibernate
Associação vários-para-um (composição)
C#.NET SQL
public class Pessoa create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50),
private Endereco _endereco = codEndereco INT
new Endereco(); )
public Endereco Endereco { get; }
} create table Endereco
(
public class Endereco codEndereco INT primary
{ key,
public long Id { get; set; } localidade varchar(50)
public string Localidade { get; set; } )
}
36. Associações no NHibernate
Associação vários-para-um (Posse)
ISession sessao = NHibernateHelper.ObterSessaoFactory().OpenSession();
ITransaction trans = sessao.BeginTransaction();
Exemplo de código C# para inclusão de Pessoa com Endereco:
// Cria uma nova pessoa com Endereco
Pessoa p = new Pessoa( )
p.Nome=”Nova Pessoa”;
p.Endereco.Localidade = “Anchieta”;
sessao.Save(p);
Exemplo de código C# de alteração de endereço de uma Pessoa existente no banco:
// Alterando a localidade de uma pessoa grvada em banco
Pessoa p2 = sessao.Get<Pessoa>((long)70);
p2.Endereco.Localidade = “Outra Localidade”;
sessao.Update(p);
trans.Commit();
sessao.Close();
37. Associações no NHibernate
Exercício (associação vários-para-um)
Incluir Pessoa
Id da Pessoa txtIdPessoa Nome txtNome Localidade txtLocalidade
Incluir
Alterar Pessoa
Alterar
Id da Pessoa txtIdPessoa Nome txtNome Localidade txtLocalidade
Remover Pessoa
Remove
Id da Pessoa txtIdPessoa
r
38. Associações no NHibernate
Associação um-para-vários
C#.NET
SQL
public class Pessoa
create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50)
private IList<Documento> )
_documentos
= new List<Documento>(); create table Pessoa_Documento
public IList<Documento> Documentos (
{ get; } codDocumento INT primary key,
} numero varchar(50),
codPessoa int
)
public class Documento
{
public long Id { get; set; }
public string Numero { get; set; }
public Pessoa Pessoa { get; }
40. Associações no NHibernate
Associação um-para-vários
Exemplo de código C# para inclusão de Documento em Pessoa Existente no Banco
ISession sessao = NHibernateHelper.ObterSessaoFactory().OpenSession();
ITransaction trans = sessao.BeginTransaction();
// Obtem uma pessoa do banco-de-dados
Pessoa p = sessao.Get<Pessoa>((long)44);
// Adiciona um documento na Pessoa
Documento d = new Documento() { Numero = “00009900” , Pessoa = p };
p.Documentos.Add(d);
// Altera o primeiro documento da Pessoa
p.Documentos[0].Numero = “000900”;
// Remove o terceiro documento da Pessoa
p.Documentos.Remove( p.Documentos[2] );
// Salva a pessoa e todas alterações nos documentos de uma só vez
sessao.Update(p);
trans.Commit();
sessao.Close();
41. Associações no NHibernate
Exercício (associação um-para-vários)
Incluir Documento
Id da Pessoa txtIdPessoa Desc. Doc. txtDescrDocumento
Incluir
Alterar Documento
Alterar
Id da Pessoa txtIdPessoa Id do Doc. txtIdDoc Desc.doc. txtDescrDocumento
Remover Documento
Remove
r
Id da Pessoa txtIdPessoa Id do Doc. txtIdDoc
43. Associações no NHibernate
Associação vários-para-vários
C#.NET SQL
public class Pessoa create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50)
} )
create table PessoaTarefa
(
codPessoa INT,
codTarefa INT
)
public class Tarefa create table Tarefa
{ (
public long Id { get; set; } codDocumento INT primary key,
public string Descricao {get; set;} descricao varchar(50),
public IList<Pessoa> Pessoas {get; set;} codPessoa INT
} )
45. Associações no NHibernate
Exercício (associação Vários-para-vários)
Incluir Tarefa
Incluir
Nome txtDescricao
Alterar Tarefa
Alterar
Pelo Id txtIdTarefa Descricao txtDescricao
Remover Tarefa
Remove
Pelo Id txtIdTarefa
r
Incluir Pessoa na Tarefa
Tarefa txtIdTarefa Incluir
Pessoa txtIdPessoa
Remover Pessoa da Tarefa
Tarefa txtIdTarefa Remove
Pessoa txtIdPessoa
r
46. Associações no NHibernate
Template de mapeamento: (Resumo)
Template de classe
using System;
namespace AlgumNamespace
{
public class AlgumaClasse
{
private long _id;
public virtual long Id { get { return this._id; } protected set { this._id = value; } }
protected tipo _campo;
public virtual tipo Campo
{ get { return this._campo; } set { this._campo = value; } }
protected OutraClasse _associacao;
public virtual OutraClasse Associacao
{ get { return this._associacao; } set { this._associacao = value; } }
protected IList<MaisOutraClasse> _associacaoLista;
public virtual IList<MaisOutraClasse> AssociacaoLista
{ get { return this._associacaoLista; } set { this._associacaoLista = value; } }
}
}
47. Associações no NHibernate
Template de mapeamento: (Resumo)
Template de mapeamento
<?xml version ="1.0" encoding ="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2 " assembly="[DLL da classe] " namespace ="[namespace] ">
<class name="[nome da classe] " table="[nome da tabela] " lazy="true">
<id name="[propriedade de id] " column="[chave primária] " type="[tipo na classe] ">
<generator class="[ native | identity | sequence | assigned | outros ] "/>
</id>
<property name="[campo da classe] " type="[tipo do campo] " column="[coluna na tabela] " accessor ="field.camelcase-
underscore " />
<many-to-one name="[assoc. da classe] " class="[tipo da assoc.] " column="[chaveFK] "
cascade ="[none | all | save-update] " access ="field.camelcase-underscore" />
<bag name="[lista na classe] " lazy="true" cascade ="[ all-delete-orphan | save-update | none ] "
inverse="true" access ="field.camelcase-underscore">
<key column="[chave FK na tabela filho] "/>
<one-to-many class="[tipo de cada elemento na lista1] "/>
</bag>
<bag name="[lista da classe] " table="[tabela agregada da associac.] " lazy="true" access="field.camelcase-underscore"
cascade ="[ all-delete-orphan | save-update | none ] ">
<key column="[chave FK para a tabela filho] "/>
<many-to-many class="[tipo de cada elemento na listaN+1] " column="[chave FK para a tabela pai] "/>
</bag>
</class>
</hibernate-mapping >
48. Herança
Estrutura em árvore composta por uma classe pai
(genérica) e as classes filhas (específicas)
Herança de classe pode ter várias formas no Modelo de
Dados
Uma tabela para toda a hierarquia de classes
Uma tabela por classe
Uma tabela cada cada classe concreta
49. Herança
Uma tabela para toda a hierarquia
Modelo de Classe Modelo de Dados
public abstract class Pessoa create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50),
} sexo char,
objetoSocial varchar(50),
public class PessoaFisica : Pessoa tipoPessoa char
{ )
public char Sexo { get; set; }
}
public class Pessoa Juridica : Pessoa
{
public string ObjetoSocial { get; set; }
}
51. Herança
Uma tabela por classe
Modelo de Classe Modelo de Dados
public abstract class Pessoa create table Pessoa
{ (
public long Id { get; set; } codPessoa INT primary key,
public string Nome { get; set; } nome varchar(50),
} )
public class PessoaFisica : Pessoa create table PessoaFisica
{ (
public char Sexo { get; set; } codPessoa INT primary key,
} sexo char(50),
)
public class Pessoa Juridica : Pessoa
{ create table PessoaJuridica
public string ObjetoSocial { get; (
set; } codPessoa INT primary key,
} objetoSocial varchar(50),
)
53. Herança
Exercício (Herança -> 1 tabela para a hierarquia )
Escrever um mapeamento NHibernate para a herança de documentos abaixo:
public class Documento
{
public long Id { get; set; } create table Documento
public string Numero { get; set; } (
} codDocumento INT primary
public class DocumentoCI : Documento key,
{ numero varchar(50),
public string Estado { get; set; } estado varchar(50),
} categoria varchar(50),
public class DocumentoCNH : Documento tipoDocumento varchar(50)
{
)
public string Categoria { get; set; }
}
Fazer uma tela web de consultar objetos via HQL:
txtHQL btExecutar
listBoxResultado
54. Herança
Exercício (Herança ->1 tabela por classe)
public abstract class Pessoa create table Pessoa
{ (
codPessoa INT primary key,
public long Id { get; set; } ...
... )
} create table PessoaFisica
public class PessoaFisica : Pessoa (
{ codDocumento INT,
public string Sexo { get; set; } sexo varchar(50)
} )
public class PessoaJuridica : Pessoa create table PessoaJuridica
(
{ codDocumento INT,
public string ObjetoSocial { get; set; } objetoSocial varchar(50)
} )
Utiliar a mesma tela web de consulta para verificar os mapeamentos
txtHQL btExecutar
listBoxResultado
56. Objetos de Valor e Entidades
Entidade:
Toda classe cujo objeto precisa de um Id para identif.
Normalmente esta mapeada para 1 ou mais tabelas
Ex: Pessoa, Logradouro, InscricaoCadastral
Objeto de Valor:
Também é classe mas não possui Id de identificação
Representa um conceito importante do negócio
É imutável, não pode ser alterado, apenas subtituído
Ex: Dinheiro (valor + unid. Ref.), Endereco (alguns casos)
57. Objetos de Valor e Entidades
Exemplo:
Modelo de Dados Modelo de Classes
public class Taxa
create table Taxa
{
(
public long Id { get; set; }
codTaxa INT primary key,
public string Descricao { get; set; }
descricao varchar(50),
public UnidadeReferencia
codUnidadeReferencia INT,
UnidadeReferencia
valorTaxa numeric(12,4)
{ get; set; }
)
public decimal ValorTaxa { get; set; }
}
create table UnidadeReferencia
(
public class UnidadeReferencia
codUnidadeReferencia INT primary
{
key,
public long Id { get; set; }
descricao varchar(50)
public string Descricao { get; set; }
)
}
58. Objetos de Valor e Entidades
Exemplo: (Funciona, mas vamos pensar melhor ... )
Modelo de Dados Modelo de Classes
public class Taxa
create table Taxa
{
(
public long Id { get; set; }
codTaxa INT primary key,
public string Descricao { get; set; }
descricao varchar(50),
public UnidadeReferencia
codUnidadeReferencia INT,
UnidadeReferencia
valorTaxa numeric(12,4)
{ get; set; }
)
public decimal ValorTaxa { get; set; }
}
create table UnidadeReferencia
(
public class UnidadeReferencia
codUnidadeReferencia INT primary
{
key,
public long Id { get; set; }
descricao varchar(50)
public string Descricao { get; set; }
)
}
59. Objetos de Valor e Entidades
Exemplo: (Vamos pensar melhor ... )
Modelo de Dados Modelo de Classes
create table Taxa
(
codTaxa INT primary key,
descricao varchar(50),
codUnidadeReferencia INT, Essas duas colunas aparecem juntas
valorTaxa numeric(12,4) em várias tabelas sugerindo um
) conceito importante de valor financeiro.
create table UnidadeReferencia
(
codUnidadeReferencia INT primary
key,
descricao varchar(50)
)
60. Objetos de Valor e Entidades
Exemplo: ( Incluir conceito de negócio )
Modelo de Dados Modelo de Classes
create table Taxa public class Taxa
( {
codTaxa INT primary key, public long Id { get; set; }
descricao varchar(50), public string Descricao { get; set; }
codUnidadeReferencia INT, public ValorFinanc Valor { get; set; }
valorTaxa numeric(12,4) }
) public class ValorFinanc
{
public ValorFinanc (UnidadeReferencia uf, decimal v)
create table public UnidadeReferencia { get; }
UnidadeReferencia public decimal Valor { get; }
( public ValorFinanc static Adicionar( ValorFinanc fator1,
codUnidadeReferencia ValorFinanc fator2, UnidadeReferencia result);
INT primary key, public ValorFinanc static Subtr( ValorFinanc subtraendo,
descricao varchar(50) ValorFinanc subtrator, UnidadeReferencia result);
) public ValorFinanc Conversao(UnidadeReferencia result);
}
public class UnidadeReferencia
{
public long Id { get; set; }
public string Descricao { get; set; }
}
61. Objetos de Valor e Entidades
Exemplo: ( Incluir conceito de negócio )
Mapeamento da classe Taxa
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="[DLL]"
namespace="[namespace]">
<class name="Taxa" table="Taxa" lazy="true">
<id name="Id" column="codTaxa" type="Int64">
<generator class="identity"/>
</id>
<property name=“Descricao" type="String" column="descricao" not-null="true"
accessor="field.camelcase-underscore" />
<component name=“Valor” class=“ValorFinanc”>
<property name=“Valor” type=“String” column=“valorTaxa”/>
<many-to-one name=“UnidadeReferencia”
class=“UnidadeReferencia”
column=“codUnidadeReferencia”/>
</component>
</class>
</hibernate-mapping>
62. Exercício
Mapear a classe PessoaEspecial
class PessoaEspecial create table PessoaEspecial
{ (
public long Id { get; set; } codPessoaEspecial INT primary
public long Nome { get; set; } key,
public EnderecoEspecial Endereco nome varchar(50),
{ get; } localidade varchar(50),
} numero varchar(50)
)
class EnderecoEspecial
{
public string Localidade { get; set; }
public string Numero { get; set; }
}
Testar a inclusão e a consulta de uma pessoa
especial em C#
64. Observações
Consultas em Linq-to-NHibernate
ist<TipoDocumento> lstResultado = (from tp in session.Linq<TipoDocumento>()
where tp.Descricao.Contains(“CP”)
select tp).ToList();
Recursos geo-espaciais (MsSQLSpatial, PostGIS)
// Encontra um país localizado em uma coordenada
Country country = session.CreateCriteria(typeof(Country))
.Add(SpatialExpression.Contains("Boundaries", new Point(-70.40, -33.24)))
.UniqueResult() as Country;
// Encontra as cidades de uma área exceto aquelas localizadas em algumas coords.
Town[] towns = Town.FindAll(
SpatialExpression.Filter("Boundaries", new Envelope(-70, -68, -32, -34)),
Expression.Not(SpatialExpression.Contains("Boundaries", new Point(-70.40, -33.24)))
);
65. Observações
Vantagens só aparecem com Programação OO
Isso Ao invés disso
Pessoa p = new Pessoa( if ((strNome == null)||(strNome == string.Empty))
strNome, { .....Erro ... }
new DocumentoCPF(strCPF), if ((strCPF == null)||(strCPF == string.Empty))
new Endereco(strCEP)); { ... Erro ... }
session.SaveOrUpdate(p); if ((strCEP == null)||(strCEP == string.Empty))
{ ... Erro ... }
IList<Pessoa> lstPessoas = ... consulta para achar
... outra pessoa com
... mesmo nome e CPF
if (lstPessoas.Count > 0) { ..... Erro ......... }
CEP cep = ... consulta de CEP pelo numero
if (cep == null ) { ........ Erro ....... }
Localidade localidade = cep.Localidade;
Pessoa p = new Pessoa( );
p.Nome = strNome;
p.Documentos.Add(new DocumentoCPF(strCPF));
p.Endereco.Localidade = localidade;
session.SaveOrUpdate(p);
66. Perguntas
Contacte o autor, se preferir ...
http://www.linkedin.com/in/hcmarchezi
●
http://hcmarchezi.blogspot.com.br/
●