Buscar

Programação Orientada à Objetos I

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 125 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 125 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 125 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
PROGRAMAÇÃO 
ORIENTADA A OBJETOS I
2
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
A Faculdade Multivix está presente de norte a sul 
do Estado do Espírito Santo, com unidades em 
Cachoeiro de Itapemirim, Cariacica, Castelo, Nova 
Venécia, São Mateus, Serra, Vila Velha e Vitória. 
Desde 1999 atua no mercado capixaba, des-
tacando-se pela oferta de cursos de gradua-
ção, técnico, pós-graduação e extensão, com 
qualidade nas quatro áreas do conhecimen-
to: Agrárias, Exatas, Humanas e Saúde, sem-
pre primando pela qualidade de seu ensino 
e pela formação de profissionais com cons-
ciência cidadã para o mercado de trabalho.
Atualmente, a Multivix está entre o seleto 
grupo de Instituições de Ensino Superior que 
possuem conceito de excelência junto ao 
Ministério da Educação (MEC). Das 2109 institui-
ções avaliadas no Brasil, apenas 15% conquistaram 
notas 4 e 5, que são consideradas conceitos 
de excelência em ensino.
Estes resultados acadêmicos colocam 
todas as unidades da Multivix entre as 
melhores do Estado do Espírito Santo e 
entre as 50 melhores do país.
 
MISSÃO
Formar profissionais com consciência cida-
dã para o mercado de trabalho, com ele-
vado padrão de qualidade, sempre mantendo a 
credibilidade, segurança e modernidade, visando 
à satisfação dos clientes e colaboradores.
 
VISÃO
Ser uma Instituição de Ensino Superior reconheci-
da nacionalmente como referência em qualidade 
educacional.
GRUPO
MULTIVIX
3
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
BIBLIOTECA MULTIVIX (Dados de publicação na fonte)
As imagens e ilustrações utilizadas nesta apostila foram obtidas no site: http://br.freepik.com
Castro, Daniel Araujo de.
Programação Orientada à Objetos I / Daniel Araujo de Castro. – Serra: Multivix, 2018.
EDITORIAL
Catalogação: Biblioteca Central Anisio Teixeira – Multivix Serra
2018 • Proibida a reprodução total ou parcial. Os infratores serão processados na forma da lei.
FACULDADE CAPIXABA DA SERRA • MULTIVIX
Diretor Executivo
Tadeu Antônio de Oliveira Penina
Diretora Acadêmica
Eliene Maria Gava Ferrão Penina
Diretor Administrativo Financeiro
Fernando Bom Costalonga
Diretor Geral
Helber Barcellos da Costa
Diretor da Educação a Distância
Pedro Cunha
Conselho Editorial
Eliene Maria Gava Ferrão Penina (presidente 
do Conselho Editorial)
Kessya Penitente Fabiano Costalonga
Carina Sabadim Veloso
Patrícia de Oliveira Penina
Roberta Caldas Simões
Revisão de Língua Portuguesa
Leandro Siqueira Lima
Revisão Técnica
Alexandra Oliveira
Alessandro Ventorin
Graziela Vieira Carneiro
Design Editorial e Controle de Produção de Conteúdo
Carina Sabadim Veloso
Maico Pagani Roncatto
Ednilson José Roncatto
Aline Ximenes Fragoso
Genivaldo Félix Soares
Multivix Educação a Distância
Gestão Acadêmica - Coord. Didático Pedagógico
Gestão Acadêmica - Coord. Didático Semipresencial
Gestão de Materiais Pedagógicos e Metodologia
Direção EaD
Coordenação Acadêmica EaD
4
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
Aluno (a) Multivix,
Estamos muito felizes por você agora fazer parte 
do maior grupo educacional de Ensino Superior do 
Espírito Santo e principalmente por ter escolhido a 
Multivix para fazer parte da sua trajetória profissional.
A Faculdade Multivix possui unidades em Cachoei-
ro de Itapemirim, Cariacica, Castelo, Nova Venécia, 
São Mateus, Serra, Vila Velha e Vitória. Desde 1999, 
no mercado capixaba, destaca-se pela oferta de 
cursos de graduação, pós-graduação e extensão 
de qualidade nas quatro áreas do conhecimento: 
Agrárias, Exatas, Humanas e Saúde, tanto na mo-
dalidade presencial quanto a distância.
Além da qualidade de ensino já comprova-
da pelo MEC, que coloca todas as unidades do 
Grupo Multivix como parte do seleto grupo das 
Instituições de Ensino Superior de excelência no 
Brasil, contando com sete unidades do Grupo en-
tre as 100 melhores do País, a Multivix preocupa-
-se bastante com o contexto da realidade local e 
com o desenvolvimento do país. E para isso, pro-
cura fazer a sua parte, investindo em projetos so-
ciais, ambientais e na promoção de oportunida-
des para os que sonham em fazer uma faculdade 
de qualidade mas que precisam superar alguns 
obstáculos. 
Buscamos a cada dia cumprir nossa missão que é: 
“Formar profissionais com consciência cidadã para o 
mercado de trabalho, com elevado padrão de quali-
dade, sempre mantendo a credibilidade, segurança 
e modernidade, visando à satisfação dos clientes e 
colaboradores.”
Entendemos que a educação de qualidade sempre 
foi a melhor resposta para um país crescer. Para a 
Multivix, educar é mais que ensinar. É transformar o 
mundo à sua volta.
Seja bem-vindo!
APRESENTAÇÃO 
DA DIREÇÃO 
EXECUTIVA
Prof. Tadeu Antônio de Oliveira Penina 
Diretor Executivo do Grupo Multivix
5
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
APRESENTAÇÃO DA DISCIPLINA
Caro aluno, seja bem-vindo à disciplina Programação Orientada a Objetos. Você verá 
informações interessantes e importantes que são específicas para a área de progra-
mação.
Aprender esta disciplina certamente irá mudar o seu modo de pensar a respeito de 
desenvolvimento de software e até mesmo em outros campos de sua vida.
O tema é muito abrangente e precisa muito de sua interpretação. Portanto, sugiro 
que você participe dos fóruns, de discussões com colegas, faça a leitura da apostila 
e realize todas as atividades. Tem muito material para abstrair aqui. Espero que a 
construção do seu conhecimento seja rica e proveitosa. Você pode acrescentar mais 
informações realizando pesquisas orientadas na internet.
Espero contribuir para seu crescimento no aprendizado e despertar em você a von-
tade de moldar seu modelo mental, segundo um novo paradigma: a orientação a 
objetos.
Objetivos da disciplina
Esperamos que, até o final da disciplina, você:
• Examine os conceitos de Orientação a Objetos.
• Identifique um objeto.
• Nomeie os componentes que formam um objeto.
• Descreva o conceito de objetos para repensar seus trabalhos na área de Aná-
lise de Sistemas.
• Use a lógica de objetos em seus próximos trabalhos.
6
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 > FIGURA 1 - Gato preto 14
 > FIGURA 2 - Diagrama polimórfico da classe pessoa 21
 > FIGURA 3 - Utilizando o Visual Studio 27
 > FIGURA 4 - Saída na console - params 51
 > FIGURA 5 - Saída na console - coleções 53
 > FIGURA 6 - Saída na console – manuseando coleções 54
 > FIGURA 7 - Saída na console – manuseando coleções 2 55
 > FIGURA 8 - Saída na console – manuseando coleções 3 56
 > FIGURA 9 - Saída na console – enumeradores 59
 > FIGURA 10 - Figura 1- Serviços em comunicação 106
 > FIGURA 11 - Relacionamento entre as classes 111
LISTA DE FIGURAS
7
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
LISTA DE QUADROS
 > QUADRO 1 - Variáveis vs Métodos 15
 > QUADRO 2 - Tipos de variáveis 22
8
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
SUMÁRIO
1UNIDADE
3UNIDADE
2UNIDADE
1 CONCEITOS DE ORIENTAÇÃO A OBJETOS 13
1.1 HISTÓRICODA PO 13
1.2 CONCEITOS 14
1.2.1 VARIÁVEIS 15
1.2.2 MÉTODOS 16
1.2.3 CLASSES 16
1.2.4 OBJETO 17
1.2.5 HERANÇA 18
1.2.6 ENCAPSULAMENTO 19
1.2.7 POLIMORFISMO 20
1.2.8 CONSTRUTORES 22
1.2.9 DESTRUTORES OU FINALIZADORES 23
CONCLUSÃO 24
2 INTRODUÇÃO À PROGRAMAÇÃO EM C# 26
2.1 INTRODUÇÃO AO C# E AO.NET FRAMEWORK 26
2.1.1 OLA MUNDO – COMPILANDO SEU PRIMEIRO PROGRAMA 27
2.1.1.1 O MÉTODO PRINCIPAL: O MÉTODO MAIN() 28
2.1.1.2 ENTRADA E SAÍDA 28
2.2 A ESTRUTURA DE UM CÓDIGO EM C# 28
2.2.1 IMPLEMENTANDO OS CONCEITOS 30
2.2.1.1 TIPOS DE REFERÊNCIA 30
2.2.1.2 DECLARANDO CLASSES 30
2.2.1.3 ACESSANDO VARIÁVEIS E MÉTODOS DENTRO DE UM OBJETO 31
2.2.1.4 CRIANDO OBJETOS 33
2.2.1.5 HERANÇA DE CLASSES 33
2.2.1.6 POLIMORFISMO 36
2.2.1.7 ENCAPSULAMENTO 37
CONCLUSÃO 38
3 PROGRAMAÇÃO EM C# - NÍVEL BÁSICO 40
3.1 MODIFICADORES DE ACESSO EM C# 40
3.1.1 PUBLIC 41
3.1.2 PRIVATE 41
3.1.3 INTERNAL 42
9
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.1.4 PROTECTED 43
3.1.5 ABSTRACT 44
3.1.6 CONST 44
3.1.7 SEALED 45
3.1.8 STATIC 45
3.1.9 VIRTUAL 46
3.2 PASSANDO PARÂMETROS EM C# 47
3.2.1 VALUE 47
3.2.2 OUT 47
3.2.3 REF 48
3.2.4 PARAMS 49
3.3 COLEÇÕES 52
3.3.1 MANUSEANDO COLEÇÕES 52
3.3.1.1 GET; E SET; 57
3.4 ESTRUTURAS (STRUCTS) 58
3.5 ENUMERADORES (ENUMS) 59
CONCLUSÃO 60
4 PROGRAMAÇÃO C# - NÍVEL INTERMEDIÁRIO 62
4.1 STRINGS 62
4.1.1 DECLARAÇÃO E INICIALIZAÇÃO DE STRINGS 62
4.1.2 IMUTABILIDADE DE STRINGS 63
4.1.3 LITERAIS DE CADEIA DE CARACTERES REGULARES E TEXTUAIS 64
4.1.4 SEQUÊNCIAS DE ESCAPE DE CADEIA DE CARACTERES 64
4.1.5 CADEIA DE CARACTERES DE FORMATO 65
4.1.6 SUBCADEIAS DE CARACTERES 65
4.1.7 SUBSTRING 65
4.1.8 INDEXOF 66
4.1.9 CONCATENAÇÃO DE STRINGS 68
4.1.10 STRINGBUILDER() 68
4.1.11 SPLIT 69
4.1.12 PESQUISA EM CADEIA DE CARACTERES 70
4.1.13 VERIFICANDO PADRÕES COM EXPRESSÕES REGULARES 71
4.1.14 VERIFICANDO SE UMA CADEIA DE CARACTERES REPRESENTA UM NÚ-
MERO 74
4.2 PALAVRAS RESERVADAS 75
4.2.1 PALAVRAS-CHAVE CONTEXTUAIS 76
CONCLUSÃO 77
4UNIDADE
10
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
5 PROGRAMAÇÃO C# - NÍVEL AVANÇADO 79
5.1 DELEGADOS ( DELEGATES) 79
5.1.1 DELEGATES – REUTILIZAÇÃO DE CÓDIGO 82
5.2 CALLBACK OU FUNÇÕES DE RETORNO DE CHAMADA 93
5.3 TRATAMENTO DE EXCEÇÕES 98
5.3.1 O QUE É UMA EXCEÇÃO? 98
5.3.2 A ANATOMIA DAS EXCEÇÕES C # 98
5.3.3 EXEMPLO #1: O BLOCO BÁSICO “TRY CATCH FINALLY” 99
5.3.4 EXEMPLO #2 : FINALLY 101
5.3.5 EXCEÇÕES COMUNS DO .NET 102
CONCLUSÃO 103
6 CRIANDO UM CLIENTE PARA WEB SERVICES 105
6.1 WEB SERVICES – DEFINIÇÃO 105
6.1.1 SOA – SERVICE ORIENTED ARCHITECTURE 105
6.1.2 SERVIÇOS 106
6.1.3 API 106
6.1.4 JSON 107
6.2 NOSSO CLIENTE 107
6.2.1 PLANEJANDO O CONSUMO DO WEB SERVICE 108
6.2.2 QUAL A API VAMOS UTILIZAR 108
6.2.3 DESENVOLVENDO O CLIENTE 109
6.2.4 O RELACIONAMENTO ENTRE AS CLASSES 111
6.2.5 PASSO 1 – DECLARANDO AS NOSSAS CLASSES 111
6.2.6 FUNÇÃO PARA LER OS DADOS PRINCIPAIS DA API 113
6.2.7 BAIXANDO O JSON 114
6.2.8 DESSERIALIZANDO O JSON 115
6.2.9 O MÉTODO LÊ DETALHE 116
6.3 O CÓDIGO FONTE 116
CONCLUSÃO 122
GLOSSÁRIO 123
REFERÊNCIAS BIBLIOGRÁFICAS 124
5UNIDADE
6UNIDADE
11
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
ICONOGRAFIA
ATENÇÃO 
PARA SABER
SAIBA MAIS
ONDE PESQUISAR
DICAS
LEITURA COMPLEMENTAR
GLOSSÁRIO
ATIVIDADES DE
APRENDIZAGEM
CURIOSIDADES
QUESTÕES
ÁUDIOSMÍDIAS
INTEGRADAS
ANOTAÇÕES
EXEMPLOS
CITAÇÕES
DOWNLOADS
12
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
OBJETIVO 
Ao final desta 
unidade, 
esperamos 
que possa:
> Apontar os conceitos 
básicos de orientação a 
objetos.
> Aplicar seus 
conhecimentos e 
modele seus próprios 
objetos.
UNIDADE 1
13
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
1 CONCEITOS DE 
ORIENTAÇÃO A OBJETOS
Nesta unidade, aprenderemos o histórico da Programação Orientada a Objetos, os 
motivos de sua criação e seus conceitos básicos.
1.1 HISTÓRICO DA PO
Tudo começou na década de 60. Os sistemas estavam cada vez mais complexos e os 
códigos-fonte estavam gigantescos. Dar manutenção ou implementar alguma nova 
função nesse sistema tornou-se um trabalho árduo e, na maioria das vezes, apare-
ciam erros na aplicação que eram inesperados.
Houve então a necessidade de criar uma metodologia de implementação que fosse 
capaz de abstrair e modularizar estas estruturas de código.
A PO permite a modularização através do conceito de classes (iremos abordar adian-
te) e permite a reutilização de código através de herança (também iremos abordar 
mais tarde).
Sempre que for desenvolver alguma coisa em PO, se o seu códi-
go está grande demais, você está fazendo errado. Sempre pense 
o que motivou a criação da PO.
Na década de 60, foi introduzido o conceito de classe numa linguagem de progra-
mação chamada Simula 67, criada na Noruega, por Kristen Nygaard e Ole-Johan Dal. 
Essa linguagem era uma extensão do Algol 60.
No entanto, a primeira linguagem a utilizar os conceitos da PO foi a SmallTalk, na déca-
da de 70, puramente orientada a objetos. Tudo nela é objeto. Não existem tipos primiti-
vos. String, números e caracteres são classes em Smalltalk. Possui um código extrema-
14
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
mente fácil de ler e, por isso, pode ser considerada uma boa linguagem para iniciantes.
Java, C#, Python, PHP, Object Pascal são exemplos de linguagens orientadas a obje-
tos, no entanto, C++ e PERL, por exemplo, apesar de possuírem o conceito de classes, 
se utilizarmos um conceito mais rigoroso, não são consideradas linguagens orienta-
das a objetos.
1.2 CONCEITOS 
A PO tenta copiar no máximo possível os conceitos do mundo real. 
Pense bem, o mundo é composto por objetos que possuem características (variáveis) 
e podem ou não ser proativos ou responsivos (funções).
Por exemplo, vamos analisar um gato:
FIGURA 1 - GATO PRETO
Fonte: Shutterstock, 2018
15
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
QUADRO 1 - VARIÁVEIS VS MÉTODOS
CARACTERÍSTICAS OU VARIÁVEIS AÇÕES OU FUNÇÕES
Cor
Raça
Temperamento
Mia
Caça
Arranha
Fonte: Elaborado pelo autor.
Uma aplicação desenvolvida em PO é composta por um ou mais objetos e ações. 
Uma ação se inicia ao enviar uma mensagem a um objeto, e o objeto trata esta men-
sagem causando algum resultado. A mensagem possui tudo o que é necessário para 
que o objeto atue conforme o recebido. Isso quer dizer que a mensagem possui pa-
râmetros. 
No caso do gato acima: 
Na mensagem Gato caça Rato -> Gato é o objeto, Caça é a ação e Rato é o parâmetro 
desta mensagem.
Isso é possível somente se a mensagem se comunicar com o objeto correto, utilizan-
do a ação correta (função) e o parâmetro correto.
Por exemplo:
Gato Late Alto -> Gato é o objeto, Late é a ação (função) e Alto é o parâmetro.
Esta mensagem causaria um erro em seu código, pois nosso objeto (o gato) não pos-
sui a função “Late”.
1.2.1 VARIÁVEIS
A variável possui um tipo de dados (caractere, decimal, inteiro) que define qual tipo 
de informação será armazenado nela.
16
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
1.2.2 MÉTODOS
Métodos são as funções de uma classe. As funções processam informações e fazem o 
tratamentode dados de acordo com a necessidade da classe.
É um bloco de código que contém instruções e, ao final do processamento dessas 
instruções, podem ou não retornar valores ao objeto que o invocou.
1.2.3 CLASSES
Uma classe é o tipo de dados que define um objeto.
É muito fácil de entender, olhe só:
Uma variável pode ser do tipo inteiro (representa números inteiros), decimal, pode ser 
string (um conjunto de caracteres), etc.
Do mesmo jeito, um objeto pode ser de um tipo determinado.
Imaginemos uma classe que represente um automóvel. Ela tem variáveis e funções:
Public class automovel {
 // Abaixo as variáveis
 string modelo; // String porque o modelo pode ser “Gol”,”Uno”,”Opala”
 string fabricante; // “Fiat”, “Ferrari”, “Audi”, “Honda”
 int ano; // pode ser representados por números inteiros: 1999, 2015, 2018
 double valor// pode ser representado por números decimais: 2000, 55000.80
 // Abaixo as funções ou métodos.
 // A função abaixo é para controlar a velocidade do carro.
 public acelerar (double velocidadeDesejada) {
 } 
17
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 // Esta é para freiar.
 public frear() {
 }
}
(Este exemplo foi feito em C#, linguagem que iremos abordar mais adiante.)
Então, concluímos que, qualquer objeto da classe automóvel, possui as variáveis: mo-
delo, fabricante, ano e as funções acelerar (cujo parâmetro é a velocidade desejada) e 
a função frear, que não possui nenhum parâmetro.
Utilizamos aqui a notação CamelCase. Com esta notação, é mais 
fácil entender o código. Inicia-se a palavra com maiúscula ou 
minúscula e cada palavra que compõe o nome do objeto é ini-
ciada em letras maiúsculas. Por exemplo: CarroDoAno, Casa-
DaFazenda, jogadorDeFutebol, pilotoDeAviao, etc.
1.2.4 OBJETO
Os objetos são as principais estruturas de uma aplicação. 
Um objeto pode ou não pertencer a uma classe (lembre-se que o normal é que per-
tença) e ter todas as características dessa classe.
Possui as mesmas variáveis e métodos de uma classe e pode possuir variáveis e mé-
todos que não estão na classe.
Por exemplo, eu tenho um objeto chamado meuCarro.
Enquanto não defini-lo, ele não tem método ou atributo algum. Porém, se falarmos 
que ele é um objeto da classe automovel, ele terá as variáveis da classe e os mesmos 
métodos.
18
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
Exemplo:
automovel meuCarro = new automovel;
Estamos dizendo que o objeto meuCarro é agora da classe automovel.
Imagine uma classe que represente o seguinte automóvel: 
Defina o objeto, seus variáveis e seus métodos. Discuta com seus colegas. Encontre 
erros e alternativas para melhorar a definição.
1.2.5 HERANÇA
A herança acontece quando criamos uma classe que herda (deriva) a estrutura de 
outra classe.
Por exemplo: vamos supor que exista uma classe de meios de transporte:
public class meioDeTransporte {
 string combustivel; // pode ser “gasolina”,”diesel”,”álcool”, “energia elétrica”
 double capacidade; // 500, 1000, 2000 (em quilogramas)
 int numPassageiros; 5, 40 (num ônibus), 120 (avião)
}
19
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
No entanto queremos criar uma outra classe que defina aviões, que também é um 
meio de transporte que possui todas as características da classe meioDeTransporte e 
mais algumas que são peculiares: 
public class avioes: meioDeTrasporte // 
Desse forma, dizemos que a classe avioes herda as características da classe meioDe-
Transporte
{
 int numeroDeTripulantes; // pode ser 1,5,10,12
 int numeroDeTurbinas ;
}
Isso significa que a classe avioes possui as variáveis combustível, capacidade e num-
Passageiros da classe meioDeTransporte, além das variáveis numeroDeTripulantes e 
numDeTurbinas.
Podemos dizer que a classe meioDeTransporte é a classe pai de avioes ou superclasse 
e que avioes é subclasse de meioDeTransporte.
1.2.6 ENCAPSULAMENTO
Encapsulamento é o meio pelo qual a PO implementa a abstração de dados, isto é, 
esconder os detalhes da implementação classe. 
Por que usamos o encapsulamento?
Porque na PO um objeto não deve permitir que outros objetos 
acessem seus dados diretamente. Isso evita que ocorram erros 
de implementação.
20
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
Para fazer o encapsulamento, declaramos o atributo que desejamos encapsular como 
privado da classe (private).
Pensemos numa conta bancária de maneira simplificada:
public class contaBancaria {
 private double saldo; // o saldo que queremos manter privado
 public void retira (double valor) { this.saldo -= valor; } // funcao para sacar
 public void deposita (double valor) { this.saldo += valor; } // funcao para retirar
}
Imagine se o saldo fosse público. Seria muito fácil adulterar o seu valor através de 
outra classe. No entanto, como declaramos o saldo como private (privado) somente 
as funções dentro da classe podem alterar seu valor. No encapsulamento, nós mos-
tramos o que deve ser feito, não como deve ser feito.
1.2.7 POLIMORFISMO
Como o próprio nome diz, é a capacidade de um objeto ter várias formas. Na prática, 
trata-se de uma subclasse (classe que herdou características de outra classe) que te-
nha métodos com o mesmo nome dos métodos da superclasse que se comportem 
de maneira diferente, de acordo com a classe que o implementa.
Suponhamos que existam duas classes diferentes: uma de pessoa física, outra de pes-
soa jurídica. Essas duas classes são derivadas da classe pessoa. No entanto, cada uma 
valida o número do documento de maneira diferente, pois pessoa física utiliza CPF e 
pessoa jurídica utiliza CNPJ.
21
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
FIGURA 2 - DIAGRAMA POLIMÓRFICO DA CLASSE PESSOA
Fonte: Elaborado pelo autor
public class pessoa {
 public string name;
 public string numDocumento;
 public virtual void validar() {
 // um código genérico qualquer
 }
}
class pessoaFisica {
 public override void validar (string CPF) {
 // código para validar CPF
 }
}
22
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
class pessoaJuridica {
 public override void validar (string CPF) {
 // código para validar CPF
 }
}
Como você pôde observar, nós sobrescrevemos (override) o método validar tanto na 
classe pessoaFisica quanto na classe pessoaJuridica, isto é, realizamos um polimorfis-
mo com a classe pessoa.
1.2.8 CONSTRUTORES
Toda vez que instanciamos uma classe, é invocado um construtor. Pense num cons-
trutor como um método de inicialização. Uma classe pode possuir um ou mais cons-
trutores, mas, se não for declarado um construtor, o compilador gera um construtor 
padrão baseado na tabela de valor padrão:
QUADRO 2 - TIPOS DE VARIÁVEIS
TIPO VALOR PADRÃO
bool False
byte 0
char ‘\0’
decimal 0M
double 0,0D
enum O valor produzido pela expressão (E)0, em que E é o identificador de enumeração.
float 0,0F
Int 0
long 0L
sbyte 0
short 0
struct
O valor produzido pela configuração de todos os campos tipo-valor para seus valores 
padrão e todos os campos tipo-referência para null.
uint 0
ulong 0
ushort 0
23
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
Em termos de sintaxe, um construtor possui o mesmo nome da classe a qual ele 
pertence:
publicclass pessoa {
 private string primeiroNome;
 private string segundoNome;
 public pessoa (string nome, string sobrenome) {
 primeiroNome = nome;
 segundoNome = sobrenome
 }
 // restante do código de implementação da classe
}
Um construtor não retorna valor algum!
Quando criamos mais de um construtor para uma classe, estamos realizando uma 
sobrecarga de construtores.
1.2.9 DESTRUTORES OU FINALIZADORES
Destrutores são utilizados para destruir instâncias de classes.
Não podem ser herdados ou sobrecarregados (ter mais de um numa classe).
Eles não podem ser invocados. São invocados automaticamente. Quando um objeto 
não está sendo mais usado, o coletor de lixo (garbage Collector – que gerencia a alo-
cação e liberação de memória do aplicativo) invoca o destrutor e recupera a memória 
que estava sendo utilizada para armazenar o objeto.
Não podem ter parâmetros.
Pense num destrutor como um construtor executado ao destruirmos uma classe.
24
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
class exemplo {
 ~exemplo () {
 System.Diagnostics.Trace.WriteLine(“Destrutor da classe exemplo invo-
cado”)
 }
}
Possuem o mesmo nome da classe com um “~” (til) no início.
CONCLUSÃO
A programação orientada a objetos tenta reproduzir o mundo real através de variá-
veis e métodos que definem o comportamento de uma classe.
Quase qualquer coisa (não me arrisco a dizer tudo) pode ser tratada como uma clas-
se. Pense no seu dia a dia! Imagine coisas do seu cotidiano que possam ser tratadas 
como classe.
Faça a leitura deste material e, se for necessário, leia novamente os conceitos apre-
sentados, pois eles são fundamentais para a construção do seu conhecimento.
Em caso de dúvidas, veja a bibliografia recomendada ou faça uma pesquisa orienta-
da na internet de acordo com o que foi apresentado neste material.
25
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
OBJETIVO 
Ao final desta 
unidade, 
esperamos 
que possa:
> Manipular classes.
> Manipular Variáveis e 
métodos.
> Usar Herança.
> Usar Polimorfismo.
> Usar Encapsulamento.
> Aplicar a estrutura de 
um programa em C#.
> Identificar Interfaces.
UNIDADE 2
26
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
2 INTRODUÇÃO À 
PROGRAMAÇÃO EM C#
Caro aluno, 
nesta unidade, você dará os primeiros passos para aprender a desenvolver aplicativos 
em C#. Estaremos seguindo dos padrões da Microsoft (desenvolvedora da lingua-
gem) para implementar todos os conceitos básicos de Programação Orientada a Ob-
jetos, bem como outros mais avançados, próprios de C#.
Então, iniciemos nossa jornada!
2.1 INTRODUÇÃO AO C# E AO.NET FRAMEWORK
A linguagem C# é uma linguagem muito poderosa, mas também simples e fácil de 
aprender. Se você já conhece C, C++ ou Java, vai aprender mais rápido ainda. 
Por ser uma linguagem orientada a objetos, C# permite a fácil implementação de 
conceitos de Herança, Encapsulamento e Polimorfismo. Todas as variáveis e métodos, 
inclusive o método Main(), que é o método principal do aplicativo, são encapsulados 
na definição de classe.
Quem já conhece C e C++, vai notar que compilação de C# é bem parecido e mais 
fácil que o de Java.
27
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
2.1.1 OLA MUNDO – COMPILANDO SEU PRIMEIRO 
PROGRAMA
Para criar um aplicativo de console, siga os seguintes passos:
FIGURA 3 - UTILIZANDO O VISUAL STUDIO
Fonte: Elaborado pelo autor
Apague todo o código de Program.cs e substitua pelo seguinte código: 
using System;
namespace OlaMundo{
 class Ola{
 static void Main(){
 Console.WriteLine(“Ola Mundo”);
 Console.WriteLine(“Pressione qualquer tecla para sair”);
 Console.ReadKey();
 }
 }
}
28
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
Pronto! Agora, pressione F5 para executar seu código. Veja que aparece a janela do 
console com a mensagem “Ola Mundo”.
2.1.1.1 O MÉTODO PRINCIPAL: O MÉTODO MAIN()
Uma aplicação em C# possui o método Main. É nele que tudo começa e termina. É 
nele que você executa e cria outros métodos.
O método Main é um método estático (pode ser chamado mesmo quando a classe 
não foi instanciada).
2.1.1.2 ENTRADA E SAÍDA
Como você pôde ver no código acima, utilizamos a classe Console que possui o méto-
do WriteLine, que é de saída da classe Console, e possui como parâmetro uma string. 
Quando executado, envia a string para a Console.
Para receber uma tecla qualquer do teclado, utilizamos o método ReadKey da classe 
console. Ele espera que o usuário pressione qualquer tecla.
2.2 A ESTRUTURA DE UM CÓDIGO EM C#
Os aplicativos em C# podem conter vários arquivos, e cada arquivo pode conter zero 
ou mais namespaces, e um namespace pode conter classes, estrutura, interfaces, nu-
merações e delegados:
29
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
// O esqueleto de um programa em C# 
using System; 
namespace SeuNamespace;
{ 
class SuaClasse {
}
 struct SuaEstrutura {
 }
 interface SuaInterface {
 }
 delegate int SeuDelegado();
 enum SeuEnum {
 }
 namespace SeuNamespaceDentroDaClasse {
 struct SuaEstrutura {
 }
 }
 class SuaClassePrincipal {
 static void Main(string[] args) {
 // Seu programa inicia aqui
 }
 }
}
30
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
2.2.1 IMPLEMENTANDO OS CONCEITOS
A partir de agora, é muito importante que você tenha os conceitos de Programação 
Orientada a objetos em sua cabeça. 
2.2.1.1 TIPOS DE REFERÊNCIA
Como bem sabemos, classe é como se fosse um tipo de dados. No caso, classe é um 
tipo de referência. Isso significa que, quando você declara uma variável com um tipo 
de referência, ela fica com valor null até que você a instancie com o operador new ou 
atribua a ela um objeto criado em outro lugar.
MinhaClasse mc = new MinhaClasse(); 
MinhaClasse mc2 = mc;
2.2.1.2 DECLARANDO CLASSES
Para se declarar uma classe, utiliza-se a palavra class e, precendendo a palavra class, 
declara-se o nível de acesso.
public class Cliente { 
 // Código da classe 
}
Neste caso, declaramos uma classe com nível de acesso público. Isso significa que 
qualquer um pode criar novas instâncias. No corpo da classe, declaramos as variáveis 
e métodos.
31
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
2.2.1.3 ACESSANDO VARIÁVEIS E MÉTODOS DENTRO 
DE UM OBJETO 
Para acessar as variáveis e métodos de um objeto, utilizamos a seguinte sintaxe: 
<nome do objeto>.<nome da variável > ou <nome do objeto>.<nome do método>
Suponha que estamos trabalhando com a seguinte classe:
public class Cliente {
 string nome; 
 string sobrenome;
 public void EscreveNaConsole() {
 Console.WriteLine(“Ola “ + nome + “ “ + sobrenome);
 Console.WriteLine(“Pressione qualquer tecla para sair”);
 Console.ReadKey();
 }
}
Em primeiro lugar, precisamos instanciar a classe porque ela, por si só, é um tipo:
static void Main(){
 Cliente objetoCliente = new Cliente();
}
Depois acessamos seu conteúdo: 
static void Main() {
 Cliente objetoCliente = new Cliente();
 // Acessando as variáveis
 objetoCliente.nome = “Fulano”;
32
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABADA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 objetoCliente.sobrenome = “de tal”;
 // Acessando o método
 objetoCliente.EscreveNaConsole(); 
} 
O código completo fica assim: 
using System;
namespace exemploCliente
{
 class exemplo {
 public class Cliente {
 public string nome;
 public string sobrenome;
 public void EscreveNaConsole(){
 Console.WriteLine(“Ola “ + nome + ‘ ‘ + sobrenome);
 Console.WriteLine(“Pressione qualquer tecla para sair”);
 Console.ReadKey();
 }
 }
 static void Main() {
 Cliente objetoCliente = new Cliente();
 // Acessando as variáveis
 objetoCliente.nome = “Fulano”;
 objetoCliente.sobrenome = “de tal”;
 // Acessando o método
 objetoCliente.EscreveNaConsole();
 }
 }
}
33
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 Sempre que tiver dúvidas sobre como estruturar o código utili-
zando classes, métodos e variáveis consulte o item
A estrutura de um código em C#.
Teste o código acima em seu computador.
2.2.1.4 CRIANDO OBJETOS
Embora se pareçam muito, uma classe e um objeto não são a mesma coisa. Uma 
classe é um tipo, e o objeto é algo que possui o tipo. Um objeto muitas vezes é uma 
instância de uma classe.
Criamos objetos também pela utilização do operador new.
Cliente objeto1 = new Cliente();
No exemplo acima, instanciamos a classe Cliente no objeto objeto1, isto é, o objeto1 
passa a ser uma representação concreta da classe Cliente, com seus métodos e va-
riáveis.
2.2.1.5 HERANÇA DE CLASSES
Para que se possa criar uma classe, que é subclasse de uma superclasse, usamos a 
seguinte sintaxe: <Nível de Acesso> class <nome da classe>: <nome da superclasse>.
No exemplo abaixo:
34
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
public class meioDeTransporte {
 public string combustivel; // pode ser “gasolina”,”diesel” 
 public double capacidade; // 500, 1000, 2000 (em kg)
 public int numPassageiros; // 40 (num ônibus), 120 (avião)
}
public class avioes:meioDeTransporte {
 public int numeroDeTripulantes; // pode ser 1,5,10
 public int numeroDeTurbinas;
 public void EscreveNaConsole() {
 Console.WriteLine(“O aviao usa o combustivel “ + combustivel + “ e “ + 
numeroDeTurbinas.ToString() + “ turbinas “);
 }
}
A classe avioes herda da classe meioDeTransporte as variáveis combustível, capacida-
de e numPassageiros, e ainda acrescenta mais 2: numeroDeTripulantes e numeroDe-
Turbinas. Além disso, implementa o método EscreveNaConsole.
O código completo fica assim: 
using System;
namespace exemploHeranca {
 class MainClass {
 public class meioDeTransporte {
 public string combustivel; // pode ser “gasolina”,”diesel”,”álcool”
 public double capacidade; // 500, 1000, 2000 (em quilogramas)
 public int numPassageiros; // 40 (num ônibus), 120 (avião)
 }
35
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 // Aqui avioes herda de meioDeTransporte
 public class avioes:meioDeTransporte {
 public int numeroDeTripulantes; // pode ser 1,5,10,12
 public int numeroDeTurbinas;
 public void EscreveNaConsole() {
 Console.WriteLine(“O aviao usa o combustivel “ + combus-
tivel + “ e “ + numeroDeTurbinas.ToString() + “ turbinas “);
 }
 }
 public static void Main() {
 // Instanciamos a classe avioes
 avioes objetoAvioes = new avioes();
 // Atribuimos valores as variáveis 
 objetoAvioes.combustivel = “gasolina”;
 objetoAvioes.capacidade = 500;
 objetoAvioes.numPassageiros = 130;
 objetoAvioes.numeroDeTripulantes = 5;
 objetoAvioes.numeroDeTurbinas = 4;
 objetoAvioes.EscreveNaConsole();
 }
 }
} 
Reparou que não foi preciso reescrever o código de meioDeTransporte dentro da 
classe avioes e que o objeto objetoAvioes acessou as variáveis herdadas da superclas-
se meioDeTransporte?
Este é um bom exemplo de reutilização de código, um dos motivadores da criação 
36
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
de programação orientada a objetos.
Escreva o código acima e teste. Preste atenção no código e altere a função Escreve-
NaConsole para escrever algum outra variável do objeto objetoAvioes.
2.2.1.6 POLIMORFISMO
A maneira correta de se fazer Polimorfismo em C# é fazer uma classe herdar de uma 
superclasse e sobrescrever o método que se deseja com o operador override.
Vamos usar o mesmo exemplo do item anterior:
public class meioDeTransporte {
 public string combustivel; // pode ser “gasolina”,”diesel” 
 public double capacidade; // 500, 1000, 2000 (em quilogramas)
 public int numPassageiros; // 40 (num ônibus), 120 (avião)
 ublic virtual void EscreveNaConsole() {
 Console.WriteLine(“O aviao usa o combustivel “ + combustivel);
 }
}
Repare que declaramos a função EscreveNaConsole dentro da classe meioDeTrans-
porte, entretanto ela somente escreve o combustível que o avião usa. 
Só alteramos uma coisa: colocamos o operador virtual na declaração do método. Esse 
operador indica que o método pode sofrer um override de uma subclasse.
Como fazer então para que obtenhamos o mesmo resultado do exemplo anterior, 
isto é, o combustível e o número de turbinas escritos na console?
É simples, utilizamos o Polimorfismo:
37
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
public class avioes:meioDeTransporte {
 public int numeroDeTripulantes; // pode ser 1,5,10,12
 public int numeroDeTurbinas;
 public override void EscreveNaConsole(){
 Console.WriteLine(“O aviao usa o combustivel “ + combustivel + “ e “ + 
numeroDeTurbinas.ToString() + “ turbinas “);
 }
}
Repare que na classe avioes reescrevemos o método EscreveNaConsole com o ope-
rador override na declaração do método. Isso faz com que a classe EscreveNaConsole 
herdada de meioDeTransporte seja reescrita dentro da classe avioes.
Experimente implementar este Polimorfismo no exemplo anterior.
Edite o código conforme apresentado aqui.
2.2.1.7 ENCAPSULAMENTO 
Para encapsular métodos e variáveis em uma classe, basta declará-los como private 
ao invés de public.
Lembra-se do exemplo da conta bancária da unidade 1?
Em C#, ele ficaria assim: 
public class contaBancaria {
 private double saldo; //o saldo que queremos manter privado
 public void retira(double valor) // funcao para sacar
 { this.saldo -= valor; } 
 public void deposita(double valor)
 { this.saldo += valor; } // funcao para depositar 
}
38
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
Veja o que aconteceu: protegemos a variável saldo da conta bancária de ser acessado 
por outros objetos. O escopo dele é somente dentro da classe contaBancaria e, no 
entanto, temos dois métodos públicos para alterar o saldo. Isso significa que o saldo 
final não pode ser alterado diretamente por outros objetos, e sim pelos métodos cor-
retos que criamos para alterá-lo.
CONCLUSÃO
Vimos aqui como implementar os principais conceitos de orientação a objetos em 
C#. Percebeu que, quando você se acostuma a pensar nesse paradigma, as coisas 
ficam mais fáceis?
Agora, sabemos como é a estrutura de programa C#. Podemos declarar variáveis e 
métodos, implementar herança, encapsulamento e polimorfismo em nosso código.
Foi demonstrado nos exemplos acima como evitar reutilização de código e como 
proteger variáveis dentro de uma classe.
Pense em outras situações para cada umdos exemplos acima.
39
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
OBJETIVO 
Ao final desta 
unidade, 
esperamos 
que possa:
> Criar métodos com 
diferentes tipos de 
modificadores.
> Criar métodos que 
aceitem parâmetros 
por valor e referência.
> Aplicar estruturas 
corretamente.
> Aplicar enumeradores 
corretamente.
UNIDADE 3
40
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
3 PROGRAMAÇÃO EM C# - 
NÍVEL BÁSICO
Nesta unidade, aprenderemos conceitos básicos de C#. Este conteúdo é uma pre-
paração para que você aprenda a desenvolver, por meio de modificadores de acesso, 
suas próprias classes, variáveis e membros. Você aprenderá como passar parâmetros 
por valor e referência. Outro conhecimento que será construído se refere a estruturas 
e enumeradores.
Seja bem-vindo!
3.1 MODIFICADORES DE ACESSO EM C#
A sintaxe de declaração de uma função é: <escopo><tipo><nome do metodo>(<parâ-
metros>).
Vamos ampliar o conceito de “escopo”. “Escopo” foi utilizado como recurso didático 
para implementar um método como público ou privado, que era o nosso de conhe-
cimento. Agora, expandiremos “escopo” para “modificadores de acesso”, pois aquele 
lugar na declaração do método pode fazer muito mais que somente dizer se um 
método é público ou privado. O mesmo funciona para classes.
Os modificadores de acesso são operadores que especificam a acessibilidade decla-
rada de um membro ou tipo. A seguir, uma lista dos modificadores mais utilizados: 
• public: não existe restrição de acesso.
• protected: o acesso é limitado à classe que os contêm ou aos tipos derivados 
da classe que os contêm.
• internal: o acesso é limitado ao assembly atual.
• protected internal: o acesso é limitado ao assembly atual ou aos tipos deriva-
dos da classe que os contêm.
• private: o acesso é limitado ao tipo recipiente.
41
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
• private protected: o acesso é limitado à classe que o contém ou a tipos deriva-
dos da classe que o contém no assembly atual.
• abstract: define que uma classe destina-se somente a ser uma classe base 
para outras classes (muito parecido com interface).
• const: indica que o valor do campo ou variável não pode ser alterado.
• sealed: indica uma classe que não pode ser herdada. 
• static: declara um membro estático que pertença ao próprio tipo, em vez de 
um objeto específico.
• virtual: declara um método que pode ser alterado por classes filhas.
3.1.1 PUBLIC
Não há nenhuma restrição para acesso. É o modificador mais permissivo de todos. É 
um modificador de acesso para tipo e membros de tipo.
 public class classePublica {
 public int x; //sem restricao de acesso
 } 
3.1.2 PRIVATE
É um modificador de acesso de membro. É o nível de acesso menos permissivo. Em 
classes ou structs, somente internamente os membros podem ser acessados.
 class empregado {
 private double salario;
 } 
No exemplo acima, a variável salario pode ser acessada apenas pelos métodos da 
classe empregado.
Em algumas classes, é necessário proteger algumas variáveis e métodos de acessos 
externos. Utilizamos o operador private para implementar essa proteção.
42
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
3.1.3 INTERNAL
Utilizado normalmente em desenvolvimento baseado em componentes, ele permite 
que um grupo de componentes colabore de maneira particular, sem serem expostos 
para o restante do código do aplicativo. 
// Assembly1.cs 
// Compile with: /target:library 
internal class ClasseBase
{
 public static int intM = 0;
} 
Quando a classe sofrer a tentativa de ser instanciada num assembly diferente, ocor-
rerá um erro: 
// Assembly1_a.cs 
// Compile with: /reference:Assembly1.dll 
class TesteDeAcesso
{
 static void Main()
 {
 ClasseBase minhaBase = new ClasseBase(); // CS0122 
 }
} 
43
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.1.4 PROTECTED
protected define que um membro só pode ser acessível por uma classe derivada.
 public class classeDerivada : classeMae
 {
 static void Main() {
 classeMae acesso1 = new classeMae(); // Instaciamos a ClasseMae
 classeDerivada acesso2 = new classeDerivada(); // Instanciamos a classeDe-
rivada
 acesso1.protegido = 3; // Erro, pois acesso1 é classeMae instanciada 
 // e nao derivada de classeMae
 acesso2.protegido = 5; // OK, acesso2 é instancia de classeDerivada
 // que é derivada de classeMae
 }
 }
Mas o que é um assembly?
Um assembly é um arquivo compilado, ou seja, 
um executável ou uma dll.
44
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
3.1.5 ABSTRACT
O modificador abstract define que o item que está sendo declarado tem implemen-
tação ausente ou incompleta. Pode ser usado com classes, métodos, propriedades, 
indexadores e eventos. Em uma declaração de classe, indica que essa classe é somen-
te uma base para outras classes.
 abstract class pessoa {
 abstract public double calculaSalario(); 
 }
 class folhaDePagamento : pessoa {
 public double salario = 0;
 public override double calculaSalario()
 {
 salario = 1000;
 return salario;
 }
 } 
Repare que o método calculaSalario teve de ser implementado na classe folhaDepa-
gamento. Caso isso não fosse feito, seria gerado um erro.
3.1.6 CONST
O modificador const identifica uma variável ou campo constante. Isso significa que 
não pode ser alterado em momento algum no código. Pode ser utilizado para intei-
ros, decimais, caracteres e boolianos.
const int x = 0; 
45
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.1.7 SEALED
Quando uma classe é declarada com o modificador sealed, ela não pode ser herdada 
por nenhuma outra classe. Quando um método é declarado com sealed, não pode 
sofrer override em lugar nenhum. 
 class empregado {
 public double salario = 0; //acesso restrito
 }
 sealed class empregadoVIP : empregado {
 public double bonus = 1000;
 } 
Nenhuma outra classe poderá herdar de empregadoVIP.
3.1.8 STATIC
Declara um membro estático que pertença ao próprio tipo, em vez de um objeto 
específico.
Uma classe estática não pode ser instanciada, ou seja, você não pode utilizar o opera-
dor new() para associá-la a um objeto.
Como uma classe estática não pode ser instanciada, um membro estático não pode 
ser acessado pela instância, mas pode ser acessado com o caminho completo do 
nome do tipo: 
 public class minhaBase {
 public struct minhaEstrutura {
 public static int minhaVariavel = 0;
46
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 }
 } 
Para acessar o membro minhaVariavel, temos de utilizar o caminho completo: 
Console.WriteLine(minhaBase.minhaEstrutura.minhaVariavel); 
3.1.9 VIRTUAL 
Paraimplementar polimorfismo, é necessário que na superclasse sejam indicados os 
métodos que podem sofrer alterações na classe filha por meio do operador override. 
Para isso, utilizamos o modificador de acesso virtual.
 public class testaOver {
 public virtual double calculaArea (double x, double y) {
 return x * y;
 }
 } 
 public class alteraMetodo : testaOver {
 public override double calculaArea(double x, double y)
 {
 return (x * y)/2;
 }
 } 
Note que na classe mãe, o método que pode sofrer alterações deve ser declarado 
como virtual, e na classe filha deve ser declarado com o modificador override e ter 
exatamente a mesma assinatura. 
47
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.2 PASSANDO PARÂMETROS EM C#
Parâmetros são meios de se passar valores para um método.
A sintaxe correta é: 
<modificador> <Tipo de Dado> <Nome do parâmetro>
São quatro as formas de se passar parâmetros em C#:
• value.
• out.
• ref.
• params.
3.2.1 VALUE
value é a maneira com a qual estamos acostumados. Quando um parâmetro não 
tem um modificador, ele é tratado como value por default. Isso significa que se alte-
rarmos o valor do parâmetro na função, a alteração somente ocorre dentro da função 
e não volta para o código que chamou a função.
 public double calculaArea(double x, double y)
 {
 return (x * y)/2;
 }
 } 
3.2.2 OUT
O modificador out passa um parâmetro por referência. Isso significa que caso o pa-
râmetro seja alterado dentro da função, a variável que representa o parâmetro no 
código que chamou a função também será alterada.
48
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 static void Main() {
 void exemploOut(out double valor)
 {
 valor = 100;
 }
 double valorOriginal = 9;
 exemploOut(out valorOriginal);
 Console.WriteLine(valorOriginal);
 } 
O valor impresso na console será 100.
Perceba que o modificador out deve preceder o parâmetro que está sendo passado 
no código chamador do método.
3.2.3 REF
Parâmetros ref são de entrada e saída. Isso significa que eles podem ser usados tanto 
para passar um valor para uma função quanto para receber de volta esse valor. Um 
parâmetro ref precisa ser inicializado antes de ser passado para o método, enquanto 
parâmetros out não precisam ser inicializados.
 static void testeRef (ref int valor) {
 valor = valor + 100; 
 }
 static void Main() {
 int valorOriginal = 10;
49
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 testeRef(ref valorOriginal);
 Console.WriteLine(valorOriginal);
 } 
O valor impresso na console será 110.
Perceba que o modificador ref deve preceder o parâmetro a ser passado pelo código 
chamador da função.
No fundo, um parâmetro por referência é um apelido 
para uma variável já existente em outro contexto.
3.2.4 PARAMS
params é extremamente útil quando o número de argumentos a ser passado para 
o módulo é variável. O argumento precisa ser uma matriz unidimensional ou uma 
matriz de matrizes (jagged array).
Você pode enviar uma lista separada por vírgulas dos argumentos do tipo especifica-
do na declaração de parâmetros ou uma matriz de argumentos do tipo especificado. 
É possível também não enviar nenhum argumento. Se você não enviar nenhum ar-
gumento, o comprimento da lista params será zero.
Nenhum parâmetro adicional é permitido após a palavra-chave params em uma de-
claração de método. Apenas uma palavra-chave params é permitida em uma decla-
ração de método.
 public static void exemploParams(params int[] lista){
 for (int i = 0; i < lista.Length; i++) {
 Console.Write(lista[i] + “ “);
50
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 }
 Console.WriteLine();
 }
 public static void exemploParams2(params object[] lista)
 {
 for (int i = 0; i < lista.Length; i++)
 {
 Console.Write(lista[i] + “ “);
 }
 Console.WriteLine();
 } 
 static void Main() {
 
 // Você pode enviar uma lista com itens separados
 // por vírgula.
 exemploParams(1, 2, 3, 4);
 exemploParams2(1, ‘a’, “teste”);
 // Aceita zero argumentos. A chamada a seguir escreve
 // apenas uma linha
 exemploParams2();
 // Uma matriz pode ser passada desde que seja
 // do tipo declarado na assinatura do método
 int[] minhaMatrizInt = { 5, 6, 7, 8, 9 };
51
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 exemploParams(minhaMatrizInt);
 object[] minhaMatrizObj = { 2, ‘b’, “test”, “again” };
 exemploParams2(minhaMatrizObj);
 // A chamada seguinte causaria um erro 
 // porque object não pode ser convertido para int
 // exemploParams(minhaMatrizObj);
 // A chamada seguinte não causa erro,
 // mas matriz de inteiros torna-se o primeiro
 // item da matriz object
 exemploParams2(minhaMatrizInt);
 } 
Saída na console: 
FIGURA 4 - SAÍDA NA CONSOLE - PARAMS
Fonte: Elaborado pelo autor, 2018.
52
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
3.3 COLEÇÕES
Em muitos aplicativos, você terá a necessidade de agrupar variáveis ou objetos rela-
cionados. Você pode lidar com isso de duas formas diferentes: usando matrizes ou 
coleções. 
int[] inteiros = new int[] { 1, 2, 3, 4 }; string[] comTamanho 
= new string[6]; //matriz de 6 itens string 
As matrizes são utilizadas para trabalhar com objetos fortemente tipados, enquanto 
as coleções são mais flexíveis. O tamanho de uma coleção pode crescer e diminuir 
dinamicamente e você também pode criar uma chave para que o acesso ao objeto 
da coleção seja mais rápido.
Os exemplos a seguir usam a classe genérica List<T> (System.Collections.Generic), que 
habilita você a trabalhar com uma lista de objetos fortemente tipados.
3.3.1 MANUSEANDO COLEÇÕES
O exemplo a seguir cria uma lista de nomes e, em seguida, lista os nomes na console 
por meio da instrução foreach().
 static void Main() {
 var nomes = new List<string>();
 nomes.Add(“Daniel”);
 nomes.Add(“Cacilda”);
53
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 nomes.Add(“Bertoldo”);
 nomes.Add(“Alberto”);
 foreach (var nome in nomes) {
 Console.Write(nome);
 Console.WriteLine();
 }
 } 
Saída na console: 
FIGURA 5 - SAÍDA NA CONSOLE - COLEÇÕES
Fonte: Elaborado pelo autor, 2018.
Você também pode declarar uma coleção já inicializada, caso o conteúdo seja conhe-
cido com antecedência:
var nomes2 = new List<string> { “Frederico”, “Nicolau”, “Fiodor” }; 
Para acessar os elementos da coleção, você também pode utilizar for em vez defo-
reach() : 
var nomes2 = new List<string> { “Frederico”, “Nicolau”, “Fiodor” };
54
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 for (var indice = 0; indice < nomes2.Count; indice ++){
 Console.Write(nomes2[indice]);
 Console.WriteLine();
 } 
Saída na console: 
FIGURA 6 - SAÍDA NA CONSOLE – MANUSEANDO COLEÇÕES
Fonte: Elaborado pelo autor, 2018.
Você também pode remover um item de uma coleção: 
var nomes2 = new List<string> { “Frederico”, “Nicolau”, “Fiodor” };
 nomes2.Remove(“Nicolau”); 
 for (var indice = 0; indice < nomes2.Count; indice ++){
 Console.Write(nomes2[indice]);
 Console.WriteLine();
 } 
Saída na console: 
55
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
FIGURA 7 - SAÍDA NA CONSOLE – MANUSEANDO COLEÇÕES 2
Fonte: Elaborado pelo autor, 2018.
Removendo um elemento da coleção pelo índice:
var nomes2 = new List<string> { “Frederico”, “Nicolau”, “Fiodor” };
 for (var indice = 0; indice < nomes2.Count; indice ++){
 if (indice == 2) {
 nomes2.RemoveAt(indice);
 }
 }
 for (var indice = 0; indice < nomes2.Count; indice++)
 {
 Console.Write(nomes2[indice]);
 Console.WriteLine();
 } 
Você também pode ter uma coleção de classes: 
 public class galaxia
 {
 public string nome { get; set; }
56
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 public double anosLuz { get; set; }
 } 
 static void Main()
 {
 var galaxias = new List<galaxia>
 {
 new galaxia() {nome=”andromeda”,anosLuz=1000000},
 new galaxia() {nome=”do Triangulo”,anosLuz=1233857},
 new galaxia() {nome=”guardioes da”,anosLuz=934893948}
 };
 foreach(galaxia item in galaxias) {
 Console.WriteLine (item.nome + “ distancia:” + item.anosLuz);
 }
 } 
Saída na console:
FIGURA 8 - SAÍDA NA CONSOLE – MANUSEANDO COLEÇÕES 3
Fonte: Elaborado pelo autor, 2018.
57
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.3.1.1 GET; E SET;
get e set são chamados de propriedades automáticas.
Uma propriedade (property) é um membro de uma classe que fornece um mecanis-
mo flexível para ler, gravar ou calcular o valor de um dado em particular.
As propriedades permitem que uma classe exponha de uma maneira pública a ob-
tenção e definição desses valores.
Na declaração:
 public class galaxia2
 {
 public string nome { get; set; }
 } 
São essencialmente um atalho para: 
 public class galaxia2
 {
 private string _nome;
 public string nome
 {
 get
 {
 return this._nome;
 }
58
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
 set
 {
 this.nome = “Daniel”;
 }
 }
 } 
3.4 ESTRUTURAS (STRUCTS)
Estruturas são estruturas de dados que podem possuir variáveis e funções (como as 
classes), mas, ao contrário das classes, elas não precisam de alocação de heap. Uma 
struct armazena diretamente seus dados, enquanto uma classe armazena uma re-
ferência a um objeto alocado dinamicamente. Structs não implementam herança.
Structs são úteis para estruturas de dados pequenas que têm semântica de valor, 
como coordenadas ou pares chave-valor em um dicionário, por exemplo.
struct coordenadas {
 public double longitude, latidude;
 public void Ponto (double longitudeParam, double latitudeParam){
 this.latidude = longitudeParam;
 this.longitude = longitudeParam;
 }
 } 
59
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
3.5 ENUMERADORES (ENUMS)
Um enumerador é uma matriz de constantes.
Por padrão, o primeiro enumerador tem o valor 0. O valor de cada enumerador se-
guinte é incrementado em 1.
Vantagens: 
• Você especifica claramente quais são os valores aceitáveis para uma variável.
• O editor do Visual Studio lista automaticamente os valores definidos.
enum diaSemana { Domingo, Segunda, Terca, Quarta, Quinta, Sexta, Sabado };
 static void Main()
 {
 int x = (int)diaSemana.Domingo;
 int y = (int)diaSemana.Sexta;
 Console.WriteLine(“Domingo = {0}”, x);
 Console.WriteLine(“Sexta = {0}”, y);
 } 
Saída na console:
FIGURA 9 - SAÍDA NA CONSOLE – ENUMERADORES
Fonte: Elaborado pelo autor, 2018.
60
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
CONCLUSÃO
Nesta unidade, aprendemos a usar novas estruturas do C#, como enumeradores, co-
leções e structs, bem como esclarecemos o uso dos principais modificadores de aces-
so do C#.
Vimos como passar parâmetros e até mesmo como passar parâmetros para um mé-
todo que tem um número indefinido de parâmetros.
De agora em diante, podemos aprofundar nossos estudos e começar a pensar em 
desenvolver um aplicativo funcional.
61
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
OBJETIVO 
Ao final desta 
unidade, 
esperamos 
que possa:
> Usar todos os conceitos 
de manipulação de 
strings;
> Identificar quais são as 
palavras reservadas do 
C#.
UNIDADE 4
62
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
4 PROGRAMAÇÃO C# - NÍVEL 
INTERMEDIÁRIO
Nesta unidade estudaremos a manipulação de strings. Manipulação de strings é ex-
tremamente útil para a confecção de webservices. Webservices são serviços de troca 
de mensagens na internet e estas mensagens são transmitidas como texto, mesmo 
que o layout seja um XML, por exemplo.
Além disso, aprenderemos quais são as palavras reservadas que não podemos usar 
em nosso código fonte.
4.1 STRINGS 
Strings são cadeias de caracteres cujo texto é armazenado como uma coleção se-
quencial somente de objetos char.
Em C# a palavra string é um alias para String, então você pode escolher qualquer 
uma das 2 que preferir. A classe String fornece os métodos necessários para manipu-
lação, inicialização e comparação de strings.
4.1.1 DECLARAÇÃO E INICIALIZAÇÃO DE STRINGS
// Declarar sem inicializar. 
string mensagem1;
// Iniciar em null. 
string mensagem2 = null;
// Inicializar com um string vazia. 
// Use a constante Empty ao invés de “”. 
string mensagem3 = System.String.Empty;
63
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
// Inicializar com uma string literal 
string oldPath = “c:\\Program Files\\Microsoft Visual Studio 8.0”;
// Use System.string se preferir. 
System.String greeting = “Ola mundo!”;
// Em variáveis locais ( dentro do corpo de um método) 
// você pode utilizar o tipo implícito 
var temp= “Eu ainda sou uma string fortemente tipada!”;
// Use uma string constante para evitar que mensagem4 
// seja utilizada para armazenar outra string 
const string mensagem4 = “Você não pode se livrar de mim!”;
// Use o construtor string somente quando 
// a string for um char*, char[], ou sbyte*. Veja 
// a documentação de System.String. 
char[] letras = { ‘A’, ‘B’, ‘C’ }; 
string alfabeto = new string(letras); 
Observe que utilizamos o operador new somente para inicializar uma string a partir 
de uma matriz de caracteres.
4.1.2 IMUTABILIDADE DE STRINGS
Strings são imutáveis, isto é, não podem ser alterados depois de criados.
Todos os métodos de System.string e operadores que são utilizados para modificar 
uma string na verdade criam um novo objeto e o objeto original é liberado para a 
coleta de lixo.
No exemplo abaixo ao concatenar nome e sobrenome, é criada uma nova de cadeia 
de caracteres “nome”, e a original é liberada para a coleta de lixo.
string nome = “joao”; 
string sobrenome = “ da silva”; 
nome += sobrenome; 
64
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
4.1.3 LITERAIS DE CADEIA DE CARACTERES 
REGULARES E TEXTUAIS
Use literais de cadeia de caracteres regulares quando você precisar inserir caracteres 
de escape fornecidos por C#, conforme mostrado no seguinte exemplo:
string colunas = “coluna 1\tcoluna 2\ctoluna 3”; 
//Saída: coluna 1 coluna 2 coluna 3 
string linhas = “linha 1\rlinha 2\rlinha 3”; 
/* Saída: 
 linha 1 
 linha 2 
 linha 3 
*/ 
4.1.4 SEQUÊNCIAS DE ESCAPE DE CADEIA DE 
CARACTERES
Sequência 
de escape
Nome do caractere Codificação Unicode
\' Aspas simples 0x0027
\" Aspas duplas 0x0022
\\ Barra invertida 0x005C
\0 Nulo 0x0000
\a Alerta 0x0007
\b Backspace 0x0008
\f Avanço de página 0x000C
\n Nova linha 0x000A
\r Retorno de carro 0x000D
\t Tabulação horizontal 0x0009
\U Sequência de escape Unicode para pares substitutos. \Unnnnnnnn
\u Sequência de escape Unicode \u0041 = "A"
\v Tabulação vertical 0x000B
\x
Sequência de escape Unicode semelhante a "\u", exceto 
pelo comprimento variável.
\x0041 = "A"
65
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
4.1.5 CADEIA DE CARACTERES DE FORMATO
Uma cadeia de caracteres de formato é aquela cujo conteúdo pode ser alterado em 
tempo de execução. Você utiliza o método estático format e chaves com espaços re-
servados em tempo de execução :
string s;
s = System.String.Format(“{0} palavra {1} palavra {2} palavra”,”primeira”,”segunda”,”ter-
ceira”);
Console.WriteLine(s);
Console.ReadKey(); 
Saída:
4.1.6 SUBCADEIAS DE CARACTERES
Uma subcadeia de caracteres é uma cadeia de caracteres que está dentro de outra 
cadeia de caracteres, ou seja, uma string dentro de uma string.
4.1.7 SUBSTRING
Utilize substring para extrair uma subcadeia de caracteres de uma cadeia de strings.
public string Substring(int IndiceInicial); 
Parâmetro : IndiceInicial, que é o ponto no qual a substring se inicia dentro da string.
Retorna : uma substring que se inicia em IndiceInicial e vai até o final da string.
66
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
O índice de uma string sempre se inicia com o valor zero. Assim, 
uma string de 10 caracteres possui o índice variando de zero a 
nove.
public string Substring(int IndiceInicial, int tamanho); 
Parâmetros : IndiceInicial, que é o ponto no qual a substring se inicia dentro da string.
 tamanho: o número de caracteres da substring.
String frase = “Esta e uma string”; 
int IndiceInicial = 5; 
String substring1 = frase.Substring(IndiceInicial); 
Console.WriteLine(substring1); 
int tamanho = 4; 
String substring2 = frase.Substring(IndiceInicial, tamanho); 
Console.WriteLine(substring2); 
Saída:
4.1.8 INDEXOF
IndexOf é utilizado para comparação de strings. Retorna a posição de uma substring 
dentro da string que se quer comparar.
public int IndexOf(string value, int startIndex, int count); 
Parâmetros : valor, que é a string que se deseja procurar, 
 IndiceInicial : posição inicial da string para a busca, 
67
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
tamanho : o número de caracteres que se deseja examinar.
O exemplo abaixo procura a string “maior” dentro da string frase, a partir da posição 
0 (zero – início da string) até o final (tamanho = tamanho da string – 1)
 String frase = “Esta e uma string maior ainda para teste”;
 int tamanho = frase.Length - 1;
 int IndiceInicial = 0;
 string valor = “maior”;
 int posicao = frase.IndexOf(valor, IndiceInicial,tamanho);
 Console.WriteLine(posicao); 
Uma versão mais simples para se obter o mesmo resultado :
public int IndexOf(string value) 
Parâmetros : valor, que é a string que se deseja procurar.
 String frase = “Esta e uma string maior ainda para teste”;
 string valor = “maior”;
 int posicao = frase.IndexOf(valor);
 Console.WriteLine(posicao); 
Sempre consulte a documentação da Microsoft para saber as 
diversas formas de declaração de métodos.
68
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
4.1.9 CONCATENAÇÃO DE STRINGS
Você pode utilizar + ou += para concatenar strings.
string usuario = “Maria da Silva”;
string dataString = DateTime.Today.ToShortDateString();
// utilize + ou += para concatenações
string str = “Ola “ + usuario + “. hoje é “ + dataString + “.”;
System.Console.WriteLine(str); 
Saída: 
4.1.10 STRINGBUILDER()
Existem casos que você pode combinar cadeias de caracteres em um loop em que 
você não sabe quantas cadeias de caracteres de origem você está combinando, sen-
do que o número real de cadeias de caracteres de origem pode ser grande demais. 
A classe StringBuilder foi projetada para esses cenários. O exemplo abaixo utiliza o 
método Append para adicionar concatenar strings :
var sb = new System.Text.StringBuilder();
 for (int i = 0; i < 13; i++)
 {
 sb.Append(i.ToString()); }
 System.Console.WriteLine(sb.ToString()); 
69
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
Saída:
Você pode usar String.Concat para unir uma cadeia de caracteres e String.Join para 
unir cadeia de caracteres separadas por um delimitador : 
string[] palavras = { “A”, “rapida”, “raposa”, “marrom”, “pula”, “sobre”, “o”, “cachorro”, “pre-
guicoso.” };
var fraseIlegivel = string.Concat(palavras);
System.Console.WriteLine(fraseIlegivel);
var fraseLegivel = string.Join(“ “, palavras);
System.Console.WriteLine(fraseLegivel); 
Saída : 
4.1.11 SPLIT
O método Split é super divide uma cadeia de caractereis baseado em um ou dois 
delimitadores. Muito usado para tratar mensagens de webservices (veremos mais 
adiante no nível avançado).
70
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
var fraseLegivel = “A rapida raposa marrom pula sobre o cachorro preguicoso.”;
string[] palavras = fraseLegivel.Split(‘ ‘);
foreach (var palavra in palavras)
 {
 System.Console.WriteLine($”{palavra}”);
 } 
Saída : 
4.1.12 PESQUISA EM CADEIA DE CARACTERES
O tipo string, da classe String, implementa uma série de métodos úteis para pesquisa 
em cadeia de caracteres.Os métodos String.Contains, StringStartsWith e EndsWith 
são métodos avançados de pesquisa em cadeis de caracteres.
var fraseLegivel = “A rapida raposa marrom pula sobre o cachorro preguicoso.”; 
// Escreve string e inclui aspas.
Console.WriteLine($”\”{fraseLegivel}\””);
71
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
// Comparação simples case sensitive
bool resultado = fraseLegivel.Contains(“marrom”);
Console.WriteLine($”Contem \”marrom\”? {resultado}”);
// Para entrada de dados e string que serão exibidas para o usuario
// utilize StringComparison
bool ignoraCase = fraseLegivel.StartsWith(“marrom”, System.StringComparison.Cur-
rentCultureIgnoreCase);
 Console.WriteLine($”Inicia com \”marrom\”? {ignoraCase} (ignorando case)”);
bool terminaCom = fraseLegivel.EndsWith(“.”, System.StringComparison.CurrentCul-
tureIgnoreCase);
Console.WriteLine($”Termina com ‘.’? {terminaCom}”); 
Saída:
4.1.13 VERIFICANDO PADRÕES COM EXPRESSÕES 
REGULARES
Existem certas situações nas quais você precisa verificar se uma cadeia de caracteres 
é escrita num determinado padrão. Isto pode ocorrer para verificar formato de telefo-
nes, CPF e CNPJ, por exemplo.
Para isto usamos expressões regulares.
72
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
O exemplo a seguir verifica na matriz de códigos se cada código obedece ao padrão 
“###-###-####” :
string[] codigos =
{
 “123-555-0190”,
 “444-234-22450”,
 “690-555-0178”,
 “146-893-232”,
 “146-555-0122”,
 “4007-555-0111”,
 “407-555-0111”,
 “407-2-5555”,
 “407-555-8974”,
 “407-2ab-5555”,
 “690-555-8148”,
 “146-893-232-”
};
string sPadrao = “^\\d{3}-\\d{3}-\\d{4}$”; // \d verifica se é digito decimal
foreach (string s in codigos)
{
 Console.Write($”{s,14}”);
73
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 if (System.Text.RegularExpressions.Regex.IsMatch(s, sPadrao))
 {
 Console.WriteLine(“ - valido”);
 }
 else
 {
 Console.WriteLine(“ - invalido”);
 }
 }
}
} 
Saída:
74
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
4.1.14 VERIFICANDO SE UMA CADEIA DE CARACTERES 
REPRESENTA UM NÚMERO
Para verificar se uma cadeia de caracteres representa um número, você deve utilizar 
o método estático TryParse :
 string numString = “1287543”;
 long numero1 = 0;
 bool podeConverter = long.TryParse(numString, out numero1);
 if (podeConverter == true)
 Console.WriteLine(“numero1 = {0}”, numero1);
 else
 Console.WriteLine(“numString nao e um longo valido”);
 byte numero2 = 0;
 string numString = “255”;
 podeConverter = byte.TryParse(numString, out numero2);
 if (podeConverter == true)
 Console.WriteLine(“numero2 = {0}”, numero2);
 else
 Console.WriteLine(“numString nao e um byte valido”);
75
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
 decimal numero3 = 0;
 numString = “27.3”;
 podeConverter = decimal.TryParse(numString, out numero3);
 if (podeConverter == true)
 Console.WriteLine(“numero3 = {0}”, numero3);
 else
 Console.WriteLine(“number3 nao e um decimal valido”); 
Saída :
4.2 PALAVRAS RESERVADAS
Palavras reservadas são aquelas que já são reservadas para a linguagem e possuem 
um significado específico para o compilador. Elas não podem ser usadas no seu pro-
grama a não ser que você utilize @ como prefixo. Por exemplo, se você utilizar if como 
o nome de uma variável , vai dar erro. Mas se você utilizar @if não tem problema.
A tabela a seguir mostra as palavras reservadas para qualquer programa C# :
abstract as base bool
break byte case catch
char checked class const
continue decimal default delegate
do double else enum
event explicit extern false
76
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
finally fixed float for
foreach goto if implicit
in int interface internal
is lock long namespace
new null object operator
out override params private
protected public readonly ref
return sbyte sealed short
sizeof stackalloc static string
struct switch this throw
true try typeof uint
ulong unchecked unsafe ushort
using using static virtual void
volatile while
4.2.1 PALAVRAS-CHAVE CONTEXTUAIS
Palavras-chave contextuais são utilizadas para se obter um significado específico no 
código, porém, não são palavras reservadas do C#.
add alias ascending
async await descending
dynamic from get
global group into
join let nameof
orderby parcial (tipo) partial (método)
remove select set
value var when (condição de filtro)
where (restrição de tipo genérico) where (cláusula de consulta) yield
77
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
CONCLUSÃO
Aprendemos nesta unidade as principais técnicas de manipulação de string. Estas 
que foram apresentadas são suficientes para pensarmos no desenvolvimento de nos-
so webservice.
Aprendemos também as palavras reservadas que não podemos utilizar em nosso 
código fonte.
78
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
OBJETIVO 
Ao final desta 
unidade, 
esperamos 
que possa:
> Escolher delegates 
para usar no 
desenvolvimento de 
seus aplicativos;
> Usar o tratamento 
de exceções em seu 
código para aumentar 
a qualidade do 
aplicativo produzido
UNIDADE 5
79
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017
PROGRAMAÇÃO ORIENTADA A OBJETOS I
SUMÁRIO
5 PROGRAMAÇÃO C# - NÍVEL 
AVANÇADO
Nesta unidade abordaremos 2 dos assuntos mais complexos do C# : delegates e tra-
tamento de exceções.
Delegates servem para funções que recebem funções como parâmetros. É um recur-
so excelente para reaproveitamento de código e para flexibilizar seus métodos.
Tratamento de exceções serve para controlar o fluxo de erros do seu aplicativo.
5.1 DELEGADOS ( DELEGATES)
Se você pesquisar na literatura disponível, vai encontrar a definição de delegates 
como um ponteiro fortemente tipado para uma função. 
A declaração de um delegate é :
<modificador de acesso> delegate <tipo que ele vai retornar> <nome do delegate> ( 
<parâmetros >);
O método que vai ser delegado tem que ter a mesma declaração no que se refere a 
o que ele vai retornar e parâmetros : 
<modificador de acesso> <retorno igual de delegate> <nome do método> (<parâme-
tros iguais ao do delegate>)
Exemplo Básico : 
Suponhamos que o seguinte método é o método que var ser delegado :
 public static void meuMetodo() {
 Console.WriteLine(“Escrevendo mensagem”); 
 } 
80
PROGRAMAÇÃO ORIENTADA A OBJETOS I
FACULDADE CAPIXABA DA SERRA/EAD
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017SUMÁRIO
É um método simples, que somente escreve uma frase na console.
Para delegar este método, temos que ter um delegate com a declaração conforme 
descrita acima : 
public delegate void meuDelegate() ; 
Note que o tipo do delegate é o mesmo tipo

Continue navegando