Vous êtes sur la page 1sur 101

Histria do C#

No final da dcada de 1990 a Microsoft tinha diversas tecnologias e


linguagens de programao para resolver muitos problemas diferentes.
Para solucionar esses problemas, a Microsoft recorreu linguagem Java.
Foi assinado um acordo de licenciamento com a Sun para utilizar o Java
em ambiente Windows. Porm, a linguagem Java possua um grave
problema: ela no se comunicava bem com o as bibliotecas de cdigo
nativo (cdigo de mquina) que j existiam. Para resolver isso, a
Microsoft decidiu criar a sua prpria implementao do Java chamado J+
+.
Microsoft processada por violar o licenciamento feito com a Sun.
A empresa comea ento a trabalhar em um nova plataforma que seria
a base de todas as suas solues, e posteriormente chamada de .NET.

Histria do C#
Esse novo ambiente de desenvolvimento da Microsoft foi desde o
incio projetado para trabalhar com diversas linguagens de
programao.
Um novo projeto de linguagem de programao foi iniciado, o projeto
COOL (C-like Object Oriented Language).
Anders Hejlsberg foi escolhido como engenheiro chefe desse novo
projeto. COOL teve seu design baseado em diversas outras linguagens
do mercado como Java, C, C++, Smalltalk, Delphi e VB. A ideia era
estudar os problemas existentes e incorporar solues.
Em 2002, o projeto COOL foi lanado como linguagem C# 1.0 junto
com o ambiente .NET 1.0. Atualmente a linguagem C# est em sua
verso 5.0 (oficial) e o .NET na verso 4.5.2, tendo evoludo com
expressiva velocidade, adotando novidades na sua sintaxe que a
diferenciaram bastante do Java e as demais.

Mquina Virtual
O .NET Framework utilizada o conceito de Mquina virtual.
Entre o sistema operacional e a aplicao existe uma camada
extra responsvel por "traduzir" o que sua aplicao deseja
fazer para as respectivas chamadas do sistema operacional
onde ela est rodando no momento.
um conceito bem mais amplo que o de um interpretador.
responsvel por gerenciar memria, threads, a pilha de
execuo etc.
As aplicao rodam sem nenhum envolvimento com o sistema
operacional, sempre "conversando" apenas com a mquina
virtual do C#, a Common Language Runtime ( CLR ).

Common Language Runtime (CLR).


A CLR o ambiente de execuo para todas as
linguagens da plataforma .NET, no apenas para o C#.
Executa uma linguagem intermediria comum a todas as
linguagens da plataforma .NET, a CIL (Common
Intermediate Language).
Para gerar o CIL que ser executado pela CLR,
precisamos passar o cdigo C# por um compilador da
linguagem, como o programa csc.exe.
O compilador l o arquivo com o cdigo fonte do
programa e o traduz para o cdigo intermedirio que
ser executado pela mquina virtual.

Execuo do cdigo na CLR e o JIT


Para executarmos uma aplicao C#, precisamos passar o cdigo CIL
do programa para a CLR, a mquina virtual do .NET.
A CLR por sua vez precisa executar o cdigo da aplicao no sistema
operacional do usurio e, para isso, precisa emitir o cdigo de mquina
correto para o ambiente em que o programa est sendo executado.
Mas a CLR no interpreta o CIL do programa, isso seria muito lento, ao
invs disso, quando o programa C# carregado na memria, a CLR
converte automaticamente o cdigo CIL para cdigo de mquina
Esse processo feito por um compilador Just in Time (JIT) da CLR. Esse
carregamento utilizando o JIT faz com que o cdigo escrito na
linguagem C# execute com o desempenho mximo, o mesmo de um
programa escrito em linguagens que compilam diretamente para o
cdigo de mquina, mas com a vantagem de executar no ambiente
integrado do .NET.

Variveis e tipos primitivos


As variveis guardam informaes de um tipo especfico.
Para utilizar uma varivel, devemos primeiramente
declar-la no texto do programa.
Na declarao de uma varivel, devemos dizer seu tipo e
alm disso, qual o nome que usaremos para referenci-la
no texto do programa.
A declarao de uma varivel pode ser realizada em
qualquer linha de um bloco.
No podemos declarar duas variveis com o mesmo nome
em um nico bloco ou escopo pois ocorrer um erro de
compilao.

Variveis e tipos primitivos


Os tipos listados nessa tabela so conhecidos como
tipos primitivos ou value types da linguagem C#.
Toda vez que atribumos um valor para uma varivel de
um tipo primitivo, o C# copia o valor atribudo para
dentro da varivel.

Tipos primitivos

Operadores
Para manipular os valores das variveis de um
programa utilizamos os operadores oferecidos pela
linguagem de programao adotada.
A linguagem C# possui diversos operadores e os
principais so categorizados da seguinte forma:
Aritmtico (+, -, *, /, %)
Atribuio (=, +=, -=, *=, /=, %=)
Relacional (==, !=, <, <=, >, >=)
Lgico (&&, ||)

Operadores aritmticos
Os operadores aritmticos funcionam semelhante aos
operadores na matemtica.
Os operadores aritmticos so:

Soma +
Subtrao Multiplicao *
Diviso /
Mdulo %

Operadores de atribuio
Os operadores de atribuio so:
Simples =
Incremental +=
Decremental -=
Multiplicativa *=
Divisria /=
Modular %=

Operadores de atribuio
A linguagem C# permite verificar duas ou mais
condies atravs de operadores lgicos.
Os operadores lgicos devolvem valores do tipo
primitivo bool.
Os operadores lgicos so:
E lgico &&
OU lgico ||

Operadores relacionais
Utilizado para determinar a relao entre uma varivel ou valor
e outra varivel ou valor.
As operaes realizadas com os operadores relacionais
devolvem valores do tipo primitivo bool. Os operadores
relacionais so:

Igualdade ==
Diferena !=
Menor <
Menor ou igual <=
Maior >
Maior ou igual >=

Estrutura de Controle
O comando if permite que valores booleanos sejam
testados
Se o valor passado como parmetro para o comando if
for true, o bloco do if executado. Caso contrrio, o
bloco do else executado.
O parmetro passado para o comando if deve ser um
valor booleano.
O comando else e o seu bloco so opcionais.

Estrutura de Controle
No C#, podemos executar cdigo condicional utilizando
a construo if :

Estruturas de repetio
As estruturas de repetio so usadas para controlar a
execuo de cdigos repetidamente at que uma
condio seja verdadeira.
No C# temos as seguintes estruturas de repetio:
FOR
WHILE
DO.. WHILE

Orientao a objeto
Um domnio composto pelas entidades, informaes e
processos relacionados a um determinado contexto. Uma
aplicao pode ser desenvolvida para automatizar ou tornar
factvel as tarefas de um domnio.
Portanto, uma aplicao basicamente o reflexo de um domnio.
Para exemplificar, suponha que estamos interessados em
desenvolver uma aplicao para facilitar as tarefas do cotidiano de
um banco.
Podemos identificar clientes, funcionrios, agncias e contas como
entidades desse domnio.
Assim como podemos identificar as informaes e os processos
relacionados a essas entidades.

Objetos, atributos e mtodos


As entidades identificadas no domnio devem ser
representadas de alguma forma dentro da aplicao
correspondente. Nas aplicaes orientadas a objetos, as
entidades so representadas por objetos.
Para exemplificar, suponha que no domnio de um
determinado banco exista um cliente chamado Jos.
Dentro de uma aplicao orientada a objetos
correspondente a esse domnio, deve existir um objeto
para representar esse cliente.

Objetos, atributos e mtodos


Suponha que algumas informaes do cliente Jos como
nome, data de nascimento e sexo so importantes para o
banco.
O objeto que representa esse cliente deve possuir essas
informaes. Esses dados so armazenados nos atributos
do objeto que representa o Jos.
Um atributo uma varivel que pertence a um objeto.
Os dados de um objeto so armazenados nos seus atributos.
O prprio objeto deve realizar operaes de consulta ou
alterao dos valores de seus atributos.
Essas operaes so definidas nos mtodos do objeto.

Classe
Antes de um objeto ser criado, devemos definir quais
sero os seus atributos e mtodos. Essa definio
realizada atravs de uma classe.
A partir de uma classe, podemos construir objetos na
memria do computador que executa a nossa aplicao.
Podemos representar uma classe atravs de diagramas
UML.

Classes

Diversas casas construdas a partir da mesma planta

Diversos bolos preparados a partir da mesma receita

Classes
Basicamente, as diferenas entre dois objetos criados a
partir da classe Conta so os valores dos seus atributos.
Assim como duas casas construdas a partir da mesma
planta podem possuir caractersticas diferentes. Por
exemplo, a cor das paredes.

Classes em C#
O conceito de classe apresentado anteriormente
genrico e pode ser aplicado em diversas linguagens de
programao.
Inicialmente, discutiremos apenas sobre os atributos. Os
mtodos sero abordados posteriormente.

Classes em C#
A classe C# Conta declarada utilizando a palavra
reservada class.
No corpo dessa classe, so declaradas trs variveis
que so os atributos que os objetos possuiro.

Criando objetos em C#
O comando para criar objetos o new.
Chamar o comando new passando uma classe C#
como se estivssemos contratando uma construtora
passando a planta da casa que queremos construir.

Referncias em C#
Todo objeto possui uma referncia. A referncia de um
objeto a nica maneira de acessar os seus atributos e
mtodos. Dessa forma, devemos guardar as referncias
dos objetos que desejamos utilizar.
Ao utilizar o comando new, um objeto alocado em
algum lugar da memria.
Para que possamos acessar esse objeto, precisamos de
sua referncia.
Para guardar as referncias devolvidas pelo comando
new, devemos utilizar variveis no primitivas.

Manipulando atributos
Podemos alterar ou acessar os valores guardados nos
atributos de um objeto se tivermos a referncia a esse
objeto.
Os atributos so acessados pelo nome.
No caso especfico da linguagem C#, a sintaxe para
acessar um atributo utiliza o operador ".

Mtodos
No banco, possvel realizar diversas operaes em uma conta:
depsito, saque, transferncia, consultas e etc.
Essas operaes podem modificar ou apenas acessar os valores dos
atributos dos objetos que representam as contas.
Podemos dividir um mtodo em 4 partes:
Nome: utilizado para chamar o mtodo. Na linguagem C#, uma boa prtica
definir os nomes dos mtodos utilizando a conveno Camel Case com a
primeira letra maiscula.
Lista de Parmetros: Define os valores que o mtodo deve receber. Mtodos
que no devem receber nenhum valor possuem a lista de parmetros vazia.
Corpo: Define o que acontecer quando o mtodo for chamado
Retorno: A resposta que ser devolvida ao final do processamento do mtodo.
Quando um mtodo no devolve nenhuma resposta, ele deve ser marcado
coma palavra reservada void.

Sobrecarga
Programadores ficam so isentos de ter que criar
mtodos com as mesmas funes, mas com outros
nomes para ter que diferencia-los de alguma forma.
Quando dois ou mais mtodos so definidos na mesma
classe com o mesmo nome, dizemos que houve uma
sobrecarga de mtodos.
Uma sobrecarga de mtodos s vlida se as listas de
parmetros dos mtodos so diferentes entre si.
No caso dos dois mtodos que geram extratos,
poderamos evitar repetio de cdigo fazendo um
mtodo chamar o outro.

Sobrecarga

Construtores
No domnio de um banco, todo carto de crdito deve
possuir um nmero. Toda agncia deve possuir um
nmero. Toda conta deve estar associada a uma agncia
Definir os valores dos atributos obrigatrios de um
objeto logo aps a criao dele resolveria as restries
do sistema do banco.
Nenhuma garantia que todos os desenvolvedores
sempre lembrem de inicializar esses valores.
A utilizao de construtores uma soluo
construtores.

Construtor padro
Toda vez que um objeto criado, um construtor da
classe correspondente deve ser chamado.
Mesmo quando nenhum construtor for definido
explicitamente, h um construtor padro que ser
inserido pelo prprio compilador.
O construtor padro no recebe parmetros e ser
inserido sempre que o desenvolvedor no definir pelo
menos um construtor explicitamente

Sobrecarga de construtores
O conceito de sobrecarga de mtodos pode ser aplicado
para construtores.
Dessa forma, podemos definir diversos construtores na
mesma classe.

Encapsulamento
No sistema do banco, cada objeto da classe Funcionrio
possui um atributo para guardar o salrio do funcionrio
que ele representa

O atributo salario pode ser acessado ou modificado por


cdigo escrito por qualquer classe.
Portanto, o controle do atributo salario
descentralizado.

Encapsulamento
Podemos obter um controle centralizado tornando o atributo
salario privado e definindo mtodos para implementar
todas as lgicas que utilizam ou modificam o valor desse
atributo.
Em C#, se nenhum modificador de visibilidade for definido
para um determinado atributo, esse atributo ser
considerado privado por padro.
Boa prtica deixar explcito no cdigo que o atributo
privado, adicionando o modificador private.

Mtodos privados
O papel de alguns mtodos pode ser o de auxiliar outros
mtodos da mesma classe.
No exemplo, o mtodo
DescontaTarifa() um mtodo
auxiliar dos mtodos Deposita()
e Saca(). Alm disso, ele no
deve ser chamado
diretamente, pois a tarifa s
deve ser descontada quando
ocorre um depsito ou um
saque.

Propriedades
A linguagem C# disponibiliza uma outra maneira para
acessar os atributos: as propriedades.
Uma propriedade, basicamente, agrupa os mtodos de
consulta e alterao dos atributos

Propriedades auto-implementadas
Muitas vezes, a lgica das propriedades trivial. Ou
seja, queremos apenas realizar uma atribuio ou
devolver um valor;
Nesses casos, podemos aplicar o recurso de
propriedades automticas. O cdigo fica mais
simples e prtico.

Porqu encapsular
Encapsular significa esconder a implementao dos
objetos.
O encapsulamento favorece principalmente dois aspectos
de um sistema: a manuteno e o desenvolvimento
A manuteno favorecida pois, uma vez aplicado o
encapsulamento, quando o funcionamento de um objeto
deve ser alterado, em geral, basta modificar a classe do
mesmo.
O desenvolvimento favorecido pois, uma vez aplicado o
encapsulamento, conseguimos determinar precisamente
as responsabilidades de cada classe da aplicao.

Herana
Por meio da herana uma classe herda (copia) todas as
propriedades, atributos e mtodos de uma outra classe, podendo
assim estender sua funcionalidade.
A classe que cede os membros para a outra classe chamada
superclasse, classe pai ou classe base.
A classe que herda os membros da outra classe chamada
subclasse ou classe derivada.
A herana permite a reutilizao de cdigo e especifica um
relacionamento de especializao/generalizao do tipo " um.
Embora seja recurso poderoso a herana deve ser usada somente
quando necessrio pois pode levar a um acoplamento forte entre as
classes do seu projeto dificultando a sua reusabilidade e a
manuteno;

Herana
Um banco oferece diversos servios que podem ser
contratados individualmente pelos clientes.
Quando um servio contratado, o sistema do banco
deve registrar quem foi o cliente que contratou o
servio, quem foi o funcionrio responsvel pelo
atendimento ao cliente e a data de contratao.
Com o intuito de ser produtivo, a modelagem dos
servios do banco deve diminuir a repetio de cdigo.
A ideia reaproveitar o mximo do cdigo j criado.

Herana
Poderamos definir apenas uma classe para modelar
todos os tipos de servios que o banco oferece.
Emprstimo
O emprstimo um dos servios que o banco oferece.
Quando um cliente contrata esse servio, so definidos o valor
e a taxa de juros mensal do emprstimo.

Herana
Seguro de veculos
Para esse servio devem ser definidas as seguintes
informaes: veculo segurado, valor do seguro e a franquia.

Herana
Uma classe genrica e vrias especficas
Na modelagem dos servios do banco, podemos aplicar
um conceito de orientao a objetos chamado
Herana.
A ideia reutilizar o cdigo de uma determinada classe
em outras classes.
Aplicando herana, teramos a classe Servico com os
atributos e mtodos que todos os servios devem ter e
uma classe para cada servio com os atributos e
mtodos especficos do determinado servio.

Herana
As classes especficas so vinculadas a classe genrica
utilizando o comando (:).

Herana
Quando o operador new aplicado em uma sub classe,
o objeto construdo possuir os atributos e mtodos
definidos na sub classe e na super classe.

Construtores e Herana
Quando temos uma hierarquia de classes, as chamadas
dos construtores so mais complexas do que o normal.
Um construtor de cada classe de uma mesma sequncia
hierrquica deve ser chamado ao instanciar um objeto.
Por exemplo, quando um objeto da classe Emprestimo
criado, pelo menos um construtor da prpria classe
Emprestimo e um da classe Servico devem ser
executados.
Os construtores das classes mais genricas so
chamados antes dos construtores das classes
especficas.

Polimorfismo
Polimorfismo o princpio pelo qual duas ou mais
classes derivadas de uma mesma superclasse podem
invocar mtodos que tm a mesma identificao
(assinatura) mas comportamentos distintos,
especializados para cada classe derivada.
Suponha que todo servio do banco possui uma taxa
administrativa que deve ser paga pelo cliente que
contratar o servio.
Suponha que o valor da taxa administrativa do servio
de emprstimo diferente dos outros servios, pois ele
calculado a partir do valor emprestado ao cliente.

Polimorfismo
A soluo utilizando polimorfismo

Abstrao
No banco, todas as contas
so de um tipo especfico.
Por exemplo, conta
poupana, conta corrente
ou conta salrio.
Essas contas poderiam ser
modeladas atravs das
seguintes classes
utilizando o conceito de
herana:

Abstrao
Faz sentido criar objetos da classe ContaPoupanca pois
existem contas poupana no domnio do banco.
Dizemos que a classe ContaPoupanca uma classe
concreta pois criaremos objetos a partir dela.
A classe Conta no define uma conta que de fato existe
no domnio do banco. Ela apenas serve como base
para definir as contas concretas.
No faz sentido criar um objeto da classe Conta pois
estaramos instanciado um objeto que no suficiente
para representar uma conta que pertena ao domnio
do banco.

Abstrao
Para adicionar essa restrio no sistema, devemos
tornar a classe Conta abstrata.
Uma classe concreta pode ser diretamente utilizada
para instanciar objetos
Uma classe abstrata no pode. Para definir uma classe
abstrata, basta adicionar o modificador abstract

Mtodos abstratos
Suponha que o banco oferea extrato detalhado das contas e para cada tipo
de conta as informaes e o formato desse extrato detalhado so diferentes.
Neste caso, parece no fazer sentido ter um mtodo na classe Conta para
gerar extratos detalhados pois ele seria reescrito nas classes especficas sem
nem ser reaproveitado.
Poderamos, simplesmente, no definir nenhum mtodo para gerar extratos
detalhados na classe Conta. Porm, no haveria nenhuma garantia que as
classes que derivam direta ou indiretamente da classe Conta implementem
mtodos para gerar extratos detalhados.
As classes derivadas poderiam definir mtodos com nomes ou parmetros
diferentes. Isso prejudicaria a utilizao dos objetos que representamos
contas devido a falta de padronizao das operaes.
Para garantir que toda classe concreta que deriva direta ou indiretamente da
classe Conta tenha uma implementao de mtodo para gerar extratos
detalhados e alm disso que uma mesma assinatura de mtodo seja
utilizada, devemos utilizar o conceito de mtodos abstratos.

Mtodos abstratos

Interfaces
Padronizao
No dia a dia, estamos acostumados a utilizar aparelhos que
dependem de energia eltrica.
Diversas empresas fabricam aparelhos eltricos com plugues.
Analogamente, diversas empresas fabricam tomadas eltricas.
Se cada empresa decidisse por conta prpria o formato dos
plugues ou das tomadas que fabricar, teramos uma infinidade
de tipos de plugues e tomadas que tornaria a utilizao dos
aparelhos eltricos uma experincia extremamente desagradvel.
Inclusive, essa falta de padro pode gerar problemas de
segurana aos usurios. Os formatos dos plugues ou das tomadas
pode aumentar o risco de uma pessoa tomar umchoque eltrico.

Interfaces
Padronizao
O governo atravs dos rgos responsveis estabelece
padres para os plugues e tomadas.
Esses padres estabelecem restries que devem ser
respeitadas pelos fabricantes dos aparelhos e das
tomadas.
Em diversos contextos, padronizar pode trazer grandes
benefcios. Inclusive, no desenvolvimento de aplicaes.

Interfaces
Contratos
Num sistema orientado a objetos, os objetos interagem entre si atravs
de chamadas de mtodos (troca de mensagens).
Os objetos se encaixam atravs dos mtodos pblicos assim como um
plugue se encaixa em uma tomada atravs dos pinos.
Para os objetos de uma aplicao conversarem entre si mais facilmente
importante padronizar o conjunto de mtodos oferecidos por eles.
Um padro definido atravs de especificaes ou contratos.
Nas aplicaes orientadas a objetos, podemos criar um contrato para
definir um determinado conjunto de mtodos e/ou atributos que deve ser
implementado pelas classes que assinarem este contrato.
Em orientao a objetos, um contrato chamado de interface.

Interfaces
Exemplo
No sistema do banco, podemos definir uma interface
(contrato) para padronizar as assinaturas dos mtodos
oferecidos pelos objetos que representam as contas do
banco.

Interfaces
Exemplo
Observe que somente assinaturas de mtodos so
declaradas no corpo de uma interface.
Todos os mtodos de uma interface so pblicos e no
pode incluir modificadores de acesso.
Uma interface s pode conter mtodos, propriedades,
indexadores e eventos.
Por conveno, em C#, o nome de uma interface deve ter
o prefixo I.

Interfaces
Exemplo
As classes que
definem os diversos
tipos de contas que
existem no banco
devem implementar
(assinar) a interface
IConta.

Interfaces
Polimorfismo
Se uma classe implementa uma interface, podemos
aplicar a ideia do polimorfismo assim como quando
aplicamos herana.
Dessa forma, outra vantagem da utilizao de
interfaces o ganho do polimorfismo.
Como exemplo, suponha que a classe ContaCorrente
implemente a interface IConta. Podemos guardar a
referncia de um objeto do tipo ContaCorrente em uma
varivel do tipo IConta.

Interfaces
Polimorfismo
Podemos passar uma varivel do tipo ContaCorrente
para um mtodo que o parmetro seja do tipo IConta.

Arrays
Suponha que o sistema do banco tenha que gerar listas
com os nmeros das contas de uma agncia.
Poderamos declarar uma varivel para cada nmero.
No seria uma abordagem prtica.
Quando desejamos armazenar uma grande quantidade
de valores de um determinado tipo, podemos utilizar
arrays.
Podemos imaginar um array como sendo um armrio
com um determinado nmero de gavetas.
Cada gaveta possui um rtulo com um nmero de
identificao

Criando um array
Em C#, os arrays so criados atravs do comando new.

A varivel nmeros armazena a referncia de um array


criado na memria do computador atravs do comando
new.
Na memria, o espao ocupado por esse array est
dividido em 100 pedaos iguais numerados de 0 at
99.
Cada pedao pode armazenar um valor do tipo int.

Modificando o contedo de um array


Para modificar o contedo de um array, devemos
escolher uma ou mais posies que devem ser
alteradas e utilizar a sintaxe abaixo:

Quando uma array criado com o comando new, todas


as posies so inicializadas com os valores padro
(nmeros so inicializados com 0, booleanos com false
e referncias com null).

Modificando o contedo de um array


Tambm podemos definir os valores de cada posio de
um array no momento da sua criao utilizando as
sintaxes abaixo:

Acessando o contedo de um array


Para acessar o contedo de um array, devemos
escolher uma posio e utilizar a sintaxe abaixo:

Acessar posies fora do intervalo de ndices de um


array gera erro de execuo.
IndexOutOfRangeException.

Percorrendo um array
Quando trabalhamos com um array, uma das tarefas
mais comuns acessarmos todas ou algumas de suas
posies sistematicamente
Para percorrermos um array, utilizaremos a instruo de
repetio for.
Podemos utilizar a instruo while tambm. Porm, logo
perceberemos que a sintaxe da instruo for, em geral,
mais apropriada quando estamos trabalhando com
arrays.

Percorrendo um array
Para percorrer um array, necessrio saber a
quantidade de posies do mesmo.
Essa quantidade definida quando o array criado
atravs do comando new.
Podemos recuperar a quantidade de posies de
umarray acessando o seu atributo Length.

Percorrendo um array
Para acessar todos os elementos de umarray, possvel
aplicar o comando foreach.

Classes e membros estticos


Classes
As classes estticas so aquelas que contm apenas membros
estticos, alm de que elas no podem ser instanciadas.
Podemos us-la no caso de no haver comportamento ou
dados na classe que depende da identidade do objeto.
recomendado o uso de classes estticas para manter
mtodos no associados com um objeto especfico. Elas so
caracterizadas por no poderem ser herdadas, j que so
seladas.
Alm disso, elas no podem terInstance Constructors. Embora
seja possvel declarar um construtor esttico para atribuir
valores iniciais ou aplicar algum estado esttico.

Classes e membros estticos


Membros
Os membros estticos so campos, mtodos, eventos
ou propriedades que podem ser chamados em uma
classe mesmo que no tenha sido criada uma instncia
desta classe.
Podemos usar membros estticos para separar os dados
e o comportamento, que independem de qualquer
identidade do objeto, ou seja, os dados e funes nunca
iro se modificar, independente do que acontecer com
seu objeto.

Classe Object
Todas as classes derivam direta ou indiretamente da
classe Object.
Consequentemente, todo contedo definido nessa
classe estar presente em todos os objetos.
Alm disso, qualquer referncia pode ser armazenada
em uma varivel do tipo Object.
Ou seja, a ideia do polimorfismo pode ser aplicada para
criar mtodos genricos que podem ser aplicados em
objetos de qualquer classe.
Na linguagem C# podemos utilizar a palavra chave
object como alias para Object

String
A classe String utilizada em praticamente todas as
aplicaes .NET.
Uma caracterstica fundamental dos objetos da classe
String que eles so imutveis. Em outras palavras, o
contedo de uma string no altera.
Alguns mtodos das strings podem dar a impresso
errada de que o contedo do objeto ser alterado.
Por exemplo, o mtodo ToUpper() que utilizado para
obter uma string comletras maisculas.
Esse mtodo no altera a string original, ele cria uma
nova string com o contedo diferente.

String
Mtodos e Propriedades
Length
ToUpper()
ToLower()
Trim()
Split()
Replace()

Exceptions
Como erros podem ocorrer durante a execuo de uma
aplicao, devemos definir como eles sero tratados.
Na plataforma .NET, os erros de execuo so definidos
por classes que derivam direta ou indiretamente da
classe System.Exception.
Diversos erros j esto definidos na plataforma .NET.
As classes que modelam os erros pr-definidos derivam
da classe System.SystemException.

Lanando erros
Para lanar um erro, devemos criar um objeto de
qualquer classe que deriva de Exception para
representar o erro que foi identificado.
Depois de criar uma exception podemos lanar a
referncia dela utilizando o comando throw.
Observe o exemplo utilizando a classe
System.ArgumentException que deriva indiretamente
da classe System.Exception.

Capturando erros
Em um determinado trecho de cdigo, para capturar
uma exception devemos utilizar o comando try-cacth.

Finally
Em alguns casos, queremos executar um trecho de
cdigo independetemente se houver erros ou no.
Para isso podemos, utilizar o bloco finally.

Collections
Muitas vezes, trabalhar diretamente com arrays no
simples dado as diversas limitaes que eles possuem.
A limitao principal a capacidade fixa, um array no
pode ser redimensionado.
Alm disso, adicionar ou remover elementos
provavelmente gera a necessidade de deslocar parte do
contedo do array.
As dificuldades do trabalho com array podem ser
superadas com estruturas de dados mais sofisticadas.
No C#, h diversas estruturas de dados que facilitam o
trabalho do desenvolvedor.

Listas
As listas so estruturas de dados de armazenamento
sequencial assim como os arrays.
Mas, diferentemente dos arrays, as listas no possuem
capacidade fixa o que facilita bastante o trabalho.
IList a interface C# que define os mtodos que uma
lista deve implementar.
Uma das implementaes dessa interface a classe
ArrayList.

Generics
As listas armazenam referncias de qualquer tipo.
Dessa forma, quando recuperamos um elemento de
uma lista temos que trabalhar com referncias do tipo
object.

Generics
Porm, normalmente, precisamos tratar os objetos de
forma especfica pois queremos ter acesso aos mtodos
especficos desses objetos. Nesses casos, devemos
fazer casting nas referncias.

O casting de referncia arriscado pois em tempo de


compilao no temos garantia que ele est correto.

Generics
Para ter certeza da tipagem dos objetos em tempo de
compilao, devemos aplicar o recurso do Generics.
Com este recurso podemos determinar o tipo de objeto
que queremos armazenar em uma coleo no momento
em que ela criada.
O compilador no permitir que elementos no
compatveis com o tipo escolhido sejam adicionados na
coleo.
Isso garante o tipo do elemento nomomento em que ele
recuperado da coleo e elimina a necessidade de
casting.

Generics
As classes que contm o recurso Generics fazem parte
do namespace System.Collections.Generic.
A classe genrica equivalente a ArrayList a List.

LINQ e Lambda
LINQ - Language integrated Query - um conjunto de
recursos introduzidos no .NET Framework 3.5 que
permitem a realizao de consultas diretamente em
base de dados , documentos XML , estrutura de dados ,
coleo de objetos, etc.
O LINQ simplifica esta situao oferecendo um modelo
mais simples e consistente para trabalhar com dados
em vrios tipos de fontes de dados e formatos.
Em uma consulta LINQ, voc est sempre trabalhando
com objetos.

LINQ e Lambda
Nosso banco armazena uma lista de contas.
Essas contas possuem os mais variados correntistas,
saldos e tipos. Muitas vezes, precisamos filtr-las de
alguma forma.
Por exemplo, se quisermos pegar todas as contas com
saldo maior que 2000 reais.

LINQ e Lambda
Se complicarmos ainda mais o filtro (por exemplo,
contas com saldo maior que 2000 e menor que 5000,
com data de abertura entre os anos 2010 e 2012, ...),
O cdigo ficar tambm mais complexo, alm disso, se
quisssemos aplicar um filtro em uma lista com outro
tipo de objeto, pontos da aplicao.

Filtros utilizando LINQ


Para filtrar uma lista, seria muito mais interessante que
a prpria coleo tivesse algum mtodo que recebesse
a condio que queremos aplicar nesse filtro e j
implementasse a lgica do foreach , algo como:

Filtros utilizando LINQ


Para passar um bloco de cdigo que pode ser utilizado
por um mtodo, o C# introduziu as funes annimas
ou lambdas .
As funes annimas funcionam como mtodos
estticos da linguagem com uma declarao
simplificada.
Para declarar uma funo annima que recebe um
argumento do tipo Conta utilizamos o seguinte cdigo:

Filtros utilizando LINQ


Dentro do bloco de implementao da funo annima,
colocaremos a implementao da condio:

E agora essa funo pode ser passada para dentro do


mtodo Filtra :

No C# temos exatamente a implementao dessa ideia,


mas o mtodo se chama Where ao invs de Filtra.

Filtros utilizando LINQ


Dentro do bloco de implementao da funo annima,
colocaremos a implementao da condio:

E agora essa funo pode ser passada para dentro do


mtodo Filtra :

No C# temos exatamente a implementao dessa ideia,


mas o mtodo se chama Where ao invs de Filtra.

Outros mtodos LINQ


Agora imagine que queremos saber qual a soma do
saldo de todas as contas que esto cadastradas dentro
da aplicao.
Para resolver esse problema, teramos que fazer um
cdigo parecido com o seguinte:

Outros mtodos LINQ


Porm esse tipo de cdigo tambm acaba ficando repetitivo.
Quando queremos fazer a soma dos elementos de uma lista,
podemos utilizar o mtodo Sum do LINQ, passando um lambda
que fala qual a propriedade da conta que queremos somar:

Com essa linha de cdigo conseguimos o mesmo efeito do


foreach.
Alm do Sum , tambm podemos utilizar o mtodo Average
para calcular a mdia dos valores, Count para contar o nmero
de valores que obedecem algum critrio, Min para calcular o
menor valor e Max para calcular o maior valor, entre outros.

Ordenando colees com LINQ


Alm de fazermos buscas e projees, podemos
tambm utilizar o LINQ para ordenar colees de
elementos.

Ordenando colees com LINQ


Ordenao secundria.

Exerccios LINQ
Escrever no console (Console. WriteLine) as
seguintes informaes:
Total de alunos maiores de 18 anos (maior ou igual)
Total de alunos menores de 18 anos
Nome dos alunos matriculados em Matemtica
Nome dos alunos matriculados em Matemtica com
nota menor ou igual a 5
Nome dos professores que possuem alguma disciplina
Nome dos professores sem nenhuma disciplina
Nome dos alunos com 4 ou mais disciplinas vinculadas

Exerccios LINQ
Escrever no console (Console. WriteLine) as
seguintes informaes:
Nome dos alunos que comeam com a letra M
Nome dos com menos de 13 caracteres (<13)
Nome dos professores que contm em alguma parte do
nome Pedro
Nome dos alunos de portugus ordenados pela idade do
menor para o maior.
Nome do professor da disciplina de Geografia

Prxima aula Mdulo II


Introduo ao ADO.NET
Connection
Command
DataReader
Introduo ao NHibernate
Arquitetura do NHibernate
Nuget Package Manager Visual Studio
Configurando o NHibernate

Referncias
Apostila Caelum C# Orientao a Objetos
Apostila K19 C#
http://pt.slideshare.net/ivanricarte/programao-orientadaa-objetos-herana
http://www.macoratti.net/11/08/c_her1.htm
https://msdn.microsoft.com/en-us/library/s1ax56ch.aspx
http://www.macoratti.net/12/06/c_poli1.htm
https://msdn.microsoft.com/pt-br/library/6a71f45d.aspx
http://blog.typps.com/2007/10/bitwise-operators-in-c-orxor-and-not.html

Vous aimerez peut-être aussi