O documento discute os tópicos abordados na segunda fase do treinamento de desenvolvimento de sistemas, incluindo lógica de programação e orientação a objetos. Os principais conceitos apresentados são arrays, enumerações, namespaces, comentários, estruturas, tratamento de exceções, classes, atributos e métodos.
4. O .NET Framework é um modelo de programação de
código gerenciado da Microsoft para criar aplicativos
em clientes, servidores e dispositivos móveis ou
incorporados ao Windows.
Conjunto rico de bibliotecas com os mais variados usos;
Controle de versão: fim do “DLL Hell”;
Facilidade de desenvolvimento de aplicações desde as mais
simples até as mais complexas;
Facilidade na instalação e na distribuição de aplicações;
Alta escalabilidade para ambientes de missão crítica;
Interoperabilidade entre plataformas e componentes
desenvolvidos em outras linguagens .NET;
Sintonizado com as últimas tecnologias;
Orientada a objetos;
Tecnologia baseada em máquina virtual;
5. O .NET permite desenvolver soluções como:
Aplicativos Web
Aplicativos para Servidores
Aplicativos Smart Client
Aplicativos de Console
Aplicativos de Banco de Dados
Serviços Windows
Web Services e muito mais
6. .NET Framework 3.5 vem para incrementar as .NET
Frameworks 2.0 e 3.0 com novos recursos em várias
áreas de tecnologia. Entre eles, estão:
Profunda integração entre LINQ (consulta integrada à
linguagem) e reconhecimento de dados.
Novas implementações ao ASP.NET AJAX.
Suporte completo para:
Windows Workflow Foundation (WF)
Windows Communication Foundation (WCF)
Windows Presentation Foundation (WPF)
Windows CardSpace
Novas classes na BCL (biblioteca de classes básicas) que
vêm atender solicitações comuns entre os desenvolvedores.
7. .NET Framework
VB C++ C# JScript ...
Common Type System (CTS)
Visual Studio .NET
ASP .NET: Web Services
Windows Forms
e Web Forms
ADO .NET: Data e XML
.NET Framework Base Class
Common Language Runtime (CLR)
8. Common Language Runtime (CLR) é o
componente encarregado de gerenciar aplicações
desenvolvidas em .NET.
O compilador de cada linguagem segue uma série
de especificações, conhecida como Common
Language Infrastructure (CLI), para compilar seus
códigos.
Estas especificações são abertas (ECMA-335,
ISO/IEC 23271), assim permitem a
interoperabilidade entre outras linguagens e
plataformas. O que deu origem ao
desenvolvimento, pela Novell, do Mono (Um CLR
que opera também em Linux, BSD, UNIX, Mac OS
X e Solaris).
9. Serviços de gerenciamento de memória
Serviços de tratamento de exceções
Serviços de compilação
Serviços de segurança, etc.
10. Compilação
Source Language Code
Code Compiler MSIL
Metadata
Antes da
instalação ou a
primeira vez que
Execução cada método é
chamado
Native JIT Compiler
Code
11. Código
VB C# C++
Fonte
Componente
Compilador Compilador Compilador
Não Gerenciável
Código
Gerenciável Assembly - Código IL
Common Language Runtime (CLR)
Compilador JIT
Código Nativo
Serviços do Sistema Operacional
12. Managed
Código Fonte
Compilador
Código Intermediário (IL): .DLL ou .EXE
Requer o ambiente CLR para executar
Código de Máquina (Binário)
Unmanaged
Código Fonte
Compilador
Código de Máquina (Binário)
NÃO requer o ambiente CLR para executar
13. Microsoft Visual Basic.NET
Microsoft C#
Microsoft C++ (Gerenciado/Não-Gerenciado)
Microsoft J#
Outras:
http://www.dotnetlanguages.net
http://www.dotnetpowered.com
15. Um conjunto de ferramentas de desenvolvimento
que permite aos desenvolvedores de software
resolver problemas complexos e criar soluções
inovadoras.
Baseia-se em três pilares principais:
Desenvolvimento rápido de aplicativos
Colaboração eficaz em equipe
Experiências de usuário inovadoras
16. Desenvolver Web Site e Aplicações Web com
ASP.NET, AJAX.NET e Silverlight.
Impressionar com mídia e gráficos desenvolvidos
com o Windows Presentation Foundation.
Aplicativos que estendem funções do Office 2003 e
2007.
Aplicações para Windows Mobile.
Desenvolver soluções de integração coorporativa
com Windows Communication Foundation e o
Windows Workflow Foundation e muito mais...
22. byte • Inteiro de 8 bits sem sinal
sbyte • Inteiro com sinal de 8 bits
int • Inteiro de 32 bits com sinal
uint • Inteiro de 32 bits sem sinal
long • Inteiro com sinal de 64 bits
ulong • Inteiro sem sinal de 64 bits
short • Inteiro com sinal de 16 bits
ushort • Inteiro sem sinal de 16 bits
decimal • Ponto flutuante decimal. Este tipo tem uma precisão de 28 casas decimais.
double • Ponto flutuante binário. Este tipo tem uma precisão de 15 casas decimais.
float • Ponto flutuante binário. Este tipo tem uma precisão de 7 casas decimais.
bool • Tipo de dados booleano. Pode ser apenas true ou false.
char • Um único caractere unicode de 16 bits.
string • Unicode com até 1 gigabyte de caracteres.
23. Armazenado na memória Stack.
Trabalha com dados diretamente.
Não pode ser nulo.
STACK
Exemplo:
...
Inteiros
Decimais
idade • 19
Booleanos salário • 500.00
Estruturas brasileiro •0
Enumeradores
24. Contém uma referência a um ponteiro na
memória Heap.
Pode ser nulo
Exemplo: STACK
Nome •#XXXX
Vetores
...
Textos
Instâncias de Classes HEAP
Classes ...
Nome •
“Texto”
25. int i = 123; // Tipo por valor
object O; // Tipo por referência
O = i; // Causa “boxing”
string S;
S = O.ToString() // Chama via O
int x;
x = (int) O; // Faz “unboxing”
Stack Heap
i 123
O 123
x 123
26. int i = 123; // Tipo por valor
object O;
O = i; // Causa “boxing”
string S; // Tipo por referência
S = O.ToString(); // Chama via O
int x;
x = (int) O; // Faz “unboxing”
STACK HEAP
x • 123 ...
S S •“123”
O ...
i • 123 O •123
... ...
28. if ... else if ... else
A cláusula if ocorre apenas uma vez
A cláusula else if pode ocorrer nenhuma ou várias vezes
A cláusula else é opcional.
if (idade >= 18)
{
Response.Write("Autorizado.");
Response.Write(“Sua idade é: ” + idade);
}
else if(idade > 15 && idade < 18)
{
Response.Write("Somente com os pais.");
Response.Write(“Menor de 18 anos.”);
}
else
{
Response.Write("Não autorizado.");
Response.Write(“Menor de 15 anos.”);
}
29. switch … case
Estruturas de decisão caracterizadas pela possibilidade
de uma variável possuir vários valores.
A cláusula switch ocorre uma vez
A cláusula case pode ocorrer uma ou várias vezes
default é opcional.
switch (sexo)
{
case "masculino":
Response.Write("Homem");
break;
case "feminino":
Response.Write("Mulher");
break;
default:
Response.Write("Não informado");
break;
}
30. for
Estrutura de repetição caracterizada pela existência de
três parâmetros:
Valor inicial
Condição para parada das iterações
Quantidade de incrementos/decrementos a cada iteração
for (int i = 0; i < 10; i++)
{
Response.Write(i);
Response.Write(“<br />”);
}
31. while
Estrutura de repetição que realiza as operações
desejadas enquanto a condição especificada for
verdadeira.
int i = 0;
while(i != 10)
{
Response.Write(i);
Response.Write("<br />");
i++;
}
32. do ... while
Estrutura de repetição semelhante à anterior, com o
diferencial de que as condições são verificadas no final
da execução
Permite que as operações especificadas sejam
executadas pelo menos uma vez.
Necessita do caracter “;” no final da estrutura
int i = 0;
do
{
Response.Write(i);
Response.Write("<br />");
i++;
}
while (i != 10);
33. // Exemplo I // Exemplo IV
string S = “123”; string S = “valor”;
int i = S; int i = Convert.ToInt32(S);
Response.Write(i); Response.Write(i);
// Exemplo II // Exemplo V
string S = "123"; string S = "valor";
int i = Convert.ToInt32(S); int i = 0;
Response.Write(i); if (int.TryParse(S, out i))
{
Response.Write(i);
}
else
// Exemplo III {
string S = “123”; Response.Write(“valor
int i = int.Parse(S); inválido.”);
Response.Write(i); }
34. try ... catch ... finally
// Sintaxe
try {
// código factível de erro
} catch (NullReferenceException ex){
// exceções de referência nula
} catch {
// trata outras exceções
} finally {
// executa sempre
}
// Exemplo II
try
// Exemplo I {
try throw new Exception("Erro");
{ }
int i = int.Parse(“2mm”); catch (Exception ex)
} catch { {
Response.Write(“Inválido”); Response.Write(ex.Message);
} }
39. Array é uma variável que permite o
armazenamento de um bloco de um tipo particular
de variáveis (int, string, object, bool...) na memória.
No C# os Arrays são indexados a partir de zero (0).
Não podem ter seu tamanho alterado depois de
instanciados.
40. Paradeclarar um Array, basta adicionar um par de
colchetes logo após a declaração do tipo dos
elementos individuais
int[] meuVetorDeInteiros;
string[] meuVetorDeStrings;
Instanciando arrays
int[] codigos = new int[5];
string[] nomes = new string[100];
object[] produtos = new object[50];
int[] pedidos = {1, 4, 6, 8, 10, 68, 90, 98, 182, 500};
Preenchendo array
nomes[0] = “José”;
nomes[1] = “João”;
41. Podem ser:
Unidimensionais: array com uma chave.
int[] codigos = new int[5]; int[] codigos = {1,3,6,7,8};
codigos[0] = 1;
Multidimensionais:
Retangular ou matriz: array com mais de uma chave.
int[,] codigos = new int[2,2]; int[,] codigos =
codigos[0,0] = 11; {{11,42},{35,44}};
Jagged: array de arrays.
int[][] codigos = new int[2][];
codigos[0] = new int[2];
codigos[0][0] = 11;
int[][] codigos = { new int[]{11,42}, new int[]{35,44} };
44. Declarando um namespace
namespace NomeEmpresa {
public class Cliente {}
}
Namespaces em cadeia
namespace NomeEmpresa.Vendas {
public class Cliente {}
}
Instrução Using
using System;
using System.Data;
using NomeEmpresa.Vendas;
using Pessoa = ClassLibrary.Person;
45. Criando comentários e regiões:
// Comentário de uma linha
/*
Comentário com
mais de uma linha
*/
/// <summary>
/// Documentação XML
/// </summary>
private int Atributo;
#region Região
private int Atributo1;
private int Atributo2;
#endregion
49. Estruturada Orientação a Objetos
Aplicação Aplicação
Função
Objeto Objeto
Função Dados Dados Dados
Função
Métodos Métodos
Função
50. Programação Orientação a
Estruturada Objeto
Processo Objeto
Revela Dados Oculta Dados
Projeto Monolítico Projeto Modular
Uso Único Reutilização
Algoritmo Ordenado Algoritmo Desordenado
51. É um conjunto de códigos de programação que
incluem a definição dos atributos e dos métodos
necessários para a criação de um ou mais objetos.
Contém toda a descrição da forma do objeto, é um
molde para a criação do objeto, é uma matriz
geradora de objetos, é a fábrica de objetos.
Uma classe também é um tipo definido pelo
usuário.
52. Tem determinadas propriedades que o
caracterizam e que são armazenadas no próprio
objeto. As propriedades de um objeto são
chamadas ainda de atributos.
O objeto interage com o meio e em função de
excitações que sofre, realiza determinadas ações
que alteram o seu estado (atributos).
Um objeto é uma entidade única que reúne
atributos e métodos, ou seja, reúne as
propriedades do objeto e as reações aos estímulos
que sofre.
54. Declarando uma Classe:
class Pessoa
{
string nome;
void Andar() { }
}
Declarando um Objeto:
Endereco objEndereco = new Endereco();
55. Atributo Vidro Atributo Cor Lataria
Fusca
-Placa
Atributos
-Cor Lataria
-Cor Parachoque
Classe
-Aro
-Tipo Vidro
+Trocar marcha()
Métodos
+Ligar()
+Acelerar()
+Brecar()
Atributo Atributo Placa Atributo Aro
Cor Parachoque
Ações do carro (Métodos)
Liga (Ingnição)
Acelera
Freia (Breca)
Troca de Marcha
56. Atributos de Classe
Quando um atributo é dividido entre todos os objetos
criados, ele é armazenado na classe.
EX: Um contador de relógios criados.
Atributos de Objeto
Quando um atributo é individual ele é armazenado no
objeto.
EX: A hora de um relógio.
string nome = “Bill”;
int idade = 53;
57. As ações ou comportamento dos objetos são
chamados, na orientação a objeto, de métodos,
assim, um método é uma função, um serviço
fornecido pelo objeto.
Os comportamentos do objeto são definidos na
classe através dos métodos e servem para
manipular e alterar os atributos do objeto.
Em um programa orientado a objeto, as excitações
são representadas por mensagens que são
enviadas a um objeto. Uma mensagem pode ser
gerada pelo usuário, por exemplo, ao clicar o
mouse.
58. Um método é um comando que representa uma ação
class Cliente {
private int produtosAdquiridos;
public bool EClienteEspecial() {
if (produtosAdquiridos < 250)
return false;
return true;
}
public void ComprarEspecial() { /* AÇÃO */ }
}
...
Cliente proximoCliente = new Cliente();
bool clienteEspecial = proximoCliente.EClienteEspecial();
if (clienteEspecial)
proximoCliente.ComprarEspecial();
59. Passando parâmetros por valor
class Cliente {
private int produtosAdquiridos;
public void DefineProdutosAdquiridos(int quantidade)
{
produtosAdquiridos = quantidade;
}
}
...
Cliente novoCliente = new Cliente();
int produtos = 255;
novoCliente.DefineProdutosAdquiridos(produtos);
//OR
novoCliente.DefineProdutosAdquiridos(200);
60. Passando parâmetros por referência (usando ref)
public void RetornaEndereco(ref int numero, ref string rua)
{
numero = this.numero;
rua = this.rua;
}
int numeroLocal = 0;
string ruaLocal = “”;
novoCliente.RetornaEndereco(ref numeroLocal, ref ruaLocal);
// numeroLocal e ruaLocal recebem novos valores
61. Passando parâmetros por referência (usando out)
public void RetornaEndereco(out int numero, out string rua)
{
numero = this.numero;
rua = this.rua;
}
int numeroLocal;
string ruaLocal;
novoCliente.RetornaEndereco(out numeroLocal, out ruaLocal);
// numeroLocal e ruaLocal são inicializados
62. Utilizando sobrecarga de métodos
public void DefineProdutosAdquiridos(int novoNumero)
{
this.produtosAdquiridos = novoNumero;
}
public void DefineProdutosAdquiridos(int novoNumero, bool
clienteModificado)
{
if (clienteModificado)
this.produtosAdquiridos = novoNumero;
}
public void DefineProdutosAdquiridos()
{
this.produtosAdquiridos =
RecuperaProdutos(this.ClienteID);
}
63. Construtores são métodos especiais responsáveis pela
implementação de ações necessárias para a existência de um objeto
public class Cliente
{
public int produtosAdquiridos;
public readonly bool clienteEspecial;
//Construtor default
public Cliente()
{
if (this.produtosAdquiridos > 250)
this.clienteEspecial = true;
else
this.clienteEspecial = false;
}
}
65. A herança está relacionada às hierarquias e às
relações entre os objetos.
É o mecanismo em que uma classe filha
compartilha automaticamente todos os métodos e
atributos de sua classe pai.
A herança permite implementar classes
descendentes implementando os métodos e
atributos que se diferenciam da classe pai.
66. Simples
Quando uma classe herda as propriedades de uma
única classe pai.
Múltipla
Ocorre quando uma classe tem mais de um pai.
67. Criando uma classe derivada
public class Pessoa
{
public string nome;
protected int id;
public void Cadastrar() { /* rotina para cadastrar */
}
}
public class Cliente : Pessoa
{
public void Comprar(int idProduto) { /* ação */ }
}
...
Cliente proximoCliente = new Cliente(“Rodrigo”);
proximoCliente.Cadastrar();
proximoCliente.Comprar(100);
68. Invocando um construtor da classe base na classe derivada
public class Pessoa
{
public Pessoa(string nome)
{ Console.WriteLine(“Construindo Pessoa de Nome
{0}”,nome); }
}
public class Cliente : Pessoa
{
public Cliente(string nome) : base(nome)
{ Console.WriteLine(“Construindo Cliente”); }
}
...
Cliente proximoCliente = new Cliente(“Rodrigo”);
...
Construindo Pessoa de Nome Rodrigo
Construindo Cliente
69. Classes Seladas – são classes que não podem ser extendidas ou
sobrescritas, ou seja, não podemos ter classes derivadas de
classes seladas.
public sealed class Pessoa
{
// Membros da Classe Pessoa
}
70. Em C#, as seguintes palavras-chave são úteis para
explorar o conceito de herança:
• Indica uma classe, método ou propriedade que não admite
ABSTRACT instâncias diretamente.
• Indica uma redefinição em uma classe derivada.
OVERRIDE
• Indica um elemento da classe base que pode ser redefinido.
VIRTUAL
• Indica um elemento da própria classe.
THIS
• Indica um elemento da classe base.
BASE
• Indica uma classe que não admite derivadas.
SEALED
71. Polimorfismo significa: “Muitas Formas” e
representa o fato de uma determinada
característica ser diferente para cada filho.
Partimos de um objeto mais simples e que vai
evoluindo. Os conceitos do objeto pai continuam a
existir, mesmo que tenham sofrido modificações ou
assumido novas formas.
73. Utilizando métodos virtuais
public class Pessoa {
public virtual void Viajar() {
/* Ação */ }
}
public class Diretor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Ações Particulares da Classe Diretor */
}
}
public class Vendedor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Ações Particulares da Classe Vendedor */
}
}
74. Encapsulamento é o ato de esconder do usuário
informações que não são de seu interesse.
O objeto atua como uma caixa preta, que realiza
determinadas operações mas o usuário não sabe e
não precisa saber exatamente como.
Basicamente o encapsulamento separa os
elementos visíveis de um objeto dos invisíveis.
75. Public: permite que a classe seja acessada por
qualquer assembly.
Sealed: não permite que a classe seja herdada.
Partial: permite que a classe tenha seu escopo
dividido em dois arquivos.
Static: especifica que a classe somente tem
membros estáticos. Não pode ser instanciada.
Abstract: define moldes para classes filhas. Não
pode ser instanciada.
76. Public: permite que os membros das classes sejam
acessados por qualquer outro escopo.
Private: acesso restrito ao escopo da classe.
Protected: acesso restrito a classe e as derivadas.
Internal: permite acesso somente por classes do
mesmo assembly.
Static: permite acesso, sem necessidade do objeto ser
instanciado.
Abstract: são métodos de classes Abstract que não
possuem implementação.
Virtual: permite que os métodos sejam sobrescritos por
classes filhas.
Readonly: limita acesso a somente leitura aos atributos
da classe.
77. São métodos que protegem acesso aos membros da classe
public string Nome
{
get { return nomeCliente; }
set { nomeCliente = value; }
}
• Como acessar as propriedades
string nomeCliente = novoCliente.Nome;
novoCliente.Nome = “Steve Ballmer”;
80. Tópicos abordados:
Orientação a Objeto (Parte II)
Membros de Classe
Classes Abstratas
Interfaces
Desenvolvendo para internet (Parte I)
Html e Javascript
ASP.NET e Ciclo de vida de uma página
82. Pertencem à classe e não às instâncias
Podem ser atributos, propriedades e métodos
public class Cliente
{
public static string tipoEntidade = “Teste”;
public static void Excluir(int identificacao)
{
/* excluir cliente com essa identificação */
}
}
...
Console.WriteLine(“Tipo de Entidade: {0}”,
Cliente.tipoEntidade);
...
int clienteId = 5;
Cliente.Excluir(clienteId);
83. Construtores de classe – estáticos, compartilhados,
globais
São executados antes do primeiro objeto do tipo
em questão ser criado ou do primeiro método de
classe ser invocado
Não possuem parâmetros
Não apresentam modificadores de acesso
Podem co-existir com construtores de instâncias
Utilizados para inicializar uma classe
84. Construtores de Classe
public class Cliente
{
private static Random numeroRandomico;
public int senhaCliente;
static Cliente()
{
numeroRandomico = new Random();
}
public void CarregarSenha()
{
senhaCliente = numeroRandomico.Next();
}
}
85. Pode acontecer que ao escrever um método para
uma classe base você não saiba como ele será
implementado. Neste caso, a implementação será
feita pela classe que herdar o método (a classe
filha).
Pode acontecer também que você saiba que um
determinado método será sobreposto com certeza
na classe filha; então, por que definir sua
implementação se ela não será usada?
86. Nestes casos você apenas define a assinatura do
método e deixa a definição por conta da classe que
irá herdar a classe pai.
Estasclasses são então chamadas classes
abstratas, o método que você não implementou é
chamado de método abstrato.
Asclasses abstratas não podem ser instanciadas
através da palavra chave New.
87. Uma classe abstrata é uma classe base genérica
Contém métodos abstratos que devem ser implementados nas
classes que derivam dela
Um método abstrato não apresenta implementação na classe base
public abstract class Pessoa {
public abstract void Cadastrar();
public abstract string Nome { get; set; }
public abstract int Id { get; }
public virtual void Viajar() { /* Ação */ }
}
Pode conter membros não-abstratos
88. Derivando a classe abstrata e implementando os membros
abstratos
public class Diretor : Pessoa
{
public override void Cadastrar()
{ /* Ações */ }
public override string Nome
{
get { /* Implementação get */ }
set { /* Implementação set */ }
}
public override int Id
{
get { /* Implementação get */ }
}
}
89. Uma interface é parecida com uma classe abstrata,
a diferença é que uma classe abstrata pode
possuir métodos que não estejam implementados e
pode possuir métodos que estejam implementados.
Uma interface possui somente métodos que não
estão implementados e que devem ser
implementados pela classe que usar a interface.
90. Como o C# não suporta herança múltipla as
interfaces permitem que uma classe estenda
múltiplas interfaces contornando o problema.
Uma interface no C# não pode conter atributos,
somente pode ter métodos, propriedades e
eventos. Todos os membros de uma interface são
públicos e não podem usar um modificador de
acesso.
91. A classeque implementa a interface deve possuir a
definição de todos métodos existentes na interface.
Esta definição deve possuir o mesmo nome e a
mesma assinatura, retorno e parâmetros, do
método na interface.
O nome da classe e o nome da interface são
separados por dois pontos(:).
92. Uma interface define a mesma funcionalidade e
comportamento à classes não relacionadas
diretamente
Declarando a interface
public interface IProduto
{
bool EPerecivel { get; }
Fornecedor RecuperarFornecedor();
void RegistrarVenda(Cliente cliente);
}
93. Implementando a interface
public class Computador : IProduto
{
private bool ePerecivel;
public bool EPerecivel
{
get { return ePerecivel; }
}
public Fornecedor RecuperarFornecedor()
{
return new Fornecedor();
}
public void RegistrarVenda(Cliente cliente)
{
// Rotina para registrar vendas
}
}
94. IS e AS
if (computador is IProduto)
{
// ações
}
IProduto produto = computador as IProduto;
if (produto != null)
{
Fornecedor fornecedor = produto.RecuperarFornecedor();
}
95. Pode tornar o comportamento de seus objetos
semelhante ao comportamento dos objetos da
.NET Framework
Exemplos:
ICollection
IComparer
IDictionary
IEnumerable
public class Cliente : Pessoa, IComparable
{
...
}
96. foreach
Esta estrutura de repetição é uma variação do for.
Sua diferença está no fato de ser necessário apenas
especificar uma variável e a coleção ou array cujos
registros serão percorridos.
int[] i = { 1, 3, 5, 7, 9 };
foreach (int j in i)
{
Response.Write(j);
Response.Write("<br />");
}
97. Estruturas são tipos por valor, que podem conter:
Um construtor
Constantes
Atributos
Métodos
Propriedades
Uso recomendado para representar objetos leves
e/ou que eventualmente podem constituir arrays de
grande dimensão.
Não podem ser herdados, porem podem
implementar Interfaces.
98. Exemplo de uma estrutura:
struct Circulo {
private int _raio; // Atributo
public double Circunferencia // Propriedade
{ get { return 2 * _raio * Math.PI; } }
// Regra específica para retornar um valor.
public Circulo(int raio) // Construtor com um argumento
{ this._raio = raio; } // Atribuição do valor do argumento
} // para o atributo do objeto.
... Dentro do evento Page_Load
Circulo meuCirculo = new Circulo(10);
// Instancia de uma estrutura.
Response.Write(meuCirculo.Circunferencia);
// Imprime o valor de uma propriedade
99. Exemplo de overload de métodos:
... Dentro da mesma estrutura do exemplo anterior:
public void DiminuirRaio(){ // Método simples sem argumentos
if (_raio > 1)
_raio--;
}
public void DiminuirRaio(int valor){// Overload do método anterior
if (_raio - valor > 1) // com um argumento
_raio -= valor;
}
... Dentro do evento Page_Load
meuCirculo.DiminuirRaio(); // Chamando o método sem argumentos
meuCirculo.DiminuirRaio(2); // Chamando o overload
// do método anterior
103. Nasceu com a finalidade de estabelecer uma forma
simples para publicar sites na internet.
Significa de forma literal, linguagem de marcação
de hipertexto.
Sua estrutura mais básica compreende da tag
“<html>” delimitando o documento, dentro desta
tag existe um cabeçalho delimitado pela tag
“<head>” e corpo delimitado por “<body>”, onde se
coloca os textos, imagens, vídeos...
104. Comentários em HTML
<!-- Comentário -->
Astags ou marcadores são estruturados da
seguinte forma:
<!-- Inicio da tag -->
<nome_da_tag atributo=“valor”>
<!-- Fim da tag -->
</nome_da_tag>
<!-- ou uma tag vazia -->
<nome_da_tag atributo=“valor”>
105. Definindo o título de uma página.
<html>
<head>
<title>Meu Título</title>
</head>
</html>
Formatando um texto
<html>
<head></head>
<body>
<b>Texto em negrito</b><br />
<i>Texto em itálico</i>
</body>
</html>
106. Maiores informações sobre HTML e suas tags:
http://www.w3schools.com/html/
http://www.w3schools.com/tags/
107. É uma linguagem de programação do lado do
cliente (client-side), interpretada pelos browsers.
Comumente utilizada para validação de formulários
e comunicação de forma assíncrona de dados com
o servidor (conceito conhecido como AJAX).
Pode tanto aparecer em blocos delimitados por
tags “<script>” em documentos html ou em
arquivos separados.
<!-- JavaScript em blocos delimitados -->
<script language="javascript“>
alert(“Mensagem”);
</script>
<!-- Link para um arquivo de códigos JavaScript -->
<script src=“codigos.js" type="text/javascript"></script>
109. O Visual Studio oferece aos desenvolvedores,
além de inline sense para JavaScript,
compatibilidade entre os objetos criados no
servidor com os pseudos objetos JavaScript
presentes no cliente, lembrando que JavaScript
não é Orientado a Objeto.
110. Maiores informações sobre JavaScript:
http://www.w3schools.com/js/
Artigo
sobre a pseudo orientação a objeto do
JavaScript no Visual Studio:
http://msdn.microsoft.com/pt-br/magazine/cc163419.aspx
111. Tecnologia mais evoluída e mais flexível,
sucessora do Active Server Pages (ASP)
O processamento dos formulários web (Web
Forms) são feitos do lado do servidor (Server-side)
Independente de linguagem
Possui grande facilidade para interagir com Web
Services, assim como facilidade para desenvolver
um.
Independente de browser (o .NET Framework
reconhece a versão do browser e envia o código
html e script correspondente)
112. O ASP.NET pode ser utilizado com qualquer
linguagem suportada pelo CLR.
Permite separação entre código e o design da
página.
Provê, além de muitas outras funcionalidades,
facilidade de gerenciamento de persistência de
estado no lado cliente (view state) e no lado
servidor (session).
113. Componente Visual
Visão de Design
Visão de HTML
Lógica de interface de usuário
MeuWebForm.aspx.cs
Class MeuWebForm MeuWebForm
MeuWebForm.aspx
Bem-vindo!
Bem-Vindo! Nome:
Nome: Senha:
Senha:
Lógica de OK
interface
OK
Componente
Visual
Ambos arquivos compõem MeuWebForm
114. Três métodos para adicionar código:
Colocando código no mesmo arquivo do conteúdo
(misto)
Colocando código numa sessão separada (code-block)
no arquivo de conteúdo (código inline)
Colocando código em um arquivo separado (code-
behind pages)
Code-behind pages é a opção padrão no Visual
Studio .NET
115. Permite criação de Web Forms, Mobile Web Forms e
Web Services.
ASP.NET é parte do .NET Framework.
Múltiplas linguagens e programação orientada a objetos:
C#,VB.Net, C++.Net, etc.
Com o Visual Studio.NET:
Ferramenta RAD para construção de aplicações web.
Suporte Debugging.
Separação de Código e Interface.
Proteção de Código Fonte.
Mantém automaticamente o estado da página.
Suporte MultiBrowser.
Simples Validação dos Forms.
Para grande parte das aplicações não é necessário
conhecer HTML e JavaScript.
116. O ciclo de vida de uma página ASP.NET apresenta
cinco estágios básicos:
Page_Init
Page_Unload Page_Load
Event
Validation
Handling
117. Cliente recebe Cliente inicia
página em HTML comunicação
com o servidor
Processa
Envia Requisições
Resposta do Cliente
Armazena
Dados de Executa
Sessão Server-Side
Code (ASP.NET)
118. Conjunto integrado de serviços de rede
Permite publicar conteúdo e disponibilizar arquivos
e aplicações em um ambiente Internet/Intranet.
Integrado ao sistema operacional
Dotado de uma interface administrativa cem por
cento gráfica
Web Server
Hospedagem de web sites
Site FTP e grupos de notícias
Diretório Virtual
119. Utilizado
durante o desenvolvimento da aplicação
Não necessita de configurações adicionais
Não precisa IIS, porém pode ser integrado a ele
Não necessita Extensões FrontPage
122. Tópicos abordados:
Desenvolvendo para internet (Parte II)
Eventos e Controles
Master Page
Manutenção de Estados
ASP.NET e C#
User Controls
Eventos e Delegates
124. Muitos eventos são disparados através de ações de
usuários captadas pelo navegador
O código para manipular o evento disparado é executado no
servidor
Quando o código completa sua execução, a página web
pronta é enviada de volta ao navegador (contendo código
html e script)
125. Para adicionar um controle Web server
Na visualização de projeto (Design), arraste o controle
desejado da aba Web Forms da Toolbox
Para adicionar um controle HTML server
Arraste para a página um controle HTML da tab HTML
da Toolbox
126. Button: Botão
CheckBox: Caixa para selecionar ou não um item
Label: Texto que não pode ser editado diretamente
LinkButton: Um botão com aparência de link
ListBox: Lista para escolha de uma ou mais
opções
RadioButton: Caixa para selecionar ou não um
item.
127. Gridview – tabela para exibição de dados de fácil
preenchimento e integração com BD, com controle
de paginação e ordenação automáticos e suporte a
templates.
128. DataList: Mecanismo parecido com o GridView,
porém, com menos recursos
Repeater: Mecanismo parecido com o GridView,
porém mais flexível e leve
DropDownList: Lista para escolha de uma das
opções. Bastante útil quando se quer que as
opções sejam extraídas de um banco de dados
Image: Exibição de uma imagem
129. Wizard – permite criar um formulário passo a
passo.
130. SiteMap– permite criar um menu de navegação
baseado na página que o usuário está acessando.
131. Menu– permite criar um menu com links de
maneira estática ou dinâmica. Pode utilizar o
mesmo arquivo XML do SiteMap.
132. Criar uma Herança Visual para o Web Site.
Manutenção centralizada, não é necessário mudar o
código em várias páginas, apenas em uma.
Facilidade na criação do layout.
Reaproveitamento de código.
133.
134.
135. Uma das formas mais simples de manutenção de
estado é através de variáveis de sessão
Porpadrão, estas informações estão armazenadas
no próprio processo do ASP.NET
É possível armazenar informações de sessão em
um processo separado (um servidor de estado) ou
até mesmo em um Sistema Gerenciador de Banco
de Dados
136. Uma variável de sessão está associada
exclusivamente a uma única sessão.
Istosignifica que um dado armazenado em uma
variável de sessão com nome X para o usuário
João não será visível na variável de sessão de
mesmo nome do usuário Pedro, e vice-versa.
Session[“X"] = “S2B”;
string nome = (string)Session[“X"];
137. Presentes no Global.asax
protected void Session_Start(Object sender, EventArgs e)
{
//Evento disparado quando a uma sessão é iniciada.
}
protected void Session_End(Object sender, EventArgs e)
{
//Evento disparado quando a sessão é finalizada.
}
138. Variável de estado da aplicação
Visível em toda aplicação para TODOS usuários
Exemplos de uso:
Chat
Contador de Acessos
Exemplo:
Application[“ContadorAcessos”] = 0;
139. Presentes no Global.asax
protected void Application_Start(Object sender, EventArgs e)
{
//Evento disparado quando a aplicação é iniciada.
}
protected void Application_End(Object sender, EventArgs e)
{
//Evento disparado quando uma aplicação é finalizada.
}
140. Mantêm automaticamente os valores de controles
de servidor entre um postback e outro
Internamentefunciona como um campo oculto
(hidden) um pouco mais sofisticado
141. Ao rodar uma aplicação ASP.NET sem qualquer
controle verá que é criado um campo oculto para o
armazenamento do ViewState:
<input type="hidden"
name="__VIEWSTATE"
id="__VIEWSTATE"
value="/wEPDwUJNzgzNDMwNTMzZGS8mO25pQR00V4slvgSxG3dEvK+hA==“ />
Note que os dados não são exibidos em texto
plano, por questões de segurança
142. Pode-se ainda adicionar manualmente valores a
um ViewState, lembrando que você vai conseguir
recuperá-los apenas na mesma página
ViewState.Add("Nome“, “Bill“);
String nome = (string) ViewState[“Nome”];
143. Trata-se de um pequeno arquivo de texto que é
armazenado na maquina do usuário
Usado, por exemplo, em sites de comércio
eletrônico, para exibir as preferências e
características do usuário
Pode identificar o usuário mesmo dias depois de
seu acesso a página.
O grande problema dos cookies é que o usuário
simplesmente pode desabilitar este recurso em seu
navegador
144. Escrevendo um Cookie
//Cria um novo cookie, passando o nome no construtor
HttpCookie cookie = new HttpCookie(“Nome”);
//Determina o valor o cookie
cookie.Value = “Márcio”;
//Configura o cookie para expirar em 1 minuto
DateTime dtNow = DateTime.Now;
TimeSpan tsMinute = new TimeSpan(0, 0, 1, 0);
cookie.Expires = dtNow + tsMinute;
//Adiciona o cookie
Response.Cookies.Add(cookie);
145. Lendo um Cookie
//Pega o nome do que cookie que o usuário informou
String strCookieName = NameField.Text;
//Captura o cookie
HttpCookie cookie = Request.Cookies[strCookieName];
String strCookieValue = “Vazio”;
//Certifica-se que o cookie existe
if (cookie != null)
strCookieValue = cookie.Value.ToString();
146. Arquivo no formato XML
Informações de configuração da sua aplicação, tais
como, string de conexão, páginas de erro, modo de
compilação,etc.
Armazenar valores e parâmetros que sejam comuns a
toda nossa aplicação.
Case Sensitive
149. Controle web criado por um usuário.
Possui extensão .ascx
Herda de System.Web.UI.UserControl
Simplificam a reusabilidade de código e
componentes User interface (UI) dentro de uma
aplicação Web
Contém HTML, mas não as tags <HTML>,<BODY>
ou <FORM>
Contém código para gerenciar seus próprios
eventos
Podem agregar vários controles em um
componente reusável
151. Conceitos:
Evento: ação que pode ser
gerenciada/manipulada através de código
Delegate: membro da classe responsável por
“delegar” as ações correspondentes a ocorrência
de um evento ao(s) manipulador(es) de eventos
correspondentes
Manipulador de Evento: método responsável pela
execução de ações em reação a ocorrência de
um evento
152. Cinco passos para se trabalhar com eventos
Passo 1: declarar o delegate contendo a assinatura
do manipulador de evento correspondente ao
evento
public class Cliente
{
public delegate void delegateProdutos(int produtos);
}
Passo 2: declarar o evento (deve ser do mesmo
tipo do delegate correspondente)
public class Cliente
{
public delegate void delegateProdutos(int produtos);
public event delegateProdutos EventoProdutos;
}
153. Passo 3: disparar o evento na chamada de algum
método da classe
public class Cliente
{
...
public void MetodoEvento(int produtosAdquiridos) {
this.EventoProdutos(produtosAdquiridos); }
}
Passo 4: assinar o evento indicando o
manipulador de eventos do mesmo através de
uma instância de delegate
cliente.EventoProdutos += new
Cliente.delegateProdutos(ManipuladorEvento);
154. Passo 5: implementar o manipulador de evento
(deve respeitar a mesma assinatura definida pelo
delegate do evento)
public void ManipuladorEvento(int produtos)
{
label1.Text = produtos.ToString();
}
159. Recurso da versão 2.0
Permite dividir a implementação de um
determinado tipo em diversos arquivos.
Disponível para classes, estruturas e interfaces.
Definidos pela palavra-chave partial.
160. Quando podem ser utilizados:
Quando trabalhamos com código gerado
automaticamente, código pode ser adicionado à
classe sem ter que recriar o arquivo fonte.
Partial Types permitem que dois ou mais
desenvolvedores trabalhem no mesmo tipo,
enquanto ambos têm seus arquivos checados
para edição, sem interferir um no outro.
161. Declarando uma classe parcial
ClienteP1.cs
public partial class Cliente
{
public int codigo;
public bool EClienteEspecial() { … }
}
ClienteP2.cs
public partial class Cliente
{
int produtosAdquiridos;
public int ProdutosAdquiridos {
get { … }
set { … }
}
}
162. Declarando uma classe parcial agrupada em uma classe
ClienteP1.cs
public partial class Cliente {
int produtosAdquiridos;
public partial class ClientesEspeciais {
static List<Cliente> lista = new List<Cliente>();
}
}
ClienteP2.cs
public partial class Cliente {
public partial class ClientesEspeciais {
public void Adiciona(Cliente c) {
if (c.EClienteEspecial)
ClientesEspeciais.lista.Add(c);
}
}
}
163. As partes de uma classe não podem definir
aspectos contraditórios.
Uma classe (ou estrutura) pode ter dois tipos de
aspectos ou qualidades: acumulativa e não-
acumulativa.
Os aspectos acumulativos são aspectos que cada
parte do tipo parcial pode escolher adicionar, como
derivação de interfaces, propriedades, índices,
métodos e variáveis.
Os aspectos não-acumulativos são aspectos que
todas as partes do tipo parcial devem possuir.
164. Classes Acumulativas
public partial class Computador {} // CompP1.cs
public partial class Computador : IProduto {// CompP2.cs
public void Adiciona() {...}
public void Remove() {...}
}
Classes Não-Acumulativas
public class Pessoa {}
public class Funcionario {}
public partial class Vendedor : Pessoa {} // VendedorP1.cs
public partial class Vendedor : Pessoa {} // VendedorP2.cs
//Não compila
public partial class Vendedor : Funcionario {}
165. Todas as partes devem ter a mesma
acessibilidade.
Além de todas as partes definirem as mesmas
partes não-acumulativas, apenas uma parte pode
fazer o override de um método virtual ou abstract, e
apenas uma parte pode implementar uma mesma
interface.
Ao usar Partial Types, é recomendável indicar no
nome do arquivo que este contém partes de um
tipo. Como por exemplo: MinhaClasseP1.cs,
MinhaClasseP2.cs
166. Recurso da versão 2.0.
Variáveis continuam a representar todos os valores
do seu tipo, e mais um valor adicional null.
Permite uma integração melhor com bancos de
dados, que podem conter valores null em seus
campos.
Declaradas através da classe Nullable, ou através
do operador ? adicionado ao tipo à ser utilizado.
167. Podem ser declaradas de duas formas:
System.Nullable<T> variavel;
<T>? variavel;
Onde T é o tipo da variável
Ambas notações funcionam de maneira equivalente
Declarando e usando uma variável inteira e anulável
int? clienteId;
clienteId = 10; //Ok
clienteId = null; //Ok, clienteId é anulável
168. Qualquer tipo por valor pode ser usado como Nullable Type
int? i = 10;
double? x = 3.14;
bool? flag = null;
char? letra = 'a';
int?[] MeuArray = new int?[10];
Os exemplos seguintes não são tipos por valor, portanto não são
aceitáveis como Nullable Types
string? variavel = “tipos anulaveis”;
Cliente? umCliente = new Cliente?();
169. O operador as só pode ser utilizado com tipos por referência, então
não pode ser usado com Nullable Types
int clienteId = 5;
object b = clienteId;
// Erro em tempo de compilação
int? c = b as int;
Uma instância de um tipo anulável possui duas propriedades read-
only
HasValue: do tipo bool, retorna verdadeiro quando uma
variável contém um valor não-nulo.
Value: do tipo equivalente ao tipo anulável utilizado, se
HasValue é true, então Value contém um valor significativo,
senão, ao tentar acessar Value será gerada uma exception.
170. Utilizando as propriedades de um tipo anulável
int? clienteId = 10;
if (clienteId.HasValue)
Console.WriteLine(clienteId.Value);
else
Console.WriteLine(“Identificação Indefinida!”);
Conversões explícitas
Um tipo anulável pode ser convertido para um tipo regular
usando casts ou usando a propriedade Value.
Se o tipo anulável contém o valor null, será gerada uma
exception.
171. Conversões explícitas
// Exemplos
int? clienteId = null;
// Não compila
int x = clienteId;
// Compila, mas será gerada uma exception se x for null
int x = (int)clienteId;
// Compila, mas será gerada uma exception se x for null
int x = clienteId.Value;
Conversões implícitas
A conversão de um tipo anulável para um tipo regular é
implícita.
int? produtosAdquiridos = null;
// Conversão implícita
int produtosAdquiridos = 10;
172. Operadores
Quaisquer operadores existentes para tipos por valor podem
ser utilizados com Nullable Types.
O operador produzirá null se os operandos forem nulos, caso
contrário, usará o valor contido para calcular o resultado.
int? x = 10;
x++; // x agora é 11
x = x * 10; // x agora é 110
int? y = null;
x = x + y; // x agora é null
173. Operadores
Quando são feitas comparações com Nullable
Types, se ambos os Nullable Types são null,
então a comparação sempre retornará false. O
caso oposto retornará true.
int? x = 250;
int? produtosAdquiridos = null;
if (x >= produtosAdquiridos)
Console.WriteLine(“Adquiriu mais de {0} produtos.”,x);
else // Não é válido
Console.WriteLine(“Adquiriu menos de {0} produtos.”,x);
A conclusão contida na expressão else não é
válida porque produtosAdquiridos é null,
portanto, não contém nenhum valor. Logo, não
pode ser maior ou menor que x.
174. O operador ??
Define um valor padrão que é retornado quando um
tipo anulável é atribuído à um tipo não-anulável.
// Exemplo
int? produtosAdquiridos = null;
// Atribui o valor 0 à y se produtosAdquiridos for null
int y = produtosAdquiridos ?? 0;
Também pode ser utilizado com vários Nullable
Types
int? limiteCredito;
int? valorDefault;
// Se limiteCredito não for null, z = limiteCredito.
// Se limiteCredito for null, z = valorDefault.
int? z = limiteCredito ?? valorDefault;
176. ArrayListnão precisa ter um tamanho predefinido.
Pode carregar ou preencher um array.
Possui métodos específicos para manipular seus
elementos.
int[] codigos = {1,2,46,32,78};
ArrayList listagem = new ArrayList(codigos); //Carrega um array
listagem.Remove(46); //Remove um elemento
listagem.Add(10); //Insere um novo elemento
Response.Write(listagem.Count); //Imprime seu tamanho atual
int i = (int) listagem[2]; //Passa o valor 32
//para a variável i
listagem.Sort(); //Ordena os elementos
listagem.CopyTo(codigos); //Preenche um array
listagem.Clear(); //Remove todos elementos
177. Semelhante ao ArrayList, não precisa ter um
tamanho predefinido e possui métodos específicos
para manipular seus elementos.
Os últimos elementos inseridos pelo método Push
são os primeiros a serem retornados pelo método
Pop, da mesma forma que uma pilha:
Stack pilha = new Stack();
pilha.Push("blusas");
pilha.Push("camisetas");
pilha.Push("camisas");
Response.Write(pilha.Pop());
// imprime o último elemento inserido
// no caso o primeiro da coleção “camisas”
178. Semelhante ao Stack, porém trabalha de forma
contrária. Seu método Dequeue retorna os
primeiros inseridos pelo método Queue,
semelhante a uma fila:
Queue fila = new Queue();
fila.Enqueue("Idosos");
fila.Enqueue("Grávidas");
fila.Enqueue("Deficientes");
fila.Enqueue("Funcionários");
Response.Write(fila.Dequeue());
// imprime o primeiro elemento inserido
// no caso o primeiro da coleção “Idosos”
179. Semelhante a um ArrayList, mas somente permite
a inserção elementos de um tipo predefinido.
List<int> listagem = new List<int>(); //Instancia uma lista de
//inteiros
listagem.Add(39); //Insere um novo elemento
listagem.Add(22); //Insere um novo elemento
Response.Write(listagem.Count); //Imprime seu tamanho atual
listagem.Sort(); //Ordena os elementos
listagem.Clear(); //Remove todos elementos
180. Semelhante a List<T>, porem permite o uso de
uma chave „K‟ de um tipo predefinido, para
referenciar um valor do tipo „V‟.
Dictionary<string, string> dic = new Dictionary<string, string>();
//Instancia um dicionário string-string
dic.Add(“Name”, “Nome”);
dic.Add(“Day”, “Dia”);
dic.Remove(“Day”);
Response.Write(dic[“Name”]);
185. SilverLight (‘WPF/e’)
• A “Media Web”
WPF
Riqueza para a camada de
apresentacao
ASP.NET AJAX
• Aumenta a interação do usuário
• Aumenta a Experiência
renda/usuário
HTML + JavaScript
• Melhora Navegação
• Facilita a Personalização
HTML
• Grande Alcance
Fácil utilização, personalização, diferenciação, riqueza
186. Aplicação Desktop Aplicação Web
Interativa Estática
Rápida Lenta
Difícil Implantação Fácil Implementação
Desatualizada Sempre Atualizada
Roda no Cliente Roda no Servidor
RIA - Rich Internet Application
187. A web hoje é dinâmica?
O mesmo conteúdo é apresentado a todos os
usuários
Aplicações Web ainda perdem de aplicações
Desktop
Alternativas
Java Applets
SilverLight
Macromedia Flash
188. Post-backs forçam que a página seja recarregada
a cada clique.
Não mantém o estado da página naturalmente
(stateless).
Interfaces ricas são de difícil concepção.
“Lenta” em relação a aplicações de clientes ricos
(desktop).
189. RIA –Rich Internet Application
Web 2.0
AJAX
190. AJAX = “Asynchronous Javascript And XML”.
É um conjunto de recursos e tecnologias,
presentes há algum tempo, nas linguagens e
navegadores atuais.
AJAX não é tecnologia. É um conjunto de técnicas
que tem como objetivo promover uma melhor e
mais rica experiência de uso.
AJAX faz uso das características da linguagem
JavaScript, da portabilidade e flexibilidade do
padrão XML e dos recursos de chamada
assíncronas que foram implementadas nos
navegadores.
191. Objetoque a linguagem Javascript implementa e
está presente nos navegadores : Internet Explorer
5.0+, Safari 1.2, Mozilla 1.0 / Firefox e Netscape7.
Tem a capacidade de executar a leitura remota de
dados de forma assíncrona, permitindo assim a
execução de outras tarefas imediatamente após a
chamada.
Retorna dados em formato XML e Texto.
PADRÃO RECONHECIDO PELO W3C!
http://www.w3.org/TR/XMLHttpRequest/
(05/04/06)
192. Framework para criação de uma nova geração de
aplicações web, com interfaces ricas, interativas,
personalizadas e baseadas em padrões
Biblioteca de scripts para cliente
Componentes para servidor
Integra funções do cliente com funções do ASP.NET
Desenvolvimento de aplicações com “estilo AJAX”
193. UM FRAMEWORK PARA DESENVOLVER UMA EXPERIÊNCIA NA
WEB MAIS RICA, INTERATIVA E PERSONALIZADA
Produtividade incrementada
Menos conceitos e complexidade
Menos linhas de código
Fácil de criar, debugar e manter
Separação clara do conteúdo, estilo, ações e código
Perfeitamente integrado as ferramentas de design e
desenvolvimento
194. Controle responsável por gerenciar todos os scripts
utilizados por páginas ASP.NET AJAX
Porque usar o ScriptManager?
Tornar disponível as funcionalidades das bibliotecas do
ASP.NET AJAX e manter a compatibilidade com demais
scripts utilizados dentro de páginas que implementam
essa tecnologia
Habilitar o recurso de Partial-Page Rendering
possibilitando que partes independentes da página
possam ser atualizadas sem gerar um postback
Componente obrigatório quando se deseja utilizar os
componentes como UpdatePanel, UpdateProgress e
Timer
195. ControleASP.NET AJAX que cria um painel
atualizável em uma página ASP.NET AJAX,
permitindo post-backs baseados em
XmlHttpRequest
<asp:UpdatePanel ID="UpdateMaster“ runat="server">
<ContentTemplate>
<div>
<asp:GridView ID="GridView1" runat="server" />
...
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
196. O controle UpdatePanel do ASP.NET AJAX
permite que você crie aplicações web com uma
interface mais interativa e amigável com o usuário
Usando este controle você pode atualizar partes
selecionadas de uma página ao invés de atualizar
toda a página web usando um postback
197. Ciclo de vida de um postback utilizando o ASP.NET
AJAX
ASP.NET AJAX intercepta as ações de postback da página
Usa XMLHttpRequest para disparar o postback ao servidor que
ocorre normalmente
Apenas os conteúdos dos UpdatePanel são retornados
As regiões alteradas no UpdatePanel são atualizadas no Cliente
Todos os postbacks gerados por controles dentro do
UpdatePanel serão tratados como postback Ajax com
atualizações incrementais da página
Postbacks para controles fora do UpdatePanel transcorrerão da
forma convencional por padrão
198. Adicionando Triggers em um UpdatePanel para
permitir que outros controles disparem postback
assíncrono
Controles fora de um UpdatePanel podem disparar um
postback assíncrono
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1“
EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
199. Control Extenders
Estender controles ASP.NET com funcionalidades de
controles ASP.NET AJAX
Encapsular comportamentos tanto no lado do cliente
quanto do lado do servidor
Mesmo modelo de programação de controles ASP.NET
<asp:TextBox runat="server" ID="TextBox1" />
<asp:AutoCompleteExtender runat="server" ID="AC1”
TargetControlID="TextBox1"
ServicePath="AutoComplete.asmx“
ServiceMethod="GetWords" Enabled="true"
MinimumPrefixLength="1" />
200. Provefeedback no processo de atualização
durante um postback assíncrono
<asp:UpdateProgress ID="UpdateProgress1“ runat="server">
<ProgressTemplate>
Please Wait ...
</ProgressTemplate>
</asp:UpdateProgress>
201. Um rico conjunto de controles e extenders que
transformam a tarefa de construir uma interface
rica utilizando ASP.NET AJAX uma tarefa simples e
rápida
Exemplos de fácil compreensão, código fonte e
documentação completa
SDK que simplifica a criação de componentes ASP.NET
AJAX
mais de 30 componentes e extenders
Projeto não suportado pela Microsoft
Este é um projeto comunitário suportado e disponível no CodePlex
205. É um serviço disponível na Internet, através de
um Servidor Web
Possui funções contendo suas regras de
negócios, que podem ser acessadas através de
aplicativos
Possibilita a comunicação entre Sistemas
Tecnologia que torna possível realizar
transações, troca de dados entre empresas,
que antes eram difíceis ou impossíveis
206. São baseados em Padrões da Web
Os dados trafegam em formato XML, através
do protocolo SOAP
Independente de plataforma, ou seja, sistemas
heterogêneos podem se comunicar facilmente
Pode retornar vários tipos de dados, como por
exemplo uma tabela do banco de dados
207. Necessidade de Integração entre Negócios (B2B)
Tendência do Software como Serviço
208. Disquete, Email, FTP ou Compartilhamento de
Redes
Comunicação Aplicativo X Aplicativo
Banco de Dados
Arquivos (Ex: Texto, como CSV; ou em Protocolo
Específico)
Invocação de Objetos Remotos (Ex: CORBA, DCOM, IIOP,
ORB)
209. Tecnologias dependentes de plataforma
Difícil integração (necessidade de bridge)
Criava-se um pequeno protocolo de
comunicação
Necessidade de Transformação de Dados
Pouco segura, complexas, caras, baixa
produtividade e pouco robustas
210. Deve ser independente de software e hardware
Prover Serviços através das barreiras existentes
entre diferentes companhias
Promover automação
Como conseguir tudo isso?
Web Services!
212. Simple Object Access Protocol
Define como as mensagens podem ser trocadas
entre dois sistemas
Define uma estrutura XML de troca de mensagens
que pode chamar e retornar resultados a partir de
uma aplicação.
213. Independente de plataforma
Fácil de „traduzir‟. (decodificar)
Pode ser veiculado pela porta 80, sem a
necessidade de abrir portas no firewall
214. HTTP
HTTP Request HTTP
Message GET- POST Message
HTML HTML
SOAP SOAP SOAP
Message Request Message
XML XML
Cliente do Web Service Servidor Web
Windows Application
XML
Rede Web Service
SOAP SOAP
Message Message
XML SOAP XML
Response
215. HTTP
HTTP Request HTTP
Message GET- POST Message
HTML HTML
HTTP HTTP HTTP
Message Request Message
HTML HTML SOAP SOAP SOAP
Message Request Message
XML XML
Servidor
Browser
Web
Cliente do
Web Service
Rede Rede XML
Web App Web Service
HTTP HTTP SOAP SOAP
Message Message Message Message
HTML HTTP HTML XML SOAP XML
Response Response
216. WSDL – Web Services Description Language
Documento XML que define as interfaces de seu
Web Service
Mostra os métodos e suas assinaturas
217. DISCO (Discovery of WS)
& UDDI (Universal Description, Discovery and
Integration)
“Engine de Busca por Web Services”
“Páginas Amarelas”
http://www.uddi.org
http://uddi.microsoft.com
http://uddi.ibm.com
http://uddi.sap.com
218. Pesquisa o Serviço
http://www.uddi.org
URL de um documento DISCO ou WSDL
UDDI
Acha o Serviço
http://yourservice.com
Cliente HTML ou XML com URL para WSDL
Do
Como conversar? (WSDL) Web
Web http://yourservice.com/?WSDL
Service
Service Descrições do serviço em XML
Conversando (SOAP)
http://yourservice.com/svc1
XML/SOAP
Tempo de Desenvolvimento Tempo de Execução
219. Visual Studio.NET, Web Matrix, …
IIS – Servidor IDE
ASP.Net
Máquina de
.NET Framework
Desenvolvimento
Código
Aplicação
IIS Servidor da
ASP.Net Aplicação
.NET Framework
220. Cliente
Aplicação
asmx SOAP (xml)
Aplicação
IIS
Servidor da
ASP.Net Aplicação
.NET Framework
225. Banco de Dados
É uma coleção de dados inter-relacionados, representando
informações sobre um domínio específico
Ex.: Lista Telefônica, Fichas de acervo de Biblioteca
Sistema Gerenciador de Banco de Dados
São softwares que permitem a definição de estruturas
para armazenamento de informações e fornecimento de
mecanismos para manipulá-las.
Caracterísitcas:
Integridade, Restrições, Segurança/Privacidade,
Restauração, Eficiência
Ex.: SQL Server, Oracle, PostgresSQL, MySQL
226. Dado
Conjunto de símbolos “arranjados” a fim de representar a
informação fora da mente humana.
Elementos de Dados
Subconjunto de símbolos que compõem um dado com
significado específico, mas não representa a informação
completa.
Ex.: O número de alunos na turma MAT01 de 2008 é 79.
Os elementos de dados são:
Turma: MAT01
Ano: 2008
Alunos: 79
227. Tabelas
Objeto criado para armazenar os dados fisicamente
Os dados são armazenados em linhas (registros) e
colunas (campos)
228. Registros
São linhas de uma tabela
Armazenam um conjunto de dados pré-definido pela tabela
Campos
São as colunas de uma tabela
Possuem um tipo de dado definido
Armazenam um dado
Chave Primária
Campo que permite a identificação única de um registro em
uma tabela
Chave Estrangeira
Campo que referencia uma Chave de um outro registro
229. Índices
É uma ferramenta usada pelo gerenciador de Banco de Dados
para facilitar a busca de linhas dentro de uma tabela
Índice Único
Índice criado a partir de uma coluna ou de um conjunto de
colunas. Não permite a inclusão de linhas duplicadas
Índice de Performance
Facilita a busca de linhas na tabela
230. C L IE N T E N O T A _ F IS C A L
PK C L I_ C O D PK NF_NRO
C L I_ N O M E NF_DATA
C L I_ E N D NF_CLI
I1 C L I_ C N P J NF_CFO P
FK1 C L I_ C O D
PRO DUTO IT E M _ N F
PK PRO D _CO D P K ,F K 2 NF_NRO
PK IT E M _ C O D
PRO D _DESC
P R O D _ IP I IT E M _ V A L O R
P R O D _ U N IT IT E M _ Q T D
PRO D _Q TD FK1 PRO D _CO D
231. Visões
São tabelas lógicas sobre um Banco de dados mas que não
possuem os dados propriamente ditos
Visão Idêntica:
232. Visão por Seleção de Colunas:
Visão por Seleção de Linhas:
237. INSERT INTO [cliente]
([cli_nome],[cli_end],[cli_cnpj])
VALUES
('Bill Gates','Quinta Avenida','12345678900')
Se a tabela possui um campo identity, não é permitido
definir manualmente o valor para este campo
Se um campo foi definido como NOT NULL então é
necessário especificar seu valor
238. UPDATE [cliente]
SET [cli_end] = 'Sete de Setembro'
WHERE [cli_cnpj] = '12345678900'
Ao atualizar um registro, especifique as colunas a
serem alteradas
A cláusula WHERE é opcional, se for omitida então a
atualização ocorrerá em todos os registros
240. Todas as colunas da tabela cliente
SELECT * FROM cliente
Coluna com o código e o nome da tabela cliente.
SELECT cli_cod, cli_nome FROM cliente
Todos
as colunas da tabela cliente onde o nome
comece com Bil
SELECT * FROM cliente WHERE cli_nome LIKE „Bil%‟
241. INNER JOIN
Une o conteúdo de duas tabelas por meio de uma cláusula de
junção gerando um novo conjunto de dados. Retorna apenas os
registros que atendam a cláusula de junção
SELECT *
FROM cliente
INNER JOIN nota_fiscal
ON cliente.cli_cod = nota_fiscal.cli_cod
LEFT JOIN
Une o conteúdo de duas tabelas por meio de uma cláusula de
junção gerando um novo conjunto de dados. Retorna todos os
registros da tabela da esquerda mesmo que não haja um registro
que atenda a cláusula de junção na tabela da direita
SELECT *
FROM cliente
LEFT JOIN nota_fiscal
ON cliente.cli_cod = nota_fiscal.cli_cod