1 / 107

Introdução à Linguagem C #

Introdução à Linguagem C #. Prof.Dr. Antonio Geraldo da Rocha Vidal EAD-5881 - Tecnologia de Informática FEA/USP. Hello World. using System; class Hello { static void Main( ) { Console.WriteLine(“Olá Mundo!"); Console.ReadLine(); // Enter para finalizar } }.

johnna
Télécharger la présentation

Introdução à Linguagem C #

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução àLinguagem C# Prof.Dr. Antonio Geraldo da Rocha Vidal EAD-5881 - Tecnologia de Informática FEA/USP

  2. Hello World using System; class Hello { static void Main( ) { Console.WriteLine(“Olá Mundo!"); Console.ReadLine(); // Enter para finalizar } }

  3. Metas de projeto do C# • Orientação para componentes • Tudo é objeto • Construção de software robusto e durável • Integração ao software já existente, preservando investimentos.

  4. Metas de projeto do C# Orientação para Componentes • C# pode ser considerada uma linguagem orientada para objetos e componentes da família do C/C++ • O que é um componente? • Um módulo independente quanto a desenvolvimento e reutilização • Menos granulares que objetos • Os objetos são construções ao nível da linguagem • Os componentes são construções ao nível da aplicação • Inclui múltiplas classes • Freqüentemente independentes da linguagem • Em geral, o desenvolvedor e o usuário de componentes não se conhecem, não trabalham para a mesma empresa e não utilizam a mesma linguagem de programação

  5. Metas de projeto do C# Orientação para Componentes • Conceitos de componentes: • Propriedades, métodos, eventos • Atributos de projeto (design-time) e de execução (run-time) • Documentação integrada usando XML • Permitem “one-stop programming” • Sem arquivos de cabeçalho, IDL, etc. • Podem ser embutidos nas páginas ASP

  6. Metas de projeto do C# Tudo é Objeto • Visões tradicionais: • C++, Java™: os tipos primitivos são “mágicos” e não interoperam com objetos • Smalltalk, Lisp: os tipos primitivos são objetos, mas com um grande custo de desempenho • C# unifica estas visões com bom desempenho • Grande simplicidade ao longo de todo sistema • Extensibilidade e reusabilidade aprimorados: • Novos tipos primitivos: Decimal, SQL… • Coleções, etc., trabalham com todos os tipos

  7. Metas de projeto do C# Software Robusto e Durável • Coletor de lixo • Nenhum vazamento de memória e ponteiros perdidos • A manipulação de exceções é padronizada • Estrutura “tipada” e segura • Nenhuma variável sem inicialização, nenhum conteúdo inseguro • Versionamento • Evita erros comuns • Por exemplo: if (x = y) ... • Programação “sem escalas” (one-stop programming) • Menos “partes móveis”

  8. Metas de projeto do C# Preservar Investimentos • Heranças do C++: • Namespaces, pointers (em código inseguro), unsigned types, etc. • Algumas mudanças, mas nenhum sacrifício desnecessário • Interoperabilidade • Todo software precisa estar integrado • C# fala com XML, SOAP, COM, DLLs, e qualquer linguagem compatível com o .NET Framework • Produtividade aumentada • Curva aprendizado pequena • Há milhões de linhas de código C# na plataforma .NET

  9. Tipos de ObjetosVisão • Um programa C# é uma coleção de tipos de objetos: • Classes, structs, enums, interfaces, delegates • C# fornece um conjunto de tipos predefinidos • Isto é: int, byte, char, string, object • Você pode criar seus próprios tipos • Todos os dados e códigos são definidos dentro de um tipo de objeto: • Nenhuma variável global, nenhuma função global

  10. Tipos de Objetos Visão • Os tipos de objeto podem conter: • Dados • Campos, constantes, arrays • Eventos • Funções • Métodos, operadores, construtores, destruidores • Propriedades, indexadores • Outros tipos • Classes, structs, enums, interfaces, delegates

  11. Tipos de Objetos Visão • Os tipos de objetos podem ser instanciados: • …e então usados: chamar métodos, obter e configurar propriedades, etc. • Pode-se converter de um tipo de objeto para outro: • Implicitamente e explicitamente • Os tipos de objetos são organizados fisicamente em arquivos: • Namespaces, files, assemblies • Os tipos são organizados logicamente em uma hierarquia • Existem duas categorias de tipos:valor e referência

  12. i 123 s “Olá pessoal!" Tipos de Objetos Sistema Unificado de Tipos • Tipos de valor • Contém dados • Não podem ser nulos • Tipos de referência • Contém referências a objetos • Podem ser nulos int i = 123; string s = “Olá pessoa!";

  13. Tipos de Objetos Sistema Unificado de Tipos • Tipos de valor • Primitivos int i; float x; • Enumerações enum State { Off, On } • Estruturas struct Point {int x,y;} • Tipos de referência • Root object • String string • Classes class Foo: Bar, IFoo {...} • Interfaces interface IFoo: IBar {...} • Arrays string[] a = new string[10]; • Delegates delegate void Empty();

  14. Tipos de ObjetosSistema Unificado de Tipos

  15. Tipos de Objetos Sistema Unificado de Tipos • Benefícios de tipos de valor: • Nenhuma alocação volumosa • Uso mais eficiente da memória • Menos referência indireta • Sistema de tipo unificado • Sem a dicotomia PRIMITIVO X OBJETO

  16. Tipos de Objetos Conversões • Conversões implícitas • Ocorrem automaticamente • Garantia de sucesso • Nenhuma perda na precisão das informações • Conversões explícitas • Exige um elenco • Podem não ter sucesso • Informações (precisão) podem ser perdidas • Ambas conversões implícitas e explícitas podem ser definidas pelo usuário

  17. Tipos de Objetos Conversões int x = 123456; long y = x; // implícita short z = (short)x; // explícita double d = 1.2345678901234; float f = (float)d; // explícita long l = (long)d; // explícita

  18. Tipos de Objetos Sistema Unificado de Tipos • Tudo é objeto: • Em última instância, todos os tipos são herdados de objetos. • Qualquer pedaço de dados pode ser armazenado, transportado, e manipulado sem trabalho extra.

  19. Tipos de Objetos Sistema Unificado de Tipos • Polimorfismo • A habilidade de usar ou armazenar um objeto sem saber seu tipo preciso void Poli(object o) { Console.WriteLine(o.ToString()); } Poli(42); Poli(“abcd”); Poli(12.345678901234m); Poli(new Point(23,45));

  20. Tipos de Objetos Sistema Unificado de Tipos • Observação: os tipos de valor e de referência têm semântica muito diferentes • Pergunta: como podemos tratar os tipos de valor e de referência polimorficamente? • Como um int (tipo valor) pode ser convertido em um objeto (tipo referência)? • Como podemos unificar tipos de valor e de referência? • Solução: Boxing!

  21. Tipos de Objetos Sistema Unificado de Tipos • Boxing copia um tipo valor para um tipo referência • Unboxing faz a cópia inversa 123 i int i = 123; object o = i; int j = (int)o; System.Int32 o 123 123 j

  22. Tipos de Objetos Sistema Unificado de Tipos • Boxing • Copia um tipo valor para um tipo referência (objeto) • Cada tipo valor tem o correspondente (“hidden”) tipo referência • Note que uma cópia de valor referência é feita pelo tipo valor. • Os tipos de valor nunca são aliased • O tipo valor é convertido implicitamente para objeto, um tipo referência • Essencialmente um “up cast”

  23. Tipos de Objetos Sistema Unificado de Tipos • Unboxing • Operação inversa de boxing • Copia o valor para fora do box • Cópia do tipo referência para o tipo valor • Exige uma conversão de explícita • Pode não ser bem-sucedido • Essencialmente um “down cast”

  24. Tipos de Objetos Sistema Unificado de Tipos • Benefícios • Habilita polimorfismo através de todos os tipos • Classes de coleção trabalham com todos os tipos • Elimina a necessidade de classes para conversão • Substitui o OLE Automation's Variant • Muitos exemplos na .NET Framework Hashtable t = new Hashtable(); t.Add(0, "zero"); t.Add(1, "one"); t.Add(2, "two"); string s = string.Format( “Sua nota foi {0} em um total de {1}", date);

  25. Tipos de Objetos Pré-definidos • Valor • Integral types • Floating point types • decimal • bool • char • Referência • object • string

  26. Tipos predefinidosTipos Valor • Todos são estruturas (structs) predefinidas

  27. Tipos predefinidosTipos Inteiros

  28. Tipos predefinidosTipos Ponto Flutuante • Segue a especificação IEEE 754 • Suporta ± 0, ± Infinito, NaN

  29. Tipos predefinidosdecimal • 128 bits • Essencialmente um valor 96 bit elevado à uma potência de 10 • Valores decimais são representados precisamente • Não suporta zeros com sinais, infinito ou NaN

  30. Tipos predefinidosdecimal • Todos os tipos inteiro podem ser implicitamente convertidos para um tipo decimal • As conversões entre decimal e tipos flutuantes exigem conversão explícita devido à possibilidade de perda de precisão • s * m * 10e • s = 1 or –1 • 0  m  296 • -28  e  0

  31. Tipos predefinidosInteiros Literais • Integer literals podem ser expressos como decimal ou hexadecimal • U ou u: uint ou ulong • L ou l: long ou ulong • UL ou ul: ulong 123 // Decimal 0x7B // Hexadecimal 123U // Unsigned 123ul // Unsigned long 123L // Long

  32. Tipos predefinidosReais Literais • F ou f: float • D ou d: double • M ou m: decimal 123f // Float 123D // Double 123.456m // Decimal 1.23e2f // Float 12.3E1M // Decimal

  33. Tipos predefinidosbooleano • Representa valores lógicos • Os valores literais são true e false • Não se pode usar 1 e 0 como valores booleanos • Nenhuma conversão padrão entre outros tipos e booleano

  34. Tipos predefinidoschar • Representa um caractere Unicode • Literais • ‘A’ // Caractere simples • ‘\u0041’ // Unicode • ‘\x0041’ // Hexadecimal pequeno sem sinal • ‘\n’ // Caractere ecape

  35. Tipos predefinidoschar • Caracteres de seqüência de fuga (lista parcial)

  36. Tipos predefinidosTipos Referência

  37. Tipos predefinidosobject • Raiz da hierarquia de objetos • Armazenamento (book keeping) • 0 bytes para tipos valor • 8 bytes para tipos referência • Uma referência real (não um objeto) usa 4 bytes

  38. Tipos predefinidosobject Métodos Públicos • public bool Equals(object) • public bool ReferenceEquals(object) • protected void Finalize() • public int GetHashCode() • public System.Type GetType() • protected object MemberwiseClone() • public void Object() • public string ToString()

  39. Tipos predefinidosstring • Uma seqüência de caracteres Unicode (“imutável”) • Tipo referência • Sintaxe especial para literais • string s = “Eu sou uma string”;

  40. Tipos predefinidosstring • Normalmente precisam ser utilizados caracteres de fuga: • Strings literais: • A maioria de seqüências fuga são ignoradas • Com exceção de “” • Literais podem ter múltiplas linhas string s1= “\\\\server\\fileshare\\filename.cs”; string s2 = @“\\server\fileshare\filename.cs”;

  41. Tipos de Objetos Tipos Definidos pelo Usuário • Tipos definidos pelo usuário

  42. Tipos de ObjetosEnums • Um enum define um tipo para um grupo relacionado de constantes simbólicas • As escolhas devem ser conhecidas em tempo de compilação • Fortemente tipado: • Nenhuma conversão implícita de/para int • Pode ser explicitamente convertido • Operadores: +, -, ++, --, &, |, ^, ~, … • Pode especificar um tipo subjacente • byte, sbyte, short, ushort, int, uint, long, ulong

  43. Tipos de ObjetosEnums enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue } Color c = Color.Black; Console.WriteLine(c); // 0 Console.WriteLine(c.Format()); // Black

  44. Tipos de ObjetosEnums • Todos enums derivam de System.Enum • Fornece métodos para: • Determinar o tipo subjacente • O testar se um valor é suportado • Inicializar a partir de uma constante string • Recuperar todos os valores em enum • …

  45. Tipos de ObjetosArrays • Os arrays (vetores) permitem que um grupo de elementos de um tipo específico sejam armazenados em um bloco contíguo de memória • Os vetores são tipos de referência • Derivados de System.Array • Baseados em Zero • Podem ser multidimensionais • Os vetores sabem seu comprimento(s) n e grau • Permite verificação de limites de dimensões

  46. Tipos de ObjetosArrays • Declaração • Alocação • Inicialização • Atribuição e acesso • Enumeração int[] primes; int[] primes = new int[9]; int[] prime = new int[] {1,2,3,5,7,11,13,17,19}; int[] prime = {1,2,3,5,7,11,13,17,19}; prime2[i] = prime[i]; foreach (int i in prime) Console.WriteLine(i);

  47. Tipos de ObjetosArrays • Arrays Multidimensionais • Retangular • int[,] matR = new int[2,3]; • Pode ser inicializado declarativamente • int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} }; • Dentado • Um array de arrays • int[][] matJ = new int[2][]; • Deve ser inicializado proceduralmente

  48. Tipos de ObjetosInterfaces • Uma interface define um contrato • Inclui métodos, propriedades, indexadores, eventos • Qualquer classe ou estrutura implementando uma interface deve suportar todas as cláusulas do contrato • Interfaces fornecem polimorfismo • Muitas classes e estruturas podem implementar uma particular interface • Não contém nenhuma implementação • Devem ser implementadas por uma classe ou estrutura

  49. Tipos de ObjetosClasses • Um tipo de referência definida pelo usuário • Similar às classes do C++ e Java • Aceitam herança simples de uma única super classe • Aceitam herança múltipla de várias interfaces

  50. Tipos de ObjetosClasses • Membros • Constantes, dados, métodos, operadores, construtores e destrutores • Propriedades, indexadores e eventos • Membros estáticos e instanciados • Acesso aos membros • public, protected, private, internal, protectedinternal • O padrão é private • Instanciadas através do operador new

More Related