curso introdução cshart.pptx

101

Upload: danilo-singh

Post on 18-Aug-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

Histria do C# No fnal da dcada de 1990 a Microsoft tinha diversas tecnologias e linguagens de programao para resolver muitos pro!lemas diferentes" #ara solucionar esses pro!lemas$ a Microsoft recorreu % linguagem &ava" 'oi assinado um acordo de licenciamento com a (un para utili)ar o &ava em am!iente *indo+s" #orm$ a linguagem &ava possu,a um grave pro!lema- ela no se comunicava !em com o as !i!liotecas de cdigo nativo .cdigo de m/0uina1 0ue 2/ e3istiam" #ara resolver isso$ a Microsoft decidiu criar a sua prpria implementao do &ava chamado &44" Microsoft processada por violar o licenciamento feito com a (un" 5 empresa comea ento a tra!alhar em um nova plataforma 0ue seria a !ase de todas as suas solu6es$ e posteriormente chamada de "N78" Histria do C# 7sse novo am!iente de desenvolvimento da Microsoft foi desde o in,cio pro2etado para tra!alhar com diversas linguagens de programao" 9m novo pro2eto de linguagem de programao foi iniciado$ o pro2eto C::; .Celphi e ?@" 5 ideia era estudar os pro!lemas e3istentes e incorporar solu6es" 7m A00A$ o pro2eto C::; foi lanado como linguagem C# 1"0 2unto com o am!iente "N78 1"0" 5tualmente a linguagem C# est/ em sua verso B"0 .ofcial1 e o "N78 na verso C"B"A$ tendo evolu,do com e3pressiva velocidade$ adotando novidades na sua sinta3e 0ue a diferenciaram !astante do &ava e as demais"M/0uina ?irtual : "N78 'rame+or= utili)ada o conceito de DM/0uina virtualE" 7ntre o sistema operacional e a aplicao e3iste uma camada e3tra respons/vel por Ftradu)irF o 0ue sua aplicao dese2a fa)er para as respectivas chamadas do sistema operacional onde ela est/ rodando no momento" G um conceito !em mais amplo 0ue o de um interpretador" G respons/vel por gerenciar memria$ threads$ a pilha de e3ecuo etc" 5s aplicao rodam sem nenhum envolvimento com o sistema operacional$ sempre FconversandoF apenas com a m/0uina virtual do C#$ a Common ;anguage Huntime . C;H 1"Common ;anguage Huntime .C;H1" 5 C;H o am!iente de e3ecuo para todas as linguagens da plataforma "N78$ no apenas para o C#" 73ecuta uma linguagem intermedi/ria comum a todas as linguagens da plataforma "N78$ a CI; .Common Intermediate ;anguage1" #ara gerar o CI; 0ue ser/ e3ecutado pela C;H$ precisamos passar o cdigo C# por um compilador da linguagem$ como o programa csc"e3e" : compilador lJ o ar0uivo com o cdigo fonte do programa e o tradu) para o cdigo intermedi/rio 0ue ser/ e3ecutado pela m/0uina virtual"73ecuo do cdigo na C;H e o &I8 #ara e3ecutarmos uma aplicao C#$ precisamos passar o cdigo CI; do programa para a C;H$ a m/0uina virtual do "N78" 5 C;H por sua ve) precisa e3ecutar o cdigo da aplicao no sistema operacional do usu/rio e$ para isso$ precisa emitir o cdigo de m/0uina correto para o am!iente em 0ue o programa est/ sendo e3ecutado" Mas a C;H no interpreta o CI; do programa$ isso seria muito lento$ ao invs disso$ 0uando o programa C# carregado na memria$ a C;H converte automaticamente o cdigo CI; para cdigo de m/0uina 7sse processo feito por um compilador &ust in 8ime .&I81 da C;H" 7sse carregamento utili)ando o &I8 fa) com 0ue o cdigo escrito na linguagem C# e3ecute com o desempenho m/3imo$ o mesmo de um programa escrito em linguagens 0ue compilam diretamente para o cdigo de m/0uina$ mas com a vantagem de e3ecutar no am!iente integrado do "N78"?ari/veis e tipos primitivos 5s vari/veis guardam informa6es de um tipo espec,fco" #ara utili)ar uma vari/vel$ devemos primeiramente declar/iviso N Mdulo O:peradores de atri!uio :s operadores de atri!uio so- (imples P Incremental 4P >ecremental ivisria NP Modular OP:peradores de atri!uio 5 linguagem C# permite verifcar duas ou mais condi6es atravs de operadores lgicos" :s operadores lgicos devolvem valores do tipo primitivo !ool" :s operadores lgicos so- D7E lgico TT D:9E lgico UU:peradores relacionais 9tili)ado para determinar a relao entre uma vari/vel ou valor e outra vari/vel ou valor" 5s opera6es reali)adas com os operadores relacionais devolvem valores do tipo primitivo !ool" :s operadores relacionais so- Igualdade PP >iferena QP Menor R Menor ou igual RP Maior S Maior ou igual SP7strutura de Controle : comando if permite 0ue valores !ooleanos se2am testados (e o valor passado como parVmetro para o comando if for true$ o !loco do if e3ecutado" Caso contr/rio$ o !loco do else e3ecutado" : parVmetro passado para o comando if deve ser um valor !ooleano" : comando else e o seu !loco so opcionais"7strutura de Controle No C#$ podemos e3ecutar cdigo condicional utili)ando a construo if -7struturas de repetio 5s estruturas de repetio so usadas para controlar a e3ecuo de cdigos repetidamente at 0ue uma condio se2a verdadeira" No C# temos as seguintes estruturas de repetio- ':H *HI;7 >:"" *HI;7:rientao a o!2eto 9m domnio composto pelas entidades$ informa6es e processos relacionados a um determinado conte3to" 9ma aplicao pode ser desenvolvida para automati)ar ou tornar fact,vel as tarefas de um dom,nio" #ortanto$ uma aplicao !asicamente o DreWe3oE de um dom,nio" #ara e3emplifcar$ suponha 0ue estamos interessados em desenvolver uma aplicao para facilitar as tarefas do cotidiano de um !anco" #odemos identifcar clientes$ funcion/rios$ agJncias e contas como entidades desse dom,nio" 5ssim como podemos identifcar as informa6es e os processos relacionados a essas entidades":!2etos$ atri!utos e mtodos 5s entidades identifcadas no dom,nio devem ser representadas de alguma forma dentro da aplicaocorrespondente" Nas aplica6es orientadas a o!2etos$ as entidades so representadas por o!2etos"#ara e3emplifcar$ suponha 0ue no dom,nio de um determinado !anco e3ista um cliente chamado &os" >entro de uma aplicao orientada a o!2etos correspondente a esse dom,nio$ deve e3istir um o!2eto para representar esse cliente":!2etos$ atri!utos e mtodos (uponha 0ue algumas informa6es do cliente &os como nome$ data de nascimento e se3o so importantes para o !anco" : o!2eto 0ue representa esse cliente deve possuir essas informa6es" 7sses dados so arma)enados nos atributos do o!2eto 0ue representa o &os" 9m atri!uto uma vari/vel 0ue pertence a um o!2eto" :s dados de um o!2eto so arma)enados nos seus atri!utos" : prprio o!2eto deve reali)ar opera6es de consulta ou alterao dos valores de seus atri!utos" 7ssas opera6es so defnidas nos mtodos do o!2eto"Classe 5ntes de um o!2eto ser criado$ devemos defnir 0uais sero os seus atri!utos e mtodos" 7ssa defnio reali)ada atravs de uma classe. 5 partir de uma classe$ podemos construir o!2etos na memria do computador 0ue e3ecuta a nossa aplicao"#odemos representar uma classe atravs de diagramas UML.ClassesDiversas casas construdas a partir da mesma planta Diversos bolos preparados a partir da mesma receitaClasses @asicamente$ as diferenas entre dois o!2etos criados a partir da classe Conta so os valores dos seus atri!utos" 5ssim como duas casas constru,das a partir da mesma planta podem possuir caracter,sticas diferentes" #or e3emplo$ a cor das paredes"Classes em C# : conceito de classe apresentado anteriormente genrico e pode ser aplicado em diversas linguagens de programao" Inicialmente$ discutiremos apenas so!re os atri!utos" :s mtodos sero a!ordados posteriormente"Classes em C# 5 classe C# Conta declarada utili)ando a palavra reservada class" No corpo dessa classe$ so declaradas trJs vari/veis 0ue so os atri!utos 0ue os o!2etos possuiro"Criando o!2etos em C# : comando para criar o!2etos o new"Chamar o comando ne+ passando uma classe C# como se estivssemos contratando uma construtora passando a planta da casa 0ue 0ueremos construir" HeferJncias em C# 8odo o!2eto possui uma referJncia" 5 referJncia de um o!2eto a Knica maneira de acessar os seus atri!utos e mtodos" >essa forma$ devemos guardar as referJncias dos o!2etos 0ue dese2amos utili)ar"5o utili)ar o comando ne+$ um o!2eto alocado em algum lugar da memria" #ara 0ue possamos acessar esse o!2eto$ precisamos de sua referJncia" #ara guardar as referJncias devolvidas pelo comando ne+$ devemos utili)ar vari/veis no primitivas"Manipulando atri!utos #odemos alterar ou acessar os valores guardados nos atri!utos de um o!2eto se tivermos a referJncia a esse o!2eto" :s atri!utos so acessados pelo nome" No caso espec,fco da linguagem C#$ a sinta3e para acessar um atri!uto utili)a o operador F.Mtodos No !anco$ poss,vel reali)ar diversas opera6es em uma conta- depsito$ sa0ue$ transferJncia$ consultas e etc" 7ssas opera6es podem modifcar ou apenas acessar os valores dos atri!utos dos o!2etos 0ue representam as contas" #odemos dividir um mtodo em C partes- Nome: G utili)ado para chamar o mtodo" Na linguagem C#$ uma !oa pr/tica defnir os nomes dos mtodos utili)ando a conveno DCamel CaseE com a primeira letra maiKscula" Lista de Parmetros: >efne os valores 0ue o mtodo deve rece!er" Mtodos 0ue no devem rece!er nenhum valor possuem a lista de parVmetros va)ia" Corpo: >efne o 0ue acontecer/ 0uando o mtodo for chamado Retorno: 5 resposta 0ue ser/ devolvida ao fnal do processamento do mtodo" Xuando um mtodo no devolve nenhuma resposta$ ele deve ser marcado coma palavra reservada oid"(o!recarga #rogramadores fcam so isentos de ter 0ue criar mtodos com as mesmas fun6es$ mas com outros nomes para ter 0ue diferenciaefnir os valores dos atri!utos o!rigatrios de um o!2eto logo aps a criao dele resolveria as restri6es do sistema do !anco" Nenhuma garantia 0ue todos os desenvolvedores sempre lem!rem de iniciali)ar esses valores"5 utili)ao de construtores uma soluo construtores"Construtor padro 8oda ve) 0ue um o!2eto criado$ um construtor da classe correspondente deve ser chamado" Mesmo 0uando nenhum construtor for defnido e3plicitamente$ h/ um construtor padro 0ue ser/ inserido pelo prprio compilador" : construtor padro no rece!e parVmetros e ser/ inserido sempre 0ue o desenvolvedor no defnir pelo menos um construtor e3plicitamente(o!recarga de construtores : conceito de so!recarga de mtodos pode ser aplicado para construtores" >essa forma$ podemos defnir diversos construtores na mesma classe"7ncapsulamento No sistema do !anco$ cada o!2eto da classe 'uncion/rio possui um atri!uto para guardar o sal/rio do funcion/rio 0ue ele representa: atri!uto salario pode ser acessado ou modifcado por cdigo escrito por 0ual0uer classe" #ortanto$ o controle do atri!uto salario descentrali)ado"7ncapsulamento #odemos o!ter um controle centrali)ado tornando o atri!uto salario priado e defnindo mtodos para implementar todas as lgicas 0ue utili)am ou modifcam o valor desse atri!uto" 7m C#$ se nenhum modifcador de visi!ilidade for defnido para um determinado atri!uto$ esse atri!uto ser/ considerado privado por padro" @oa pr/tica dei3ar e3pl,cito no cdigo 0ue o atri!uto privado$ adicionando o modifcador priate"Mtodos privados : papel de alguns mtodos pode ser o de au3iliar outros mtodos da mesma classe"No e3emplo$ o mtodo >esconta8arifa.1 um mtodo au3iliar dos mtodos >eposita.1 e (aca.1" 5lm disso$ ele no deve ser chamado diretamente$ pois a tarifa s deve ser descontada 0uando ocorre um depsito ou um sa0ue"#ropriedades 5 linguagem C# disponi!ili)a uma outra maneira para acessar os atri!utos- as propriedades" 9ma propriedade$ !asicamente$ agrupa os mtodos de consulta e alterao dos atri!utos#ropriedades autoepois de criar uma e3ception podemos DlanarE a referJncia dela utili)ando o comando t.row" :!serve o e3emplo utili)ando a classe (Lstem"5rgument73ception 0ue deriva indiretamente da classe (Lstem"73ception"Capturando erros 7m um determinado trecho de cdigo$ para capturar uma e3ception devemos utili)ar o comando tr*/cact."'inallL 7m alguns casos$ 0ueremos e3ecutar um trecho de cdigo independetemente se houver erros ou no" #ara isso podemos$ utili)ar o !loco #nall*"Collections Muitas ve)es$ tra!alhar diretamente com arraLs no simples dado as diversas limita6es 0ue eles possuem" 5 limitao principal a capacidade f3a$ um arraL no pode ser redimensionado" 5lm disso$ adicionar ou remover elementos provavelmente gera a necessidade de deslocar parte do conteKdo do arraL" 5s difculdades do tra!alho com arraL podem ser superadas com estruturas de dados mais sofsticadas" No C#$ h/ diversas estruturas de dados 0ue facilitam o tra!alho do desenvolvedor";istas 5s listas so estruturas de dados de arma)enamento se0uencial assim como os arraLs" Mas$ diferentemente dos arraLs$ as listas no possuem capacidade f3a o 0ue facilita !astante o tra!alho"I;ist a interface C# 0ue defne os mtodos 0ue uma lista deve implementar" 9ma das implementa6es dessa interface a classe 5rraL;ist"[enerics 5s listas arma)enam referJncias de 0ual0uer tipo" >essa forma$ 0uando recuperamos um elemento de uma lista temos 0ue tra!alhar com referJncias do tipo o!2ect"[enerics #orm$ normalmente$ precisamos tratar os o!2etos de forma espec,fca pois 0ueremos ter acesso aos mtodos espec,fcos desses o!2etos" Nesses casos$ devemos fa)er casting nas referJncias" : casting de referJncia arriscado pois em tempo de compilao no temos garantia 0ue ele est/ correto"[enerics #ara ter certe)a da tipagem dos o!2etos em tempo de compilao$ devemos aplicar o recurso do 0enerics" Com este recurso podemos determinar o tipo de o!2eto 0ue 0ueremos arma)enar em uma coleo no momento em 0ue ela criada" : compilador no permitir/ 0ue elementos no compat,veis com o tipo escolhido se2am adicionados na coleo" Isso garante o tipo do elemento nomomento em 0ue ele recuperado da coleo e elimina a necessidade de casting" 5s classes 0ue contm o recurso 0enerics fa)em parte do namespace System.Collections.Generic"5 classe genrica e0uivalente a 5rraL;ist a ;ist"[enerics ;INX < ;anguage integrated XuerL < um con2unto de recursos introdu)idos no "N78 'rame+or= \"B 0ue permitem a reali)ao de consultas diretamente em !ase de dados $ documentos ]M; $ estrutura de dados $ coleo de o!2etos$ etc": ;INX simplifca esta situao oferecendo um modelo mais simples e consistente para tra!alhar com dados em v/rios tipos de fontes de dados e formatos"7m uma consulta ;INX$ vocJ est/ sempre tra!alhando com o!2etos";INX e ;am!da Nosso !anco arma)ena uma lista de contas" 7ssas contas possuem os mais variados correntistas$ saldos e tipos" Muitas ve)es$ precisamos fltr/entro do !loco de implementao da funo an^nima$ colocaremos a implementao da condio- 7 agora essa funo pode ser passada para dentro do mtodo 'iltra - No C# temos e3atamente a implementao dessa ideia$ mas o mtodo se chama *here ao invs de 'iltra"'iltros utili)ando ;INX >entro do !loco de implementao da funo an^nima$ colocaremos a implementao da condio- 7 agora essa funo pode ser passada para dentro do mtodo 'iltra - No C# temos e3atamente a implementao dessa ideia$ mas o mtodo se chama *here ao invs de 'iltra"'iltros utili)ando ;INX:utros mtodos ;INX 5gora imagine 0ue 0ueremos sa!er 0ual a soma do saldo de todas as contas 0ue esto cadastradas dentro da aplicao" #ara resolver esse pro!lema$ ter,amos 0ue fa)er um cdigo parecido com o seguinte-:utros mtodos ;INX #orm esse tipo de cdigo tam!m aca!a fcando repetitivo" Xuando 0ueremos fa)er a soma dos elementos de uma lista$ podemos utili)ar o mtodo (um do ;INX$ passando um lam!da 0ue fala 0ual a propriedade da conta 0ue 0ueremos somar- Com essa linha de cdigo conseguimos o mesmo efeito do foreach"5lm do (um $ tam!m podemos utili)ar o mtodo 5verage para calcular a mdia dos valores$ Count para contar o nKmero de valores 0ue o!edecem algum critrio$ Min para calcular o menor valor e Ma3 para calcular o maior valor$ entre outros":rdenando cole6es com ;INX 5lm de fa)ermos !uscas e pro2e6es$ podemos tam!m utili)ar o ;INX para ordenar cole6es de elementos":rdenando cole6es com ;INX :rdenao secund/ria"73erc,cios ;INX'screer no console 1Console. 2riteLine3 as se!uintes in&orma4es:8otal de alunos maiores de 1_ anos .maior ou igual1 8otal de alunos menores de 1_ anos Nome dos alunos matriculados em Matem/tica Nome dos alunos matriculados em Matem/tica com nota menor ou igual a BNome dos professores 0ue possuem alguma disciplina Nome dos professores sem nenhuma disciplina Nome dos alunos com C ou mais disciplinas vinculadas73erc,cios ;INX'screer no console 1Console. 2riteLine3 as se!uintes in&orma4es:Nome dos alunos 0ue comeam com a letra DME Nome dos com menos de 1\ caracteres .R1\1 Nome dos professores 0ue contm em alguma parte do nome D#edroENome dos alunos de portuguJs ordenados pela idade do menor para o maior" Nome do professor da disciplina de [eografa#r3ima aula ` Mdulo II Introduo ao 5>:"N78ConnectionCommand >ataHeaderIntroduo ao NHi!ernate 5r0uitetura do NHi!ernate Nuget #ac=age Manager ` ?isual (tudioConfgurando o NHi!ernateHeferJncias 5postila Caelum C# :rientao a :!2etos 5postila a19 C# http-NNpt"slideshare"netNivanricarteNprogramao