csharp.intro

54
Conceitos Introdutórios Hélder Oliveira [email protected]

Upload: helder-oliveira

Post on 09-Jul-2015

341 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Csharp.intro

Conceitos Introdutórios

Hélder Oliveira [email protected]

Page 2: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Introdução à .net Framework

• Bases de Programação em C#

• Programação Orientada a Objectos em C#

• O essencial da plataforma .net

• Formularios Windows

Page 3: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• A Arquitectura

• Common Language Runtime

• .NET Class Library

Page 4: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

C# VB .net J# ...

Windows

ASP .netWeb ControlsWeb Services

Windows Forms

Common Language Runtime (CLR)

.NET Framework Class Library (FCL)

Page 5: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Máquina Virtual – Implementação da Microsoft da

especificação Common Language Infrastructure (CLI)

• Compilador JIT (Just in time)– Traduz código intermédio MSIL

em código nativo

– Possui mecanismos de optimização da compilação

• Garbage Collection

• Gestão de Thread’s

• Exception Handling

C# Compiler

VB Compiler

J# Compiler...

(outros)

MSIL JIT

Native Code

Page 6: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Especificação desenvolvida pela Microsoft

• Define todo o ambiente se suporte a linguagens de alto nível

• Especifica essencilamente quatro aspectos:– Common Type System (CTS)

– Metadata

– Common Language Specification (CLS)

– Virtual Execution System (VES)

Uniformização e Licenciamento: Standard ECMA-335, Common Language Infrastructure (CLI) ISO/IEC 23271, Common Language Infrastructure

Page 7: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Inclui a Base Class Library

• Incluí classes próprias da Microsoft

• Inclui uma um vasto número de funcionalidades comuns

• Facilita o trabalho ao programador

Base Classes Library (BCL)

Exemplos de aplicação

• Manipulação de Ficheiros

• Imagem e Desenho

• Interacção com Bases de Dados

• Manipulação de documentos XML

• Comunicações

• Web

Page 8: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Introdução

• Tipos de dados

• Variáveis

• Constantes

• Controlo de fluxo

• Arrays Unidimensionais

• Arrays Multidimensionais

• Jagged Arrays

Page 9: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• O Primeiro programa

using System;

namespace PrimeiroPrograma

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("O meu 1o programa em c#");

}

}

}

Page 10: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Tipos Numéricos

Nome Tamanho (em bytes)

Gama Sinal

byte 1 0 a 255 Não

sbyte 1 -128 a 127 Sim

short 2 -32 768 a 32 767 Sim

ushort 2 0 a 65 535 Não

int 4 -2 147 483 648 a 2 147 483 648 Sim

Page 11: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Tipos Numéricos (continuação)

Nome Tamanho (em bytes)

Gama Sinal

uint 4 0 a 4 294 967 295 Não

long 8-9 223 372 036 854 775 808 a

9 223 372 036 854 775 808 Sim

ulong 8 0 a 18 446 744 073 709 551 616 Não

float 4 ±1.5 × 10−45 a ±3.4 × 1038 Sim

double 8 ±5.0 × 10−324 a ±1.7 × 10308 Sim

decimal 16 ±1.0 × 10−28 a ±7.9 × 1028Sim

Page 12: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Tipo Lógico

Nome Tamanho (em bytes)

Gama

bool 1 true ou false

Caracteres

Nome Tamanho (em bytes)

Descrição

char 2 Representa um caracter (letra)

Page 13: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

char char1 = 'X'; // Caracter literal

char char2 = '\x0058'; // Hexadecimal

char char3 = (char)88; // Cast de valor do tipo inteiro

char char4 = '\u0058'; // Unicode

char char5 = '\''; // Sequência de escape

Caracteres – Exemplos de Utilização

Page 14: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Caracteres – Sequências de Escape

Seq. Descrição

\’ Plica

\” Aspa

\\ Barra para trás

\0 Valor nulo

\a Som (beep)

\v Tabulação Vertical

Seq. Descrição

\b Backspace

\f Form Feed

\n Nova linha

\r Ir para o inicio da linha

\t Tabulação horizontal

Page 15: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Cadeias de Caracteres (Strings)

• São objectos

• Ocupam sempre um mínimo de 20 bytes

• Uma string é representada, em código, através de aspas altas (“”)

string str = "Representação de uma string.";

Page 16: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Podem ser declaradas em qualquer parte do código

• É boa prática respeitar as convenções de nomes para variáveis.

• Uma variável deve ser sempre inicializada antes de uzada

Convenções de Nomes:www.irritatedvowel.com/Programming/Standards.aspx

Page 17: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Úteis para representar valores que não mudam ao longo do código

• São declaradas através do uso do termo const

• Devem ser sempre inicializadas ao mesmo tempo quesão declaradas

• Podem ser declaradas em qualquer ponto do código

Page 18: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Precedência Operador Descrição

Primária(expressão) Agrupamento de expressões

++ ou -- Pós-incrementação ou pós-decrementação

Unária

+ ou - Sinal numérico

! Negação

~ Complemento

++ ou -- Pré-incrementação ou pré-decrementação

(tipo) Cast

Multiplicativa

* Multiplicação

/ Divisão

% Resto

Aditiva+ Adição

- Subtracção

Page 19: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Precedência Operador Descrição

Deslocamento<< Deslocamento à esquerda

>> Deslocamento à direita

Relacional

< Comparação “menor que”

> Comparação “maior que”

<= Comparação “menor ou igual que”

=> Comparação “maior ou igual que”

is Comparação de tipos de dados

Igualdade== Teste de igualdade

!= Teste de diferença

Operações lógicas binárias

& And binário

^ Xor binário

| Or binário

Page 20: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Precedência Operador Descrição

Operaçõeslógicas sobre expressões

&& And

|| Or

? : Condição

Atribuição

= Atribuição simples

*=/=%=+=-=<<=>>=&=^=|=

Atribuição pós operação da expressão com a varíavel de atribuição.

Exemplo:x +=3 ;

é equivalente a:

x=x+3;

Page 21: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

if if-else

int x = 1;

if (x > 0)

{Console.WriteLine("É maior

que 0");

}

int x = -4;

if (x > 0)

{Console.WriteLine("É maior

que 0");

}else{Console.WriteLine("É menor ou igual a 0");

}

Page 22: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

if-else if [-else] switch-case

int x = -4;

if (x > 0)

{

Console.WriteLine(

"É maior que 0");

}else if(x < 0){

Console.WriteLine(

"É menor que 0");

}else{

Console.WriteLine(

"É 0!");

}

string mes;

switch (x)

{

case 1:

mes = "Janeiro";

break;

case 2:

mes = "Fevereiro";

break;

(...)

default:

mes = "Mes Invalido";

}

Page 23: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

for while

int t = 2;

for (int i = 1; i <= 10; i++)

{

Console.WriteLine(

t+" x " + i + " = " + i*t);

}

int t=2;

int i=1;

while (i<=10)

{

Console.WriteLine(

t+" x " + i + "

= " + i*t);

i++;

}

Page 24: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

do-whileint t=2;

int i=1;

do{

Console.WriteLine(

t+" x " + i + “

= " + i*t);

i++;

}while (i<=10);

Break e Continue

• Break: termina o ciclo no ponto é em que é executado;

• Continue: termina uma interação no ponto é que é executado e inicia imediatamente a nova interação

Page 25: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

int pares[5];

ouint []pares = new

int[5];

0 2 4 6 (N-1) x 2

0 1 2 3 N-1

• Sintaxe:Declaração estática (para tipos elementares)Tipo nome[N];

OuDeclaração dinâmicatipo [] nome=new tipo[N];

Exemplo:

int N = 5;

int []pares = new int[N];

for (int i = 0; i < N; i++)

pares[i] = 2 * i;

int[] pares = { 0, 2, 4,6 };

int[] pares = new int[]

{0, 2, 4, 6 };

Inicialização Imediata

Inicialização Dinâmica

Page 26: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Dimensão 2 (Exemplo):int [,]matriz = new int[3,4];

//inicialização dinâmica

for (int i = 0; i < matriz.GetLength(0); i++)

for (int j = 0; j < matriz.GetLength(1); j++)

matriz[i, j] = i + j;

0 1 2 3

0 1 2 3

1 2 3 4

2 3 4 5

0

1

2

Page 27: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Dimensão 2(Exemplo da matriz identidade):

//inicialização estática

int [,]matriz = new

int[3,3]{

{1,0,0},

{0,1,0},

{0,0,1}};

• Dimensão 3

int [,,]matriz = new int[2,4,2];

1 0 0

0 1 2

0 1 0

0 0 1

0

1

2

Page 28: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

int [][]jagged = new int[4][];

jagged[0] = new int[]{0,1,2};

jagged[1] = new int[]{1,2};

jagged[2] = new int[]{2,3,4,5};

jagged[3] = new int[]{3};

0 1 2

0 1 2

1 2

2 3 4 5

0

1

2

33

Page 29: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Conceitos Básicos

• Sistema de Tipos do CLR

• Estrutura e Mecanismos das Classes

• Construtores

• Procedimentos e Funções

• Conversão entre tipos

• Enumerações

• Namespaces

• Tratamento de Excepções

Page 30: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Programação Oriendata a Objectos

• Cada entidade de um problema passa a ser representada por um objecto

• Aproximação à realidade

• Cada objecto é representado por uma “classe” (class)

• As características e comportamentos dos objectos são traduzidas por atributos e métodos

Page 31: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Encapsolamento

• Protecção de estruturas

• Criação de interfaces (através de funções, por exemplo)

class Encapsolamento

{

private int a;

public int GetA()

{

return a;

}

}

Page 32: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Herança

• Representação de entidades que herdam características e comportamentos de outras

Veiculo

Carro Bicicleta Moto

Polimorfismo

• Objectos diferentes, mas com os mesmos métodos que, ainda assim, traduzem comportamentos diferentes.

Page 33: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Referências

• Ao manipular um objecto, este não é manipulado directamente, mas sim a sua referência.

• Uma referência vazia contem o valor null.

MyObject a

MyObject b

MyObject c

Instância A

Instância B

Page 34: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Boxing/Unboxing

• Capacidade de adaptar tipos elementares a objectos;

int i = 5;

object o= i; //boxing

i.ToString(); //boxing

i=(int)o;//unboxing

Referência this

• Representa uma referência para o objecto corrente

Page 35: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Níveis de acesso para membros de uma classe

Modificador Descrição

public Visível para fora da classe onde está definido.

protected Visível dentro da classe onde foi declarado e em classes derivadas desta.

private Visível apenas nas classes onde está definido.

internal Visível apenas na própria unidade de compilação (assembly).

protected internal Visível apenas na própria assembly e em classes derivadas da classe onde está declarado.

Níveis de acesso de topo (entre classes)

Modificador Descrição

public Permite que uma classe seja visível a partir de outro assembly.

internal A classe é apenas visível dentro do próprio assembly. Obtém-se o mesmo efeito se nenhum modificador for incluído na declaração da classe

Page 36: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Membros estáticos

• Variáveis estáticas são partilhadas por todas as instâncias da classe a que pertencem;

• Métodos estáticos são executados fora da instanciação de objectos

Page 37: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• São executados sempre que um objecto é criado

• São usados tipicamente para inicialização de atributos

• Permitem a passagem de parâmetros

• Na prática, consiste num método com o mesmo nome da respectiva classe e sem especificação de tipo de restorno

class ObjectA

{

private int a;

public ObjectA(int a){

this.a = a;

}

public ObjectA(){

a = 0;

}

}

Page 38: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Função

public int Le(){

return a;

}

Procedimento

public void Escreve(int a){

this.a = a;

}

Overloading

public int Soma(int a,int b,

int c){

return a+b+c;

}

public int Soma(int a,int b){

return a+b;

}

• As funções tomam o mesmo nome e o

mesmo tipo de retorno, mas possuem

diferentes alinhamentos de parâmetros

de entrada

Page 39: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Passagem de Parâmetros

• As variáveis são passadas por cópia

• Mesmo sendo o parâmetro uma referência, é passada uma referência desse parâmetro

Passagem por referência (ref)

• Util para tipos elementares

public void PSomar(int a,

int b, ref int res){

res = a + b;

}

public int FSomar(int a,

int b){

return a + b;

}

Page 40: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Variáveis de Saída (out)

• Util quando se tem uma função com várias saídas

• Difere da passagem por referência porque não exige que as variáveis estejam declaradas

Exemplo (mínimo e máximo)

public void Metodo(){

int []a=new int[]{2,5,8};

int min, max;

MaxMin(a, out min, out

max){

}

public int MaxMin(int []a,

out int min, out int max){

(...)

}

Page 41: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

public class Veiculo{

public bool motorizado;

public int nrodas;

}

public class Carro : Veiculo{

public int nportas;

}

public class Bicicleta: Veiculo{

public int tipo;

}

Classe MãeVeículo

motorizado

nrodas

Carro

motorizado

nrodas

nportas

Bicileta

motorizado

nrodas

tipo

• Caso se pretenda que uma classe não permita que outras herdem as suas características, usa-se o modificador sealed.

Exemplo:sealed class Veiculo{

(...)

}

Page 42: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Polimorfismo

• É a forma mais coerente de redefinir métodos em objectos que derivam de outros

• Implica alguma perda de performance

• Usa-se a palavra-chave virtual para indicar que um método pode ser redefinido

• Usa-se o termo override

para indicar a redefinição de um método

Veiculo

Carro

Andar

Redefinição Simples

Andar

Polimorfismoclass Veiculo{

public virtual void Andar(){

Console.WriteLine("[VEICULO]Andar...");

}

public void Parar(){

Console.WriteLine("[VEICULO]Parar...");

}

}

class Carro : Veiculo{

public override void Andar(){

Console.WriteLine("[CARRO]Andar...");

}

public new void Parar(){

Console.WriteLine("[CARRO]Parar...");

}

}

Page 43: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Conversão por Casting

• Também designada por conversão explícita

• Util para conversão entre estruturas de memória compatíveis

Exemplo:

Carro c = new Carro();

Veiculo v = (Veiculo)c;

Operador is

• Testa o tipo de dados do objecto referenciado

Exemplo:

Carro c = new Carro();

Veiculo v = c;

if (v is Carro)

Console.WriteLine("Este

veiculo é na verdade um

carro!");

Page 44: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

Operador typeof

• Identifica o tipo de um objecto

Exemplo:Type t = typeof(Carro);

Console.WriteLine("Desc do

tipo Carro:" + t);

Operador as

• Converte variaveis de tipos diferentes, mas compatíveis

• Semelhante ao cast, mas não gera excepções

Exemplo:Carro c2 = v as Carro;

É equivalente a:

if (v is Carro)

c2 = (Carro)v;

else

c2 = null;

Page 45: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Representam constantes simbólicas de um certo tipo concreto

• São representadas internamente por um inteiro

• Podem ser convertidas para inteiros através de um cast

Exemplo:

public enum

TIPOS_VEICULOS{Carro,Bicileta,

Moto}

(...)

private TIPOS_VEICULOS tipo;

public Veiculo(TIPOS_VEICULOS t)

{

tipo = t;

}

(...)

Veiculo v = new

Veiculo(TIPOS_VEICULOS.Carro);

Page 46: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Util para organizar classes

• Evitar colisões por definições de classes com mesmo nome

• Permite uma organização hierarquica

• O uso de um Namespace deve ser declarado através do termo using, no inicio do ficheiro

MySoft

Tools

Util String

Forms Web

MySoftMySoft.ToolsMySoft.Tools.UtilMySoft.Tools.StringMySoft.FormsMySoft.Web

Page 47: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Usa-se sempre que há porções de código com significativa probabilidade de gerar excepções

• O código a tratar deve ser colocado num bloco try-catch

• O bloco catch deve conter codigo a executar caso a excepção ocorra

try{

res = a / b;

}

catch(Exception ex){

Console.WriteLine("[ERRO]"

+ ex.Message);

}

Page 48: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• A classe System.Object

• Cadeias de caracteres (Strings)

• Colecções

• Manipulação de Ficheiros

Page 49: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Object é a classe da qual todos os objectos descendem

• Garante funcionalidades básicas de todos os objectos

• ToString é um dos métodos comuns a todos os objectos

• A maioria dos metodos comuns exigem redefinição de acordo com o abjecto em causa

Page 50: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• O objecto System.String permite representar uma cadeia de caracteres

• Contém métodos para manipulação de strings

• O índice mínimo dos caracteres de uma string é 0

Membro Descrição

Lenght Tamanho da string

Operador + Concatenação de strings

IndexOf Encontra uma string dentro de outra string e devolve o índice de posicionamento

Replace Substitui por uma nova string todas as ocorrências de uma string noutra string

Split Separação de strings segundo caracteres de separação

SubString Devolve parte de uma string

Alguns membros úteis da classe String

Page 51: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Permitem agrupar e ordenar conjuntos de objectos

• Oferecem um elevado nível de flexibilidade na gestão dos objectos

• Todas as classes que representão colecções derivam da interface ICollection

• ArrayList e HashTablesão duas das classes mais comuns neste tipo de operações

• ArrayList: representa uma lista de referencias para objectos. Contem metodos para adição, deslocamento ou eliminação de elementos de forma flexível

• HashTable: Difere da classe ArrayList essencialmente por permitir associar uma chave a cada elemento da lista.

Page 52: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• Namespace System.IO

• Os objectos System.IO.StringReader e System.IO.String.Writer permitem facilmente a leitura e escrita de ficheiros, respectivamente

Exemplo de leitura:System.IO.StringReader sr;

sr=new StringReader("c:\teste.txt");

string s = sr.ReadToEnd();

Exemplo de escrita:System.IO.StringWriter sw;

sw=new StringWriter();

string s = "Conteudo de Ficheiro";

sw.Write(s);

Page 53: Csharp.intro

Hélder Oliveira [email protected] Introdução ao C#

• No Visual Studio, podem ser criados a partir de um Projecto do tipo “Windows Application”

• Usam assemblies da .NET Framework que contém uma variedade de ferramentas para formulários Windows

Page 54: Csharp.intro

Conceitos Introdutórios

Hélder Oliveira [email protected]