SlideShare uma empresa Scribd logo
1 de 75
C#
     @miguelpedroso
(C Sharp)

       @miguelpedroso
C# é uma linguagem de
programação moderna e orientada
          por objectos.

     mas… porquê usar C#?
Assembler


       i386                           i386 bin

      ARM                             ARM bin

      6502                            6502 bin


       Z80                             Z80 bin




  Código assembly                  binário para correr
específico de um CPU               num tipo de CPUs.
Compilador                          Assembler
              de C


                               i386                           i386 bin

Programa
                              ARM                             ARM bin
  em C

                                 …                               … bin




                          Código assembly                  binário para correr
                        específico de um CPU               num tipo de CPUs.
Quando compilamos um programa
escrito em C, ele só pode funcionar
   na plataforma para o qual foi
            compilado.

            E em C#?
Compilador              CLR
             de C#




Programa                Código           Código
  em C#                   CIL            nativo




                        Bytecode
Quando compilamos o programa em
 C#, é gerado código CIL (Common
      Intermediate Language)

Esse código intermédio é executado
    com ajuda de uma Common
        Language Runtime
x86            CIL

add eax, edx   ldloc.0
               ldloc.1
               add
PIC16F628a     stloc.0

addwf 20h, f
Desta forma, um programa escrito
 em C#, depois de compilado, é
      platform-independent
Hello, World
public class HelloW
{
  public static void Main()
  {
    System.Console.WriteLine("Hello, World!");
  }
}
Tipos de dados

      byte, sbyte, short, ushort,
int, uint, long, ulong, float, double,
        decimal, bool, object

            char, string
string str1 = “Hello”;
string str2 = “World ”;

string str3 = str1 + “ “ + str3 + 0.ToString()

Console.WriteLine(str3);

Output: Hello World 0
Em C# as variáveis locais têm de ser
inicializadas antes de serem utilizadas.

           int i = new int();

                  ou

               int i = 0;
decimal vs double

quando queremos tratar de valores
monetários, devemos usar sempre o
          tipo decimal!
decimal vs double
static void Main(string[] args)
{
       decimal cash1 = 99999999999999.99M;
       decimal result = cash1 - 1M;

       double cash2 = 99999999999999.99D;
       double result2 = cash2 - 1.0D;

       Console.WriteLine("Decimal: " + result.ToString() + "n Double: " + result2.ToString());

       Console.ReadLine();
}



    Output: Decimal: 99999999999998,99
             Double: 99999999999999
                                                               Why? :)
Operadores

     =, +, -, *, /, %

    ==, !=, <, <=, >=

    ! (Negação Lógica),
~ (Complemento Bitwise)
Operadores

++, --, +=, -=, *=, /=

   <<, >>, |, &, ^

       &&, ||
Operadores

          && vs &

 && é um AND condicional
(true && false) retorna false

     (1 & 3) retorna 1
Operador Ternário

int foo = (condition) ? 4 : 3;
Condições

if (condition)
   action();
else if (condition2)
   action2();
else
   action3();
Ciclos

while (condition)     for (decl; condition; action)
{                     {
  instructions;           instructions;
}                     }

             do
             {
                instructions;
             } while (condition)
Ciclos Infinitos


 while (true);


  for ( ; ; );
Ciclos foreach

string name = "Miguel Ferreira de Sá Pedroso";
string []arr = name.Split(" ".ToCharArray());

foreach (string str in arr)
    System.Windows.Forms.MessageBox.Show(str.ToUpper());




                                                 ...
Excepções

try
{
   int a = 0;
   int b = 2 / a;
}
catch (Exception err)
{
   System.Windows.Forms.MessageBox.Show(err.Message);
}
finally
{
   // Do something
}
Orientação por Objectos

                 Member




StandartMember        PremiumMember
Orientação por Objectos

                 Member          Os StandartMembers e os
                               PremiumMembers partilham
                                certos atributos e métodos
                                       em comum…


                                         Mas também têm
StandartMember        PremiumMember      diferentes tipos de
                                          comportamento!
Orientação por Objectos


Com programação orientada por
objectos, podemos usar classes
   para reaproveitar código.

Cada objecto individual, chama-se
         uma instância.
Orientação por Objectos
                               public class PremiumMember : Member
                                {
                                  int premiumScore;
public abstract class Member
{                                  public void IncreaseScore()
   protected string nick;          {
   protected int age;                 if (this.active)
                                          this.premiumScore++;
    protected bool active;            else
}                                         throw new Exception("Increasing
                               score of inactive member!");
                                   }
                                 }
Orientação por Objectos


                             Member abe = new StandartMember()
public class Member
                             abe.nick = “Abraham Lincoln”;
{
   protected string nick;
                             Member membro = new PremiumMember();
   protected int age;
                             membro.nick = “Miguel Pedroso”;
                             membro.age = 20;
    protected bool active;
                             membro.active = true;
}
                             membro.IncreaseScore();
Orientação por Objectos
     (Polimorfismo)
Member abe = new StandartMember()
abe.nick = “Abraham Lincoln”;

PremiumMember membro = new PremiumMember();
StandartMember lincoln = (StandartMember)abe;


 Podemos usar uma classe com o seu
próprio tipo, com o tipo de uma super-
classe, ou com o tipo da interface que
              implementa.
Orientação por Objectos

                          object




UInt32                    Member                   String




         StandartMember            PremiumMember
Orientação por Objectos


{access modifier} class Member
{
    {access modifier} string nick;
}
Orientação por Objectos


private              apenas acessível na própria classe;
protected            também acessível nas suas sub-classes;
public               acessível por qualquer outra classe;
internal             acessível no mesmo assembly;
protected internal   acessível no mesmo assembly ou
                     nas suas sub-classes.
Orientação por Objectos


{access modifier} {modifier} class Member
{
    {access modifier} string nick;
}
Orientação por Objectos


sealed        nenhuma outra classe pode herdar desta;
abstract      indica que esta classe deve servir de base
              para outras sub-classes e não pode ser
              instanciada;
static        declara uma classe como sendo estática.
Controlar acesso a atributos

public class MyClass
                              public class MyClass
{
                              {
  private int _age;
                                public int Age
                                {
    public int Age
                                    get;
    {
                                    private set;
       get{ return _age; }
                                }
       set{ _age = value; }
                              }
    }
}
Orientação por Objectos
                       (classes estáticas)

public static class MPMath
{
   public static int Factorial(int n)    int result = MPMath.Factorial(5);
   {                                     System.Console.WriteLine(result);
      if (n == 0)
          return 1;
      else
          return n * Factorial(n - 1);
   }
}
Interfaces

public interface IExample                  Uma interface pode ser
{
    int DoSomething();                    considerada uma lista de
}                                       “coisas” que um objecto pode
                                                    fazer.
public class Class1 : IExample
{
    public int DoSomething()              Numa interface podem ser
    {                                    colocados os protótipos das
          // Do something
          return 0;                      funções e variáveis a serem
    }                                      implementados por uma
}                                               dada classe.
Interfaces

public interface IExample        public class Class2 : Class1, IExample
{                                {
    int DoSomething();               public int DoSomething()
}                                    {
                                           // Do something
public class Class1                        return 0;
{                                    }
    public int DoSomething()     }
    {
          // Do something
          return 0;
    }
}
enums
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

Days day = Days.Sat;




 Os enums são utilizados para descrever
   enumerações, de um conjunto de
             constantes.
Métodos
private int makeColor (int r, int g, int b)
{
                                                        Vários métodos podem ter o
           // Do Stuff                                   mesmo nome, desde que
}                                                          recebam argumentos
private int makeColor (int r, int g, int b, int a)
                                                                diferentes.
{
           // Do Stuff                                      Os métodos podem ter
}
                                                            argumentos opcionais.

                                          private int makeColor (int r, int g, int b, int a = 0)
                                          {
                                                     // Do Stuff
                                          }
Passagem por referência
                                                   Em C# podemos passar
private int doStuff()
{
                                                argumentos por referência, e
           int foo = 4                              não apenas por valor.
           updateValue(ref foo);
           Console.WriteLine(foo.ToString());
}
                                                 Para isso usamos a palavra
                                                  reservada “ref” ou “out”.
private void updateValue(ref int val)
{
          val = val / 2 + 1;
                                                A palavra “ref” obriga a que
}                                                variável cuja referência é
                                                   passada, já tenha sido
                                                        inicializada.
namespaces

using System.Text;
using System.Windows.Forms;    Em C# temos namespaces,
                               que permitem organizar o
namespace SampleNamespace
{
                              código e ter vários tipos com
   public class Class1              o mesmo nome.
   {

    }
                              Um namespace pode conter
}                             classes, intefaces, enums e
                                         structs.
Até agora vimos o básico…

Mas onde está o verdadeiro
  poder do C# e da .NET
      Framework?
Ok, mas agora como é que
uso a .NET Framework para
        fazer coisas?
Exemplo

Construir um programa de
que converta uma imagem
que está no clipboard para
     preto e branco.
Numa bitmap de 24bits, cada
pixel tem 3 componentes na sua
     cor, Red, Green e Blue.

Para converter-mos para Black &
 White, calculamos a média das
       três componentes.
Mas como trabalhamos com
imagens em C#, precisamos de
fazer download de bibliotecas?

      Não! Basta usar o
      System.Drawing!
Bitmap bp = (Bitmap)Clipboard.GetImage();
Color color;
int average;

for (int i = 0; i < bp.Height; i++)
  for (int j = 0; j < bp.Width; j++)
  {
      color = bp.GetPixel(j, i);
      average = (color.R + color.G + color.B) / 3;
      bp.SetPixel(j, i, Color.FromArgb(average, average, average));
  }

Clipboard.SetImage((Image)bp);
Exemplo 2

Construir o “esqueleto” de
     um web spider.
Mas como fazer download
   de ficheiro em C#?

 E como usar Regex para
     extrair os URLs?

Precisamos de 2 bibliotecas
 e 1000 linhas de código?
Não! Basta usar o System.Net e o
 System.Text.RegularExpressions
      da .NET Framework!
using (WebClient client = new WebClient())
{
  string html = client.DownloadString("http://hackerschool.ist.utl.pt/");

  Regex regex = new Regex("http://([w+?.w+])+([a-zA-Z0-
9~!@#$%^&amp;*()_-=+/?.:;',]*)?",
RegexOptions.IgnoreCase);

    MatchCollection matches = regex.Matches(html);

    foreach (Match match in matches)
       MessageBox.Show(match.Value.ToString());
}
Que plataformas correm
programas feitos em C#?
Windows…




           mas não só!
Com a Mono Framework, podemos correr
   C# em muitas outras plataformas!
Com a Mono Framework, podemos correr
   C# em muitas outras plataformas!
E o que uso para programar
          em C#?
Visual Studio

A versão Express é gratuita,
  enquanto que a versão
     Ultimate é paga.
Visual Studio

  O IST tem uma parceria
com a Microsoft e fornece a
  versão Ultimate gratuita
   para alunos de alguns
          cursos!
MonoDevelop

Uma IDE opensource e
multi-plataforma, para
Windows, Linux ou Mac
Emulador de NES




Desenvolvido
   em C#
Jogo de Sokoban
Website: http://miguelpedroso.com
Email:   miguelfsp@gmail.com
         contact@miguelpedroso.com



HS:      http://hackerschool.ist.utl.pt
Obrigado!

      @miguelpedroso
Desafio

Trocar os valores de duas variaveis
   tipo “int”, sem recorrer a uma
  terceira variável temporária... E
           sem usar XORs!

   Ambos os valores iniciais só
    podem valer de 0 a 1000.
int a = 3;
int b = 4;
int temp;

Como fazer a troca sem
recorrer a variáveis
temporárias ou a XORS?
int a = 3;
int b = 4;

MessageBox.Show("a=" + a + "nb=" + b);

b |= (a << 16);
a = b & 0xFFFF;
b >>= 16;

MessageBox.Show("a=" + a + "nb=" + b);
1   A 0000 0001
7   B 0000 0111

    A 0000 0001   b |= (a << 4);
    B 0001 0111

    A 0000 0111   a = b & 0x000F;
    B 0001 0111

7   A 0000 0111   b >>= 4;
1   B 0000 0001

Mais conteúdo relacionado

Mais procurados

6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Leonardo Melo Santos
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETphilipsoares
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 

Mais procurados (19)

Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Microsoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NETMicrosoft S2B - C# ASP.NET
Microsoft S2B - C# ASP.NET
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Java2
Java2Java2
Java2
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 

Destaque (20)

Ski + Spanish in Bariloche
Ski + Spanish in BarilocheSki + Spanish in Bariloche
Ski + Spanish in Bariloche
 
Spanish and Tango
Spanish and TangoSpanish and Tango
Spanish and Tango
 
10 reasons to choose La Montaña
10 reasons to choose La Montaña10 reasons to choose La Montaña
10 reasons to choose La Montaña
 
Spanish + Bike package
Spanish + Bike packageSpanish + Bike package
Spanish + Bike package
 
Benefit club la Montaña 2015.
Benefit club la Montaña 2015.Benefit club la Montaña 2015.
Benefit club la Montaña 2015.
 
Paquete yoga
Paquete yogaPaquete yoga
Paquete yoga
 
Pre-Arrival Pack La Montana
Pre-Arrival Pack La Montana Pre-Arrival Pack La Montana
Pre-Arrival Pack La Montana
 
Puva makro present
Puva makro presentPuva makro present
Puva makro present
 
La montana english brochure 2016
La montana english brochure 2016La montana english brochure 2016
La montana english brochure 2016
 
“Educación del nuevo milenio”
“Educación del nuevo milenio”“Educación del nuevo milenio”
“Educación del nuevo milenio”
 
Volunteer projects
Volunteer projectsVolunteer projects
Volunteer projects
 
Volunteer work Bariloche
Volunteer work BarilocheVolunteer work Bariloche
Volunteer work Bariloche
 
Тренды в рекламе
Тренды в рекламе Тренды в рекламе
Тренды в рекламе
 
Tamara
TamaraTamara
Tamara
 
Desayunos
DesayunosDesayunos
Desayunos
 
Brock Portafolio de Servicios
Brock Portafolio de ServiciosBrock Portafolio de Servicios
Brock Portafolio de Servicios
 
Documentació bloc
Documentació blocDocumentació bloc
Documentació bloc
 
cirugía general en EII - www.grupodeapoyoeii.org
cirugía general en EII - www.grupodeapoyoeii.orgcirugía general en EII - www.grupodeapoyoeii.org
cirugía general en EII - www.grupodeapoyoeii.org
 
Presevl
PresevlPresevl
Presevl
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 

Semelhante a Introdução ao C#

Semelhante a Introdução ao C# (20)

Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Java 06
Java 06Java 06
Java 06
 
C# básica
C#   básicaC#   básica
C# básica
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Qualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código LimpoQualidade de Software: Escrevendo Código Limpo
Qualidade de Software: Escrevendo Código Limpo
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Series lab
Series labSeries lab
Series lab
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Ud2
Ud2Ud2
Ud2
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Apostila de-arduino
Apostila de-arduinoApostila de-arduino
Apostila de-arduino
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Aula python
Aula pythonAula python
Aula python
 

Último

Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)Centro Jacques Delors
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022LeandroSilva126216
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVlenapinto
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Centro Jacques Delors
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 

Último (20)

Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022AULÃO de Língua Portuguesa para o Saepe 2022
AULÃO de Língua Portuguesa para o Saepe 2022
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 

Introdução ao C#

  • 1. C# @miguelpedroso
  • 2. (C Sharp) @miguelpedroso
  • 3. C# é uma linguagem de programação moderna e orientada por objectos. mas… porquê usar C#?
  • 4. Assembler i386 i386 bin ARM ARM bin 6502 6502 bin Z80 Z80 bin Código assembly binário para correr específico de um CPU num tipo de CPUs.
  • 5. Compilador Assembler de C i386 i386 bin Programa ARM ARM bin em C … … bin Código assembly binário para correr específico de um CPU num tipo de CPUs.
  • 6. Quando compilamos um programa escrito em C, ele só pode funcionar na plataforma para o qual foi compilado. E em C#?
  • 7. Compilador CLR de C# Programa Código Código em C# CIL nativo Bytecode
  • 8. Quando compilamos o programa em C#, é gerado código CIL (Common Intermediate Language) Esse código intermédio é executado com ajuda de uma Common Language Runtime
  • 9. x86 CIL add eax, edx ldloc.0 ldloc.1 add PIC16F628a stloc.0 addwf 20h, f
  • 10. Desta forma, um programa escrito em C#, depois de compilado, é platform-independent
  • 12. public class HelloW { public static void Main() { System.Console.WriteLine("Hello, World!"); } }
  • 13. Tipos de dados byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, bool, object char, string
  • 14. string str1 = “Hello”; string str2 = “World ”; string str3 = str1 + “ “ + str3 + 0.ToString() Console.WriteLine(str3); Output: Hello World 0
  • 15. Em C# as variáveis locais têm de ser inicializadas antes de serem utilizadas. int i = new int(); ou int i = 0;
  • 16. decimal vs double quando queremos tratar de valores monetários, devemos usar sempre o tipo decimal!
  • 17. decimal vs double static void Main(string[] args) { decimal cash1 = 99999999999999.99M; decimal result = cash1 - 1M; double cash2 = 99999999999999.99D; double result2 = cash2 - 1.0D; Console.WriteLine("Decimal: " + result.ToString() + "n Double: " + result2.ToString()); Console.ReadLine(); } Output: Decimal: 99999999999998,99 Double: 99999999999999 Why? :)
  • 18. Operadores =, +, -, *, /, % ==, !=, <, <=, >= ! (Negação Lógica), ~ (Complemento Bitwise)
  • 19. Operadores ++, --, +=, -=, *=, /= <<, >>, |, &, ^ &&, ||
  • 20. Operadores && vs & && é um AND condicional (true && false) retorna false (1 & 3) retorna 1
  • 21. Operador Ternário int foo = (condition) ? 4 : 3;
  • 22. Condições if (condition) action(); else if (condition2) action2(); else action3();
  • 23. Ciclos while (condition) for (decl; condition; action) { { instructions; instructions; } } do { instructions; } while (condition)
  • 24. Ciclos Infinitos while (true); for ( ; ; );
  • 25. Ciclos foreach string name = "Miguel Ferreira de Sá Pedroso"; string []arr = name.Split(" ".ToCharArray()); foreach (string str in arr) System.Windows.Forms.MessageBox.Show(str.ToUpper()); ...
  • 26. Excepções try { int a = 0; int b = 2 / a; } catch (Exception err) { System.Windows.Forms.MessageBox.Show(err.Message); } finally { // Do something }
  • 27. Orientação por Objectos Member StandartMember PremiumMember
  • 28. Orientação por Objectos Member Os StandartMembers e os PremiumMembers partilham certos atributos e métodos em comum… Mas também têm StandartMember PremiumMember diferentes tipos de comportamento!
  • 29. Orientação por Objectos Com programação orientada por objectos, podemos usar classes para reaproveitar código. Cada objecto individual, chama-se uma instância.
  • 30. Orientação por Objectos public class PremiumMember : Member { int premiumScore; public abstract class Member { public void IncreaseScore() protected string nick; { protected int age; if (this.active) this.premiumScore++; protected bool active; else } throw new Exception("Increasing score of inactive member!"); } }
  • 31. Orientação por Objectos Member abe = new StandartMember() public class Member abe.nick = “Abraham Lincoln”; { protected string nick; Member membro = new PremiumMember(); protected int age; membro.nick = “Miguel Pedroso”; membro.age = 20; protected bool active; membro.active = true; } membro.IncreaseScore();
  • 32. Orientação por Objectos (Polimorfismo) Member abe = new StandartMember() abe.nick = “Abraham Lincoln”; PremiumMember membro = new PremiumMember(); StandartMember lincoln = (StandartMember)abe; Podemos usar uma classe com o seu próprio tipo, com o tipo de uma super- classe, ou com o tipo da interface que implementa.
  • 33. Orientação por Objectos object UInt32 Member String StandartMember PremiumMember
  • 34. Orientação por Objectos {access modifier} class Member { {access modifier} string nick; }
  • 35. Orientação por Objectos private apenas acessível na própria classe; protected também acessível nas suas sub-classes; public acessível por qualquer outra classe; internal acessível no mesmo assembly; protected internal acessível no mesmo assembly ou nas suas sub-classes.
  • 36. Orientação por Objectos {access modifier} {modifier} class Member { {access modifier} string nick; }
  • 37. Orientação por Objectos sealed nenhuma outra classe pode herdar desta; abstract indica que esta classe deve servir de base para outras sub-classes e não pode ser instanciada; static declara uma classe como sendo estática.
  • 38. Controlar acesso a atributos public class MyClass public class MyClass { { private int _age; public int Age { public int Age get; { private set; get{ return _age; } } set{ _age = value; } } } }
  • 39. Orientação por Objectos (classes estáticas) public static class MPMath { public static int Factorial(int n) int result = MPMath.Factorial(5); { System.Console.WriteLine(result); if (n == 0) return 1; else return n * Factorial(n - 1); } }
  • 40. Interfaces public interface IExample Uma interface pode ser { int DoSomething(); considerada uma lista de } “coisas” que um objecto pode fazer. public class Class1 : IExample { public int DoSomething() Numa interface podem ser { colocados os protótipos das // Do something return 0; funções e variáveis a serem } implementados por uma } dada classe.
  • 41. Interfaces public interface IExample public class Class2 : Class1, IExample { { int DoSomething(); public int DoSomething() } { // Do something public class Class1 return 0; { } public int DoSomething() } { // Do something return 0; } }
  • 42. enums enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; Days day = Days.Sat; Os enums são utilizados para descrever enumerações, de um conjunto de constantes.
  • 43. Métodos private int makeColor (int r, int g, int b) { Vários métodos podem ter o // Do Stuff mesmo nome, desde que } recebam argumentos private int makeColor (int r, int g, int b, int a) diferentes. { // Do Stuff Os métodos podem ter } argumentos opcionais. private int makeColor (int r, int g, int b, int a = 0) { // Do Stuff }
  • 44. Passagem por referência Em C# podemos passar private int doStuff() { argumentos por referência, e int foo = 4 não apenas por valor. updateValue(ref foo); Console.WriteLine(foo.ToString()); } Para isso usamos a palavra reservada “ref” ou “out”. private void updateValue(ref int val) { val = val / 2 + 1; A palavra “ref” obriga a que } variável cuja referência é passada, já tenha sido inicializada.
  • 45. namespaces using System.Text; using System.Windows.Forms; Em C# temos namespaces, que permitem organizar o namespace SampleNamespace { código e ter vários tipos com public class Class1 o mesmo nome. { } Um namespace pode conter } classes, intefaces, enums e structs.
  • 46. Até agora vimos o básico… Mas onde está o verdadeiro poder do C# e da .NET Framework?
  • 47.
  • 48. Ok, mas agora como é que uso a .NET Framework para fazer coisas?
  • 49. Exemplo Construir um programa de que converta uma imagem que está no clipboard para preto e branco.
  • 50.
  • 51. Numa bitmap de 24bits, cada pixel tem 3 componentes na sua cor, Red, Green e Blue. Para converter-mos para Black & White, calculamos a média das três componentes.
  • 52. Mas como trabalhamos com imagens em C#, precisamos de fazer download de bibliotecas? Não! Basta usar o System.Drawing!
  • 53. Bitmap bp = (Bitmap)Clipboard.GetImage(); Color color; int average; for (int i = 0; i < bp.Height; i++) for (int j = 0; j < bp.Width; j++) { color = bp.GetPixel(j, i); average = (color.R + color.G + color.B) / 3; bp.SetPixel(j, i, Color.FromArgb(average, average, average)); } Clipboard.SetImage((Image)bp);
  • 54.
  • 55. Exemplo 2 Construir o “esqueleto” de um web spider.
  • 56. Mas como fazer download de ficheiro em C#? E como usar Regex para extrair os URLs? Precisamos de 2 bibliotecas e 1000 linhas de código?
  • 57. Não! Basta usar o System.Net e o System.Text.RegularExpressions da .NET Framework!
  • 58. using (WebClient client = new WebClient()) { string html = client.DownloadString("http://hackerschool.ist.utl.pt/"); Regex regex = new Regex("http://([w+?.w+])+([a-zA-Z0- 9~!@#$%^&amp;*()_-=+/?.:;',]*)?", RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(html); foreach (Match match in matches) MessageBox.Show(match.Value.ToString()); }
  • 60. Windows… mas não só!
  • 61. Com a Mono Framework, podemos correr C# em muitas outras plataformas!
  • 62. Com a Mono Framework, podemos correr C# em muitas outras plataformas!
  • 63. E o que uso para programar em C#?
  • 64. Visual Studio A versão Express é gratuita, enquanto que a versão Ultimate é paga.
  • 65. Visual Studio O IST tem uma parceria com a Microsoft e fornece a versão Ultimate gratuita para alunos de alguns cursos!
  • 66. MonoDevelop Uma IDE opensource e multi-plataforma, para Windows, Linux ou Mac
  • 67.
  • 70. Website: http://miguelpedroso.com Email: miguelfsp@gmail.com contact@miguelpedroso.com HS: http://hackerschool.ist.utl.pt
  • 71. Obrigado! @miguelpedroso
  • 72. Desafio Trocar os valores de duas variaveis tipo “int”, sem recorrer a uma terceira variável temporária... E sem usar XORs! Ambos os valores iniciais só podem valer de 0 a 1000.
  • 73. int a = 3; int b = 4; int temp; Como fazer a troca sem recorrer a variáveis temporárias ou a XORS?
  • 74. int a = 3; int b = 4; MessageBox.Show("a=" + a + "nb=" + b); b |= (a << 16); a = b & 0xFFFF; b >>= 16; MessageBox.Show("a=" + a + "nb=" + b);
  • 75. 1 A 0000 0001 7 B 0000 0111 A 0000 0001 b |= (a << 4); B 0001 0111 A 0000 0111 a = b & 0x000F; B 0001 0111 7 A 0000 0111 b >>= 4; 1 B 0000 0001