19

APOSTILA 2

Embed Size (px)

Citation preview

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 2

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 3

    Introduo a C# e VB.net

    Modelos Anteriores Linguagem C

    - Gerenciamento de Memria Manual.free (ponteiro); - Pode acessar reas de memrias proibidas; - Linguagem Estruturada (Imperativas); - No tira proveito de recursos da OO, como herana; - Complexo desenvolvimento quando se utiliza de APIs puras; - Complexidade ao se usar milhares de funes e Tipos de Dados;

    Modelos Anteriores Linguagem C++

    - Melhorias em relao a Linguagem C; - Orientao a Objetos; - Continua a gerenciamento de memria Manual; - Uma maior facilidade de criao de interfaces com o usurio; - Ainda muito enraizada na linguagem C.

    Modelos Anteriores Linguagem Visual Basic 6

    - Se popularizou pela sua capacidade de construir interfaces complexas; - Ferramentas para uma alta produtividade na construo de interfaces; - Maior biblioteca de cdigo; - No uma linguagem totalmente OO; - A linguagem apenas compatvel com objetos; - No suporta parametrizao ou construtores; - No suporta aplicaes Multithreads;

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 4

    Modelos Anteriores C, C++, VB6

    Modelos Anteriores Linguagem e Plataforma Java

    - Surgimento de uma nova perspectiva, INTERNET; - O conceito de Virtual Machine; - Linguagem Orientada a Objetos; - Linguagem bastante robusta e que possui uma grande biblioteca de classes; - Possibilidade de desenvolver grandes aplicaes 100% Java; - Tem um problema potencial, a falta de integrao com outras linguagens; - Interoperabilidade um conceito chave hoje em varias reas da computao;

    Plataforma .NET e .NET FRAMEWORK A idia da Microsoft

    - Apresentada em 2000, no PDC; - Uma nova viso no desenvolvimento e comercializao; - Plataforma tem a internet como alvo principal; - Em seu surgimento: A ideia do software no ser mais um produto, mas um servio; - Plataforma nica; - Suporte a varias linguagens;

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 5

    - Hoje engloba uma serie de tecnologia para o desenvolvimento de software;

    Plataforma .NET O que um Framework?

    Framework: Framework um conjunto de classes que colaboram para realizar uma responsabilidade para um domnio de um subsistema da aplicao. FAYAD E SHMIDT

    .NET Framework: Viso da Microsoft de uma plataforma nica para desenvolvimento e execuo de sistemas e aplicaes. Todo e qualquer cdigo gerado para .NET, pode ser executado em qualquer dispositivo que possua um framework de tal plataforma.

    Plataforma .NET A idia da Microsoft - Plataforma nica de desenvolvimento e execuo: - Desenvolvimento Web - Desenvolvimento Desktop - Desenvolvimento de Jogos - Desenvolvimento Mobile

    - Multilinguagem, suporta mais de 40 linguagens; - Aberto e Padronizado pelo ECMA;

    - Projetos Open Source - Mono Project - dotGNU - Moonlight

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 6

    Plataforma .NET Web Services

    WEB SERVICES

    Conceitos de Memria (Compreendendo MSIL, CLR, CTS, CLS, BLC, JIT, VES,GC)

    A plataforma .NET tem independncia na linguagem de programao: com ela possvel trabalhar com vrias linguagens diferentes no mesmo projeto e interagir entre elas. Isso possvel por termos uma IL (Intermediate Language), ou seja, linguagem intermediria onde todos os fontes compilados pelo CLR (comentado mais a frente) resultam em uma s linguagem.

    Hoje em dia no existe motivo aos comentrios que C# melhor que VB.NET ou vice-versa. Pois, se existe a IL e todo fonte convertido para essa linguagem, a IL, consequentemente dentro da plataforma .NET todas as linguagens tem a mesma capacidade. E todas acessam os mesmos objetos, ento conclumos que todas tambm tem o mesmo potencial.

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 7

    Pelo que pude perceber at o momento no h linguagem melhor ou pior. H linguagem que voc melhor se adapta ou prefere.

    Os sistemas desenvolvidos em .NET so auto-explicativos: cada programa compilado contm em si informaes necessrias em METATAGS que faz com que o runtime no precise procurar as informaes no registro do Windows. Por exemplo quando criamos um sistema, o mesmo pode ser executado em qualquer mquina (que suporte a .NET) sem necessidade da instalao. Todas as informaes necessrias para que o sistema seja executado so encontrados dentro nas METATAGS dentro dele mesmo. Com isso temos um sistema auto-explicativo, pois as informaes necessrias esto armazenadas dentro dele e no no registro do sistema operacional.

    MSIL (Microsoft Intermediate Language)

    MSIL ou IL a linguagem intermediria dita at agora. Independentemente da linguagem que voc escrever seu programa quando compilado ser gerado a IL. Mas repare que no qualquer linguagem que pode ser compilada em .NET. Ela deve aderir as especificaes da CLS e CTS (comentadas mais a frente) e s ento e linguagem pode ser "nomeada" como XYZ.NET, assim como Python.NET, Cobol.NET etc.

    .NET Framework CLR (Common language Runtime)

    o ambiente de execuo das aplicaes .NET. O CLR cuidar do gerenciamento de memria atravs do GC (visto mais a frente). Este gerenciamento de memria torna o programa menos propcio a erros. Outro item muito interessantes da .NET a converso da sua linguagem, por exemplo COBOL, para IL e neste estgio entra o compilador JIT (Just-in-Timer) um componente da CLR que interpreta a IL e gera a linguagem de mquina na arquitetura do processador.

    Caractersticas:

    - Localizar; - Carregar; - Gerenciar;

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 8

    - Gerenciamento de TIpos do .NET, de memria, de threads, verificaes de segurana.

    .NET Framework CTS (Common Type System)

    a definio de tipos de dados onde tudo um objeto e deriva da classe System.Object, que o ncleo do sistema de tipos. Pensando que tudo um objeto, logo tudo deriva da classe System.Object e, por isso, os projetistas da .NET organizaram o sistema de tipos de dados de duas formas: Tipos Valor: variveis deste tipo so alocadas na pilha e tm como classe base System.ValueType, que por sua vez deriva da System.Object.

    Tipos Referncia: variveis deste tipo so alocadas na memria heap e tm a classe System.Object como classe base. Veja melhor como fica a estrutura de tipos com esta separao: -- System.Object ---- Tipos valor ------ Estruturas ------ Tipos Enumerados ---- Tipo Referncia ------ Objeto ------ Interface ------ Ponteiros O que aconteceria se no fosse assim? Seria da seguinte forma: -- System.Object ---- Estruturas ---- Tipos Enumerados ---- Objeto ---- Interface ---- Ponteiros No teria a diferena entre Tipo valor e Tipo referncia.

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 9

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 10

    .NET FRAMEWORK CLS (Common Language Specification) Define um conjunto de regras que as linguagens que implementam a .NET devem

    seguir para que a CLR possa gerar a IL. Esse um dos motivos de podermos criar sistemas em diferentes linguagens e

    interagir entre elas dentro da .NET. No momento da compilao gerado um cdigo nico intermedirio (IL) e todas essas linguagens suportadas pela .NET seguem as regras da CLS, para que depois de gerado a IL, ela seja interpretada corretamente pela CLR, como j dito acima.

    Caractersticas: - Especificaes relacionadas aos subtipos comuns; - Todas as linguagens suportadas pelo .NET; - Com isso podemos concluir que um tipo .NET tem que ir de acordo com as

    especificaes do CLS, com isso todas as linguagens suportadas podero interoperar.

    .NET FRAMEWORK BCL (Base Classe Library - Biblioteca de Classe Base)

    Como o prprio nome diz, na biblioteca de classe base voc encontra sistema de janelas, biblioteca de entrada/sada de dados, sockets, gerenciamento de memria, etc. Esta biblioteca organizada em uma estrutura conhecida como namespace, ou seja, imagine que voc precise atribuir um nome ao seu componente para que o mesmo possa ser referenciado a partir de outro programa. Abaixo seguem alguns namespaces da .NET System: Contm algumas classes de baixo nvel usadas para trabalhar com tipos primitivos, operaes matemticas, gerenciamento de memria etc. System.Collections: Contm pilhas, filhas e listas encadeadas. System.Data, System.Data.Common, System.Data.OleDb, System.Data.SqlClient: Acesso a base de dados. Aqui tambm se encontra o ADO.NET System.Diagnostics: Log de Event, medio de performance, gerenciamento de processos, depurao etc. System.Drawing e namespace derivados:

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 11

    A .NET oferece uma biblioteca de componentes para trabalhar com grficos, chamadas GDI+, que se encontra neste namespace. System.IO: Biblioteca para lidar com entrada e sada, gerenciamento de arquivos etc. System.NET: Bibliotecas para programao de redes, sockets etc. System.Reflection: Biblioteca necessria para gerar cdigo em tempo de execuo, descobrir tipo de variveis etc.

    System.RuntimeInteropServices e System.Runtime.Remoting: Fornece bibliotecas para interagir com cdigo no-gerenciado. System.Security: Criptografia, permisso e todo o suporte referente segurana. System.Threading: Biblioteca para aplicaes multithread System.Web: Biblioteca sobre tudo relacionado a Web, como Webservices, ASP.NET etc. System.Windows.Forms: Bibliotecas para o desenvolvimento de aplicaes Windows tradicionais. System.XML: Biblioteca que permite a interao com documentos XML. Estrutura da arquitetura .NET em camadas: Primeira: Linguagem de programao preferida e aceita pela especificao da CLS e CTS. Segunda: BCL (Base Class Library) Terceira: CLR (Common Language Runtime) Quarta: CTS (Common Type System) e CLS (Common Language Specification) Explicando melhor as camadas e para que servem, ficaria da seguinte forma: Voc usar sua linguagem de programao preferida e que seja suportada pela .NET (primeira camada) e ento criar seus sistemas. E, para cri-los, voc acessar as classes da BCL, j que tudo objeto em .NET. (segunda camada) Feito isso, seu programa dever ser compilado e ento gerado a IL que, por sua vez, ser interpretada pela CLR (terceira camada), que dever passar pelas especificaes da CTS e CLS (quarta camada).

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 12

    .NET FRAMEWORK Metadados ou METADATA

    Um programa feito na plataforma .NET, como j dito, no utiliza o registro do Windows por ser auto-explicativo. As informaes so armazenadas em METADATA dentro de cada programa no momento da compilao.

    Que informaes so essas? Descrio dos tipos (classes, estruturas, tipos enumerados etc) usado na aplicao,

    podendo esta ter sido gerada em forma de DLL ou executvel. Descrio dos membros (propriedades, mtodos, eventos etc.) Descrio de cada unidade de cdigo externo (assembly) usada na aplicao e que

    requerida para que esta execute adequadamente. Resoluo de chamada de mtodo. Resoluo de verses diferentes de uma aplicao.

    Outra coisa muito importante nas aplicaes .NET que mesmo duas aplicaes sendo homnimas, elas convivem normalmente no mesmo ambiente. Isto acontece porque na METADATA contem a verso de cada um, evitando o conflito entre as aplicaes. A CLR procura na METADATA a verso correta da aplicao a ser executada.

    .NET FRAMEWORK - Assembly

    Toda aplicao .NET, quando compilada, armazenada fisicamente numa unidades de cdigo denominada assembly. Uma aplicao pode ser composta de um ou mais assemblies, os quais so representados no sistema de arquivos de sistema operacional host na forma de arquivos executveis, de extenso .EXE, ou de uma biblioteca de ligao dinmica melhor conhecida como DLL, de extenso .DLL.

    .NET FRAMEWORK - PE (Portable Executable - Executvel Portvel)

    Isto significa que o fonte gerado poder ser interpretado (executado) em qualquer plataforma que tenha suporte .NET, sem necessidade de recompilao do fonte.

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 13

    .NET FRAMEWORK - Compilao JIT (Just in Time) O compilador JIT, tambm conhecido como JITTER, converte as instrues da IL

    para instrues especficas da arquitetura do processador onde a aplicao .NET esta sendo executada.

    Temos trs tipos de JITTER: Pre-JIT: Compila de uma s vez todo o cdigo da aplicao .NET que esta sendo

    executada e o armazena no cache para uso posterior. Econo-JIT: Utilizado em Hand-Helds onde a memria um recurso precioso.

    Sendo assim, o cdigo compilado sob demanda e a memria alocada que no esta em uso liberada quando o dispositivo assim o requer. Normal-JIT: Compila o cdigo sob demanda e joga o cdigo resultante em cache, de forma que esse cdigo no precise ser recompilado quando houver uma nova invocao do mesmo mtodo.

    .NET FRAMEWORK - VES (Virtual Execution System - Sistema de execuo virtual)

    um processo de compilao e aqui onde o JITTER ativado quando uma aplicao .NET chamada. O windows identifica que esta uma aplicao .NET e uma runtime Win32 passa o controle para a runtime do .NET. Neste momento a compilao do PE efetuada e s ento o cdigo assembly prprio da arquitetura do processador gerado para que a aplicao possa ser executada. Vamos ver todos os processos em camadas: Primeira: Sua linguagem de programao Segunda: IL Terceira: CLR (Compilador JIT - Cdigo nativo gerenciado - Execuo do cdigo) Quarto: Dispositivo de sada: PentiumX, Mobile etc. Em outras palavras as camadas e para que servem ficaria da seguinte forma: Voc desenvolve seu aplicativo (primeira camada) e compila gerando a IL (segunda camada). Aps isto a CLR interpreta (quando o aplicativo for executado) e compila com o JIT, gerando o cdigo nativo da arquitetura do processador e o executa (terceira camada). De acordo com o dispositivo de sada gerado um cdigo nativo da arquitetura do processador diferente (quarta camada).

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 14

    .NET FRAMEWORK GC - (Garbage Collector - Coletor de Lixo)

    Gerenciar memria no deve ser uma preocupao de quem desenvolve sistemas para tratar sobre regras de negcio e com .NET voc no precisa se preocupar com o gerenciamento de memria porque o GC faz isso pra voc. Quando uma rea de memria no esta mais em uso, o GC trata de liber-la. E quando necessrio a utilizao de um novo espao o GC tambm faz isso pra voc. No por isso que voc deixar de finalizar seus objetos, mas caso isso acontea (esta a pior das hipteses) o GC tratar este caso.

    Apesar de que mesmo voc no trabalhando com C/C++, em .NET voc tambm poder gerenciar memria o que torna o desempenho maior. Em contrapartida considerado um mtodo inseguro, conhecido como "unsafe code".

    Tipos de variveis: A 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 .NET Framework type

    bool System.Boolean

    byte System.Byte

    sbyte System.SByte

    char System.Char

    decimal System.Decimal

    double System.Double

    float System.Single

    int System.Int32

    uint System.UInt32

    long System.Int64

    ulong System.UInt64

    object System.Object

    short System.Int16

    ushort System.UInt16

    string System.String

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 15

    Comparao C# E VB.NET

    Vb.net C#

    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#/Vb.net Valores possveis de se armazenar bool Verdadeiro ou Falso (Valores booleandos) byte 0 a 255 (8 bits) sbyte -128 a 127 (8 bits) char Um caractere (16 bits) decimal 1.0 1028 a 7.9 1028 (128 bits)

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 16

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

    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;

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

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 17

    Diferena na Declarao de variveis entre C# e VB.net

    Visual Basic .NET C#

    Dim contador As Integer Dim contador As Integer = 10 Dim dados As Double Dim dados As Double = 3.5# Dim valor As Single Dim nome As String Dim c As Char Dim l As Long Dim m As Decimal Dim obj As MinhaClasse Dim obj1 As New MinhaClasse() Dim obj2 As MinhaClasse = New MinhaClasse() Public endereco As String Private cidade As String

    int contador; int contador = 10; double dados; double dados = 3.5; float f; string nome; char c; long l; decimal m; MinhaClasse obj; MinhaClasse obj1 = new MinhaClasse(); MinhaClasse obj2 = new MinhaClasse(); public string endereco; private string cidade;

    Aritmtica

    Operadores aritmticos C#.

    Operador Descrio

    + (Adio) - (Subtrao) * (Multiplicao) / (Diviso) % (Resto/Mdulo) Dos cinco operadores citados acima os trs primeiros trabalham da maneira que ns j conhecemos (Adio, Subtrao e Multiplicao), j o operador de Diviso / trabalha de maneira diferente na diviso de um inteiro, por exemplo, quando dividimos 11 por 2 usando esse operador (sendo 11 um inteiro) o resto da diviso descartado, pois os inteiros no aceitam numeros fracionrios, ou seja, o resultado seria 5. J o operador % tem como sua nica funo pegar o resto de uma diviso usando o mesmo exemplo dividindo 11 por 2 usando o operador % modulo o resultado seria 1, j que o resto da diviso. Agora vamos fazer um pequeno exerccio para praticar os conceitos aprendidos, veja:

    using System; class OperadoresAritmeticos { public static void Main () { int soma = 0, diferenca=0, produto=0, resto=0; double divisao=0; // resultado da diviso int num1 = 10, num2 = 2; soma = num1 + num2;

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 18

    diferenca = num1 - num2; produto = num1 * num2; divisao = num1 / num2; // resto de 3/2 resto = 3 % num2; Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2); Console.WriteLine(); Console.WriteLine("Soma de {0} e {1} {2}", num1, num2, soma); Console.WriteLine("Diferena de {0} e {1} {2}", num1, num2, diferenca); Console.WriteLine("Produto de {0} e {1} {2}", num1, num2, produto); Console.WriteLine("Quociente de {0} e {1} {2}", num1, num2, divisao); Console.WriteLine(); Console.WriteLine("resto de 3 quando dividido por {0} {1}", num2, resto); } }

    O exemplo acima embora simples faz uso de todos os operadores aritmticos, como voc j viu no artigo passado o mtodo WriteLine da classe Console apenas mostra uma mensagem na tela, veja a seguinte linha de cdigo:

    Voc deve estar se perguntando o que significa esses {0}, {1} e {2}, isso serve para ns dizermos ao programa onde se encontra o valor da variavel nessa string, ou seja, {0} ser substitudo por num1, {1} ser substitudo por num2 e {2} ser substitudo por soma.

    Operadores de atribuio Em C# temos os seguintes operadores de atribuio:

    Operador Descrio = (Atribuio simples) += (Atribuio aditiva) -= (Atribuio Subtrativa) *= (Atribuio Multiplicativa) /= (Atribuio de diviso) %= (Atribuio de mdulo) Um operador de atribuio serve justamente para atribuirmos um valor a uma varivel, veja: x = 5; Ou seja, simplesmente atribumos o valor 5 a varivel x usando o operador de atribuio simples =. Outro exemplo: int num1=10, num2=2; num1 += num2; Primeiro atribumos o valor 10 a varivel num1 e o valor 2 a varivel num2, na segunda linha atribumos o valor de num2 a varivel num1 com o operador de atribuio +=, que valor ter num1 agora? Neste caso num1 ter o valor atribudo igual a 12, pois seria o mesmo que: int num1=10, num2=2; num1 = num1 + num2; O mesmo valido para os outros operadores, exemplo: int num1=10, num2=2; num1 -= num2; O que seria o mesmo que:

  • APOSTILA PARTE 2

    Tecnologia da Informao o nosso DNA 19

    int num1=10, num2=2; num1 = num1 - num2; Neste caso usamos o operador -= e o resultado de num1 seria 8, e assim por diante.

    Obs: Faa as Prticas da APostila.