Programação Orientada a Objetos com C# Básico

Tiago Moreira Totti

Tech Leader MIC PUCRS

Fabio Isquierdo

Developer MIC PUCRS

Conteúdo

  • Módulo 1: Visão Geral da Plataforma .NET

  • Módulo 2: Tipos de Dados

  • Módulo 3: Classes e Objetos

  • Módulo 4: Comandos e Operadores e coleções

  • Módulo 5: Herança, Polimorfismo e Classes Abstratas

  • Módulo 6: Aplicativos Console

  • Módulo 7: Aplicativos Windows Forms

Módulo 1

Visão Geral da Plataforma .Net

C# - Uma nova linguagem

  • Alternativa mais “limpa” ao C++

  • Desenvolvido em conjunto com o .NET por Anders Hejlsberg

  • Atraente a desenvolvedores de outras linguagens que não o VB (C/C++, Java, etc)

Por que uma nova linguagem?

  • O “equilíbrio” que era bom nos anos 70/80 (C) e 80/90 (C++) não é bom hoje:

    • ponteiros/malloc/free: é um mecanismo muito frágil, especialmente para servidores de aplicativos
    • Não suportam componentes diretamente
    • Fragilidade em ter vários arquivos (.CPP, .H, .LIB)
  • Outras alternativas recentes apresentam sérios problemas, principalmente de performance

C# - Baseado no C/C++

  • Baseado no C++ quando possível:

    • Declaração de variáveis
    • Declaração de funções
    • Blocos com { }
    • Loops (for, while, do)
    • Boa parte dos operadores (inclusive +=, ++, ||, &&, !, !=, == etc)

C# - Diferenças do C++

  • Apenas “managed code”; não suporta Win32

  • Ponteiros apenas em código unsafe

  • Tipos, biblioteca de runtime e demais características do .NET Framework

  • Não tem argumentos default, ou pré-processador (#include)

  • Ordem das declarações não é importante na maioria dos casos

C# - Além do C++

  • Linguagem orientada a componentes

  • Tudo é visto como um objeto

  • Robusta

C# - Além do C++ : componentes

  • Propriedades, métodos e eventos como conceitos de 1a categoria

  • Permite declarar atributos explicitamente

  • Documentação integrada em XML

  • Sem .H, .LIB, .IDL; tudo é representado no fonte

  • Integração com ASP.NET

C# - Além do C++ : tudo é objeto

  • Problemas tradicionais:

    • C++, Java, Delphi: tipos primitivos são “mágicos” e não-OOP
    • Smalltalk, Lisp: tudo é objeto, mas custo de performance é grande
  • C# unifica os tipos sem custo de performance

    • Coleções funcionam com todos os tipos
  • struct e enum, além de inteiros, ponto flutuante e decimal são tipos-valor (baratos)

C# - Além do C++ : robustez

  • Coleta de lixo (Garbage Collector)

    • Robustez e facilidade de uso
  • Exceptions: mecanismo único de tratamento de erros

  • Tipos seguros: o sistema de tipos jamais pode ser violado; todas as coerções são verificadas

  • Considerações de versão feitas desde o início (exemplo: atributos virtual, override, new)

C# - Compilação e execução

C# - Estrutura do programa

  • Execução do programa começa no método Main()

  • A palavra-chave using referencia namespaces da Biblioteca de Classes do .NET Framework

  • Instruções são comandos que executam ações

    • Um programa é feito de muitas instruções
    • Instruções são separadas por ponto-e-vírgula
    • Chaves são usadas para agrupar instruções

Laboratório

  • Seguir o roteiro de laboratório 1

Módulo 2

Tipos de Dados

Sistema de tipos

  • Tipos-valor

    • Contém os dados diretamente
    • Não podem ser “null”
  • Tipos-referência

    • Contém referências para objetos
    • Podem ser “null”

Sistema de tipos

  • Tipos-valor

    • Primitivos int i;
    • Enumerações enum State { Off, On }
    • Estruturas struct Point { int x, y; }
  • Tipos-referência

    • Classes class Foo: Bar, IFoo {...}
    • Interfaces interface IFoo: IBar {...}
    • Arrays string[] a = new string[10];
    • Delegates delegate void Empty();

Sistema de tipos

Sistema de tipos

Conversão de tipos

  • Implícita

    • Executada pelo compilador em operações em que há garantia de que a informação não será truncada ou perdida
  • Explícita

    • Quando explicitamente é pedido ao compilador para converter uma informação que pode ser perdida

Conversão de Tipos

  • System.Convert

    • Mecanismo do framework para conversão explícita de tipos.
    • Convert.To<Tipo> (string valor)

Conversão de Tipos

  • TryParse

    • Válido para todos os tipos valor
    • Retorna um bool (sem exceptions)
    • Facilidade para programar

bool <ClasseTipo>.TryParse(string entrada, <tipo> saida)

Declaração de variáveis

Declarando

    • Atribuindo um tipo
    • Atribuindo um nome
    • Ponto-e-vírgula no final

Declaração de constantes

  • Declara-se utilizando a palavra-chave const junto a um tipo

  • O valor deve ser atribuído no ato da declaração

Strings

  • Exemplo de string

  • Declarando strings literais

  • Usando diretivas de caracteres

  • Usando strings verbatim

  • Entendendo Unicode

Sistema de tipos

  • Tudo pode ser visto como um objeto

    • Todos tipos “herdam” de object
    • Todos dados podem ser manipulados, armazenados e transportados sem trabalho adicional

Sistema de tipos

  • Boxing

    • Utilizar um tipo-valor de maneira consistente com um tipo-referência
    • Compilador aloca um objeto e copia valor
  • Unboxing

    • Obter o tipo-valor que sofreu a operação de boxing
    • Verifica tipo e copia valor

Enumerações

  • Definindo enumerações

  • Usando enumerações

  • Mostrando variáveis

Laboratório

  • Seguir o roteiro de laboratório 2

Módulo 3

Classes e Objetos

O que é um programa ?

  • Programa:

    • Conjunto de objetos que se comunicam.

Exemplos

  • Um programa e os objetos que o compõe ...

Objetos

  • Objetos são as entidades que compõem um programa.

  • Cada objeto é responsável por executar determinadas tarefas.

  • O conjunto de tarefas que um objeto realiza define seu comportamento.

Comportamento

  • Objetos são manipulados através de seus métodos.

  • Um método consiste de uma seqüência de instruções que acessam dados.

  • Quando se executa um método não é necessário conhecer seu conjunto de instruções. O importante é saber a tarefa o que o método realiza.

Representação de um objeto

Exemplo

  • Um programa representa uma lâmpada. Uma lâmpada pode estar ligada ou desligada. Além disto, a lâmpada possui um mecanismo que permite apagar a lâmpada e um mecanismo que permite acendê-la.

Programa da Lâmpada

Abstração

  • Modelo  abstração

    • Uma abstração foca nas características essenciais de um objeto relativas a perspectiva do usuário.

Noção de estado

  • A abstração da lâmpada implica em 2 estados:

    • Aceso e apagado
  • Um objeto é capaz de armazenar o estado em que se encontra.

Classes e objetos

  • Para representar várias lâmpadas são necessários vários objetos:

  • Todos estes objetos, porém, terão a mesma estrutura, ou seja, pertencem a mesma classe.

Classes e objetos

Classes

  • Uma classe é uma “fôrma” para produzir objetos

  • Determina um conjunto de objetos com:

    • propriedades semelhantes
    • comportamentos semelhantes
    • relacionamentos comuns com outros objetos

Classes

  • Membros das classes

    • Constantes, atributos, métodos, propriedades, indexadores, eventos, operadores, construtores, destrutores
    • Membros “de instância” e “de classe”
    • Tipos aninhados
  • Modificadores de Acesso

    • public, protected, internal, private

Exemplo de classe completa

class Lampada {

private bool aceso;

public Lampada(){

aceso = false;

}

public void acende(){

aceso = true;

}

public void apaga(){

aceso = false;

}

public bool situacao(){

return (aceso);

}

}

Instanciando classes Ativando métodos

...

Lampada l1 = new Lampada();

Lampada l2 = new Lampada();

l1.acende();

l2.acende();

l1.apaga();

if (l1.estaAcesa()) Console.WriteLine("Lampada 1 acesa");

else Console.WriteLine("Lampada 1 apagada");

if (l2.estaAcesa()) Console.WriteLine("Lampada 2 acesa");

else Console.WriteLine("Lampada 2 apagada");

...

Classes - Métodos

  • Os parâmetros de um método podem receber um modificador que indica a direção do fluxo de dados

    • Entrada
    • Saída
    • Entrada/saída

Classes - Métodos

  • Parâmetro de saída

  • Parâmetro de entrada/saída

  • Parâmetros variáveis

Modificadores de acesso

  • Modificadores de acesso são utilizados para definir níveis de acesso a membros das classes

Classes - Propriedades

  • Propriedades são métodos que protegem o acesso aos membros da classe

  • Acessando propriedades

Laboratório

  • Seguir o roteiro de laboratório 3

Classes - Atributos

  • Atributos constantes

    • Definidos pela palavra-chave const
    • Definido em tempo de compilação por um valor literal
  • Atributos read-only

    • Definidos pela palavra-chave readonly
    • Definidos em tempo de execução através do construtor

Classes - Métodos

  • Chama-se de sobrecarga de métodos (overloading) o ato de criar diversos métodos com o mesmo nome que se diferenciam pela lista de argumentos (parâmetros)

  • Métodos com mesmo nome, mas com tipo, quantidade ou ordenação de parâmetros diferentes, são considerados métodos diferentes

Classes - Construtores

  • Construtores são métodos especiais que implementam as ações necessárias para inicializar um objeto

    • Tem o mesmo nome da classe
    • Não possuem tipo de retorno
    • Podem possuir ou não parâmetros

Classes - Construtores

  • C# permite a inicialização dos membros no contexto da própria declaração

  • Se um construtor não é declarado, C# utiliza o construtor padrão (sem parâmetros)

  • Membros são inicializados por omissão com valores padrão

    • 0 para valores numéricos
    • null para tipos-referência
    • false para booleano

Classes - Construtores

  • Usualmente é útil para uma classe possuir mais de um construtor a fim de oferecer diversas maneiras para instanciar e inicializar os objetos dessa classe

  • Um construtor também pode sofrer o processo de sobrecarga

Laboratório

  • Seguir o roteiro de laboratório 4

Módulo 4

Comandos, Operadores e coleções

Palavras Reservadas

Operadores

If

  • Baseados em expressões condicionais booleanas

Identidade X igualdade

  • Identidade

    • É uma propriedade da localização do objeto
    • Testada pelo método System.Object.ReferenceEquals

  • Igualdade

    • É uma propriedade do valor do objeto
    • Testada pelo método System.Object.Equals

  • Cuidado!!!

    • Semântica do operador == depende do tipo associado

Identidade X igualdade

  • Exemplo

    • A e B são idênticos e iguais
    • A e C não são idênticos, mas são iguais
    • A e D não são idênticos e não são iguais

Switch

  • Funciona com valores inteiros e strings

While

  • Executa um bloco de comandos enquanto expressão é verdadeira

Do

  • Executa um bloco de comandos até que a expressão se torne falsa

For

  • Executa um bloco de comandos um determinado número de vezes

Arrays

  • Estrutura de dados que contém um número certo de variáveis (elementos do array)

  • Todos os elementos de um array tem que ser do mesmo tipo

  • Arrays são indexados a partir de zero

  • Arrays são objetos

  • Arrays podem ser:

    • Unidimensionais, um array de ordem um
    • Multidimensionais, um array de ordem maior do que um
    • Jagged, um array cujos elementos são arrays
  • Arrays possuem métodos específicos para manipulação de seus itens

Arrays unidimensionais

  • Declare um array adicionando um par de colchetes logo a seguir do tipo de variável dos elementos individuais

  • Instancie para criar

  • Para criar um array do tipo Object

Arrays unidimensionais

  • Inicializando um array

  • Acessando membros do array

Arrays multidimensionais

  • É um array que usa vários índices para acessar seus elementos

  • Utiliza várias coordenadas para especificar uma posição

  • Representação em memória:

Arrays jagged

  • Arrays irregulares, onde cada linha pode ter um tamanho diferente

  • Cada elemento é um outro array

  • Exemplo de declaração:

  • Exemplo de instanciação:

ArrayLists

  • ArrayLists não têm tamanho definido

  • Use o método Add(object) para adicionar um objeto ao fim da ArrayList

  • Use [] para acessar elementos na ArrayList

  • Localizados do namespace System.Collections

  • Use Clear() para remover todos os elementos

  • Uso recomendado para manipulação de coleções de objetos

Lists

  • System.Collections.Generic

  • Mesma funcionalidade de ArrayList, mas é typesafe (guardam um tipo pré-definido de objetos)

  • Sem necessidade de boxing e unboxing

  • Uso adequado para tipos-referência

Lists

Exemplos

  • List<Tipo>

// Lista de inteiros

List<int> intList = new List<int>()

intList.Add(1); //Sem boxing

intList.Add(2);

intList.Add(“Três”); //Erro em tempo de compilação

int i = intList[0] //Cast não requerido

Foreach

  • Varrer arrays

  • Varrer coleções

Laboratório

  • Seguir o roteiro de laboratório 5

  • Seguir o roteiro de laboratório 5.5

Classes - Indexadores

  • Indexador é um tipo especial de propriedade cujo propósito é permitir o acesso a membros de um objeto de forma parametrizada

  • Permite acessar dados através da “notação de array”

Classes - Atributos de classe

  • Atributos de instância:

    • Cada objeto possui uma cópia particular com seus valores
    • Representam o estado de um objeto em particular
  • Atributos de classe:

    • Cada classe possui uma única cópia do atributo, independente do número de objetos instanciados a partir da classe
  • Objetos compartilham os atributos de classe

  • São declarados pela palavra-chave static

  • Atributos constantes são de classe por padrão

  • Invocação <nome_classe>.<nome_atributo>

Classes - Métodos de classe

  • Métodos de instância:

    • Fornecem o comportamento dos objetos instanciados a partir de uma classe
    • Trabalham sobre os atributos de um objeto dessa classe
  • Métodos de classe:

    • Fornecem um comportamento que é independente da existência de objetos de uma classe
    • Pertencem à classe e são compartilhados por todas as instâncias da classe
    • Trabalham sobre os atributos de classe
    • Indicados pela palavra-chave static
    • Invocação <nome_classe>.<nome_método>(<parâmetros>)

Laboratório

  • Seguir o roteiro de laboratório 6

Módulo 5

Herança, Polimorfismo e Classes Abstratas

Herança

  • Ao modelar um conjunto de classes, podemos encontrar classes semelhantes na estrutura e no comportamento

    • Solução 1: modelar as classes de forma independente
    • Solução 2: extrair características estruturais e comportamentais que sejam comuns e colocá-las em classes mais gerais a partir das quais são definidas classes mais específicas

Herança

  • Uma classe que admite casos particulares é uma classe base.

  • Uma classe que é uma particularização de uma classe base é uma classe derivada daquela classe base.

  • Em um programa bem construído, todos os conceitos expressos nos tipos de dados e respectivos métodos de uma classe base também fazem parte da classe derivada.

Herança

  • Herança é uma relação de generalização/especialização entre classes

  • A idéia central de herança é que novas classes são criadas a partir de classes já existentes

    • Classe derivada herda de uma classe base
    • Classe derivada é mais específica que a classe base
  • Herança origina uma estrutura em árvore

Herança

  • Por exemplo, poderíamos construir uma classe (tipos de dados e métodos) para capturar os conceitos relevantes relativos a telefones.

  • Adotando essa classe como base, poderíamos então construir as classes derivadas telefones fixos e telefones móveis.

  • Os telefones móveis poderiam gerar ainda as classes derivadas telefones móveis pré-pagos e telefones móveis pós-pagos.

Herança

Herança

  • Construímos dessa forma uma hierarquia de classes.

  • Existem conceitos e operações que só dizem respeito aos telefones móveis pré-pagos, e alguns conceitos e operações relativos a essa categoria de telefones têm detalhes que são inerentes a apenas tais telefones. Os telefones móveis pré-pagos, entretanto, continuam sendo telefones, e portanto a eles se aplicam os conceitos referentes a telefones em geral.

Herança

  • Para definir a herança de classes em C# utiliza-se um “:” seguido do nome da classe base

  • C# suporta herança simples de classes

Herança

  • Ao definir os construtores de uma subclasse:

    • O construtor deve obrigatoriamente chamar o construtor da classe base para inicializar os atributos herdados
    • Caso um construtor não referencie o construtor da classe base, C# automaticamente referencia o construtor vazio da classe base
      • Cuidado! Aqui pode acontecer um erro de compilação caso a classe base não possua um construtor vazio

Herança

  • O construtor da classe derivada pode referenciar explicitamente um construtor da classe base via a palavra-chave base após a assinatura do construtor da subclasse e da marca “:”

Herança

  • Uma classe pode ser impedida de ser estendida via herança através da palavra-chave sealed

Herança

  • Uma classe derivada pode sobrescrever métodos da classe base

    • Sobrescrita permite completar ou modificar um comportamento herdado
    • Mecanismo básico do polimorfismo em orientação a objetos
      • Um mesmo método possui diferentes implementações em diferentes classes de uma hierarquia

Herança

  • Modificadores virtual e override:

    • Um método de uma classe base que pode ser sobrescrito em uma classe derivada deve ser marcado com a palavra-chave virtual
    • Um método da classe derivada que sobrescreve um método herdado de uma classe base é marcado pela palavra-chave override
  • C# permite a sobrescrita tanto de métodos quanto de propriedades

Herança

  • Aplicando a sobrescrita de métodos:

Herança

  • Algumas regras ao utilizar virtual e override:

    • Você não pode aplicar os modificadores a um método privado
    • Os dois métodos devem ser idênticos, isto é, eles devem ter o mesmo nome, os mesmos tipos de parâmetros e o mesmo tipo de retorno
    • Os dois método devem ter a mesma permissão de acesso
    • Você somente pode sobrescrever métodos virtuais
    • Métodos marcados com override são implicitamente virtual e podem ser sobrescritos posteriormente

Herança

  • O método herdado original, que foi posteriormente sobrescrito, pode ser referenciado através da construção base.nome_método

  • Um método pode ser impedido de ser sobrescrito através da palavra-chave sealed

Laboratório

  • Seguir o roteiro de laboratório 7

Polimorfismo

  • Polimorfismo é a capacidade de assumir formas diferentes

  • C# permite a utilização de variáveis polimórficas

    • Uma mesma variável permite referência a objetos de tipos diferentes
    • Os tipos permitidos são de uma determinada classe e todas as suas classes derivadas

Polimorfismo

  • A uma referência do tipo da classe base pode ser atribuída uma referência da própria classe base ou de qualquer uma de suas classes derivadas na hierarquia

    • Entretanto há uma limitação significativa, somente poderemos acessar os membros públicos definidos pelo tipo da variável

Polimorfismo

  • Em C# podemos utilizar métodos polimórficos

    • Significa que uma mesma operação pode ser definida em diversas classes, cada uma implementando a operação de uma maneira própria
    • Utiliza como base a sobrescrita de métodos
      • Os métodos virtuais permitem chamar diferentes versões do mesmo método, com base no tipo de objeto determinado dinamicamente em tempo de execução

Polimorfismo

  • Exemplo:

Polimorfismo x Herança

  • Uma classe derivada pode ocultar um método herdado da classe básica

    • Se uma classe base e uma classe derivada declararem dois métodos iguais, ocorrerá uma mensagem de aviso do compilador
    • Ocultar um método é um meio de substituir um método por outro
    • Para ocultar um método, utilizamos o modificador new
      • Com o modificador, o compilador não emite um aviso

Herança

  • Ocultando um método:

Classes Abstratas

  • Em uma hierarquia de classe, quanto mais alta a classe, mais abstrata é sua definição

    • Uma classe no topo da hierarquia define apenas o comportamento e atributos que são comuns a todas as classes
    • Em alguns casos, a classe nem precisa ser instanciada diretamente e cumpre apenas o papel de ser um repositório de comportamentos e atributos em comum

Classes Abstratas

  • Uma classe abstrata é uma classe construída exclusivamente para ser particularizada, ou seja para funcionar como uma “matriz” de conceitos específicos que de fato sejam utilizados diretamente em um programa

  • Uma classe abstrata, portanto, não admite instâncias – somente suas classes derivadas admitem instâncias

Classes Abstratas

  • É possível definir classes, métodos e propriedades abstratas em C#

    • Utiliza-se a palavra-chave abstract
    • Método e propriedades abstratos não possuem código de implementação

Classes Abstratas

  • Uma classe concreta que herda de uma classe abstrata deve implementar todos os métodos abstratos herdados!

Operadores is e as

  • O operador is verifica se um objeto é compatível com um determinado tipo, e o resultado da avaliação é um booleano

  • Este operador nunca lança uma exceção

Operadores is e as

  • O operador as realiza a conversão de objetos sem levantar exceções

  • Caso a conversão não seja possível, o operador retorna null

Laboratório

  • Seguir o roteiro de laboratório 8

Módulo 6

Aplicativos de Console

Aplicativos C#

  • Qualquer programa aplicativo em C# começa sua execução pelo método Main()

    • Deve existir em uma única classe do assembly

  • Possíveis assinaturas:

Aplicativos Console

  • Não utilizam o ambiente gráfico - janelas, botões, menus – tornando mais rápida a sua execução

  • O aplicativo é executado em uma janela de prompt de comando, e sua interação é feita de um modo simples

System.Console

  • A classe Console, definida no namespace System, encapsula a manipulação dos streams de input, output e error em aplicações console

Método Console.Write()

  • É o método utilizado pelas aplicações console para exibirem caracteres na tela

  • Chama implicitamente o método ToString()

Formatação de strings

  • A linguagem C# permite realizar diversas configurações e formatação de estilos antes de exibir resultados ao usuário

Formatação de strings

  • Formato <N>,<M>:<C>

    • <N> número do argumento
    • <M> número mínimo de caracteres do argumento, com preenchimento “ “; número negativo indica preenchimento à esquerda e positivo à direita
    • <C> código de formatação

Formatação de strings

Formatação de strings

Formatação de strings

Formatação de strings

  • Pode-se formatar strings também através do método String.Format()

Laboratório

  • Seguir o roteiro de laboratório 9

Módulo 7

Aplicativos Windows Forms

Aplicativos Windows

  • Aplicativos Windows utilizam os formulários para interação com o usuário

    • Classes disponíveis no namespace System.Windows.Forms
  • Os Formulários (Windows Forms) têm a função de hospedar controles

  • Esses controles – botões, menus, caixas de texto, etc – proporcionam uma interface mais “amigável” com o usuário

Aplicativos Windows

  • Um aplicativo Windows possui três componentes principais:

    • aplicação
    • formulários da aplicação
    • controles no formulário

Classe Application

  • Representa a própria aplicação

    • Não possui instâncias (todas propriedades e métodos são static)
    • Controla a execução das janelas
    • Processa eventos dos controles
      • Run, DoEvents

Classe Form

  • Representa a(s) janela(s) da aplicação

    • Provê serviços básicos sobre janelas
      • propriedades: Text, Size, Location, Controls
      • metodos: Show, ShowDialog, Close
      • eventos: Load, Click, Closing
    • Formulários criados pelo usuário são derivados dessa classe

Classe Form

  • Dois métodos para abrir uma janela secundária em uma aplicação:

    • Show – para janelas não-modais
    • ShowDialog – para janelas modais
      • Uma janela modal é aquela utilizada em diálogos, onde não é possível acessar outras janelas enquanto ela não for fechada

Controles

  • Controles são componentes visuais

    • System.Windows.Forms.Control é a classe básica de diversos controles
      • Button, Label, TextBox, ListBox, etc.
    • Estão contidos dentro de uma janela em uma coleção especial
      • Coleção Controls

Controles

  • Propriedades importantes:

    • Anchor
      • Define uma distância constante entre o controle e uma ou mais bordas do componente onde ele está contido
      • Valores Top, Bottom, Left, Right, None
    • Dock
      • Permite “amarrar” o controle a uma ou mais bordas do componente onde ele está contido
      • Valores Top, Bottom, Left, Right, Fill, None

Demonstração

  • Abra o projeto Exemplo2

Eventos

  • São ações sofridas pelos controles, como por exemplo clicar um botão

    • Esse evento é chamado de Click
  • Quando ocorre um tipo de evento, é executado o código anexado a ele

Eventos - Exemplos

  • Button

    • Click: Ao clicar no botão
    • Mouse Down: Ao clicar uma vez no botão com o mouse
  • TextBox

    • Enter: Ao receber o foco
    • TextChanged: Ao alterar o texto
  • ListBox

    • SelectedIndexChanged: Ao selecionar um item

Exercícios

  • Seguir o roteiro de laboratório 10

  • Seguir o roteiro de laboratório 11

ListBox

  • Permite a seleção de um ou vários elementos de uma lista

  • Dados armazenados na coleção Items

    • Qualquer tipo de objetos
    • Usualmente strings
  • Opções para configurar os dados:

    • Propriedade DataSource com a fonte de dados
    • Adição direta na coleção de itens via método Add()
    • Remoção direta da coleção de itens via método Remove() e RemoveAt()

ListBox

  • Para configurar o modo de seleção:

    • Propriedade SelectionMode
      • One para um único valor
      • MultiSimple para múltiplos valores
      • MultiExtended para múltiplos valores com suporte às teclas shift e ctrl
  • Para obter a seleção do usuário:

    • Propriedades SelectedIndex ou SelectedIndices para obter o índice dos elementos selecionados
      • Cuidado! O índice do primeiro elemento é 0
    • Propriedades SelectedItem ou SelectedItems para obter o valor dos elementos selecionados
    • Propriedade SelectedValue para obter o valor associado ao elemento selecionado
      • Cuidado! Deve ser configurado via a propriedade ValueMember

ListBox

  • Para configurar os dados visíveis/retornados em objetos com DataSource:

    • Propriedade ValueMember especifica o nome do valor do elemento da fonte de dados
    • Propriedade DisplayMember especifica o nome do dado “visual” do elemento da fonte de dados

ComboBox

  • Semelhante ao ListBox

  • Para configurar o comportamento:

    • Propriedade DropDownSyle
      • Simple semelhante ao ListBox
      • DropDown permite a seleção e digitação de um valor
      • DropDownList permite a seleção mas não permite a digitação de um valor

Demonstração

  • Abra o projeto Exemplo3

CheckBox

  • Permite indicar um elemento com a informação de aceitação/rejeição

  • Para obter a seleção do usuário:

    • Propriedade Checked retorna true ou false dependendo se o item está marcado ou não

RadioButton

  • Permite a seleção de um único elemento dentre várias opções

    • O grupo de botões deve estar dentro de um GroupBox para que a seleção seja exclusiva
  • Para obter a seleção do usuário:

    • Propriedade Checked retorna true ou false dependendo se o item está marcado ou não

Demonstração

  • Abra o projeto Exemplo4

Componentes Acesso a Dados

  • Fontes de dados

    • Representam os dados disponíveis para um aplicativo
      • Camada de acesso a dados com base na API ADO.NET
    • Configuração via Data Source Configuration Wizard
      • Cria automaticamente o conjunto de classes necessárias para acesso aos dados
    • Três tipos diferentes de fontes
      • Banco de dados
      • Objetos com propriedades públicas
      • Web services

Componentes Acesso a Dados

  • Objetos do ADO.NET utilizados:

  • Connection

    • Provê conectividade a uma fonte de dados
  • Command

    • Acesso a comandos para consulta, alteração, inserção de dados e execução de stored procedures
  • DataReader

    • Provê um fluxo de dados de leitura de alta performance
  • DataAdapter

    • Provê uma ponte entre um DataSet e uma fonte de dados
  • DataSet

    • Representa dados relacionais em memória

Objeto DataSet

  • DataSets armazenam dados de forma semelhante a um modelo de banco de dados relacional

  • São constituídos de coleções de tabelas (Tables) e relacionamentos (Relations)

  • Tabelas (Tables) contém coleções de colunas (Columns), restrições (Constraints) and registros (Rows)

Componentes Acesso a Dados

Componentes Acesso a Dados

Componentes Acesso a Dados

  • DataSet tipado

    • É uma subclasse de DataSet que incorpora as definições de esquema (tabelas e colunas) através de propriedades públicas
    • Subclasse é criada através das informações de esquema XML contidas em um XSD (XML Schema Definition)
    • Pode ser criado automaticamente pelo Visual Studio
      • Ao criar uma fonte de dados a partir de um banco de dados, é criado um DataSet tipado automaticamente

Componentes Acesso a Dados

Componentes Acesso a Dados

  • TableAdapter

    • São objetos criados pelo Visual Studio que podem ser entendidos como uma versão tipada do DataAdapter
    • Permite
      • Executar comandos em um banco de dados
      • Preencher com dados um DataTable/DataSet
        • Método Fill(), método GetData()
      • Atualizar o banco de dados associado com as alterações feitas em um DataTable

Componentes Acesso a Dados

Componentes Acesso a Dados

Componentes Acesso a Dados

Componentes Acesso a Dados

  • Exemplo de conjunto de classes criadas (tabela “Shippers” do “Northwind”):

    • Uma classe derivada de DataSet
      • ShippersDataSet
    • Uma classe derivada de DataTable
      • ShippersDataTable
    • Uma classe derivada de DataRow
      • ShippersRow
    • Um TableAdapter
      • ShippersTableAdapter
    • Uma classe derivada de EventArgs
      • ShippersRowChangeEvent
    • Um delegate
      • ShippersRowChangeEventHandler

Exercícios

  • Seguir o roteiro de laboratório 12

Vinculação

  • Data Binding

    • É chamado de vinculação de dados
    • Entende-se como a associação de uma fonte de dados com um componente visual de interface gráfica
    • Dois tipos de vinculação:
      • Simples – permite que se anexe uma propriedade de um controle/formulário a um único valor na fonte de dados
        • TextBox, Label, etc
      • Complexa – permite anexar um controle a uma lista de valores
        • ListBox, ComboBox, etc

Exercícios

  • Seguir o roteiro de laboratório 13

Comentários