Csharp.intro
-
Upload
helder-oliveira -
Category
Documents
-
view
332 -
download
0
Transcript of Csharp.intro
Conceitos Introdutórios
Hélder Oliveira [email protected]
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
Hélder Oliveira [email protected] Introdução ao C#
• A Arquitectura
• Common Language Runtime
• .NET Class Library
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)
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
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
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
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
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#");
}
}
}
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
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
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)
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
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
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.";
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
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
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
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
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;
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");
}
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";
}
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++;
}
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
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
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
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
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
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
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
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;
}
}
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.
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
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
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
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
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;
}
}
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
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;
}
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){
(...)
}
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{
(...)
}
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...");
}
}
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!");
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;
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);
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
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);
}
Hélder Oliveira [email protected] Introdução ao C#
• A classe System.Object
• Cadeias de caracteres (Strings)
• Colecções
• Manipulação de Ficheiros
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
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
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.
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);
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
Conceitos Introdutórios
Hélder Oliveira [email protected]