1 c# tiago tagliari martinez sistemas de objetos distribuídos 25/06/2002

34
1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

Upload: internet

Post on 17-Apr-2015

109 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

1

C#

Tiago Tagliari Martinez

Sistemas de Objetos Distribuídos

25/06/2002

Page 2: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

2

Resumo da Apresentação

• “Hello World”

• Básicos do ambiente .NET

• Objetivos da C#

• Recursos da Linguagem

Page 3: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

3

Hello World!

using System;

class Hello{ static void Main() { Console.WriteLine(“Hello world!”); }}

Page 4: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

4

Básicos do Ambiente .NET

• Common Language Runtime – CLR– Independência de linguagem– Classes comuns entre todas as linguagens– Tipos comuns entre todas as linguagens

• WebServices– XML / SOAP

Page 5: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

5

Objetivos da C#

• Linguagem Orientada a Componentes

• Tudo é um objeto

• Ambiente de Execução Controlado

• Facilidade de Aprendizado

• Interoperabilidade

Page 6: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

6

Linguagem Orientada a Componentes

• Conceitos de Componentes Fazem Parte da Linguagem– Propriedades, Métodos e Eventos– Atributos de desenvolvimento e de execução– Documentação integrada usando XML

• Redução de Dependências– Não são necessários arquivos externos (IDL,

cabeçalhos, etc)

Page 7: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

7

Tudo é um Objeto

• C++, Java: tipos primitivos “mágicos” fora da hierarquia de classes

• Smalltalk, Lisp: tipos primitivos são objetos a um custo de performance

• C# unifica tipos primitivos e objetos, prometendo nenhuma perda de performance

• Novos tipos primitivos: SQL, Decimal• Coleções funcionam para todos os tipos de

maneira uniforme

Page 8: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

8

Facilidade de Aprendizado

• Herança de C++– namespace, enum, unsigned, ponteiros (em

blocos de código “unsafe”)

• Adições– foreach, switch com strings– Tipo decimal para aplicações financeiras– Parâmetros ref e out

Page 9: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

9

Ambiente de Execução Controlado

• Coleta de Lixo

• Tratamento de Excessões

• Elimina tipos não inicializados e conversões de tipo inseguras

• Mecanismos para controle de versões embutido no ambiente de execução e na linguagem

Page 10: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

10

Interoperabilidade

• Com outras linguagens da .NET

• WebServices usando XML/SOAP

• COM / Automação OLE

• DLLs locais e sistema operacional (código marcado como inseguro)

Page 11: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

11

Recursos da Linguagem

• Estrutura do Programa• Hierarquia de Tipos• Classes e Estruturas• Interfaces e Enumerações• Delegates (Delegação?)• Propriedades e Indexadores• Eventos• Sobrecarga de operadores• Controle de Versão• Código Inseguro

Page 12: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

12

Estrutura do Programa

• Namespaces– Contém tipos e outros namespaces

• Declaração de Tipos– Classes, estruturas, interfaces, enumerações e delegates

• Membros– Constantes, campos, métodos, propriedades,

indexadores, eventos, operadores, construtores e destrutores

• Indepêndencia da ordem de declaração– Implementação junto com declaração (Java)

Page 13: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

13

Estrutura do Programausing System;Namespace System.Collections{ public class Stack

{ Entry top; public void Push(object data) { top = new Entry(top, data); } public object Pop() { if (top == null) throw new InvalidOperationException(); object result = top.data; top = top.next; return result; } }}

Page 14: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

14

Tipos

• Value types– Contém diretamente o valor– Não podem ser nulos

• Reference types– Contém uma referência para um objeto– Podem ser nulos

Page 15: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

15

Tipos

int i = 123;

string s = “SOD é legal”;

i

s

123

“SOD é legal”

Page 16: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

16

Tipos

• Tipos Valor– Primitivos int i;

– Enumerações enum Cor {Azul, Verde}

– Estruturas struct Point {int x, y;}

• Tipos Referência– Classes class A : B, IC {...}

– Interfaces interface IA : IB {...}

– Vetores string[] v = new string[10];

– Delegações delegate void Algo();

Page 17: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

17

Tipos Predefinidos

• Tipos predefinidos do C#:– Referenciados object, string

– Com sinal sbyte, short, int, long

– Sem sinal byte, ushort, uint, ulong

– Caractere char

– Ponto flutuante float, double, decimal

– Lógico bool

• Tipos são apelidos para tipos do .NET– int = System.Int32

Page 18: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

18

Classes

• Herança simples• Implementação de múltiplas interfaces• Membros de uma classe:

– Constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores e destrutores

– Membros estáticos e da instância– Sub-tipos

• Acesso a membros– Public, protected, internal e private

Page 19: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

19

Estruturas

• Como classes, exceto que:– Armazenados na pilha– Atribuição copia os dados e não a referência– Não permitem herança!

• Ideal para objetos menores– Complex, Point, Rectangle, Color– int, float, double, etc... são estruturas

• Vantagens– Sem alocações na heap, menos trabalho para o C. Lixo– Uso mais eficiente da memória

Page 20: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

20

Interfaces• Herança múltipla• Pode conter métodos, propriedades,

indexadores e eventos• Implementações privadas

interface IDesenhavel{ void Desenha(Superficie destino);}

class Triangulo : IDesenhavel{ void Desenha(Superficie destino);}

Page 21: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

21

Enumerações• Fortemente Tipadas

– Sem conversão implícita de/para int

– Operadores: +, -, ++, --, &, |, ^, ~

• Pode especificar o tipo interno– byte, short, long

enum Cor : byte{ Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue;}

Page 22: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

22

Delegações• Ponteiros para funções orientados a objetos• Múltiplos recipientes

– Cada delegação tem uma lista de invocação– Operações + e – seguras entre threads

• Base para o sistema de eventos da .NET

delegate void MouseEvent(int x, int y);delegate double Func(double x);

Func func = new Func(Math.Sin);double x = func(1.0);

Page 23: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

23

Hierarquia de Tipos

• Tudo deriva da classe object

• Boxing / Unboxing

object

Stream Hashtable

MemoryStream FileStream

int double

Page 24: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

24

Desenvolvimento de Componentes

• O que define um componente?– Propriedades, métodos e eventos– Documentação integrada– Informações para desenvolvimento

• Suporte interno para estes elementos:– Sem nomenclatura padrão, adaptadores, etc...– Sem necessidade de arquivos externos

Page 25: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

25

Propriedades

• Sintaxe simples, controle de acesso

Public class Button: Control{ private string caption;

public string Caption { get { return caption; } set { caption = value; Repaint(); } }}

Page 26: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

26

Indexadores

Public class ListBox: Control{ private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } }}

Page 27: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

27

Criando e Disparando Eventos

public delegate void EventHandler(object sender, EventArgs e);

public class Button

{

public EventHandler Click;

protected void OnClick(EventArgs e) {

if (Click != null) Click(this, e);

}

}

Page 28: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

28

Tratando o Evento

public class MyForm: Form{ Button okButton;

public MyForm() { okButton = new Button(...); okButton.Caption = “OK”; okButton.Click += new EventHandler(OkButtonClick); }

void OkButtonClick(object sender, EventArgs e) { ShowMessage(“Botão Ok!”); }}

Page 29: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

29

Atributos

• Associar informações a tipos e membros– URL de documentação para uma classe– Contexto de transação para um método– XML de mapeamento de persistência

Page 30: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

30

Atributos

public class TrataPedidos

{

[WebMethod]

public void FazPedido(OrdemPedido pedido) {...}

}

[XmlRoot(“Pedido”, Namespace=“urn:acme.b2b-schema.v1”)]

public class OrdemPedido

{

[XmlElement(“endereco”)] public string Endereco;

[XmlElement(“cobrar”)] public string Cobranca;

[XmlElement(“items”)] public Items[] Items;

}

Page 31: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

31

Construções e Expressões

• if, while, do requer condição booleana

• switch sem continuar para o próximo

• foreach

• Expressões checked e unchecked

• Expressões devem executar alguma operação

Page 32: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

32

Código Inseguro

• Blocos de código ou métodos podem ser marcados como unsafe

• Aritmética de ponteiros

• Chamada a outros métodos unsafe

Page 33: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

33

Conclusão

• Nenhuma revolução ou grande inovação

• Coleção de diversas pequenas idéias de diversos outros lugares

• Voltado ao mercado Windows e Internet

• Influência da Microsoft não é despresível

Page 34: 1 C# Tiago Tagliari Martinez Sistemas de Objetos Distribuídos 25/06/2002

34

Referências

• Programming C#, Jesse Liberty, O’Reilly & Associates

• C# Language Specification, Microsoft Corp

• C# Station, http://www.csharp-station.com/

• C# Corner, http://www.c-sharpcorner.com/

• C# Today, http://www.csharptoday.com/