Apostila de Lógica - EduardoR.M

download Apostila de Lógica - EduardoR.M

of 58

Transcript of Apostila de Lógica - EduardoR.M

1

Apostila de Lgica de Programao em C#

Professor Ms. Eduardo Rosalm [email protected]

(2009 - 2010)Bibliografias utilizadas:MANZANO, J. A. N. G & OLIVEIRA, J. F. Algoritmos: Lgica para Desenvolvimento de Programao de Computadores. 14 ed. So Paulo:rica, 2002. FORBELLONE, A. L. V. & EBERSPACHER, H. F. Lgica de Programao. 2 ed. So Paulo: Makron Books, 2002. ROBINSON, Simon, Professional C# Programando De programador para programador, So Paulo: Pearson Education, 2004. DAGHLIAN, Jacob, Lgica e lgebra de Boole, Ed.Atlas, 4 Ed. - SP, 1995 Apostila Tcnicas de Programao I cedida pela Profa. Dra. Elisamara de Oliveira LIMA, EDWIN, C# e .Net para desenvolvedores / Edwin Lima, Eugnio Reis. Rio de Janeiro: Campus, 2002 Curso de C# - Mdulo I Introduo ao .NET com C# - Carlos Vamberto http://www.juliobattisti.com.br/tutoriais/default.asp

ESCLARECIMENTOS Parte desta apostila foi criada utilizando-se como referncia livros e apostilas cedidas por outros professores. Qualquer problema, por favor, entre em contato. Esta apostila foi elaborada com o propsito de servir de apoio ao curso e no pretende ser uma referncia completa sobre o assunto. Para aprofundar conhecimentos, sugerimos consultar livros da rea.

2

ndice lgebra Booleana ............................................................................................................................ 4 Lgica digital .............................................................................................................................. 4 lgebra booleana ........................................................................................................................ 4 Proposies ................................................................................................................................. 5 Operao AND (conjuno) ....................................................................................................... 5 Operao OR (disjuno inclusiva)............................................................................................. 5 Operao NOT (negao) ............................................................................................................ 6 Operaes XOR, NAND e NOR ................................................................................................. 6 O Conceito de Algoritmo ................................................................................................................ 8 O que um algoritmo? ................................................................................................................ 8 Conceitos Bsicos da Programao de Computadores.................................................................. 9 Linguagens Compiladas, Linguagens Interpretadas e Modelo Hbrido ....................................... 12 Interpretadas .......................................................................................................................... 12 Compiladas ........................................................................................................................... 12 Hbridas................................................................................................................................. 13 O Conceito de Programao Estruturada.................................................................................... 14 Resposta dos Exerccios ............................................................................................................ 15 Expresso de Algoritmos ............................................................................................................... 16 Expresso de Algoritmos atravs de Diagramas e Fluxogramas ................................................. 16 Exemplo de um Fluxograma .................................................................................................. 17 Alguns smbolos utilizados em diagramas de bloco e fluxogramas:........................................ 18 Expresso de Algoritmos atravs de Linguagem de Programao .............................................. 19 Programao em C# ...................................................................................................................... 22 O que .NET ............................................................................................................................ 22 A Arquitetura .NET ................................................................................................................... 22 CLR (Commom Language Runtime) ..................................................................................... 22 CTS (Common Type System) ................................................................................................ 22 CLS (Common Language Specification)................................................................................ 22 BCL (Base Classe Library) .................................................................................................... 23 Compilando programas .NET: introduzindo a linguagem intermediria MSIL (Microsoft Intermediate Language) ......................................................................................................... 24 Compilao JIT (Just In Time) ........................................................................................... 24 VES (Virtual Execution System) ........................................................................................... 25 Gerenciamento da memria: introduzindo o GC (Garbage Collector) .................................... 25 Linguagens que suportam .NET ............................................................................................. 26 Principais vantagens da linguagem C#: .................................................................................. 26 Quando usar a .NET?............................................................................................................. 26 Estrutura bsica de um programa em C# .................................................................................... 27 Interagindo com o console ......................................................................................................... 29 Recebendo parmetros na linha de comando .............................................................................. 30 Principais Operadores................................................................................................................ 31 Variveis ................................................................................................................................... 33 Conveno PascalCasing ....................................................................................................... 33 Conveno camelCasing ........................................................................................................ 33 Palavras reservadas:............................................................................................................... 33 Declarando variveis ............................................................................................................. 34 Atribuindo valor a variveis................................................................................................... 34 Tipos de variveis .................................................................................................................. 35 Adicionando valor a uma varivel.......................................................................................... 36 Manipulando Strings ............................................................................................................. 38

3 Constantes ................................................................................................................................. 39 Saindo explicitamente da aplicao: .......................................................................................... 39 Estrutura de Deciso (IF) ........................................................................................................... 40 Estrutura de Repetio FOR ...................................................................................................... 42 Laos for infinitos ................................................................................................................. 43 Laos for aninhados............................................................................................................... 43 Laos for em decremento ....................................................................................................... 44 Estrutura de Repetio DO WHILE ........................................................................................... 44 Estrutura de Repetio WHILE ................................................................................................. 45 Vetores e Matrizes..................................................................................................................... 46 Estrutura de repetio foreach/in ............................................................................................... 48 Controle de Exceo - Bsico .................................................................................................... 49 Estruturas de dados heterogneas............................................................................................... 52 Mtodos .................................................................................................................................... 54 Declarando Mtodos .............................................................................................................. 54 Passando Parmetros para Mtodos ....................................................................................... 55 A Palavra-Chave out.............................................................................................................. 57 Escopo das variveis ................................................................................................................. 58

4

lgebra BooleanaFonte adicional: http://www.forumpcs.com.br/coluna.php?b=120830

Lgica digitalTodo o raciocnio lgico baseado na tomada de uma deciso a partir do cumprimento de determinadas condies. Inicialmente tem-se os dados de entrada e uma condio (ou uma combinao de condies). Aplica-se a condio aos dados de entrada para decidir quais so os dados de sada. A lgica digital no diferente. Mas apresenta uma peculiaridade: trabalha apenas com variveis cujos valores alternam exclusivamente entre dois estados e no admitem valores intermedirios. Estes estados podem ser representados por um e zero, sim e no, verdadeiro e falso ou quaisquer outras grandezas cujo valor possa assumir apenas um dentre dois estados possveis. Portanto, a lgica digital a ferramenta ideal para trabalhar com grandezas cujos valores so expressos no sistema binrio. Em um computador, todas as operaes so feitas a partir de tomadas de decises que, por mais complexas que sejam, nada mais so que combinaes das operaes lgicas que veremos a seguir. Para tomadas de decises mais complexas, tudo o que preciso combinar estas operaes. E para isto necessrio um conjunto de ferramentas capaz de manejar variveis lgicas. Esse conjunto de ferramentas a chamada lgebra Booleana.

lgebra booleanaA lgebra booleana recebeu seu nome em homenagem ao matemtico ingls George Boole, que a concebeu e publicou suas bases em 1854, em um trabalho intitulado An Investigation of the Laws of Thought on Which to Found the Mathematical Theories of Logic and Probabilities. O trabalho, evidentemente, nada tinha a ver com computadores digitais, j que foi publicado quase um sculo antes que eles fossem inventados. Era meramente uma tratado sobre lgica, um dos muitos exemplos em que os matemticos se adiantam ao tempo e criam com dcadas de avano as bases abstratas para uma tecnologia de ponta que s vai ser descoberta muitos anos depois. De fato, foi somente em 1938 que Claude Shannon, um pesquisador do MIT, se deu conta que a lgica booleana era a ferramenta ideal para analisar circuitos eltricos baseados em rels, os antecessores imediatos dos computadores eletrnicos digitais vlvula que por sua vez originaram os modernos computadores que empregam a eletrnica do estado slido. No cabe aqui um estudo aprofundado da lgebra booleana. Por isso abordaremos apenas os conceitos fundamentais que nos permitiro mais tarde entender como eles sero utilizados internamente nos computadores. Mas para quem quiser se aprofundar no assunto, h farto material disponvel tanto na literatura tcnica especializada quanto na Internet. Aqui, repito, ficaremos apenas nos conceitos mais gerais. A lgebra booleana semelhante lgebra convencional que conhecemos no curso secundrio, o ramo da matemtica que estuda as relaes entre grandezas examinando as leis que regulam as operaes e processos formais independentemente dos valores das grandezas, representadas por letras ou smbolos abstratos. A particularidade da lgebra booleana que ela estuda relaes entre variveis lgicas que podem assumir apenas um dentre dois estados opostos, verdadeiro ou falso, no admitindo nenhum valor intermedirio. Da mesma forma que a lgebra convencional, a lgebra booleana utiliza operaes que so executadas com suas variveis. A diferena que estas operaes somente podem agir sobre variveis lgicas, portanto so operaes lgicas. As razes pelas quais a lgebra booleana a ferramenta ideal para analisar problemas de lgica digital tornam-se evidentes assim que se tomam conhecimento de suas operaes. Da mesma forma que h apenas quatro operaes fundamentais na aritmtica, h apenas trs operaes fundamentais na lgebra booleana. Estas operaes so AND, OR e NOT.

5

Proposies uma sentena declarativa, afirmativa e que deve exprimir um pensamento de sentido completo, podendo ser escrita na forma simblica ou na linguagem usual. Ex: a) 5 > 7 b) O Mxico fica na Amrica do Norte. Dizemos que o valor lgico de uma proposio verdade se a proposio verdadeira; e falsidade se a proposio falsa. As proposies podem ser simples ou compostas. Proposio simples a que no contm nenhuma outra proposio como parte integrante de si mesma. Geralmente so indicadas por letras minsculas. Ex: a: Carlos careca. b: Corinthians o melhor time do planeta. A proposio composta formada por duas ou mais proposies relacionadas pelos conectivos E, OU, XOR, etc.., e geralmente so indicadas por letras maisculas. a: O Brasil lindo b: O Brasil o pas do futebol Ex: P = a E b ou O Brasil lindo E O Brasil o pas do futebol.

Em algumas partes desta apostila, as proposies podero tambm ser tratadas como variveis.

Operao AND (conjuno)Operao AND pode ser aplicada a duas ou mais variveis (ou proposies) que podem assumir apenas os valores verdadeiro ou falso. A operao AND resulta verdadeiro se e apenas se os valores de ambas as variveis (ex A e B) assumirem o valor verdadeiro. Tabela Verdade AND (tambm conhecido por ^ E .) A B A AND B V V V V F F F V F F F F Onde V=verdadeiro e F=Falso e A e B so duas variveis.

Ex: Se houver sol e se for feriado eu vou praia. Na frase acima, existem 2 variveis, que so se houver sol e se for feriado. Para que o sujeito v praia, as duas situaes devem ocorrer, ou seja, devem ser verdadeiras (V). Observe que na frase h o operador AND (ou E). Varivel Se houver sol (A) V V F F Varivel Se for feriado (B) V F V F Resultado vou praia (A AND B) V F F F

Operao OR (disjuno inclusiva)Operao OR tambm pode ser aplicada a duas ou mais variveis (que podem assumir apenas os valores

6verdadeiro ou falso). A operao OR resulta verdadeiro se o valor de qualquer uma das variveis A ou B assumir o valor verdadeiro.

Tabela Verdade OR (tambm conhecido por v OU +) A B A OR B V V V V F V F V V F F F Onde V=verdadeiro e F=Falso e A e B so duas variveis.

Ex: Se houver sol ou se for feriado eu vou praia. Na frase acima, existem 2 variveis, que so se houver sol e se for feriado. Para que o sujeito v praia, pelo menos uma das duas situaes deve ocorrer, ou seja, deve ser verdadeira (V). Observe que na frase h o operador OR ( OU ).

Operao NOT (negao)A operao NOT unria, ou seja, aplicvel a uma nica varivel. A operao NOT inverte o valor da varivel. Ela resulta verdadeiro se a varivel assume o valor falso e resulta falso se a varivel assume o valor verdadeiro. Pode ser representado tambm por ~. Ex: seja uma varivel A = Vou praia. NOT A = No vou praia. Se A = Verdadeiro, ento NOT A = Falso.

Operaes XOR, NAND e NORDestas trs operaes fundamentais podem ser derivadas mais trs operaes adicionais, as operaes NAND, NOR e XOR (ou OR exclusivo).

XOR (disjuno exclusiva) A operao, XOR ou OR exclusivo um caso particular da funo OR. Ela expressa por: A XOR B. A operao XOR resulta verdadeiro se e apenas se exclusivamente uma das variveis A ou B assumir o valor verdadeiro (uma outra forma, talvez mais simples, de exprimir a mesma idia : a operao XOR resulta verdadeiro quando os valores da variveis A e B forem diferentes entre si e resulta falso quando forem iguais). Tabela Verdade XOR A B A XOR B V V F V F V F V V F F F Onde V=verdadeiro e F=Falso e A e B so duas variveis.

Ex: Para voc chegar sada, voc deve escolher entre o caminho direita ou o caminho esquerda.

7Na frase acima, existem 2 variveis, que so caminho direita e caminho esquerda. Para chegar sada, apenas uma das variveis deve ser verdadeira. Se ambas forem verdadeiras ou se ambas forem falsas, o resultado final ser falso. NAND A operao NAND obtida a partir da combinao das operaes NOT e AND usando a relao: A NAND B = NOT (A AND B). A operao NAND resulta falso se e apenas se os valores de ambas as variveis A e B assumirem o valor verdadeiro. NOR A operao NOR obtida a partir da combinao das operaes NOT e OR usando a relao: A NOR B = NOT (A OR B). A operao NOR resulta verdadeiro se e apenas se os valores de ambas as variveis A e B assumirem o valor falso.

Expresses Algbricas As regras bsicas da lgebra booleana so simples. As operaes so apenas seis (NOT, AND, OR, NAND, NOR E XOR). Os valores possveis, tanto para as variveis quanto para as expresses, so apenas dois (V ou F). No entanto, expresses obtidas combinando operaes que envolvem um grande nmero de variveis podem atingir um grau de complexidade notvel. No obstante, sua avaliao sempre feita decompondose a expresso em operaes elementares respeitando-se a ordem de precedncia indicada pelos parnteses, avaliando as operaes elementares e combinando-se seu resultado. A avaliao pode ser trabalhosa, mas no difcil. Ex: Sendo A e B duas variveis que possuem respectivamente os valores V e F, calcule as expresses abaixo: Lembrando que: A^B V^F F ^= E v = OU (A ^ B ) v B ( V ^ F) v F F v F F ~ = NOT ~( (B v A) ^ A) ~( (F v V) ^ V) ~( V ^ V) ~V F

Exerccios: Sejam P e Q e R variveis cujos valores so respectivamente V, V e F, calcule as expresses abaixo:

a) b) c) d) e) f)

(P ^ Q) ^ ~R ~(Q ^ Q) v ~(P v R) P ^ ~( ( Q v ~P) ^ (R XOR ~P) ) (Q XOR R ) ^ ~( R v Q) (R v ~R) ^ ~( ~(R XOR P) ^ ~Q) ~(P ^Q) v (~P XOR Q) ^ (R v ~Q)

8

O Conceito de AlgoritmoEm nosso dia-a-dia executamos mecanicamente uma srie de aes que so seguidas seqencialmente e que provocam o acontecimento de algo. Por exemplo, temos um trajeto freqente ao sairmos diariamente de casa em direo ao nosso trabalho ou nossa universidade que, sempre que seguido, nos leva ao nosso destino. Isso um algoritmo. Em outras palavras, um algoritmo descreve eventos com durao finita, que envolvem um conjunto de objetos cujas caractersticas podem ser alteradas, atravs de aes que ocorrem seqencialmente.

O que um algoritmo?"Programar construir algoritmos" "Programa = Algoritmo + Estruturas de Dados" "No processo de construo de programas a formulao do algoritmo e a definio das estruturas de dados esto intimamente ligadas" Num algoritmo podem-se observar os seguintes aspectos: Ao: evento que ocorre num perodo de tempo finito Estado: propriedades de um objeto numa dada situao Processo: seqncia temporal de aes Padro de comportamento: toda vez que seguido, um evento ocorre

Exemplo de um algoritmo: Algoritmo para fazer " batatas fritas para o jantar ""Traga a cesta com batatas da despensa" ; "Traga a panela do armrio"; Coloque leo na panela; Se "a roupa clara ento "coloque o avental"; Enquanto "n de batatas insuficiente para o nmero de pessoas" "descasque as batatas"; Pique as batatas; Esquente o leo da panela; "Frite as batatas na panela"; Escorra o excesso de leo das batatas fritas; "Coloque as batatas fritas numa vasilha com papel absorvente". faa

Apesar de muito simples, algumas observaes importantes podem ser notadas neste algoritmo: tempo verbal est na forma imperativa (faa, traga, frite, etc); H um seqenciamento das aes, que esto separadas por um ponto-e-vrgula ;; avental no usado toda vez: existe um motivo para coloc-lo, ou seja, h uma condio para que o avental seja colocado; nmero de batatas descascadas varia; a ao de descascar uma batata repete-se at que a condio de parada (ser suficiente para alimentar as pessoas que iro jantar) seja alcanada;

A ordem das aes importante: primeiro descasca-se a batata, pica-se a batata, para depois fritla...

Exemplos de algoritmos conhecidos:

9

- Qual o algoritmo que voc descreve para vir estudar? - Qual o algoritmo para se fazer uma feijoada?Apesar de receitas culinrias e trajetos rotineiramente percorridos encaixarem-se perfeitamente no conceito inicial de algoritmo, no nosso curso estamos interessados num tipo de algoritmo especial, que seja capaz de ser executado por um computador. Para tanto, necessrio que identifiquemos problemas do mundo real que possam ser traduzidos em aes primitivas finitas e dos quais se possa extrair um

padro

de comportamento.Qual o padro de comportamento utilizado para gerar as seqncias?

1, 5, 9, 13, 17, 21, 25 ... 1, 1, 2, 3, 5, 8, 13, 21, 34 ...Os dois exemplos anteriores so problemas do mundo real que, por serem finitos (ou para os quais se possa determinar uma condio de parada) e por possurem um padro de comportamento, podem ser resolvidos atravs de um programa de computador. No entanto, antes de se chegar ao programa de computador, o 1 passo fazer um Definio de algoritmo:

algoritmo que seja capaz de solucionar o problema em questo....

Um algoritmo a descrio de um padro de comportamento, expresso em termos de um repertrio bem definido e finito de aes primitivas que podem ser executadasNum algoritmo distinguem-se claramente dois aspectos:

-

Aspecto esttico: texto - Aspecto dinmico: sua execuo

(a partir de valores iniciais)

O curso de Algoritmos , na realidade, um curso de Programao de Computadores para alunos que iniciam cursos superiores na rea de Informtica. Para comearmos a construir algoritmos e fazermos nossos primeiros programas de computador, necessrio que o aluno domine uma srie de conceitos bsicos, que so apresentados a seguir, a comear pelo prprio computador!

Conceitos Bsicos da Programao de Computadores Computador: uma mquina capaz de seguir uma espcie dealgoritmo chamado programa que est escrito em linguagem de mquina.

Linguagem de mquina: internamente o computador executa uma srie de instrues que ficam armazenadas em sua memria principal em cdigo binrio, ou seja, em linguagem de mquina (zeros (0) e uns (1) que so os dgitos binrios ou bits).Linguagem de alto nvel: para escrever os programas de computador, os programadores utilizam linguagens que esto mais prximas da linguagem humana, que so chamadas de linguagens de alto nvel ou simplesmente linguagens de programao. Exemplos de linguagens de alto nvel so Pascal, C, C++, Basic, Fortran, dentre muitas outras.

10 Linguagem de montagem: h programas de computador que precisam interferir diretamente nohardware da mquina para permitir a execuo de funes especficas como as oferecidas por sistemasoperacionais, por exemplo. Neste caso, os programadores utilizam as linguagens de montagem ou linguagens assembly, que esto muito prximas da linguagem de mquina e mais distantes das linguagens de programao, sendo por isso chamadas de linguagem de baixo nvel. A figura abaixo mostra a relao entre as linguagens discutidas anteriormente. Numa ponta est a linguagem de mquina e no outro extremo esto as linguagens humanas. Quanto mais prxima da linguagem de mquina, mais de baixo nvel a linguagem; em contrapartida, quanto mais prxima das linguagens humanas, mais alto nvel. As linguagens de programao fazem uma espcie de ponte entre a linguagem binria ou linguagem que o computador entende e a linguagem que ns humanos utilizamos.

Relao entre linguagens de baixo e de alto nvel Compilador: permite que os programadores utilizem linguagens de alto nvel para escrever os programas de computador, pois se encarrega de traduzi-los para linguagem de mquina. O compilador um programa que traduz uma determinada linguagem de programao para linguagem de mquina. Desta forma, existem diversos compiladores especficos para cada uma das linguagens de programao e especficos para cada sistema operacional, conforme ilustra a figura abaixo. Um compilador C para o sistema Windows 98 (compilador X) diferente de um compilador C para o sistema Unix (compilador Y), embora a linguagem de programao seja a mesma (linguagem de alto nvel). O compilador de linguagem de montagem chamado de assembler.

Programa escrito em linguagem de alto nvel

Compilador X

Compilador Y

Compilador Z

Programa em Linguagem de Mquina para o Computador X

Programa em Linguagem de Mquina para o Computador Y

Programa em Linguagem de Mquina para o Computador Z

Os compiladores so especficos para cada linguagem e para cada sistema operacional

11O ciclo completo da elaborao do algoritmo execuo de um programa de computador pode ser visto na figura abaixo. Cada um dos componentes deste ciclo explicado a seguir.

algoritmo

editor

cdigo fonte

compilador

cdigo objeto

arquivos de biblioteca

linker

executvel

Do algoritmo execuo de um programa de computador Algoritmo: estrutura do programa; instrues que descrevem a lgica do programa Editor de texto: permite que o cdigo fonte do programa seja editado em um arquivo-fonte. Algunscompiladores tm editores com ambiente de programao integrados, como o caso do Turbo Pascal e do Turbo C.

Cdigo fonte: conjunto de comandos escritos na linguagem de programao escolhida (como Pascal ou C). O cdigo fonte fica armazenado no arquivo-fonte em formato ASCII. (O arquivo-fonte possui a extensorelativa linguagem de programao usada, por exemplo,

.pas (Pascal), .c (C), .cpp (C++)).

Compilador: l o cdigo fonte do programa e cria um outro arquivo em linguagem binria ou demquina.

Cdigo objeto: arquivo com o programa em linguagem de mquina (o arquivo-objeto possui a extenso

.obj para a maioria das linguagens de programao).Arquivos de biblioteca: contm funes j compiladas que podem ser utilizadas no programa. Linker: cria um programa executvel a partir de arquivos-objeto e dos arquivos de biblioteca. Cdigo executvel: programa que pode ser executado no computador (o arquivo-executvel possui aextenso

.exe).

12

Linguagens Compiladas, Linguagens Interpretadas e Modelo HbridoFonte: http://rcs.comp.googlepages.com/POO-Capitulo02-ParadigmasdeProgramao.pdf

Linguagens de programao so comumente divididas em linguagens interpretadas e compiladas. J existem algumas de nova gerao com conceito hbrido.

InterpretadasComo o prprio nome diz, so interpretadas linha a linha em tempo de execuo. Nessa categoria normalmente o cdigo armazenado como texto puro sendo transformado em instrues apenas quando so executados, dessa forma, os cdigos so expostos a possveis indivduos mal-intencionados. Tm-se como exemplos de linguagens interpretadas: Perl, ASP (Active ServerPages), JavaScript, PHP e Basic.

Esquema da execuo de um cdigo fonte PHP. O cdigo passa pelo interpretador e enviado aos browsers escritos para os dois Sistemas Operacionais (Windows e Linux)

CompiladasO compilador traduz o programa fonte apenas uma vez para linguagem compilada (executvel) no importando quantas vezes o programa ir ser executado. No processo de compilao, o cdigo fonte submetido anlise sinttica, lxica e semntica. Caso algum erro seja encontrado, o arquivo executvel no gerado, e os erros so apontados pelo compilador. Muitos erros so eliminados durante o processo de compilao como, por exemplo, os seguintes erros sintticos: Caracteres invlidos; Nomes de variveis, mtodos e classes invlidas; Seqncia de comandos invlidos. Alm de erros semnticos, incluindo: Tipos e quantidade de parmetros, retorno de funes etc; Atribuio de um valor alfanumrico para uma varivel inteira. Por outro lado, erros lgicos no so capturados no processo de compilao, gerando algum tipo de erro apenas ao ser executado, como por exemplo: Diviso por zero, operadores logicamente errados, etc; Como exemplos dessa categoria de linguagens tm-se o Pascal e C/C++.

13

Esquema de criao de um programa em C++. O mesmo cdigo-fonte passa por dois compiladores (um para Windows e outro para Linux) e d origem a dois tipos de executveis um para cada Sistema Operacional

HbridasAs plataformas que implantam o conceito hbrido tm como objetivo a segurana das verificaes existentes em um processo de compilao e a portabilidade dos ambientes interpretados. O processo adotado para implementao do modelo hbrido baseia-se na utilizao de uma representao intermediria denominada bytecode, que gerada pelo compilador e interpretada no momento da execuo. A plataforma Java utiliza essa abordagem, contendo os seguintes passos em seu processo de desenvolvimento. Arquivos com os cdigos-fonte so armazenados como texto simples (.java); Aps a compilao dos fontes (.java), so gerados os bytecodes (.c1ass); Os bytecodes (.class) so utilizados para executar a aplicao, sendo interpretados pela Mquina Virtual Java (JVM). Outros ambientes tambm adotam essa codificao intermediria por meio de bytecodes, como o caso do Microsoft.NET.

14Esquema de criao de um programa escrito em Java. O Cdigo-Fonte passa pelo compilador e d origem a um nico Byte Code. Este Byte Code interpretado pelas Mquinas Virtuais Java (VMs) instaladas em cada um dos trs tipos de Sistema Operacional Windows, Linux e Celular. Cada VM foi escrita exclusivamente para aquele Sistema Operacional em particular.

O Conceito de Programao EstruturadaPara conseguirmos construir programas de computador, necessrio cumprir as 5 etapas bsicas da programao, das quais a confeco do algoritmo extremamente importante. As 5 etapas da programao de computadores so: 1. Identificao de um problema do mundo real 2. Confeco do algoritmo 3. Teste do algoritmo 4. Confeco do programa de computador 5. Execuo do programa no computador Para realizarmos este ciclo de etapas com sucesso, quer dizer, para conseguirmos fazer programas de computador com qualidade e confiveis, muito importante a utilizao de tcnicas programao como a programao estruturada. A programao estruturada uma metodologia de projeto e desenvolvimento, que pretende: - facilitar a escrita; - facilitar o entendimento; - permitir a verificao; - facilitar a alterao e a manuteno dos programas de computador O principal objetivo da metodologia de programao estruturada reduzir a complexidade dos problemas.

"A arte de programar consiste na arte de organizar e dominar a complexidade. A metodologia de programao estruturada, quando utilizada, induz o programador a produzir programas:confiveis de fcil manutenibilidade flexveis documentados legveis

Exemplo de Programa Estruturado Programa 1 (no estruturado) read idade Programa 2 (estruturado) leia(IDADE); se IDADE > 17 //pessoa tem mais de 17 anos ento imprima (Voc um adulto) seno se IDADE > 12 //pessoa tem entre 13 e 17 anos ento imprima (Voc um adolescente) seno se IDADE > 8 //pessoa entre 9 e 12 an ento imprima (Voc pr-adolescente)

if (idade > 17) goto 3if (idade > 12) goto 2 if (idade > 8) goto 1 print Voc uma criana goto 4 print Voc pr-adolescente

1 2 3 4

goto 4print Voc um adolescente goto 4 print Voc um adulto continue

seno imprima (Voc uma criana);

- Os dois programas fazem a mesma coisa. Tente entender o que eles fazem. Qual dos dois programas o ajudou mais a entender a sua lgica?

15- Com certeza o programa 2 facilitou muito mais o seu entendimento... E o motivo principal que o programa 2 um programa estruturado e o programa 1 no estruturado. Veja as principais diferenas entre eles: Programa no estruturado - uso excessivo de gotos Programa estruturado - no usa gotos

(goto um comando de desvio incondicional, e seu uso muito indesejvel pois quebra o fluxo de execuo seqencial das instrues do programa)difcil de entender ilegvel difcil de testar fluxo de controle no seqencial no usa comentrios fcil de entender legvel de fcil teste fluxo de controle seqencial usa comentrios

(faa alguns testes com idades diferentes e veja qual dos dois programas mais fcil de ser testado...)

(os comentrios no fazem parte do cdigo, mas facilitam o seu entendimento e contribuem para a documentao do cdigo implementado)

Resposta dos ExercciosQual o padro de comportamento utilizado para gerar as seqncias? 1, 5, 9, 13, 17, 21, 25 ... A srie de nmeros comea com 1 (primeiro termo) Para se gerar o segundo termo soma-se 4 ao primeiro nmero Para se gerar qualquer um dos outros termos da srie, basta somar 4 ao nmero imediatamente anterior Esta uma srie infinita. Seu fim deve ser determinado por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos da srie menores que 100

1, 1, 2, 3, 5, 8, 13, 21, 34 ...

A srie de nmeros comea com 1 (primeiro termo) O segundo termo tambm 1 Para se gerar qualquer um dos outros termos da srie, basta somar os dois termos imediatamente anteriores Exemplos: 1 (primeiro termo) + 1 (segundo termo) =2 (terceiro termo) 1 (segundo termo) + 2 (terceiro termo) = 3 (quarto termo) 2 (terceiro termo) + 3 (quarto termo) = 5 (quinto termo) Esta uma srie infinita, conhecida como srie de Fibonacci. Seu fim deve ser determinado por uma condio do tipo gerar os 10 primeiros termos da srie ou gerar todos os termos da srie menores que 100.

16

Expresso de Algoritmos oOs algoritmos podem ser expressos atravs de diagramas, atravs de pseudo-linguagens ou atravs da prpria linguagem de programao. Vamos examinar cada uma destas trs opes e, no final deste captulo, vamos optar por uma delas para que possamos comear a fazer nossos primeiros algoritmos!

Expresso de Algoritmos atravs de Diagramas e FluxogramasA utilizao de diagramas para a expresso de algoritmos foi bastante utilizada at a dcada de 1980. Diagramas de Chapin e fluxogramas foram os principais mtodos utilizados, ento. Nos mtodos baseados em diagramas, uma grande variedade de formas geomtricas como quadrados, retngulos, hexgonos, pentgonos, etc., so utilizadas para representar as instrues de leitura e impresso de dados, assim como os comandos condicionais, de repetio, etc. Alm disso, uma srie de regras para a disposio dessas formas e/ou setas para representar o seqenciamento das instrues fazem parte desses mtodos. Apesar de terem sido utilizados largamente pelas primeiras geraes de programadores, estes mtodos apresentam uma srie de inconvenincias como: O programador tem que memorizar todas as formas geomtricas e conhecer as regras de interrelacionamento entre elas; O programador perde um tempo considervel para fazer e refazer desenhos, tendo que possuir diversas rguas com os smbolos dos diagramas; Para algoritmos muito grandes, os desenhos comeam a ocupar muitas pginas, tornando impraticvel a visualizao de toda a soluo; A memorizao de regras de expresso desvia a ateno do programador que no tem apenas de se concentrar na lgica do problema, como seria desejvel, mas tem as preocupaes adicionais de elaborar desenhos e consultar regras e regras... Alm de todos os inconvenientes citados, que de longe esgotam os seus problemas, os mtodos baseados em diagramas se distanciam muito do alvo da programao que a expresso da lgica algortmica na prpria linguagem de programao! Alm disso, esses mtodos no so nem um pouco intuitivos... veja a figura abaixo e tente descobrir o que o programa faz... sem muito esforo, se for possvel:

Algoritmo expresso atravs de um diagrama de Chapin (desenvolvido por Nassi Shneiderman e ampliado por Ned Chapin) tambm conhecido como diagrama N-S.

17 Exemplo de um Fluxograma A figura abaixo mostra um exemplo de um algoritmo expresso atravs de um fluxograma. Observe a existncia de diferentes formas geomtricas para as diferentes instrues e o uso de setas para representar o fluxo dos dados. Voc seria capaz de dizer o que este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este algoritmo faz a mesma coisa que o expresso pelo diagrama de Chapin mostrado na figura anterior).

Menor

Algoritmo expresso atravs de um Fluxograma

18 Alguns smbolos utilizados em diagramas de bloco e fluxogramas:

Terminal: Indica o incio e o fim do diagrama. Terminal: idem acima.

Seta: Indica o sentido do fluxo.

Processamento: Indica algum tipo de clculo/processamento.

Teclado: utilizado para informar dados ao computador.

Teclado: idem acima.

Vdeo: utilizado para exibir algo no vdeo.

Vdeo: idem acima.

Deciso: utilizado para indicar uma deciso a ser tomada, indicando os desvios.

Conector: utilizado quando preciso particionar o diagrama. Quando ocorrer mais de uma partio, colocada uma letra ou nmero para dentro do smbolo de conexo para identificar os pares de ligao.

Conector: especfico para indicar conexo do fluxo em outra pgina.

Expresso de Algoritmos atravs de Pseudo-linguagemUma pseudo-linguagem uma notao para expresso de algoritmos para ser utilizada nas 3 primeiras etapas da programao: identificao de um problema do mundo real, confeco e teste do algoritmo. apresentada na forma de portugus estruturado. Embora seja uma pseudo-linguagem, possui estrutura, sintaxe e semntica semelhantes s de uma linguagem de programao. A principal diferena entre a pseudo-linguagem e a linguagem de programao que a primeira no possui um compilador. Isso significa que possvel expressar o raciocnio algortmico utilizando-se uma pseudo-linguagem, mas o programa no pode ser executado no computador.

19So muitas as vantagens de se utilizar uma pseudo-linguagem para escrever algoritmos: uma linguagem independente de mquina; o programador pensa somente no problema a ser resolvido sem se preocupar com possveis restries do compilador ou do hardware (computador); O programador tem que conhecer a sintaxe, a semntica e a estrutura da pseudo-linguagem, mas tem total liberdade para criar novos comandos ou usar instrues em alto nvel (ou em forma de frases): por um lado ele vai se acostumando com a rigidez da sintaxe das linguagens de programao, mas por outro lado, tem a liberdade de expressar seu raciocnio sem esbarrar em limitaes de contexto; Uma vez estando pronto o algoritmo na pseudo-linguagem, a sua implementao no computador (etapas 4 e 5 da programao: confeco e execuo do programa) fica muito facilitada, pois toda a lgica j foi desenvolvida e testada e somente uma traduo para a linguagem de programao-alvo se faz necessria. Veja o exemplo de um algoritmo escrito na pseudo-linguagem PortuC:

/* Este programa seleciona o menor nmero em uma seqncia de nmeros inteiros */ int valor, menor;

principal( ) { imprima (Fornea um nmero inteiro: ); leia (%i, &valor); menor = valor; enquanto (valor != -1) { se (valor < menor) menor = valor; imprima (Fornea um nmero inteiro(1 para terminar): leia (%i, &valor); } imprima(O menor valor lido foi: %i , menor); }

);

Algoritmo expresso na pseudo-linguagem de PortuCA acima mostra um algoritmo expresso na pseudo-linguagem PortuC. Observe a estrutura do algoritmo: comea com um comentrio dizendo o que o algoritmo faz, tem a declarao das variveis e depois vem a seo principal ( ) em que so apresentadas as instrues contidas entre o { (incio) e } (fim) do algoritmo. Voc seria capaz de dizer o que este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este algoritmo faz a mesma coisa que o expresso nas figuras anteriores). Um exerccio interessante para voc fazer agora, seria visitar os exemplos deste algoritmo escritos no diagrama de Chapin e no fluxograma e compar-los com o PortuC... Diga-me qual deles mais fcil de entender? Qual dessas formas de expresso de algoritmos voc escolheria?

Expresso de Algoritmos atravs de Linguagem de ProgramaoExpressar um algoritmo atravs de uma linguagem de programao o objetivo, a meta do programador, com certeza. Uma linguagem de programao permite, alm da expresso do raciocnio algortmico, a sua execuo no computador (por causa do compilador, com j aprendemos). Existem diversas linguagens de programao. Cada uma pode ser mais adequada resoluo de problemas especficos, e recebem alguns rtulos por isso, como linguagens para aplicaes cientficas, linguagens para desenvolvimento de software bsico, linguagens para utilizao intensiva de recursos grficos, para manipulao de bancos de dados, programao para

20 Internet, etc, etc. H tambm as linguagens para o ensino de programao! Veja a figura a seguir. um cdigo escrito em Pascal.PROGRAM MenorValor; {Este programa seleciona o menor nmero em uma seqncia de nmeros inteiros} VAR BEGIN WRITE(Fornea um nmero inteiro: ); READLN(Valor); Menor := Valor; WHILE Valor -1 DO BEGIN IF Valor < Menor THEN Menor := Valor; WRITE(Fornea um nmero inteiro (flag=-1): ); READLN(Valor); END; {while} WRITELN(O menor valor lido foi: , Menor); END. Valor, Menor: INTEGER;

Algoritmo expresso na Linguagem de Programao Pascal A figura acima mostra um algoritmo expresso na linguagem de programao Pascal, ou seja, j um programa de computador. Observe a estrutura do programa: comea com PROGRAM, depois tem a seo VAR na qual as variveis so declaradas e depois vm as instrues contidas entre o BEGIN (incio) e o END. (fim.). Voc seria capaz de dizer o que este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este programa faz a mesma coisa que os exemplos anteriores). Agora observe o exemplo de um programa escrito na linguagem de programao C.

/* Este programa seleciona o menor nmero em uma seqncia de nmeros inteiros */ #include int valor, menor;

void main (void) { printf (\n Fornea um nmero inteiro: ); scanf (%i, &valor); menor = valor; while (valor != -1) { if (valor < menor) menor = valor; printf(\nFornea um nmero inteiro (1 para terminar): scanf (%i, &valor); } printf (O menor valor lido foi: %i , menor); }

);

Algoritmo expresso na Linguagem de Programao C

21A figura acima mostra um algoritmo expresso na linguagem de programao C, ou seja, tambm um programa de computador. Observe a estrutura do programa: comea com um comentrio, depois tem a incluso de uma biblioteca de funes, depois a declarao das variveis e em seguida vem a seo main na qual as instrues do programa esto contidas entre o { (incio) e o } (fim). Voc seria capaz de dizer o que este algoritmo faz? Quais as variveis que ele utiliza e de que tipo bsico elas so? (Dica: este programa faz a mesma coisa que o expresso pelo diagrama de Chapin, pelo fluxograma e pelo programa Pascal mostrados anteriormente). O programa traz um comentrio dizendo explicitamente o que ele faz. Portanto, garanto que voc conseguiu responder primeira pergunta. Com relao s variveis que o programa utiliza e seu tipo bsico, observe a declarao int valor, menor; no programa. H duas variveis ali declaradas: valor e menor... o tipo bsico int ... um pouquinho de imaginao e int = inteiro! Que tal voc comparar o cdigo C com o cdigo Pascal? Semelhanas? Qual dos dois lhe pareceu mais fcil de entender? Bem, se sua resposta foi o cdigo Pascal, digo-lhe que o Pascal tem o "rtulo" de linguagem mais adequada ao ensino de programao... Se sua resposta foi o cdigo C, saiba que uma linguagem que foi criada para ser utilizada por programadores experientes... Mas... se voc teve dificuldade de entender ambos os cdigos, no se preocupe! O curso est apenas comeando e h muito que se aprender de lgica de programao! Garanto que no final do curso este programa vai parecer muito, muito fcil para voc! Apesar do Pascal ter se consagrado como uma linguagem adequada para o ensino da programao aos estudantes que a iniciam, ou seja, como primeira linguagem de programao, a linguagem C, antes restrita comunidade cientfica, ganhou uma popularidade inquestionvel na dcada de 1990, que se estende aos dias atuais, pois a base de novas linguagens e paradigmas. Em funo disto, a linguagem C passou a ser alvo do interesse dos estudantes. A resistncia em utiliz-la como primeira linguagem de programao pelos professores se deveu, em parte, ao fato de seus criadores, Dennis Ritchie e Brian Kernighan, terem afirmado que C retm a filosofia bsica de que os programadores sabem o que esto fazendo1. Bem, se considerarmos que programadores iniciantes no tm condies de saber com segurana o que esto fazendo, exatamente pelo fato de serem inexperientes, a adoo da linguagem seria realmente questionvel. No entanto, a utilizao da Informtica evoluiu de tal forma que j no ensino mdio, em muitas escolas brasileiras, so ensinadas aos estudantes noes bsicas de programao. Alm disso, a adoo de um mtodo adequado e coerente para o ensino da programao de computadores pode atuar como um facilitador do processo de aprendizagem, permitindo que uma linguagem mais complexa, como o C, possa ser ensinada sem oferecer obstculos aprendizagem.

22

Programao em C#O que .NET.NET uma plataforma de software que conecta informaes, sistemas, pessoas e dispositivos. A plataforma .NET conecta uma grande variedade de tecnologias de uso pessoal,de negcios, de telefonia celular a servidores corporativos, permitindo assim, o acesso rpido a informaes importantes onde elas forem necessrias e imprescindveis. Desenvolvido sobre os padres de Web Services XML, o .NET possibilita que sistemas e aplicativos, novos ou j existentes, conectem seus dados e transaes independente do sistema operacional(SO) instalado, do tipo de computador ou dispositivo mvel que seja utilizado e da linguagem de programao que tenha sido utilizada na sua criao. O .NET um "ingrediente" sempre presente em toda a linha de produtos da Microsoft, oferecendo a capacidade de desenvolver, implementar, gerenciar e usar solues conectadas atravs de Web Services XML, de maneira rpida, barata e segura. Essas solues permitem uma integrao mais gil entre os negcios e o acesso rpido a informaes a qualquer hora, em qualquer lugar e em qualquer dispositivo.

A Arquitetura .NETVamos falar um pouco da arquitetura de .NET e os seus principais componentes.

CLR (Commom Language Runtime)O CLR, ou tempo de execuo compartilhado, o ambiente de execuo das aplicaes .NET. Como o leitor j deve ter atentado, as aplicaes .NET no so aplicaes Win32 propriamente ditas (apesar de executarem no ambiente Windows), razo pela qual o runtime Win32 no sabe como execut-las. O Win32, ao identificar uma aplicao .NET, dispara o runtime .NET que, a partir desse momento, assume o controle da aplicao no sentido mais amplo da palavra, porque, dentre outras coisas, ele quem vai cuidar do gerenciamento da memria via um mecanismo de gerenciamento de memria chamado Garbage Collector (GC) ou coletor de lixo, acerca do qual falaremos mais tarde. Esse gerenciamento da memria torna os programas menos susceptveis a erros. Mais ainda, o CLR como seu prprio nome o diz, compartilhado e, portanto, no temos um runtime para VB.NET, outro para C# etc. o mesmo para todo mundo.

CTS (Common Type System)OCTS, ou Sistema Comum de Tipos, que tambm faz parte do CLR, define os tipos suportados por .NET e as suas caractersticas. Cada linguagem que suporta .NET tem de, necessariamente, suportar esses tipos. Apesar de que a especificao no demanda que todos os tipos definidos no CTS sejam suportados pela linguagem, esses tipos podem ser um subconjunto do CTS, ou ainda um superconjunto. Um conjunto de classes bsicas que define todos os tipos implementado na CTS. Por exemplo: um tipo Enum deve derivar da classe System.Enum e todas as linguagens devem implementar o tipo Enum dessa forma. Todo tipo deriva da classe Object, porque em .NET tudo um objeto e, portanto, todos os tipos devem ter como raiz essa classe. E dessa forma que os diversos tipos nas diversas linguagens so implementados, obedecendo s regras definidas no CTS. Na .NET, e em C# conseqentemente, todos os tipos derivam de uma raiz comum: a classe Object, o que equivale a dizer que todos os tipos so objetos, por definio.

CLS (Common Language Specification)O CLS, ou Especificao Comum da Linguagem, um subconjunto do CTS, e define um conjunto de regras que qualquer linguagem que implemente a .NET deve seguir a fim de que o cdigo gerado resultante da compilao de qualquer pea de software escrita na referida linguagem seja perfeitamente entendido pelo

23runtime .NET. Seguir essas regras um imperativo porque, caso contrrio, um dos grandes ganhos do .NET, que a independncia da linguagem de programao e a sua interoperabilidade, fica comprometido. A grosso modo, dizer que uma linguagem compatvel com o CLS significa dizer que mesmo quando esta sintaticamente diferente de qualquer outra que implemente .NET, semanticamente ela igual, porque na hora da compilao ser gerado um cdigo intermedirio (e no cdigo assembly dependente da arquitetura do processador) equivalente para duas peas de cdigo iguais, porm escritas em linguagens diferentes. importante entender esse conceito para no pensar que o cdigo desenvolvido em C# no pode interagir com cdigo desenvolvido em VB ou outras linguagens, porque mesmo estas sendo diferentes, todas so compatveis com o CLS.

BCL (Base Classe Library)Como era de se esperar, uma plataforma que promete facilitar o desenvolvimento de sistemas precisa ter uma biblioteca de classes bsica que alavanque a simplicidade e a rapidez no desenvolvimento de sistemas. este o objetivo da BCL (Biblioteca de Classes Base), oferecer ao desenvolvedor uma biblioteca consistente de componentes de software reutilizveis que no apenas facilitem, mas tambm que acelerem o desenvolvimento de sistemas. Na BCL encontramos classes que contemplam desde um novo sistema de janelas a bibliotecas de entrada/sada, grficos, sockets, gerenciamento da memria etc. Esta biblioteca de classes organizada hierarquicamente em uma estrutura conhecida como namespace. Ao desenvolver um componente de software reusvel, este precisa ser estruturado em um namespace para que possa ser usado a partir de um outro programa externo. A seguir mostramos uma tabela com alguns dos principais namespaces que fazem parte da BCL:

24

Tabela com alguns dos principais namespaces que fazem parte da BCL.

Compilando programas .NET: introduzindo a linguagem intermediria MSIL (Microsoft Intermediate Language)A MSIL ou simplesmente IL a linguagem intermediria para qual interpretado qualquer programa .NET, independente da linguagem em que este for escrito. Essa traduo feita para cdigo intermedirio (como em JAVA com os byte codes) sintaticamente expresso na IL. Por sua vez, qualquer linguagem .NET compatvel, na hora da compilao, gerar cdigo IL e no cdigo assembly especfico da arquitetura do processador onde a compilao do programa efetuada, conforme aconteceria em C++ ou Delphi, por exemplo. E por que isso? Isso acontece para garantir duas coisas: a independncia da linguagem e a independncia da plataforma (arquitetura do processador). A MSIL a linguagem intermediria para qual interpretado qualquer programa .NET na hora da compilao, independente da linguagem em que este for escrito. Pelo dito acima, podemos afirmar que .NET, apesar de inicialmente estar sendo desenhada para a plataforma Microsoft, uma arquitetura portvel tanto em termos de linguagem de programao quanto no nvel da arquitetura do processador, dado que o cdigo gerado pode ser interpretado para a linguagem assembly da plataforma host na hora da execuo, sem necessidade de recompilao de cdigo-fonte.

Compilao JIT (Just In Time)Um compilador JIT, tambm conhecido como JITTER, converte instrues IL para instrues especficas da arquitetura do processador onde a aplicao .NET est sendo executada. Na plataforma .NET existem trs diferentes tipos de JITTER: Pr-JIT: Compila de uma s vez todo o cdigo da aplicao .NET que est sendo executada e o armazena no cache para uso posterior. Econo-JIT: Este tipo de compilador usado em dispositivos como handhelds onde a memria um recurso precioso. Sendo assim, o cdigo compilado sob demanda, e a memria alocada que no est em uso liberada quando o dispositivo assim o requer. Normal-JIT: O Normal-JIT compila o cdigo sob demanda e coloca o cdigo resultante no cache, de forma que esse cdigo no precise ser recompilado quando houver uma nova invocao do mesmo mtodo.

25 VES (Virtual Execution System)O processo de compilao acontece num ambiente chamado de Sistema de Execuo Virtual (VES), e aqui onde o JITTER ativado quando uma aplicao .NET chamada. O JITTER ativado a partir do runtime do Win32, passando o controle para o runtime .NET; aps isso, a compilao do PE efetuada e s ento o cdigo assembly prprio da arquitetura do processador gerado para que a aplicao possa ser executada. O diagrama a seguir ilustra todo o processo de execuo de uma aplicao, desde a gerao das instrues IL em tempo de compilao, at a gerao do cdigo assembly especfico da plataforma de execuo.

Processo de execuo de uma aplicao.

Gerenciamento da memria: introduzindo o GC (Garbage Collector)O gerenciamento da memria efetuado pelo runtime, permitindo que o desenvolvedor se concentre na resoluo do seu problema especfico. O que diz respeito ao sistema operacional, como o gerenciamento da memria, feito pelo runtime. Como isso efetuado? medida que uma rea de memria necessria para alocar um objeto, o GC ou coletor de lixo (Garbage Collector) realizar essa tarefa, assim como a liberao de espaos de memria que no estiverem mais em uso. Para os que no trabalham com linguagens de programao como C ou C++, que permitem o acesso direto memria heap via ponteiros, essa uma das maiores dores de cabea que os programadores sofrem, ora por fazer referncia a espaos de memria que no foram alocados, ora porque estes espaos j foram

26liberados anteriormente; exatamente esse tipo de erro que o coletor de lixo nos ajuda a evitar. O gerenciamento da memria, quando efetuado diretamente pelo programador, torna os programas mais eficientes em termos de desempenho, mas ao mesmo tempo o penaliza, obrigando-o a alocar e desalocar memria quando assim requerido. A .NET permite que o programador faa esse gerenciamento tambm, o que chamado de unsafe code (cdigo inseguro); entretanto, por default, o GC o encarregado dessa tarefa, e o contrrio no recomendado.

Linguagens que suportam .NETDentre as linguagens que suportam .NET podemos citar: C# ( claro!) C++ Visual Basic Jscript Cobol Small Talk Perl Pascal Phyton Oberon APL Haskell Mercury Scheme CAML OZ

Conforme descrito acima, todas essas linguagens tm de aderir s especificaes CLS e CTS para poderem ser compatveis com .NET.

Principais vantagens da linguagem C#: Clareza, simplicidade e facilidade: C# clara, simples, fcil de aprender, mas nem por isso menos poderosa. Completamente orientada a objetos: C#, diferentemente de muitas linguagens existentes no mercado, completamente orientada a objetos. Em C#, tudo um objeto. No requer ponteiros para gerenciar a memria: C# no requer ponteiros para alocar/desalocar memria heap. Esse gerenciamento, como dissemos acima, feito pelo GC (Garbage Collector). Suporta interfaces, sobrecarga, herana, polimorfismo, atributos, propriedades, colees, dentre outras caractersticas essenciais numa linguagem que se diz orientada a objetos. Cdigo 100% reutilizvel: Todo programa desenvolvido emC# passvel 16 de reutilizao a partir de qualquer outra linguagem de programao. A proposta de C# adiciona babel das linguagens de programao o que de melhor encontramos em tcnicas de desenvolvimento nas principais linguagens de hoje.

Quando usar a .NET?Como conseqncia do que foi dito acima, a .NET se adapta perfeitamente ao desenvolvimento do seguinte tipo de aplicaes: Aplicaes clientes de front end Aplicaes de middleware: Web services, aplicaes do lado servidor (ASP.NET, SOAP, Web Services e XML) Aplicaes para internet: a .NET fornece bibliotecas especializadas para o desenvolvimento de aplicaes para Internet suportando os protocolos mais comuns: FTP, SMTP, HTTP, SOAP etc. Aplicaes grficas: via a biblioteca GDI+, a .NET d suporte completo a esse tipo de aplicaes.

27 Acesso a bancos de dados via ADO.NET: ADO.NET uma evoluo da tecnologia ADO usada amplamente no desenvolvimento de sistemas para bancos de dados. Entretanto, novas caractersticas so encontradas nessa nova biblioteca, como manipulao de dados na aplicao cliente, como se esta estivesse sendo manipulada no servidor. Isso implica em aplicaes connectionless (sem conexo) com vistas a no degradar o desempenho do servidor de banco de dados, quando este est servindo milhares de conexes simultaneamente. Aplicaes multitarefa: a biblioteca System.Thread d suporte ao desenvolvimento de aplicaes multitarefa.

Estrutura bsica de um programa em C#O pequeno trecho de cdigo a seguir implementa o clssico programa Ol mundo:using System; class AppPontoNet { static void Main( ) { // escrevendo no console Console.WriteLine("Ol mundo em C#"); Console.ReadLine( ); } }

O Cabealho do programa A primeira linha do nosso programa, que escreve no console Ol mundo em C#, contm a informao do namespace System, que contm as classes primitivas necessrias para ter acesso ao console do ambiente .NET. Para incluir um namespace em C#, utilizamos a clusula using seguida do nome do namespace. A declarao de uma classe O C# requer que toda a lgica do programa esteja contida em classes. Aps a declarao da classe usando a palavra reservada class, temos o seu respectivo identificador. Para quem no est familiarizado com o conceito de classe, apenas adiantamos que uma classe um tipo abstrato de dados que no paradigma de programao orientada a objetos usado para representar objetos do mundo real. No exemplo acima, temos uma classe que contm apenas o mtodo Main( ) e no recebe nenhum parmetro. O Mtodo Main( ) Todo programa C# deve ter uma classe que defina o mtodo Main( ), que deve ser declarado como esttico usando o modificador static, que diz ao runtime que o mtodo pode ser chamado sem que a classe seja instanciada. atravs desse modificador que o runtime sabe qual ser o ponto de entrada do programa no ambiente Win32, para poder passar o controle ao runtime .NET. OM mausculo do mtodo Main obrigatrio, e seu valor de retorno void significa que o mtodo no retorna nenhum valor quando chamado. Algumas variantes do mtodo Main( ): // Main recebe parmetros na linha de comando via o array args static void Main(string[ ] args) { //corpo do mtodo } // Main tem como valor de retorno um tipo int static int Main( ) { // corpo do mtodo } A forma do mtodo Main( ) a ser usada vai depender dos seguintes fatores:

28 O programa vai receber parmetros na linha de comando? Ento esses parmetros sero armazenados no array args. Quando o programa finalizado, necessrio retornar algum valor ao sistema? Ento o valor de retorno ser do tipo int.

Um programa escrito em C# pode ter mais de uma classe que implementa o mtodo Main( ). Nesse caso, dever ser especificado em tempo de compilao em qual classe se encontra o mtodo Main( ), que dever ser chamado pelo runtime quando a aplicao for executada.

Exemplo: using System; class class1 { static void Main( ) { Console.WriteLine("Mtodo Main( ) da classe 1"); } } class class2 { static void Main( ) { Console.WriteLine("Mtodo Main( ) da classe 2"); } } O resultado da compilao deste programa :

Class1.cs(6): Program 'C:\My Documents\Visual Studio Projects\twoMainMet\obj\Debug\twoMainMet.exe' has more than one entry point defined: 'class1.Main( )' Class1.cs(15): Program 'C:\My Documents\Visual Studio Projects\twoMainMet\obj\Debug\twoMainMet.exe' has more than one entry point defined: 'class2.Main( )'

Dentro do ambiente de desenvolvimento VS.NET proceda da seguinte forma para resolver esse problema: 1. Clique no menu Project e selecione a opo Properties. 2. Clique na pasta Application. 3. Modifique a propriedade Startup Object, selecionando a classe que contm o mtodo Main( ) que voc deseja que seja chamado pelo Runtime quando a aplicao for executada. 5. Clique em Ok e compile a aplicao de novo. Alguns ltimos detalhes adicionais Blocos de cdigo so agrupados entre chaves { }. Cada linha de cdigo separada por ponto-e-vrgula. Os comentrios de linha simples comeam com duas barras //. Comentrios em bloco so feitos usando os terminadores /* (de incio) e */ (de fim). /* Este um comentrio de bloco Segue o mesmo estilo de C/C++ */ O C# sensvel ao contexto, portanto int e INT so duas coisas diferentes. uma boa prtica sempre declarar uma classe onde todos os aspectos inerentes inicializao da aplicao sero implementados, e obviamente, que conter o mtodo Main( ) tambm.

29

Interagindo com o consolePraticamente toda linguagem de programao oferece meios de interagir com o console, para ler ou escrever na entrada (geralmente o teclado) e sada padro (normalmente o vdeo em modo texto). Em C#, temos uma classe chamada Console no namespace System, a qual oferece uma srie de mtodos para interagir com a entrada e sada padro. Vejamos alguns exemplos:

namespace FilaEstatica { public class LeNome { static void Main() { char c; string nome; // Escreve no console sem retorno de carro Console.Write("Digite seu nome: "); // L uma string do console. para concluir nome = Console.ReadLine(); // Escreve uma linha em branco Console.WriteLine(); // Escreve uma string no console Console.WriteLine("Seu nome : {0} \nPressione Enter " + "para finalizar.", nome); // aguarda o usurio pressionar enter p/ sair do programa Console.ReadLine(); } } }

Como voc pode ver no exemplo acima, para escrever no console usamos os mtodos: Console.Write( ), para escrever uma string sem retorno de carro; Console.WriteLine( ), para escrever uma string com retorno de carro. Essa string pode ser parametrizada, o que significa que o contedo de variveis pode ser mostrado no console. As variveis a serem mostradas comeam a partir do segundo parmetro e so separadas por vrgula. Na string do primeiro parmetro elas so representadas por nmeros inteiros, a comear por zero, encerrados entre terminadores de incio { e de fim }.

Exemplo: Console.WriteLine("var1: {0}, var2: {1}, var3: {2}", var1, var2, var3); Para ler dados da entrada padro, usamos os seguintes mtodos: Read( ), para ler um caractere simples; ReadLine( ) para ler uma linha completa, conforme mostrado no exemplo acima. Formatando a sada padro A formatao da sada padro feita usando os chamados caracteres de escape (veja a tabela abaixo). Vejamos um exemplo: \t = TAB \n = quebra de linha e retorno de carro (CR LF) Console.WriteLine( "var1: {0} \t var2: {1}\t var3: {2}\n", var1, var2, var3);

30Caractere de Escape - Significado \n \t \a \b \r \0 Insere uma nova linha TAB Dispara o som de um alarme sonoro simples Apaga o caractere anterior da string que est sendo escrita no console (backspace) Insere um retorno de carro Caractere NULL (nulo)

Recebendo parmetros na linha de comandoPara receber parmetros na linha de comando, ou seja, na chamada de um programa quando digitamos o nome do executvel no prompt da linha de comando do DOS(como ScanDisk /All /AutoFix, por exemplo), o mtodo Main( ) precisa ser declarado da seguinte forma:

// no retorna nenhum valor ao sistema static void Main(string[ ] args) ou // retorna um valor do tipo int ao sistema static int Main(string[ ] args)

O parmetro args um array de strings que recebe os parmetros passados quando a aplicao chamada na linha de comando. A seguir mostramos uma das formas da varrer os parmetros recebidos:

foreach (string cmd in args) { int i = 0; Console.WriteLine("Par {0}: {1}", i, cmd); i++; } Para saber o nmero de argumentos que foram passados, usamos o mtodo Length( ) do array args da seguinte forma: numArgs = args.Length( ); Quando na linha de comando so recebidos parmetros numricos, estes devem ser convertidos de string para o tipo numrico respectivo usando a classe Convert. Exemplo: Varint = Convert.ToInt32(varString);

31

Principais Operadores

32

^

Operador lgico XOR usado para comparar expresses booleanas

33

VariveisNomeando uma varivel: A documentao do Microsoft .Net Framework da as seguintes recomendaes para a nomeao das variveis: Evite usar underline; No crie variveis que apenas se diferenciem apenas pela sua forma. Exemplo: minhaVariavel e outra chamada MinhaVariavel; Procure iniciar o nome com uma letra minscula; Evite usar todas as letras maisculas; Quando o nome tiver mais que uma palavra, a primeira letra de cada palavra aps a primeira deve ser maiscula (conhecido como notao camelCase);

Conveno PascalCasingPara usar a conveno PascalCasing para nomear suas variveis, capitalize o primeiro caractere de cada palavra. Exemplo: void InitializeData(); A microsoft recomenda usar o PascalCasing quando estiver nomeando classes, mtodos, propriedades, enumeradores, interfaces, constantes, campos somente leitura e namespaces.

Conveno camelCasingPara usar esse tipo de conveno, capitalize a primeira letra de cada palavra menos da primeira. Como o exemplo: int loopCountMax; A Microsoft recomenda usar essa conveno na nomeao de variveis que definem campos e parmetros. Para maiores informaes sobre conveno de nomes pesquise Naming Guidelines, na documentao do Visual Studio.

Palavras reservadas:A linguagem C# reserva setenta e cinco palavras para seu prprio uso. Estas palavras so chamadas de palavras reservadas e cada uma tem um uso particular. Palavras reservadas tambm no so permitidas como nome de variveis. Segue uma lista que identifica todas estas palavras:

abstract break char continue do event finally foreach in is new out

as byte checked decimal double explicit fixed goto int lock null override

base case class default else extern float if interface long object params

Bool Catch Const Delegate Enum false for implicit internal namespace operator private

34 protected return sizeof struct public sbyte stackalloc switch readonly sealed static this ref short string throw

Lista de palavras reservadas No painel de cdigo do Visual Studio .NET as palavras reservadas so identificadas pela cor de letra azul.

Declarando variveisAntes de usar uma varivel necessrio declar-la. Neste momento alocamos espao para esta varivel na memria e dizemos que tipo de dado pode ser armazenado nela. O tipo de dado indica qual o tamanho do espao vai ser reservado para a varivel. O C# pode armazenar diferentes tipos de dados: como inteiros, nmeros de ponto flutuante, textos e caracteres. Assim que declaramos uma varivel precisamos identificar que tipo de dado ela armazenar. Declaramos especificando o tipo de dado seguido do nome da varivel como no exemplo:

int contador;Esse exemplo declara uma varivel chamada contador do tipo integer. Ou seja ela dever armazenar nmeros inteiros, mais a frente estudaremos melhor o que armazenar em cada tipo de dado. Podemos tambm declarar mltiplas variveis de uma vez, fazemos isso da seguinte maneira:

int contador, numeroCarro;Estamos declarando nesse exemplo duas variveis do tipo int, uma chamada contador e a outra numeroCarro.

Atribuindo valor a variveisDepois de declarar sua varivel voc precisa atribuir um valor a ela. No C# voc no pode usar uma varivel antes de colocar um valor nela, isso gera um erro de compilao. Exemplo de como atribuir um valor a uma varivel:

int numeroFuncionario; numeroFuncionario = 23;

Primeiro nos declaramos nossa varivel do tipo integer. Depois atribumos o valor 23 a ela. Entendemos pelo sinal de igual como recebe. Assim numeroFuncionario recebe 23. Podemos tambm atribuir um valor a varivel quando a declaramos, dessa forma:

int numeroFuncionario = 23;

35Isso faz a mesma coisa que o exemplo anterior, s que tudo em uma linha. Mais um exemplo:

char letraInicial = M;

Tipos de variveisA seguinte tabela mostra os tipos do C# com sua referencia no Framework. Os tipos da tabela abaixo so conhecidos como tipos internos ou Built-in. C# Type bool byte sbyte char decimal double float int uint long ulong object short ushort string .NET Framework type System.Boolean System.Byte System.SByte System.Char System.Decimal System.Double System.Single System.Int32 System.UInt32 System.Int64 System.UInt64 System.Object System.Int16 System.UInt16 System.String

Cada tipo no C# um atalho para o tipo do Framework. Isso quer dizer que se declararmos a varivel desta forma:

string nome;ou dessa forma

System.String nome;

teremos o mesmo resultado. O atalho serve apenas para facilitar na hora de desenvolver a aplicao. A seguinte tabela mostra os tipos de variveis e os valores possveis de se armazenar em cada uma delas. C# Type bool byte sbyte char Valores possveis de se armazenar Verdadeiro ou Falso (Valores booleandos) 0 a 255 (8 bits) -128 a 127 (8 bits) Um caractere (16 bits)

36decimal double float int uint long ulong object short ushort string 1.0 1028 a 7.9 1028 (128 bits) 5.0 10324 a 1.7 10308 (64 bits) 1.5 1045 a 3.4 1038 (32 bits) -2,147,483,648 a 2,147,483,647 (32 bits) 0 a 4,294,967,295 (32 bits) 9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (64 bits) 0 a 18,446,744,073,709,551,615 (64 bits) Qualquer tipo. -32,768 a 32,767 (16 bits) 0 a 65,535 (16 bits) Seqncia de caracteres (16 bits por caractere)

Todos os tipos na tabela com exceo dos tipos object e string so conhecidos como tipos simples. Para retornar o tipo de qualquer varivel do C# voc pode usar o mtodo GetType(); Como no exemplo:

Console.WriteLine(minhaVariavel.GetType());Isso retornaria o tipo da varivel minhaVariavel. Para maiores informaes sobre tipos de variveis consulte a documentao do Visual Studio por data types.

Adicionando valor a uma varivel muito comum precisarmos adicionar ou subtrair valores de uma varivel usando no calculo o valor que j esta armazenado na mesma. O cdigo seguinte declara uma varivel do tipo integer chamada contador e armazena o valor 2 nesta varivel, depois incrementa o valor 40:

int contador; contador = 2; contador = contador + 40;No final do cdigo acima a varivel contador tem qual valor? A resposta 42, claro, criamos a varivel, adicionamos o valor 2 nela e aps, pegamos o valor dela (que era 2) e adicionamos 40, e armazenamos o valor na mesma. Preste ateno na seguinte linha de cdigo:

contador = contador + 40; Perceba que para somar o valor a varivel precisamos repetir o nome da varivel.Podemos fazer da seguinte forma tambm em C#:

contador += 40;

37Isso teria o mesmo resultado e uma maneira mais elegante. Voc pode subtrair tambm valores, como o exemplo:

contador -= 23;Isso subtrairia 23 do valor da varivel. Na verdade voc pode fazer isso com todos os operadores aritmticos, como multiplicao e diviso tambm.

38 Manipulando Stringsusing using using using System; System.Collections.Generic; System.Linq; System.Text;

public class StringApp { static void Main() { string nome; char letra; Console.Write("Por favor, informe seu nome completo: "); nome = Console.ReadLine(); Console.WriteLine("Seu nome tem {0} letras ", nome.Length); Console.WriteLine("Ele inicia com a letra [ {0} ] e termina com [ {1} ]", nome[0], nome[nome.Length - 1]); Console.WriteLine("Nome todo em maisculo: {0} ", nome.ToUpper()); Console.WriteLine("Nome todo em minsculo: {0} ", nome.ToLower()); Console.WriteLine("Apenas as 3 primeiras letras do nome: {0}", nome.Substring(0, 3)); // replace: substitui uma letra por outra // a partir de agora, o nome foi alterado!!!! nome = nome.Replace(' ', '_'); Console.WriteLine("Veja como ficou seu nome depois de aplicar o replace: {0}", nome); Console.Write("Digite uma letra para pequisar em seu nome: "); letra = Console.ReadLine()[0]; // indexof pesquisa a primeira ocorrnciade um caractere dentro de uma string. // se no encontrar, retorna -1 Console.WriteLine("A primeira ocorrncia da letra [{0}] est na posio: {1} ", letra, nome.IndexOf(letra)); Console.WriteLine("\n\nPressione ENTER para terminar."); Console.ReadLine(); } }

39

ConstantesAo antepor a palavra-chave const durante a declarao e inicializao de unia varivel, ela se torna uma constante. Como insinua o nome, um constante uma varivel cujo valor no pode ser alterado ao longo de sua existncia: const int a = 100; // Este valor no pode ser alterado As constantes tm as seguintes caractersticas: Elas devem ser inicializadas quando declaradas e, depois que um valor lhes for atribudo, no poder mais ser alterado. O valor de unia constante deve ser computvel em tempo de compilao. Ento, ns no podemos inicializar uma constante com um valor proveniente de uma varivel. Se voc precisar fazer isso, use um campo somente leitura. As constantes so sempre estticas. Note, porm, que no temos (e, na realidade, no permitido) incluir o modificador static na declarao de constante. H trs vantagens pelo menos no uso de constantes (ou variveis somente leitura) em seus programas: As constantes tornam seus programas mais fceis de ler, substituindo nmeros mgicos e strings mgicas por nomes legveis cujos valores so fceis de entender. As constantes tornam seus programas mais fceis de modificar. (Por exemplo, voc tem uma constante Impostovenda em um de seus programas C# e a essa constante atribudo o valor de 6%. Se a taxa de imposto de Impostovenda mudar tempos depois, voc pode modificar o comportamento de todos os clculos de imposto simplesmente atribuindo um valor novo constante; voc no tem de procurar em todo o seu cdigo o valor 0.06 e modificar cada um, supondo que tivesse encontrado todos.) Com as constantes mais fcil evitar erro sem seus programas. Se voc tentar atribuir outro valor a uma constante em algum lugar em seu programa, depois que j tiver atribudo um valor, o compilador sinalizar o erro.

Saindo explicitamente da aplicao:A instruo abaixo faz com que o programa termine e retorne ao sistema operacional o cdigo de erro informado entre parnteses. Environment.Exit(0); Exemplo: static void Main(string[] args) { Console.Write("O comando Environment.Exit(0) fecha o programa imediatamente"); Console.ReadLine(); Environment.Exit(0); Console.WriteLine("Esta linha nunca ser exibida"); }

40

Estrutura de Deciso (IF)O if avalia uma expresso lgica booleana e qualquer outro tipo ser acusado como erro pelo compilador. Se o resultado for verdadeiro, o bloco de cdigo dentro do if ser executado; caso contrrio, o controle passado para a prxima declarao aps o if. Os projetistas de C# optaram por aceitar unicamente expresses boolenas no if para evitar escrever cdigo com semntica obscura e propensa a resultados inesperados. A declarao if tem trs formas bsicas: 1.if (expresso booleana) { Declarao }

2.if (expresso booleana) { Declarao } else { Declarao }

3.if (expresso booleana) { Declarao } else if (expresso booleana) { Declarao } else If (expresso booleana) { Declarao } else { Declarao }

Vejamos alguns exemplos:static void Main(string[] args) { int a = 0; int b = 0; if (a < b) { Console.WriteLine("B maior"); } else { Console.WriteLine("A maior"); } } O exemplo anterior sintaticamente correto, mas o que aconteceria se a=b? O nosso cdigo passaria a dar a resposta incorreta, porque ele no avalia a condio a=b, o que torna o nosso cdigo inconsistente. Vamos reescrev-lo de forma que a condio de igualdade seja avaliada:

41static void Main(string[] args) { int a = 0; int b = 0; if (a < b) { Console.WriteLine("B } else if (a > b) { Console.WriteLine("A } else // e finalmente a condio { Console.WriteLine("A } }

maior");

maior"); de igualdade deveria ser satisfeita igual a B");

O uso de chaves {} opcional e est condicionado a execuo de mais de uma instruo. No exemplo abaixo, poderemos retiras as chaves, pois caso a condio do if seja verdadeira, apenas uma instruo dever ser executada. O mesmo acontece com o else. static void Main(string[] args) { int a = 0; int b = 0; if (a < b) Console.WriteLine("B maior"); else Console.WriteLine("A maior"); }

42

Estrutura de Repetio FORO lao for segue o mesmo estilo das linguagens C/C++, e a sua sintaxe tem as seguintes caractersticas: Uma varivel de inicializao pode ser declarada dentro do for. Uma condio avalia uma expresso para abandonar o for ou execut-lo de novo. Uma expresso incrementa o valor da varivel de inicializao.

Exemplo: static void Main(string[] args) { for (int i = 0; i < 5; i++) { Console.WriteLine("Iterao nmero {0}", i); } Console.ReadLine(); } Para abandonar o lao antes que a condio for seja falsa, usa-se a palavra reservada break. Exemplo: static void Main(string[] args) { for (int i = 0; i < 5; i++) { Console.WriteLine("Iterao nmero {0}", i); if (i == 3) break; } Console.ReadLine(); } A palavra reservada continue permite que o fluxo de execuo da iterao corrente seja abandonado, mas no o lao, e a iterao seguinte d incio no topo do lao, uma vez que a condio do for seja satisfeita. Exemplo: static void Main(string[] args) { for (double i = 0; i < 5; i++) { if (i == 3) continue; // a linha abaixo no ser impressa quando i = 3 Console.WriteLine("Iterao nmero {0}", i); } Console.ReadLine(); }

43 Laos for infinitosVeja no exemplo a seguir uma forma de usar laos for para implementar iteraes infinitas: static void Main(string[] args) { string texto ; Console.WriteLine("Digite mltiplas linhas separadas por enter. " + "Para sair digite \"sair\" "); for (; ; ) { texto = Console.ReadLine(); if ((texto.ToUpper() == "SAIR")) break; } }

Observe que o uso de break necessrio para poder abandonar o lao; caso contrrio, o seu programa entrar num loop infinito.

Laos for aninhadosLaos aninhados so laos dentro de laos. Nestes casos, no podemos usar a mesma varivel de controle para ambos os FOR. Exemplo: static void Main(string[] args) { for (int i = 0; i