You are on page 1of 223

Framework .

Net e Orientao a Objetos 1 Introduo


(Baseado na Certificao Microsoft)

Gerao TEC Talentos empreendedores para o mundo da tecnologia


Lorival Smolski Chapuis

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

Introduo a Orientao a objetos


Definio de classe e objeto Entendendo mtodos e propriedades

Prticas de Coding Dojo


Reviso linguagem C# Novas prticas aprendidas

Utilizao do gerenciador de cdigo fonte GitHub e desenvolvimento orientado a testes.

Agenda: Aula 1 - Tera-feira


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

Agenda: Aula 2 - Quarta-feira


Desenvolvimento prtico de uma calculadora. Aplicar desenvolvimento orientado a testes. Aplicar ideias de cdigo limpo. Criao 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


Cdigo limpo Discusses sobre cdigo limpo O que um cdigo limpo? Princpios de cdigo limpo Nomes significativos Fundamentaes do .Net Framework Valores por tipo Definio de classe e objetos Exerccios dirigidos

Agenda: Aula 4 Sexta-feira


Fundamentaes do .Net Framework Valores por referncia Convertendo entre tipos Princpios de cdigo limpo Comentrios Exerccios dirigidos
Incio do desenvolvimento da lista de exerccios Desenvolver somente a parte de processamento, ou seja, no necessrio NESTE MOMENTO fazer a parte de tela pois estaremos vendo isto mais a frente; Preferencialmente fazer em duplas;

Agenda: Aula 5 Segunda-feira


Fundamentaes do .Net Framework Tipos Nullable Navegando pelo sistema de arquivos Feedback da semana Exerccios dirigidos

Agenda: Aula 6 Tera-feira


Discusses sobre o curso Gerenciador de fontes GitHub Exerccios dirigidos

Agenda: Aula 7 Quarta-feira


Usando GitHub Fundamentaes do .Net Framework Manipulando sistema de arquivos Exerccios dirigidos

Agenda: Aula 8 Quinta-feira


Manipulao de Strings Concatenao StringBuilder StringFormat Exerccios dirigidos

Agenda: Aula 9 Sexta-feira


Tempo para desenvolvimento da lista de exerccio. Auxlio nos desenvolvimentos. Reviso de assuntos que ficaram com dvidas.

Agenda: Aula 10 Segunda-feira


Expresses regulares: introduo O que so Como cri-las e manipul-las Como utilizar expresses regulares em C# Reviso e dvidas Exerccios dirigidos

Agenda: Aula 11 Tera-feira


Fundamentaes do .Net Framework Introduo a colees Introduo a expresses lambdas aplicado a colees Exerccios dirigidos Reviso da semana e feedback

Requisitos para prximas etapas


Criar uma conta no GitHub: http://www.github.com
Criem um usurio com um nome expressivo e guardem a senha =)

Material auxiliar para este mdulo

Livro Programando com C# e Visual Studio 2005; Livro 100% prtico; Desde declarao de variveis at criao de telas WindowsForm.

Framework .Net: Aula 1 - Tera-feira

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

Plataforma .Net - Histrico


O .Net Framework uma plataforma para desenvolvimento de aplicaes, criada pela Microsoft em 1999 e lanada oficialmente em 2002;
Version 1.0 Lanamento 13 de fevereiro de 2002 Visual Studio Visual Studio Windows XP, Tablets

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

Visual Studio 2003


Visual Studio 2005 Visual Studio 2005 Visual Studio 2008

Server 2003
Server 2003 R2 Vista, Server 2008 7, Server 2008 R2

Plataforma .Net - Arquitetura


A plataforma .Net disponibiliza uma vasta biblioteca de funcionalidades e componentes, fornecendo interoperabilidade com uma gama de linguagens de alto nvel;
O desenvolvedor no se preocupa inteiramente com o dispositivo ao qual est destinada sua aplicao e sim com a plataforma de desenvolvimento. A interoperabilidade de ambiente semelhante plataforma Java, usando uma mquina virtual independente de linguagem, chamado Common Language Runtime ou CLR. Em Java a JVM. Pode ser executada em vrios dispositivos atualmente, desde um smartphone, tablet, Xbox 360, computadores desktops at servidores dedicados ou no;

Plataforma .Net - Arquitetura


Com isto abstrai do desenvolvedor a necessidade de usar apenas uma nica linguagem, tendo hoje mais de 30 opes, sendo algumas delas C#, C++, Boo, F#, COBOL, Fortran, Haskell, Lua, Object Pascal, Perl, PowerBuilder, Python, Ruby, Smalltalk, Visual Basic, entre outras.
As aplicaes so duplamente compiladas, sendo uma para uma linguagem intermediria, Common Intermediate Language (IL) ou Microsoft Intermediate Language (MSIL), e outra para linguagem de mquina.

Plataforma .Net - Arquitetura

Plataforma .Net - Arquitetura


.NET Framework VB C++ C# JScript ...

Common Type System (CTS) Visual Studio .NET ASP .NET: Web Services e Web Forms ADO .NET: Data e XML

Windows Forms

.NET Framework Base Class

Common Language Runtime (CLR)

Plataforma .Net - Arquitetura


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

Cdigo no gerenciado (Especfico para o SO)


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

Plataforma .Net O que o CLR mesmo?


O Common Language Runtime (CLR) o componente encarregado de gerenciar aplicaes desenvolvidas em .NET.
O compilador de cada linguagem segue uma srie de especificaes, conhecidas como Common Language Infrastructure (CLI). Estas especificaes so abertas (ECMA-335, ISO/IEC 23271), assim permitem a interoperabilidade entre outras linguagens e plataformas.

Plataforma .Net Como mesmo?


Cdigo Fonte VB C# C++ Componente No Gerenciadol Compilador Cdigo Gerenciado Compilador Compilador

Assembly - Cdigo IL

Common Language Runtime (CLR) Compilador JIT

Cdigo Nativo Servios 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 no implementou o .Net para outros Sistemas Operacionais diferentes do Windows, porm a plataforma foi criada e disponibilizada para ser possvel fazer isso por terceiros. Segurana Trata algumas vulnerabilidades comuns e fornece um modelo de segurana para as aplicaes. Deploy simplificado Possui ferramentas que auxiliam na criao de instaladores de acordo com os padres e seguranas requeridos, de forma fcil e flexvel. Biblioteca de funcionalidades comuns Existem vrias funcionalidades disponveis independentes da linguagem que esteja sendo utilizadas, desde manipulao de arquivos, acesso a base de dados, criptografia, frmulas matemticas, processamento grfico at gerenciamento paralelo de aplicaes.

Plataforma .Net Aplicaes


Aplicaes SmartClient Aplicaes Client/Server Aplicaes web Servios Web Servios Windows Aplicaes para dispositivos mveis Aplicaes distribuidas Testes automatizados Plugins para aplicaes Microsoft como Office Aplicaes Cloud Aplicaes baseadas em Workflow Aplicaes console Bibliotecas de funcionalidades Extender componentes existentes e melhor-los conforme necessidades Criar plugin para o Visual Studio Criar aplicaes RIA E vrias outras... Obs: Para fazer qualquer item acima necessrio ter o Visual Studio

Plataforma .Net Projeto MONO


Mono uma plataforma open source que implementa os padres 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#)


Histria da linguagem C# Foi criado junto com a arquitetura .NET. Embora existam vrias outras linguagens que suportam essa tecnologia (como VB.NET, C++, J#), C# considerada a linguagem smbolo do .NET pelas seguintes razes: Foi criada praticamente do zero para funcionar na nova plataforma, sem preocupaes de compatibilidade com cdigo de legado. O compilador C# foi o primeiro a ser desenvolvido. A maior parte das classes do .NET Framework foram desenvolvidas em C#. A criao da linguagem, embora tenha sido feita por vrios desenvolvedores, atribuda principalmente a Anders Hejlsberg. Anders era desenvolvedor de compiladores na Borland, e entre suas criaes mais conhecidas esto o Turbo Pascal e o Delphi.

Plataforma .Net Curiosidades: Nome C#


Muitos pensam que o nome C# viria de uma sobreposio de 4 smbolos "+" dando a impresso de "++++". Na verdade o "#" de C# refere-se ao sinal musical (sustenido), que aumenta em 1/2 tom uma nota musical.
O smbolo real seria o e no o #, porm, devido a limitao de telas, fontes e alguns browsers, no momento da normalizao junto a ECMA, fora especificado apenas que o nome da linguagem seria uma letra C maiscula (U+0043) e o sinal "#" (U+0023), facilitando assim, publicaes e artigos com um caracter encontrado facilmente dos layouts de teclado padres. Desta forma, caso o nome fosse usado em portugus, seria "CSustenido" (ou "D-Sustenido"), e no "C-cerquilha".

Plataforma .Net Curiosidades: Atenes


Aplicaes compiladas diretamente para o Sistema Operacional origem e sendo no gerenciadas possuem mais desempenho... A pergunta a que custo...
Como as DLLs e EXE so IL, possvel facilmente fazer engenharia reversa. necessrio usar alguns softwares para dificultar este processo, quando necessrio. As verses 3.5 para cima no vem pr-instaladas no SO, ou seja, necessrio baixar a instalar, tendo que ter alguns cuidados no deploy de aplicaes.

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 aplicaes que pode ser encontrado no codeplex: http://singularity.codeplex.com/ No est mais em andamento, mas serviu de base para vrias outros do mesmo gnero.

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/

Plataforma .Net Prtica de Coding Dojo

http://dojopuzzles.com/problemas

Framework .Net: Aula 2 - Quarta-feira

Plataforma .Net Prtica


Desenvolvimento passo-a-passo de uma calculadora desenvolvimento orientado a testes e ideias de cdigo limpo.
No ser usado conceitos de orientao a objetos. Criao 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.

usando

Framework .Net: Aula 3 Quinta-feira

Agenda
Cdigo limpo
Discusses sobre cdigo limpo O que um cdigo limpo?

Princpios de cdigo limpo


Nomes significativos

Fundamentaes do .Net Framework


Valores por tipo Definio de classe e objetos

Exerccios dirigidos

Plataforma .Net O cdigo

Jamais nos livraremos dele!

Plataforma .Net Cdigo ruim

Jamais nos livraremos dele?

Plataforma .Net Custo do cdigo ruim

Cdigo complexo aumenta, produtividade diminui.

Plataforma .Net A nova verso

Cdigo complexo apenas torna A nova verso um looping.

Plataforma .Net Atidude

Atitude com responsabilidade mudam o ambiente de desenvolvimento.

Plataforma .Net O que cdigo limpo?


Gosto de meu cdigo elegante e eficiente. A lgica deve ser direta para dificultar o encobrimento de bugs, as dependncias mnimas para facilitar a manuteno, o tratamento de erro completo de acordo com uma estratgia clara e o desempenho prximo do mais eficiente de modo a no incitar as pessoas a tornarem o cdigo onfuso com otimizaes sorrateiras. O cdigo limpo faz bem apenas uma coisa.

Bjarne Stroustrup, criador do C++ e autor do livro A linguagem de programao C++.

Plataforma .Net O que cdigo limpo?


Um cdigo limpo simples e direto. Ele to bem legvel quanto uma prosa bem escrita. Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele est repleto de abstraes claras e linhas de controle objetivas.

Grandy Booch, autor do livro Anlise e Projeto de Sistemas Orientados a Objetos

Plataforma .Net O que cdigo limpo?


Ele tem testes de unidade e aceitao, nomes significativos; ele oferece apenas uma maneira e no vrias de se fazer uma tarefa; possui poucas dependncias as quais so explicitamente declaradas e oferecem um API mnimo e claro. O cdigo deve ser inteligvel j que dependendo da linguagem, nem toda informao necessria pode estar expressa no cdigo em si.

David A. Thomas, fundador da Object Technology International (IBM OTI Labs), responsvel pelo incio do desenvolvimento do Eclipse IDE.

Plataforma .Net O que cdigo limpo?


Eu poderia listar todas as qualidades que vejo em um cdigo limpo, mas h uma predominante que leva a todas as outras. Um cdigo limpo sempre parece que foi escrito por algum que se importava. No h nada de bvio no que se pode fazer para torn-lo melhor. Tudo foi pensado pelo autor do cdigo, e se tentar pensar em algumas melhorias, voc voltar ao inicio, ou seja, apreciando o cdigo deixado para voc por algum que se importa com essa tarefa.

Michael Feathers, autor de Trabalhando efetivamente com cdigo legado.

Plataforma .Net A regra de escoteiro


Deixe a rea do acampamento mais limpa do que como voc a encontrou. A histria do apartamento sujo...

Plataforma .Net Princpios cdigo limpo


Nomes significativos
Nomeamos variveis, Nomeamos funes, Nomeamos parmetros, Nomeamos classes, Nomeamos arquivos, Nomeamos diretrios, Nomeamos e nomeamos...

Plataforma .Net Nomes significativos


Escolher bons nomes leva tempo, mas economiza mais.
O nome de qualquer coisa no cdigo deve lhe dizer porque existe, o que faz e como usado. Se um nome requer um comentrio, ento ele no revela seu propsito:
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; }
Funo 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 refatorao o cdigo ficou muito mais legvel.

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 informaes 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 opo, mas pode ser interpretado como um comando Unix. No coloque o nome de lista se no for efetivamente uma lista.

Use nomes pronunciveis:


Tente discutir com algum sobre um programa com variveis no pronunciveis: Olha, aqui no b c erre trs c ene t, temos um p esse z qu int...

Plataforma .Net Nomes significativos


Use nomes passveis de busca:
Nomes de uma s letra ou com nmeros possuem um problema na hora de ser localizados no cdigo; Buscas so o ltimo recurso e quando voc precisa dela quer que funcione;

Evite o mapeamento mental:


Utilize nomes que faam sentido para o negcio ou para a soluo do problema e evite assim que o leitor desenvolvedor precise ficar decorando o que faz uma varivel para entender um cdigo 3 linhas abaixo.

Plataforma .Net Nomes significativos


Notao Hngara: no faa isto!
Exemplos:
s_nomeCliente ou str_nomeCliente ou strNomeClient i_idade ou int_idade ou intIdade

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.

Plataforma .Net Nomes significativos


Mtodos (Funcionalidades):
Os nomes de mtodos devem ter verbos;
Errado: void lista(); Certo: void retornaLista(); Certo: void retorneLista();
Prefervel. Imagine que voc esteja ordenando uma ao.

No coloque os parmetros no nome do mtodo;


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 mtodos assim por todo cdigo:
pegarHora(); recuperarData(); obterNome(); retornarSobrenome();

Escolha um conceito e use sempre:


obterHora(); obterData(); obterNome(); ObterSobrenome();

Plataforma .Net Nomes significativos


PascalCase:
TodasAsPalavrasIniciamComLetraMaiuscula Classes, Enumeradores, Eventos, Fields estticos, Interface, Mtodos, NameSpaces, Propriedade, Field pblico.

CamelCase:
apenasAPrimeiraPalavraIniciaComLetraMinuscula Parmetros, Fields privados, Variveis.

Plataforma .Net Nomes significativos


O C# case-sensitive, diferente de Visual Basic. Desenvolvedores VB criam variveis iniciando com underline para poder ter propriedades com o mesmo nome.
No faa isto em C#, a linguagem casesensitive, aproveite isto.

Plataforma .Net Fundamentaes .Net


Tipos por valor
O que so e quem so Criando tipos por valor Trabalhando com enumeradores

Tipos por referncia


O que so e quem so Criando tipos por referncia

Convertendo entre tipos


Boxing e Unboxing

Exerccios dirigidos

Plataforma .Net Tipos por valor


Tipos por valor so tipos que permitem armazenar realmente o valor definido e no um ponteiro para um local da memria onde est o valor.
Os valores das variveis dos tipos por valor so armazenados em uma rea chamada stack, onde em tempo de execuo 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 varivel valor1 e armazenar valor1 na varivel valor2, o valor COPIADO para a varivel valor2 e ambos esto separados dentro da memria stack.

Plataforma .Net Tipos por valor


Tipo System.SByte Utilizao SByte/sbyte Bytes Faixa 1 -128 at 127 Usado para Bytes negativos e positivos

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

Apenas Bytes positivos


Nmeros pequenos

2147483648 at 2147483647 Nmero inteiros e contadores 0 at 4294967295 Apenas nmeros positivos

System.Int64

Long/long

92372036854775808 at 9223372036854775807 23

Nmeros grandes

Plataforma .Net Tipos por valor


Tipo
System.Single

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

Clculos cientficos ou que requerem grande preciso

Plataforma .Net Tipos por valor


Boas prticas: Em tempo de execuo otimizada a utilizao de inteiros 32 bits (Int32, Uint32).
Para ponto flutuante o mais eficiente o Double que tem suas operaes otimizadas pelo hardware.

Plataforma .Net Tipos por valor


Tipo System.Char Utilizao Char/char Bytes 2 Faixa No tem Usado para Apenas 1 caracteres unicode

System.Boolean

Boolean/bool

No tem

Valor Verdadeiro (True) ou False (False)


Ponteiro para endereamento de memria Data e hora

System.IntPtr

No tem

Depende da plataforma 8

No tem

System.DateTime

Date/date

1/1/0001 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 varivel de um tipo assim os dados so copiados para ele como j vimos. Este comportamento diferente do de tipos de referncia, que sero discutidos mais adiante. Mesmo que tipos por valor, muitas vezes representam valores simples, eles ainda funcionam como objetos. Em outras palavras, podemos chamar mtodos neles. De fato, comum utilizar o ToString(), por exemplo. Todos os tipos so 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 memria Stack. (Pilha) Stack uma rea da memria onde podemos armazenar e gerenciar dados. extremamente eficiente, porm, cabem poucas duzias de kilobytes. manipulada conforme uma pilha. No pode ser nulo. Trabalha com dados diretamente. Stack Exemplos: Idade = 15 Inteiros; Estudante = 1 (Sim -> 0 = No; 1 = Sim) Decimais; Datas; Salrio = 501,52 Booleanos; ... Enumeraes

Plataforma .Net Enumeradores


Enumeraes so smbolos relacionados que tm valores fixos. Use enumeraes para fornecer uma lista de opes ao invs de valores fixos diretamente.
Exemplo: public void metodoQualquer() { string nomeCidade = obtemNomeCidade(); if (nomeCidade == "Joinville") { //-- Faa algo para Joinville } else if (nomeCidade == "Blumenau") { //-- Faa 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 opes e pronto, seu enumerador est criado. Importante: o enumerador apenas uma representao esttica de um nmero. A lista comea sempre em zero ento neste caso Joinville o nmero zero e Blumenau o nmero 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) { //-- Faa algo para Joinville } else if (cidade == Cidade.Blumenau) { //-- Faa algo para Blumenau } }
Melhorou? Agora no precisamos de Strings fixas, reduzimos a possibilidade de um erro e deixamos o cdigo 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 prprios nmeros e no iniciam mais em zero.

Plataforma .Net O que uma classe?


Classe a representao escrita de um tipo de objeto.
A classe est para um objeto assim como uma planta baixa est para um prdio. a definio formal de um objeto.

Plataforma .Net Definio de objetos


Objetos so abstraes do mundo real afim de definir comportamentos e atributos. Todo objeto, no mundo real, possui comportamentos (aes) e atributos (propriedades).
Quais so os aes e propriedades dos itens a seguir?

Plataforma .Net Definio de objetos


Cite aes e propriedades:
Carro; Pessoa; Cadeira; Calculadora; Martelo; Pudim;

Plataforma .Net Definio de objetos


Cite aes e propriedades:
Carro;
Aes: ligar, acelerar, frear, buzinar... Propriedades: cor, tamanho, aro da roda...

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

Plataforma .Net Definio de objetos


Cite aes e propriedades:
Calculadora;
Aes: somar, multiplicar, subtrair, dividir Propriedades: cor, tamanho dos botes, tipo do visor...

Martelo;
Aes: Bater, arrancar prego... (quem bate? Quem arranca?) Propriedades: Comprimento, peso da cabea do martelo...

Pudim;
Aes: estragar... Propriedades: cor, tamanho, formato...

Plataforma .Net Pudim

Objeto: pudim

Classe: define o pudim Objeto: pudim

Plataforma .Net Pudim


Aes e propriedades:
Pudim;
Aes: 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 string da Formato{ get ; set ; }
public void Estragar() { } }
classe (inicia com letra maiscula)

Plataforma .Net Classe Pudim


Public class Pudim { public string Tamanho { get ; set ; } Acesso dapublic string Formato{ get ; set ; }
classe. Todo mundo tem acesso.

public void Estragar() { }

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 { public string { get ; set ; } Set = Podemos definirTamanho o valor Get = Podemos obter Formato{ o valor public string get ; set ; }
public void Estragar() { } }

Plataforma .Net Classe Pudim


Public class Pudim { public string Tamanho { get ; set ; } public string Formato{ get ; set ; }
public void Estragar() { } }
Aes

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: no retorna valor. Podemos retornar qualquer tipo de dado/objeto

Plataforma .Net Objeto Pudim


Pudim pudim = new Pudim(); pudim.tamanho = mdio; pudim.formato = redondo
Pudim pudim2 = new Pudim(); pudim2.tamanho = grande; pudim2.formato = quadrado

Plataforma .Net Objeto Pudim


Pudim pudim = new Pudim(); pudim.tamanho = mdio; pudim.formato = redondo Operador de
criao de um objeto

Pudim pudim2 = new Pudim(); pudim2.tamanho = grande; pudim2.formato = quadrado

Plataforma .Net Objeto Pudim


Pudim pudim = new Pudim(); pudim.tamanho = mdio; pudim.formato = redondo
Pudim pudim2 = new Pudim(); Definio dos valores das pudim2.tamanho = grande; propriedades pudim2.formato = quadrado

Plataforma .Net Objeto Pudim


Pudim pudim = new Pudim(); pudim.tamanho = mdio; pudim.formato = redondo
pudim.Estragar();
Invocao do mtodo 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;
Definimos int resultado = calculadora.Somar(); propriedades

Plataforma .Net Objeto Calculadora


Calculadora calculadora = new Calculadora(); calculadora.Valor1 = 3; calculadora.Valor2 = 5;
int resultado = calculadora.Somar();
Invocamos aes.

Framework .Net: Aula 4 Sexta-feira

Agenda
Fundamentaes do .Net Framework
Valores por referncia Convertendo entre tipos

Princpios de cdigo limpo


Comentrios

Exerccios dirigidos Incio do desenvolvimento da lista de exerccios


Desenvolver somente a parte de processamento, ou seja, no necessrio NESTE MOMENTO fazer a parte de tela pois estaremos vendo isto mais a frente; Preferencialmente fazer em duplas;

Plataforma .Net Tipos por referncia


Tipos de referncia armazenam o endereo de seus dados, tambm conhecidos como um ponteiro.
Os dados reais que se refere ao endereo armazenado em uma rea de memria chamada heap. No precisamos nos preocupar com gerenciamento de memria dos tipos de referncia, o .Net Framework cuida disso para ns.

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.

Plataforma .Net Tipos por referncia


Exemplo: StringBuilder valor1 = new StringBuilder(oi); StringBuilder valor2 = valor1; valor2.Append( tchau);
Qual resultado de valor1??? Qual resultado de valor2???

Plataforma .Net Tipos por referncia


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 referncia


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

Plataforma .Net Tipos por referncia


Tipo
System.String

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

Valores textos dinmicos.


Vetor de dados. Esta a classe bsica para todos os arrays. Lanar ou tratar excees. Veremos isto em tratamento de excees.

...

...

Existem mais de 2 500 tipos por referncia dentro do .Net Framework.

Plataforma .Net Tipos por referncia


Resumo armazenado na memria Heap. (Monte) Heap uma rea da memria onde podemos armazenar e gerenciar dados dinamicamente. alocada e liberada em blocos, o que muitas vezes se torna burocrtico e mais lento. Permite qualquer tipo inclusive nulo. Trabalha com dados ponteiros (referncia de memria). Exemplos: Stack Vetores; Nome = #123456abc (endereo) Textos; ... Instncia de classes; Heap
#123456abc = Gerao ...

Plataforma .Net Tipos:Valor vs Refercia


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

Plataforma .Net Boxing e Unboxing


Boxing o processo de converter um tipo por valor para um tipo por referncia.
Unboxing o processo de converter um tipo por referncia em um tipo por valor. Ambos processos so computacionalmente caros. Quando um tipo por valor convertido em um tipo por referncia (boxing) um novo objeto deve ser alocado e contrudo.

Plataforma .Net Boxing e Unboxing


int inteiro = 123; object objeto; objeto = inteiro; string texto = objeto.ToString() int novoInteiro = (int)objeto // Tipo por valor // Tipo por referncia // Causa boxing // Chama via O // Faz unboxing

Stack inteiro objeto novoObjeto


123

Heap
123

123

Plataforma .Net Evite Cast


chamado de Cast a converso forada de um tipo em outro.
Exemplo: String valor = 1; int numero = (int)valor;

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

Plataforma .Net Comentrios

No insira comentrios num cdigo ruim, reescreva-o. Brian W. Kernighan (PhD em Cincia da Cmputao...) e P.J. Plaugher (Autor e empresrio...)

Plataforma .Net Comentrios


Comentrios so um mal necessrio e vamos entender um pouco mais sobre como utilizar melhor esta ferramenta de auxlio ao cdigo. Se nossas linguagens de programao fossem expressivas o suficiente ou se tivssemos o talento para manipular com destreza tais linguagens de modo a expressas nossa inteno, no precisaramos de muitos comentrios, qui nenhum. Para compensar nosso fracasso em nos expressar no cdigo temos que no mnimo usar adequadamente os comentrios. Mude o que mudar, falem o que falar, briguem o que brigar, cantem o que cantar, chorem quem quiser chorar: a verdade est no cdigo.

Plataforma .Net Comentrios


Comentrios compensam cdigo ruim? Acabamos de construir um cdigo que t difcil de entender, qual a primeira coisa que vem na mente? Hmmmm... Vou deixar bem comentado este cdigo. Pare agora! Cdigo limpo! Cdigos limpos e expressivos com poucos comentrios so de longe superiores a um amontoado e complexos cheios de comentrios. No gaste tempo criando comentrios para explicar a baguna que voc fez, use-o para limpar a zona que ficou.

Vamos ver alguns exemplos de como e quando NO FAZER comentrios.

Plataforma .Net Comentrios,no assim


Comentrios 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? No! Existe e muito! No seria mais simples assim? if (pessoa.PodeEntrarBanheiroFeminino()){ banheiroFeminino.Entre(pessoa); }

Plataforma .Net Comentrios,no assim


Controle de fonte no cdigo. // 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 alterao do Fulano H muito tempo, havia um om motivo para preservar estas informaes. Hoje no se desenvolve mais sem um controle de fontes como o SVN, TFS ou GIT. Deixe a responsabilidade de controlar as alteraes e quem as alterou para o devido responsvel: o controle de fontes. Quer deixar sua maca no cdigo colocando seu nome? Faa um cdigo bem feito e deixe sua marca na sua vida profissional.

Plataforma .Net Comentrios,no assim


Comentrios sem total necessidade, apenas para comentar: // Construtor padro *** no, t brincando que ele o contrutor padro. Public Pessoa(){ } // Dia do ms *** achei que fosse quantidade de caracteres... Private int diaDoMes(); // Retorna o dia do ms *** para! Agora t de sacanagem... Public int ObtemDiaDoMes(){ return diaDoMes; } Qualquer desenvolver que leia este cdigo vai ignorar estes comentrios, logo no perca tempo escrevendo-os. Vamos piorar a situao agora...

Plataforma .Net Comentrios,no assim


Comentrios 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 alterao no cdigo executada, dificilmente seu comentrio alterado, fazendo com que se torne falso. Regra bsica: quanto maior e mais longe o comentrio do cdigo destino, mais falso ele pode ser. No final voc pode confiar apenas no cdigo.

Plataforma .Net Comentrios,no assim


Excesso de comentrios 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 cdigo de uma biblioteca de cdigo livre bem conhecida... Se nem os autores no prestarem ateno na hora de comentar, porque os leitores deveriam?

Plataforma .Net Comentrios,no assim


Comentrios para fechar tag chaves: ... try{ while( ... ) { ... ... ... } //while ... ... } // try ... Isso at pode faze sentido em funes longas com muitas estruturas aninhadas. Antes de faze este tipo de comentrio, tente refatorar e diminuir as linhas. Um mtodo (funo) deve fazer uma nica tarefa.

Plataforma .Net Comentrios,no assim


Informaes excessivas e o pior se desculpando...: /* * Na dcada de 90 o fulado de tal criou uma tarefa para fazer uma alterao mas acabou no fazendo, ento ficou para mim a pendncia de fazer. Eu no conheo bem esta parte do sistema e fiz o que pude, desculpe se no ficou da melhor maneira possvel, todo mundo estava ocupado e ningum conseguiu tempo para me ajudar. No final eu tambm no quis atrapalhar ningum. A alterao foi simples, eu troquei o if que verificava a flag de ativo por um if que verifica se a data de alterao menor que 90 dias atrs. Com isto resolveu o problema e tudo deu certo, espero que no acontea nenhum efeito colateral. */ Depois das discusses anteriores, nem precisamos falar nada sobre isto...

Plataforma .Net Comentrios,no assim


Conexes nada bvias: /* * comea com um array grande o bastante para conter todos os pixels ( mais * os bytes de filtragem) e 200 bytes extras para informaes no cabealho. */ 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 comentrio explicar o que o cdigo no consegue por si s. uma lstima quando um comentrio tambm precisa ser explicado.

Plataforma .Net Comentrios, assim


Certos comentrios so necessrios ou benficos. Veremos alguns que valem a pena utilizar QUANDO NECESSRIO.

Plataforma .Net Comentrios, assim


Comentrios Legais: Muitas vezes, dentro do desenvolvimento corporativo necessrio colocar comentrios com informaes sobre direitos autorais simplesmente por questes legais. S no vale colocar todo o arquivo de licena no cdigo fonte. Se necessrio referencie o arquivo onde se encontra todas as informaes de licena: /* Direitos autorais 2010,2011,2012 por Empresa XXXX. Todos os direitos * reservados. * Distribudo sob os termos da verso 2 ou posterior da Licena Pblica Geral * da GNU */

Plataforma .Net Comentrios, assim


Comentrios informativos: Quando criamos um mtodo, podemos descrever algumas informaes sobre ele e facilitar quem for utilizar aquele mtodo atravs das 3 barras (///). Veja:

Plataforma .Net Comentrios, assim


Comentrios de atividades pendntes (TODO): Muitas vezes estamos lendo um cdigo e encontramos algo que deveria ser melhorado mas no temos tempo de fazer isto no momento, ou at mesmo estamos trabalhando em um mtodo que precisa ser melhorado mas por algum motivo no podemos fazer no momento. Para no esquecer, criamos o comentrio 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 comentrio // TODO: o que voc quer

Visualizar comentrio: Menu View Task List Selecione a opo Comments

Plataforma .Net Comentrios, assim


Explicao de inteno: usada para identificar Jabutis As vezes, por motivos de compatibilidade com cdigo legado ou clientes temos que manter um cdigo de uma determinada forma at uma prxima verso, conseguir autorizao de algum que permita alterao de impacto ou at mesmo eternamente. Quando isto ocorrer comente a inteno e explique resumidamente o que aconteceu para caso outra pessoa tente alterar no 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 condio de repetio sem // problema com threads executando a mesma instncia da classe XXX. Por // isto fazemos new ao invs de usar uma instncia esttica.

Plataforma .Net Exerccios

Framework .Net: Aula 5Segunda-feira

Agenda
Fundamentaes do .Net Framework
Tipos Nullable Navegando pelo sistema de arquivos

Feedback da semana Exerccios dirigidos

Plataforma .Net Tipos Nullable


Vimos que tipos por valor no suportam salvar valores nulos. Em alguns casos, necessitamos salvar um tipo por valor nulo, como Temperatura no definida. Temperatura um nmero inteiro e no pode ser zero, pois zero uma temperatura vlida. 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. Utilizao: 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, diretrios e discos. As classes so separadas em 2 tipos: Informativas (Herdam de FileSystemInfo) FileInfo DirecoryInfo DriveInfo Utilitrias File Directory Path

Plataforma .Net FileSystemInfo


Fornece informaes sobre o sistema de arquivos: Principais propriedades CreationTime: Data de criao do arquivo ou diretrio que foi criado. Exists: Determina se o arquivo ou diretrio existe. FullName: Caminho completo, com nome, do arquivo ou diretrio. Extension: Mostra a extenso do arquivo . Name: Nome do arquivo ou diretrio. Principais mtodos Delete: Remove arquivo ou diretrio do sistema de arquivos. Refresh: Atualiza os dados referente a informaes do sistema de arquivos.

Plataforma .Net FileInfo


Pegando informaes 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 informaes de diretrios 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 informaes de discos DriveInfo unidade= new DriveInfo(@"c:\"); MessageBox.Show(drive.Name); Simples assim...

Plataforma .Net

Plataforma .Net Exerccios

Framework .Net: Aula 1 - Tera-feira

Agenda
Discusses sobre o curso Gerenciador de fontes GitHub Exerccios dirigidos

Plataforma .Net Gerenciador de fontes


uma aplicao com a responsabilidade de armazenar e gerenciar fontes desenvolvidos em diversas linguagens.

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

Plataforma .Net Conceito de Commit


Um commit um agrupador de alteraes relacionada a um usurio; 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. [Pedro] Lista de arquivos: Pessoa.cs PessoaTest.cs Commit 3: Efetuada tela da calculadora. [Carlos] Lista de arquivos: FrmCalculadora.cs Commit 4: Correo do mtodo somar da calculadora. [Pedro] Lista de arquivos: Calculadora.cs CalculadoraTest.cs

Plataforma .Net Gerenciador de fontes


Arquitetura bsica de um gerenciador Centralizado:
Servidor (Repositrio)

Desenvolvedor 2 Desenvolvedor 1 Desenvolvedor 3

Plataforma .Net Gerenciador de fontes


Operaes bsicas de um gerenciador Centralizado:
Servidor (Repositrio) Servidor (Repositrio)

Download e/ou Trava arquivos somente para ele alterar

Upload de todos os arquivos alterados (commit)

Desenvolvedor Modifica ou cria arquivos

Fonte

Plataforma .Net Commit centralizado


O commit efetuado quando vamos enviar os arquivos ao servidor. Todos os arquivos alterados so agrupados em um mesmo commit. Dependendo do caso podemos ter um commit com mais de uma dezena de arquivos. Exemplo: Commit 1: Criao da classe calculadora e suas funes. Criao da classe pessoa e suas funes. Efetuada tela da calculadora. Correo do mtodo somar da calculador. [Joo] Lista de arquivos: Calculadora.cs CalculadoraTest.cs Pessoa.cs PessoaTest.cs FrmCalculadora.cs

Plataforma .Net Gerenciador de fontes


Arquitetura bsica de um gerenciador Distribuido:
Servidor (Histrio/Backup)

Desenvolvedor (Repositrio)

Desenvolvedor (Repositrio)

Desenvolvedor (Repositrio)

Plataforma .Net Gerenciador de fontes


Operaes bsicas de um gerenciador Distribuido:
Servidor (Repositrio) Refaz o ciclo para cada conjunto de alteraes. Upload

Servidor

Download

Desenvolvedor Modifica ou cria arquivos

Fonte

Salva alteraes (commit)

Desenvolvedor

Plataforma .Net Commit distribuido


O commit efetuado no momento que finalizamos a alterao de uma alterao. No enviamos um conjunto de arquivos para o servidor e sim um conjunto de commits. Quando menos arquivos em um commit melhor.

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

Plataforma .Net Git


um sistema de controle de verso distribuido, criado inicialmente por Linus Torvalds, para o desenvolvimento do Kernel do Linux. fornecido como software Livre.

Disponvel para:
Windows; Linux; Mac OS X;

Plataforma .Net Quem usa Git?

Plataforma .Net Hospedagens Git

Plataforma .Net Github


um servio de hospedagem para o sistema de controle de verso Git.

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;

Plataforma .Net Ambiente Git


Utilizem a verso convencional para este curso, no for Windows, baixada em: http://git-scm.com/downloads;
Efetue a instalao; Inicie o Git Gui e clique No menu Ajuda Mostrar chave SSH;

Plataforma .Net Ambiente Git


Utilizem a verso convencional para este curso, no for Windows, baixada em: http://git-scm.com/downloads;
Efetue a instalao; Inicie o Git Gui e clique No menu Ajuda Mostrar chave SSH; Clique no boto gerar chave; Aps isto clique no boto Copiar para rea de transferncia.

Plataforma .Net Ambiente Git


Abra www.github.com e efetue login; Clique em Account Settings; Clique no menu SSH Keys; Clique no boto Add SSH Keys; Digite um ttulo para a chave (nome do seu computador) e cole o que est na sua rea de Transferncia com o Ctrl + V. Clique no boto Add Key ;

Plataforma .Net Utilizao Git


Passo 1: Commit
Execute o Git Gui e abra seu repositrio local; Clique no boto Atualizar para ver os arquivos que foram alterados; Selecione os arquivos clicando no cone dos mesmos; Digite uma descrio e clique no boto Salvar reviso;

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 alteraes


Na tela do Git Gui Clique no boto Enviar; Clique no boto Enviar;

Framework .Net: Aula 7 - Quarta-feira

Agenda
Usando GitHub Fundamentaes do .Net Framework
Manipulando sistema de arquivos

Exerccios dirigidos

Plataforma .Net Path


Combinando diretrios Path.Combine("diretorio1", "diretorio2") Resultado: diretorio1\diretorio2

Renomeando extenso Path.ChangeExtension(@"c:\temp\arquivo.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 cdigo.

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 Diretrios


Criando diretrios... Directory.CreateDirectory(@"c:\teste"); Apagando diretrios... Directory.Delete(@"c:\teste"); Verificando existncia de diretrio... Directory.Exists(@"c:\teste);

Framework .Net: Aula 8 Quinta-feira

Agenda
Manipulao de Strings
Concatenao StringBuilder StringFormat

Exerccios dirigidos

Plataforma .Net Textos


Processamento de texto uma das tarefas mais comuns no desenvolvimento de software, as vezes necessitamos fazer pesquisas, concatenaes, formataes, enfim manipular textos em geral. Existem algumas formas de concatenar Strings, uma para cada tipo de situao, vamos conhecer e saber quando aplicar qual obtendo maior desempenho em nossos cdigos.

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.

Plataforma .Net Concatenao


Concatenao 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 no se preocuparem com o desempenho e fazer todos os tipos de concatenao da mesma forma. Ponto de partida: a String um tipo por referncia especial, ela imutvel. O contedo de uma string no pode ser alterado depois que o objeto criado, embora a sintaxe possa fazer parecer isto.

Plataforma .Net Concatenao


Concatenar unir duas cadeias de caracteres (strings) em uma.
Objetivo: palavra1 concatenada com - palavra2; Resultado: palavra1 palavra2; Resumo: Fizemos apenas uma concatenao.

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.

Plataforma .Net Operador +


O operador + utilizado para concatenao. Exemplo: string concatenacao = " palavra1 " + "palavra2"; Quando um dos itens da concatenao uma string, no necessita converter explicitamente o outro item. Exemplo: string concatenacao = 1.ToString() + "palavra2"; (funciona, no precisa) string concatenacao = 1 + "palavra2"; (isto o suficiente) o operador mais eficiente para concatenao, porm no eficiente para construo de strings. Funciona muito bem para concatenao, mais de uma, na mesma instruo.

Plataforma .Net StringBuilder


O StringBuilder utilizado para construo de Strings, ou seja, efetuar vrias concatenaes de forma a obter o mximo de desempenho. Exemplo: string concatenacao = new StringBuilder().Append(1).Append("palavra2") .Append("palavra3").ToString(); o operador mais eficiente para construir Strings, no indicado para pouqussimas concatenao, quanto mais melhor. Se souber qual ser o tamanho mnimo da String final, ento pode ser definido o nmero 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 formatao de Strings, ou seja, definir um padro para a ordem que as Strings sero concatenadas. Exemplo: string concatenacao = string.Format("{0} {1} {2}", "1", "palavra2", "palavra3"); muito til para definir de forma simples a formatao de uma string independente de seus valores. Internamente utiliza StringBuilder para efetuar a construo da string. Ajuda em alguns casos que queremos armazenar a formatao em outro local que no no cdigo, como no banco de dados ou arquivo, por exemplo.

Plataforma .Net Demonstrao


Vamos efetuar uma demonstrao de desempenho identificando qual melhor operador para efetuar concatenao. Esta demonstrao pode ser alterada para identificar o melhor operador para construo de strings, ou seja, efetuar vrias concatenaes para uma mesma string. O objetivo simular a ocorrncia de vrias concatenaes em uma grande aplicao. O objetivo no simular um grande nmero de concatenaes, apenas a concatenao ocorrida diversas vezes. Cuidados: Deve estar atendo as diversas demonstraes em blogs na internet. Verifiquem sempre a experincia do profissional que est blogando. Deve ser montado um ambiente o mais controlado possvel, cuidando do gerenciamento de memria para cada operador.

Plataforma .Net Operador +


//--# Fora eliminao de todos os objetos no usados e retorna o total de memria 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 memria usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false);

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


MessageBox.Show("Usou " + memoriaUtilizada + " de memria e demorou " + tempoDecorido.Milliseconds + ms");

Plataforma .Net StringBuilder


//--# Fora eliminao de todos os objetos no usados e retorna o total de memria 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 memria usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false);

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


MessageBox.Show("Usou " + memoriaUtilizada + " de memria e demorou " + tempoDecorido.Milliseconds + ms");

Plataforma .Net StringFormat


//--# Fora eliminao de todos os objetos no usados e retorna o total de memria 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 memria usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false); long memoriaUtilizada = memoriaFinal - memoriaInicial; TimeSpan tempoDecorido = horaFinal - horaInicial; MessageBox.Show("Usou " + memoriaUtilizada + " de memria e demorou " + tempoDecorido.Milliseconds + ms");

Plataforma .Net Resultados


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

Vamos definir o tamanho do baffer inicial para o StringBuilder e tentar aumentar o desempenho.

Plataforma .Net StringBuilder


//--# Fora eliminao de todos os objetos no usados e retorna o total de memria 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 memria usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false);

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


MessageBox.Show("Usou " + memoriaUtilizada + " de memria e demorou " + tempoDecorido.Milliseconds + ms");

Plataforma .Net Resultados


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

Vamos alterar agora para utilizar o operao + para concatenao em vrias linhas e fazer uma tabela final para verificar quem efetivamente mais rpido.

Plataforma .Net Operador +


//--# Fora eliminao de todos os objetos no usados e retorna o total de memria 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 memria usada sem eliminar nada long memoriaFinal = System.GC.GetTotalMemory(false);

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


MessageBox.Show("Usou " + memoriaUtilizada + " de memria e demorou " + tempoDecorido.Milliseconds + ms");

Plataforma .Net Concluso


Operador + o melhor para concatenao, em uma mesma linha, devido a otimizao.
StringBuilder o melhor quando precisa construir strings. Nem pense em fazer concatenao em vrias linhas. O StringBuilder ocupa mais memria mas mais rpido. StringFormat o melhor para formatar Strings. O importante usar cada operador para seu respectivo objetivo.

Plataforma .Net Concluso


Vai concatenar vrias strings em uma mesma linha? Use o operador +. String concatenacao = palavra1 + palavra2;
Vai concatenar vrias strings em vrias linhas? No use o operador +: String concatenacao = palavra1; concatenacao = concatenacao + palavra2; Vai concatenar vrias strings em vrias 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
Expresses regulares: introduo
O que so Como cri-las e manipul-las Como utilizar expresses regulares em C#

Reviso e dvidas Exerccios dirigidos

Plataforma .Net Expresses regulares


Introduo Definio Origem Aplicaes Metacaracteres
Representantes Quantificadores ncoras

Lets code Debate e esclarecimentos

Plataforma .Net Expresses regulares


Quantos de ns j necessitaram fazer manipulao ou pesquisas em textos? Quantos perderam horas com ifs e fors tentando procurar palavras baseadas em um determinado padro?

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.

Plataforma .Net Expresses regulares


Um dos melhores materiais, didticos, em portugus (se no o melhor) sobre este assunto o livro em que a maior parte terica, sobre expresses regulares, desta apresentao est embasada: Expresses regulares Uma abordagem divertida de Aurlio Marinho Jargas.
A maioria do material sobre expresses regulares em portugus encontrado na internet baseado no livro dele. Esta apresentao ir introduzi-lo neste assunto, fazendo expresses como *[A-Za-z09_]+:(.*)..$ se tornarem compreensivas e no lhe causar pnico. Em toda apresentao, 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 atrs. um conceito consistente, que no sofre alteraes com o passar do tempo.

Plataforma .Net ER: Definio


Uma expresso regular um mtodo formal de se especificar um padro de texto.
De forma simplificada, uma regular expression, termo original, uma composio de smbolos e caracteres literais com funes definidas que quando agrupadas em sequncia formam uma expresso. Essa, por sua vez, interpretada, por um programa, como uma regra que resultar em sucesso caso uma entrada de dados atenda suas condies. Tambm podemos afirmar que : uma maneira de procurar um texto que voc no lembra exatamente como , mas tem ideia das variaes possveis; uma maneira de procurar um trecho em posies especficas como no comeo ou no fim de uma linha, ou palavra; uma maneira de um programador especificar padres 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 neurnios
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 expresses regulares originou o famoso grep que por sua vez originou o egrep.

Plataforma .Net ER: Aplicaes


Basicamente servem para voc dizer algo abrangente de forma especfica. Definido seu padro de busca, voc tem uma lista (finita ou no) de possibilidades de casamento. Em um exemplo rpido, [rgp]ato pode casar rato, gato e pato. Ou seja, sua lista "abrange especificamente" essas trs palavras, nada mais.
Sempre que precisar efetuar buscas ou validaes em textos, as expresses regulares funcionam muito bem. Alguns exemplos de buscas por padres, em textos, so: data horrio nmero IP endereo de e-mail endereo de Internet dados na coluna N de um texto dados que esto entre <tags></tags> campos especficos de um texto tabulado nmero de telefone, RG, CPF, carto de crdito

Plataforma .Net ER: Metacaracteres


So smbolos com funes especficas utilizados para montar as expresses regulares.
Existem vrios tipos de metacaracteres, os bsicos sero estudados nesta apresentao: Representes: representam um ou mais caracteres Quantificadores: indicam o nmero de repeties permitidas para o caractere anterior ncoras: marcam uma posio especfica na linha

Plataforma .Net ER: Representante


Ponto: o necessitado .
O ponto nosso curinga solitrio, que est sempre procura de um casamento, no importa com quem seja. Pode ser um nmero, uma letra, um TAB, um @, o que vier ele traa, 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 no 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 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

Plataforma .Net ER: Representante


Lista: a exigente [...]
Bem mais exigente que o ponto, a lista no 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 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

Plataforma .Net ER: Representante


Lista: a exigente [...]
Bem mais exigente que o ponto, a lista no 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 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.

Plataforma .Net ER: Representante


Lista: a exigente [...]
O trao, dentro da lista, usado para definir intervalos: [0123456789] igual a [0-9] Estes intervalos podem ser usados para letras tambm: a-z, A-Z, 5-9, a-f, :-@, ...

Os intervalos respeitama ordem numrica da tabela ASCII

Como colocar o trao e os colchetes dentro da lista se eles so metacaracteres?


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: [ ][ - ]

Plataforma .Net ER: Representante


Lista: a exigente [...]
O trao, dentro da lista, usado para definir intervalos: [0123456789] igual a [0-9] Estes intervalos podem ser usados para letras tambm: a-z,a-z A-Z, 5-9,entram a-f, :-@, ... Pera! Na tabela ASCII no

Os intervalos respeitama ordem numrica da tabela ASCII

as palavras acentuadas, e agora?

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: [ ][ - ]

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 considerao a localidade.

Plataforma .Net ER: Representante


Lista negada: a experiente [^...]
No to exigente quanto a lista nem to necessitada quanto o ponto, temos a lista negada, que pelas suas ms experincias passadas, sabe o que no serve para ela casar.

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^]

Plataforma .Net ER: Quantificador


Opcional: o opcional ?
O opcional um quantificador que no esquenta a cabea, para ele pode ter ou no a ocorrncia da entidade anterior, pois ele a repete 0 ou 1 vez.

J estamos aceitando algo abrangente de forma especfica. Lembra do slide Aplicaes?

Plataforma .Net ER: Quantificador


Asterisco: o tanto faz *
Se o opcional j no esquenta a cabea, podendo ter ou no a entidade anterior, o asterisco mais tranqilo ainda, pois para ele pode ter, no ter, ou ter vrios, 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 expresso:

.*

Plataforma .Net ER: Quantificador


Mais: o tem-que-ter +
A nica diferena [do mais e do asterisco] que o mais no opcional, ento a entidade anterior deve casar pelo menos uma vez, e pode ter vrias.

Simples, no?!

Plataforma .Net ER: Quantificador


Chaves: o controle {m,m}
Aqui Chaves no o au?tor mexicano preferido de 10 entre 10 brasileiros. As chaves so a soluo para uma quantificao mais controlada, onde se pode especificar exatamente quantas repeties se quer da entidade anterior.

EX: a{1,2} a, aa b{0,2}a a, ba, bba

Plataforma .Net ER: ncora


Circunflexo: o incio ^
O nosso amigo circunflexo (ta nome comprido e chato) marca o comeo de uma linha. Nada mais.

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: ^^

Plataforma .Net Testando memria


Iremos fazer a seguir 4 exerccios simples de fixao. A resposta estar no prximo slide. Tente resolve-los antes de prosseguir.

Escreva uma expresso regular que:


1. Reconhea a palavra carro minscula, no plural, singular e em qualquer parte de um texto. 2. Reconhea a palavra casa em qualquer combinao de maiscula, minscula e em qualquer parte de um texto. 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.

Plataforma .Net Testando memria


Iremos fazer a seguir 4 exerccios simples de fixao. A resposta estar no prximo slide. Tente resolvelos antes de prosseguir. Escreva uma expresso regular que: 1. Reconhea a palavra carro minscula, no plural, singular e em qualquer parte de um texto. carros?

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.

Plataforma .Net Exerccios

Framework .Net: Aula 11 - Tera-feira

Agenda
Fundamentaes do .Net Framework
Introduo a colees Introduo a expresses lambdas aplicado a colees

Exerccios dirigidos Reviso da semana e feedback

Plataforma .Net Vetores


Vetor ou array uma estrutura de dados estticas, ou seja, criada com um nmero determinado de itens.

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

Plataforma .Net Listas


Listas uma estrutura de dados dinmicas, ou seja, criada sem saber o nmero total de itens.

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

List<String> colecao = new List<String>(); // Lista de Strings

Plataforma .Net Usando listas


Criando uma lista List<String> colecao = new List<String>(); Adicionando um valor colecao.Add("valor");

Removendo um valor colecao.Remove("valor");


Descobrindo o tamanho da lista int tamanho = colecao.Count;

Plataforma .Net Usando listas


Adicionando um valor em uma determinada posio colecao.Insert(0, "valor"); Convertendo para um array string[] novaColecao = colecao.ToArray();

Verificando se um item existe na lista bool existeItem = colecao.Contains("valor");

Plataforma .Net Percorrendo listas


Usando for for (int i = 0; i < colecao.Count; i++) { String item = colecao[i]; }

Usando foreach foreach (String item in colecao) { }

Plataforma .Net Introduo a lambda


Desde a verso 3.0 do C# utilizado um recurso extremamente til para trabalhar com colees e com linq. De forma simplista uma expresso lambda uma funo escrita de uma forma simplificada, sem nome e representada em uma instruo de uma linha. Forma bsica de uma expresso lambda: ( parmetros de entrada ) => { expresso baseada nos parmetros } Vamos ver na prtica para entendermos melhor como funciona.

Plataforma .Net Usando listas


Criando uma lista List<String> colecao = new List<String>(); Adicionando um valor colecao.Add("valor");

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

Plataforma .Net Usando listas


Criando uma lista List<Pessoa> colecao = new List<Pessoa>(); Adicionando um valor colecao.Add(new Pessoa(Fulano, Sexo.Masculino));

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

Plataforma .Net Exerccios

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

You might also like