1.07k likes | 1.35k Views
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 } }.
E N D
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 } }
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.
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
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
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
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”
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
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
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
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
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!";
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();
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
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
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
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.
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));
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!
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
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”
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”
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);
Tipos de Objetos Pré-definidos • Valor • Integral types • Floating point types • decimal • bool • char • Referência • object • string
Tipos predefinidosTipos Valor • Todos são estruturas (structs) predefinidas
Tipos predefinidosTipos Ponto Flutuante • Segue a especificação IEEE 754 • Suporta ± 0, ± Infinito, NaN
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
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
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
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
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
Tipos predefinidoschar • Representa um caractere Unicode • Literais • ‘A’ // Caractere simples • ‘\u0041’ // Unicode • ‘\x0041’ // Hexadecimal pequeno sem sinal • ‘\n’ // Caractere ecape
Tipos predefinidoschar • Caracteres de seqüência de fuga (lista parcial)
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
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()
Tipos predefinidosstring • Uma seqüência de caracteres Unicode (“imutável”) • Tipo referência • Sintaxe especial para literais • string s = “Eu sou uma string”;
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”;
Tipos de Objetos Tipos Definidos pelo Usuário • Tipos definidos pelo usuário
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
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
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 • …
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
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);
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
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
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
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