A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Linguagem C#

Apresentações semelhantes


Apresentação em tema: "Introdução à Linguagem C#"— Transcrição da apresentação:

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

2 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Pré-requisitos Este módulo presume que você possua conhecimentos básicos de: Programação Variáveis, comandos, funções, instruções, etc. Programação Orientada para Objetos Classes, herança, polimorfismo, membros, etc. C++ ou Java The intent of this module is to teach the C# language, and how it differs from C++ and Java. It is not the intent of this module to teach how to program. FEA/USP - EAD Tecnologia de Informática

3 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Objetivos Conhecer as metas de projeto do C# Conhecer os fundamentos da linguagem C#: Tipos, estrutura de programação, comandos, operadores Permitir que você possa começar a escrever e depurar programas em C#: Usando o .NET Framework SDK Usando o Visual Studio.NET This module is designed to update C++ and Java programmers with the fundamentals of C#. FEA/USP - EAD Tecnologia de Informática

4 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Hello World using System; class Hello { static void Main( ) { Console.WriteLine(“Olá Mundo!"); Console.ReadLine(); // Enter para finalizar } The Hello World application is very simple in C#. Some key points: In C# there are no global methods. Everything belongs to a class. A method named Main is the entry point for a C# application. Note that Main is spelled with a capital “M”, which is different than C and C++. The reason is that for consistency, all method names start with a capital letter in the .NET Framework The line using System; means that we can access members of the System namespace without writing “System.” each time. We could avoid the “using” statement by writing the complete path of the method, e.g. System.Console.WriteLine(“Hello World”); FEA/USP - EAD Tecnologia de Informática

5 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
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. First of all, C# was designed from the ground up to support components concepts like events, methods and properties. Second, everything is an object, which allows us to create some really clean designs. Third, it was designed to make it easy to create robust and maintainable software And finally, it should be able to integrate easily with everything that already exists, preserving your investment. FEA/USP - EAD Tecnologia de Informática

6 Metas de projeto do C# Orientação para Componentes
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 C# is component-oriented, but first, what is a component? The definition of a component is still contentious. However, there is agreement that components address issues of reuse and deployment, as opposed to objects, which are language-specific concepts. FEA/USP - EAD Tecnologia de Informática

7 Metas de projeto do C# Orientação para Componentes
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 C# is a Component Oriented Language First of all, C# was designed from the ground up to support components. It is the first language in the C/C++ family to support the concepts of components. But what defines a component? Basically it is the not only classes and methods, but also properties and events. It is not that is not possible to do component based development in C++, but you must rely usually on coding conventions like to define a property, let’s name this method as GetSomething and SetSomething. If you want to support events then it means that you need to implement this and that interface. In C#, the concept of properties, methods and events are all native. In fact, C++ only supports the concept of methods. Just as an analogy, it is not impossible to write object oriented programs in C, it is only harder than in C++. The same applies to component based development in C++ vs. C#. Also when you move to component based development you have to think in a number of other factors like separate files to describe my components, like header files in C++, IDL to describe component interfaces and so on. In C# none of these are needed since it has built-in support for these concepts, enabling what we call one stop programming, so everything can be described in the source code, instead of requiring separate files. FEA/USP - EAD Tecnologia de Informática

8 Metas de projeto do C# Tudo é Objeto
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 Everything is an Object There are two different schools here: the purists like Smalltalk where everything is an object and C++ or Java, where primitive types are treated differently for performance reasons. Typically, when everything is an object, it means that every time that you do a simple operation like adding to numbers, it will incur on a heap allocation, which is quite expensive from the CPU standpoint compared to a stack allocated piece of memory. On the other hand, when languages threat primitive types as magic types, it means that if you implement a generic class, like a collection or array, it is not truly generic, because you either have to implement one version for each primitive type or you have to write wrapper classes to each of the primitive types so they can behave as an object. In C#, it is possible if you declare a primitive type, it is created on the stack, with all performance benefits that this brings. However it is possible to assign an integer to an object, and the runtime will automatically allocate the memory on the heap to accommodate the integer and threat it as an object. This happens automatically without requiring the programmer to write an wrapper class. Just as a side note for VB programmers: you can compare a stack allocation to a stack of paper where you can only write to the top page. As soon as you enter a function or sub you get a new page and you’re done (exit the function) you just throw away the top page. Let’s say that garbage management is really simple in this scenario. Heap allocation is like having multiple pages at your disposal and also they don’t necessary vanish when your function ends. You can imagine that it is a lot more complex, because a piece of data on page 2 could be disposed, but another piece on the same page could still be needed by a different part of the code. In other words, a lot more management is necessary. FEA/USP - EAD Tecnologia de Informática

9 Metas de projeto do C# Software Robusto e Durável
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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” Prevent common mistakes from other languages C# has a lot of features to make it easier to create robust software. Every C++ programmer knows how easy is to have a pointer to an object that was already de-allocated. C# provides automatically garbage collection through the Common Language Runtime. Also, if you think about how error were handle in most of the code today, they’re mostly based on checking return codes. Exceptions provides a way to write a less code while at the same time providing a much more robust error handling mechanism. Not only exception handling is implemented in the language but it is also a inherent part of the .NET Framework Another point is that all variables are automatically initialised and it is impossible to do unsafe casts. Finally, C# is one of the first languages that provides a versioning semantics to easily support old and new clients. FEA/USP - EAD Tecnologia de Informática

10 Metas de projeto do C# Preservar Investimentos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 Leverage C++ knowledge, interoperability and rich class library First of all, since C# was based on C++, C++ programmers will adapt really quick. Second, interoperability is a key theme in the .NET Framework. So it is really easy to integrate C# code with existing applications Finally, the .NET Framework provides a very, very rich set of services that will make developers really productive. FEA/USP - EAD Tecnologia de Informática

11 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Tipos de Objetos Visã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 In most other purely object-oriented languages one would say that a program is a collection of classes. Not all types have all capabilities; e.g. enums are fairly constrained. FEA/USP - EAD Tecnologia de Informática

12 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
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 FEA/USP - EAD Tecnologia de Informática

13 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

14 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 In C# you have value types that directly hold the data on the stack and reference types that keeps a reference on the stack, but allocates the real memory on the heap. Also have pointer types in unsafe code. Will discuss those in Part 2. int i = 123; string s = “Olá pessoa!"; 123 i s “Olá pessoal!" FEA/USP - EAD Tecnologia de Informática

15 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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(); Structs and classes can be user-defined. FEA/USP - EAD Tecnologia de Informática

16 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Sistema Unificado de Tipos Valor (Struct) Referência (Class) Variável armazena Valor real Alocação na memória Alocou Pilha, membro “Ponteiro” Conteúdo Sempre tem um valor Pode ser nulo Valor padrão null Alias Não Sim = Significa Cópia do valor Cópia da referência Pode herdar Actually, structs are aliased when passed through “ref” parameters, as discussed later. Even still, only one alias can be in scope at a time. FEA/USP - EAD Tecnologia de Informática

17 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

18 Tipos de Objetos Conversões
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 This is here because before we can continue on with the Unified Type system, we have to discuss conversions. FEA/USP - EAD Tecnologia de Informática

19 Tipos de Objetos Conversões
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Conversões int x = ; long y = x; // implícita short z = (short)x; // explícita double d = ; float f = (float)d; // explícita long l = (long)d; // explícita This demonstrates both implicit and explicit conversions. FEA/USP - EAD Tecnologia de Informática

20 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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. Everything inherits from object, including primitive types, structs or classes. FEA/USP - EAD Tecnologia de Informática

21 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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()); } The example shows a function, Poly(), that is called with different types of arguments. Poli(42); Poli(“abcd”); Poli( m); Poli(new Point(23,45)); FEA/USP - EAD Tecnologia de Informática

22 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!

23 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Sistema Unificado de Tipos Boxing copia um tipo valor para um tipo referência Unboxing faz a cópia inversa i 123 int i = 123; object o = i; int j = (int)o; o System.Int32 Line 2 illustrates boxing. Line 3 illustrates unboxing. 123 j 123 FEA/USP - EAD Tecnologia de Informática

24 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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” Boxing and Unboxing is one of the key innovations of C# language. Instead of requiring the programmer to write wrapper code to convert from stack based memory to heap memory, you just need to assign a value type to an object and C# takes care of allocating the memory in the heap and generating a copy of that on the heap. When you assign the object to a stack based int, the value is converted to the stack again. This process is what we call Boxing and Unboxing. If an int is boxed, it still knows it’s an int. FEA/USP - EAD Tecnologia de Informática

25 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”

26 Tipos de Objetos Sistema Unificado de Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal 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 Main benefits of the Unified Type System: No need of wrapper code to use base types in collections or arrays No Variants anymore 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); FEA/USP - EAD Tecnologia de Informática

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

28 Tipos predefinidos Tipos Valor
Todos são estruturas (structs) predefinidas Com sinal sbyte, short, int, long Sem sinal byte, ushort, uint, ulong Caractere char Ponto flutuante float, double, decimal Lógico bool

29 Tipos predefinidos Tipos Inteiros
Tipo C# Tipo System Tamanho (bytes) Sinal? sbyte System.Sbyte 1 Sim Short System.Int16 2 Int System.Int32 4 Long System.Int64 8 Byte System.Byte Não Ushort System.UInt16 Uint System.UInt32 Ulong System.UInt64

30 Tipos predefinidos Tipos Ponto Flutuante
Segue a especificação IEEE 754 Suporta ± 0, ± Infinito, NaN Tipo C# Tipo System Tamanho (bytes) float System.Single 4 double System.Double 8

31 Tipos predefinidos decimal
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 Tipo C# Tipo System Tamanho (bytes) decimal System.Decimal 16

32 Tipos predefinidos decimal
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

33 Tipos predefinidos Inteiros 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 // Decimal 0x7B // Hexadecimal 123U // Unsigned 123ul // Unsigned long 123L // Long

34 Tipos predefinidos Reais Literais
F ou f: float D ou d: double M ou m: decimal 123f // Float 123D // Double m // Decimal 1.23e2f // Float 12.3E1M // Decimal

35 Tipos predefinidos booleano
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos predefinidos booleano 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 Eliminating implicit conversions between numbers and bool can help find subtle bugs. Tipo C# Tipo System Tamanho (bytes) bool System.Boolean 1 (2 for arrays) FEA/USP - EAD Tecnologia de Informática

36 Tipos predefinidos char
Representa um caractere Unicode Literais ‘A’ // Caractere simples ‘\u0041’ // Unicode ‘\x0041’ // Hexadecimal pequeno sem sinal ‘\n’ // Caractere ecape Tipo C# Tipo System Tamanho (bytes) Char System.Char 2

37 Tipos predefinidos char
Caracteres de seqüência de fuga (lista parcial) Char Significado Valor \’ Aspa simples 0x0027 \” Aspa dupla 0x0022 \\ Barra invertida 0x005C \0 Nulo 0x0000 \n Mudança de linha 0x000A \r Retorno do carro 0x000D \t Tabulação 0x0009

38 Tipos predefinidos Tipos Referência
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos predefinidos Tipos Referência Tipo raiz (primitivo) object Cadeia de caracteres string FEA/USP - EAD Tecnologia de Informática

39 Tipos predefinidos object
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos predefinidos object 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 Tipo C# Tipo System Tamanho (bytes) object System.Object 0/8 overhead FEA/USP - EAD Tecnologia de Informática

40 Tipos predefinidos object 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()

41 Tipos predefinidos string
Uma seqüência de caracteres Unicode (“imutável”) Tipo referência Sintaxe especial para literais string s = “Eu sou uma string”; Tipo C# Tipo System Tamanho (bytes) String System.String 20 mínimo

42 Tipos predefinidos string
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

43 Tipos de Objetos Tipos Definidos pelo Usuário
Enumerations enum Arrays int[], string[] Interface interface Reference type class Value type struct Function pointer delegate

44 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Tipos de Objetos Enums 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 Enums in C# are strongly typed, which means that you can’t assign a int enum to a long, or vice versa, avoiding some typical conversion mistakes. FEA/USP - EAD Tecnologia de Informática

45 Tipos de Objetos Enums 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

46 Tipos de Objetos Enums 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

47 Tipos de Objetos Arrays
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Arrays 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 FEA/USP - EAD Tecnologia de Informática

48 Tipos de Objetos Arrays
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);

49 Tipos de Objetos Arrays
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

50 Tipos de Objetos Interfaces
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Interfaces 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 In scenarios where completely different objects need to support some kind of shared functionality like, let’s say, persist to XML, classes can implement interfaces that make then compatible with even if they don’t share the same base class. This provides most of the benefits of multiple class inheritance without the nasty side-effects that this usually brings. FEA/USP - EAD Tecnologia de Informática

51 Tipos de Objetos Classes
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Classes 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 Classes in C# allow single inheritance and multiple interface inheritance. Each class can contain methods, properties, events, indexers, constants, constructors, destructors, operators and members can be static (can be accessed without an object instance) or instance member (require you to have a reference to an object first) FEA/USP - EAD Tecnologia de Informática

52 Tipos de Objetos Classes
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Classes 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, protected internal O padrão é private Instanciadas através do operador new protected internal = protected OR internal FEA/USP - EAD Tecnologia de Informática

53 Tipos de Objetos Estruturas (Structs)
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Estruturas (Structs) Similar às classes, mas: Tipo de valor definido pelo usuário Herança sempre a partir de um ValueType Ideal para objetos “leves” ou “primitivos” int, float, double, etc., são todos structs Tipos primitivos definidos pelo usuário Complex, point, rectangle, color, rational Herança múltipla de interfaces Possuem os mesmos membros de uma classe Acesso aos membros public, internal, private Instanciadas através do operador new To provide a really high performance object type, C# provides structs, which are stack allocated. They’re ideal for small objects and are really fast since they don’t depend on dynamic memory allocation and the garbage collector. It is also important to notice that it is not possible to inherit from an struct. No protected access because there is no inheritance. FEA/USP - EAD Tecnologia de Informática

54 Tipos de Objetos Classes e Structs
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Classes e Structs struct SPoint { int x, y; ... } class CPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20); 10 sp 20 Again, comparing classes and structs, it is the memory layout of a struct is just a direct representation of its members directly on the stack. On a class, a reference is stored on the stack, while the object itself is stored in the heap. cp CPoint 10 20 FEA/USP - EAD Tecnologia de Informática

55 Tipos de Objetos Delegates
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Tipos de Objetos Delegates Um delegate é um tipo de referência que define uma assinatura a um método Quando instanciada, uma delegate contém um ou mais métodos Essencialmente um apontador de funções orientado para objetos. Base fundamental para tratamento de eventos FEA/USP - EAD Tecnologia de Informática

56 Estrutura de Programação Introdução
Organizando Tipos Namespaces References O Método Main Sintaxe

57 Estrutura de Programação Organizando Tipos
Organização física: Os tipos de objetos (type) são definidos em arquivos (file). Os arquivos são compilados em módulos (module). Os módulos são agrupados em montagens (assembly). Assembly Module File Type

58 Estrutura de Programação Organizando Tipos
Os tipos são definidos em arquivos: Um arquivo pode conter múltiplos tipos Cada tipo é definido em um único arquivo Os arquivos são compilados em módulos: Um módulo é uma DLL ou um EXE Um módulo pode conter múltiplos arquivos Os módulos são agrupados em assemblys: Um assembly pode conter múltiplos módulos Os assemblys e os módulos são sempre 1:1

59 Estrutura de Programação Organizando Tipos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Estrutura de Programação Organizando Tipos Os tipos são definidos em UM lugar: “One-stop programming” Nenhum arquivo de cabeçalho (header) ou arquivo de código-fonte para sincronizar. O código é escrito “in-line” A declaração e a definição são uma mesma e única instrução. Um tipo deve estar completamente definido em um arquivo. Não se pode por métodos individuais em arquivos diferentes Nenhuma declaração exige dependência Nenhuma referência futura é exigida FEA/USP - EAD Tecnologia de Informática

60 Estrutura de Programação Namespaces
Namespaces fornecem um modo para identificar um tipo de forma exclusiva. Fornece organização lógica de tipos: Namespaces podem estar em vários assemblies Namespaces podem ser aninhados Não existe nenhuma relação entre namespaces e estruturas de arquivo (diferentemente do que ocorre em Java). Um nome de tipo completamente qualificado inclui todos os namespaces.

61 Estrutura de Programação Namespaces
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Estrutura de Programação Namespaces namespace N1 {     // N1 class C1 {   // N1.C1 class C2 {   // N1.C1.C2 }     namespace N2 {    // N1.N2 class C2 { // N1.N2.C2     } namespace N3.N4 {    // N1.N3.N4 class C2 { // N1.N3.N4.C2     The comments show the fully qualified names. A namespace called N3.N4 is like two nested namespaces. FEA/USP - EAD Tecnologia de Informática

62 Estrutura de Programação Namespaces
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Estrutura de Programação Namespaces A diretiva using permite que você utilize tipos de objetos diferentes sem precisar digitar toda a qualificação do nome de um objeto. Porém, sempre que quiser, você pode usar um nome completamente qualificado. using N1; C1 a; // O N1. está implícito N1.C1 b; // Nome qualificado C2 c; // Erro! C2 está indefinido N1.N2.C2 d; // Um objeto da classe C2 C1.C2 e; // Um outro Note that it is N1.C1, not N1::C1 The using statement is scoped by the namespace and/or compilation module containing it. FEA/USP - EAD Tecnologia de Informática

63 Estrutura de Programação Namespaces
A diretiva using também permite que você crie nomes alternativos (aliases). using MeuC1 = N1.N2.C1; using MeuN2 = N1.N2; MeuC1 a; // Refere-se a N1.N2.C1 MeuN2.C1 b; // Refere-se a N1.N2.C1

64 Estrutura de Programação Namespaces
Melhor prática: ponha todos os seus tipos em um único namespace. Tenha um namespace específico para sua empresa, projeto, produto, etc. Estude como as classes do .NET Framework são organizadas e se inspire nelas para criar a organização de classes da sua empresa, projeto, produto, etc.

65 Estrutura de Programação Referências
No Visual Studio você especifica referências para um projeto. Cada referência identifica um específico assembly. Passada como referência (/r ou /reference) para o compilador do C#. csc HelloWorld.cs /reference:System.WinForms.dll

66 Estrutura de Programação Namespaces vs. Referências
Namespaces fornecem a capacidade de utilizar abreviações de nomenclaturas a nível de linguagem. Para que você não tenha que digitar um nome longo, completamente qualificado, repetidas vezes. As referências especificam que assembly deve ser utilizado.

67 Estrutura de Programação O Método Main
A execução começa com o método estático Main(). Normalmente, pode haver só um método com uma das seguintes assinaturas em um assembly: static void Main() static int Main() static void Main(string[] args) static int Main(string[] args) Porém, você pode ter múltiplas classes, cada com uma com um método Main, se você usar o comando /main para especificar a classe a usar.

68 Estrutura de Programação Sintaxe
Identificadores: Nomes para tipos, métodos, dados, etc. Deve ser uma palavra inteira – sem nenhum espaço em branco. Caracteres Unicode Começa com uma letra ou com o sublinhado (_Teste) Sensível a letras maiúsculas e minúsculas (case sensitive). Não devem ser utilizadas palavras-chave reservadas A menos que prefixadas

69 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Comandos Introdução Alta fidelidade ao C++ if, while, do requerem uma condição bool goto não pode saltar para blocos Comando switch Não permite falha Comando foreach Comandos checked e unchecked Conjuntos de comandos devem fazer o trabalho. In the Statements and Expressions area C# is just like C++ with some key differences to improve code robustness. Other than solving the old assignment problem in if statements, goto usage is limited to safer scenarios and switch statements require break between each options avoiding the infamous fall through bug. Also C# has a foreach statement to iterate through arrays and collections void Foo() { i == 1; // erro } FEA/USP - EAD Tecnologia de Informática

70 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Comandos Introdução Comandos para repetições: while do for foreach Comandos para desvios: break continue goto return throw Tratamento de exceções: try Seqüências de comandos Blocos de comandos Comandos rotulados Declarações: Constantes Variáveis Expressões de comandos: checked, unchecked lock using Comandos para condições: if switch FEA/USP - EAD Tecnologia de Informática

71 Comandos Sintaxe Linhas de comandos são finalizadas com um ponto-e-vírgula (;) Da mesma forma que C, C++ e Java Blocos de comandos { ... } não precisam de um ponto-e-vírgula.

72 Comandos Sintaxe Comentários: // Comenta uma só linha, estilo C++
/* Comenta múltiplas linhas, estilo C */

73 Comandos Seqüências & Blocos de Comandos
Seqüência de comandos: um ou mais comandos em seqüência. Bloco de comandos: uma seqüência de comandos delimitados por chaves { ... } static void Main() { F(); G(); { // Início do bloco H(); ; // Comando vazio I(); } // Fim do bloco }

74 Comandos Variáveis e Constantes
static void Main() { const float pi = 3.14; const int r = 123; Console.WriteLine(pi * r * r); int a; int b = 2, c = 3; a = 1; Console.WriteLine(a + b + c); }

75 Comandos Variáveis e Constantes
O escopo de uma variável ou constante é válido do ponto da sua declaração até o fim do bloco onde foi declarada. Dentro deste escopo, será gerado um erro se for declarada outra variável ou constante com o mesmo nome. { int x; int x; // Erro: não é possível // redefinir a variável x }

76 Comandos Variáveis Um valor deve ser atribuído às variáveis antes delas poderem ser usadas. Explicitamente ou automaticamente Camada definição de atribuição (definite assignment) Atribuição automática ocorre apenas para dados estáticos, classes, instâncias de classes e elementos de arrays. void Foo() { string s; Console.WriteLine(s); // Erro }

77 Comandos Comandos Rotulados & goto
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Comandos Rotulados & goto O comando goto pode ser usado para transferir o controle para dentro ou para fora de um bloco, mas não em um bloco aninhado. static void Acha(int valor, int[,] valores, out int linha, out int coluna) { int i, j; for (i = 0; i < valores.GetLength(0); i++) for (j = 0; j < valores.GetLength(1); j++) if (valores[i, j] == valor) goto Achei; throw new InvalidOperationException(“Não achado"); Achei: linha = i; coluna = j; } Also used in switch statements FEA/USP - EAD Tecnologia de Informática

78 Comandos Expressões em Comandos
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Expressões em Comandos Comandos devem executar trabalhos Atribuição de valores, chamadas de métodos, ++, --, new etc. static void Main() { int a, b = 2, c = 3; a = b + c; a++; MinhaClass.Foo(a,b,c); Console.WriteLine(a + b + c); a == 2; // ERRO! } Expression statements must do work. FEA/USP - EAD Tecnologia de Informática

79 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Comandos Comando if Exige uma expressão lógica (bool): int Teste(int a, int b) { if (a > b) return 1; else if (a < b) return -1; else return 0; } Like C, C++ and Java, beware of dangling elses! FEA/USP - EAD Tecnologia de Informática

80 Comandos Comando switch
Pode ramificar sobre qualquer tipo predefinido (inclusive string) ou enum Os tipos definidos pelo usuário podem fornecer conversão implícita para estes tipos. Deve definir explicitamente como finalizar um caso ou ramificação: Com break, goto case, goto label, return, throw ou continue Elimina falhas e bugs Não necessita if nenhum código é provido depois do rótulo.

81 Comandos Comando switch
int Teste(string rotulo) { int resultado; switch(rotulo) { case null: goto case “ausente”; case “mais rápido”: case “vencedor”: resultado = 1; break; case “ausente”: resultado = 2; break; default: resultado = 0; } return resultado;

82 Comandos Comando while
Exige uma expressão lógica (boleana) int i = 0; while (i < 5) { ... i++; } int i = 0; do { ... i++; } while (i < 5); while (true) { ... }

83 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Comandos Comando for Exatamente como em C, C++ e Java for (int i=0; i < 5; i++) { ... } for (;;) { ... } FEA/USP - EAD Tecnologia de Informática

84 Comandos Comando foreach
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Comando foreach Fornece simplicidade para manipulação de vetores e matrizes (arrays). public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); } No need to have loops with explicit bounds checking. Just use foreach. FEA/USP - EAD Tecnologia de Informática

85 Comandos Comando foreach
Manipulação de coleções definidas pelo usuário. Criadas através da implementação de IEnumerable foreach (Cliente c in Clientes.OrderBy("nome")) { if (c.Pedidos.Count != 0) { ... }

86 Comandos Comandos de Desvio
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Comandos de Desvio break Saída da repetição (loop) mais interna continue Finaliza a repetição (loop) mais interna goto <label> Transfere a execução para o comando rotulado return [<expression>] Saída de um método throw Manipulação de exceção There is no break <label> or continue <label>. FEA/USP - EAD Tecnologia de Informática

87 Comandos Tratamento de Exceções
As exceções constituem o mecanismo do C# para o tratamento de condições de erro inesperadas. Mais aperfeiçoadas por retornar valores de estado: Não podem ser ignoradas Não precisam ser tratadas no ponto em que ocorrem Podem ser usadas até onde valores estado não são retornados (p.ex. atribuindo uma propriedade) Exceções padrão são fornecidas pelo C#

88 Comandos Tratamento de Exceções
Comando try...catch...finally O bloco try contém código que pode causar uma exceção. O bloco catch trata a exceção: Pode haver múltiplos blocos catch para tratar diferentes tipos de exceção. O bloco finally contém código que sempre será executado: Não é permitido usar comandos de desvio (p.ex. goto) para sair de um bloco finally.

89 Comandos Tratamento de Exceções
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Tratamento de Exceções O comando throw gera uma exceção Uma exceção é representada como uma instância de System.Exception ou classe derivada: Contém informações sobre a exceção Propriedades: Message StackTrace InnerException Você pode gerar novamente (rethrow) uma exceção, ou tratar (catch) uma exceção e gerar (throw) uma outra. You can define your own exceptions by deriving it from System.Exception. FEA/USP - EAD Tecnologia de Informática

90 Comandos Tratamento de Exceções
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Tratamento de Exceções try { Console.WriteLine(“Tente executar"); throw new Exception(“Gere um erro!”); } catch (ArgumentNullException e) { Console.WriteLine(“Peguei um erro!"); catch { Console.WriteLine(“Te peguei novamente!"); finally { Console.WriteLine(“Finalmente saí, ufa!"); This will print: try catch finally FEA/USP - EAD Tecnologia de Informática

91 Comandos Sincronização
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Sincronização Aplicativos com múltiplas camadas precisam se proteger contra acesso simultâneo a dados: Devem prevenir corrupção de dados O comando lock (bloqueio) usa uma instância para fornecer exclusão mútua: Só um comando lock pode ter acesso à uma mesma instância Na verdade ele usa a classe System.Threading.Monitor do .NET Framework para fornecer exclusão mútua. Unlike Java, you cannot specify that an entire method be locked. Experience has shown that usually an entire method does not have to be locked. Since you want to hold locks as short a period of time as possible, C# doesn’t allow you to specify it for a method. FEA/USP - EAD Tecnologia de Informática

92 Comandos Sincronização
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Comandos Sincronização public class AtualizaConta { decimal saldo; public void Deposito(decimal valor) { lock (this) { saldo += valor; } public void Saque(decimal valor) { saldo -= valor; Two threads can call methods on CheckingAccount concurrently, but only one will be able to update balance at a time. This will prevent balance from becoming corrupted. FEA/USP - EAD Tecnologia de Informática

93 Comandos using Não se trata da diretiva using, mas sim do comando.
O C# gerencia automaticamente o uso da memória implementando um “coletor de lixo” (garbage collection) Isso elimina a maioria de problemas de administração de memória. Porém, resulta em finalização não determinística: Não há garantia quando e se um “objeto destruidor ou coletor de lixo” é chamado.

94 Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal
Comandos using Os objetos que precisam ser limpos depois de usados devem implementar a interface System.IDisposable Um método: Dispose() O comando using permite que você crie uma instância, use-a, e então se assegure que o método Dispose é chamado quando você não precisar mais dela. Dispose sempre é chamado, como se ele estivesse em um bloco finally. Não confunda com a diretiva using. FEA/USP - EAD Tecnologia de Informática

95 Comandos using public class MeuRecurso : IDisposable {
public void MeuRecurso() { // Aquisição do recurso } public void Dispose() { // Descarte do recurso public void FaçaAlgo() { ... using (MeuRecurso r = new MeuRecurso()) { r.FaçaAlgo(); } // r.Dispose() é chamado

96 Comandos checked e unchecked
Os comandos checked e unchecked permitem que você controle a verificação de overflow em operações aritméticas e conversões. checked força a verificação de overflow unchecked força a não verificação de overflow Você pode usar ambos como bloco de instruções ou como uma expressão. O padrão é unchecked Use a opção /checked do compilador para fazer checked o padrão.

97 Comandos Entrada e Saída Básicas
Aplicativos de console (janela DOS): System.Console.WriteLine(); System.Console.ReadLine(); Aplicativos Windows: System.Windows.Forms.MessageBox.Show(); string v1 = “Algum dado”; MeuObjeto v2 = new AlgumObjeto(); Console.WriteLine(“O primeiro é {0}, o segundo é {1}”, v1, v2);

98 Operadores Introdução
Introdução à Linguagem C# - Prof. Antonio Geraldo da Rocha Vidal Operadores Introdução O C# fornece um conjunto fixo de operadores, cujo significado é definido para os tipos predefinidos. Alguns operadores podem ser sobrecarregados (por exemplo +) A tabela a seguir resume os operadores do C# por categoria: As categorias estão em ordem de precedência decrescente Os operadores em cada categoria têm a mesma precedência The + operator is overloaded to mean addition for numbers and concatenation for strings. FEA/USP - EAD Tecnologia de Informática

99 Operadores Precedência
Categoria Operadores Primário Agrupamento: (x) Acesso a membros: x.y Chamada de métodos: f(x) Indexação: a[x] Incremento posterior: x++ Decremento posterior: x— Chamada a construtor: new Recuperação de tipo: typeof Liga verificação aritmética: checked Desliga verificação aritmética: unchecked

100 Operadores Precedência
Categoria Operadores Unário Valor positivo de: + Valor negativo de: - Negação: ! Complemento Bitwise: ~ Pré-incremento: ++x Pré-decremento: --x Verifica tipo: (T)x Multiplicativo Multiplicação: * Divisão: / Resto da divisão: %

101 Operadores Precedência
Categoria Operadores Aditivo Adição: + Subtração: - Shift Shift bits para esquerda: << Shift bits para a direita: >> Relacional Menor que: < Maior que: > Menor ou igual a: <= Maior ou igual a: >= Compatibilidade de tipo: is Conversão de tipo: as

102 Operadores Precedência
Categoria Operadores Igualdade Igual: == Diferente: != Bitwise AND & Bitwise XOR ^ Bitwise OR | Lógico AND && Lógico OR ||

103 Operadores Precedência
Categoria Operadores Ternário condicional ?: Atribuição =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

104 Operadores Associatividade
Operadores de atribuição e ternários condicionais são associativos à direita: As operações são executadas da direita para a esquerda x = y = z é avaliada como x = (y = z) Todos outros operadores binários são associativos à esquerda: As operações são executadas da esquerda para a direita x + y + z é avaliada como (x + y) + z Use parênteses para controlar a ordem

105 Usando o Visual Studio.NET
Tipos de projetos: Aplicativo de Console (janela DOS) Aplicativo Windows Aplicativo Web Web Service Windows Service Biblioteca de Classes ...

106 Usando o Visual Studio.NET
Janelas de trabalho: Solution Explorer: componentes da solução Class View: classes em uso Properties: propriedades de objetos Output: saídas do compilador Task List: lista de tarefas a executar Object Browser: navegação por objetos Server Explorer: acesso a servidores conectados Toolbox: componentes e ferramentas

107 Usando o Visual Studio.NET
Construindo: compilando o aplicativo Depurando: debugando erros Pontos de parada (break points) Referências: referenciando componentes Salvando: gravando a aplicação

108 Usando o Visual Studio.NET
Demonstração: O Visual Studio.NET

109 Referências http://msdn.microsoft.com
Livro: Beginning C# Programado, Karli Watson et all, Makron Books – Pearson Education do Brasil, São Paulo


Carregar ppt "Introdução à Linguagem C#"

Apresentações semelhantes


Anúncios Google