SlideShare uma empresa Scribd logo
1 de 243
SEGUNDA FASE
               TREINAMENTO   Área de Desenvolvimento
                                   de Sistemas
 Tópicos   abordados:
    Introdução ao .Net Framework e CLR
    Plataforma Visual Studio 2008
    Lógica de Programação (Parte I)
Aula 1
   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;
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
   .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.
.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)
 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).
 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.
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
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
 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
 Microsoft Visual Basic.NET
 Microsoft C#
 Microsoft C++ (Gerenciado/Não-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 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
 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...
Demonstração
 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 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.
 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
 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”
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
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

      ...                 ...
Aritméticos         • +, -, *, /, %

      Atribuição          • =, +=, -=, *=, /=, <<=, >>=, &=, ^=, |=

     Concatenação         • +

  Criação de Objetos      • New

 Igualdade e Diferença    • ==, !=

Incremento e Decremento   • ++, --

       Lógicos            • &, ^, |, &&, ||, ~, !

       Primários          • typeof, sizeof, checked, unchecked

      Relacionais         • <, >, <=, >=, is
 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.”);
            }
 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;
            }
 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 />”);
                     }
 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++;
                 }
 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);
// 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);            }
 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);
}                                }
Fase 2 - Aula 1
   Tópicos abordados:
       Lógica de Programação (Parte II)
           Arrays
           Enumeradores
           Namespaces
           Comentários
           Estruturas
           Tratamento de Exceções
       Orientação a Objeto (Parte I)
           Classes e Objetos
           Atributos
           Métodos
           Construtores
           Herança e Polimorfismo
           Encapsulamento
           Modificadores de Acesso
Aula 2
 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.
 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”;
 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} };
 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 {}
   }

 Instrução    Using
   using   System;
   using   System.Data;
   using   NomeEmpresa.Vendas;
   using   Pessoa = ClassLibrary.Person;
 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
Fase 2 - Aula 2
Aula 2
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
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
É 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.
 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.
Carros
Brasília            Fusca
 Declarando   uma Classe:
  class Pessoa
  {
         string nome;
         void Andar() { }
  }




 Declarando   um Objeto:
  Endereco objEndereco = new Endereco();
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
 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;
 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.
   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();
   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);
   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
   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
   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);
}
   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;
         }
     }
Fase 2 - Aula 2
 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.
 Simples
     Quando uma classe herda as propriedades de uma
      única classe pai.


 Múltipla
     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) { /* ação */ }
      }
      ...
      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 – 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
      }
   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
 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.
Objetos       Método     Comportamento
 Pessoa       Invocado


  Diretor     Viajar ()     Parcerias




              Viajar ()      Vendas
 Vendedor




Funcionario   Viajar ()       Férias
   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 */
         }
      }
 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.
 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.
 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.
   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”;
Fase 2 - Aula 2
 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
Aula 3
   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);
 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
   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 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?
 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.
   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
   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 */ }
         }
      }
 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.
 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.
 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(:).
 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);
   }
 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)
   {
      // ações
   }


   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 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 />");
                 }
 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.
 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
 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
Fase 2 - Aula 3
Aula 3
Browser Cliente
Servidor Web
               Internet
 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...
 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”>
 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>
 Maiores informações sobre HTML e suas tags:
 http://www.w3schools.com/html/
 http://www.w3schools.com/tags/
É   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>
 Exemplo:
 <html>
 <head>
      <script language="javascript“>

         function Carregar()
         {
              document.getElementById(“texto").innerHTML =
 "Pronto...";
         }

     </script>
 </head>
 <body>
     <a href="#" onclick=“Carregar()">Próxima página</a>
     <div id=“texto"></div>
 </body>
 </html>
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.
 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
 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)
 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).
 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
 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
 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.
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
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)
 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
 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
Fase 2 - Aula 3
 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
Aula 4
   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)
 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
 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.
 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.
 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
 Wizard   – permite criar um formulário passo a
 passo.
 SiteMap– permite criar um menu de navegação
 baseado na página que o usuário está acessando.
 Menu– permite criar um menu com links de
 maneira estática ou dinâmica. Pode utilizar o
 mesmo arquivo XML do SiteMap.
 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.
 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
 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"];
   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.
     }
 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;
 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.
}
 Mantêm  automaticamente os valores de controles
 de servidor entre um postback e outro

 Internamentefunciona como um campo oculto
 (hidden) um pouco mais sofisticado
 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
 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”];
 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
 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);
 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();
 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
Fase 2 - Aula 4
Aula 4
 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
 Exemplo   de User Control
 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
 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
    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);
   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
 Tópicos      abordados:
    ASP.NET e C# (Parte II)
        Partial Types
        Nullable Types
        Collections e Generics
Aula 5
 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.
 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.
   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 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.
   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 {}
 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
 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.
   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
   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?();
   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.
   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.
   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;
   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
 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.
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;
 Namespace      System.Collections
    ArrayList
    Queue
    Stack
    ...
 Namespace      System.Collections.Generic
    List<T>
    Dictionary<K, V>
    ...
 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
 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”
 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”
 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
 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”]);
Fase 2 - Aula 5
 Tópicos   abordados:
    AJAX.NET
    Web Services
Aula 6
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
 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
 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
 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).
 RIA –Rich Internet Application
 Web 2.0




            AJAX
 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.
 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)
 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”
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
 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
 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>
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
   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
 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>
 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" />
 Provefeedback no processo de atualização
 durante um postback assíncrono

<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
 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
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 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
 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
 Necessidade de Integração entre Negócios (B2B)
 Tendência do Software como Serviço
 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)
 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
 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!
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 aplicação.
 Independente   de plataforma
 Fácil de „traduzir‟. (decodificar)
 Pode ser veiculado pela porta 80, sem a
  necessidade de abrir portas no firewall
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
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
 WSDL  – Web Services Description Language
 Documento XML que define as interfaces de seu
  Web Service
 Mostra os métodos e suas assinaturas
 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
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
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
Cliente
       Aplicação


asmx              SOAP (xml)



       Aplicação

         IIS
                               Servidor da
       ASP.Net                 Aplicação

 .NET Framework
Fase 2 - Aula 6
 Tópicos   abordados:
    Introdução a Banco de Dados
Aula 7
 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
 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
 Tabelas
      Objeto criado para armazenar os dados fisicamente
      Os dados são armazenados em linhas (registros) e
       colunas (campos)
 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
 Í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
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
 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:
   Visão por Seleção de Colunas:




   Visão por Seleção de Linhas:
   Visão por Seleção de Linhas e Colunas:
   Visão por Junção 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, 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
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
DELETE FROM [cliente]
     WHERE [cli_cnpj] = „12345678900‟
 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%‟
   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
Fase 2 - Aula 7
SEGUNDA FASE
TREINAMENTO

Mais conteúdo relacionado

Mais procurados

Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Leandro Rezende
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsLeonardo Melo Santos
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0César Augusto Pessôa
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasLeonardo Melo Santos
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#Rogério Moraes de Carvalho
 

Mais procurados (20)

Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#TDC 2011 Goiânia: Evolução da linguagem de programação C#
TDC 2011 Goiânia: Evolução da linguagem de programação C#
 

Semelhante a Introdução ao .NET Framework e CLR

Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com JavaLuiz Ricardo Silva
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Maratona Windows Phone 7
Maratona Windows Phone 7Maratona Windows Phone 7
Maratona Windows Phone 7Felipe Pimentel
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
Linguagem Boo: A wrist friendly language for CLI
Linguagem Boo: A wrist friendly language for CLILinguagem Boo: A wrist friendly language for CLI
Linguagem Boo: A wrist friendly language for CLIAlessandro Binhara
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do SulGlaucia Lemos
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 

Semelhante a Introdução ao .NET Framework e CLR (20)

C# 4.0
C# 4.0C# 4.0
C# 4.0
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Programação "Estruturada" com Java
Programação "Estruturada" com JavaProgramação "Estruturada" com Java
Programação "Estruturada" com Java
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Maratona Windows Phone 7
Maratona Windows Phone 7Maratona Windows Phone 7
Maratona Windows Phone 7
 
Aula2
Aula2Aula2
Aula2
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
ptt
pttptt
ptt
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Linguagem Boo: A wrist friendly language for CLI
Linguagem Boo: A wrist friendly language for CLILinguagem Boo: A wrist friendly language for CLI
Linguagem Boo: A wrist friendly language for CLI
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Apresentação Introdução Typescript - .Net Caxias do Sul
Apresentação   Introdução Typescript - .Net Caxias do SulApresentação   Introdução Typescript - .Net Caxias do Sul
Apresentação Introdução Typescript - .Net Caxias do Sul
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 

Introdução ao .NET Framework e CLR

  • 1. SEGUNDA FASE TREINAMENTO Área de Desenvolvimento de Sistemas
  • 2.  Tópicos abordados:  Introdução ao .Net Framework e CLR  Plataforma Visual Studio 2008  Lógica de Programação (Parte I)
  • 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...
  • 18.  File > New > Project...
  • 19.
  • 20.
  • 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 ... ...
  • 27. Aritméticos • +, -, *, /, % Atribuição • =, +=, -=, *=, /=, <<=, >>=, &=, ^=, |= Concatenação • + Criação de Objetos • New Igualdade e Diferença • ==, != Incremento e Decremento • ++, -- Lógicos • &, ^, |, &&, ||, ~, ! Primários • typeof, sizeof, checked, unchecked Relacionais • <, >, <=, >=, is
  • 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); } }
  • 35. Fase 2 - Aula 1
  • 36.
  • 37. Tópicos abordados:  Lógica de Programação (Parte II)  Arrays  Enumeradores  Namespaces  Comentários  Estruturas  Tratamento de Exceções  Orientação a Objeto (Parte I)  Classes e Objetos  Atributos  Métodos  Construtores  Herança e Polimorfismo  Encapsulamento  Modificadores de Acesso
  • 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} };
  • 42.  Definindo Tipos Enumeradores enum TipoDiretor { Marketing, RH, Comercial, Financeiro } ... Dentro do evento Page_Load // Instanciando TipoDiretor tpDiretor = TipoDiretor.Comercial; // Imprime „Comercial‟ Response.Write(tpDiretor);
  • 43.
  • 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
  • 46. Fase 2 - Aula 2
  • 48.
  • 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; } }
  • 64. Fase 2 - Aula 2
  • 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.
  • 72. Objetos Método Comportamento Pessoa Invocado Diretor Viajar () Parcerias Viajar () Vendas Vendedor Funcionario Viajar () Férias
  • 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”;
  • 78. Fase 2 - Aula 2
  • 79.
  • 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
  • 100. Fase 2 - Aula 3
  • 101. Aula 3
  • 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>
  • 108.  Exemplo: <html> <head> <script language="javascript“> function Carregar() { document.getElementById(“texto").innerHTML = "Pronto..."; } </script> </head> <body> <a href="#" onclick=“Carregar()">Próxima página</a> <div id=“texto"></div> </body> </html>
  • 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
  • 120. Fase 2 - Aula 3
  • 121.
  • 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
  • 123. Aula 4
  • 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
  • 147. Fase 2 - Aula 4
  • 148. Aula 4
  • 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
  • 150.  Exemplo de User Control
  • 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(); }
  • 155. Fase 2 - Aula 4
  • 156.
  • 157.  Tópicos abordados:  ASP.NET e C# (Parte II)  Partial Types  Nullable Types  Collections e Generics
  • 158. Aula 5
  • 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;
  • 175.  Namespace System.Collections  ArrayList  Queue  Stack  ...  Namespace System.Collections.Generic  List<T>  Dictionary<K, V>  ...
  • 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”]);
  • 181. Fase 2 - Aula 5
  • 182.
  • 183.  Tópicos abordados:  AJAX.NET  Web Services
  • 184. Aula 6
  • 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
  • 202. 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
  • 203. Fase 2 - Aula 6
  • 204. Aula 6
  • 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!
  • 211. Plataforma Integrada Microsoft Web Services Integration Unix AS400 Linux OS390
  • 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
  • 221. Fase 2 - Aula 6
  • 222.
  • 223.  Tópicos abordados:  Introdução a Banco de Dados
  • 224. Aula 7
  • 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:
  • 233. Visão por Seleção de Linhas e Colunas:
  • 234. Visão por Junção de Tabelas:
  • 235. Aula 7
  • 236. 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 )
  • 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
  • 239. DELETE FROM [cliente] WHERE [cli_cnpj] = „12345678900‟
  • 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
  • 242. Fase 2 - Aula 7