Você está na página 1de 19

APOSTILA PARTE 2

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
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;

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
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;
Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
- 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

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
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.
Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
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 (Justin-Timer) um componente da CLR que interpreta a IL e gera a linguagem de mquina na
arquitetura do processador.

Caractersticas:
-

Localizar;

Carregar;

Gerenciar;

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
-

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.

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2

Tecnologia da Informao o nosso DNA

APOSTILA PARTE 2
.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:
Tecnologia da Informao o nosso DNA

10

APOSTILA PARTE 2
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).

Tecnologia da Informao o nosso DNA

11

APOSTILA PARTE 2
.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.

Tecnologia da Informao o nosso DNA

12

APOSTILA PARTE 2
.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).

Tecnologia da Informao o nosso DNA

13

APOSTILA PARTE 2
.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
type

Framework

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

Tecnologia da Informao o nosso DNA

14

APOSTILA PARTE 2
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
bool
byte
sbyte
char
decimal

Valores possveis de se armazenar


Verdadeiro ou Falso (Valores booleandos)
0 a 255 (8 bits)
-128 a 127 (8 bits)
Um caractere (16 bits)
1.0 1028 a 7.9 1028 (128 bits)

Tecnologia da Informao o nosso DNA

15

APOSTILA PARTE 2
double
float
int
uint
long
ulong
object
short
ushort
string

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)

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.
Tecnologia da Informao o nosso DNA

16

APOSTILA PARTE 2
Diferena na Declarao de variveis entre C# e VB.net
Visual Basic .NET
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

C#
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;
Tecnologia da Informao o nosso DNA

17

APOSTILA PARTE 2
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:
Tecnologia da Informao o nosso DNA

18

APOSTILA PARTE 2
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.

Tecnologia da Informao o nosso DNA

19

Você também pode gostar