Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Slides 1

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 8

Aula 1

Programação I Conversa Inicial

Prof. Alan Matheus Pinheiro Araya

1 2

Introdução ao C#

Introdução ao C# e à plataforma .NET


Sintaxe básica Introdução ao C# e à Plataforma .NET
Propriedades, modificadores de acesso,
interfaces e outros
Objects, strucys e types
Exceptions

3 4

História da linguagem e plataforma A história da linguagem C# também esta


ligada à plataforma .NET
Completa 20 anos em 2022
O C# nasceu em 2002 como uma iniciativa da Possui um roadmap público e ativo
Microsoft para criar uma linguagem mais
produtiva e amigável ao C++ e VB
Junto da linguagem, nasceu também a
plataforma .NET

5 6
Em 2016, o C# e a plataforma .NET foram
reconstruídos do zero A mudança de nome .NetFramework para
.Net Core não agradou muito a comunidade
Neste ano, foi lançado o .Net Core
Em 2020, a plataforma foi rebatizada e foi
Código aberto (open source) e lançado o .NET 5
multiplataforma (Windows, Linux, Mobile,
Mac, IoT, etc) A partir de agora, as próximas versões
seguem com o nome “.NET X” (em que X é a
O Net Core chegou em sua versão final, a versão)
versão 3.1, em 2020

7 8

A imagem abaixo traduz o atual nível de A máquina virtual do C#


maturidade da plataforma .NET, suportando,
em multiplataforma, várias linguagens, como
Assim como no Java, o C# executa sobre uma
o C#, o F# e o VB.Net
máquina virtual da linguagem
No C# a Common Language Runtime (CLR)
O compilador do C# (o Roslyn) gera a
Common Intermediate Language (CIL)
A CLR traduz a CIL para binário (código
executado pelo computador)

9 10

C# e F#: Roslyn
Sintaxe Básica
CIL
CLR: Código nativo

11 12
Tipos básicos (value types)
Bytes na
Value types Tipo
memória
Limites

também são byte


sbyte
1
1
De 0 a 255
De -128 a 127
O C#, assim como no Java, possui dois tipos conhecidos como short 2 De -32,768 a 32,767

básicos de variáveis “tipos primitivos”


ushort
int
2
4
De 0 a 65,535
De -2 bilhões a 2 bilhões
uint 4 De 0 a 4 bilhões
Value type (tipo por valor) Eles herdam long 8 -9 quatrilhões a 9 quatrilhões
ulong 8 0 a 18 quatrilhões

Reference type (tipo pro referência) diretamente de float 4 Números até 10 elevados a 38

System.ValueType double 8 Números até 10 elevados a


308

no C#. Seu char 2 Caracteres unicode


decimal 24 Números com até 28 casas
principal tipo é a decimais

“struct” bool 1 True ou false

13 14

//int (inteiros):
Declaração de variáveis int v1 = 10;

int v2 = ‐20;
O C# possui um modelo simples e conciso de int resultInt = v1 + v2; //10 ‐20 = ‐10
declaração de variáveis uint uv3 = 10 + 10; //20
//char
Vamos ver os principais tipos primitivos e seu char o = 'o';
modo de declaração char i = 'i';

char exc = (char)33; //o código 33 representa o char: !


//bool:

bool a = true; //Não podemos "somar dois caracteres“, pois isso seria uma string.

bool b = false; //Então vamos inicializar uma string a partir de um array (lista) de caracteres:

bool resultBool = a && b; // true AND false = false – operação básica com booleanos. string resultChar = new string(new char[] { o, i, exc });

Console.WriteLine(resultChar); //Output no console: oi!

15 16

Tipos por referência Exemplo de instância de objetos


Os reference types (tipos por referência) são Repare o uso da palavra-chave “new” para
também conhecidos como “objects” (objetos)
instanciar um novo objeto
Todos os objetos no C# herdam da classe
System.Object //string:

string s1 = "oi!";
Objetos sempre apontam para uma referência, como string s2 = new string('x', 5); // "xxxxx"
na esquema abaixo string s3 = s1 + s2; // "oi!" + "xxxxx" = "oi!xxxxx"

//objetos
Stack memory Heap memory
object obj1 = new object();
Objeto 1.Nome
Console.WriteLine(obj1.ToString()); // System.Object ‐
João
este é um objeto vazio (com um valor default na memória)
Objeto 2.Nome 103023
(endereço do object obj2 = s3;
valor real na Console.WriteLine(obj2.ToString()); // "oi!xxxxx" ‐
memória)
este objeto aponta para a mesma referência da string s3

17 18
Blocos de decisão – if Blocos de decisão – switch
//Blocos de decisão if: int teste1 = 1;
int val1 = 10; bool csharpRocks = true; //teste lógico, se 1 > 0 e a variável csharpRocks
for verdadeira
int val2 = 100;
//decidirá em qual "case" cair
if (val1 + val2 > 0) switch (teste1 > 0 && csharpRocks)
{ {
//executa: "Condição 1 verdadeira“ case true:
Console.WriteLine("Condição 1 verdadeira"); //executa:
Console.WriteLine("C# Rocks!");
} break;
val2 = int.MinValue; case false:
if (val1 + val2 > 0) Console.WriteLine("C# é ruim!");
{ break;
default:
Console.WriteLine("Condição 2 verdadeira"); //repare que o compilador lhe ajuda marcando embaixo da
} palavra console
else //pois como é uma condição lógica, só temos true e false
{ //o default do bloco switch/case nunca será executado para
esta situação
//executa: "Condição 2 falsa“
Console.WriteLine("Não pode cair aqui!");
Console.WriteLine("Condição 2 falsa"); break;
} }

19 20

Blocos de loop – for Blocos de loop – foreach


string stringForLoop = "c# is the best!";
foreach (char caractere in stringForLoop)
//blocos de loop: for {
for (int counter = 0; counter < 5; counter++) Console.WriteLine(caractere);
{ }
Console.WriteLine($"Olá, este é um for e esta é a //resultado:
//c
iteração: {counter}");
//#
}
//
//i
//resultado: //s
//Olá, este é um for e esta é a iteração: 0 //
//Olá, este é um for e esta é a iteração: 1 //t
//Olá, este é um for e esta é a iteração: 2 //h
//Olá, este é um for e esta é a iteração: 3 //e
//Olá, este é um for e esta é a iteração: 4 //
//b
//e
//s
//t
//!

21 22

Blocos de loop – while Namespaces e classes


string stringForWhile = "c# rocks!";

while (stringForWhile.Length > 0)


{
As classes podem estar organizadas dentro
Console.WriteLine(stringForWhile);
stringForWhile = stringForWhile.Substring(0, stringForWhile.Length‐1); de namespaces, como “pastas”, em uma
estrutura de arquivos
if (stringForWhile.EndsWith("#"))
{
stringForWhile = string.Empty;

}
}
Podem criar um conceito de níveis
/*
c# rocks!
c# rocks Sempre separado por um ponto
c# rock
c# roc
c# ro
Você pode ter classes com o mesmo nome em
c# r
c# namespaces diferentes
*/

23 24
Propriedades

Propriedades, Modificadores Propriedades (properties) encapsulam


de Acesso e Outros comportamentos fundamentais de qualquer
variável
Get: recuperar o valor da variável
Set: atribuir um valor a variável

25 26

Exemplo de um field e uma property


A variável “nome” é um campo (field)
Propriedades podem implementar controles
A variável “idade” é uma propriedade sobre o get e o set
(property)
Campos (fields) não possuem esse controle
class Pessoa O get e o set são métodos implícitos
{
string nome;
int Idade { get; set; }
}

27 28

Uma propriedade pode assumir duas formas: full


Interfaces
e simple. Observe os dois exemplos

Full
string nomeCompleto;
public string NomeCompleto
{
Declaram comportamentos, ou seja, métodos
get
{ Simple Seu objetivo é expor comportamentos
return nomeCompleto;
}
set
public string NomeCompleto comuns entre classes
{ {

Auxiliam nos conceitos de abstração da


if (value.Contains(" ")) get;
{ set;
nomeCompleto = value.Replace(" ", "‐");
return;
}
orientação a objetos
}
nomeCompleto = value;
}
}

29 30
É uma convenção utilizarmos a letra “I” na frente
Modificadores de acesso
Sufixo “able/iable” (em inglês)
O ideal é que seu nome reflita seu conjunto de
comportamentos
Métodos
Modificadores de acesso são palavras-chaves
Propriedades
adicionadas antes de um tipo (type) e que
Retornos de valores constantes
interface Icomestivel
podem limitar sua acessibilidade a outros
{
void Mastigar(object comida);
tipos (classes, strutcs, etc.)
int MaximoComida { get;}
string Descrever()
{
return "Possibilita o comportamento de mastigar um alimento";
}
}

31 32

Var: variáveis locais de tipo implícito


Exemplos de modificadores de acesso do C#
Public
Podemos usar a palavra “var” para abstrair o
Internal tipo da variável local
Private Não afeta a performance
Protected Não torna o tipo dinâmico, permitindo a ele
Protected internal mudar de tipagem

33 34

Facilitam a leitura de tipos extensos, em


especial com “generics”
O var sempre é introduzido do lado esquerdo
Objects, Structs e Types
da declaração da variável

//sem var
Dictionary<string, string> dicionario = new Dictionary<string, string>();

/com var
var dicionario = new Dictionary<string, string>();

35 36
Types Objects
A palavra “type” (“tipo”), tem um significado
Todos os objetos
especial no C#, pois todos os objetos e tipos
(reference types)
primitivos são de um “tipo”, ou seja, de um type herdam de um único
Todos os objetos possuem um método type: “object”
“GetType()” (System.Object)

Descreve metadados do objeto Permite o boxing e o


unboxing
Ajuda a entender qual o type desse objeto
Facilita as abstrações
O type define o objeto (nome, métodos, e o polimorfismo
propriedades, atributos, etc.)

37 38

Boxing não requer nenhum “cuidado”


Observe o exemplo, no qual declaramos um
especial
int e o convertemos para object e depois para
int novamente Unboxing requer um processo de conversão,
chamado de casting
int x = 9; Pode gerar exceções caso o tipo final não
object obj = x; // "box"(empacota) o int dentro de um objeto
seja igual ao esperado no cast

// O processo de Unboxing requer um cast "explicito". O CLR (runtime) verifica


// Desempacota a operação acima. Fazendo um "cast" (conversão) do objeto para // que o value type é do mesmo tipo do objeto. Caso ele não seja, uma exceção
// do tipo InvalidCastException é lançada.
// seu tipo original (int) que neste caso é um value type. // O exemplo abaixo lançaria uma exeção, pois o value type "long" não é do mesmo tipo que o int
int y = (int)obj; // Unbox (desempacota) object obj = 9; // 9 é um int (quando apenas digitamos o valor "cru" na IDE)

long x = (long)obj; // InvalidCastException será lançada em tempo de execução pelo CLR

39 40

Structs Enums

São value types. Não herdam diretamente de São value types, assim como as structs
object
Possuem a funcionalidade de “enumerar”
Todos os tipos primitivos são structs listas tipadas e rígidas
Não suportam herança
Cada item do enum possui implicitamente um
Implicitamente é um object, mas é um tipo valor int
especial de object public enum Direcoes
{

Interpretado de forma diferente pela CLR


Cima,
Baixo,
LadoEsquerdo,
Seu valor nunca é uma referência, como outros LadoDireito = 6

objects }

41 42
Estrutura de Types no .NET

Exceptions

43 44

Exceptions (exceções)

Exceptions são classes que carregam consigo


São estruturas mensageiras de erros internos
metadados do erro. Existem três
da linguagem
propriedades comuns e importantes nelas
São lançadas quando a CLR encontra um
Message
situação de erro/falha inesperada
Uma string contendo a descrição do erro.
Encerram o programa de forma abrupta
Ajuda a entender qual é o problema
quando o código não possuir um bloco
“try/catch”

45 46

Try/catch/finally
StrackTrace
Uma string que representa todos os
métodos que o código executou até o erro.
Blocos try/catch/finally são blocos que
Ajuda a entender como o erro aconteceu
podem deter um erro inesperado
InnerException
O bloco try deve estar sempre acompanhado
Caso sua exceção possua outras exceções de um bloco catch ou um bloco finally ou de
como causa raiz, essa propriedade estará ambos
preenchida com a exceção original

47 48

Você também pode gostar