SlideShare uma empresa Scribd logo
1 de 223
Framework .Net e Orientação a Objetos 1
             Introdução
             (Baseado na Certificação Microsoft)


 Geração TEC – Talentos empreendedores para o
             mundo da tecnologia


                                                   Lorival Smolski Chapuis
Agenda geral
• Introdução a plataforma .Net
• Primeiros princípios de código limpo
• Fundamentações do .Net Framework
    –   Tipos por valor e referência
    –   Manipulando sistemas de arquivos
    –   Manipulando Strings
    –   Expressões regulares
    –   Coleções e princípios de lambda
• Introdução a Orientação a objetos
    – Definição de classe e objeto
    – Entendendo métodos e propriedades
• Práticas de Coding Dojo
    – Revisão linguagem C#
    – Novas práticas aprendidas
• Utilização do gerenciador de código fonte GitHub e desenvolvimento
  orientado a testes.
Agenda: Aula 1 - Terça-feira
• Plataforma .Net
   – Histórico
   – Arquitetura
   – Vantagens
   – Aplicações
   – Projeto Mono
   – Curiosidades
• Revisão geral
   – Visual Studio: Criação de projetos / dependências
   – Linguagem C#: Estrutura de decisão / Estrutura de repetição /
      Variáveis, constantes e enumeradores/ Funções, vetores e matrizes
• Coding Dojo – Apresentação feita para Udesc
• Princípios de desenvolvimento orientado a testes
• Prática de Coding Dojo
Agenda: Aula 2 - Quarta-feira
• Desenvolvimento prático de uma calculadora.
   – Aplicar desenvolvimento orientado a testes.
   – Aplicar ideias de código limpo.
   – Criação de 3 projetos:
      • ClassLibrary
      • Testes
      • WindowsForm

• Objetivo principal: conhecer o que veremos e como faremos algumas
  atividades daqui para frente.
Agenda: Aula 3 – Quinta-feira
• Código limpo
   – Discussões sobre código limpo
   – O que é um código limpo?
• Princípios de código limpo
   – Nomes significativos
• Fundamentações do .Net Framework
   – Valores por tipo
   – Definição de classe e objetos
• Exercícios dirigidos
Agenda: Aula 4 – Sexta-feira
• Fundamentações do .Net Framework
   – Valores por referência
   – Convertendo entre tipos
• Princípios de código limpo
   – Comentários
• Exercícios dirigidos

• Início do desenvolvimento da lista de exercícios
   – Desenvolver somente a parte de processamento, ou seja, não é
       necessário NESTE MOMENTO fazer a parte de tela pois estaremos vendo
       isto mais a frente;
   – Preferencialmente fazer em duplas;
Agenda: Aula 5 – Segunda-feira
• Fundamentações do .Net Framework
   – Tipos Nullable
   – Navegando pelo sistema de arquivos
• Feedback da semana
• Exercícios dirigidos
Agenda: Aula 6 – Terça-feira
• Discussões sobre o curso
• Gerenciador de fontes GitHub
• Exercícios dirigidos
Agenda: Aula 7 – Quarta-feira
• Usando GitHub
• Fundamentações do .Net Framework
   – Manipulando sistema de arquivos
• Exercícios dirigidos
Agenda: Aula 8 – Quinta-feira
• Manipulação de Strings
   – Concatenação
   – StringBuilder
   – StringFormat
• Exercícios dirigidos
Agenda: Aula 9 – Sexta-feira
• Tempo para desenvolvimento da lista de exercício.
• Auxílio nos desenvolvimentos.
• Revisão de assuntos que ficaram com dúvidas.
Agenda: Aula 10 – Segunda-feira
• Expressões regulares: introdução
   – O que são
   – Como criá-las e manipulá-las
   – Como utilizar expressões regulares em C#
• Revisão e dúvidas
• Exercícios dirigidos
Agenda: Aula 11 – Terça-feira
• Fundamentações do .Net Framework
   – Introdução a coleções
   – Introdução a expressões lambdas aplicado a coleções
• Exercícios dirigidos
• Revisão da semana e feedback
Requisitos para próximas etapas
• Criar uma conta no GitHub: http://www.github.com
    – Criem um usuário com um nome expressivo e guardem a senha =)
Material auxiliar para este módulo


• Livro Programando com C# e
Visual Studio 2005;
• Livro 100% prático;
• Desde declaração de variáveis até
criação de telas WindowsForm.
Framework .Net: Aula 1 - Terça-feira
Agenda
• Plataforma .Net
    –   Histórico
    –   Arquitetura
    –   Vantagens
    –   Aplicações
    –   Projeto Mono
    –   Curiosidades
• Revisão geral
    – Visual Studio: Criação de projetos / dependências
    – Linguagem C#: Estrutura de decisão / Estrutura de repetição /
      Variáveis, constantes e enumeradores/ Funções, vetores e matrizes
• Coding Dojo – Apresentação feita para Udesc
• Princípios de desenvolvimento orientado a testes
• Prática de Coding Dojo
Plataforma .Net - Histórico
        O .Net Framework é uma plataforma para desenvolvimento de
        aplicações, criada pela Microsoft em 1999 e lançada oficialmente em
        2002;

Version    Lançamento                            Visual Studio         Windows
  1.0      13 de fevereiro de 2002               Visual Studio         XP, Tablets
  1.1      24 de abril de 2003                   Visual Studio 2003    Server 2003
  2.0      07 de novembro de 2005                Visual Studio 2005    Server 2003 R2
  3.0      06 de novembro de 2006                Visual Studio 2005    Vista, Server 2008
  3.5      19 de novembro de 2007                Visual Studio 2008    7, Server 2008 R2
  4.0      12 de abril de 2010                   Visual Studio 2010    7
  4.5      Lançamento oficial previsto final 2012 Visual Studio 2012   8, Server 2012
Plataforma .Net - Arquitetura
  – A plataforma .Net disponibiliza uma vasta biblioteca de
    funcionalidades e componentes, fornecendo interoperabilidade com
    uma gama de linguagens de alto nível;

  – O desenvolvedor não se preocupa inteiramente com o dispositivo ao
    qual está destinada sua aplicação e sim com a plataforma de
    desenvolvimento.

  – A interoperabilidade de ambiente é semelhante à plataforma
    Java,   usando    uma   máquina  virtual  independente     de
    linguagem, chamado Common Language Runtime ou CLR. Em Java é a
    JVM.

  – Pode ser executada em vários dispositivos atualmente, desde um
    smartphone, tablet, Xbox 360, computadores desktops até servidores
    dedicados ou não;
Plataforma .Net - Arquitetura
  – Com isto abstrai do desenvolvedor a necessidade de usar apenas uma
    única linguagem, tendo hoje mais de 30 opções, sendo algumas delas
     • C#, C++, Boo, F#, COBOL, Fortran, Haskell, Lua, Object
        Pascal, Perl, PowerBuilder, Python, Ruby, Smalltalk, Visual
        Basic, entre outras.


  – As aplicações são duplamente compiladas, sendo uma para uma
    linguagem intermediária, Common Intermediate Language (IL) ou
    Microsoft Intermediate Language (MSIL), e outra para linguagem de
    máquina.
Plataforma .Net - Arquitetura
Plataforma .Net - Arquitetura
   .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)
Plataforma .Net - Arquitetura
  • Código gerenciado (.Net Framework)
   –   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)

  • Código não gerenciado (Específico para o SO)
   – Código Fonte
   – Compilador
   – Código de Máquina (Binário)

   Obs: NÃO requer o ambiente CLR para executar
Plataforma .Net – O que é o CLR mesmo?
  • O 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, conhecidas como Common Language
    Infrastructure (CLI).

  • Estas especificações são abertas (ECMA-335, ISO/IEC
    23271), assim permitem a interoperabilidade entre
    outras linguagens e plataformas.
Plataforma .Net – Como é mesmo?
 Código
                VB                C#                C++
 Fonte

                                                                   Componente
             Compilador       Compilador         Compilador
                                                                  Não Gerenciadol

 Código
Gerenciado                Assembly - Código IL




             Common Language Runtime (CLR)

                                Compilador JIT


                                 Código Nativo


                                Serviços do Sistema Operacional
Plataforma .Net – Vantagens
  • Interoperabilidade
      – Possibilita executar funcionalidades de qualquer linguagem disponibilizada
         na plataforma e até fora da plataforma usando acesso COM.
  • Portabilidade
      – A Microsoft não implementou o .Net para outros Sistemas Operacionais
         diferentes do Windows, porém a plataforma foi criada e disponibilizada
         para ser possível fazer isso por terceiros.
  • Segurança
      – Trata algumas vulnerabilidades comuns e fornece um modelo de
         segurança para as aplicações.
  • Deploy simplificado
      – Possui ferramentas que auxiliam na criação de instaladores de acordo com
         os padrões e seguranças requeridos, de forma fácil e flexível.
  • Biblioteca de funcionalidades comuns
      – Existem várias funcionalidades disponíveis independentes da linguagem
         que esteja sendo utilizadas, desde manipulação de arquivos, acesso a
         base de dados, criptografia, fórmulas matemáticas, processamento gráfico
         até gerenciamento paralelo de aplicações.
Plataforma .Net – Aplicações
 –   Aplicações SmartClient                – Aplicações console
 –   Aplicações Client/Server              – Bibliotecas de funcionalidades
 –   Aplicações web                        – Extender            componentes
 –   Serviços Web                            existentes      e     melhorá-los
 –   Serviços Windows                        conforme necessidades
 –   Aplicações para dispositivos          – Criar plugin para o Visual Studio
     móveis                                – Criar aplicações RIA
 –   Aplicações distribuidas               – E várias outras...
 –   Testes automatizados
 –   Plugins      para       aplicações   Obs: Para fazer qualquer item acima
     Microsoft como Office                é necessário ter o Visual Studio
 –   Aplicações Cloud
 –   Aplicações      baseadas       em
     Workflow
Plataforma .Net – Projeto MONO
    – Mono é uma plataforma open source que implementa os padrões do .Net
      Framework definidas na ECMA (European Computer Manufacturers
      Association agora Ecma Internacional) para C# e CLR.
    – Atualmente o compilador C# tem suporte ao C# 1.0,2.0,3.0 e 4.0 (ECMA).
    – Multi-plataformas:
       • Linux;
       • Microsoft Windows;
       • Mac OS X;
       • BSD e Sun Solaris;
       • Nintendo Wii;
       • Sony Play Station 3;
       • IOS;
       • Android;
    – A IDE para desenvolvimento é a MonoDevelop
Plataforma .Net – Curiosidades (C#)
    História da linguagem C#
        • Foi criado junto com a arquitetura .NET. Embora existam várias
           outras linguagens que suportam essa tecnologia (como VB.NET,
           C++, J#), C# é considerada a linguagem símbolo do .NET pelas
           seguintes razões:
             – Foi criada praticamente do zero para funcionar na nova
                plataforma, sem preocupações de compatibilidade com
                código de legado.
             – O compilador C# foi o primeiro a ser desenvolvido.
             – A maior parte das classes do .NET Framework foram
                desenvolvidas em C#.
        • A criação da linguagem, embora tenha sido feita por vários
           desenvolvedores, é atribuída principalmente a Anders Hejlsberg.
           Anders era desenvolvedor de compiladores na Borland, e entre
           suas criações mais conhecidas estão o Turbo Pascal e o Delphi.
Plataforma .Net – Curiosidades: Nome C#
  • Muitos pensam que o nome C# viria de uma sobreposição de 4
    símbolos "+" dando a impressão de "++++". Na verdade o "#" de C#
    refere-se ao sinal musical (sustenido), que aumenta em 1/2 tom uma
    nota musical.

  • O símbolo real seria o ♯ e não o #, porém, devido a limitação de
    telas, fontes e alguns browsers, no momento da normalização junto a
    ECMA, fora especificado apenas que o nome da linguagem seria uma
    letra C maiúscula (U+0043) e o sinal "#" (U+0023), facilitando
    assim, publicações e artigos com um caracter encontrado facilmente
    dos layouts de teclado padrões.

  • Desta forma, caso o nome fosse usado em português, seria "C-
    Sustenido" (ou "Dó-Sustenido"), e não "C-cerquilha".
Plataforma .Net – Curiosidades: Atenções
  • Aplicações compiladas diretamente para o Sistema Operacional origem
    e sendo não gerenciadas possuem mais desempenho... A pergunta é a
    que custo...

  • Como as DLLs e EXE são IL, é possível facilmente fazer engenharia
    reversa. É necessário usar alguns softwares para dificultar este
    processo, quando necessário.

  • As versões 3.5 para cima não vem pré-instaladas no SO, ou seja, é
    necessário baixar a instalar, tendo que ter alguns cuidados no deploy
    de aplicações.
Plataforma .Net – Curiosidades: SO C#?
  • Singularity
     – Entre 2003 e 2010 o Microsoft Research criou um Sistema Operacional
       experimental chamado Singularity desenvolvido em C#.
     – Foi desenvolvido o Kernel, device drivers e até um SDK para desenvolvimento de
       aplicações que pode ser encontrado no codeplex: http://singularity.codeplex.com/
     – Não está mais em andamento, mas serviu de base para várias outros do mesmo
       gênero.


  • Cosmos C#
     – É um sistema operacional open source desenvolvido em C# convertendo as
       instruções IL para instruções nativas.
     – Suporta arquitetura x86.
     – Possui sistema de arquivos e interface de rede suportando algumas funcionalidades
       TCP/IP.
     – Possui o Cosmo User Kit para desenvolvedores usarem o Visual Studio.
     – Está a todo vapor no codeplex: http://cosmos.codeplex.com/
Plataforma .Net – Prática de Coding Dojo




          http://dojopuzzles.com/problemas
Framework .Net: Aula 2 - Quarta-feira
Plataforma .Net – Prática
  • Desenvolvimento passo-a-passo de uma calculadora               usando
    desenvolvimento orientado a testes e ideias de código limpo.

  • Não será usado conceitos de orientação a objetos.

  • Criação de um projeto ClassLibrary, um projeto para testes e um para
    WindowsForm.

  Objetivo principal: conhecer o que
  veremos e como faremos algumas
  atividades daqui para frente.
Framework .Net: Aula 3 – Quinta-feira
Agenda
• Código limpo
   – Discussões sobre código limpo
   – O que é um código limpo?
• Princípios de código limpo
   – Nomes significativos
• Fundamentações do .Net Framework
   – Valores por tipo
   – Definição de classe e objetos
• Exercícios dirigidos
Plataforma .Net – O código




            Jamais nos livraremos dele!
Plataforma .Net – Código ruim




            Jamais nos livraremos dele?
Plataforma .Net – Custo do código ruim




       Código complexo aumenta, produtividade diminui.
Plataforma .Net – “A” nova versão




     Código complexo apenas torna “A” nova versão um looping.
Plataforma .Net – Atidude




  Atitude com responsabilidade mudam o ambiente de desenvolvimento.
Plataforma .Net – O que é código limpo?
                                        “Gosto de meu código elegante e
                                        eficiente. A lógica deve ser direta
                                        para dificultar o encobrimento de
                                        bugs, as dependências mínimas
                                        para facilitar a manutenção, o
                                        tratamento de erro completo de
                                        acordo com uma estratégia clara e
                                        o desempenho próximo do mais
                                        eficiente de modo a não incitar as
  Bjarne Stroustrup, criador do C++ e   pessoas a tornarem o código onfuso
  autor do livro “A linguagem de        com otimizações sorrateiras. O
  programação C++”.                     código limpo faz bem apenas uma
                                        coisa.”
Plataforma .Net – O que é código limpo?
                                   “Um código limpo é simples e
                                   direto. Ele é tão bem legível quanto
                                   uma prosa bem escrita. Ele jamais
                                   torna confuso o objetivo do
                                   desenvolvedor, em vez disso, ele
                                   está repleto de abstrações claras e
                                   linhas de controle objetivas.”




  Grandy Booch, autor do livro
  “Análise e Projeto de Sistemas
  Orientados a Objetos”
Plataforma .Net – O que é código limpo?
                                     “Ele tem testes de unidade e
                                     aceitação, nomes significativos; ele
                                     oferece apenas uma maneira e não
                                     várias de se fazer uma tarefa;
                                     possui poucas dependências as
                                     quais são explicitamente declaradas
                                     e oferecem um API mínimo e claro.
                                     O código deve ser inteligível já que
                                     dependendo da linguagem, nem
  David A. Thomas, fundador da       toda informação necessária pode
  Object Technology International    estar expressa no código em si. ”
  (IBM OTI Labs), responsável pelo
  início do desenvolvimento do
  “Eclipse IDE”.
Plataforma .Net – O que é código limpo?
                                  “Eu poderia listar todas as
                                  qualidades que vejo em um código
                                  limpo, mas há uma predominante
                                  que leva a todas as outras. Um
                                  código limpo sempre parece que foi
                                  escrito por alguém que se
                                  importava. Não há nada de óbvio
                                  no que se pode fazer para torná-lo
                                  melhor. Tudo foi pensado pelo autor
  Michael Feathers, autor de      do código, e se tentar pensar em
  “Trabalhando efetivamente com   algumas melhorias, você voltará ao
  código legado”.                 inicio, ou seja, apreciando o código
                                  deixado para você por alguém que
                                  se importa com essa tarefa.”
Plataforma .Net – A regra de escoteiro
      “Deixe a área do acampamento mais limpa do que como você a
                             encontrou”.

                  A história do apartamento sujo...
Plataforma .Net – Princípios código limpo
Nomes significativos
  – Nomeamos variáveis,
  – Nomeamos funções,
  – Nomeamos parâmetros,
  – Nomeamos classes,
  – Nomeamos arquivos,
  – Nomeamos diretórios,
  – Nomeamos e nomeamos...
Plataforma .Net – Nomes significativos
• Escolher bons nomes leva tempo, mas economiza
  mais.

• O nome de qualquer coisa no código deve lhe dizer
  porque existe, o que faz e como é usado.

• Se um nome requer um comentário, então ele não
  revela seu propósito:

  Int d; // tempo decorrido em dias
Plataforma .Net – Nomes significativos
• Nomes devem ser simples e compreendidos
  facilmente:

  Int tempoEstimadoEmDias;
  Date dataEmissao;
  String nomeArquivoBackup;
  Int AnoArquivoEmDias;
Plataforma .Net – Nomes significativos
  public List<int[]> retornaItens(){
      List<int[]> lista1 = new List<int[]>();
      foreach(int[] x in listaGeral){
           if (x[0] == 4)
              lista1.add(x);
      }
      return list1;
  }
Plataforma .Net – Nomes significativos
  public List<int[]> retornaItens(){
      List<int[]> lista1 = new List<int[]>();
      foreach(int[] x in listaGeral){
           if (x[0] == 4)
              lista1.add(x);
      }
      return list1;
  }

  Função de um jogo de “Campo minado”
Plataforma .Net – Nomes significativos
  public List<int[]> retornaCelulasMarcadas(){
      List<int[]> celulasMarcadas= new List<int[]>();
      foreach(celula[] x in tabuleiro){
           if (celula[STATUS] == MARCADA)
              celulasMarcadas.add(x);
      }
      return celulasMarcadas;
  }

  Apenas mudamos os nomes... Vamos continuar...
Plataforma .Net – Nomes significativos
  public List<celula> retornaCelulasMarcadas(){
      List<celula> celulasMarcadas= new List<celula>();
      foreach(Celula celula in tabuleiro){
           if (celula.estaMarcada())
              celulasMarcadas.add(celula);
      }
      return celulasMarcadas;
  }

  Apenas trocando os nomes e fazendo uma simples
  refatoração o código ficou muito mais legível.
Plataforma .Net – Nomes significativos
  for (int j=0; j<50; j++){
      s += (t[j]*4)/5;
  }

  O que faz isso?
Plataforma .Net – Nomes significativos
• Evite informações erradas:
   – Evite usar palavras cujos significados podem se desviar do
     desejado, ex: hp, aix, sco. Mesmo que tiver programando
     uma hipotenusa, hp pode parecer uma boa opção, mas
     pode ser interpretado como um comando Unix.
   – Não coloque o nome de lista se não for efetivamente uma
     lista.

• Use nomes pronunciáveis:
   – Tente discutir com alguém sobre um programa com
     variáveis não pronunciáveis: “Olha, aqui no bê cê erre três
     cê ene tê, temos um pê esse zê quê int...”
Plataforma .Net – Nomes significativos
• Use nomes passíveis de busca:
   – Nomes de uma só letra ou com números possuem um
     problema na hora de ser localizados no código;
   – Buscas são o último recurso e quando você precisa dela
     quer que funcione;

• Evite o mapeamento mental:
   – Utilize nomes que façam sentido para o “negócio” ou para
     a “solução” do problema e evite assim que o leitor
     desenvolvedor precise ficar decorando o que faz uma
     variável para entender um código 3 linhas abaixo.
Plataforma .Net – Nomes significativos
• Notação Húngara: não faça isto!
   – Exemplos:
       • s_nomeCliente ou str_nomeCliente ou strNomeClient
       • i_idade ou int_idade ou intIdade
   – A um bom tempo atrás tínhamos algumas características nas
     linguagens que não temos hoje:
       • Versões anteriores do Basic só permitiam uma letra mais um dígito;
       • O Fortran forçava codificações ao tornar a primeira letra uma indicação para o
         tipo;
       • Não ter variáveis tipadas.
   – Nas linguagens atuais, neste curso tratamos de C#, os objetos já são o
     próprio tipo e o ambiente detecta a utilização inadequada de um tipo,
     como colocar uma string dentro de um inteiro.
   – Resumo: Notação Húngara vai dificultar a nomenclatura e podem até
     induzir ao erro se mal colocado. Evitem ao máximo e se possível nunca
     usem.
Plataforma .Net – Nomes significativos
• Métodos (Funcionalidades):
  – Os nomes de métodos devem ter verbos;
     • Errado: void lista();
     • Certo: void retornaLista();
     • Certo: void retorneLista();
        – Preferível. Imagine que você esteja “ordenando” uma ação.
  – Não coloque os parâmetros no nome do método;
     • Errado:      void  retornaListaPeloCnpjEPeloID(String
       cnpj, int id);
     • Certo: void retornaLista(String cnpj, int id);
Plataforma .Net – Nomes significativos
• Selecione uma palavra por conceito:
  – Você quer retornar um dado e usa métodos assim por
    todo código:
     •   pegarHora();
     •   recuperarData();
     •   obterNome();
     •   retornarSobrenome();
  – Escolha um conceito e use sempre:
     •   obterHora();
     •   obterData();
     •   obterNome();
     •   ObterSobrenome();
Plataforma .Net – Nomes significativos
• PascalCase:
  – TodasAsPalavrasIniciamComLetraMaiuscula
  – Classes, Enumeradores, Eventos, Fields estáticos,
    Interface, Métodos, NameSpaces, Propriedade,
    Field público.
• CamelCase:
  – apenasAPrimeiraPalavraIniciaComLetraMinuscula
  – Parâmetros, Fields privados, Variáveis.
Plataforma .Net – Nomes significativos
• O C# é case-sensitive, diferente de Visual
  Basic.

• Desenvolvedores VB criam variáveis iniciando
  com underline para poder ter propriedades
  com o mesmo nome.

• Não faça isto em C#, a linguagem é case-
  sensitive, aproveite isto.
Plataforma .Net – Fundamentações .Net
• Tipos por valor
   – O que são e quem são
   – Criando tipos por valor
   – Trabalhando com enumeradores
• Tipos por referência
   – O que são e quem são
   – Criando tipos por referência
• Convertendo entre tipos
   – Boxing e Unboxing
• Exercícios dirigidos
Plataforma .Net – Tipos por valor
• Tipos por valor são tipos que permitem armazenar realmente
  o valor definido e não um “ponteiro” para um local da
  memória onde está o valor.

• Os valores das variáveis dos tipos por valor são armazenados
  em uma área chamada “stack”, onde em tempo de execução
  consegue ser lido, gravado e atualizado rapidamente sem
  causar overhead (processamento em excesso).
Plataforma .Net – Tipos por valor
• Exemplo:
   int valor1 = 1;
   int valor2 = valor1;
   valor2++;

  Qual resultado de valor1???
  Qual resultado de valor2???
Plataforma .Net – Tipos por valor
• Exemplo:
   int valor1 = 1;
   int valor2 = valor1;
   valor2++;

  Qual resultado de valor1??? 1
  Qual resultado de valor2??? 2

   Porque?
Plataforma .Net – Tipos por valor
• Exemplo:
   int valor1 = 1;
   int valor2 = valor1;
   valor2++;

  Qual resultado de valor1??? 1
  Qual resultado de valor2??? 2

  Porque? Pelo simples fato de ao armazenar o valor “1” na variável
  “valor1” e armazenar “valor1” na variável “valor2”, o valor é
  COPIADO para a variável “valor2” e ambos estão separados dentro
  da memória stack.
Plataforma .Net – Tipos por valor
Tipo            Utilização      Bytes Faixa                       Usado para
System.SByte    SByte/sbyte     1     -128 até 127                Bytes negativos e
                                                                  positivos
System.Byte     Byte/byte       1     0 até 255                   Apenas Bytes
                                                                  positivos
System.Int16    Short/short     2     –32768 até 32767            Números
                                                                  pequenos
System.Int32    Integer/int     4     –2147483648 até 2147483647 Número inteiros
                                                                 e contadores
System.UInt32   UInteger/uint   4     0 até 4294967295            Apenas números
                                                                  positivos
System.Int64    Long/long       8     –92372036854775808 até      Números
                                      9223372036854775807         grandes
                                      23
Plataforma .Net – Tipos por valor
Tipo             Utilização        Bytes   Faixa                  Usado para
System.Single    Single/float      4       –3.402823E+38 até      Números
                                           3.402823E+38           decimais (pontos
                                                                  flutuantes)
System.Double    Double/double     8       –                      Grandes
                                           1.79769313486232E+30   números
                                           8 to                   decimais
                                           1.79769313486232E+30
                                           8
System.Decimal   Decimal/decimal   16      –                      Cálculos
                                           79228162514264337593   científicos ou
                                           54                     que requerem
                                           3950335 to             grande precisão
                                           79228162514264337593
                                           5439
                                           50335
Plataforma .Net – Tipos por valor
• Boas práticas:
   – Em tempo de execução é otimizada a utilização de inteiros
     32 bits (Int32, Uint32).

   – Para ponto flutuante o mais eficiente é o Double que tem
     suas operações otimizadas pelo hardware.
Plataforma .Net – Tipos por valor
Tipo              Utilização     Bytes        Faixa             Usado para
System.Char       Char/char      2            Não tem           Apenas 1
                                                                caracteres
                                                                unicode
System.Boolean    Boolean/bool   4            Não tem           Valor Verdadeiro
                                                                (True) ou False
                                                                (False)
System.IntPtr     Não tem        Depende da   Não tem           Ponteiro para
                                 plataforma                     endereçamento
                                                                de memória
System.DateTime   Date/date      8            1/1/0001          Data e hora
                                              12:00:00 AM até
                                              12/31/9999
                                              11:59:59 PM
Plataforma .Net – Tipos por valor
• Existem quase 300 tipos por valor, mas os tipos mostrado aqui cobrem a
  maioria das necessidades.

• Quando você atribui um valor para uma variável de um tipo assim os
  dados são copiados para ele como já vimos.

• Este comportamento é diferente do de tipos de referência, que serão
  discutidos mais adiante.

• Mesmo que tipos por valor, muitas vezes representam valores simples,
  eles ainda funcionam como objetos. Em outras palavras, podemos chamar
  métodos neles. De fato, é comum utilizar o ToString(), por exemplo.

• Todos os tipos são derivados de System.Object. Esse relacionamento ajuda
  a estabelecer o sistema de tipo comum utilizado para todos os tipos.
Plataforma .Net – Tipos por valor
Resumo
    • É armazenado na memória Stack. (Pilha)
       • Stack é uma área da memória onde podemos armazenar e
          gerenciar dados.
       • É extremamente eficiente, porém, cabem poucas duzias de
          kilobytes.
       • É manipulada conforme uma pilha.
    • Não pode ser nulo.
    • Trabalha com dados diretamente.    Stack
    • Exemplos:
                                         Idade = 15
       • Inteiros;
       • Decimais;                       Estudante = 1 (Sim -> 0 = Não; 1 = Sim)
       • Datas;                          Salário = 501,52
       • Booleanos;                      ...
       • Enumerações
Plataforma .Net – Enumeradores
•   Enumerações são símbolos relacionados que têm valores fixos. Use enumerações para
    fornecer uma lista de opções ao invés de valores fixos diretamente.

•   Exemplo:
        public void metodoQualquer()
        {
          string nomeCidade = obtemNomeCidade();
          if (nomeCidade == "Joinville")
          {
             //-- Faça algo para Joinville
          }
          else if (nomeCidade == "Blumenau")
          {
             //-- Faça algo para Blumenau
          }
        }
Plataforma .Net – Enumeradores
    enum Cidade
    {
       Joinville,
       Blumenau
    }

•   Para criar um enumerador é bem simples, basta colocar enum e o nome dele. Dentro das
    chaves defina a lista de opções e pronto, seu enumerador está criado.

•   Importante: o enumerador é apenas uma representação estática de um número. A lista
    começa sempre em zero então neste caso Joinville é o número zero e Blumenau é o número
    1.

•   Vamos aplicar este enumerador ao nosso exemplo anterior e ver como fica?
Plataforma .Net – Enumeradores
        public void metodoQualquer()
        {
          Cidade cidade = obtemCidade();
          if (cidade == Cidade.Joinville)
          {
             //-- Faça algo para Joinville
          }
          else if (cidade == Cidade.Blumenau)
          {
             //-- Faça algo para Blumenau
          }
        }

•   Melhorou? Agora não precisamos de Strings fixas, reduzimos a possibilidade de um erro e
    deixamos o código mais claro.
•   Tem como definir os índices para os enumeradores?
Plataforma .Net – Enumeradores
    enum Cidade
    {
       Joinville=20,
       Blumenau=30
    }

•   Pronto, agora nossos itens do enumerador possuem seus próprios números e não iniciam
    mais em zero.
Plataforma .Net – O que é uma classe?
• Classe é a representação escrita de um tipo de
  objeto.

• A classe está para um objeto assim como uma
  “planta baixa” está para um prédio.

• É a definição formal de um objeto.
Plataforma .Net – Definição de objetos
• Objetos são abstrações do mundo real afim de
  definir comportamentos e atributos.

• Todo objeto, no mundo real, possui
  comportamentos  (ações) e  atributos
  (propriedades).

• Quais são os ações e propriedades dos itens a
  seguir?
Plataforma .Net – Definição de objetos
• Cite ações e propriedades:
  – Carro;
  – Pessoa;
  – Cadeira;
  – Calculadora;
  – Martelo;
  – Pudim;
Plataforma .Net – Definição de objetos
• Cite ações e propriedades:
  – Carro;
     • Ações: ligar, acelerar, frear, buzinar...
     • Propriedades: cor, tamanho, aro da roda...
  – Pessoa;
     • Ações: andar, correr, comer, falar, ouvir, dançar...
     • Propriedades: altura, peso, forma, cor do cabelo...
  – Cadeira;
     • Ações: ...
     • Propriedades: Quantidade de pernas, tipo de acento,
       tamanho...
Plataforma .Net – Definição de objetos
• Cite ações e propriedades:
  – Calculadora;
     • Ações: somar, multiplicar, subtrair, dividir
     • Propriedades: cor, tamanho dos botões, tipo do visor...
  – Martelo;
     • Ações: Bater, arrancar prego... (quem bate? Quem arranca?)
     • Propriedades: Comprimento, peso da “cabeça” do martelo...
  – Pudim;
     • Ações: estragar...
     • Propriedades: cor, tamanho, formato...
Plataforma .Net – Pudim



                          Objeto: pudim




 Classe: define o pudim


                          Objeto: pudim
Plataforma .Net – Pudim
• Ações e propriedades:
  – Pudim;
     • Ações: estragar...
     • Propriedades: tamanho, formato...
Plataforma .Net – Classe Pudim
Public class Pudim
{
   public string Tamanho { get ; set ; }
   public string Formato{ get ; set ; }

     public void Estragar()
    {

    }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
   public string Tamanho { get ; set ; }
   public Nome da Formato{ get ; set ; }
           string
          classe (inicia
            com letra
     public void Estragar()
           maiúscula)

    {

    }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
      public string Tamanho { get ; set ; }
  Acesso
    dapublic string Formato{ get ; set ; }
    classe.
     Todo
    mundo
     tem
        public void Estragar()
       {
    acesso.



       }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
      public string Tamanho { get ; set ; }
Propriedades
      public string Formato{ get ; set ; }

     public void Estragar()
    {

    }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
   Set = Podemos definirTamanho { get ; set ; }
   public string o valor
   Get = Podemos obter Formato{ get ; set ; }
   public string o valor

     public void Estragar()
    {

    }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
   public string Tamanho { get ; set ; }
   public string Formato{ get ; set ; }

     public void Estragar()
    {
                 Ações
    }
}
Plataforma .Net – Classe Pudim
Public class Pudim
{
   public string Cor { get ; set ; }
   public string Tamanho { get ; set ; }
   public string Formato{ get ; set ; }

     public void Estragar()
    {
        Void: não retorna
              valor.
    }   Podemos retornar
         qualquer tipo de
}          dado/objeto
Plataforma .Net – Objeto Pudim
Pudim pudim = new Pudim();
pudim.tamanho = “médio”;
pudim.formato = “redondo”

Pudim pudim2 = new Pudim();
pudim2.tamanho = “grande”;
pudim2.formato = “quadrado”
Plataforma .Net – Objeto Pudim
Pudim pudim = new Pudim();
pudim.tamanho = “médio”;
pudim.formato = “redondo”
            Operador de
             criação de
             um objeto

Pudim pudim2 = new Pudim();
pudim2.tamanho = “grande”;
pudim2.formato = “quadrado”
Plataforma .Net – Objeto Pudim
Pudim pudim = new Pudim();
pudim.tamanho = “médio”;
pudim.formato = “redondo”

Pudim pudim2 = new Pudim();
          Definição dos
pudim2.tamanhodas “grande”;
           valores
                    =
          propriedades
pudim2.formato = “quadrado”
Plataforma .Net – Objeto Pudim
Pudim pudim = new Pudim();
pudim.tamanho = “médio”;
pudim.formato = “redondo”

pudim.Estragar();

       Invocação do
          método
         estragar.
Plataforma .Net – Classe Calculadora
Public class Calculadora
{
   public int Valor1 { get ; set ; }
   public int Valor2 { get ; set ; }

     public int Somar()
    {
        return this.Valor1 + this.Valor2;
    }
}
Plataforma .Net – Objeto Calculadora
Calculadora calculadora = new Calculadora();
calculadora.Valor1 = 3;
calculadora.Valor2 = 5;

int resultado = calculadora.Somar();
Plataforma .Net – Objeto Calculadora
Calculadora calculadora = new Calculadora();
calculadora.Valor1 = 3;
                          Criamos o
calculadora.Valor2 = 5;    objeto
                          calculadora


int resultado = calculadora.Somar();
Plataforma .Net – Objeto Calculadora
Calculadora calculadora = new Calculadora();
calculadora.Valor1 = 3;
calculadora.Valor2 = 5;

int resultado = calculadora.Somar();
           Definimos
          propriedades
Plataforma .Net – Objeto Calculadora
Calculadora calculadora = new Calculadora();
calculadora.Valor1 = 3;
calculadora.Valor2 = 5;

int resultado = calculadora.Somar();

                   Invocamos
                     ações.
Framework .Net: Aula 4 – Sexta-feira
Agenda
• Fundamentações do .Net Framework
   – Valores por referência
   – Convertendo entre tipos
• Princípios de código limpo
   – Comentários
• Exercícios dirigidos
• Início do desenvolvimento da lista de exercícios
   – Desenvolver somente a parte de processamento, ou seja, não é
     necessário NESTE MOMENTO fazer a parte de tela pois estaremos vendo
     isto mais a frente;
   – Preferencialmente fazer em duplas;
Plataforma .Net – Tipos por referência
• Tipos de referência armazenam o endereço de seus dados, também
  conhecidos como um ponteiro.

• Os dados reais que se refere ao endereço é armazenado em uma
  área de memória chamada “heap”.

• Não precisamos nos preocupar com gerenciamento de memória
  dos tipos de referência, o .Net Framework cuida disso para nós.

• Um processo chamado “Garbage Collector” automatiza o
  gerenciamento de memória, fazendo o “trabalho sujo” de eliminar
  os tipos que não são mais referenciados por ninguém e liberando
  memória.
Plataforma .Net – Tipos por referência
• Exemplo:
   StringBuilder valor1 = new StringBuilder(“oi”);
   StringBuilder valor2 = valor1;
   valor2.Append(“ tchau”);

  Qual resultado de valor1???
  Qual resultado de valor2???
Plataforma .Net – Tipos por referência
• Exemplo:
   StringBuilder valor1 = new StringBuilder(“oi”);
   StringBuilder valor2 = valor1;
   valor2.Append(“ tchau”);

  Qual resultado de valor1??? “oi tchau”
  Qual resultado de valor2??? “oi tchau”

  Porque?
Plataforma .Net – Tipos por referência
• Exemplo:
   StringBuilder valor1 = new StringBuilder(“oi”);
   StringBuilder valor2 = valor1;
   valor2.Append(“ tchau”);

  Qual resultado de valor1??? “oi tchau”
  Qual resultado de valor2??? “oi tchau”

  Porque? Pelo simples fato de ao armazenar o valor “oi” na variável
  “valor1” e armazenar “valor1” na variável “valor2”, o valor é
  REFERENCIADO para a variável “valor2” e não COPIADO e o valor
  mesmo está na memória HEAP.
Plataforma .Net – Tipos por referência
Tipo                                      Usado para
System.String                             Valor texto. Com a ressalva que para o .Net
                                          Framework o valor de uma String é imutável.
                                          Veremos com mais detalhes isto quando
                                          trabalharmos com StringBuilder.
System.Text.StringBuilder                 Valores textos dinâmicos.
System.Array                              Vetor de dados. Esta é a classe básica para
                                          todos os arrays.
System.Exception                          Lançar ou tratar exceções. Veremos isto em
                                          tratamento de exceções.
...                                       ...

Existem mais de 2 500 tipos por referência dentro do .Net Framework.
Plataforma .Net – Tipos por referência
Resumo
    • É armazenado na memória Heap. (Monte)
       • Heap é uma área da memória onde podemos armazenar e gerenciar
           dados dinamicamente.
       • É alocada e liberada em blocos, o que muitas vezes se torna burocrático
           e mais lento.
    • Permite qualquer tipo inclusive nulo.
    • Trabalha com dados ponteiros (referência de memória).
    • Exemplos:
                                    Stack
       • Vetores;
                                    Nome = #123456abc (endereço)
       • Textos;
                                    ...
       • Instância de classes;                 Heap
                                              #123456abc = “Geração”
                                              ...
Plataforma .Net – Tipos:Valor vs Referêcia
• Exemplo:
   StringBuilder valor1 = new StringBuilder(“oi”);
   StringBuilder valor2 = valor1;
   valor2.Append(“ tchau”);

  Qual resultado de valor1??? “oi tchau”
  Qual resultado de valor2??? “oi tchau”

  Porque? Pelo simples fato de ao armazenar o valor “oi” na variável
  “valor1” e armazenar “valor1” na variável “valor2”, o valor é
  REFERENCIADO para a variável “valor2” e não COPIADO e o valor
  mesmo está na memória HEAP.
Plataforma .Net – Boxing e Unboxing
• Boxing é o processo de converter um tipo por valor para um
  tipo por referência.

• Unboxing é o processo de converter um tipo por referência
  em um tipo por valor.

• Ambos processos são computacionalmente caros. Quando um
  tipo por valor é convertido em um tipo por referência (boxing)
  um novo objeto deve ser alocado e contruído.
Plataforma .Net – Boxing e Unboxing
int inteiro = 123;                  // Tipo por valor
object objeto;                      // Tipo por referência
objeto = inteiro;                   // Causa “boxing”
string texto = objeto.ToString()    // Chama via O
int novoInteiro = (int)objeto       // Faz “unboxing”


                    Stack                Heap
    inteiro         123

    objeto                         123

  novoObjeto        123
Plataforma .Net – Evite Cast
• É chamado de Cast a conversão forçada de um tipo em outro.
   – Exemplo:
   String valor = “1”;
   int numero = (int)valor;


• Evite a utilização de cast. Ele é caro computacionalmente.

• Apenas use quando for realmente necessário.

• Sempre procure métodos de conversão como por exemplo:
   int inteiro = 123;                      // Tipo por valor
   object objeto = inteiro;                // Causa “boxing”
   int novoInteiro = Convert.ToInt32(objeto);
Plataforma .Net – Comentários




“Não insira comentários num código ruim, reescreva-o.”
      Brian W. Kernighan (PhD em Ciência da Cmputação...) e P.J.
                               Plaugher (Autor e empresário...)
Plataforma .Net – Comentários
• Comentários são um “mal necessário” e vamos entender um pouco mais
  sobre como utilizar melhor esta ferramenta de auxílio ao código.

• “Se nossas linguagens de programação fossem expressivas o suficiente ou
  se tivéssemos o talento para manipular com destreza tais linguagens de
  modo a expressas nossa intenção, não precisaríamos de muitos
  comentários, quiçã nenhum.

• Para compensar nosso fracasso em nos expressar no código temos que no
  mínimo usar adequadamente os comentários.

• Mude o que mudar, falem o que falar, briguem o que brigar, cantem o que
  cantar, chorem quem quiser chorar: a verdade está no código.
Plataforma .Net – Comentários
Comentários compensam código ruim?

• Acabamos de construir um código que tá difícil de entender, qual a
  primeira coisa que vem na mente? Hmmmm... Vou deixar bem comentado
  este código. Pare agora! Código limpo!

• Códigos limpos e expressivos com poucos comentários são de longe
  superiores a um amontoado e complexos cheios de comentários.

• Não gaste tempo criando comentários para explicar a bagunça que você
  fez, use-o para limpar a zona que ficou.

• Vamos ver alguns exemplos de como e quando NÃO FAZER comentários.
Plataforma .Net – Comentários,não assim
Comentários dizendo exatamente o que se está fazendo:

// Somente executa se a pessoa tiver mais que 18 anos e for do sexo
    feminino
// para ver se pode entrar no banheiro feminino
if (pessoa.idade >= 18 && pessoa.sexo == Sexo.Feminino){
    banheiroFeminino.Entre(pessoa);
}

Bobeira isso? Não! Existe e muito! Não seria mais simples assim?

if (pessoa.PodeEntrarBanheiroFeminino()){
    banheiroFeminino.Entre(pessoa);
}
Plataforma .Net – Comentários,não assim
Controle de fonte no código.

// 01/01/2012: Alterado por Fulano para fazer tal coisa.
// 06/02/2012: Alterado por Ciclano para fazer outra coisa.
// 29/03/2012: Alterado por Beltrano para desfazer alteração do Fulano

Há muito tempo, havia um om motivo para preservar estas informações. Hoje
não se desenvolve mais sem um controle de fontes como o SVN, TFS ou GIT.

Deixe a responsabilidade de controlar as alterações e quem as alterou para o
devido responsável: o controle de fontes.

Quer deixar sua maca no código colocando seu nome? Faça um código bem
feito e deixe sua marca na sua vida profissional.
Plataforma .Net – Comentários,não assim
Comentários sem total necessidade, apenas “para comentar”:

// Construtor padrão *** não, tá brincando que ele é o contrutor padrão.
Public Pessoa(){ }

// Dia do mês *** achei que fosse quantidade de caracteres...
Private int diaDoMes();

// Retorna o dia do mês *** para! Agora tá de sacanagem...
Public int ObtemDiaDoMes(){
   return diaDoMes;
}

Qualquer desenvolver que leia este código vai ignorar estes comentários, logo
não perca tempo escrevendo-os. Vamos piorar a situação agora...
Plataforma .Net – Comentários,não assim
Comentários mentem:

// Somente executa se a pessoa tiver mais que 18 anos e for do sexo
    feminino
// para ver se pode entrar no banheiro feminino
if (pessoa.sexo == Sexo.Feminino){
    banheiroFeminino.Entre(pessoa);
}

Quando uma alteração no código é executada, dificilmente seu comentário é
alterado, fazendo com que se torne falso.

Regra básica: quanto maior e mais longe o comentário do código destino,
mais falso ele pode ser. No final você pode confiar apenas no código.
Plataforma .Net – Comentários,não assim
Excesso de comentários no famoso Ctrl + C, Ctrl + V:

/** Name. */
Private String name;

/** The Version. */
Private String version;

/** Licence Name. */
Private String licenceName;

/** The Version. */
Private StringInfo;

Este é um código de uma biblioteca de código livre bem conhecida...
Se nem os autores não prestarem atenção na hora de comentar, porque os
leitores deveriam?
Plataforma .Net – Comentários,não assim
Comentários para fechar tag “chaves”:

...
try{
    while( ... ) {
        ...
        ...
        ...
    } //while
    ...
    ...
} // try
...

Isso até pode faze sentido em funções longas com muitas estruturas
aninhadas. Antes de faze este tipo de comentário, tente refatorar e diminuir as
linhas. Um método (função) deve fazer uma única tarefa.
Plataforma .Net – Comentários,não assim
Informações excessivas e o pior se desculpando...:

/*
 * Na década de 90 o fulado de tal criou uma tarefa para fazer uma
   alteração mas acabou não fazendo, então ficou para mim a pendência de
   fazer. Eu não conheço bem esta parte do sistema e fiz o que pude,
   desculpe se não ficou da melhor maneira possível, todo mundo estava
   ocupado e ninguém conseguiu tempo para me ajudar. No final eu
   também não quis atrapalhar ninguém. A alteração foi simples, eu troquei
   o if que verificava a flag de ativo por um if que verifica se a data de
   alteração é menor que 90 dias atrás. Com isto resolveu o problema e
   tudo deu certo, espero que não aconteça nenhum efeito colateral.
*/

Depois das discussões anteriores, nem precisamos falar nada sobre isto...
Plataforma .Net – Comentários,não assim
Conexões nada óbvias:

/*
 * começa com um array grande o bastante para conter todos os pixels (
   mais
 * os bytes de filtragem) e 200 bytes extras para informações no cabeçalho.
 */
 this.pngBytes = new byte[((this.width + 1) * this.height * 3) + 200]

• O que é um byte de filtragem?
• Ele tem a ver com o “+1” ou com o “*3” ou ambos?
• Um pixel é um byte? Porque 200?

“O objetivo de um comentário é explicar o que o código não consegue por si
só. É uma lástima quando um comentário também precisa ser explicado.”
Plataforma .Net – Comentários, assim
Certos comentários são necessários ou benéficos. Veremos alguns que valem
a pena utilizar QUANDO NECESSÁRIO.
Plataforma .Net – Comentários, assim
Comentários Legais:

Muitas vezes, dentro do desenvolvimento corporativo é necessário colocar
comentários com informações sobre direitos autorais simplesmente por
questões legais.

Só não vale colocar todo o arquivo de licença no código fonte. Se necessário
referencie o arquivo onde se encontra todas as informações de licença:

/* Direitos autorais © 2010,2011,2012 por Empresa XXXX. Todos os direitos
 * reservados.
 * Distribuído sob os termos da versão 2 ou posterior da Licença Pública
    Geral
 * da GNU
 */
Plataforma .Net – Comentários, assim
Comentários informativos:

Quando criamos um método, podemos descrever algumas informações sobre
ele e facilitar quem for utilizar aquele método através das 3 barras (///). Veja:
Plataforma .Net – Comentários, assim
Comentários de atividades pendêntes (TODO):

•   Muitas vezes estamos lendo um código e encontramos algo que deveria ser
    melhorado mas não temos tempo de fazer isto no momento, ou até mesmo
    estamos trabalhando em um método que precisa ser melhorado mas por
    algum motivo não podemos fazer no momento.

•   Para não esquecer, criamos o comentário TODO, assim podemos gerar uma
    lista de todos os locais que possuem um TODO e corrigi-los ou melhorá-los
    quando o tempo permitir.

Escrever comentário
// TODO: o que você quer

Visualizar comentário:
• Menu View – Task List
• Selecione a opção “Comments”
Plataforma .Net – Comentários, assim
Explicação de intenção: usada para identificar “Jabutis”

• As vezes, por motivos de compatibilidade com código legado ou clientes
  temos que manter um código de uma determinada forma até uma
  próxima versão, conseguir autorização de alguém que permita alteração
  de impacto ou até mesmo eternamente.

• Quando isto ocorrer comente a intenção e explique resumidamente o que
  aconteceu para caso outra pessoa tente alterar não crie novos problemas.

• Podemos concordar que o melhor seria refatorar, mas no mundo real nem
  sempre conseguimos fazer isto sempre que queremos...

// Essa é a melhor tentativa de conseguir uma condição de repetição sem
// problema com threads executando a mesma instância da classe XXX. Por
// isto fazemos new ao invés de usar uma instância estática.
Plataforma .Net – Exercícios
Framework .Net: Aula 5–Segunda-feira
Agenda
• Fundamentações do .Net Framework
   – Tipos Nullable
   – Navegando pelo sistema de arquivos
• Feedback da semana
• Exercícios dirigidos
Plataforma .Net – Tipos Nullable
• Vimos que tipos por valor não suportam salvar valores nulos.

• Em alguns casos, necessitamos salvar um tipo por valor nulo, como
  “Temperatura não definida”. Temperatura é um número inteiro e não
  pode ser zero, pois zero é uma temperatura válida.

• Para nos ajudar existe um tipo chamado Nullable. Este tipo permite
  estender os tipos primitivos (tipos bases do .Net Framework) e possibilitar
  ter valores por tipo aceitando nulo.

• Utilização:
        Nullable<int> temperatura = null;
        temperatura = 10;
        temperatura = null;
        temperatura = 50;
Plataforma .Net – Sistemas de arquivos
• Dentro do namespace System.IO existem um conjunto de classes usadas
  para navegar e manipular arquivos, diretórios e discos.

• As classes são separadas em 2 tipos:
   – Informativas (Herdam de FileSystemInfo)
        • FileInfo
        • DirecoryInfo
        • DriveInfo

    – Utilitárias
       • File
       • Directory
       • Path
Plataforma .Net – FileSystemInfo
• Fornece informações sobre o sistema de arquivos:
   – Principais propriedades
       • CreationTime: Data de criação do arquivo ou diretório que foi
         criado.
       • Exists: Determina se o arquivo ou diretório existe.
       • FullName: Caminho completo, com nome, do arquivo ou diretório.
       • Extension: Mostra a extensão do arquivo .
       • Name: Nome do arquivo ou diretório.
   – Principais métodos
       • Delete: Remove arquivo ou diretório do sistema de arquivos.
       • Refresh: Atualiza os dados referente a informações do sistema de
         arquivos.
Plataforma .Net – FileInfo
Pegando informações de arquivos

FileInfo file = new FileInfo(@"c:arquivo.txt ");
if (file.Exists)
{
   MessageBox.Show("Filename : " + file.Name);
   MessageBox.Show("Path : " + file.FullName);
}

Simples assim...
Plataforma .Net – FileInfo
Como copiar um arquivo...

FileInfo file = new FileInfo(@"c:arquivo.txt ");
if (file.Exists)
{
      file.CopyTo(@"c:arquivo.csv");
}

Simples assim...
Plataforma .Net – DirectoryInfo
Pegando informações de diretórios

DirectoryInfo directory = new DirectoryInfo(@"c:temp");
MessageBox.Show("Directory: " + directory.FullName);
foreach (FileInfo file in directory.GetFiles())
{
   MessageBox.Show("File: " + file.Name);
}

Simples assim...
Plataforma .Net – DriveInfo
 Pegando informações de discos

 DriveInfo unidade= new DriveInfo(@"c:");
 MessageBox.Show(drive.Name);

 Simples assim...
Plataforma .Net
Plataforma .Net – Exercícios
Framework .Net: Aula 1 - Terça-feira
Agenda
• Discussões sobre o curso
• Gerenciador de fontes GitHub
• Exercícios dirigidos
Plataforma .Net – Gerenciador de fontes
• É uma aplicação com a responsabilidade de armazenar e gerenciar fontes
  desenvolvidos em diversas linguagens.

• Vantagens:
   – Histórico de tudo que foi desenvolvido;
   – Desenvolvimento por mais de um desenvolvedor simultaneamente;
   – Controle de versão;

• Existem duas grandes linhas de gerenciadores de fontes:
   – Distribuídos
        • Cada computador é um repositório/servidor de fontes.
        • Exemplos: Git, Mercurial e Bazaar
   – Centralizados
        • Existe um servidor com todos os fontes e os computadores são
          apenas clientes do servidor.
        • Exemplo: Microsoft Team Foundation Server e SubVersion
Plataforma .Net – Conceito de Commit
• Um commit é um agrupador de alterações relacionada a um usuário;
• Exemplos:
   – Commit 1: Criação da classe calculadora e suas funções. [João]
      • Lista de arquivos:
           – Calculadora.cs
           – CalculadoraTest.cs
   – Commit 2: Criação da classe pessoa e suas funções. [Pedro]
      • Lista de arquivos:
           – Pessoa.cs
           – PessoaTest.cs
   – Commit 3: Efetuada tela da calculadora. [Carlos]
      • Lista de arquivos:
           – FrmCalculadora.cs
   – Commit 4: Correção do método somar da calculadora. [Pedro]
      • Lista de arquivos:
           – Calculadora.cs
           – CalculadoraTest.cs
Plataforma .Net – Gerenciador de fontes
Arquitetura básica de um gerenciador Centralizado:


                                   Servidor
                                 (Repositório)




                                Desenvolvedor 2

  Desenvolvedor 1                                    Desenvolvedor 3
Plataforma .Net – Gerenciador de fontes
Operações básicas de um gerenciador Centralizado:


    Servidor                                                          Servidor
  (Repositório)                                                     (Repositório)


            Download e/ou Trava                Upload de todos os
            arquivos somente para              arquivos alterados
            ele alterar                        (commit)



   Desenvolvedor                                              Fonte
                            Modifica ou cria
                            arquivos
Plataforma .Net – Commit centralizado
• O commit é efetuado quando vamos enviar os arquivos ao servidor. Todos os
  arquivos alterados são agrupados em um mesmo commit. Dependendo do
  caso podemos ter um commit com mais de uma dezena de arquivos.

• Exemplo:
   – Commit 1: Criação da classe calculadora e suas funções. Criação da classe
     pessoa e suas funções. Efetuada tela da calculadora. Correção do método
     somar da calculador. [João]
       • Lista de arquivos:
            – Calculadora.cs
            – CalculadoraTest.cs
            – Pessoa.cs
            – PessoaTest.cs
            – FrmCalculadora.cs
Plataforma .Net – Gerenciador de fontes
Arquitetura básica de um gerenciador Distribuido:

                                    Servidor
                               (Histório/Backup)




    Desenvolvedor                                   Desenvolvedor
     (Repositório)                                   (Repositório)




                                 Desenvolvedor
                                  (Repositório)
Plataforma .Net – Gerenciador de fontes
Operações básicas de um gerenciador Distribuido:


                                                                    Servidor
    Servidor
                                                                  (Repositório)

                               Refaz o ciclo para cada
                               conjunto de alterações.
           Download
                                                                 Upload




   Desenvolvedor                                    Salva         Desenvolvedor
                                        Fonte
                      Modifica ou                   alterações
                      cria arquivos                 (commit)
Plataforma .Net – Commit distribuido
•   O commit é efetuado no momento que finalizamos a alteração de uma alteração. Não
    enviamos um conjunto de arquivos para o servidor e sim um conjunto de commits.
    Quando menos arquivos em um commit melhor.

•   Exemplos:
     – Commit 1: Criação da classe calculadora e suas funções. [João]
         • Lista de arquivos:
              – Calculadora.cs
              – CalculadoraTest.cs
     – Commit 2: Criação da classe pessoa e suas funções. [João]
         • Lista de arquivos:
              – Pessoa.cs
              – PessoaTest.cs
     – Commit 3: Efetuada tela da calculadora. [João]
         • Lista de arquivos:
              – FrmCalculadora.cs
     – Commit 4: Correção do método somar da calculadora. [João]
         • Lista de arquivos:
              – Calculadora.cs
              – CalculadoraTest.cs
Plataforma .Net – Git
• É um sistema de controle de versão distribuido, criado
  inicialmente por Linus Torvalds, para o desenvolvimento do
  Kernel do Linux.

• É fornecido como software Livre.

• Disponível para:
   – Windows;
   – Linux;
   – Mac OS X;
Plataforma .Net – Quem usa Git?
Plataforma .Net – Hospedagens Git
Plataforma .Net – Github
• É um serviço de hospedagem para o sistema de controle de
  versão Git.

• É escrito em Ruby on Rails e possui planos comerciais gratuitos
  para repositórios públicos e planos pagos para repositórios
  privados.

• Possui conceito de rede social, estimulando “social coding” ou
  compartilhamento de códigos entre os integrantes.

• Disponível para:
   – Windows;
   – Linux;
   – Mac OS X;
Plataforma .Net – Ambiente Git
• Utilizem a versão convencional para este curso, não “for
  Windows”, baixada em: http://git-scm.com/downloads;

• Efetue a instalação;

• Inicie o Git Gui e clique
No menu Ajuda – Mostrar chave SSH;
Plataforma .Net – Ambiente Git
• Utilizem a versão convencional para este curso, não “for
  Windows”, baixada em: http://git-scm.com/downloads;

• Efetue a instalação;

• Inicie o Git Gui e clique
No menu Ajuda – Mostrar chave SSH;

• Clique no botão gerar chave;

• Após isto clique no botão “Copiar
para área de transferência.
Plataforma .Net – Ambiente Git
• Abra www.github.com e efetue login;

• Clique em Account Settings;

• Clique no menu SSH Keys;

• Clique no botão “Add SSH Keys”;

• Digite um título para a chave
(nome do seu computador) e
cole o que está na sua área de
Transferência com o “Ctrl + V”.

• Clique no botão “Add Key”;
Plataforma .Net – Utilização Git
• Passo 1: Commit
    –   Execute o Git Gui e abra seu repositório local;
    –   Clique no botão “Atualizar” para ver os arquivos que foram alterados;
    –   Selecione os arquivos clicando no ícone dos mesmos;
    –   Digite uma descrição e clique no botão “Salvar revisão”;


• Passo 2: Baixar “novidades” do servidor
    –   Clique no menu Remoto – Receber de – Origem;
    –   Assim que finalizado clique em Fechar;
    –   Clique no menu Mesclar – Mesclar localmente;
    –   Se tiver algo na caixa de mesclagem, clique em Mesclar;


• Passo 3: Enviar minhas alterações
    – Na tela do Git Gui Clique no botão Enviar;
    – Clique no botão “Enviar”;
Framework .Net: Aula 7 - Quarta-feira
Agenda
• Usando GitHub
• Fundamentações do .Net Framework
   – Manipulando sistema de arquivos
• Exercícios dirigidos
Plataforma .Net – Path
• Combinando diretórios

Path.Combine("diretorio1", "diretorio2")
Resultado: diretorio1diretorio2


• Renomeando extensão

Path.ChangeExtension(@"c:temparquivo.txt", "csv");
Resultado: arquivo.txt renomeado para arquivo.csv
Plataforma .Net – Lendo arquivos
Lendo arquivos...

FileStream file;
StreamReader reader;
try
{
   file = File.Open(@"C:arquivo.txt", FileMode.Open, FileAccess.Read);
   reader = new StreamReader(file);
   MessageBox.Show(reader.ReadToEnd());
}
finally
{
    reader.Close();
    file.Close();
}

Vamos melhorar este código.
Plataforma .Net – Lendo arquivos
Lendo arquivos...

 using (FileStream file = File.Open(@"C:arquivo.txt", FileMode.Open,
    FileAccess.Read))
{
   using (StreamReader reader = new StreamReader(file))
   {
         MessageBox.Show(reader.ReadToEnd());
   }
}

Ou podemos simplificar para:

File.ReadAllText(@"C:somefile.txt")
Plataforma .Net – Lendo arquivos
Lendo arquivos...

 using (FileStream file = File.Open(@"C:arquivo.txt", FileMode.Open,
    FileAccess.Read))
{
   using (StreamReader reader = new StreamReader(file))
   {
        while (!reader.EndOfStream)
        {
            MessageBox.Show(reader.ReadLine());
        }
   }
}

Agora lendo linha a linha.
Plataforma .Net – Escrevendo arquivos
Escrevendo arquivos...

 using (FileStream file = File.Create(@"C:arquivo.txt”))
{
   using (StreamWriter writer = new StreamWriter(file))
   {
        writer.WriteLine(“Oi”);
    }
}

Ou podemos simplificar para:

File.WriteAllText(@"c:somefile.txt", “Oi");
Plataforma .Net – Diretórios
Criando diretórios...
Directory.CreateDirectory(@"c:teste");

Apagando diretórios...
Directory.Delete(@"c:teste");

Verificando existência de diretório...
Directory.Exists(@"c:teste“);
Framework .Net: Aula 8 – Quinta-feira
Agenda
• Manipulação de Strings
   – Concatenação
   – StringBuilder
   – StringFormat
• Exercícios dirigidos
Plataforma .Net – Textos
• Processamento de texto é uma das tarefas mais comuns no desenvolvimento
  de        software,        as      vezes        necessitamos         fazer
  pesquisas, concatenações, formatações, enfim manipular textos em geral.

• Existem algumas formas de concatenar Strings, uma para cada tipo de
  situação, vamos conhecer e saber quando aplicar qual obtendo maior
  desempenho em nossos códigos.

• Para extração de dados de textos o mais comum é a utilização de expressões
  regulares. Estas estão presentes em diversas linguagens e ferramentas
  sempre que falamos em formatação de textos. Desde uma validação de e-
  mail até buscas avançadas dentro de longos arquivos de textos.
Plataforma .Net – Concatenação
• Concatenação de Strings é muito comum no dia-a-dia e quanto maior é a
  String para concatenar maior é o cuidado que temos que ter com o
  desempenho.

• É muito comum desenvolvedores não se preocuparem com o desempenho e
  fazer todos os tipos de concatenação da mesma forma.

• Ponto de partida: a String é um tipo por referência especial, ela é imutável. O
  conteúdo de uma string não pode ser alterado depois que o objeto é criado,
  embora a sintaxe possa fazer parecer isto.
Plataforma .Net – Concatenação
• Concatenar é unir duas cadeias de caracteres (strings) em uma.
    – Objetivo: “palavra1” concatenada com “ - palavra2”;
    – Resultado: “palavra1 – palavra2”;
    – Resumo: Fizemos apenas uma concatenação.

• A concatenação é uma operação binária, quando fazemos uma concatenação
  de 3 strings estamos, na verdade, fazendo duas concatenações.
    –   Objetivo: “palavra1” concatenada com “ - palavra2” concatenada com “ – palavra3”;
    –   Operação: “palavra1 – palavra2” concatenada com “ – palavra3”;
    –   Resultado: “palavra1 – palavra2 – palavra3”;
    –   Resumo: Fizemos duas concatenações.

• Quando concatenamos um conjunto grande de strings, estamos construindo
  uma string.

• Quando definimos um padrão para a ordem que as strings são
  concatenadas, estamos formatando a string.
Plataforma .Net – Operador “+”
• O operador “+” é utilizado para concatenação.
   – Exemplo:
        string concatenacao = " palavra1 " + "palavra2";

• Quando um dos itens da concatenação é uma string, não necessita converter
  explicitamente o outro item.
  • Exemplo:
        string concatenacao = 1.ToString() + "palavra2"; (funciona, não
  precisa)
        string concatenacao = 1 + "palavra2"; (isto é o suficiente)

• É o operador mais eficiente para concatenação, porém não é eficiente para
  construção de strings. Funciona muito bem para concatenação, mais de uma,
  na mesma instrução.
Plataforma .Net – StringBuilder
• O StringBuilder é utilizado para construção de Strings, ou seja, efetuar várias
  concatenações de forma a obter o máximo de desempenho.
   – Exemplo:
   string concatenacao = new StringBuilder().Append(1).Append("palavra2")
                             .Append("palavra3").ToString();

• É o operador mais eficiente para construir Strings, não é indicado para
  pouquíssimas concatenação, quanto mais melhor.

• Se souber qual será o tamanho mínimo da String final, então pode ser
  definido o número no construtor do StringBuilder aumentando ainda mais o
  desempenho.
   string concatenacao = new
      StringBuilder(17).Append(1).Append("palavra2")
                           .Append("palavra3").ToString();
Plataforma .Net – StringFormat
• O StringFormat é utilizado para formatação de Strings, ou seja, definir um
  padrão para a ordem que as Strings serão concatenadas.
   – Exemplo:
   string concatenacao = string.Format("{0} {1} {2}", "1", "palavra2",
      "palavra3");

• É muito útil para definir de forma simples a formatação de uma string
  independente de seus valores.

• Internamente utiliza StringBuilder para efetuar a construção da string.

• Ajuda em alguns casos que queremos armazenar a “formatação” em outro
  local que não no código, como no banco de dados ou arquivo, por exemplo.
Plataforma .Net – Demonstração
•   Vamos efetuar uma demonstração de desempenho identificando qual melhor
    operador para efetuar concatenação.

•   Esta demonstração pode ser alterada para identificar o melhor operador para
    construção de strings, ou seja, efetuar várias concatenações para uma mesma
    string.

•   O objetivo é simular a ocorrência de várias concatenações em uma grande
    aplicação.

•   O objetivo não é simular um grande número de concatenações, apenas a
    concatenação ocorrida diversas vezes.

•   Cuidados:
     – Deve estar atendo as diversas demonstrações em blogs na internet.
        Verifiquem sempre a experiência do profissional que está “blogando”.
     – Deve ser montado um ambiente o mais controlado possível, cuidando do
        gerenciamento de memória para cada operador.
Plataforma .Net – Operador “+”
//--# Força eliminação de todos os objetos não usados e retorna o total de memória usada
long memoriaInicial = System.GC.GetTotalMemory(true);

DateTime horaInicial = DateTime.Now;

for (int iteracao = 0; iteracao < 90000; iteracao++)
{
          string concatenacao = "Indice “ + iteracao + " palavra1 “ + "palavra2";
}

DateTime horaFinal = DateTime.Now;

//--# Retorna o total de memória usada sem eliminar nada
long memoriaFinal = System.GC.GetTotalMemory(false);

long memoriaUtilizada = memoriaFinal - memoriaInicial;
TimeSpan tempoDecorido = horaFinal - horaInicial;

MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
Plataforma .Net – StringBuilder
//--# Força eliminação de todos os objetos não usados e retorna o total de memória usada
long memoriaInicial = System.GC.GetTotalMemory(true);
DateTime horaInicial = DateTime.Now;

for (int iteracao = 0; iteracao < 90000; iteracao++)
{
  string concatenacao = new StringBuilder().Append("Indice ")
     .Append(iteracao).Append(" palavra1 ").Append("palavra2").ToString();
}

DateTime horaFinal = DateTime.Now;

//--# Retorna o total de memória usada sem eliminar nada
long memoriaFinal = System.GC.GetTotalMemory(false);

long memoriaUtilizada = memoriaFinal - memoriaInicial;
TimeSpan tempoDecorido = horaFinal - horaInicial;

MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
Plataforma .Net – StringFormat
//--# Força eliminação de todos os objetos não usados e retorna o total de memória usada
long memoriaInicial = System.GC.GetTotalMemory(true);
DateTime horaInicial = DateTime.Now;

for (int iteracao = 0; iteracao < 90000; iteracao++)
{
  string concatenacao = string.Format("{0} {1} {2} {3}", "Indice", iteracao, "palavra1", "palavra2");
}

DateTime horaFinal = DateTime.Now;

//--# Retorna o total de memória usada sem eliminar nada
long memoriaFinal = System.GC.GetTotalMemory(false);

long memoriaUtilizada = memoriaFinal - memoriaInicial;
TimeSpan tempoDecorido = horaFinal - horaInicial;

MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
Plataforma .Net – Resultados

Operador                    Memória utilizada            Tempo decorrido
+ (mais)                    606744                       14ms
StringBuilder               3048628                      23ms
StringFormat                1720620                      27ms


Vamos definir o tamanho do baffer inicial para o StringBuilder e tentar aumentar o
desempenho.
Plataforma .Net – StringBuilder
//--# Força eliminação de todos os objetos não usados e retorna o total de memória usada
long memoriaInicial = System.GC.GetTotalMemory(true);
DateTime horaInicial = DateTime.Now;

for (int iteracao = 0; iteracao < 90000; iteracao++)
{
  string concatenacao = new StringBuilder(30).Append("Indice ")
     .Append(iteracao).Append(" palavra1 ").Append("palavra2").ToString();
}

DateTime horaFinal = DateTime.Now;

//--# Retorna o total de memória usada sem eliminar nada
long memoriaFinal = System.GC.GetTotalMemory(false);

long memoriaUtilizada = memoriaFinal - memoriaInicial;
TimeSpan tempoDecorido = horaFinal - horaInicial;

MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
Plataforma .Net – Resultados

Operador        Memória             Memória            Tempo decorrido     Tempo decorrido
                utilizada antiga    utilizada          antigo
+ (mais)        606744              606744             15ms                15ms
StringBuilder   3048628             2229004            23ms                18ms
StringFormat    1720620             1720620            27ms                28ms




      Vamos alterar agora para utilizar o operação “+” para concatenação em várias linhas
      e fazer uma tabela final para verificar quem é efetivamente mais rápido.
Plataforma .Net – Operador “+”
//--# Força eliminação de todos os objetos não usados e retorna o total de memória usada
long memoriaInicial = System.GC.GetTotalMemory(true);

DateTime horaInicial = DateTime.Now;

for (int iteracao = 0; iteracao < 90000; iteracao++)
{
          string concatenacao = "Indice “;
          concatenacao = concatenacao + iteracao;
          concatenacao = concatenacao +" palavra1 “;
          concatenacao = concatenacao + "palavra2";
}

DateTime horaFinal = DateTime.Now;

//--# Retorna o total de memória usada sem eliminar nada
long memoriaFinal = System.GC.GetTotalMemory(false);

long memoriaUtilizada = memoriaFinal - memoriaInicial;
TimeSpan tempoDecorido = horaFinal - horaInicial;

MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
Plataforma .Net – Conclusão
• Operador + é o melhor para concatenação, em uma mesma linha, devido
  a otimização.

• StringBuilder é o melhor quando precisa construir strings. Nem pense em
  fazer concatenação em várias linhas. O StringBuilder ocupa mais memória
  mas é mais rápido.

• StringFormat é o melhor para formatar Strings.

• O importante é usar cada operador para seu respectivo objetivo.
Plataforma .Net – Conclusão
• Vai concatenar várias strings em uma mesma linha? Use o operador “+”.
   String concatenacao = “palavra1” + “palavra2”;

• Vai concatenar várias strings em várias linhas? Não use o operador “+”:
   String concatenacao = “palavra1”;
   concatenacao = concatenacao + “palavra2”;

• Vai concatenar várias strings em várias linhas? Use o StringBuilder:
  String concatenacao = new
  StringBuilder().Append(“palavra1”).Append(“palavra2”).ToString();

• Quer formatar uma string? Use o string.format
  String concatenacao = string.format(“{0} {1}”, “palavra1”, “palavra2”);
Framework .Net: Aula 10 – Segunda-feira
Agenda
• Expressões regulares: introdução
   – O que são
   – Como criá-las e manipulá-las
   – Como utilizar expressões regulares em C#
• Revisão e dúvidas
• Exercícios dirigidos
Plataforma .Net – Expressões regulares
Introdução
Definição
Origem
Aplicações
Metacaracteres
   – Representantes
   – Quantificadores
   – Âncoras
Let´s code
Debate e esclarecimentos
Plataforma .Net – Expressões regulares
Quantos de nós já necessitaram fazer manipulação ou pesquisas em textos?
Quantos perderam horas com ifs e fors tentando procurar palavras baseadas
em um determinado padrão?


As expressões regulares, quando bem aplicadas e refinadas, permitem
manipular textos de forma rápida e precisa.


Infelizmente não existe um vasto material sobre este assunto em português.
A maioria não é muito didática na hora de explicar os conceitos e aplicar na
prática.
Isto faz com que poucos desenvolvedores dominem este poderoso assunto
que bem aplicado economiza horas de desenvolvimento.
Plataforma .Net – Expressões regulares
Um dos melhores materiais, didáticos, em português (se não o melhor) sobre este
assunto é o livro em que a maior parte teórica, sobre expressões regulares, desta
apresentação está embasada: Expressões regulares – Uma abordagem divertida de
Aurélio Marinho Jargas.

A maioria do material sobre expressões regulares em português encontrado na
internet é baseado no livro dele.

Esta apresentação irá introduzi-lo neste assunto, fazendo expressões como *[A-Za-z0-
9_]+:(.*)..$ se tornarem compreensivas e não lhe causar pânico.

Em toda apresentação, o que estiver entre aspas duplas foi copiado na integra do livro

“CURIOSIDADE: apesar de esse assunto ser antigo, o que vamos ver aqui basicamente
é o mesmo que um estudante veria há 15 anos atrás. É um conceito consistente, que
não sofre alterações com o passar do tempo.”
Plataforma .Net – ER: Definição
“Uma expressão regular é um método formal de se especificar um padrão de texto.”

De forma simplificada, uma regular expression, termo original, é uma composição de
símbolos e caracteres literais com funções definidas que quando agrupadas em
sequência formam uma expressão.
Essa, por sua vez, é interpretada, por um programa, como uma regra que resultará em
sucesso caso uma entrada de dados atenda suas condições.

Também podemos afirmar que é:
• “uma maneira de procurar um texto que você não lembra exatamente como é,
   mas tem ideia das variações possíveis;
• uma maneira de procurar um trecho em posições específicas como no começo ou
   no fim de uma linha, ou palavra;
• uma maneira de um programador especificar padrões complexos que podem ser
   procurados e casados em uma cadeia de caracteres”;
Plataforma .Net – ER: Origem
Surgiu em 1943 com um estudo que
teorizava o funcionamento dos nossos
neurônios

Em 1968 foi para o computador em um
algoritmo de busca para um editor
chamado qed

O qed virou ed (Editor Unix) que devido a
seu comando de executar expressões
regulares originou o famoso grep que por
sua vez originou o egrep.
Plataforma .Net – ER: Aplicações
“Basicamente servem para você dizer algo abrangente de forma específica. Definido seu
padrão de busca, você tem uma lista (finita ou não) de possibilidades de casamento. Em um
exemplo rápido, [rgp]ato pode casar rato, gato e pato. Ou seja, sua lista "abrange
especificamente" essas três palavras, nada mais.”

Sempre que precisar efetuar buscas ou validações em textos, as expressões regulares
funcionam muito bem. Alguns exemplos de buscas por padrões, em textos, são:
• data
• horário
• número IP
• endereço de e-mail
• endereço de Internet
• dados na coluna N de um texto
• dados que estão entre <tags></tags>
• campos específicos de um texto tabulado
• número de telefone, RG, CPF, cartão de crédito
Plataforma .Net – ER: Metacaracteres
São símbolos com funções específicas utilizados para montar as expressões regulares.

Existem vários tipos de metacaracteres, os básicos serão estudados nesta apresentação:
      – Representes: representam um ou mais caracteres
      – Quantificadores: indicam o número de repetições permitidas para o caractere anterior
      – Âncoras: marcam uma posição específica na linha
Plataforma .Net – ER: Representante
                                   Ponto: o necessitado .

“O ponto é nosso curinga solitário, que está sempre à procura de um casamento, não importa com
quem seja. Pode ser um número, uma letra, um TAB, um @, o que vier ele traça, pois o ponto casa
qualquer coisa.”




Lembre-se: o ponto aceita qualquer caractere.
Plataforma .Net – ER: Representante
                                    Lista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que
quer, e nada diferente daquilo, a lista casa com quem ela conhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n
o, n1o, noo, njo...
Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o
Plataforma .Net – ER: Representante
                                    Lista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que
quer, e nada diferente daquilo, a lista casa com quem ela conhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n
o, n1o, noo, njo...
Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o

   O ponto não aceita
   qualquer coisa?
   Dentro da lista, todos
   os caracteres são
   normais
Plataforma .Net – ER: Representante
                                     Lista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que
quer, e nada diferente daquilo, a lista casa com quem ela conhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o,
n1o, noo, njo...
Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o

   O ponto não aceita
   qualquer coisa?
   Dentro da lista, todos
   os caracteres são
   normais, exceto o
   traço.
Plataforma .Net – ER: Representante
                                          Lista: a exigente [...]

O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]

Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...

                       “Os intervalos respeitama ordem numérica da tabela ASCII”


                                                               Como colocar o traço e os colchetes
                                                               dentro da lista se eles são
                                                               metacaracteres?

O traço colocamos no final da lista sozinho;
O colchete de abertura ( [ ) pode colocar em qualquer lugar;
O colchete de fechamento ( ] ) deve ser colocado no começo da lista;

                                            Exemplo: [ ][ - ]
Plataforma .Net – ER: Representante
                                          Lista: a exigente [...]

O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]

Estes intervalos podem ser usados para letras também: a-z,a-z não entram ...
                               Peraí! Na tabela ASCII A-Z, 5-9, a-f, :-@,
                                    as palavras acentuadas, e agora?
                       “Os intervalos respeitama ordem numérica da tabela ASCII”
                                    Dá para resolver isto com alguns
                                                           Como colocar o traço e os colchetes
                                            curingas, mas...
                                                           dentro da lista se eles são
                                    ...Vamos conhecer as metacaracteres?
                                                           classes de
                                           caracteres POSIX
O traço colocamos no final da lista sozinho;
O colchete de abertura ( [ ) pode colocar em qualquer lugar;
O colchete de fechamento ( ] ) deve ser colocado no começo da lista;

                                            Exemplo: [ ][ - ]
Plataforma .Net – ER: Representante
              Lista: a exigente [...]

                                        Os colchetes fazem parte
                                        da classe POSIX.

                                        Uma classe dentro de
                                        uma lista ficaria assim:
                                        [[:upper:]]

                                        IMPORTANTE: As classes
                                        POSIX levam em
                                        consideração a
                                        localidade.
Plataforma .Net – ER: Representante
                               Lista negada: a experiente [^...]

“Não tão exigente quanto a lista nem tão necessitada quanto o ponto, temos a lista negada, que
pelas suas más experiências passadas, sabe o que não serve para ela casar.”

A lista negada é igual a lista comum, a única diferença é que ela aceitará todos os caracteres que
NÃO tiverem dentro da lista.
Ex: l[^aeioAEIO]a – lua, l1a, lpa...

Importante: A lista negada não casa com espaço vazio. No exemplo acima ela NÃO aceitaria “l a” (l
espaço a).

Como colocar o ^ dentro da lista se ele também é um metacaracter?

Deve ser colocado no final. Ex: [^a-z123^]
Plataforma .Net – ER: Quantificador
                                   Opcional: o opcional ?

“O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou não a ocorrência
da entidade anterior, pois ele a repete 0 ou 1 vez.”




Já estamos aceitando algo abrangente de forma específica. Lembra do slide “Aplicações”?
Plataforma .Net – ER: Quantificador
                                      Asterisco: o tanto faz *

“Se o opcional já não esquenta a cabeça, podendo ter ou não a entidade anterior, o asterisco é
mais tranqüilo ainda, pois para ele pode ter, não ter, ou ter vários, infinitos. Em outras palavras, a
entidade anterior pode aparecer em qualquer quantidade.”




                                      Um curinga na manga
Vimos o metacaractere . (ponto) que aceita qualquer caractere. Agora vimos o metacaractere *
(asterisco) que aceita em qualquer quantidade. Olhe e pense na seguinte expressão:


                                                  .*
Plataforma .Net – ER: Quantificador
                                    Mais: o tem-que-ter +

“A única diferença [do mais e do asterisco] é que o mais não é opcional, então a entidade anterior
deve casar pelo menos uma vez, e pode ter várias.”




                                         Simples, não?!
Plataforma .Net – ER: Quantificador
                                  Chaves: o controle {m,m}

“Aqui Chaves não é o au?tor mexicano preferido de 10 entre 10 brasileiros. As chaves são a solução
para uma quantificação mais controlada, onde se pode especificar exatamente quantas repetições
se quer da entidade anterior.”




EX: a{1,2} – a, aa
    b{0,2}a – a, ba, bba
Plataforma .Net – ER: Âncora
                                     Circunflexo: o início ^

“O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nada
mais.”

Dentro da lista (e no início) o ^ tem o objetivo de negar seu conteúdo. Fora da lista ele serve para
marcar que a palavra deve ser encontrada exatamente no início da linha. EX: ^[a-zA-Z].

Este metacaractere só é especial se tiver no começo da expressão regular. Se eu quiser procurar
uma palavra que começe com ^ poderia fazer assim:

                                                ^^
Plataforma .Net – Testando memória
 Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide.
 Tente resolve-los antes de prosseguir.

 Escreva uma expressão regular que:

 1. Reconheça a palavra carro minúscula, no plural, singular e em qualquer parte de um
 texto.

 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em
 qualquer parte de um texto.

 3. Reconheça um número de IP, que aceite 999.999.999.999
 Dica: O metacaracter “” torna outro metacaractere literal.
 OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma
 simples o entendimento da aplicação de expressões regulares e os operadores aprendidos
 nesta parte.
Plataforma .Net – Testando memória
 Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-
 los antes de prosseguir.

 Escreva uma expressão regular que:

 1.   Reconheça a palavra carro minúscula, no plural, singular e em qualquer parte de um texto.
                                                carros?

 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de
 um texto.
                                           [cC][aA][sS][aA]

 3. Reconheça um número de IP, que aceite 999.999.999.999
 Dica: O metacaracter “” torna outro metacaractere literal.
 OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma simples o
 entendimento da aplicação de expressões regulares e os operadores aprendidos nesta parte.
                      [0-9][0-9]0-9].[0-9][0-9]0-9].[0-9][0-9]0-9].[0-9][0-9]0-9]
Plataforma .Net – ER em C#

 using System.Text.RegularExpressions;


 string texto= “Conteúdo a ser lido";
 Regex regex = new Regex(“expressao_regular");
 if (regex.IsMatch(texto))
     // Encontrou
 else
    // Não encontrou

   No site existe um exemplo para download codificando o trecho de código acima.
Plataforma .Net – Exercícios
Framework .Net: Aula 11 - Terça-feira
Agenda
• Fundamentações do .Net Framework
   – Introdução a coleções
   – Introdução a expressões lambdas aplicado a coleções
• Exercícios dirigidos
• Revisão da semana e feedback
Plataforma .Net – Vetores
  • Vetor ou array é uma estrutura de dados estáticas, ou seja, é criada com
  um número determinado de itens.

  • Quando criamos um vetor de 100 posições, por exemplo, é alocado em
  memória os 100 espaços que será utilizados.

  • O tempo de acesso a um vetor é bem rápido, porém ao redefinir o
  tamanho de um vetor temos uma considerável perda de desempenho, pois
  é necessário realocar dentro da memória o novo tamanho do vetor.

  • É recomendado o uso de vetores para itens que não mudarão ao longo da
  utilização da aplicação.

  String[] colecao = new String [10]; // Array de Strings
Plataforma .Net – Listas
  • Listas é uma estrutura de dados dinâmicas, ou seja, é criada sem saber o número
  total de itens.

  • Quando criamos uma lista e adicionamos um valor (uma posição), por exemplo, é
  alocado em memória apenas 1 espaço que é justamente o que foi utilizado.

  • O tempo de acesso a uma lista é um pouco maior que um array, porém ao redefinir
  o tamanho, ou seja adicionar novos itens, não ocorre perda de desempenho, pois
  não é necessário realocar a lista na memória e sim apenas criar um novo item.

  • As listas genéricas podem ser usadas com qualquer tipo de dado sem problema de
  boxing e unboxing, permitem uma leitura mais legível e disponibiliza recursos que o
  array não tem. Vamos conhecer mais...

  List<String> colecao = new List<String>(); // Lista de Strings
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução
DotNet Framework e Orientação a Objetos 1 - Introdução

Mais conteúdo relacionado

Mais procurados

Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsPalestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsAlessandro Binhara
 
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 Rogério Moraes de Carvalho
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Plataforma net pdf
Plataforma net pdfPlataforma net pdf
Plataforma net pdfAPlima
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e MoonlightPedro Alves Jr.
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpPedro Vuvu Alvaro
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Laís Vidal
 

Mais procurados (17)

Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não WindowsPalestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
Palestra do TechEd : O Projeto Mono: Aplicações .NET para sistemas não Windows
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
 
O projeto Mono
O projeto MonoO projeto Mono
O projeto Mono
 
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
MSDN Webcast: Trabalhando com covariância e contravariância no C# 4
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
 
Aula 1
Aula 1Aula 1
Aula 1
 
Plataforma net pdf
Plataforma net pdfPlataforma net pdf
Plataforma net pdf
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e Moonlight
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharp
 
Microsoft .NET Framework
Microsoft .NET FrameworkMicrosoft .NET Framework
Microsoft .NET Framework
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
.NET e C# - Introdução Geral
.NET e C# - Introdução Geral.NET e C# - Introdução Geral
.NET e C# - Introdução Geral
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012
 
.NET Open Source 2009
.NET Open Source 2009.NET Open Source 2009
.NET Open Source 2009
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 

Semelhante a DotNet Framework e Orientação a Objetos 1 - Introdução

ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioGeovani Ferreira Gonçalves
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureGiovanni Bassi
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?akamud
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?Letticia Nicoli
 
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaRogério Moraes de Carvalho
 
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformaTDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformatdc-globalcode
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONIFábio Delboni
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoreRogério Moraes de Carvalho
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemRogério Moraes de Carvalho
 
Palestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaPalestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaElvis Fusco
 

Semelhante a DotNet Framework e Orientação a Objetos 1 - Introdução (20)

Csharp
CsharpCsharp
Csharp
 
.NET Open Source
.NET Open Source.NET Open Source
.NET Open Source
 
Arquitetura[.net]
Arquitetura[.net]Arquitetura[.net]
Arquitetura[.net]
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 
1º FasS2B 2010
1º FasS2B 20101º FasS2B 2010
1º FasS2B 2010
 
Cebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET CoreCebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET Core
 
Novidades do .NET 3.5
Novidades do .NET 3.5Novidades do .NET 3.5
Novidades do .NET 3.5
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
ASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e AzureASP.NET Core com Linux, Docker e Azure
ASP.NET Core com Linux, Docker e Azure
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
 
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataformaTDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
TDC2016POA | Trilha .NET - O novo ASP.NET Core 1.0 multiplataforma
 
Introdução ao .NET
Introdução ao .NETIntrodução ao .NET
Introdução ao .NET
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONITOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
TOTVS IP CAMPINAS FSW Treinamento .NET C# - v4 POR FABIO DELBONI
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
 
Palestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC MaríliaPalestra Plataforma .NET na ETEC Marília
Palestra Plataforma .NET na ETEC Marília
 

Mais de Lorival Smolski Chapuis

Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...
Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...
Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...Lorival Smolski Chapuis
 
Aula inaugural da GeraçãoTec - Softville/Joinville
Aula inaugural da GeraçãoTec - Softville/JoinvilleAula inaugural da GeraçãoTec - Softville/Joinville
Aula inaugural da GeraçãoTec - Softville/JoinvilleLorival Smolski Chapuis
 
Tutorial realidade aumentada - Sociesc 2011
Tutorial realidade aumentada - Sociesc 2011Tutorial realidade aumentada - Sociesc 2011
Tutorial realidade aumentada - Sociesc 2011Lorival Smolski Chapuis
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisLorival Smolski Chapuis
 

Mais de Lorival Smolski Chapuis (9)

Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...
Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...
Uso de uma rede neural artificial para previsão do volume de lodo gerado em e...
 
Joinville Dojo 2010
Joinville Dojo   2010Joinville Dojo   2010
Joinville Dojo 2010
 
Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
 
Aula inaugural da GeraçãoTec - Softville/Joinville
Aula inaugural da GeraçãoTec - Softville/JoinvilleAula inaugural da GeraçãoTec - Softville/Joinville
Aula inaugural da GeraçãoTec - Softville/Joinville
 
Tutorial realidade aumentada - Sociesc 2011
Tutorial realidade aumentada - Sociesc 2011Tutorial realidade aumentada - Sociesc 2011
Tutorial realidade aumentada - Sociesc 2011
 
Realidade Aumentada - Sociesc 2011
Realidade Aumentada - Sociesc 2011Realidade Aumentada - Sociesc 2011
Realidade Aumentada - Sociesc 2011
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Iadis Conference Flood Forecasting
Iadis Conference   Flood ForecastingIadis Conference   Flood Forecasting
Iadis Conference Flood Forecasting
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 

Último

Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxconcelhovdragons
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfPastor Robson Colaço
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
Atividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoAtividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoMary Alvarenga
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 anoandrealeitetorres
 
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 anoAdelmaTorres2
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Mesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasMesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasRicardo Diniz campos
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosAntnyoAllysson
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdfJorge Andrade
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...LizanSantos1
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOMarcosViniciusLemesL
 
Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Susana Stoffel
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 

Último (20)

Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptxSlide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
Slide de exemplo sobre o Sítio do Pica Pau Amarelo.pptx
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
Atividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu AbrigoAtividade com a letra da música Meu Abrigo
Atividade com a letra da música Meu Abrigo
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
A galinha ruiva sequencia didatica 3 ano
A  galinha ruiva sequencia didatica 3 anoA  galinha ruiva sequencia didatica 3 ano
A galinha ruiva sequencia didatica 3 ano
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Mesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasMesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecas
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteiros
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...
Intolerância religiosa. Trata-se de uma apresentação sobre o respeito a diver...
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
 
Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 

DotNet Framework e Orientação a Objetos 1 - Introdução

  • 1. Framework .Net e Orientação a Objetos 1 Introdução (Baseado na Certificação Microsoft) Geração TEC – Talentos empreendedores para o mundo da tecnologia Lorival Smolski Chapuis
  • 2. Agenda geral • Introdução a plataforma .Net • Primeiros princípios de código limpo • Fundamentações do .Net Framework – Tipos por valor e referência – Manipulando sistemas de arquivos – Manipulando Strings – Expressões regulares – Coleções e princípios de lambda • Introdução a Orientação a objetos – Definição de classe e objeto – Entendendo métodos e propriedades • Práticas de Coding Dojo – Revisão linguagem C# – Novas práticas aprendidas • Utilização do gerenciador de código fonte GitHub e desenvolvimento orientado a testes.
  • 3. Agenda: Aula 1 - Terça-feira • Plataforma .Net – Histórico – Arquitetura – Vantagens – Aplicações – Projeto Mono – Curiosidades • Revisão geral – Visual Studio: Criação de projetos / dependências – Linguagem C#: Estrutura de decisão / Estrutura de repetição / Variáveis, constantes e enumeradores/ Funções, vetores e matrizes • Coding Dojo – Apresentação feita para Udesc • Princípios de desenvolvimento orientado a testes • Prática de Coding Dojo
  • 4. Agenda: Aula 2 - Quarta-feira • Desenvolvimento prático de uma calculadora. – Aplicar desenvolvimento orientado a testes. – Aplicar ideias de código limpo. – Criação de 3 projetos: • ClassLibrary • Testes • WindowsForm • Objetivo principal: conhecer o que veremos e como faremos algumas atividades daqui para frente.
  • 5. Agenda: Aula 3 – Quinta-feira • Código limpo – Discussões sobre código limpo – O que é um código limpo? • Princípios de código limpo – Nomes significativos • Fundamentações do .Net Framework – Valores por tipo – Definição de classe e objetos • Exercícios dirigidos
  • 6. Agenda: Aula 4 – Sexta-feira • Fundamentações do .Net Framework – Valores por referência – Convertendo entre tipos • Princípios de código limpo – Comentários • Exercícios dirigidos • Início do desenvolvimento da lista de exercícios – Desenvolver somente a parte de processamento, ou seja, não é necessário NESTE MOMENTO fazer a parte de tela pois estaremos vendo isto mais a frente; – Preferencialmente fazer em duplas;
  • 7. Agenda: Aula 5 – Segunda-feira • Fundamentações do .Net Framework – Tipos Nullable – Navegando pelo sistema de arquivos • Feedback da semana • Exercícios dirigidos
  • 8. Agenda: Aula 6 – Terça-feira • Discussões sobre o curso • Gerenciador de fontes GitHub • Exercícios dirigidos
  • 9. Agenda: Aula 7 – Quarta-feira • Usando GitHub • Fundamentações do .Net Framework – Manipulando sistema de arquivos • Exercícios dirigidos
  • 10. Agenda: Aula 8 – Quinta-feira • Manipulação de Strings – Concatenação – StringBuilder – StringFormat • Exercícios dirigidos
  • 11. Agenda: Aula 9 – Sexta-feira • Tempo para desenvolvimento da lista de exercício. • Auxílio nos desenvolvimentos. • Revisão de assuntos que ficaram com dúvidas.
  • 12. Agenda: Aula 10 – Segunda-feira • Expressões regulares: introdução – O que são – Como criá-las e manipulá-las – Como utilizar expressões regulares em C# • Revisão e dúvidas • Exercícios dirigidos
  • 13. Agenda: Aula 11 – Terça-feira • Fundamentações do .Net Framework – Introdução a coleções – Introdução a expressões lambdas aplicado a coleções • Exercícios dirigidos • Revisão da semana e feedback
  • 14. Requisitos para próximas etapas • Criar uma conta no GitHub: http://www.github.com – Criem um usuário com um nome expressivo e guardem a senha =)
  • 15. Material auxiliar para este módulo • Livro Programando com C# e Visual Studio 2005; • Livro 100% prático; • Desde declaração de variáveis até criação de telas WindowsForm.
  • 16. Framework .Net: Aula 1 - Terça-feira
  • 17. Agenda • Plataforma .Net – Histórico – Arquitetura – Vantagens – Aplicações – Projeto Mono – Curiosidades • Revisão geral – Visual Studio: Criação de projetos / dependências – Linguagem C#: Estrutura de decisão / Estrutura de repetição / Variáveis, constantes e enumeradores/ Funções, vetores e matrizes • Coding Dojo – Apresentação feita para Udesc • Princípios de desenvolvimento orientado a testes • Prática de Coding Dojo
  • 18. Plataforma .Net - Histórico O .Net Framework é uma plataforma para desenvolvimento de aplicações, criada pela Microsoft em 1999 e lançada oficialmente em 2002; Version Lançamento Visual Studio Windows 1.0 13 de fevereiro de 2002 Visual Studio XP, Tablets 1.1 24 de abril de 2003 Visual Studio 2003 Server 2003 2.0 07 de novembro de 2005 Visual Studio 2005 Server 2003 R2 3.0 06 de novembro de 2006 Visual Studio 2005 Vista, Server 2008 3.5 19 de novembro de 2007 Visual Studio 2008 7, Server 2008 R2 4.0 12 de abril de 2010 Visual Studio 2010 7 4.5 Lançamento oficial previsto final 2012 Visual Studio 2012 8, Server 2012
  • 19. Plataforma .Net - Arquitetura – A plataforma .Net disponibiliza uma vasta biblioteca de funcionalidades e componentes, fornecendo interoperabilidade com uma gama de linguagens de alto nível; – O desenvolvedor não se preocupa inteiramente com o dispositivo ao qual está destinada sua aplicação e sim com a plataforma de desenvolvimento. – A interoperabilidade de ambiente é semelhante à plataforma Java, usando uma máquina virtual independente de linguagem, chamado Common Language Runtime ou CLR. Em Java é a JVM. – Pode ser executada em vários dispositivos atualmente, desde um smartphone, tablet, Xbox 360, computadores desktops até servidores dedicados ou não;
  • 20. Plataforma .Net - Arquitetura – Com isto abstrai do desenvolvedor a necessidade de usar apenas uma única linguagem, tendo hoje mais de 30 opções, sendo algumas delas • C#, C++, Boo, F#, COBOL, Fortran, Haskell, Lua, Object Pascal, Perl, PowerBuilder, Python, Ruby, Smalltalk, Visual Basic, entre outras. – As aplicações são duplamente compiladas, sendo uma para uma linguagem intermediária, Common Intermediate Language (IL) ou Microsoft Intermediate Language (MSIL), e outra para linguagem de máquina.
  • 21. Plataforma .Net - Arquitetura
  • 22. Plataforma .Net - Arquitetura .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)
  • 23. Plataforma .Net - Arquitetura • Código gerenciado (.Net Framework) – 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) • Código não gerenciado (Específico para o SO) – Código Fonte – Compilador – Código de Máquina (Binário) Obs: NÃO requer o ambiente CLR para executar
  • 24. Plataforma .Net – O que é o CLR mesmo? • O 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, conhecidas como Common Language Infrastructure (CLI). • Estas especificações são abertas (ECMA-335, ISO/IEC 23271), assim permitem a interoperabilidade entre outras linguagens e plataformas.
  • 25. Plataforma .Net – Como é mesmo? Código VB C# C++ Fonte Componente Compilador Compilador Compilador Não Gerenciadol Código Gerenciado Assembly - Código IL Common Language Runtime (CLR) Compilador JIT Código Nativo Serviços do Sistema Operacional
  • 26. Plataforma .Net – Vantagens • Interoperabilidade – Possibilita executar funcionalidades de qualquer linguagem disponibilizada na plataforma e até fora da plataforma usando acesso COM. • Portabilidade – A Microsoft não implementou o .Net para outros Sistemas Operacionais diferentes do Windows, porém a plataforma foi criada e disponibilizada para ser possível fazer isso por terceiros. • Segurança – Trata algumas vulnerabilidades comuns e fornece um modelo de segurança para as aplicações. • Deploy simplificado – Possui ferramentas que auxiliam na criação de instaladores de acordo com os padrões e seguranças requeridos, de forma fácil e flexível. • Biblioteca de funcionalidades comuns – Existem várias funcionalidades disponíveis independentes da linguagem que esteja sendo utilizadas, desde manipulação de arquivos, acesso a base de dados, criptografia, fórmulas matemáticas, processamento gráfico até gerenciamento paralelo de aplicações.
  • 27. Plataforma .Net – Aplicações – Aplicações SmartClient – Aplicações console – Aplicações Client/Server – Bibliotecas de funcionalidades – Aplicações web – Extender componentes – Serviços Web existentes e melhorá-los – Serviços Windows conforme necessidades – Aplicações para dispositivos – Criar plugin para o Visual Studio móveis – Criar aplicações RIA – Aplicações distribuidas – E várias outras... – Testes automatizados – Plugins para aplicações Obs: Para fazer qualquer item acima Microsoft como Office é necessário ter o Visual Studio – Aplicações Cloud – Aplicações baseadas em Workflow
  • 28. Plataforma .Net – Projeto MONO – Mono é uma plataforma open source que implementa os padrões do .Net Framework definidas na ECMA (European Computer Manufacturers Association agora Ecma Internacional) para C# e CLR. – Atualmente o compilador C# tem suporte ao C# 1.0,2.0,3.0 e 4.0 (ECMA). – Multi-plataformas: • Linux; • Microsoft Windows; • Mac OS X; • BSD e Sun Solaris; • Nintendo Wii; • Sony Play Station 3; • IOS; • Android; – A IDE para desenvolvimento é a MonoDevelop
  • 29. Plataforma .Net – Curiosidades (C#) História da linguagem C# • Foi criado junto com a arquitetura .NET. Embora existam várias outras linguagens que suportam essa tecnologia (como VB.NET, C++, J#), C# é considerada a linguagem símbolo do .NET pelas seguintes razões: – Foi criada praticamente do zero para funcionar na nova plataforma, sem preocupações de compatibilidade com código de legado. – O compilador C# foi o primeiro a ser desenvolvido. – A maior parte das classes do .NET Framework foram desenvolvidas em C#. • A criação da linguagem, embora tenha sido feita por vários desenvolvedores, é atribuída principalmente a Anders Hejlsberg. Anders era desenvolvedor de compiladores na Borland, e entre suas criações mais conhecidas estão o Turbo Pascal e o Delphi.
  • 30. Plataforma .Net – Curiosidades: Nome C# • Muitos pensam que o nome C# viria de uma sobreposição de 4 símbolos "+" dando a impressão de "++++". Na verdade o "#" de C# refere-se ao sinal musical (sustenido), que aumenta em 1/2 tom uma nota musical. • O símbolo real seria o ♯ e não o #, porém, devido a limitação de telas, fontes e alguns browsers, no momento da normalização junto a ECMA, fora especificado apenas que o nome da linguagem seria uma letra C maiúscula (U+0043) e o sinal "#" (U+0023), facilitando assim, publicações e artigos com um caracter encontrado facilmente dos layouts de teclado padrões. • Desta forma, caso o nome fosse usado em português, seria "C- Sustenido" (ou "Dó-Sustenido"), e não "C-cerquilha".
  • 31. Plataforma .Net – Curiosidades: Atenções • Aplicações compiladas diretamente para o Sistema Operacional origem e sendo não gerenciadas possuem mais desempenho... A pergunta é a que custo... • Como as DLLs e EXE são IL, é possível facilmente fazer engenharia reversa. É necessário usar alguns softwares para dificultar este processo, quando necessário. • As versões 3.5 para cima não vem pré-instaladas no SO, ou seja, é necessário baixar a instalar, tendo que ter alguns cuidados no deploy de aplicações.
  • 32. Plataforma .Net – Curiosidades: SO C#? • Singularity – Entre 2003 e 2010 o Microsoft Research criou um Sistema Operacional experimental chamado Singularity desenvolvido em C#. – Foi desenvolvido o Kernel, device drivers e até um SDK para desenvolvimento de aplicações que pode ser encontrado no codeplex: http://singularity.codeplex.com/ – Não está mais em andamento, mas serviu de base para várias outros do mesmo gênero. • Cosmos C# – É um sistema operacional open source desenvolvido em C# convertendo as instruções IL para instruções nativas. – Suporta arquitetura x86. – Possui sistema de arquivos e interface de rede suportando algumas funcionalidades TCP/IP. – Possui o Cosmo User Kit para desenvolvedores usarem o Visual Studio. – Está a todo vapor no codeplex: http://cosmos.codeplex.com/
  • 33. Plataforma .Net – Prática de Coding Dojo http://dojopuzzles.com/problemas
  • 34. Framework .Net: Aula 2 - Quarta-feira
  • 35. Plataforma .Net – Prática • Desenvolvimento passo-a-passo de uma calculadora usando desenvolvimento orientado a testes e ideias de código limpo. • Não será usado conceitos de orientação a objetos. • Criação de um projeto ClassLibrary, um projeto para testes e um para WindowsForm. Objetivo principal: conhecer o que veremos e como faremos algumas atividades daqui para frente.
  • 36. Framework .Net: Aula 3 – Quinta-feira
  • 37. Agenda • Código limpo – Discussões sobre código limpo – O que é um código limpo? • Princípios de código limpo – Nomes significativos • Fundamentações do .Net Framework – Valores por tipo – Definição de classe e objetos • Exercícios dirigidos
  • 38. Plataforma .Net – O código Jamais nos livraremos dele!
  • 39. Plataforma .Net – Código ruim Jamais nos livraremos dele?
  • 40. Plataforma .Net – Custo do código ruim Código complexo aumenta, produtividade diminui.
  • 41. Plataforma .Net – “A” nova versão Código complexo apenas torna “A” nova versão um looping.
  • 42. Plataforma .Net – Atidude Atitude com responsabilidade mudam o ambiente de desenvolvimento.
  • 43. Plataforma .Net – O que é código limpo? “Gosto de meu código elegante e eficiente. A lógica deve ser direta para dificultar o encobrimento de bugs, as dependências mínimas para facilitar a manutenção, o tratamento de erro completo de acordo com uma estratégia clara e o desempenho próximo do mais eficiente de modo a não incitar as Bjarne Stroustrup, criador do C++ e pessoas a tornarem o código onfuso autor do livro “A linguagem de com otimizações sorrateiras. O programação C++”. código limpo faz bem apenas uma coisa.”
  • 44. Plataforma .Net – O que é código limpo? “Um código limpo é simples e direto. Ele é tão bem legível quanto uma prosa bem escrita. Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele está repleto de abstrações claras e linhas de controle objetivas.” Grandy Booch, autor do livro “Análise e Projeto de Sistemas Orientados a Objetos”
  • 45. Plataforma .Net – O que é código limpo? “Ele tem testes de unidade e aceitação, nomes significativos; ele oferece apenas uma maneira e não várias de se fazer uma tarefa; possui poucas dependências as quais são explicitamente declaradas e oferecem um API mínimo e claro. O código deve ser inteligível já que dependendo da linguagem, nem David A. Thomas, fundador da toda informação necessária pode Object Technology International estar expressa no código em si. ” (IBM OTI Labs), responsável pelo início do desenvolvimento do “Eclipse IDE”.
  • 46. Plataforma .Net – O que é código limpo? “Eu poderia listar todas as qualidades que vejo em um código limpo, mas há uma predominante que leva a todas as outras. Um código limpo sempre parece que foi escrito por alguém que se importava. Não há nada de óbvio no que se pode fazer para torná-lo melhor. Tudo foi pensado pelo autor Michael Feathers, autor de do código, e se tentar pensar em “Trabalhando efetivamente com algumas melhorias, você voltará ao código legado”. inicio, ou seja, apreciando o código deixado para você por alguém que se importa com essa tarefa.”
  • 47. Plataforma .Net – A regra de escoteiro “Deixe a área do acampamento mais limpa do que como você a encontrou”. A história do apartamento sujo...
  • 48. Plataforma .Net – Princípios código limpo Nomes significativos – Nomeamos variáveis, – Nomeamos funções, – Nomeamos parâmetros, – Nomeamos classes, – Nomeamos arquivos, – Nomeamos diretórios, – Nomeamos e nomeamos...
  • 49. Plataforma .Net – Nomes significativos • Escolher bons nomes leva tempo, mas economiza mais. • O nome de qualquer coisa no código deve lhe dizer porque existe, o que faz e como é usado. • Se um nome requer um comentário, então ele não revela seu propósito: Int d; // tempo decorrido em dias
  • 50. Plataforma .Net – Nomes significativos • Nomes devem ser simples e compreendidos facilmente: Int tempoEstimadoEmDias; Date dataEmissao; String nomeArquivoBackup; Int AnoArquivoEmDias;
  • 51. Plataforma .Net – Nomes significativos public List<int[]> retornaItens(){ List<int[]> lista1 = new List<int[]>(); foreach(int[] x in listaGeral){ if (x[0] == 4) lista1.add(x); } return list1; }
  • 52. Plataforma .Net – Nomes significativos public List<int[]> retornaItens(){ List<int[]> lista1 = new List<int[]>(); foreach(int[] x in listaGeral){ if (x[0] == 4) lista1.add(x); } return list1; } Função de um jogo de “Campo minado”
  • 53. Plataforma .Net – Nomes significativos public List<int[]> retornaCelulasMarcadas(){ List<int[]> celulasMarcadas= new List<int[]>(); foreach(celula[] x in tabuleiro){ if (celula[STATUS] == MARCADA) celulasMarcadas.add(x); } return celulasMarcadas; } Apenas mudamos os nomes... Vamos continuar...
  • 54. Plataforma .Net – Nomes significativos public List<celula> retornaCelulasMarcadas(){ List<celula> celulasMarcadas= new List<celula>(); foreach(Celula celula in tabuleiro){ if (celula.estaMarcada()) celulasMarcadas.add(celula); } return celulasMarcadas; } Apenas trocando os nomes e fazendo uma simples refatoração o código ficou muito mais legível.
  • 55. Plataforma .Net – Nomes significativos for (int j=0; j<50; j++){ s += (t[j]*4)/5; } O que faz isso?
  • 56. Plataforma .Net – Nomes significativos • Evite informações erradas: – Evite usar palavras cujos significados podem se desviar do desejado, ex: hp, aix, sco. Mesmo que tiver programando uma hipotenusa, hp pode parecer uma boa opção, mas pode ser interpretado como um comando Unix. – Não coloque o nome de lista se não for efetivamente uma lista. • Use nomes pronunciáveis: – Tente discutir com alguém sobre um programa com variáveis não pronunciáveis: “Olha, aqui no bê cê erre três cê ene tê, temos um pê esse zê quê int...”
  • 57. Plataforma .Net – Nomes significativos • Use nomes passíveis de busca: – Nomes de uma só letra ou com números possuem um problema na hora de ser localizados no código; – Buscas são o último recurso e quando você precisa dela quer que funcione; • Evite o mapeamento mental: – Utilize nomes que façam sentido para o “negócio” ou para a “solução” do problema e evite assim que o leitor desenvolvedor precise ficar decorando o que faz uma variável para entender um código 3 linhas abaixo.
  • 58. Plataforma .Net – Nomes significativos • Notação Húngara: não faça isto! – Exemplos: • s_nomeCliente ou str_nomeCliente ou strNomeClient • i_idade ou int_idade ou intIdade – A um bom tempo atrás tínhamos algumas características nas linguagens que não temos hoje: • Versões anteriores do Basic só permitiam uma letra mais um dígito; • O Fortran forçava codificações ao tornar a primeira letra uma indicação para o tipo; • Não ter variáveis tipadas. – Nas linguagens atuais, neste curso tratamos de C#, os objetos já são o próprio tipo e o ambiente detecta a utilização inadequada de um tipo, como colocar uma string dentro de um inteiro. – Resumo: Notação Húngara vai dificultar a nomenclatura e podem até induzir ao erro se mal colocado. Evitem ao máximo e se possível nunca usem.
  • 59. Plataforma .Net – Nomes significativos • Métodos (Funcionalidades): – Os nomes de métodos devem ter verbos; • Errado: void lista(); • Certo: void retornaLista(); • Certo: void retorneLista(); – Preferível. Imagine que você esteja “ordenando” uma ação. – Não coloque os parâmetros no nome do método; • Errado: void retornaListaPeloCnpjEPeloID(String cnpj, int id); • Certo: void retornaLista(String cnpj, int id);
  • 60. Plataforma .Net – Nomes significativos • Selecione uma palavra por conceito: – Você quer retornar um dado e usa métodos assim por todo código: • pegarHora(); • recuperarData(); • obterNome(); • retornarSobrenome(); – Escolha um conceito e use sempre: • obterHora(); • obterData(); • obterNome(); • ObterSobrenome();
  • 61. Plataforma .Net – Nomes significativos • PascalCase: – TodasAsPalavrasIniciamComLetraMaiuscula – Classes, Enumeradores, Eventos, Fields estáticos, Interface, Métodos, NameSpaces, Propriedade, Field público. • CamelCase: – apenasAPrimeiraPalavraIniciaComLetraMinuscula – Parâmetros, Fields privados, Variáveis.
  • 62. Plataforma .Net – Nomes significativos • O C# é case-sensitive, diferente de Visual Basic. • Desenvolvedores VB criam variáveis iniciando com underline para poder ter propriedades com o mesmo nome. • Não faça isto em C#, a linguagem é case- sensitive, aproveite isto.
  • 63. Plataforma .Net – Fundamentações .Net • Tipos por valor – O que são e quem são – Criando tipos por valor – Trabalhando com enumeradores • Tipos por referência – O que são e quem são – Criando tipos por referência • Convertendo entre tipos – Boxing e Unboxing • Exercícios dirigidos
  • 64. Plataforma .Net – Tipos por valor • Tipos por valor são tipos que permitem armazenar realmente o valor definido e não um “ponteiro” para um local da memória onde está o valor. • Os valores das variáveis dos tipos por valor são armazenados em uma área chamada “stack”, onde em tempo de execução consegue ser lido, gravado e atualizado rapidamente sem causar overhead (processamento em excesso).
  • 65. Plataforma .Net – Tipos por valor • Exemplo: int valor1 = 1; int valor2 = valor1; valor2++; Qual resultado de valor1??? Qual resultado de valor2???
  • 66. Plataforma .Net – Tipos por valor • Exemplo: int valor1 = 1; int valor2 = valor1; valor2++; Qual resultado de valor1??? 1 Qual resultado de valor2??? 2 Porque?
  • 67. Plataforma .Net – Tipos por valor • Exemplo: int valor1 = 1; int valor2 = valor1; valor2++; Qual resultado de valor1??? 1 Qual resultado de valor2??? 2 Porque? Pelo simples fato de ao armazenar o valor “1” na variável “valor1” e armazenar “valor1” na variável “valor2”, o valor é COPIADO para a variável “valor2” e ambos estão separados dentro da memória stack.
  • 68. Plataforma .Net – Tipos por valor Tipo Utilização Bytes Faixa Usado para System.SByte SByte/sbyte 1 -128 até 127 Bytes negativos e positivos System.Byte Byte/byte 1 0 até 255 Apenas Bytes positivos System.Int16 Short/short 2 –32768 até 32767 Números pequenos System.Int32 Integer/int 4 –2147483648 até 2147483647 Número inteiros e contadores System.UInt32 UInteger/uint 4 0 até 4294967295 Apenas números positivos System.Int64 Long/long 8 –92372036854775808 até Números 9223372036854775807 grandes 23
  • 69. Plataforma .Net – Tipos por valor Tipo Utilização Bytes Faixa Usado para System.Single Single/float 4 –3.402823E+38 até Números 3.402823E+38 decimais (pontos flutuantes) System.Double Double/double 8 – Grandes 1.79769313486232E+30 números 8 to decimais 1.79769313486232E+30 8 System.Decimal Decimal/decimal 16 – Cálculos 79228162514264337593 científicos ou 54 que requerem 3950335 to grande precisão 79228162514264337593 5439 50335
  • 70. Plataforma .Net – Tipos por valor • Boas práticas: – Em tempo de execução é otimizada a utilização de inteiros 32 bits (Int32, Uint32). – Para ponto flutuante o mais eficiente é o Double que tem suas operações otimizadas pelo hardware.
  • 71. Plataforma .Net – Tipos por valor Tipo Utilização Bytes Faixa Usado para System.Char Char/char 2 Não tem Apenas 1 caracteres unicode System.Boolean Boolean/bool 4 Não tem Valor Verdadeiro (True) ou False (False) System.IntPtr Não tem Depende da Não tem Ponteiro para plataforma endereçamento de memória System.DateTime Date/date 8 1/1/0001 Data e hora 12:00:00 AM até 12/31/9999 11:59:59 PM
  • 72. Plataforma .Net – Tipos por valor • Existem quase 300 tipos por valor, mas os tipos mostrado aqui cobrem a maioria das necessidades. • Quando você atribui um valor para uma variável de um tipo assim os dados são copiados para ele como já vimos. • Este comportamento é diferente do de tipos de referência, que serão discutidos mais adiante. • Mesmo que tipos por valor, muitas vezes representam valores simples, eles ainda funcionam como objetos. Em outras palavras, podemos chamar métodos neles. De fato, é comum utilizar o ToString(), por exemplo. • Todos os tipos são derivados de System.Object. Esse relacionamento ajuda a estabelecer o sistema de tipo comum utilizado para todos os tipos.
  • 73. Plataforma .Net – Tipos por valor Resumo • É armazenado na memória Stack. (Pilha) • Stack é uma área da memória onde podemos armazenar e gerenciar dados. • É extremamente eficiente, porém, cabem poucas duzias de kilobytes. • É manipulada conforme uma pilha. • Não pode ser nulo. • Trabalha com dados diretamente. Stack • Exemplos: Idade = 15 • Inteiros; • Decimais; Estudante = 1 (Sim -> 0 = Não; 1 = Sim) • Datas; Salário = 501,52 • Booleanos; ... • Enumerações
  • 74. Plataforma .Net – Enumeradores • Enumerações são símbolos relacionados que têm valores fixos. Use enumerações para fornecer uma lista de opções ao invés de valores fixos diretamente. • Exemplo: public void metodoQualquer() { string nomeCidade = obtemNomeCidade(); if (nomeCidade == "Joinville") { //-- Faça algo para Joinville } else if (nomeCidade == "Blumenau") { //-- Faça algo para Blumenau } }
  • 75. Plataforma .Net – Enumeradores enum Cidade { Joinville, Blumenau } • Para criar um enumerador é bem simples, basta colocar enum e o nome dele. Dentro das chaves defina a lista de opções e pronto, seu enumerador está criado. • Importante: o enumerador é apenas uma representação estática de um número. A lista começa sempre em zero então neste caso Joinville é o número zero e Blumenau é o número 1. • Vamos aplicar este enumerador ao nosso exemplo anterior e ver como fica?
  • 76. Plataforma .Net – Enumeradores public void metodoQualquer() { Cidade cidade = obtemCidade(); if (cidade == Cidade.Joinville) { //-- Faça algo para Joinville } else if (cidade == Cidade.Blumenau) { //-- Faça algo para Blumenau } } • Melhorou? Agora não precisamos de Strings fixas, reduzimos a possibilidade de um erro e deixamos o código mais claro. • Tem como definir os índices para os enumeradores?
  • 77. Plataforma .Net – Enumeradores enum Cidade { Joinville=20, Blumenau=30 } • Pronto, agora nossos itens do enumerador possuem seus próprios números e não iniciam mais em zero.
  • 78. Plataforma .Net – O que é uma classe? • Classe é a representação escrita de um tipo de objeto. • A classe está para um objeto assim como uma “planta baixa” está para um prédio. • É a definição formal de um objeto.
  • 79. Plataforma .Net – Definição de objetos • Objetos são abstrações do mundo real afim de definir comportamentos e atributos. • Todo objeto, no mundo real, possui comportamentos (ações) e atributos (propriedades). • Quais são os ações e propriedades dos itens a seguir?
  • 80. Plataforma .Net – Definição de objetos • Cite ações e propriedades: – Carro; – Pessoa; – Cadeira; – Calculadora; – Martelo; – Pudim;
  • 81. Plataforma .Net – Definição de objetos • Cite ações e propriedades: – Carro; • Ações: ligar, acelerar, frear, buzinar... • Propriedades: cor, tamanho, aro da roda... – Pessoa; • Ações: andar, correr, comer, falar, ouvir, dançar... • Propriedades: altura, peso, forma, cor do cabelo... – Cadeira; • Ações: ... • Propriedades: Quantidade de pernas, tipo de acento, tamanho...
  • 82. Plataforma .Net – Definição de objetos • Cite ações e propriedades: – Calculadora; • Ações: somar, multiplicar, subtrair, dividir • Propriedades: cor, tamanho dos botões, tipo do visor... – Martelo; • Ações: Bater, arrancar prego... (quem bate? Quem arranca?) • Propriedades: Comprimento, peso da “cabeça” do martelo... – Pudim; • Ações: estragar... • Propriedades: cor, tamanho, formato...
  • 83. Plataforma .Net – Pudim Objeto: pudim Classe: define o pudim Objeto: pudim
  • 84. Plataforma .Net – Pudim • Ações e propriedades: – Pudim; • Ações: estragar... • Propriedades: tamanho, formato...
  • 85. Plataforma .Net – Classe Pudim Public class Pudim { public string Tamanho { get ; set ; } public string Formato{ get ; set ; } public void Estragar() { } }
  • 86. Plataforma .Net – Classe Pudim Public class Pudim { public string Tamanho { get ; set ; } public Nome da Formato{ get ; set ; } string classe (inicia com letra public void Estragar() maiúscula) { } }
  • 87. Plataforma .Net – Classe Pudim Public class Pudim { public string Tamanho { get ; set ; } Acesso dapublic string Formato{ get ; set ; } classe. Todo mundo tem public void Estragar() { acesso. } }
  • 88. Plataforma .Net – Classe Pudim Public class Pudim { public string Tamanho { get ; set ; } Propriedades public string Formato{ get ; set ; } public void Estragar() { } }
  • 89. Plataforma .Net – Classe Pudim Public class Pudim { Set = Podemos definirTamanho { get ; set ; } public string o valor Get = Podemos obter Formato{ get ; set ; } public string o valor public void Estragar() { } }
  • 90. Plataforma .Net – Classe Pudim Public class Pudim { public string Tamanho { get ; set ; } public string Formato{ get ; set ; } public void Estragar() { Ações } }
  • 91. Plataforma .Net – Classe Pudim Public class Pudim { public string Cor { get ; set ; } public string Tamanho { get ; set ; } public string Formato{ get ; set ; } public void Estragar() { Void: não retorna valor. } Podemos retornar qualquer tipo de } dado/objeto
  • 92. Plataforma .Net – Objeto Pudim Pudim pudim = new Pudim(); pudim.tamanho = “médio”; pudim.formato = “redondo” Pudim pudim2 = new Pudim(); pudim2.tamanho = “grande”; pudim2.formato = “quadrado”
  • 93. Plataforma .Net – Objeto Pudim Pudim pudim = new Pudim(); pudim.tamanho = “médio”; pudim.formato = “redondo” Operador de criação de um objeto Pudim pudim2 = new Pudim(); pudim2.tamanho = “grande”; pudim2.formato = “quadrado”
  • 94. Plataforma .Net – Objeto Pudim Pudim pudim = new Pudim(); pudim.tamanho = “médio”; pudim.formato = “redondo” Pudim pudim2 = new Pudim(); Definição dos pudim2.tamanhodas “grande”; valores = propriedades pudim2.formato = “quadrado”
  • 95. Plataforma .Net – Objeto Pudim Pudim pudim = new Pudim(); pudim.tamanho = “médio”; pudim.formato = “redondo” pudim.Estragar(); Invocação do método estragar.
  • 96. Plataforma .Net – Classe Calculadora Public class Calculadora { public int Valor1 { get ; set ; } public int Valor2 { get ; set ; } public int Somar() { return this.Valor1 + this.Valor2; } }
  • 97. Plataforma .Net – Objeto Calculadora Calculadora calculadora = new Calculadora(); calculadora.Valor1 = 3; calculadora.Valor2 = 5; int resultado = calculadora.Somar();
  • 98. Plataforma .Net – Objeto Calculadora Calculadora calculadora = new Calculadora(); calculadora.Valor1 = 3; Criamos o calculadora.Valor2 = 5; objeto calculadora int resultado = calculadora.Somar();
  • 99. Plataforma .Net – Objeto Calculadora Calculadora calculadora = new Calculadora(); calculadora.Valor1 = 3; calculadora.Valor2 = 5; int resultado = calculadora.Somar(); Definimos propriedades
  • 100. Plataforma .Net – Objeto Calculadora Calculadora calculadora = new Calculadora(); calculadora.Valor1 = 3; calculadora.Valor2 = 5; int resultado = calculadora.Somar(); Invocamos ações.
  • 101. Framework .Net: Aula 4 – Sexta-feira
  • 102. Agenda • Fundamentações do .Net Framework – Valores por referência – Convertendo entre tipos • Princípios de código limpo – Comentários • Exercícios dirigidos • Início do desenvolvimento da lista de exercícios – Desenvolver somente a parte de processamento, ou seja, não é necessário NESTE MOMENTO fazer a parte de tela pois estaremos vendo isto mais a frente; – Preferencialmente fazer em duplas;
  • 103. Plataforma .Net – Tipos por referência • Tipos de referência armazenam o endereço de seus dados, também conhecidos como um ponteiro. • Os dados reais que se refere ao endereço é armazenado em uma área de memória chamada “heap”. • Não precisamos nos preocupar com gerenciamento de memória dos tipos de referência, o .Net Framework cuida disso para nós. • Um processo chamado “Garbage Collector” automatiza o gerenciamento de memória, fazendo o “trabalho sujo” de eliminar os tipos que não são mais referenciados por ninguém e liberando memória.
  • 104. Plataforma .Net – Tipos por referência • Exemplo: StringBuilder valor1 = new StringBuilder(“oi”); StringBuilder valor2 = valor1; valor2.Append(“ tchau”); Qual resultado de valor1??? Qual resultado de valor2???
  • 105. Plataforma .Net – Tipos por referência • Exemplo: StringBuilder valor1 = new StringBuilder(“oi”); StringBuilder valor2 = valor1; valor2.Append(“ tchau”); Qual resultado de valor1??? “oi tchau” Qual resultado de valor2??? “oi tchau” Porque?
  • 106. Plataforma .Net – Tipos por referência • Exemplo: StringBuilder valor1 = new StringBuilder(“oi”); StringBuilder valor2 = valor1; valor2.Append(“ tchau”); Qual resultado de valor1??? “oi tchau” Qual resultado de valor2??? “oi tchau” Porque? Pelo simples fato de ao armazenar o valor “oi” na variável “valor1” e armazenar “valor1” na variável “valor2”, o valor é REFERENCIADO para a variável “valor2” e não COPIADO e o valor mesmo está na memória HEAP.
  • 107. Plataforma .Net – Tipos por referência Tipo Usado para System.String Valor texto. Com a ressalva que para o .Net Framework o valor de uma String é imutável. Veremos com mais detalhes isto quando trabalharmos com StringBuilder. System.Text.StringBuilder Valores textos dinâmicos. System.Array Vetor de dados. Esta é a classe básica para todos os arrays. System.Exception Lançar ou tratar exceções. Veremos isto em tratamento de exceções. ... ... Existem mais de 2 500 tipos por referência dentro do .Net Framework.
  • 108. Plataforma .Net – Tipos por referência Resumo • É armazenado na memória Heap. (Monte) • Heap é uma área da memória onde podemos armazenar e gerenciar dados dinamicamente. • É alocada e liberada em blocos, o que muitas vezes se torna burocrático e mais lento. • Permite qualquer tipo inclusive nulo. • Trabalha com dados ponteiros (referência de memória). • Exemplos: Stack • Vetores; Nome = #123456abc (endereço) • Textos; ... • Instância de classes; Heap #123456abc = “Geração” ...
  • 109. Plataforma .Net – Tipos:Valor vs Referêcia • Exemplo: StringBuilder valor1 = new StringBuilder(“oi”); StringBuilder valor2 = valor1; valor2.Append(“ tchau”); Qual resultado de valor1??? “oi tchau” Qual resultado de valor2??? “oi tchau” Porque? Pelo simples fato de ao armazenar o valor “oi” na variável “valor1” e armazenar “valor1” na variável “valor2”, o valor é REFERENCIADO para a variável “valor2” e não COPIADO e o valor mesmo está na memória HEAP.
  • 110. Plataforma .Net – Boxing e Unboxing • Boxing é o processo de converter um tipo por valor para um tipo por referência. • Unboxing é o processo de converter um tipo por referência em um tipo por valor. • Ambos processos são computacionalmente caros. Quando um tipo por valor é convertido em um tipo por referência (boxing) um novo objeto deve ser alocado e contruído.
  • 111. Plataforma .Net – Boxing e Unboxing int inteiro = 123; // Tipo por valor object objeto; // Tipo por referência objeto = inteiro; // Causa “boxing” string texto = objeto.ToString() // Chama via O int novoInteiro = (int)objeto // Faz “unboxing” Stack Heap inteiro 123 objeto 123 novoObjeto 123
  • 112. Plataforma .Net – Evite Cast • É chamado de Cast a conversão forçada de um tipo em outro. – Exemplo: String valor = “1”; int numero = (int)valor; • Evite a utilização de cast. Ele é caro computacionalmente. • Apenas use quando for realmente necessário. • Sempre procure métodos de conversão como por exemplo: int inteiro = 123; // Tipo por valor object objeto = inteiro; // Causa “boxing” int novoInteiro = Convert.ToInt32(objeto);
  • 113. Plataforma .Net – Comentários “Não insira comentários num código ruim, reescreva-o.” Brian W. Kernighan (PhD em Ciência da Cmputação...) e P.J. Plaugher (Autor e empresário...)
  • 114. Plataforma .Net – Comentários • Comentários são um “mal necessário” e vamos entender um pouco mais sobre como utilizar melhor esta ferramenta de auxílio ao código. • “Se nossas linguagens de programação fossem expressivas o suficiente ou se tivéssemos o talento para manipular com destreza tais linguagens de modo a expressas nossa intenção, não precisaríamos de muitos comentários, quiçã nenhum. • Para compensar nosso fracasso em nos expressar no código temos que no mínimo usar adequadamente os comentários. • Mude o que mudar, falem o que falar, briguem o que brigar, cantem o que cantar, chorem quem quiser chorar: a verdade está no código.
  • 115. Plataforma .Net – Comentários Comentários compensam código ruim? • Acabamos de construir um código que tá difícil de entender, qual a primeira coisa que vem na mente? Hmmmm... Vou deixar bem comentado este código. Pare agora! Código limpo! • Códigos limpos e expressivos com poucos comentários são de longe superiores a um amontoado e complexos cheios de comentários. • Não gaste tempo criando comentários para explicar a bagunça que você fez, use-o para limpar a zona que ficou. • Vamos ver alguns exemplos de como e quando NÃO FAZER comentários.
  • 116. Plataforma .Net – Comentários,não assim Comentários dizendo exatamente o que se está fazendo: // Somente executa se a pessoa tiver mais que 18 anos e for do sexo feminino // para ver se pode entrar no banheiro feminino if (pessoa.idade >= 18 && pessoa.sexo == Sexo.Feminino){ banheiroFeminino.Entre(pessoa); } Bobeira isso? Não! Existe e muito! Não seria mais simples assim? if (pessoa.PodeEntrarBanheiroFeminino()){ banheiroFeminino.Entre(pessoa); }
  • 117. Plataforma .Net – Comentários,não assim Controle de fonte no código. // 01/01/2012: Alterado por Fulano para fazer tal coisa. // 06/02/2012: Alterado por Ciclano para fazer outra coisa. // 29/03/2012: Alterado por Beltrano para desfazer alteração do Fulano Há muito tempo, havia um om motivo para preservar estas informações. Hoje não se desenvolve mais sem um controle de fontes como o SVN, TFS ou GIT. Deixe a responsabilidade de controlar as alterações e quem as alterou para o devido responsável: o controle de fontes. Quer deixar sua maca no código colocando seu nome? Faça um código bem feito e deixe sua marca na sua vida profissional.
  • 118. Plataforma .Net – Comentários,não assim Comentários sem total necessidade, apenas “para comentar”: // Construtor padrão *** não, tá brincando que ele é o contrutor padrão. Public Pessoa(){ } // Dia do mês *** achei que fosse quantidade de caracteres... Private int diaDoMes(); // Retorna o dia do mês *** para! Agora tá de sacanagem... Public int ObtemDiaDoMes(){ return diaDoMes; } Qualquer desenvolver que leia este código vai ignorar estes comentários, logo não perca tempo escrevendo-os. Vamos piorar a situação agora...
  • 119. Plataforma .Net – Comentários,não assim Comentários mentem: // Somente executa se a pessoa tiver mais que 18 anos e for do sexo feminino // para ver se pode entrar no banheiro feminino if (pessoa.sexo == Sexo.Feminino){ banheiroFeminino.Entre(pessoa); } Quando uma alteração no código é executada, dificilmente seu comentário é alterado, fazendo com que se torne falso. Regra básica: quanto maior e mais longe o comentário do código destino, mais falso ele pode ser. No final você pode confiar apenas no código.
  • 120. Plataforma .Net – Comentários,não assim Excesso de comentários no famoso Ctrl + C, Ctrl + V: /** Name. */ Private String name; /** The Version. */ Private String version; /** Licence Name. */ Private String licenceName; /** The Version. */ Private StringInfo; Este é um código de uma biblioteca de código livre bem conhecida... Se nem os autores não prestarem atenção na hora de comentar, porque os leitores deveriam?
  • 121. Plataforma .Net – Comentários,não assim Comentários para fechar tag “chaves”: ... try{ while( ... ) { ... ... ... } //while ... ... } // try ... Isso até pode faze sentido em funções longas com muitas estruturas aninhadas. Antes de faze este tipo de comentário, tente refatorar e diminuir as linhas. Um método (função) deve fazer uma única tarefa.
  • 122. Plataforma .Net – Comentários,não assim Informações excessivas e o pior se desculpando...: /* * Na década de 90 o fulado de tal criou uma tarefa para fazer uma alteração mas acabou não fazendo, então ficou para mim a pendência de fazer. Eu não conheço bem esta parte do sistema e fiz o que pude, desculpe se não ficou da melhor maneira possível, todo mundo estava ocupado e ninguém conseguiu tempo para me ajudar. No final eu também não quis atrapalhar ninguém. A alteração foi simples, eu troquei o if que verificava a flag de ativo por um if que verifica se a data de alteração é menor que 90 dias atrás. Com isto resolveu o problema e tudo deu certo, espero que não aconteça nenhum efeito colateral. */ Depois das discussões anteriores, nem precisamos falar nada sobre isto...
  • 123. Plataforma .Net – Comentários,não assim Conexões nada óbvias: /* * começa com um array grande o bastante para conter todos os pixels ( mais * os bytes de filtragem) e 200 bytes extras para informações no cabeçalho. */ this.pngBytes = new byte[((this.width + 1) * this.height * 3) + 200] • O que é um byte de filtragem? • Ele tem a ver com o “+1” ou com o “*3” ou ambos? • Um pixel é um byte? Porque 200? “O objetivo de um comentário é explicar o que o código não consegue por si só. É uma lástima quando um comentário também precisa ser explicado.”
  • 124. Plataforma .Net – Comentários, assim Certos comentários são necessários ou benéficos. Veremos alguns que valem a pena utilizar QUANDO NECESSÁRIO.
  • 125. Plataforma .Net – Comentários, assim Comentários Legais: Muitas vezes, dentro do desenvolvimento corporativo é necessário colocar comentários com informações sobre direitos autorais simplesmente por questões legais. Só não vale colocar todo o arquivo de licença no código fonte. Se necessário referencie o arquivo onde se encontra todas as informações de licença: /* Direitos autorais © 2010,2011,2012 por Empresa XXXX. Todos os direitos * reservados. * Distribuído sob os termos da versão 2 ou posterior da Licença Pública Geral * da GNU */
  • 126. Plataforma .Net – Comentários, assim Comentários informativos: Quando criamos um método, podemos descrever algumas informações sobre ele e facilitar quem for utilizar aquele método através das 3 barras (///). Veja:
  • 127. Plataforma .Net – Comentários, assim Comentários de atividades pendêntes (TODO): • Muitas vezes estamos lendo um código e encontramos algo que deveria ser melhorado mas não temos tempo de fazer isto no momento, ou até mesmo estamos trabalhando em um método que precisa ser melhorado mas por algum motivo não podemos fazer no momento. • Para não esquecer, criamos o comentário TODO, assim podemos gerar uma lista de todos os locais que possuem um TODO e corrigi-los ou melhorá-los quando o tempo permitir. Escrever comentário // TODO: o que você quer Visualizar comentário: • Menu View – Task List • Selecione a opção “Comments”
  • 128. Plataforma .Net – Comentários, assim Explicação de intenção: usada para identificar “Jabutis” • As vezes, por motivos de compatibilidade com código legado ou clientes temos que manter um código de uma determinada forma até uma próxima versão, conseguir autorização de alguém que permita alteração de impacto ou até mesmo eternamente. • Quando isto ocorrer comente a intenção e explique resumidamente o que aconteceu para caso outra pessoa tente alterar não crie novos problemas. • Podemos concordar que o melhor seria refatorar, mas no mundo real nem sempre conseguimos fazer isto sempre que queremos... // Essa é a melhor tentativa de conseguir uma condição de repetição sem // problema com threads executando a mesma instância da classe XXX. Por // isto fazemos new ao invés de usar uma instância estática.
  • 129. Plataforma .Net – Exercícios
  • 130. Framework .Net: Aula 5–Segunda-feira
  • 131. Agenda • Fundamentações do .Net Framework – Tipos Nullable – Navegando pelo sistema de arquivos • Feedback da semana • Exercícios dirigidos
  • 132. Plataforma .Net – Tipos Nullable • Vimos que tipos por valor não suportam salvar valores nulos. • Em alguns casos, necessitamos salvar um tipo por valor nulo, como “Temperatura não definida”. Temperatura é um número inteiro e não pode ser zero, pois zero é uma temperatura válida. • Para nos ajudar existe um tipo chamado Nullable. Este tipo permite estender os tipos primitivos (tipos bases do .Net Framework) e possibilitar ter valores por tipo aceitando nulo. • Utilização: Nullable<int> temperatura = null; temperatura = 10; temperatura = null; temperatura = 50;
  • 133. Plataforma .Net – Sistemas de arquivos • Dentro do namespace System.IO existem um conjunto de classes usadas para navegar e manipular arquivos, diretórios e discos. • As classes são separadas em 2 tipos: – Informativas (Herdam de FileSystemInfo) • FileInfo • DirecoryInfo • DriveInfo – Utilitárias • File • Directory • Path
  • 134. Plataforma .Net – FileSystemInfo • Fornece informações sobre o sistema de arquivos: – Principais propriedades • CreationTime: Data de criação do arquivo ou diretório que foi criado. • Exists: Determina se o arquivo ou diretório existe. • FullName: Caminho completo, com nome, do arquivo ou diretório. • Extension: Mostra a extensão do arquivo . • Name: Nome do arquivo ou diretório. – Principais métodos • Delete: Remove arquivo ou diretório do sistema de arquivos. • Refresh: Atualiza os dados referente a informações do sistema de arquivos.
  • 135. Plataforma .Net – FileInfo Pegando informações de arquivos FileInfo file = new FileInfo(@"c:arquivo.txt "); if (file.Exists) { MessageBox.Show("Filename : " + file.Name); MessageBox.Show("Path : " + file.FullName); } Simples assim...
  • 136. Plataforma .Net – FileInfo Como copiar um arquivo... FileInfo file = new FileInfo(@"c:arquivo.txt "); if (file.Exists) { file.CopyTo(@"c:arquivo.csv"); } Simples assim...
  • 137. Plataforma .Net – DirectoryInfo Pegando informações de diretórios DirectoryInfo directory = new DirectoryInfo(@"c:temp"); MessageBox.Show("Directory: " + directory.FullName); foreach (FileInfo file in directory.GetFiles()) { MessageBox.Show("File: " + file.Name); } Simples assim...
  • 138. Plataforma .Net – DriveInfo Pegando informações de discos DriveInfo unidade= new DriveInfo(@"c:"); MessageBox.Show(drive.Name); Simples assim...
  • 140. Plataforma .Net – Exercícios
  • 141. Framework .Net: Aula 1 - Terça-feira
  • 142. Agenda • Discussões sobre o curso • Gerenciador de fontes GitHub • Exercícios dirigidos
  • 143. Plataforma .Net – Gerenciador de fontes • É uma aplicação com a responsabilidade de armazenar e gerenciar fontes desenvolvidos em diversas linguagens. • Vantagens: – Histórico de tudo que foi desenvolvido; – Desenvolvimento por mais de um desenvolvedor simultaneamente; – Controle de versão; • Existem duas grandes linhas de gerenciadores de fontes: – Distribuídos • Cada computador é um repositório/servidor de fontes. • Exemplos: Git, Mercurial e Bazaar – Centralizados • Existe um servidor com todos os fontes e os computadores são apenas clientes do servidor. • Exemplo: Microsoft Team Foundation Server e SubVersion
  • 144. Plataforma .Net – Conceito de Commit • Um commit é um agrupador de alterações relacionada a um usuário; • Exemplos: – Commit 1: Criação da classe calculadora e suas funções. [João] • Lista de arquivos: – Calculadora.cs – CalculadoraTest.cs – Commit 2: Criação da classe pessoa e suas funções. [Pedro] • Lista de arquivos: – Pessoa.cs – PessoaTest.cs – Commit 3: Efetuada tela da calculadora. [Carlos] • Lista de arquivos: – FrmCalculadora.cs – Commit 4: Correção do método somar da calculadora. [Pedro] • Lista de arquivos: – Calculadora.cs – CalculadoraTest.cs
  • 145. Plataforma .Net – Gerenciador de fontes Arquitetura básica de um gerenciador Centralizado: Servidor (Repositório) Desenvolvedor 2 Desenvolvedor 1 Desenvolvedor 3
  • 146. Plataforma .Net – Gerenciador de fontes Operações básicas de um gerenciador Centralizado: Servidor Servidor (Repositório) (Repositório) Download e/ou Trava Upload de todos os arquivos somente para arquivos alterados ele alterar (commit) Desenvolvedor Fonte Modifica ou cria arquivos
  • 147. Plataforma .Net – Commit centralizado • O commit é efetuado quando vamos enviar os arquivos ao servidor. Todos os arquivos alterados são agrupados em um mesmo commit. Dependendo do caso podemos ter um commit com mais de uma dezena de arquivos. • Exemplo: – Commit 1: Criação da classe calculadora e suas funções. Criação da classe pessoa e suas funções. Efetuada tela da calculadora. Correção do método somar da calculador. [João] • Lista de arquivos: – Calculadora.cs – CalculadoraTest.cs – Pessoa.cs – PessoaTest.cs – FrmCalculadora.cs
  • 148. Plataforma .Net – Gerenciador de fontes Arquitetura básica de um gerenciador Distribuido: Servidor (Histório/Backup) Desenvolvedor Desenvolvedor (Repositório) (Repositório) Desenvolvedor (Repositório)
  • 149. Plataforma .Net – Gerenciador de fontes Operações básicas de um gerenciador Distribuido: Servidor Servidor (Repositório) Refaz o ciclo para cada conjunto de alterações. Download Upload Desenvolvedor Salva Desenvolvedor Fonte Modifica ou alterações cria arquivos (commit)
  • 150. Plataforma .Net – Commit distribuido • O commit é efetuado no momento que finalizamos a alteração de uma alteração. Não enviamos um conjunto de arquivos para o servidor e sim um conjunto de commits. Quando menos arquivos em um commit melhor. • Exemplos: – Commit 1: Criação da classe calculadora e suas funções. [João] • Lista de arquivos: – Calculadora.cs – CalculadoraTest.cs – Commit 2: Criação da classe pessoa e suas funções. [João] • Lista de arquivos: – Pessoa.cs – PessoaTest.cs – Commit 3: Efetuada tela da calculadora. [João] • Lista de arquivos: – FrmCalculadora.cs – Commit 4: Correção do método somar da calculadora. [João] • Lista de arquivos: – Calculadora.cs – CalculadoraTest.cs
  • 151. Plataforma .Net – Git • É um sistema de controle de versão distribuido, criado inicialmente por Linus Torvalds, para o desenvolvimento do Kernel do Linux. • É fornecido como software Livre. • Disponível para: – Windows; – Linux; – Mac OS X;
  • 152. Plataforma .Net – Quem usa Git?
  • 153. Plataforma .Net – Hospedagens Git
  • 154. Plataforma .Net – Github • É um serviço de hospedagem para o sistema de controle de versão Git. • É escrito em Ruby on Rails e possui planos comerciais gratuitos para repositórios públicos e planos pagos para repositórios privados. • Possui conceito de rede social, estimulando “social coding” ou compartilhamento de códigos entre os integrantes. • Disponível para: – Windows; – Linux; – Mac OS X;
  • 155. Plataforma .Net – Ambiente Git • Utilizem a versão convencional para este curso, não “for Windows”, baixada em: http://git-scm.com/downloads; • Efetue a instalação; • Inicie o Git Gui e clique No menu Ajuda – Mostrar chave SSH;
  • 156. Plataforma .Net – Ambiente Git • Utilizem a versão convencional para este curso, não “for Windows”, baixada em: http://git-scm.com/downloads; • Efetue a instalação; • Inicie o Git Gui e clique No menu Ajuda – Mostrar chave SSH; • Clique no botão gerar chave; • Após isto clique no botão “Copiar para área de transferência.
  • 157. Plataforma .Net – Ambiente Git • Abra www.github.com e efetue login; • Clique em Account Settings; • Clique no menu SSH Keys; • Clique no botão “Add SSH Keys”; • Digite um título para a chave (nome do seu computador) e cole o que está na sua área de Transferência com o “Ctrl + V”. • Clique no botão “Add Key”;
  • 158. Plataforma .Net – Utilização Git • Passo 1: Commit – Execute o Git Gui e abra seu repositório local; – Clique no botão “Atualizar” para ver os arquivos que foram alterados; – Selecione os arquivos clicando no ícone dos mesmos; – Digite uma descrição e clique no botão “Salvar revisão”; • Passo 2: Baixar “novidades” do servidor – Clique no menu Remoto – Receber de – Origem; – Assim que finalizado clique em Fechar; – Clique no menu Mesclar – Mesclar localmente; – Se tiver algo na caixa de mesclagem, clique em Mesclar; • Passo 3: Enviar minhas alterações – Na tela do Git Gui Clique no botão Enviar; – Clique no botão “Enviar”;
  • 159. Framework .Net: Aula 7 - Quarta-feira
  • 160. Agenda • Usando GitHub • Fundamentações do .Net Framework – Manipulando sistema de arquivos • Exercícios dirigidos
  • 161. Plataforma .Net – Path • Combinando diretórios Path.Combine("diretorio1", "diretorio2") Resultado: diretorio1diretorio2 • Renomeando extensão Path.ChangeExtension(@"c:temparquivo.txt", "csv"); Resultado: arquivo.txt renomeado para arquivo.csv
  • 162. Plataforma .Net – Lendo arquivos Lendo arquivos... FileStream file; StreamReader reader; try { file = File.Open(@"C:arquivo.txt", FileMode.Open, FileAccess.Read); reader = new StreamReader(file); MessageBox.Show(reader.ReadToEnd()); } finally { reader.Close(); file.Close(); } Vamos melhorar este código.
  • 163. Plataforma .Net – Lendo arquivos Lendo arquivos... using (FileStream file = File.Open(@"C:arquivo.txt", FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(file)) { MessageBox.Show(reader.ReadToEnd()); } } Ou podemos simplificar para: File.ReadAllText(@"C:somefile.txt")
  • 164. Plataforma .Net – Lendo arquivos Lendo arquivos... using (FileStream file = File.Open(@"C:arquivo.txt", FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(file)) { while (!reader.EndOfStream) { MessageBox.Show(reader.ReadLine()); } } } Agora lendo linha a linha.
  • 165. Plataforma .Net – Escrevendo arquivos Escrevendo arquivos... using (FileStream file = File.Create(@"C:arquivo.txt”)) { using (StreamWriter writer = new StreamWriter(file)) { writer.WriteLine(“Oi”); } } Ou podemos simplificar para: File.WriteAllText(@"c:somefile.txt", “Oi");
  • 166. Plataforma .Net – Diretórios Criando diretórios... Directory.CreateDirectory(@"c:teste"); Apagando diretórios... Directory.Delete(@"c:teste"); Verificando existência de diretório... Directory.Exists(@"c:teste“);
  • 167. Framework .Net: Aula 8 – Quinta-feira
  • 168. Agenda • Manipulação de Strings – Concatenação – StringBuilder – StringFormat • Exercícios dirigidos
  • 169. Plataforma .Net – Textos • Processamento de texto é uma das tarefas mais comuns no desenvolvimento de software, as vezes necessitamos fazer pesquisas, concatenações, formatações, enfim manipular textos em geral. • Existem algumas formas de concatenar Strings, uma para cada tipo de situação, vamos conhecer e saber quando aplicar qual obtendo maior desempenho em nossos códigos. • Para extração de dados de textos o mais comum é a utilização de expressões regulares. Estas estão presentes em diversas linguagens e ferramentas sempre que falamos em formatação de textos. Desde uma validação de e- mail até buscas avançadas dentro de longos arquivos de textos.
  • 170. Plataforma .Net – Concatenação • Concatenação de Strings é muito comum no dia-a-dia e quanto maior é a String para concatenar maior é o cuidado que temos que ter com o desempenho. • É muito comum desenvolvedores não se preocuparem com o desempenho e fazer todos os tipos de concatenação da mesma forma. • Ponto de partida: a String é um tipo por referência especial, ela é imutável. O conteúdo de uma string não pode ser alterado depois que o objeto é criado, embora a sintaxe possa fazer parecer isto.
  • 171. Plataforma .Net – Concatenação • Concatenar é unir duas cadeias de caracteres (strings) em uma. – Objetivo: “palavra1” concatenada com “ - palavra2”; – Resultado: “palavra1 – palavra2”; – Resumo: Fizemos apenas uma concatenação. • A concatenação é uma operação binária, quando fazemos uma concatenação de 3 strings estamos, na verdade, fazendo duas concatenações. – Objetivo: “palavra1” concatenada com “ - palavra2” concatenada com “ – palavra3”; – Operação: “palavra1 – palavra2” concatenada com “ – palavra3”; – Resultado: “palavra1 – palavra2 – palavra3”; – Resumo: Fizemos duas concatenações. • Quando concatenamos um conjunto grande de strings, estamos construindo uma string. • Quando definimos um padrão para a ordem que as strings são concatenadas, estamos formatando a string.
  • 172. Plataforma .Net – Operador “+” • O operador “+” é utilizado para concatenação. – Exemplo: string concatenacao = " palavra1 " + "palavra2"; • Quando um dos itens da concatenação é uma string, não necessita converter explicitamente o outro item. • Exemplo: string concatenacao = 1.ToString() + "palavra2"; (funciona, não precisa) string concatenacao = 1 + "palavra2"; (isto é o suficiente) • É o operador mais eficiente para concatenação, porém não é eficiente para construção de strings. Funciona muito bem para concatenação, mais de uma, na mesma instrução.
  • 173. Plataforma .Net – StringBuilder • O StringBuilder é utilizado para construção de Strings, ou seja, efetuar várias concatenações de forma a obter o máximo de desempenho. – Exemplo: string concatenacao = new StringBuilder().Append(1).Append("palavra2") .Append("palavra3").ToString(); • É o operador mais eficiente para construir Strings, não é indicado para pouquíssimas concatenação, quanto mais melhor. • Se souber qual será o tamanho mínimo da String final, então pode ser definido o número no construtor do StringBuilder aumentando ainda mais o desempenho. string concatenacao = new StringBuilder(17).Append(1).Append("palavra2") .Append("palavra3").ToString();
  • 174. Plataforma .Net – StringFormat • O StringFormat é utilizado para formatação de Strings, ou seja, definir um padrão para a ordem que as Strings serão concatenadas. – Exemplo: string concatenacao = string.Format("{0} {1} {2}", "1", "palavra2", "palavra3"); • É muito útil para definir de forma simples a formatação de uma string independente de seus valores. • Internamente utiliza StringBuilder para efetuar a construção da string. • Ajuda em alguns casos que queremos armazenar a “formatação” em outro local que não no código, como no banco de dados ou arquivo, por exemplo.
  • 175. Plataforma .Net – Demonstração • Vamos efetuar uma demonstração de desempenho identificando qual melhor operador para efetuar concatenação. • Esta demonstração pode ser alterada para identificar o melhor operador para construção de strings, ou seja, efetuar várias concatenações para uma mesma string. • O objetivo é simular a ocorrência de várias concatenações em uma grande aplicação. • O objetivo não é simular um grande número de concatenações, apenas a concatenação ocorrida diversas vezes. • Cuidados: – Deve estar atendo as diversas demonstrações em blogs na internet. Verifiquem sempre a experiência do profissional que está “blogando”. – Deve ser montado um ambiente o mais controlado possível, cuidando do gerenciamento de memória para cada operador.
  • 176. Plataforma .Net – Operador “+” //--# Força eliminação de todos os objetos não usados e retorna o total de memória usada long memoriaInicial = System.GC.GetTotalMemory(true); DateTime horaInicial = DateTime.Now; for (int iteracao = 0; iteracao < 90000; iteracao++) { string concatenacao = "Indice “ + iteracao + " palavra1 “ + "palavra2"; } DateTime horaFinal = DateTime.Now; //--# Retorna o total de memória usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
  • 177. Plataforma .Net – StringBuilder //--# Força eliminação de todos os objetos não usados e retorna o total de memória usada long memoriaInicial = System.GC.GetTotalMemory(true); DateTime horaInicial = DateTime.Now; for (int iteracao = 0; iteracao < 90000; iteracao++) { string concatenacao = new StringBuilder().Append("Indice ") .Append(iteracao).Append(" palavra1 ").Append("palavra2").ToString(); } DateTime horaFinal = DateTime.Now; //--# Retorna o total de memória usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
  • 178. Plataforma .Net – StringFormat //--# Força eliminação de todos os objetos não usados e retorna o total de memória usada long memoriaInicial = System.GC.GetTotalMemory(true); DateTime horaInicial = DateTime.Now; for (int iteracao = 0; iteracao < 90000; iteracao++) { string concatenacao = string.Format("{0} {1} {2} {3}", "Indice", iteracao, "palavra1", "palavra2"); } DateTime horaFinal = DateTime.Now; //--# Retorna o total de memória usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
  • 179. Plataforma .Net – Resultados Operador Memória utilizada Tempo decorrido + (mais) 606744 14ms StringBuilder 3048628 23ms StringFormat 1720620 27ms Vamos definir o tamanho do baffer inicial para o StringBuilder e tentar aumentar o desempenho.
  • 180. Plataforma .Net – StringBuilder //--# Força eliminação de todos os objetos não usados e retorna o total de memória usada long memoriaInicial = System.GC.GetTotalMemory(true); DateTime horaInicial = DateTime.Now; for (int iteracao = 0; iteracao < 90000; iteracao++) { string concatenacao = new StringBuilder(30).Append("Indice ") .Append(iteracao).Append(" palavra1 ").Append("palavra2").ToString(); } DateTime horaFinal = DateTime.Now; //--# Retorna o total de memória usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
  • 181. Plataforma .Net – Resultados Operador Memória Memória Tempo decorrido Tempo decorrido utilizada antiga utilizada antigo + (mais) 606744 606744 15ms 15ms StringBuilder 3048628 2229004 23ms 18ms StringFormat 1720620 1720620 27ms 28ms Vamos alterar agora para utilizar o operação “+” para concatenação em várias linhas e fazer uma tabela final para verificar quem é efetivamente mais rápido.
  • 182. Plataforma .Net – Operador “+” //--# Força eliminação de todos os objetos não usados e retorna o total de memória usada long memoriaInicial = System.GC.GetTotalMemory(true); DateTime horaInicial = DateTime.Now; for (int iteracao = 0; iteracao < 90000; iteracao++) { string concatenacao = "Indice “; concatenacao = concatenacao + iteracao; concatenacao = concatenacao +" palavra1 “; concatenacao = concatenacao + "palavra2"; } DateTime horaFinal = DateTime.Now; //--# Retorna o total de memória usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memória e demorou " + tempoDecorido.Milliseconds + “ms");
  • 183. Plataforma .Net – Conclusão • Operador + é o melhor para concatenação, em uma mesma linha, devido a otimização. • StringBuilder é o melhor quando precisa construir strings. Nem pense em fazer concatenação em várias linhas. O StringBuilder ocupa mais memória mas é mais rápido. • StringFormat é o melhor para formatar Strings. • O importante é usar cada operador para seu respectivo objetivo.
  • 184. Plataforma .Net – Conclusão • Vai concatenar várias strings em uma mesma linha? Use o operador “+”. String concatenacao = “palavra1” + “palavra2”; • Vai concatenar várias strings em várias linhas? Não use o operador “+”: String concatenacao = “palavra1”; concatenacao = concatenacao + “palavra2”; • Vai concatenar várias strings em várias linhas? Use o StringBuilder: String concatenacao = new StringBuilder().Append(“palavra1”).Append(“palavra2”).ToString(); • Quer formatar uma string? Use o string.format String concatenacao = string.format(“{0} {1}”, “palavra1”, “palavra2”);
  • 185. Framework .Net: Aula 10 – Segunda-feira
  • 186. Agenda • Expressões regulares: introdução – O que são – Como criá-las e manipulá-las – Como utilizar expressões regulares em C# • Revisão e dúvidas • Exercícios dirigidos
  • 187. Plataforma .Net – Expressões regulares Introdução Definição Origem Aplicações Metacaracteres – Representantes – Quantificadores – Âncoras Let´s code Debate e esclarecimentos
  • 188. Plataforma .Net – Expressões regulares Quantos de nós já necessitaram fazer manipulação ou pesquisas em textos? Quantos perderam horas com ifs e fors tentando procurar palavras baseadas em um determinado padrão? As expressões regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rápida e precisa. Infelizmente não existe um vasto material sobre este assunto em português. A maioria não é muito didática na hora de explicar os conceitos e aplicar na prática. Isto faz com que poucos desenvolvedores dominem este poderoso assunto que bem aplicado economiza horas de desenvolvimento.
  • 189. Plataforma .Net – Expressões regulares Um dos melhores materiais, didáticos, em português (se não o melhor) sobre este assunto é o livro em que a maior parte teórica, sobre expressões regulares, desta apresentação está embasada: Expressões regulares – Uma abordagem divertida de Aurélio Marinho Jargas. A maioria do material sobre expressões regulares em português encontrado na internet é baseado no livro dele. Esta apresentação irá introduzi-lo neste assunto, fazendo expressões como *[A-Za-z0- 9_]+:(.*)..$ se tornarem compreensivas e não lhe causar pânico. Em toda apresentação, o que estiver entre aspas duplas foi copiado na integra do livro “CURIOSIDADE: apesar de esse assunto ser antigo, o que vamos ver aqui basicamente é o mesmo que um estudante veria há 15 anos atrás. É um conceito consistente, que não sofre alterações com o passar do tempo.”
  • 190. Plataforma .Net – ER: Definição “Uma expressão regular é um método formal de se especificar um padrão de texto.” De forma simplificada, uma regular expression, termo original, é uma composição de símbolos e caracteres literais com funções definidas que quando agrupadas em sequência formam uma expressão. Essa, por sua vez, é interpretada, por um programa, como uma regra que resultará em sucesso caso uma entrada de dados atenda suas condições. Também podemos afirmar que é: • “uma maneira de procurar um texto que você não lembra exatamente como é, mas tem ideia das variações possíveis; • uma maneira de procurar um trecho em posições específicas como no começo ou no fim de uma linha, ou palavra; • uma maneira de um programador especificar padrões complexos que podem ser procurados e casados em uma cadeia de caracteres”;
  • 191. Plataforma .Net – ER: Origem Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios Em 1968 foi para o computador em um algoritmo de busca para um editor chamado qed O qed virou ed (Editor Unix) que devido a seu comando de executar expressões regulares originou o famoso grep que por sua vez originou o egrep.
  • 192. Plataforma .Net – ER: Aplicações “Basicamente servem para você dizer algo abrangente de forma específica. Definido seu padrão de busca, você tem uma lista (finita ou não) de possibilidades de casamento. Em um exemplo rápido, [rgp]ato pode casar rato, gato e pato. Ou seja, sua lista "abrange especificamente" essas três palavras, nada mais.” Sempre que precisar efetuar buscas ou validações em textos, as expressões regulares funcionam muito bem. Alguns exemplos de buscas por padrões, em textos, são: • data • horário • número IP • endereço de e-mail • endereço de Internet • dados na coluna N de um texto • dados que estão entre <tags></tags> • campos específicos de um texto tabulado • número de telefone, RG, CPF, cartão de crédito
  • 193. Plataforma .Net – ER: Metacaracteres São símbolos com funções específicas utilizados para montar as expressões regulares. Existem vários tipos de metacaracteres, os básicos serão estudados nesta apresentação: – Representes: representam um ou mais caracteres – Quantificadores: indicam o número de repetições permitidas para o caractere anterior – Âncoras: marcam uma posição específica na linha
  • 194. Plataforma .Net – ER: Representante Ponto: o necessitado . “O ponto é nosso curinga solitário, que está sempre à procura de um casamento, não importa com quem seja. Pode ser um número, uma letra, um TAB, um @, o que vier ele traça, pois o ponto casa qualquer coisa.” Lembre-se: o ponto aceita qualquer caractere.
  • 195. Plataforma .Net – ER: Representante Lista: a exigente [...] “Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo... Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o
  • 196. Plataforma .Net – ER: Representante Lista: a exigente [...] “Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo... Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o O ponto não aceita qualquer coisa? Dentro da lista, todos os caracteres são normais
  • 197. Plataforma .Net – ER: Representante Lista: a exigente [...] “Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo... Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o O ponto não aceita qualquer coisa? Dentro da lista, todos os caracteres são normais, exceto o traço.
  • 198. Plataforma .Net – ER: Representante Lista: a exigente [...] O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9] Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ... “Os intervalos respeitama ordem numérica da tabela ASCII” Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres? O traço colocamos no final da lista sozinho; O colchete de abertura ( [ ) pode colocar em qualquer lugar; O colchete de fechamento ( ] ) deve ser colocado no começo da lista; Exemplo: [ ][ - ]
  • 199. Plataforma .Net – ER: Representante Lista: a exigente [...] O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9] Estes intervalos podem ser usados para letras também: a-z,a-z não entram ... Peraí! Na tabela ASCII A-Z, 5-9, a-f, :-@, as palavras acentuadas, e agora? “Os intervalos respeitama ordem numérica da tabela ASCII” Dá para resolver isto com alguns Como colocar o traço e os colchetes curingas, mas... dentro da lista se eles são ...Vamos conhecer as metacaracteres? classes de caracteres POSIX O traço colocamos no final da lista sozinho; O colchete de abertura ( [ ) pode colocar em qualquer lugar; O colchete de fechamento ( ] ) deve ser colocado no começo da lista; Exemplo: [ ][ - ]
  • 200. Plataforma .Net – ER: Representante Lista: a exigente [...] Os colchetes fazem parte da classe POSIX. Uma classe dentro de uma lista ficaria assim: [[:upper:]] IMPORTANTE: As classes POSIX levam em consideração a localidade.
  • 201. Plataforma .Net – ER: Representante Lista negada: a experiente [^...] “Não tão exigente quanto a lista nem tão necessitada quanto o ponto, temos a lista negada, que pelas suas más experiências passadas, sabe o que não serve para ela casar.” A lista negada é igual a lista comum, a única diferença é que ela aceitará todos os caracteres que NÃO tiverem dentro da lista. Ex: l[^aeioAEIO]a – lua, l1a, lpa... Importante: A lista negada não casa com espaço vazio. No exemplo acima ela NÃO aceitaria “l a” (l espaço a). Como colocar o ^ dentro da lista se ele também é um metacaracter? Deve ser colocado no final. Ex: [^a-z123^]
  • 202. Plataforma .Net – ER: Quantificador Opcional: o opcional ? “O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou não a ocorrência da entidade anterior, pois ele a repete 0 ou 1 vez.” Já estamos aceitando algo abrangente de forma específica. Lembra do slide “Aplicações”?
  • 203. Plataforma .Net – ER: Quantificador Asterisco: o tanto faz * “Se o opcional já não esquenta a cabeça, podendo ter ou não a entidade anterior, o asterisco é mais tranqüilo ainda, pois para ele pode ter, não ter, ou ter vários, infinitos. Em outras palavras, a entidade anterior pode aparecer em qualquer quantidade.” Um curinga na manga Vimos o metacaractere . (ponto) que aceita qualquer caractere. Agora vimos o metacaractere * (asterisco) que aceita em qualquer quantidade. Olhe e pense na seguinte expressão: .*
  • 204. Plataforma .Net – ER: Quantificador Mais: o tem-que-ter + “A única diferença [do mais e do asterisco] é que o mais não é opcional, então a entidade anterior deve casar pelo menos uma vez, e pode ter várias.” Simples, não?!
  • 205. Plataforma .Net – ER: Quantificador Chaves: o controle {m,m} “Aqui Chaves não é o au?tor mexicano preferido de 10 entre 10 brasileiros. As chaves são a solução para uma quantificação mais controlada, onde se pode especificar exatamente quantas repetições se quer da entidade anterior.” EX: a{1,2} – a, aa b{0,2}a – a, ba, bba
  • 206. Plataforma .Net – ER: Âncora Circunflexo: o início ^ “O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nada mais.” Dentro da lista (e no início) o ^ tem o objetivo de negar seu conteúdo. Fora da lista ele serve para marcar que a palavra deve ser encontrada exatamente no início da linha. EX: ^[a-zA-Z]. Este metacaractere só é especial se tiver no começo da expressão regular. Se eu quiser procurar uma palavra que começe com ^ poderia fazer assim: ^^
  • 207. Plataforma .Net – Testando memória Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-los antes de prosseguir. Escreva uma expressão regular que: 1. Reconheça a palavra carro minúscula, no plural, singular e em qualquer parte de um texto. 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto. 3. Reconheça um número de IP, que aceite 999.999.999.999 Dica: O metacaracter “” torna outro metacaractere literal. OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma simples o entendimento da aplicação de expressões regulares e os operadores aprendidos nesta parte.
  • 208. Plataforma .Net – Testando memória Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve- los antes de prosseguir. Escreva uma expressão regular que: 1. Reconheça a palavra carro minúscula, no plural, singular e em qualquer parte de um texto. carros? 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto. [cC][aA][sS][aA] 3. Reconheça um número de IP, que aceite 999.999.999.999 Dica: O metacaracter “” torna outro metacaractere literal. OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma simples o entendimento da aplicação de expressões regulares e os operadores aprendidos nesta parte. [0-9][0-9]0-9].[0-9][0-9]0-9].[0-9][0-9]0-9].[0-9][0-9]0-9]
  • 209. Plataforma .Net – ER em C# using System.Text.RegularExpressions; string texto= “Conteúdo a ser lido"; Regex regex = new Regex(“expressao_regular"); if (regex.IsMatch(texto)) // Encontrou else // Não encontrou No site existe um exemplo para download codificando o trecho de código acima.
  • 210. Plataforma .Net – Exercícios
  • 211. Framework .Net: Aula 11 - Terça-feira
  • 212. Agenda • Fundamentações do .Net Framework – Introdução a coleções – Introdução a expressões lambdas aplicado a coleções • Exercícios dirigidos • Revisão da semana e feedback
  • 213. Plataforma .Net – Vetores • Vetor ou array é uma estrutura de dados estáticas, ou seja, é criada com um número determinado de itens. • Quando criamos um vetor de 100 posições, por exemplo, é alocado em memória os 100 espaços que será utilizados. • O tempo de acesso a um vetor é bem rápido, porém ao redefinir o tamanho de um vetor temos uma considerável perda de desempenho, pois é necessário realocar dentro da memória o novo tamanho do vetor. • É recomendado o uso de vetores para itens que não mudarão ao longo da utilização da aplicação. String[] colecao = new String [10]; // Array de Strings
  • 214. Plataforma .Net – Listas • Listas é uma estrutura de dados dinâmicas, ou seja, é criada sem saber o número total de itens. • Quando criamos uma lista e adicionamos um valor (uma posição), por exemplo, é alocado em memória apenas 1 espaço que é justamente o que foi utilizado. • O tempo de acesso a uma lista é um pouco maior que um array, porém ao redefinir o tamanho, ou seja adicionar novos itens, não ocorre perda de desempenho, pois não é necessário realocar a lista na memória e sim apenas criar um novo item. • As listas genéricas podem ser usadas com qualquer tipo de dado sem problema de boxing e unboxing, permitem uma leitura mais legível e disponibiliza recursos que o array não tem. Vamos conhecer mais... List<String> colecao = new List<String>(); // Lista de Strings