You are on page 1of 243

TREINAMENTO

SEGUNDA FASE

rea de Desenvolvimento
de Sistemas

Tpicos

abordados:

Introduo ao .Net Framework e CLR


Plataforma Visual Studio 2008
Lgica de Programao (Parte I)

Aula 1

O .NET Framework um modelo de programao de


cdigo gerenciado da Microsoft para criar aplicativos
em clientes, servidores e dispositivos mveis ou
incorporados ao Windows.

Conjunto rico de bibliotecas com os mais variados usos;


Controle de verso: fim do DLL Hell;
Facilidade de desenvolvimento de aplicaes desde as mais
simples at as mais complexas;
Facilidade na instalao e na distribuio de aplicaes;
Alta escalabilidade para ambientes de misso crtica;
Interoperabilidade entre plataformas e componentes
desenvolvidos em outras linguagens .NET;
Sintonizado com as ltimas tecnologias;
Orientada a objetos;
Tecnologia baseada em mquina virtual;

.NET permite desenvolver solues como:

Aplicativos Web
Aplicativos para Servidores
Aplicativos Smart Client
Aplicativos de Console
Aplicativos de Banco de Dados
Servios Windows
Web Services e muito mais

.NET Framework 3.5 vem para incrementar as .NET


Frameworks 2.0 e 3.0 com novos recursos em vrias
reas de tecnologia. Entre eles, esto:
Profunda integrao entre LINQ (consulta integrada
linguagem) e reconhecimento de dados.
Novas implementaes 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 bsicas) que


vm atender solicitaes comuns entre os desenvolvedores.

.NET Framework
VB

C++

C#

JScript

...

Common Type System (CTS)

Windows Forms

ADO .NET: Data e XML

.NET Framework Base Class

Common Language Runtime (CLR)

Visual Studio .NET

ASP .NET: Web Services


e Web Forms

Common

Language Runtime (CLR) o


componente encarregado de gerenciar aplicaes
desenvolvidas em .NET.
O compilador de cada linguagem segue uma srie
de especificaes, conhecida como Common
Language Infrastructure (CLI), para compilar seus
cdigos.
Estas especificaes so 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 tambm em Linux, BSD, UNIX, Mac OS
X e Solaris).

Servios

de gerenciamento de memria
Servios de tratamento de excees
Servios de compilao
Servios de segurana, etc.

Compilao
Source
Code

Language
Compiler

Execuo
Native
Code

JIT Compiler

Code
MSIL
Metadata

Antes da
instalao ou a
primeira vez que
cada mtodo
chamado

Cdigo
Fonte

Cdigo
Gerencivel

VB

C#

C++

Compilador

Compilador

Compilador

Assembly - Cdigo IL

Common Language Runtime (CLR)


Compilador JIT

Cdigo Nativo

Servios do Sistema Operacional

Componente
No Gerencivel

Managed

Cdigo Fonte
Compilador
Cdigo Intermedirio (IL): .DLL ou .EXE
Requer o ambiente CLR para executar
Cdigo de Mquina (Binrio)

Unmanaged

Cdigo Fonte
Compilador
Cdigo de Mquina (Binrio)
NO requer o ambiente CLR para executar

Microsoft

Visual Basic.NET
Microsoft C#
Microsoft C++ (Gerenciado/No-Gerenciado)
Microsoft J#
Outras:
http://www.dotnetlanguages.net
http://www.dotnetpowered.com

Aula 1

Um

conjunto de ferramentas de desenvolvimento


que permite aos desenvolvedores de software
resolver problemas complexos e criar solues
inovadoras.
Baseia-se em trs pilares principais:

Desenvolvimento rpido de aplicativos


Colaborao eficaz em equipe
Experincias de usurio inovadoras

Desenvolver

Web Site e Aplicaes Web com


ASP.NET, AJAX.NET e Silverlight.
Impressionar com mdia e grficos desenvolvidos
com o Windows Presentation Foundation.
Aplicativos que estendem funes do Office 2003 e
2007.
Aplicaes para Windows Mobile.
Desenvolver solues de integrao coorporativa
com Windows Communication Foundation e o
Windows Workflow Foundation e muito mais...

Demonstrao

File

> New > Project...

Aula 1

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 preciso de 28 casas decimais.
double

Ponto flutuante binrio. Este tipo tem uma preciso de 15 casas decimais.

float

Ponto flutuante binrio. Este tipo tem uma preciso 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.

Armazenado

na memria Stack.
Trabalha com dados diretamente.
No pode ser nulo.
Exemplo:
Inteiros
Decimais
Booleanos
Estruturas
Enumeradores

STACK

...

idade

19

salrio

500.00

brasileiro

Contm

uma referncia a um ponteiro na


memria Heap.
Pode ser nulo
STACK
Exemplo:
Vetores
Textos
Instncias de Classes
Classes

Nome

...
HEAP
...
Nome

Texto

#XXXX

int i = 123;
object O;
O = i;
string S;
S = O.ToString()
int x;
x = (int) O;

// Tipo por valor


// Tipo por referncia
// Causa boxing
// Chama via O
// Faz unboxing

Stack
i
O
x

Heap

123
123

123

int i = 123;
object O;
O = i;
string S;
S = O.ToString();
int x;
x = (int) O;

// Tipo por valor


// Causa boxing
// Tipo por referncia
// Chama via O
// Faz unboxing

STACK

123

HEAP

...

...

i
...

123

O
...

123

123

Aritmticos

+, -, *, /, %

Atribuio

=, +=, -=, *=, /=, <<=, >>=, &=, ^=, |=

Concatenao

Criao de Objetos

New

Igualdade e Diferena

==, !=

Incremento e Decremento

++, --

Lgicos
Primrios
Relacionais

&, ^, |, &&, ||, ~, !


typeof, sizeof, checked, unchecked
<, >, <=, >=, is

if

... else if ... else


A clusula if ocorre apenas uma vez
A clusula else if pode ocorrer nenhuma ou vrias vezes
A clusula 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("No autorizado.");
Response.Write(Menor de 15 anos.);
}

switch

case

Estruturas de deciso caracterizadas pela possibilidade


de uma varivel possuir vrios valores.
A clusula switch ocorre uma vez
A clusula case pode ocorrer uma ou vrias vezes
default opcional.
switch (sexo)
{
case "masculino":
Response.Write("Homem");
break;
case "feminino":
Response.Write("Mulher");
break;
default:
Response.Write("No informado");
break;
}

for

Estrutura de repetio caracterizada pela existncia de


trs parmetros:

Valor inicial
Condio para parada das iteraes
Quantidade de incrementos/decrementos a cada iterao

for (int i = 0; i < 10; i++)


{
Response.Write(i);
Response.Write(<br />);
}

while

Estrutura de repetio que realiza as operaes


desejadas enquanto a condio especificada for
verdadeira.
int i = 0;
while(i != 10)
{
Response.Write(i);
Response.Write("<br />");
i++;
}

do

... while

Estrutura de repetio semelhante anterior, com o


diferencial de que as condies so verificadas no final
da execuo
Permite que as operaes 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);

// Exemplo I
string S = 123;
int i = S;
Response.Write(i);

// Exemplo IV
string S = valor;
int i = Convert.ToInt32(S);
Response.Write(i);

// Exemplo II
string S = "123";
int i = Convert.ToInt32(S);
Response.Write(i);

// Exemplo V
string S = "valor";
int i = 0;
if (int.TryParse(S, out i))
{
Response.Write(i);
}
else
{
Response.Write(valor
invlido.);
}

// Exemplo III
string S = 123;
int i = int.Parse(S);
Response.Write(i);

try

... catch ... finally

// Sintaxe
try {
// cdigo factvel de erro
} catch (NullReferenceException ex){
// excees de referncia nula
} catch {
// trata outras excees
} finally {
// executa sempre
}
// Exemplo II
try
{
// Exemplo I
throw new Exception("Erro");
try
}
{
catch (Exception ex)
int i = int.Parse(2mm);
{
} catch {
Response.Write(ex.Message);
Response.Write(Invlido);
}
}

Fase 2 - Aula 1

Tpicos abordados:

Lgica de Programao (Parte II)

Arrays
Enumeradores
Namespaces
Comentrios
Estruturas
Tratamento de Excees

Orientao a Objeto (Parte I)

Classes e Objetos
Atributos
Mtodos
Construtores
Herana e Polimorfismo
Encapsulamento
Modificadores de Acesso

Aula 2

Array

uma varivel que permite o


armazenamento de um bloco de um tipo particular
de variveis (int, string, object, bool...) na memria.
No C# os Arrays so indexados a partir de zero (0).
No podem ter seu tamanho alterado depois de
instanciados.

Para

declarar um Array, basta adicionar um par de


colchetes logo aps a declarao 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] = Joo;

Podem

ser:

Unidimensionais: array com uma chave.


int[] codigos = new int[5];
codigos[0] = 1;

int[] codigos = {1,3,6,7,8};

Multidimensionais:

Retangular ou matriz: array com mais de uma chave.

int[,] codigos = new int[2,2];


codigos[0,0] = 11;

int[,] codigos =
{{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} };

Definindo

Tipos Enumeradores

enum TipoDiretor
{
Marketing,
RH,
Comercial,
Financeiro
}
... Dentro do evento Page_Load
// Instanciando
TipoDiretor tpDiretor = TipoDiretor.Comercial;
// Imprime Comercial
Response.Write(tpDiretor);

Declarando

um namespace

namespace NomeEmpresa {
public class Cliente {}
}

Namespaces

em cadeia

namespace NomeEmpresa.Vendas {
public class Cliente {}
}

Instruo
using
using
using
using

Using

System;
System.Data;
NomeEmpresa.Vendas;
Pessoa = ClassLibrary.Person;

Criando

comentrios e regies:

// Comentrio de uma linha


/*
Comentrio com
mais de uma linha
*/
/// <summary>
/// Documentao XML
/// </summary>
private int Atributo;
#region Regio
private int Atributo1;
private int Atributo2;
#endregion

Fase 2 - Aula 2

Aula 2

Estruturada

Orientao a Objetos

Aplicao

Aplicao

Funo
Objeto
Funo

Dados

Objeto

Dados

Dados

Mtodos

Mtodos

Funo
Funo

Programao
Estruturada

Orientao a
Objeto

Processo

Objeto

Revela Dados

Oculta Dados

Projeto Monoltico

Projeto Modular

Uso nico

Reutilizao

Algoritmo Ordenado

Algoritmo Desordenado

um conjunto de cdigos de programao que


incluem a definio dos atributos e dos mtodos
necessrios para a criao de um ou mais objetos.

Contm

toda a descrio da forma do objeto, um


molde para a criao do objeto, uma matriz
geradora de objetos, a fbrica de objetos.

Uma

classe tambm um tipo definido pelo


usurio.

Tem

determinadas propriedades que o


caracterizam e que so armazenadas no prprio
objeto. As propriedades de um objeto so
chamadas ainda de atributos.
O objeto interage com o meio e em funo de
excitaes que sofre, realiza determinadas aes
que alteram o seu estado (atributos).
Um objeto uma entidade nica que rene
atributos e mtodos, ou seja, rene as
propriedades do objeto e as reaes aos estmulos
que sofre.

Carros

Braslia

Fusca

Declarando

uma Classe:

class Pessoa
{
string nome;
void Andar() { }
}

Declarando

um Objeto:

Endereco objEndereco = new Endereco();

Atributo Vidro

Atributo Cor Lataria

Atributo Placa

Atributo Aro

Aes do carro (Mtodos)


Liga (Ingnio)
Acelera
Freia (Breca)
Troca de Marcha

Mtodos

Atributo
Cor Parachoque

-Placa
-Cor Lataria
-Cor Parachoque
-Aro
-Tipo Vidro
+Trocar marcha()
+Ligar()
+Acelerar()
+Brecar()

Atributos

Classe

Fusca

Atributos

Quando um atributo dividido entre todos os objetos


criados, ele armazenado na classe.

EX: Um contador de relgios criados.

Atributos

de Classe

de Objeto

Quando um atributo individual ele armazenado no


objeto.

EX: A hora de um relgio.

string nome = Bill;


int idade = 53;

As

aes ou comportamento dos objetos so


chamados, na orientao a objeto, de mtodos,
assim, um mtodo uma funo, um servio
fornecido pelo objeto.
Os comportamentos do objeto so definidos na
classe atravs dos mtodos e servem para
manipular e alterar os atributos do objeto.
Em um programa orientado a objeto, as excitaes
so representadas por mensagens que so
enviadas a um objeto. Uma mensagem pode ser
gerada pelo usurio, por exemplo, ao clicar o
mouse.

Um mtodo um comando que representa uma ao

class Cliente {
private int produtosAdquiridos;
public bool EClienteEspecial() {
if (produtosAdquiridos < 250)
return false;
return true;
}
public void ComprarEspecial() { /* AO */ }
}
...
Cliente proximoCliente = new Cliente();
bool clienteEspecial = proximoCliente.EClienteEspecial();
if (clienteEspecial)
proximoCliente.ComprarEspecial();

Passando parmetros 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);

Passando parmetros por referncia (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

Passando parmetros por referncia (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 so inicializados

Utilizando sobrecarga de mtodos

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);
}

Construtores so mtodos especiais responsveis pela


implementao de aes necessrias para a existncia 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;
}
}

Fase 2 - Aula 2

herana est relacionada s hierarquias e s


relaes entre os objetos.
o mecanismo em que uma classe filha
compartilha automaticamente todos os mtodos e
atributos de sua classe pai.
A herana permite implementar classes
descendentes implementando os mtodos e
atributos que se diferenciam da classe pai.

Simples

Quando uma classe herda as propriedades de uma


nica classe pai.

Mltipla

Ocorre quando uma classe tem mais de um pai.

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) { /* ao */ }
}
...
Cliente proximoCliente = new Cliente(Rodrigo);
proximoCliente.Cadastrar();
proximoCliente.Comprar(100);

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

Classes Seladas so classes que no podem ser extendidas ou


sobrescritas, ou seja, no podemos ter classes derivadas de
classes seladas.
public sealed class Pessoa
{
// Membros da Classe Pessoa
}

Em C#, as seguintes palavras-chave so teis para


explorar o conceito de herana:

ABSTRACT

OVERRIDE

VIRTUAL

THIS

BASE

SEALED

Indica uma classe, mtodo ou propriedade que no admite


instncias diretamente.
Indica uma redefinio em uma classe derivada.
Indica um elemento da classe base que pode ser redefinido.
Indica um elemento da prpria classe.
Indica um elemento da classe base.
Indica uma classe que no admite derivadas.

Polimorfismo

significa: Muitas Formas e


representa o fato de uma determinada
caracterstica 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 modificaes ou
assumido novas formas.

Objetos
Pessoa

Mtodo
Invocado

Comportamento

Diretor

Viajar ()

Parcerias

Viajar ()

Vendas

Viajar ()

Frias

Vendedor

Funcionario

Utilizando mtodos virtuais


public class Pessoa {
public virtual void Viajar() {
/* Ao */ }
}
public class Diretor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Aes Particulares da Classe Diretor */
}
}
public class Vendedor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Aes Particulares da Classe Vendedor */
}
}

Encapsulamento

o ato de esconder do usurio


informaes que no so de seu interesse.
O objeto atua como uma caixa preta, que realiza
determinadas operaes mas o usurio no sabe e
no precisa saber exatamente como.
Basicamente o encapsulamento separa os
elementos visveis de um objeto dos invisveis.

Public:

permite que a classe seja acessada por


qualquer assembly.
Sealed: no 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 estticos. No pode ser instanciada.
Abstract: define moldes para classes filhas. No
pode ser instanciada.

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: so mtodos de classes Abstract que no
possuem implementao.
Virtual: permite que os mtodos sejam sobrescritos por
classes filhas.
Readonly: limita acesso a somente leitura aos atributos
da classe.

So mtodos 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;

Fase 2 - Aula 2

Tpicos

Orientao a Objeto (Parte II)

abordados:

Membros de Classe
Classes Abstratas
Interfaces

Desenvolvendo para internet (Parte I)

Html e Javascript
ASP.NET e Ciclo de vida de uma pgina

Aula 3

Pertencem classe e no s instncias


Podem ser atributos, propriedades e mtodos

public class Cliente


{
public static string tipoEntidade = Teste;
public static void Excluir(int identificacao)
{
/* excluir cliente com essa identificao */
}
}
...
Console.WriteLine(Tipo de Entidade: {0},
Cliente.tipoEntidade);
...
int clienteId = 5;
Cliente.Excluir(clienteId);

Construtores

de classe estticos, compartilhados,

globais

So executados antes do primeiro objeto do tipo


em questo ser criado ou do primeiro mtodo de
classe ser invocado
No possuem parmetros
No apresentam modificadores de acesso
Podem co-existir com construtores de instncias
Utilizados para inicializar uma classe

Construtores de Classe

public class Cliente


{
private static Random numeroRandomico;
public int senhaCliente;

static Cliente()
{
numeroRandomico = new Random();
}
public void CarregarSenha()
{
senhaCliente = numeroRandomico.Next();
}
}

Pode

acontecer que ao escrever um mtodo para


uma classe base voc no saiba como ele ser
implementado. Neste caso, a implementao ser
feita pela classe que herdar o mtodo (a classe
filha).

Pode

acontecer tambm que voc saiba que um


determinado mtodo ser sobreposto com certeza
na classe filha; ento, por que definir sua
implementao se ela no ser usada?

Nestes

casos voc apenas define a assinatura do


mtodo e deixa a definio por conta da classe que
ir herdar a classe pai.

Estas

classes so ento chamadas classes


abstratas, o mtodo que voc no implementou
chamado de mtodo abstrato.

As

classes abstratas no podem ser instanciadas


atravs da palavra chave New.

Uma classe abstrata uma classe base genrica

Contm mtodos abstratos que devem ser implementados nas


classes que derivam dela

Um mtodo abstrato no apresenta implementao 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() { /* Ao */ }
}

Pode conter membros no-abstratos

Derivando a classe abstrata e implementando os membros


abstratos
public class Diretor : Pessoa
{
public override void Cadastrar()
{ /* Aes */ }
public override string Nome
{
get { /* Implementao get */ }
set { /* Implementao set */ }
}
public override int Id
{
get { /* Implementao get */ }
}
}

Uma

interface parecida com uma classe abstrata,


a diferena que uma classe abstrata pode
possuir mtodos que no estejam implementados e
pode possuir mtodos que estejam implementados.

Uma

interface possui somente mtodos que no


esto implementados e que devem ser
implementados pela classe que usar a interface.

Como

o C# no suporta herana mltipla as


interfaces permitem que uma classe estenda
mltiplas interfaces contornando o problema.

Uma

interface no C# no pode conter atributos,


somente pode ter mtodos, propriedades e
eventos. Todos os membros de uma interface so
pblicos e no podem usar um modificador de
acesso.

classe que implementa a interface deve possuir a


definio de todos mtodos existentes na interface.
Esta definio deve possuir o mesmo nome e a
mesma assinatura, retorno e parmetros, do
mtodo na interface.

nome da classe e o nome da interface so


separados por dois pontos(:).

Uma

interface define a mesma funcionalidade e


comportamento classes no relacionadas
diretamente
Declarando a interface
public interface IProduto
{
bool EPerecivel { get; }
Fornecedor RecuperarFornecedor();
void RegistrarVenda(Cliente cliente);
}

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
}
}

IS

e AS

if (computador is IProduto)
{
// aes
}
IProduto produto = computador as IProduto;
if (produto != null)
{
Fornecedor fornecedor = produto.RecuperarFornecedor();
}

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


{
...
}

foreach

Esta estrutura de repetio uma variao do for.


Sua diferena est no fato de ser necessrio apenas
especificar uma varivel e a coleo ou array cujos
registros sero percorridos.
int[] i = { 1, 3, 5, 7, 9 };
foreach (int j in i)
{
Response.Write(j);
Response.Write("<br />");
}

Estruturas

so tipos por valor, que podem conter:

Um construtor
Constantes
Atributos
Mtodos
Propriedades

Uso

recomendado para representar objetos leves


e/ou que eventualmente podem constituir arrays de
grande dimenso.
No podem ser herdados, porem podem
implementar Interfaces.

Exemplo

de uma estrutura:

struct Circulo {
private int _raio;

// Atributo

public double Circunferencia


// Propriedade
{ get { return 2 * _raio * Math.PI; } }
// Regra especfica para retornar um valor.
public Circulo(int raio)
{ this._raio = raio; }
}

// Construtor com um argumento


// Atribuio 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

Exemplo

de overload de mtodos:

... Dentro da mesma estrutura do exemplo anterior:


public void DiminuirRaio(){
if (_raio > 1)
_raio--;
}

// Mtodo simples sem argumentos

public void DiminuirRaio(int valor){// Overload do mtodo anterior


if (_raio - valor > 1)
// com um argumento
_raio -= valor;
}
... Dentro do evento Page_Load
meuCirculo.DiminuirRaio();
meuCirculo.DiminuirRaio(2);

// Chamando o mtodo sem argumentos


// Chamando o overload
// do mtodo anterior

Fase 2 - Aula 3

Aula 3

Servidor Web

Browser Cliente
Internet

Nasceu

com a finalidade de estabelecer uma forma


simples para publicar sites na internet.
Significa de forma literal, linguagem de marcao
de hipertexto.
Sua estrutura mais bsica compreende da tag
<html> delimitando o documento, dentro desta
tag existe um cabealho delimitado pela tag
<head> e corpo delimitado por <body>, onde se
coloca os textos, imagens, vdeos...

Comentrios

em HTML

<!-- Comentrio -->

As

tags ou marcadores so 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>

Definindo

o ttulo de uma pgina.

<html>
<head>
<title>Meu Ttulo</title>
</head>
</html>

Formatando

um texto

<html>
<head></head>
<body>
<b>Texto em negrito</b><br />
<i>Texto em itlico</i>
</body>
</html>

Maiores

informaes sobre HTML e suas tags:


http://www.w3schools.com/html/
http://www.w3schools.com/tags/

uma linguagem de programao do lado do


cliente (client-side), interpretada pelos browsers.
Comumente utilizada para validao de formulrios
e comunicao de forma assncrona 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 cdigos JavaScript -->
<script src=codigos.js" type="text/javascript"></script>

Exemplo:
<html>
<head>
<script language="javascript>

function Carregar()
{
document.getElementById(texto").innerHTML =
"Pronto...";
}
</script>
</head>
<body>
<a href="#" onclick=Carregar()">Prxima pgina</a>
<div id=texto"></div>
</body>
</html>

Visual Studio oferece aos desenvolvedores,


alm de inline sense para JavaScript,
compatibilidade entre os objetos criados no
servidor com os pseudos objetos JavaScript
presentes no cliente, lembrando que JavaScript
no Orientado a Objeto.

Maiores

informaes sobre JavaScript:


http://www.w3schools.com/js/

Artigo

sobre a pseudo orientao a objeto do


JavaScript no Visual Studio:
http://msdn.microsoft.com/pt-br/magazine/cc163419.aspx

Tecnologia

mais evoluda e mais flexvel,


sucessora do Active Server Pages (ASP)
O processamento dos formulrios web (Web
Forms) so 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 verso do browser e envia o cdigo
html e script correspondente)

ASP.NET pode ser utilizado com qualquer


linguagem suportada pelo CLR.
Permite separao entre cdigo e o design da
pgina.
Prov, alm de muitas outras funcionalidades,
facilidade de gerenciamento de persistncia de
estado no lado cliente (view state) e no lado
servidor (session).

Componente

Visual

Viso de Design
Viso de HTML

Lgica

de interface de usurio
MeuWebForm.aspx.cs

MeuWebForm.aspx

Class MeuWebForm

Bem-vindo!
Nome:
Senha:

Bem-Vindo!
Nome:
Senha:

Componente
Visual

OK

MeuWebForm

Lgica de
interface

Ambos arquivos compem MeuWebForm

OK

Trs

mtodos para adicionar cdigo:

Colocando cdigo no mesmo arquivo do contedo


(misto)
Colocando cdigo numa sesso separada (code-block)
no arquivo de contedo (cdigo inline)
Colocando cdigo em um arquivo separado (codebehind pages)

Code-behind

Studio .NET

pages a opo padro no Visual

Permite criao de Web Forms, Mobile Web Forms e


Web Services.
ASP.NET parte do .NET Framework.
Mltiplas linguagens e programao orientada a objetos:

C#,VB.Net, C++.Net, etc.

Com o Visual Studio.NET:

Ferramenta RAD para construo de aplicaes web.


Suporte Debugging.

Separao de Cdigo e Interface.


Proteo de Cdigo Fonte.
Mantm automaticamente o estado da pgina.
Suporte MultiBrowser.
Simples Validao dos Forms.
Para grande parte das aplicaes no necessrio
conhecer HTML e JavaScript.

ciclo de vida de uma pgina ASP.NET apresenta


cinco estgios bsicos:
Page_Init

Page_Unload

Event
Handling

Page_Load

Validation

Cliente recebe
pgina em HTML

Envia
Resposta

Armazena
Dados de
Sesso

Cliente inicia
comunicao
com o servidor

Processa
Requisies
do Cliente

Executa
Server-Side
Code (ASP.NET)

Conjunto

integrado de servios de rede


Permite publicar contedo e disponibilizar arquivos
e aplicaes em um ambiente Internet/Intranet.
Integrado ao sistema operacional
Dotado de uma interface administrativa cem por
cento grfica
Web Server
Hospedagem de web sites

Site FTP e grupos de notcias

Diretrio

Virtual

Utilizado

durante o desenvolvimento da aplicao


No necessita de configuraes adicionais
No precisa IIS, porm pode ser integrado a ele
No necessita Extenses FrontPage

Fase 2 - Aula 3

Tpicos

Desenvolvendo para internet (Parte II)

abordados:

Eventos e Controles
Master Page
Manuteno de Estados

ASP.NET e C#

User Controls
Eventos e Delegates

Aula 4

Muitos eventos so disparados atravs de aes de


usurios captadas pelo navegador
O cdigo para manipular o evento disparado executado no
servidor
Quando o cdigo completa sua execuo, a pgina web
pronta enviada de volta ao navegador (contendo cdigo
html e script)

Para

Na visualizao de projeto (Design), arraste o controle


desejado da aba Web Forms da Toolbox

Para

adicionar um controle Web server

adicionar um controle HTML server

Arraste para a pgina um controle HTML da tab HTML


da Toolbox

Button:

Boto
CheckBox: Caixa para selecionar ou no um item
Label: Texto que no pode ser editado diretamente
LinkButton: Um boto com aparncia de link
ListBox: Lista para escolha de uma ou mais
opes
RadioButton: Caixa para selecionar ou no um
item.

tabela para exibio de dados de fcil


preenchimento e integrao com BD, com controle
de paginao e ordenao automticos e suporte a
templates.

Gridview

DataList:

Mecanismo parecido com o GridView,


porm, com menos recursos
Repeater: Mecanismo parecido com o GridView,
porm mais flexvel e leve
DropDownList: Lista para escolha de uma das
opes. Bastante til quando se quer que as
opes sejam extradas de um banco de dados
Image: Exibio de uma imagem

Wizard

passo.

permite criar um formulrio passo a

permite criar um menu de navegao


baseado na pgina que o usurio est acessando.

SiteMap

permite criar um menu com links de


maneira esttica ou dinmica. Pode utilizar o
mesmo arquivo XML do SiteMap.

Menu

Criar uma Herana Visual para o Web Site.


Manuteno centralizada, no necessrio mudar o
cdigo em vrias pginas, apenas em uma.
Facilidade na criao do layout.
Reaproveitamento de cdigo.

Uma

das formas mais simples de manuteno de


estado atravs de variveis de sesso

Por

padro, estas informaes esto armazenadas


no prprio processo do ASP.NET

possvel armazenar informaes de sesso em


um processo separado (um servidor de estado) ou
at mesmo em um Sistema Gerenciador de Banco
de Dados

Uma

varivel de sesso est associada


exclusivamente a uma nica sesso.

Isto

significa que um dado armazenado em uma


varivel de sesso com nome X para o usurio
Joo no ser visvel na varivel de sesso de
mesmo nome do usurio Pedro, e vice-versa.
Session[X"] = S2B;
string nome = (string)Session[X"];

Presentes no Global.asax
protected void Session_Start(Object sender, EventArgs e)
{
//Evento disparado quando a uma sesso iniciada.
}
protected void Session_End(Object sender, EventArgs e)
{
//Evento disparado quando a sesso finalizada.
}

Varivel de estado da aplicao


Visvel em toda aplicao para TODOS usurios
Exemplos de uso:

Chat
Contador de Acessos

Exemplo:
Application[ContadorAcessos] = 0;

Presentes

no Global.asax

protected void Application_Start(Object sender, EventArgs e)


{
//Evento disparado quando a aplicao iniciada.
}
protected void Application_End(Object sender, EventArgs e)
{
//Evento disparado quando uma aplicao finalizada.
}

Mantm

automaticamente os valores de controles


de servidor entre um postback e outro

Internamente

funciona como um campo oculto


(hidden) um pouco mais sofisticado

Ao

rodar uma aplicao 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 no so exibidos em texto


plano, por questes de segurana

Pode-se

ainda adicionar manualmente valores a


um ViewState, lembrando que voc vai conseguir
recuper-los apenas na mesma pgina
ViewState.Add("Nome, Bill);
String nome = (string) ViewState[Nome];

Trata-se

de um pequeno arquivo de texto que


armazenado na maquina do usurio
Usado, por exemplo, em sites de comrcio
eletrnico, para exibir as
preferncias e
caractersticas do usurio
Pode identificar o usurio mesmo dias depois de
seu acesso a pgina.
O grande problema dos cookies que o usurio
simplesmente pode desabilitar este recurso em seu
navegador

Escrevendo

um Cookie

//Cria um novo cookie, passando o nome no construtor


HttpCookie cookie = new HttpCookie(Nome);
//Determina o valor o cookie
cookie.Value = Mrcio;
//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);

Lendo

um Cookie

//Pega o nome do que cookie que o usurio 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();

Arquivo no formato XML


Informaes de configurao da sua aplicao, tais
como, string de conexo, pginas de erro, modo de
compilao,etc.
Armazenar valores e parmetros que sejam comuns a
toda nossa aplicao.
Case Sensitive

Fase 2 - Aula 4

Aula 4

Controle

web criado por um usurio.


Possui extenso .ascx
Herda de System.Web.UI.UserControl
Simplificam a reusabilidade de cdigo e
componentes User interface (UI) dentro de uma
aplicao Web
Contm HTML, mas no as tags <HTML>,<BODY>
ou <FORM>
Contm cdigo para gerenciar seus prprios
eventos
Podem agregar vrios controles em um
componente reusvel

Exemplo

de User Control

Conceitos:

Evento: ao que pode ser


gerenciada/manipulada atravs de cdigo
Delegate: membro da classe responsvel por
delegar as aes correspondentes a ocorrncia
de um evento ao(s) manipulador(es) de eventos
correspondentes
Manipulador de Evento: mtodo responsvel pela
execuo de aes em reao a ocorrncia de
um evento

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

Passo 3: disparar o evento na chamada de algum


mtodo 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 atravs de
uma instncia de delegate
cliente.EventoProdutos += new
Cliente.delegateProdutos(ManipuladorEvento);

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

Fase 2 - Aula 4

Tpicos

abordados:

ASP.NET e C# (Parte II)

Partial Types
Nullable Types
Collections e Generics

Aula 5

Recurso

da verso 2.0
Permite dividir a implementao de um
determinado tipo em diversos arquivos.
Disponvel para classes, estruturas e interfaces.
Definidos pela palavra-chave partial.

Quando

podem ser utilizados:

Quando trabalhamos com cdigo gerado


automaticamente, cdigo 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 tm seus arquivos checados
para edio, sem interferir um no outro.

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 { }
}
}

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);
}
}
}

As

partes de uma classe no podem definir


aspectos contraditrios.
Uma classe (ou estrutura) pode ter dois tipos de
aspectos ou qualidades: acumulativa e noacumulativa.
Os aspectos acumulativos so aspectos que cada
parte do tipo parcial pode escolher adicionar, como
derivao de interfaces, propriedades, ndices,
mtodos e variveis.
Os aspectos no-acumulativos so aspectos que
todas as partes do tipo parcial devem possuir.

Classes Acumulativas

public partial
public partial
public void
public void
}

class Computador {} // CompP1.cs


class Computador : IProduto {// CompP2.cs
Adiciona() {...}
Remove() {...}

Classes No-Acumulativas

public class Pessoa {}


public class Funcionario {}
public partial class Vendedor : Pessoa {} // VendedorP1.cs
public partial class Vendedor : Pessoa {} // VendedorP2.cs
//No compila
public partial class Vendedor : Funcionario {}

Todas

as partes devem ter a mesma


acessibilidade.
Alm de todas as partes definirem as mesmas
partes no-acumulativas, apenas uma parte pode
fazer o override de um mtodo virtual ou abstract, e
apenas uma parte pode implementar uma mesma
interface.
Ao usar Partial Types, recomendvel indicar no
nome do arquivo que este contm partes de um
tipo. Como por exemplo: MinhaClasseP1.cs,
MinhaClasseP2.cs

Recurso

da verso 2.0.
Variveis continuam a representar todos os valores
do seu tipo, e mais um valor adicional null.
Permite uma integrao melhor com bancos de
dados, que podem conter valores null em seus
campos.
Declaradas atravs da classe Nullable, ou atravs
do operador ? adicionado ao tipo ser utilizado.

Podem ser declaradas de duas formas:


System.Nullable<T> variavel;
<T>? variavel;

Onde T o tipo da varivel


Ambas notaes funcionam de maneira equivalente
Declarando e usando uma varivel inteira e anulvel
int? clienteId;
clienteId = 10; //Ok
clienteId = null; //Ok, clienteId anulvel

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 no so tipos por valor, portanto no so


aceitveis como Nullable Types
string? variavel = tipos anulaveis;
Cliente? umCliente = new Cliente?();

O operador as s pode ser utilizado com tipos por referncia, ento


no pode ser usado com Nullable Types
int clienteId = 5;
object b = clienteId;
// Erro em tempo de compilao
int? c = b as int;

Uma instncia de um tipo anulvel possui duas propriedades readonly


HasValue: do tipo bool, retorna verdadeiro quando uma
varivel contm um valor no-nulo.
Value: do tipo equivalente ao tipo anulvel utilizado, se
HasValue true, ento Value contm um valor significativo,
seno, ao tentar acessar Value ser gerada uma exception.

Utilizando as propriedades de um tipo anulvel


int? clienteId = 10;
if (clienteId.HasValue)
Console.WriteLine(clienteId.Value);
else
Console.WriteLine(Identificao Indefinida!);

Converses explcitas
Um tipo anulvel pode ser convertido para um tipo regular
usando casts ou usando a propriedade Value.
Se o tipo anulvel contm o valor null, ser gerada uma
exception.

Converses explcitas
// Exemplos
int? clienteId = null;
// No 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;

Converses implcitas

A converso de um tipo anulvel para um tipo regular


implcita.
int? produtosAdquiridos = null;
// Converso implcita
int produtosAdquiridos = 10;

Operadores
Quaisquer operadores existentes para tipos por valor podem
ser utilizados com Nullable Types.
O operador produzir null se os operandos forem nulos, caso
contrrio, 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

Operadores

Quando so feitas comparaes com Nullable


Types, se ambos os Nullable Types so null,
ento a comparao 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
// No vlido
Console.WriteLine(Adquiriu menos de {0} produtos.,x);

A concluso contida na expresso else no


vlida porque produtosAdquiridos null,
portanto, no contm nenhum valor. Logo, no
pode ser maior ou menor que x.

operador ??

Define um valor padro que retornado quando um


tipo anulvel atribudo um tipo no-anulvel.
// Exemplo
int? produtosAdquiridos = null;
// Atribui o valor 0 y se produtosAdquiridos for null
int y = produtosAdquiridos ?? 0;

Tambm pode ser utilizado com vrios Nullable


Types
int? limiteCredito;
int? valorDefault;
// Se limiteCredito no for null, z = limiteCredito.
// Se limiteCredito for null, z = valorDefault.
int? z = limiteCredito ?? valorDefault;

Namespace

ArrayList
Queue
Stack
...

Namespace

System.Collections

System.Collections.Generic

List<T>
Dictionary<K, V>
...

ArrayList

no precisa ter um tamanho predefinido.


Pode carregar ou preencher um array.
Possui mtodos especficos para manipular seus
elementos.
int[] codigos = {1,2,46,32,78};
ArrayList listagem = new ArrayList(codigos); //Carrega um array
listagem.Remove(46);
listagem.Add(10);
Response.Write(listagem.Count);

//Remove um elemento
//Insere um novo elemento
//Imprime seu tamanho atual

int i = (int) listagem[2];

//Passa o valor 32
//para a varivel i

listagem.Sort();
listagem.CopyTo(codigos);

//Ordena os elementos
//Preenche um array

listagem.Clear();

//Remove todos elementos

Semelhante

ao ArrayList, no precisa ter um


tamanho predefinido e possui mtodos especficos
para manipular seus elementos.
Os ltimos elementos inseridos pelo mtodo Push
so os primeiros a serem retornados pelo mtodo
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 coleo camisas

Semelhante

ao Stack, porm trabalha de forma


contrria. Seu mtodo Dequeue retorna os
primeiros inseridos pelo mtodo Queue,
semelhante a uma fila:
Queue fila = new Queue();
fila.Enqueue("Idosos");
fila.Enqueue("Grvidas");
fila.Enqueue("Deficientes");
fila.Enqueue("Funcionrios");
Response.Write(fila.Dequeue());
// imprime o primeiro elemento inserido
// no caso o primeiro da coleo Idosos

Semelhante

a um ArrayList, mas somente permite


a insero 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

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 dicionrio string-string
dic.Add(Name, Nome);
dic.Add(Day, Dia);
dic.Remove(Day);

Response.Write(dic[Name]);

Fase 2 - Aula 5

Tpicos

abordados:

AJAX.NET
Web Services

Aula 6

SilverLight (WPF/e)
WPF

A Media Web

Riqueza para a camada de


apresentacao

ASP.NET AJAX

HTML + JavaScript
Melhora Navegao
Facilita a Personalizao

HTML

Grande Alcance

Fcil utilizao, personalizao, diferenciao, riqueza

renda/usurio

Aumenta a interao do usurio


Aumenta a Experincia

Aplicao

Desktop

Interativa
Rpida
Difcil Implantao
Desatualizada
Roda no Cliente

Aplicao

Web

Esttica
Lenta
Fcil Implementao
Sempre Atualizada
Roda no Servidor

RIA - Rich Internet Application

web hoje dinmica?


O mesmo contedo apresentado a todos os
usurios
Aplicaes Web ainda perdem de aplicaes
Desktop
Alternativas

Java Applets
SilverLight
Macromedia Flash

Post-backs

foram que a pgina seja recarregada


a cada clique.
No mantm o estado da pgina naturalmente
(stateless).
Interfaces ricas so de difcil concepo.
Lenta em relao a aplicaes de clientes ricos
(desktop).

Rich Internet Application


Web 2.0
RIA

AJAX

AJAX

= Asynchronous Javascript And XML.

um conjunto de recursos e tecnologias,


presentes h algum tempo, nas linguagens e
navegadores atuais.

AJAX

no tecnologia. um conjunto de tcnicas


que tem como objetivo promover uma melhor e
mais rica experincia de uso.

AJAX

faz uso das caractersticas da linguagem


JavaScript, da portabilidade e flexibilidade do
padro XML e dos recursos de chamada
assncronas que foram implementadas nos
navegadores.

Objeto

que 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 assncrona, permitindo assim a
execuo de outras tarefas imediatamente aps a
chamada.
Retorna dados em formato XML e Texto.
PADRO RECONHECIDO PELO W3C!

http://www.w3.org/TR/XMLHttpRequest/
(05/04/06)

Framework

para criao de uma nova gerao de


aplicaes web, com interfaces ricas, interativas,
personalizadas e baseadas em padres

Biblioteca de scripts para cliente


Componentes para servidor
Integra funes do cliente com funes do ASP.NET

Desenvolvimento

de aplicaes com estilo AJAX

UM FRAMEWORK PARA DESENVOLVER UMA EXPERINCIA NA


WEB MAIS RICA, INTERATIVA E PERSONALIZADA

Produtividade incrementada

Menos conceitos e complexidade


Menos linhas de cdigo

Fcil de criar, debugar e manter

Separao clara do contedo, estilo, aes e cdigo


Perfeitamente integrado as ferramentas de design e
desenvolvimento

Controle

responsvel por gerenciar todos os scripts


utilizados por pginas ASP.NET AJAX

Porque

usar o ScriptManager?

Tornar disponvel as funcionalidades das bibliotecas do


ASP.NET AJAX e manter a compatibilidade com demais
scripts utilizados dentro de pginas que implementam
essa tecnologia
Habilitar o recurso de Partial-Page Rendering
possibilitando que partes independentes da pgina
possam ser atualizadas sem gerar um postback
Componente obrigatrio quando se deseja utilizar os
componentes como UpdatePanel, UpdateProgress e
Timer

Controle

ASP.NET AJAX que cria um painel


atualizvel em uma pgina 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>

controle UpdatePanel do ASP.NET AJAX


permite que voc crie aplicaes web com uma
interface mais interativa e amigvel com o usurio

Usando

este controle voc pode atualizar partes


selecionadas de uma pgina ao invs de atualizar
toda a pgina web usando um postback

Ciclo de vida de um postback utilizando o ASP.NET


AJAX

ASP.NET AJAX intercepta as aes de postback da pgina


Usa XMLHttpRequest para disparar o postback ao servidor que
ocorre normalmente
Apenas os contedos dos UpdatePanel so retornados
As regies alteradas no UpdatePanel so atualizadas no Cliente
Todos os postbacks gerados por controles dentro do
UpdatePanel sero tratados como postback Ajax com
atualizaes incrementais da pgina
Postbacks para controles fora do UpdatePanel transcorrero da
forma convencional por padro

Adicionando

Triggers em um UpdatePanel para


permitir que outros controles disparem postback
assncrono

Controles fora de um UpdatePanel podem disparar um


postback assncrono
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1
EventName="Click"/>
</Triggers>
</asp:UpdatePanel>

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 programao 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" />

Prove

feedback no processo de atualizao


durante um postback assncrono

<asp:UpdateProgress ID="UpdateProgress1 runat="server">


<ProgressTemplate>
Please Wait ...
</ProgressTemplate>
</asp:UpdateProgress>

Um

rico conjunto de controles e extenders que


transformam a tarefa de construir uma interface
rica utilizando ASP.NET AJAX uma tarefa simples e
rpida

Exemplos de fcil compreenso, cdigo fonte e


documentao completa
SDK que simplifica a criao de componentes ASP.NET
AJAX
mais de 30 componentes e extenders

Projeto no suportado pela Microsoft


Este um projeto comunitrio suportado e disponvel no CodePlex

Toolkit Controls
Accordion

NoBot

AlwaysVisibleControl

NumericUpDown

Animation

PagingBulletedList

CascadingDropDown

PasswordStrength

CollapsiblePanel

PopupControl

ConfirmButton

Rating

DragPanel

ReorderList

DropDown

ResizableControl

DropShadow

RoundedCorners

DynamicPopulate

Slider

FilteredTextBox

TextBoxWatermark

HoverMenu

ToggleButton

ModalPopup

UpdatePanelAnimation

MutuallyExlcusiveCheckBox

ValidatorCallout

Fase 2 - Aula 6

Aula 6

um servio disponvel na Internet, atravs de


um Servidor Web
Possui funes contendo suas regras de
negcios, que podem ser acessadas atravs de
aplicativos
Possibilita a comunicao entre Sistemas
Tecnologia que torna possvel realizar
transaes, troca de dados entre empresas,
que antes eram difceis ou impossveis

So

baseados em Padres da Web


Os dados trafegam em formato XML, atravs
do protocolo SOAP
Independente de plataforma, ou seja, sistemas
heterogneos podem se comunicar facilmente
Pode retornar vrios tipos de dados, como por
exemplo uma tabela do banco de dados

Necessidade

de Integrao entre Negcios (B2B)


Tendncia do Software como Servio

Disquete,

Email, FTP ou Compartilhamento de

Redes
Comunicao Aplicativo X Aplicativo
Banco de Dados
Arquivos (Ex: Texto, como CSV; ou em Protocolo
Especfico)
Invocao de Objetos Remotos (Ex: CORBA, DCOM, IIOP,
ORB)

Tecnologias

dependentes de plataforma
Difcil integrao (necessidade de bridge)
Criava-se um pequeno protocolo de
comunicao
Necessidade de Transformao de Dados
Pouco segura, complexas, caras, baixa
produtividade e pouco robustas

Deve

ser independente de software e hardware


Prover Servios atravs das barreiras existentes
entre diferentes companhias
Promover automao

Como conseguir tudo isso?


Web Services!

Plataforma Integrada
Microsoft

Web Services
Integration
Unix

AS400

Linux

OS390

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 aplicao.

Independente

de plataforma
Fcil de traduzir. (decodificar)
Pode ser veiculado pela porta 80, sem a
necessidade de abrir portas no firewall

HTTP
Message

HTTP
Request
GET- POST

HTML

SOAP
Message

Cliente do Web Service


Windows Application

HTTP
Message
HTML

SOAP
Request

XML

SOAP
Message
XML

XML
Web Service

Rede

SOAP
Message
XML

SOAP
Message
SOAP
Response

Servidor Web

XML

HTTP
Message

HTTP
Request
GET- POST

HTML
HTTP
Message

HTTP
Request

HTML

HTTP
Message
HTML

HTTP
Message
HTML

SOAP
Message

SOAP
Request

XML

SOAP
Message
XML

Servidor
Web

Browser
Cliente do
Web Service

Rede

Rede

XML
Web Service

Web App

HTTP
Message
HTML

HTTP
Message
HTTP
Response

HTML

SOAP
Message
XML

SOAP
Message
SOAP
Response

XML

Web Services Description Language


Documento XML que define as interfaces de seu
Web Service
Mostra os mtodos e suas assinaturas
WSDL

DISCO

(Discovery of WS)
& UDDI (Universal Description, Discovery and
Integration)
Engine de Busca por Web Services
Pginas Amarelas
http://www.uddi.org
http://uddi.microsoft.com

http://uddi.ibm.com
http://uddi.sap.com

Pesquisa o Servio
http://www.uddi.org
URL de um documento DISCO ou WSDL

UDDI

Acha o Servio

Cliente
Do
Web
Service

http://yourservice.com
HTML ou XML com URL para WSDL

Como conversar? (WSDL)


http://yourservice.com/?WSDL
Descries do servio em XML

Web
Service

Conversando (SOAP)
http://yourservice.com/svc1
XML/SOAP

Tempo de Desenvolvimento

Tempo de Execuo

Visual Studio.NET, Web Matrix,


IIS Servidor IDE
ASP.Net
.NET Framework

Mquina de
Desenvolvimento

Cdigo

Aplicao
IIS
ASP.Net
.NET Framework

Servidor da
Aplicao

Cliente
Aplicao

asmx

SOAP (xml)

Aplicao
IIS
ASP.Net
.NET Framework

Servidor da
Aplicao

Fase 2 - Aula 6

Tpicos

abordados:

Introduo a Banco de Dados

Aula 7

Banco

de Dados

uma coleo de dados inter-relacionados, representando


informaes sobre um domnio especfico

Ex.: Lista Telefnica, Fichas de acervo de Biblioteca

Sistema

Gerenciador de Banco de Dados

So softwares que permitem a definio de estruturas


para armazenamento de informaes e fornecimento de
mecanismos para manipul-las.
Caractersitcas:

Integridade, Restries, Segurana/Privacidade,


Restaurao, Eficincia

Ex.: SQL Server, Oracle, PostgresSQL, MySQL

Dado

Conjunto de smbolos arranjados a fim de representar a


informao fora da mente humana.

Elementos

de Dados

Subconjunto de smbolos que compem um dado com


significado especfico, mas no representa a informao
completa.

Ex.: O nmero de alunos na turma MAT01 de 2008 79.

Os elementos de dados so:


Turma: MAT01
Ano: 2008
Alunos: 79

Tabelas

Objeto criado para armazenar os dados fisicamente

Os dados so armazenados em linhas (registros) e


colunas (campos)

Registros

So linhas de uma tabela


Armazenam um conjunto de dados pr-definido pela tabela

Campos

So as colunas de uma tabela


Possuem um tipo de dado definido
Armazenam um dado

Chave

Campo que permite a identificao nica de um registro em


uma tabela

Chave

Primria

Estrangeira

Campo que referencia uma Chave de um outro registro

ndices

ndice nico

uma ferramenta usada pelo gerenciador de Banco de Dados


para facilitar a busca de linhas dentro de uma tabela

ndice criado a partir de uma coluna ou de um conjunto de


colunas. No permite a incluso de linhas duplicadas

ndice de Performance

Facilita a busca de linhas na tabela

CLIENTE
PK

CLI_COD

I1

CLI_NOME
CLI_END
CLI_CNPJ

NOTA_FISCAL
PK

NF_NRO

FK1

NF_DATA
NF_CLI
NF_CFOP
CLI_COD

PRODUTO
PK

PROD_COD
PROD_DESC
PROD_IPI
PROD_UNIT
PROD_QTD

ITEM_NF
PK,FK2
PK

NF_NRO
ITEM_COD

FK1

ITEM_VALOR
ITEM_QTD
PROD_COD

Vises

So tabelas lgicas sobre um Banco de dados mas que no


possuem os dados propriamente ditos

Viso Idntica:

Viso por Seleo de Colunas:

Viso por Seleo de Linhas:

Viso por Seleo de Linhas e Colunas:

Viso por Juno de Tabelas:

Aula 7

CREATE TABLE [cliente](


[cli_cod] [int] PRIMARY KEY

IDENTITY(1,1),

[cli_nome] [varchar](50) NOT NULL,


[cli_end] [varchar](50) NULL,
[cli_cnpj] [char](11) NOT NULL
)

INSERT INTO [cliente]


([cli_nome],[cli_end],[cli_cnpj])

VALUES
('Bill Gates','Quinta Avenida','12345678900')

Se a tabela possui um campo identity, no permitido


definir manualmente o valor para este campo
Se um campo foi definido como NOT NULL ento
necessrio especificar seu valor

UPDATE [cliente]

SET [cli_end] = 'Sete de Setembro'


WHERE [cli_cnpj] = '12345678900'

Ao atualizar um registro, especifique as colunas a


serem alteradas
A clusula WHERE opcional, se for omitida ento a
atualizao ocorrer em todos os registros

DELETE FROM [cliente]


WHERE [cli_cnpj] = 12345678900

Todas

as colunas da tabela cliente

SELECT * FROM cliente

Coluna com o cdigo e o nome da tabela


SELECT cli_cod, cli_nome FROM cliente

cliente.

Todos

as colunas da tabela cliente onde o nome


comece com Bil
SELECT * FROM cliente WHERE cli_nome LIKE Bil%

INNER JOIN

Une o contedo de duas tabelas por meio de uma clusula de


juno gerando um novo conjunto de dados. Retorna apenas os
registros que atendam a clusula de juno

SELECT *
FROM cliente
INNER JOIN nota_fiscal
ON cliente.cli_cod = nota_fiscal.cli_cod

LEFT JOIN

Une o contedo de duas tabelas por meio de uma clusula de


juno gerando um novo conjunto de dados. Retorna todos os
registros da tabela da esquerda mesmo que no haja um registro
que atenda a clusula de juno na tabela da direita
SELECT *
FROM cliente
LEFT JOIN nota_fiscal
ON cliente.cli_cod = nota_fiscal.cli_cod

Fase 2 - Aula 7

TREINAMENTO

SEGUNDA FASE