Professional Documents
Culture Documents
Agenda geral
Introduo a plataforma .Net Primeiros princpios de cdigo limpo Fundamentaes do .Net Framework
Tipos por valor e referncia Manipulando sistemas de arquivos Manipulando Strings Expresses regulares Colees e princpios de lambda
Livro Programando com C# e Visual Studio 2005; Livro 100% prtico; Desde declarao de variveis at criao de telas WindowsForm.
Agenda
Plataforma .Net
Histrico Arquitetura Vantagens Aplicaes Projeto Mono Curiosidades
Reviso geral
Visual Studio: Criao de projetos / dependncias Linguagem C#: Estrutura de deciso / Estrutura de repetio / Variveis, constantes e enumeradores/ Funes, vetores e matrizes
Coding Dojo Apresentao feita para Udesc Princpios de desenvolvimento orientado a testes Prtica de Coding Dojo
1.1
2.0 3.0 3.5
24 de abril de 2003
07 de novembro de 2005 06 de novembro de 2006 19 de novembro de 2007
Server 2003
Server 2003 R2 Vista, Server 2008 7, Server 2008 R2
Common Type System (CTS) Visual Studio .NET ASP .NET: Web Services e Web Forms ADO .NET: Data e XML
Windows Forms
Assembly - Cdigo IL
Cosmos C#
um sistema operacional open source desenvolvido em C# convertendo as instrues IL para instrues 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/
http://dojopuzzles.com/problemas
usando
Agenda
Cdigo limpo
Discusses sobre cdigo limpo O que um cdigo limpo?
Exerccios dirigidos
David A. Thomas, fundador da Object Technology International (IBM OTI Labs), responsvel pelo incio do desenvolvimento do Eclipse IDE.
A um bom tempo atrs tnhamos algumas caractersticas nas linguagens que no temos hoje:
Verses anteriores do Basic s permitiam uma letra mais um dgito; O Fortran forava codificaes ao tornar a primeira letra uma indicao para o tipo; No ter variveis tipadas.
Nas linguagens atuais, neste curso tratamos de C#, os objetos j so o prprio tipo e o ambiente detecta a utilizao inadequada de um tipo, como colocar uma string dentro de um inteiro. Resumo: Notao Hngara vai dificultar a nomenclatura e podem at induzir ao erro se mal colocado. Evitem ao mximo e se possvel nunca usem.
CamelCase:
apenasAPrimeiraPalavraIniciaComLetraMinuscula Parmetros, Fields privados, Variveis.
Exerccios dirigidos
Porque? Pelo simples fato de ao armazenar o valor 1 na varivel valor1 e armazenar valor1 na varivel valor2, o valor COPIADO para a varivel valor2 e ambos esto separados dentro da memria stack.
System.Byte
System.Int16 System.Int32 System.UInt32
Byte/byte
Short/short Integer/int UInteger/uint
1
2 4 4
0 at 255
32768 at 32767
System.Int64
Long/long
92372036854775808 at 9223372036854775807 23
Nmeros grandes
Utilizao
Single/float
Bytes
4
Faixa
3.402823E+38 at 3.402823E+38 1.79769313486232E+30 8 to 1.79769313486232E+30 8 79228162514264337593 54 3950335 to 79228162514264337593 5439 50335
Usado para
Nmeros decimais (pontos flutuantes) Grandes nmeros decimais
System.Double
Double/double
System.Decimal
Decimal/decimal
16
System.Boolean
Boolean/bool
No tem
System.IntPtr
No tem
Depende da plataforma 8
No tem
System.DateTime
Date/date
Pessoa;
Aes: andar, correr, comer, falar, ouvir, danar... Propriedades: altura, peso, forma, cor do cabelo...
Cadeira;
Aes: ... Propriedades: Quantidade de pernas, tipo de acento, tamanho...
Martelo;
Aes: Bater, arrancar prego... (quem bate? Quem arranca?) Propriedades: Comprimento, peso da cabea do martelo...
Pudim;
Aes: estragar... Propriedades: cor, tamanho, formato...
Objeto: pudim
Agenda
Fundamentaes do .Net Framework
Valores por referncia Convertendo entre tipos
Um processo chamado Garbage Collector automatiza o gerenciamento de memria, fazendo o trabalho sujo de eliminar os tipos que no so mais referenciados por ningum e liberando memria.
Porque? Pelo simples fato de ao armazenar o valor oi na varivel valor1 e armazenar valor1 na varivel valor2, o valor REFERENCIADO para a varivel valor2 e no COPIADO e o valor mesmo est na memria HEAP.
Usado para
Valor texto. Com a ressalva que para o .Net Framework o valor de uma String imutvel. Veremos com mais detalhes isto quando trabalharmos com StringBuilder.
System.Text.StringBuilder
System.Array System.Exception
...
...
Porque? Pelo simples fato de ao armazenar o valor oi na varivel valor1 e armazenar valor1 na varivel valor2, o valor REFERENCIADO para a varivel valor2 e no COPIADO e o valor mesmo est na memria HEAP.
Heap
123
123
Evite a utilizao de cast. Ele caro computacionalmente. Apenas use quando for realmente necessrio. Sempre procure mtodos de converso como por exemplo:
int inteiro = 123; // Tipo por valor object objeto = inteiro; // Causa boxing int novoInteiro = Convert.ToInt32(objeto);
No insira comentrios num cdigo ruim, reescreva-o. Brian W. Kernighan (PhD em Cincia da Cmputao...) e P.J. Plaugher (Autor e empresrio...)
Agenda
Fundamentaes do .Net Framework
Tipos Nullable Navegando pelo sistema de arquivos
Plataforma .Net
Agenda
Discusses sobre o curso Gerenciador de fontes GitHub Exerccios dirigidos
Vantagens:
Histrico de tudo que foi desenvolvido; Desenvolvimento por mais de um desenvolvedor simultaneamente; Controle de verso;
Existem duas grandes linhas de gerenciadores de fontes: Distribudos Cada computador um repositrio/servidor de fontes. Exemplos: Git, Mercurial e Bazaar Centralizados Existe um servidor com todos os fontes e os computadores so apenas clientes do servidor. Exemplo: Microsoft Team Foundation Server e SubVersion
Fonte
Desenvolvedor (Repositrio)
Desenvolvedor (Repositrio)
Desenvolvedor (Repositrio)
Servidor
Download
Fonte
Desenvolvedor
Exemplos: Commit 1: Criao da classe calculadora e suas funes. [Joo] Lista de arquivos: Calculadora.cs CalculadoraTest.cs Commit 2: Criao da classe pessoa e suas funes. [Joo] Lista de arquivos: Pessoa.cs PessoaTest.cs Commit 3: Efetuada tela da calculadora. [Joo] Lista de arquivos: FrmCalculadora.cs Commit 4: Correo do mtodo somar da calculadora. [Joo] Lista de arquivos: Calculadora.cs CalculadoraTest.cs
Disponvel para:
Windows; Linux; Mac OS X;
escrito em Ruby on Rails e possui planos comerciais gratuitos para repositrios pblicos e planos pagos para repositrios privados. Possui conceito de rede social, estimulando social coding ou compartilhamento de cdigos entre os integrantes.
Disponvel para:
Windows; Linux; Mac OS X;
Agenda
Usando GitHub Fundamentaes do .Net Framework
Manipulando sistema de arquivos
Exerccios dirigidos
Agenda
Manipulao de Strings
Concatenao StringBuilder StringFormat
Exerccios dirigidos
Para extrao de dados de textos o mais comum a utilizao de expresses regulares. Estas esto presentes em diversas linguagens e ferramentas sempre que falamos em formatao de textos. Desde uma validao de email at buscas avanadas dentro de longos arquivos de textos.
A concatenao uma operao binria, quando fazemos uma concatenao de 3 strings estamos, na verdade, fazendo duas concatenaes.
Objetivo: palavra1 concatenada com - palavra2 concatenada com palavra3; Operao: palavra1 palavra2 concatenada com palavra3; Resultado: palavra1 palavra2 palavra3; Resumo: Fizemos duas concatenaes.
Quando concatenamos um conjunto grande de strings, estamos construindo uma string. Quando definimos um padro para a ordem que as strings so concatenadas, estamos formatando a string.
Vamos definir o tamanho do baffer inicial para o StringBuilder e tentar aumentar o desempenho.
Vamos alterar agora para utilizar o operao + para concatenao em vrias linhas e fazer uma tabela final para verificar quem efetivamente mais rpido.
Agenda
Expresses regulares: introduo
O que so Como cri-las e manipul-las Como utilizar expresses regulares em C#
As expresses regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rpida e precisa.
Infelizmente no existe um vasto material sobre este assunto em portugus. A maioria no muito didtica na hora de explicar os conceitos e aplicar na prtica. Isto faz com que poucos desenvolvedores dominem este poderoso assunto que bem aplicado economiza horas de desenvolvimento.
No exemplo anterior, com a palavra no, a expresso n.o, poderia aceitar vrias palavras como n o, n1o, noo, njo... Para deix-la mais especfica poderamos us-la assim: n[a]o
No exemplo anterior, com a palavra no, a expresso n.o, poderia aceitar vrias palavras como n o, n1o, noo, njo... Para deix-la mais especfica poderamos us-la assim: n[a]o
O ponto no aceita qualquer coisa? Dentro da lista, todos os caracteres so normais
No exemplo anterior, com a palavra no, a expresso n.o, poderia aceitar vrias palavras como n o, n1o, noo, njo... Para deix-la mais especfica poderamos us-la assim: n[a]o
O ponto no aceita qualquer coisa? Dentro da lista, todos os caracteres so normais, exceto o trao.
Exemplo: [ ][ - ]
D para resolver isto com alguns Como colocar o trao e os colchetes curingas, mas... dentro da lista se eles so ...Vamos conhecer as metacaracteres? classes de caracteres POSIX
O trao colocamos no final da lista sozinho; O colchete de abertura ( [ ) pode colocar em qualquer lugar; O colchete de fechamento ( ] ) deve ser colocado no comeo da lista;
Exemplo: [ ][ - ]
A lista negada igual a lista comum, a nica diferena que ela aceitar todos os caracteres que NO tiverem dentro da lista. Ex: l[^aeioAEIO]a lua, l1a, lpa...
Importante: A lista negada no casa com espao vazio. No exemplo acima ela NO aceitaria l a (l espao a). Como colocar o ^ dentro da lista se ele tambm um metacaracter? Deve ser colocado no final. Ex: [^a-z123^]
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 expresso:
.*
Simples, no?!
Dentro da lista (e no incio) o ^ tem o objetivo de negar seu contedo. Fora da lista ele serve para marcar que a palavra deve ser encontrada exatamente no incio da linha. EX: ^[a-zA-Z].
Este metacaractere s especial se tiver no comeo da expresso regular. Se eu quiser procurar uma palavra que comee com ^ poderia fazer assim: ^^
2. Reconhea a palavra casa em qualquer combinao de maiscula, minscula e em qualquer parte de um texto. [cC][aA][sS][aA] 3. Reconhea um nmero de IP, que aceite 999.999.999.999 Dica: O metacaracter \ torna outro metacaractere literal. OBS: Sabemos que no existe um IP assim, foi usado aqui apenas para iniciar de forma simples o entendimento da aplicao de expresses 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= Contedo a ser lido"; Regex regex = new Regex(expressao_regular"); if (regex.IsMatch(texto)) // Encontrou else // No encontrou No site existe um exemplo para download codificando o trecho de cdigo acima.
Agenda
Fundamentaes do .Net Framework
Introduo a colees Introduo a expresses lambdas aplicado a colees
Quando criamos um vetor de 100 posies, por exemplo, alocado em memria os 100 espaos que ser utilizados.
O tempo de acesso a um vetor bem rpido, porm ao redefinir o tamanho de um vetor temos uma considervel perda de desempenho, pois necessrio realocar dentro da memria o novo tamanho do vetor. recomendado o uso de vetores para itens que no mudaro ao longo da utilizao da aplicao. String[] colecao = new String [10]; // Array de Strings
Quando criamos uma lista e adicionamos um valor (uma posio), por exemplo, alocado em memria apenas 1 espao que justamente o que foi utilizado.
O tempo de acesso a uma lista um pouco maior que um array, porm ao redefinir o tamanho, ou seja adicionar novos itens, no ocorre perda de desempenho, pois no necessrio realocar a lista na memria e sim apenas criar um novo item. As listas genricas podem ser usadas com qualquer tipo de dado sem problema de boxing e unboxing, permitem uma leitura mais legvel e disponibiliza recursos que o array no tem. Vamos conhecer mais...
Verificando se um item existe na lista usando lambda bool existeItem = colecao.Exists(item => item == "valor");
Descobrindo ndice de um valor na lista usando lambda int indice = colecao.FindIndex(item => item == "valor");
Verificando se uma pessoa do sexo masculino existe na lista usando lambda bool existeItem = colecao.Exists(pessoa => pessoa.sexo == Sexo.Masculino);
Buscando uma pessoa com nome igual a Fulano e sexo masculino Pessoa pessoa = colecao.Find(pessoa => pessoa.nome == Fulano && pessoa.sexo = Sexo.Masculino);
Referncias
Web: http://www.msdn.com http://www.portaleducacao.com.br/informatica/artigos/6137/historia -e-caracteristicas-da-linguagem-c http://en.wikipedia.org/wiki/.NET_Framework http://en.wikipedia.org/wiki/Singularity_(operating_system) http://en.wikipedia.org/wiki/Cosmos_(operating_system) http://www.mono-project.com/Main_Page http://singularity.codeplex.com http://cosmos.codeplex.com/ http://geekswithblogs.net/BlackRabbitCoder/archive/2010/05/10/cstring-compares-and-concatenations.aspx
Referncias
Livros Cdigo limpo Habilidades Prticas do Agile Software (Robert Martin) Certificao .Net: Application Development Foundation (Microsoft) Expresses regulares Uma abordagem divertida