Logo Passei Direto
Buscar

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Programação Orientada a Objetos 
Prof. Luiz Antonio Ferraro Mathias 
GUIA DA 
DISCIPLINA 
 
 
 
1 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Objetivo: 
A disciplina de Programação Orientada a Objetos (POO) tem como objetivo: 
esclarecer os conceitos da linguagem de programação C#, utilizar as técnicas de 
programação modular/estruturada, resolver problemas computacionais com uma visão 
sistêmica, desenvolvendo programas de computador, além de propor o aprendizado 
baseado em técnicas de programação orientada a objetos. 
 
Introdução: 
A programação é o processo de escrita, teste e manutenção de um programa de 
computador. O programa é escrito em uma linguagem de programação, embora seja 
possível, com alguma dificuldade, escrevê-lo diretamente em linguagem de máquina. 
Diferentes partes de um programa podem ser escritas em diferentes linguagens e 
programação. 
 
Um programa de computador, por outro lado, se traduz em um conjunto de instruções 
que descrevem uma tarefa a ser realizada por um computador. O termo pode ser uma 
referência ao código fonte, escrito em alguma linguagem de programação, ou ao arquivo 
que contém a forma executável deste código fonte. 
 
As diversas linguagens de programação funcionam de diferentes modos, por esse 
motivo, os programadores podem criar programas muito diferentes para diferentes 
linguagens; muito embora, teoricamente, a maioria das linguagens possa ser usada para 
criar qualquer programa. 
 
A Programação Orientada a Objetos (POO) é um modelo de análise, projeto 
e programação de software baseado na composição e interação entre diversas unidades 
chamadas de “objetos”. Os programas são arquitetados através de objetos que interagem 
entre si. 
 
 
 
2 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
1. FUNDAMENTOS DA COMPUTAÇÃO E PROGRAMAÇÃO 
 
1.1. O computador 
 
Do ponto de vista do usuário, ou seja, daquele que apenas faz uso do computador, ele 
é apenas uma máquina, isto é, um dispositivo eletrônico construído pelo homem, com o 
objetivo de auxiliá-lo na execução de suas tarefas. É uma máquina (hardware) que pode 
ser programada (software), apresentando as seguintes habilidades: 
 
a) Armazenar informações; 
b) Organizar essas informações; 
c) Manipular informações gerando novas; 
d) Comparar informações e em função dessa comparação, decidir; 
e) Efetuar cálculos matemáticos. 
 
Este conjunto de atividades que pode ser executada pelo computador recebe o nome 
de processamento de informações ou processamento de dados. Existem 3 (três) tipos 
básicos de informações que podem ser trabalhadas pelo computador entre as quais existe 
uma grande diferença: 
 
I. Informações numéricas: podem sofrer cálculo matemático. Exemplos: idade de 
uma pessoa, tamanho da base de uma figura geométrica e salário de um 
funcionário 
 
II. Informações alfanuméricas: não podem sofrer cálculo matemático. Exemplos: 
nome de uma pessoa, bairro de uma cidade, descrição de um produto, endereço 
de e-mail e telefone 
 
III. Informações lógicas: podem assumir apenas dois estados ou valores. 
Exemplos: verdadeiro ou falso, ligado ou desligado, true ou false, on ou off, 0 ou 
1, V ou F. 
 
 
 
 
3 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
Existem ainda outros tipos de dados que envolvem datas e moedas, tratadas por 
poucas linguagens de programação. Mas como regra geral os três tipos acima são comuns 
a praticamente todas as linguagens de programação existentes. 
 
Uma discussão um pouco mais detalhada sobre os tipos básicos de dados existentes 
e, utilizados pelo computador, será realizada oportunamente ao longo deste material 
 
 
 
Apesar da aparente “inteligência” dos computadores, estes precisam de 
instruções detalhadas para executarem a mais simples tarefa. Estas instruções 
estão inseridas no computador em várias camadas, sendo as de mais baixo 
nível responsáveis pelas operações mais básicas e as de alto nível as que 
executam os trabalhos mais sofisticados. 
 
 
 
1.2. A programação do computador 
 
O computador é uma máquina programável, ou seja, adaptável às necessidades do 
homem. A técnica para realização desta adaptação chama-se programação. Esta 
programação do computador, por sua vez, consiste em se colocar na memória da máquina, 
palavras ou símbolos gráficos que serão compilados e entendidos como ordens e, portanto, 
executados, desde que seja possível a execução. Existem diferentes conjuntos de palavras 
que podem ser entendidas e executadas pelo computador. Cada um desses conjuntos é 
chamado de Linguagem de Programação. Existem diferentes linguagens de programação 
disponíveis para utilização, cada uma das quais conhecida por um nome específico. Desta 
forma temos o C#, C++, Visual Basic, ASP, Java, PHP, Python etc. 
 
 
 
 
 
 
4 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Cada uma destas linguagens possui características próprias, utilizadas para 
aplicações específicas. Temos ainda nestas linguagens palavras diferentes para execução 
de uma mesma função, e cada uma destas palavras utilizada na programação do 
computador terá por objetivo executar uma tarefa específica conforme exemplificado 
abaixo. 
 
As palavras (instruções/comandos) têm por função a execução tarefas similares, 
como por exemplo, receber uma informação via teclado. Ao iniciar seu trabalho, o 
desenvolvedor (programador) define a linguagem pela qual deseja executar suas 
atividades. Isto é feito introduzindo-se um conjunto de programas (instruções) que fazem o 
computador passar a “entender” os comandos específicos da linguagem que será utilizada. 
O arquivo contendo as instruções preparadas pelo programador é conhecido por arquivo 
fonte ou código fonte. 
 
As linguagens de programação podem ser: 
 
a) Alto nível: linguagem de programação mais próxima sintaticamente da linguagem 
do ser humano. Tem como característica principal, a facilidade de entendimento e 
a comodidade na programação. 
b) Baixo nível: próxima da linguagem de máquina, por isso, mais difícil de ser 
interpretada por nós e, também, de ser programada. 
 
1.3. Compilação 
 
Uma vez projetado a solução lógica (fluxogramas) e escrito o programa em um papel, 
deve-se começar o processo de introduzir o programa em um arquivo no disco rígido do 
computador. A introdução e a modificação do programa em um arquivo são feitas utilizando-
se um editor de texto, que é um programa que contém as características necessárias para 
a digitação e gravação dos seus aplicativos e, também, permite a correção e manutenção, 
quando necessário. A aprendizagem de como utilizar um editor de textos torna muito mais 
fácil a tarefa de introduzir o programa. No caso específico do editor de programas para o 
Visual C#, você verá que existem inúmeros recursos que facilitarão a nossa vida de 
digitador. Estes programas escritos em Visual C# estão codificados em linguagem de alto 
nível, projetadas para facilitar a programação. 
 
 
5 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Um computador não entende as linguagens de alto nível, portanto, um programa 
escrito em linguagem de alto nível precisa ser traduzido para linguagem de máquina. A 
tradução de um programa escrito em linguagem de alto nível, como C#, para uma 
linguagem que o computador possa entender faz-se através de outro programa, conhecido 
como compilador. 
 
O compilador faz a função de um tradutor em nosso dia a dia, ou seja, ele lê os códigos 
em linguagem de alto nível e traduz para linguagem de máquina. Comodamente, se algum 
erro existir em nosso código fonte, o compilador nos avisará e evidentemente abortará a 
tradução, até que tenhamos codificado o programa com a sintaxe correta.Vale a pena 
salientar que o compilador é um programa e que também só entende uma linguagem para 
tradução, ou seja, para cada linguagem existe um compilador próprio. 
 
É chamado de código objeto o programa gerado a partir do processo de compilação, 
ou seja, este código não está legível para nós e sim para a máquina. Este é o programa 
que será executado pelo computador. As relações em tempo de compilação e de execução 
dos códigos C# estão detalhadas na figura 1 abaixo. 
 
Figura 1: Relações em tempo de compilação e de execução dos códigos C#. 
 
1CLI (Common Language Infrastructure) da Microsoft. Um padrão internacional que é 
a base para a criação de ambientes de execução e de desenvolvimento nos quais 
linguagens e bibliotecas funcionam de forma integrada. 
 
 
 
6 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Com base nos esclarecimentos prestados acima, podemos considerar, no 
desenvolvimento e processamento de programas de computador, 3 (três) tipos distintos de 
códigos, a saber: 
 
a) Código fonte – programa gerado pelo desenvolvedor (programador) – codificado 
em uma linguagem de programação de alto nível. 
b) Código objeto – programa gerado a partir do processo de programação, não 
legível para nós e sim para a máquina. 
c) Código executável – programas executáveis gerados a partir do código objeto 
 
1.4. O Visual Studio .NET 
 
O Visual Studio é um IDE – Integrated Development Environment (Ambiente de 
Desenvolvimento Integrado) que permite ao desenvolvedor utilizar uma ou várias das 
linguagens disponíveis para criar seus programas. A Microsoft disponibiliza 3 (três) versões 
do IDE do Visual Studio: Community; Professional; e Enterprise. Estas diferentes versões 
possuem recursos específicos que podem ser importantes dependendo do profissional ou 
da empresa que a irá utilizá-las. Detalhes e componentes destas diferentes versões podem 
ser encontrados no site da Microsoft no endereço https://visualstudio.microsoft.com/pt-
br/downloads/. 
 
1.4.1. O que é o .NET Framework 
 
O .NET Framework é um conjunto de programas rotinas e componentes, que são 
integrados ao sistema operacional com o objetivo de permitir o desenvolvimento e a 
execução de programas criados a partir da plataforma .NET ou outra plataforma que deseje 
utilizar os componentes .NET Framework. 
 
O .NET Framework permite a criação de aplicativos para serem utilizados em 
“Ambiente Windows”, diretamente na Web, em Dispositivos móveis e em aplicativos do 
pacote Office. Possui dois componentes principais: Common Language Runtime (CLR) e 
Biblioteca de Classes. 
 
https://visualstudio.microsoft.com/pt-br/downloads/
https://visualstudio.microsoft.com/pt-br/downloads/
 
 
7 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
1.4.1.1. O Common Language Runtime CLR 
 
É a base do .NET, fornece os principais serviços de gerenciamento de memória de 
arquitetura de comunicação de segurança, de compilação e outros. Em especial é 
importante destacar o serviço de gerenciamento de memória utiliza o GC – Garbage 
Collection (coletor de lixo), um componente que de tempos em tempos varre a memória do 
computador identificando e limpando dados que não são mais utilizados. 
 
A constante limpeza da memória, evita que o programador tenha que constantemente 
utilizar comandos para limpar a memória do sistema ou que, em caso de não existirem 
estes comandos, o usuário tenha que constantemente reiniciar o computador. Reiniciar o 
computador além de ser uma operação bastante desagradável é muito custoso em 
dispositivos portáteis (que na verdade nunca são desligados e sim hibernados) e em 
servidores de rede. 
 
1.4.1.2. A Biblioteca de Classes 
 
É uma coleção de objetos (programas), reutilizáveis e compartilháveis que podem ser 
utilizados pelo programador para facilitar o desenvolvimento de seus aplicativos. 
 
1.4.2. O que é o C# 
 
O C# é uma das linguagens integrantes do Visual Studio. É uma linguagem voltada a 
objetos que tem suas raízes na linguagem C. 
 
 
 
 
 
 
 
 
 
 
 
8 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
1.4.3. Máquina Virtual 
 
Em uma linguagem de programação como C e Pascal, temos a seguinte situação 
quando vamos compilar um programa: O código fonte é compilado para código de máquina 
específico de uma plataforma e sistema operacional. Muitas vezes o próprio código fonte é 
desenvolvido visando uma única plataforma. 
 
Esse código executável (binário) resultante será executado pelo sistema operacional 
e, por esse motivo, ele deve saber conversar com o sistema operacional em questão. Isto 
é, temos um código executável diferente para cada sistema operacional diferente. 
Precisamos reescrever um mesmo pedaço da aplicação para diferentes sistemas 
operacionais, já que eles não são compatíveis. 
 
O C# utiliza o conceito de máquina virtual. Entre o sistema operacional e a aplicação 
existe uma camada extra responsável por "traduzir" — mas não apenas isso — o que sua 
aplicação deseja fazer para as respectivas chamadas do sistema operacional onde ela está 
rodando no momento. 
 
Uma máquina virtual é um conceito bem mais amplo que o de um interpretador. Como 
o próprio nome diz, uma máquina virtual é como um "computador de mentira": tem tudo que 
um computador tem. Em outras palavras, ela é responsável por gerenciar memória, threads, 
a pilha de execução etc. 
 
1.4.4. Como um programa C# é executado 
 
A arquitetura .NET apresentada no Microsoft Visual Studio, utiliza os mesmos 
conceitos da tecnologia JAVA que converte os programas por intermédio do JIT (Just In 
Time Compiler). Um programa desenvolvido em C# é convertido para uma linguagem 
Assembly, através de um compilador chamado MSIL (Microsoft Intermediate Language), 
que é capaz de gerar arquivos dos tipos: 
 
 
 
 
 
 
9 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
a) EXE – Arquivos Executáveis, (Programas que podem ser executados diretamente 
nos computadores) 
b) DLL – Biblioteca de link Dinâmico que são funções que podem ser utilizadas por 
diversos programas. 
c) ASPX – Páginas Webs (Programas que podem ser executados diretamente na 
World Wide Web – Páginas Web, Aplicações Web e Serviços Web). 
d) ASMX – Rotinas que podem ser instaladas em Servidores Web . 
e) Programas para serem utilizados em Windows Phone. 
 
No momento da execução do programa ele é novamente compilado, desta vez pelo 
compilador JIT de acordo com o dispositivo e o ambiente em que ele será executado. 
 
1.4.5. Visual Studio C# 
 
O Visual Studio é a plataforma da Microsoft destinada a desenvolvedores que 
trabalham com a linguagem de programação C# e com o framework. Ele conta com uma 
IDE (Integrated Development Environment) que permite o desenvolvimento de programas 
em diversas linguagens (figura 2) e interfaces (aplicações console, windows, web etc.). 
 
Nesse curso escreveremos todo o código utilizando o Visual Studio Comunity, a 
versão gratuita da ferramenta de desenvolvimento de aplicações, que é distribuída pela 
própria Microsoft. Apesar das explicações serem feitas com base na versão Comunity, tudo 
funcionará da mesma forma dentro das versões pagas da ferramenta. O Visual Studio 
Comunity pode ser encontrado no site: https://visualstudio.microsoft.com/pt-br/downloads/. 
 
Dúvidas a respeito da instalação podem ser esclarecidas no site: 
https://docs.microsoft.com/pt-br/visualstudio/install/install-visual-studio?view=vs-2022 
 
A versão que utilizaremos neste material é a Visual Studio Comunity 2017, todavia, as 
mesmas aplicações podem ser executadas em versões mais recente como a 2022. Durante 
a instalação do Visual Studio, o .NET Framework também será, automaticamente, instalado 
na máquina, então ela estará pronta paraexecutar as aplicações escritas em C#. 
 
https://visualstudio.microsoft.com/pt-br/downloads/
https://docs.microsoft.com/pt-br/visualstudio/install/install-visual-studio?view=vs-2022
 
 
10 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 2: Ambiente de desenvolvimento integrado do Visual Studio C#. 
 
Um exemplo de programa codificado na linguagem C# (console application) é exposto 
na figura 3 abaixo. 
 
 
Figura 3: Exemplo de aplicação tipo “console” em linguagem C#. 
 
 
 
 
 
 
 
11 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Quando queremos um programa que trabalha com o terminal do sistema operacional, 
precisamos criar um tipo diferente de projeto no Visual Studio, o Console Application. Para 
criarmos a aplicação que usa o terminal, devemos escolher o Console Application na janela 
do assistente do Visual Studio. 
 
Quando criamos uma aplicação deste tipo, o Visual Studio cria um projeto com uma 
classe que contém um método (este assunto será tratado oportunamente no material) 
chamado “Main”. É esse método que será executado quando pressionarmos a tecla “F5” 
para rodar o programa. Os exemplos de código C# deste material são aplicações do tipo 
Console Application. 
 
1.5. Inicializando o C# no IDE do Visual Studio 
 
Antes da inicialização do Visual Studio é importante verificar se este foi instalado 
corretamente no computador. Conforme exposto anteriormente, nesse curso escreveremos 
todo o código utilizando o Visual Studio Comunity, a versão gratuita da ferramenta de 
desenvolvimento de aplicações, que é distribuída pela própria Microsoft. O Visual Studio 
Comunity pode ser encontrado no site: https://visualstudio.microsoft.com/pt-br/downloads/. 
 
1.5.1. Utilizando o Visual Studio 
 
Para iniciar o Visual Studio, basta, no Menu Iniciar procurar o item “Visual Studio 
2017” ou versão posterior, que será inicialmente fornecida a Tela de Splash abaixo (figura 
4): 
 
Figura 4: Tela de inicialização do Visual Studio. 
 
https://visualstudio.microsoft.com/pt-br/downloads/
 
 
12 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Após a tela de Splash, surgirá a Página Inicial (figura 5) do Visual Studio, com diversas 
opções, dentre elas a que permite que sejam abertos programas já criados anteriormente. 
 
 
Figura 5: Página inicial do Visual Studio. 
 
Caso se deseje criar um programa, tratado pelo Visual Studio como Projeto, basta 
clicar em “Arquivo” e no Menu suspenso que surgir escolher “Novo” e no Novo Menu 
suspenso escolher “Projeto” (figura 6). 
 
 
Figura 6: Tela de criação de um novo programa. 
 
 
13 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Na tela Novo Projeto, basta escolher o Visual C#, em suas opções escolher “Área de 
trabalho clássica do Windows e na relação de aplicativos escolher “Arquivo de Console 
(.NET Framework)”, conforme figura 7. 
 
 
Figura 7: Seleção do tipo de “aplicativo de console”. 
 
Observação: Aplicativos de Console (Console Application) são utilizados para criar 
aplicativos de linha de comando, utilizando o Prompt do Windows, não tendo, portanto, 
uma interface visual. A vantagem deste tipo de programação é ser leve e não desviar a 
atenção do programador para a implementação da interface, fazendo com que ele se 
concentre nos comandos e no comportamento do programa. 
 
 
 
 
 
 
 
 
 
 
 
 
14 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
1.5.1.1. Como “salvar” o Projeto 
 
A exemplo de qualquer trabalho de computador, antes de iniciar a sua 
implementação, inclusive antes de clicar na Área de Programação, é recomendado salvar 
o projeto. É interessante que seja criado uma pasta, no computador, para armazenar todos 
os arquivos de maneira que esta pasta seja facilmente enviada e copiada para os diferentes 
computadores que serão utilizados durante o desenvolvimento. Para tanto, a sugestão é 
que na tela “Novo projeto”, conforme figura anterior, os dados para salvar (na parte inferior 
da tela) sejam alterados conforme a seguir: 
 
Nome: Ex01 
Local: c:\Users\Nome_usuario\desktop (Área de trabalho) 
Nome da Solução: Ex01 (já é sugerido automaticamente igual ao nome) 
 
Figura 8: Tela para salvar o nome do projeto. 
 
1.5.1.2. Elementos da área de programação do IDE do Visual Studio 
 
Após realizar as operações do item anterior, será aberto o “Ambiente de 
Desenvolvimento do C#” com aspecto conforme abaixo (figura 9): 
 
 
Figura 9: Ambiente de desenvolvimento do C#. 
 
 
15 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Observações: 
a) Todas as seções de um programa em C# iniciam com chave de abertura “{“ e 
fechamento com chave de fechamento “}”. 
b) Após o nameespace seguido do nome do programa existe uma chave { abrindo o 
programa que é fechada no final do programa }. 
c) Após a class program, existe uma chave { abrindo a classe que é fechada na 
penúltima linha do programa }. 
d) Após a declaração do método Main – static void Main(string[] arg), existe uma 
chave de abertura “{“ e todos os comandos que o programador for escrever 
deverão estar após esta chave e antes da chave de fechamento “}” que facha o 
método. 
e) Durante a programação o usuário também deverá colocar chaves conforme será 
orientado nas aulas seguintes. 
 
 
Figura 10: Ambiente de desenvolvimento do C#. 
 
 
 
 
 
 
 
 
 
Os “using systens” definem as classes 
externas que serão utilizadas pelo C#. 
Nesta primeira parte do curso, serão 
utilizadas somente as classes definidas pelo 
C#, entretanto, o programador pode criar suas 
próprias classes. 
 “name space” é o nome do programa. 
 “class Program” será utilizado futuramente 
quando se utilizar o conceito de classes. 
Declara o método Main. A palavra void 
declara que não estão sendo passados 
valores 
Os comandos devem ser escritos entre os 
chaves (chave de abertura { e de fechamento 
}. 
 
 
16 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
1.5.1.3. Execução do programa 
 
Conforme exposto anteriormente, o computador só entende linguagem de máquina, 
ou seja, sinais elétricos. Com objetivo de facilitar a interpretação destes sinais elétricos pelo 
computador, decidiu-se que se trabalharia unicamente com dois tipos de sinais ligado e 
desligado (que eletricamente constitui-se em “com tensão elétrica” e “sem tensão elétrica”). 
 
Para facilitar, as informações destes dados para o computador, decidiu-se utilizar o 
valor 1 para ligado e o valor 0 para desligado. Então, qualquer que seja o programa, para 
que ele passe instruções ao computador ele precisa fornecer conjuntos de zeros (0) e uns 
(1), portanto, mesmo uma linguagem de programação de alto nível, como é o caso do C#, 
em última análise precisa fornecer ao computador conjuntos de zeros (0) e uns (1). 
 
No caso do C#, o programa gerado pelo desenvolvedor, que tem o nome de 
programa fonte, e tem a extensão “cs”, não é um conjunto de zeros (0) e uns (1) e, portanto, 
precisa ser convertido para ser executado. Desta forma, a execução de um programa criado 
em C# pode ser feita de duas maneiras: 
 
I. Dentro do ambiente do C#. 
 
Neste caso o próprio arquivo de extensão “cs” sofre um processo chamado de 
“debug”, e caso não existam erros o programa será “debugado” e executado 
imediatamente. A operação de debug pode ser disparada das seguintes maneiras: 
 
a) Escolhendo no menu Debug (Depurar) o item “Start debug” (Iniciar depuração); 
b) Digitando a tecla F5; 
c) Clicando na seta “Start debugging” (iniciar) da Barra de Ferramentas. 
 
 
 
 
 
 
 
 
 
17 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
II.Fora do Ambiente C#. 
 
Neste caso o arquivo “cs” será compilado, gerando um arquivo executável. Este 
arquivo executável pode ser executado em qualquer computador que possua o .NET 
Framework instalado. Em versões anteriores, para gerar o programa executável, é 
necessário utilizar a Build Solution, nas novas versões existe a possibilidade de gerar um 
pacote inteiro que será apresentado em outras oportunidades. 
 
1.5.1.4. Erros durante a operação de “debug” 
 
A operação de debug irá conferir o programa com objetivo de verificar se existem 
erros de sintaxe (erros na escrituração dos comandos). Caso existam erros, o processo é 
interrompido e surge para o usuário o Quadro de Mensagens abaixo (figura 11). 
 
 
Figura 11: Tela de erro durante a operação de “debug”. 
 
Ao receber o quadro de mensagem o desenvolvedor já sabe que seu programa 
apresenta um erro, portanto ele precisa procurar o erro. Para procurar o erro ele deve 
clicar o botão “Não” (para interromper a compilação) e verificar na parte inferior da tela 
as mensagens que dão as informações necessárias para que o usuário concerte o erro. As 
mensagens deverão ser algo como a figura 12 abaixo, onde é informado: 
 
 
Figura 12: Mensagens de erro durante a operação de “debug”. 
 
 
 
 
 
18 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
• A descrição de erro (no exemplo, é esperado um ;). 
• O nome do arquivo (no exemplo Program.cs). 
• A linha em que o erro foi encontrado (no exemplo linha 16). 
• A coluna que o erro foi encontrado (no exemplo a coluna 39). 
• O nome do projeto (no exemplo Ex01). 
 
1.6. A importância da Lógica Computacional 
 
A Lógica Computacional tem por objetivo estabelecer técnicas e critérios gerais de 
programação do computador visando à execução de atividades específicas, maximizando 
a utilização dos recursos do computador, utilizando procedimentos claros, de fácil 
entendimento, minimizando a quantidade de memória e o tempo de execução dessas 
atividades. 
 
A Lógica Computacional independe das linguagens. Qualquer que seja a linguagem 
utilizada existe uma sucessão de instruções que devem ser dadas ao computador para que 
ele execute a tarefa desejada. Por esta razão a Lógica será estudada independentemente 
de qualquer linguagem. Para isto, a Lógica será desenvolvida, utilizando figuras 
geométricas para representar as várias instruções a serem dadas ao computador e, 
também, através de pseudocódigos. O conjunto de instruções representadas por figuras 
geométricas é denominado Fluxograma. Apresentamos abaixo, um fluxograma, mostrando 
a existência de figuras geométricas encadeadas, cada uma representando uma instrução. 
Os conceitos que norteiam a utilização de fluxogramas e pseudocódigos serão 
gradativamente explicados ao longo do texto. Na figura 13 é apresentado um exemplo de 
fluxograma 
 
 
 
 
 
 
 
 
19 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 13: Exemplo de fluxograma da solução lógica de um problema. 
 
1.6.1. A representação do raciocínio lógico através de fluxogramas 
 
Os fluxogramas procuram representar os algoritmos de uma forma visual, auxiliando 
o programador a raciocinar. A partir deles é possível construir programas com facilidade 
independente da linguagem de programação que está sendo utilizada. São formados a 
partir de linhas, setas e figuras geométricas. As linhas e setas representam o fluxo, ou seja, 
a sequência que o programa deve seguir. As figuras são utilizadas para representar os 
comandos. Cada comando característico possui uma figura de forma peculiar. No final 
deste material o aluno pode encontrar a lista de figuras utilizadas nos fluxogramas e seus 
significados. 
 
 
 
 
 
 
INICIO
P/ I = 1
ate 100
M = I * 3
M
FIM
 
 
20 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
1.6.2. Regras para utilização de fluxogramas 
 
a) Todo elemento de um fluxograma deve ter apenas uma entrada e pelo 
menos uma saída. (exceto os de Início, Fim e os de conexão); 
b) Os traços que ligam os elementos (símbolos gráficos) devem ser sempre 
horizontais ou verticais e representam o fluxo lógico de execução do 
programa; 
c) Um fluxograma tem apenas um Início e um Fim; 
d) O sentido do fluxo da informação não pode retornar para cima, a menos que 
esteja sendo usado um comando específico para este fim; 
e) Nas caixas de decisão marcar pelo menos uma saída com “S” ou “N” de 
acordo com o caso; 
f) As linhas de um fluxograma jamais devem se cruzar se não for em um nó de 
ligação; 
g) Nunca utilize uma linha de retorno de laço para introduzir instruções. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
2. VARIÁVEIS, OPERADORES E EXPRESSÕES 
 
2.1. Instruções 
 
Des 
 
Uma outra regra também muito importante é que a linguagem C# diferencia os 
caracteres minúsculos dos maiúsculos (Case Sensitive) e suas instruções devem ser 
codificadas como definidas. Por exemplo, a instrução “Console.WriteLine("O casal nota 
10!");” deverá ser digitada exatamente com esses caracteres, se não, ocorrerá erros de 
compilação. Veja a figura 14 com a observação sobre o erro ao encontrar a palavra 
“console”, mas iniciando com um caractere minúsculo. 
 
 
Figura 14: Recurso do “case sensitive” do Visual Studio C#. 
 
 
 
 
Para evitar erros desta natureza, sugere-se a utilização da técnica da codificação com 
o recurso “IntelliSense“ que o framework disponibiliza para você. O “IntelliSense” é uma 
ajuda de preenchimento de código que inclui inúmeras funcionalidades: Listar Membros, 
 
 
22 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
Informações do Parâmetro, Informações Rápidas e Completar Palavra. Essas 
funcionalidades ajudam você a aprender mais sobre o código que está usando, a manter o 
acompanhamento dos parâmetros que está digitando e a adicionar chamadas a métodos e 
propriedades pressionando apenas algumas teclas. Veja o exemplo na figura 15 e 
experimente você também. 
 
 
Figura 15: Recurso “IntelliSense” do Visual Studio C#. 
 
2.2. A memória do computador 
 
Para que o computador possa processar dados, se faz necessário que eles estejam 
armazenados na memória do computador. Esta memória pode ser entendida como um 
conjunto de pequenos “pedaços”, cada um identificado por um número distinto conhecido 
por endereço. Este endereço permite que as informações armazenadas na memória da 
máquina sejam facilmente localizadas. 
 
Cada uma destes “pedaços” ou endereços é conhecido por byte (figura 16). Neles 
podemos armazenar um caractere gráfico qualquer, isto é, uma letra, símbolo ou sinal 
gráfico. Cada byte é composto por um agrupamento de oito bits (menor memória 
endereçável de um computador e menor unidade de armazenamento), numerados em 
ordem decrescente de 7 (sete) até 0 (zero). Por sua vez cada bit é capaz de armazenar 
uma informação binária (0 ou 1). Este armazenamento pode ser feito fisicamente através 
 
 
23 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
de diferença de polaridade elétrica, diferença de nível de tensão, polaridade magnética e, 
no caso de mídias óticas, marcas em uma superfície reflexiva. 
 
 
Figura 16: Representação esquemática de um byte de memória no computador. 
 
A memória do computador é dividida em regiões distintas, dentre as quais, podemos 
destacar a memória “RAM” (Random Access Memory). Trata-se de uma memória de 
acesso randômico ou aleatório), estando permanentemente disponível ao usuário do 
computador, permitindo que nesta sejam gravados, lidos ou apagados dados existentes. É 
nesta memória que estão armazenados os dados e programas passíveis de 
processamento, e comoconsequência disto, as informações podem ser modificadas 
continuamente a qualquer momento. Na figura 17 abaixo, é apresentado um exemplo de 
armazenamento de informação na memória RAM do computador. 
 
 F A C U L D A D E 
 
Figura 17: Esquema de um trecho da memória interna do computador 
 
Conforme esclarecido anteriormente, cada célula de memória pode armazenar um 
caractere, símbolo ou dígito. Neste exemplo a literal “FACULDADE” está ocupando 9 (nove) 
células ou bytes de memória do computador. 
 
2.3. Tipos de dados 
 
Dentre as habilidades existentes no computador citadas anteriormente, o 
processamento realizado pela máquina permite a manipulação de informações contidas em 
sua memória, as quais são representadas através de diferentes tipos de dados. 
Destacaremos os dados de acordo com a informação que pode ser contida neles. 
 
 
 
Bit
7
Bit
4
Bit
5
Bit
6
Bit
2
Bit
3
Bit
0
Bit
1
BYTE
 
 
24 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
2.3.1. Dados literais numéricos 
 
São caracterizados por dados que podem sofrer operações matemáticas, podendo ser 
divididos em: 
 
a) Dados numéricos inteiros: não possuem componentes decimais ou fracionários 
podendo ser positivos ou negativos. Exemplos: 
 
Tipo Exemplo 
número inteiro positivo 38 
número inteiro 0 
número inteiro negativo -5 
 
b) Dados numéricos reais: são aqueles possuem componentes decimais ou 
fracionários, e, também, podem ser positivos e negativos. Exemplos: 
 
Tipo Exemplo 
Número real com uma casa decimal 1.5 
Número real positivo com 2 casas decimais 19.02 
Número real positivo sem casas decimais 893. 
Número real negativo com uma casa decimal -20.8 
Número real em notação científica 1.4E-5 (Ou seja: 1.4 * 10-5) 
 
Nota: Normalmente as linguagens de programação adotam o ponto (.) como separador 
decimal. Algumas linguagens, por outro lado, permitem que o programador escolha o 
separador decimal entre o ponto e a vírgula. Linguagens como C++, C#, Java, dentre 
outras, adotam o ponto sem possibilidade de escolha. 
 
2.3.2. Dados literais alfanuméricos 
 
Os dados do tipo literal são caracterizados por uma sequência de caracteres contendo 
letras, símbolos e/ou dígitos. É também conhecido como alfanumérico, cadeia de 
caracteres ou “string”. As informações alfanuméricas não podem sofrer operações 
matemáticas, mas podem sofrer operações lógicas como será visto adiante. Exemplos: 
 
 
 
25 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Tipo Exemplo 
“Unisanta” Literal de comprimento 8 
“ ” Literal de comprimento 1 
“123456” Literal de comprimento 6 
“0” Literal de comprimento 1 
“AbCdEfGh” Literal de comprimento 8 
“1+3+4=8” Literal de comprimento 7 
 
 Como apresentado nos exemplos acima, o símbolo “ (aspas) é utilizado 
para representar dados do tipo literal. As aspas simples também podem ser utilizadas 
para o mesmo fim, desde que uniformemente em todo documento. 
 
O computador é uma máquina eletrônica que somente trabalha com informações 
elétricas que são externamente representadas por 0 e 1. Por esta razão todas as 
informações são tratadas e convertidas para o sistema binário para que possam ser 
operadas internamente. Quando o computador opera com letras ou sinais gráficos, esta 
transformação para binário não pode ser efetuada. Para resolver este problema, as letras, 
os sinais gráficos e os algarismos são transformados em um código numérico de acordo 
com uma tabela denominada “tabela ASCII” (American Standard Code for International 
Interchange), de uso generalizado, código este que é então convertido para binário para 
que possa assim ser armazenado na memória. 
 
32 - 48 - 0 64 - @ 80 - P 96 - ` 112 - p 
33 - ! 49 - 1 65 - A 81 - Q 97 - a 113 - q 
34 - “ 50 - 2 66 - B 82 - R 98 - b 114 - r 
35 - # 51 - 3 67 - C 83 - S 99 - c 115 - s 
36 - $ 52 - 4 68 - D 84 - T 100 - d 116 - t 
37 - % 53 - 5 69 - E 85 - U 101 - e 117 - u 
38 - & 54 - 6 70 - F 86 - V 102 - f 118 - v 
39 - ´ 55 - 7 71 - G 87 - W 103 - g 119 - w 
40 - ( 56 - 8 72 - H 88 - X 104 - h 120 - x 
41 - ) 57 - 9 73 - I 89 - Y 105 - i 121 - y 
42 - * 58 - : 74 - J 90 - Z 106 - j 122 - z 
43 - + 59 - ; 75 - K 91 - [ 107 - k 123 - { 
44 - , 60 - < 76 - L 92 - \ 108 - l 124 - | 
45 - - 61 - = 77 - M 93 - ] 109 - m 125 - } 
 
 
26 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
46 - . 62 - > 78 - N 94 - ^ 110 - n 126 - ~ 
47 - / 63 - ? 79 - O 95 - _ 111 - o 
 
Tabela 1: Tabela ASCII. 
 
 Com esta tabela, as letras estão colocadas respeitando a ordem alfabética, 
o computador é capaz de comparar informações alfanuméricas. O computador “sabe” que 
uma letra antecede outra na ordem alfabética quando seu código ASCII é menor. Observe 
a tabela acima e verifique que o código de A é 65 enquanto de B é 66 o que garante para 
o computador que A antecede B na ordem alfabética. Quando as informações contêm mais 
de uma letra esta comparação também é possível. O processo dar-se-á através da 
comparação de letra e letra, a partir da primeira, até concluir a que é anterior na ordem 
alfabética. 
 
2.3.3. Dados lógicos 
 
O tipo de dado lógico é utilizado para representar dois estados, dois valores lógicos 
possíveis: verdadeiro e falso. Os dados lógicos são também conhecidos e chamados de 
booleanos, menção feita ao matemático George Boole. Exemplo: 
 
Tipo Exemplo 
.V. Valor lógico verdadeiro 
.F. Valor lógico falso 
True Valor lógico verdadeiro 
False Valor lógico falso 
Sim Valor lógico verdadeiro 
Não Valor lógico falso 
1 Valor lógico verdadeiro 
0 Valor lógico falso 
 
 
 
Diferentemente das variáveis matemáticas, as variáveis nos computadores 
não são delimitadas por + e - , mas possuem limites finitos máximos e 
mínimos dependendo de cada tipo. Esta limitação é devida à quantidade de 
bytes que cada tipo de variável pode ocupar na memória. 
 
 
27 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Hierarquia dos Tipos de Dados 
 
2.4. Variáveis de memória 
 
Uma variável representa uma região de memória (endereço) que poderá alocar 
(armazenar) valores durante a execução do programa. Cada um destes endereços de 
memória será identificado por um nome, denominado variável. Portanto, em uma variável, 
você poderá armazenar diferentes valores durante a execução do programa, mas 
evidentemente, não ao mesmo tempo. 
 
Variáveis são como caixas na memória que podem armazenar um valor. A linguagem 
C# tem muitos tipos de valores que podem ser armazenados e processados, entre eles: 
inteiros, reais, strings (conjunto de caracteres) etc. Declaramos o tipo da variável seguido 
de seu nome em uma única instrução, por exemplo: int idade; 
 
Neste caso, temos uma variável de tipo inteiro, denominada idade (identificador). O 
tipo de variável “int” é o nome de um dos tipos primitivos da linguagem C#, que representa 
um valor inteiro, ou seja, sem ponto flutuante (casas decimais). 
 
 
 Curto 
 Inteiro Médio 
 Longo 
 Numérico 
 Baixa precisão 
 Real Média precisão 
 Alta precisão 
 
Principais 
 
String 
 
 Tipos de Dados Alfanumérico 
Caractere 
 
 
 
 Lógico 
 
 
 
 
28 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
O processo de armazenamento de dados na memória do computador pode ocorrer de 
principalmente duas formas: através da instrução de atribuição ou através da instrução que 
permita ao computador receber uma informação via teclado. 
 
2.4.1. Instrução de atribuição 
 
Esta instrução considerada uma das mais importantes dentre as várias entendidas 
pelo computador, consiste em disponibilizar na memória do computador uma informação 
para que ele possa processá-la e que ela esteja constantemente disponível paraacesso 
por parte deste. A instrução de atribuição é representada da seguinte forma: 
 
<identificador literal> = <informação> 
<Identificador literal> geralmente chamado de variável 
= operador de atribuição 
<informação> qualquer dado a ser armazenado na memória do computador 
 
 
Exemplos: 
 
x = 20, onde X é uma variável numérica 
cidade = “Santos”, onde ‘cidade’ é uma variável alfanumérica 
 
No exemplo acima foram definidas duas variáveis (identificadores literais) as quais 
armazenam respectivamente as informações: numérica (20) e alfanumérica (“Santos”). 
 
Ao interpretar a instrução de atribuição, o computador automaticamente localiza em 
sua memória um espaço livre para armazenar a informação, passando ela a ser identificada 
pela variável a qual possui relacionado o endereço de memória da informação. 
 
2.4.1.1. Propriedades da instrução de atribuição 
 
a) A Instrução de Atribuição pode armazenar resultado de operações (expressões): 
 
Atribuição Efeito da atribuição realizada 
A = 3 atribuindo-se o valor 3 à variável A 
 
 
29 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
B = 5 atribuindo-se o valor 5 à variável B 
C = A * B atribuindo-se o resultado do produto de A por B (15) à variável C 
 
Ou seja, armazenamos no endereço de memória representado pela variável C, o 
resultado da operação. 
 
Para que a operação seja realizada de forma correta, o computador pesquisa o 
conteúdo das variáveis representadas pelos endereços A e B, efetua o cálculo (produto) 
das duas informações numéricas e em seguida armazena o resultado em um espaço 
disponível em memória representado pela variável (identificador literal) C. 
 
b) O conteúdo de uma variável pode ser alterado ao longo do processamento 
 
Atribuição Efeito da atribuição realizada 
A = 3 neste momento atribuímos à variável A o valor 3 
A = 7 o mesmo espaço de memória A passa a armazenar o valor 7 
A = A + 3 agora, a variável A recebe como atribuição, o seu valor inicial acrescido 
do valor 3, passando desta forma, a armazenar o valor 10 
 
Com esta propriedade, concluímos que existe a possibilidade de reutilização de 
um espaço de memória anteriormente utilizado. Salientamos ainda que o valor anterior 
é automaticamente perdido não podendo mais ser utilizado ou recuperado. 
 
c) A atribuição, representada pelo sinal de igual “=”, não tem o mesmo significado do 
mesmo sinal para a matemática. Exemplo: 
 
Matemática Computador 
X = 5 
X = X + 1 
Desenvolvendo esta expressão, podemos passar X 
para o primeiro membro, obtendo: 
 
X = X – 1 
X – X = 1 Ou 0 = 1 ( absurdo! ) 
X = 5 
X = X + 1 
Para o computador, esta instrução identifica apenas 
a reutilização do endereço de memória X. O 
conteúdo do endereço X (5) é somado ao valor 1 
resultando 6 que também armazenado no mesmo 
endereço X. 
 
 
 
 
 
30 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Determine em cada um dos exercícios abaixo o conteúdo da variável (endereço 
de memória) solicitado: 
 
1-) Endereço X 2-) Endereço Z 3-) Endereço H 4-) Endereço M 
A = 1 
B = 5 
C = A * B 
A = A + C 
X = B * C 
X = X + 3 
A = X – B 
X = X * X 
Z = 3 
B = Z * 2 
C = 4 
D = 3 
Z = B + C + D 
Z = Z * Z 
Z = C - Z 
L = 5 
D = 45 
H = D / L 
H = H + L + D 
J = 5 
M = 6 
F = D 
H = F 
AD = 45 
XJ = 21 
M = AD + XJ 
DD = 3 * M + XJ 
XJ = 12 
DD = XJ * M – DD 
M = 5 * M 
X = Z = H = M = 
 
A linguagem C# disponibiliza vários outros tipos de dados primitivos, ilustrado na 
tabela 2 e que teremos muito tempo para aprendê-los e utilizá-los. 
 
Tipo de dado Descrição Tamanho 
(em bits) 
Intervalo Exemplo 
int Números inteiros 32 -2147483648 até 
2147483647 
int idade; 
idade = 42; 
long Números inteiros 64 -9223372036854775808 
até 
9223372036854775807 
long x; 
x = 51L; 
float Números reais 32 ± 3,4 x 1038 float nota; 
nota = 5.5F; 
double Números reais 64 ± 1,7 x 10308 double x; 
x = 0.125; 
decimal Valores 
monetários 
128 28 números significativos decimal v; 
v = 0.42M; 
string Sequência de 
caracteres 
16 bits por 
caractere 
 string n; 
n = ”Maria”; 
char Único 
caractere 
16 0 a 32767 char let; 
let = ‘A’; 
 
 
31 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
bool Booleano 8 true ou false bool resp; 
resp = true; 
 
Tabela 2 – Tipos de dados primitivos da linguagem C#. 
 
Observações: 
 
i. Uma variável, em princípio deve ter um nome simples, que identifique seu 
conteúdo e que não seja igual a nenhuma das palavras reservadas já utilizadas 
pelo C#; 
ii. É importante observar algumas regras para nomeação dos identificadores 
(nome que se dá a uma variável): 
 
a) Iniciar com uma letra; 
b) Pode utilizar letras e números; 
c) Não utilizar caracteres especiais (símbolos gráficos); 
d) Não deixar espaço entre as letras; 
e) Não colocar letras ou palavras sublinhadas; 
f) Iniciar preferivelmente com letras minúsculas. 
 
2.5. Operadores e expressões aritméticas 
 
A linguagem C# suporta as 4 (quatro) operações aritméticas básicas, como 
multiplicação, divisão, adição e subtração, respectivamente com os operadores “*”, “/”, “+” 
e “-“. Quando em uma expressão aritmética, existir mais de um operador, valem as regras 
e propriedades da matemática para dar prioridade aos cálculos. 
 
Exemplos: 
x = 3 + 5 * 2 (o valor atribuído para “x” será 13) 
y = (3 + 5) * 2 (o valor atribuído para “y” será 16) 
 
 
 
 
 
 
 
32 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Você deve estar ciente também de que o tipo de resultado de uma expressão 
aritmética depende dos operandos utilizados. Veja o caso da operação de divisão: 
 
z = 5 / 2 (o valor atribuído para “z” será 2) 
w = 5.0 / 2.0 (o valor atribuído para “w” será 2.5) 
 
O C# também suporta um operador para retornar o resto de uma divisão entre inteiros. 
Este operador é chamado de módulo ou resto e é representado pelo caractere “%”. O 
resultado de x % y é o resto da divisão de x por y. 
 
Por exemplo: r = 9 % 2 (o valor atribuído para “r” será 1, pois 9 dividido por 2 é igual 
a 4 e resta 1). 
 
2.5.1. Incremento ou decremento de valores em variáveis 
 
A linguagem C# possui alguns recursos relevantes para incremento e decremento de 
valores em variáveis de memória. Para adicionar o valor 1 (um) a uma variável, poderia 
fazer: x = x + 1; para subtrair o valor 1 (um) a uma variável, poderia fazer: y = y - 1; 
 
Entretanto é pouco provável que um desenvolvedor experiente, que será seu caso, 
faça um código como este. Para adicionar uma unidade para uma variável utilizaremos a 
notação derivada da linguagem C, como a seguir: x++; 
 
Da mesma maneira para subtrair 1 de uma variável, você poderá utilizar o operador “-
-”. Por exemplo, para decrementar (subtrair) 1 da variável x, poderá ser codificado: x--; 
 
Os símbolos “++” e “—” são chamados de operadores (incremento ou decremento). 
Ambos são operadores unários, ou seja, não precisam estar necessariamente entre dois 
termos (variáveis, por exemplo). 
 
 
 
 
 
 
33 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
Prefixo e Sufixo: os operadores de incremento (++) e decremento (--) pode ser 
inseridos antes ou depois de uma variável. Se utilizarmos o operador depois da variável, 
chamamos de sufixo, mas se utilizarmos antes chamamos de prefixo. O detalhe é que o 
cálculo da variável também varia com esta regra. 
 
Variáveis Tipo de incremento/decremento 
contador++ incremento por sufixo (pós-incremento) 
++contador incremento por prefixo (pré-incremento) 
 
contador-- decremento por sufixo (pós-decremento) 
--contador decremento por prefixo (pré-decremento) 
 
 
A utilização da forma prefixo ou sufixo não faz diferença para a variável que estásendo 
incrementada ou decrementada. Por exemplo, se você codificar contador++ ou ++contador, 
a variável “contador” será incrementada em uma unidade, ou seja, aumentará em 1. A 
diferença está no resultado de uma expressão aritmética, pois um adiciona ou subtrai 
ANTES (prefixo) da expressão aritmética, já o outro (sufixo), adiciona ou subtrai depois da 
expressão. 
 
Veja os exemplos: 
 
x = 5; 
y = x++ * 2; 
Temos aqui x = 6 e y = 10. 
 
x = 5; 
y = ++x * 2; 
Temos aqui x = 6 e y = 12. 
 
Observação: Isoladamente, x++ tem o mesmo efeito que ++x. Veja o exemplo abaixo, 
codifique em seu Microsoft Visual C# e faça algumas alterações. Crie exemplos a partir 
deste. Mude os cálculos e valores. Analise os resultados obtidos... 
 
 
 
34 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 18: Exemplo de aplicação em linguagem C# com operadores. 
 
 
 
 
Procure pesquisar algo mais a respeito da obra de George Boole, um 
matemático, filósofo britânico, criador da álgebra booleana, fundamental para 
o desenvolvimento da computação moderna. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
3. ENTRADA E SAÍDA DE DADOS 
 
O cálculo que o computador realiza requer, para ser útil, a entrada dos dados 
necessários para o processamento. O projeto de programação, normalmente existe porque 
se prevê a solução de algum problema computacional, isto é, temos que elaborar uma 
solução para um problema. Partimos também do suposto que temos dados que deverão 
ser processados e/ou calculados para gerar as informações de saída. Estes dados de 
entrada deverão ser inseridos no projeto em variáveis. 
 
Em muitas situações, a escolha do valor para uma variável é de competência do 
usuário e não do desenvolvedor, por isso, vamos estudar nesta aula, como atribuir valores 
para as variáveis em tempo de execução do programa, ou seja, o usuário irá escolher e 
digitar o valor que deverá ser armazenado em uma variável. 
 
Depois de processados os dados, vamos então informar os resultados obtidos, ou 
seja, a saída de dados. Os programas desenvolvidos até agora, têm valores atribuídos pelo 
desenvolvedor e não pelo usuário, isto significa que os programas irão gerar sempre o 
mesmo resultado. Com os recursos estudados nesta aula, teremos condições de solicitar 
valores ao usuário e processar estes dados, gerando resultados em função das entradas, 
ou seja, resultados diferentes. 
 
As operações de entrada permitem ler determinados valores e colocá-los em 
variáveis. Essa entrada (teclado, unidades de disco etc.) é conhecida como operação de 
leitura (read), após o processamento, os dados serão enviados para um dispositivo de 
saída (tela, impressora etc.), denominada escrita (write). 
 
 
 
 
 
 
 
 
 
 
 
36 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
3.1. Um programa simples 
 
O C# utiliza algumas notações que podem parecer estranhas para quem está 
iniciando, por isso, vamos fazer um programa que utiliza poucas variáveis e cálculos nada 
complexos. O enunciado do programa é o seguinte: Fazer um programa para calcular e 
exibir o dobro de um valor (real) qualquer que será escolhido pelo usuário. 
 
Solução: 
 
namespace Exemplo01 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 // Declaração de duas variáveis reais 
 double x, resp; 
 
 // Limpar a tela 
 Console.Clear(); 
 
 // Exibir a mensagem para o usuário digitar um valor 
 Console.Write("Digite um valor : "); 
 
 /* Aguardar a digitação de um valor 
 Converter a string digitada para o tipo double 
 Armazenar o valor escolhido na variável x 
 */ 
 x = double.Parse(Console.ReadLine()); 
 
 // Calcular o dobro de x e armazenar o resultado em resp 
 resp = 2 * x; 
 
 // Exibir o resultado 
 Console.WriteLine("Dobro do valor escolhido : {0}", resp); 
 
 
 
 // Aguardar uma tecla, antes de encerrar o programa 
 
 
37 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.ReadKey(); 
 } 
 } 
} 
 
Analisando o código... 
 
a) Definimos duas variáveis reais (x e resp) do tipo double. Uma para receber o valor 
escolhido pelo usuário e outra para o cálculo do dobro do valor. 
b) A linha com o código “Console.Clear();” remove os caracteres antigos da tela, para 
que seu projeto possa utilizar uma tela limpa. 
c) Exibimos uma mensagem na tela para o usuário digitar um valor: 
Console.Write("Digite um valor : "); 
 
Um detalhe muito importante nos processamentos de entrada de dados para 
aplicações windows, é que as entradas são entendidas como sendo do tipo “string”, ou seja, 
uma sequência de caracteres. Para que estas entradas sejam interpretadas como valores 
numéricos nós deveremos nos utilizar de funções para conversão de tipos, como por 
exemplo: 
 
• X = int.Parse(Console.ReadLine()); 
• Y = float.Parse(Console.ReadLine()); 
• Z = double.Parse(Console.ReadLine()); 
• Nome = Console.ReadLine(); 
 
d) O código “x = double.Parse(Console.ReadLine());” aguarda a digitação de um valor 
que será convertido e armazenado na variável x. 
e) Veja o que acontece (figura 19) quando retiramos as funções de conversão para 
linhas desta natureza. Suponha o seguinte código: x = Console.ReadLine(); 
 
 
 
 
 
 
38 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 19: Erro de compilação por falha de conversão de tipos de dados. 
 
f) Após a digitação, calculamos o dobro do valor digitado e armazenamos a resposta 
na variável resp, com o código: “resp = 2 * x;”. 
g) Com a variável “resp” em memória, podemos então enviar para o dispositivo de 
saída (tela) com o código Console.WriteLine("Dobro do valor escolhido : {0}", resp); 
 
Lembre-se que estamos utilizando o chamado “placeholder” (também chamado de 
parâmetro de formatação) para informar o local onde o conteúdo da variável será 
apresentado. 
 
É possível concatenar informações com a instrução “Write”, ou seja, utilizar a mesma 
instrução “Write” ou “WriteLine” para colocar mais de um conjunto de caracteres. É possível 
concatenar utilizando o sinal “+” para separar 2 (dois) conjuntos. Exemplo: 
 
// Concatena utilizando a sintaxe + 
Console.WriteLine("O valor é: " + 100); 
 
h) Apresentamos os resultados esperados, ou seja, já atendemos os requisitos do 
usuário. Vamos então inserir uma instrução “Console.ReadKey();” para aguardar 
que o usuário pressione uma tecla, antes do fechamento do aplicativo. Se você 
não entendeu, retire esta linha e execute o programa novamente. Viu, não dá 
tempo para visualizar o resultado. 
 
 
 
39 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
3.2. Entrada e saída de dados 
 
Basicamente as aplicações necessitam das entradas de dados, processam estes 
dados e geram as informações de saída. 
 
Admita o seguinte problema: calcular e exibir a idade em dias e a idade em horas de 
uma pessoa qualquer, a partir da sua idade em anos, que será fornecida via teclado. 
 
Para resolver este problema, você deverá criar variáveis para armazenar a idade em 
anos que o usuário irá digitar e depois calcular os demais valores solicitados. Logicamente, 
também seria um problema muito simples de resolver. 
 
Exemplo: 
 
namespace Exemplo02 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int anos, dias, horas; 
 
 Console.Clear(); 
 Console.Write("Idade em anos: "); 
 anos = int.Parse(Console.ReadLine()); 
 
 dias = anos * 365; 
 horas = dias * 24; 
 Console.WriteLine("{0} anos de vida", anos); 
 Console.WriteLine("Aproximadamente {0} dias", dias); 
 Console.WriteLine("{0} horas! ", horas); 
 Console.ReadKey(); 
 } 
 } 
} 
 
 
 
 
40 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Para um treinamento, faça agora um programa para calcular e exibir a média 
aritmética de dois valores que serão digitados: M = (p1 + p2) / 2. 
 
3.2.1. Instrução de comentário no programa 
 
O objetivo da instrução de “comentário” é permitir que o desenvolvedor escreva 
comentários durante a programação. Na verdade, esta instrução não tem nenhuma função 
para a linguagem de programação, o que se está fazendo quando se coloca um comando 
comentário é equivalente a falar ao compilador que a linha que inicia com o comando 
comentário deve ser desconsiderada. 
 
Em resumo, os comentários só servem para dar ao desenvolvedor a oportunidade 
de escrever informações no programa que lhe serão úteis como lembretes ou explicações 
de decisões que ele tomou durante a elaboração do programa. Um bom programador deve 
colocar o máximo possível de comentários, de maneira que estes possam lhe auxiliar 
principalmente no futuro, quando ele for fazer alterações ou manutenções no programa. 
 
Existem no C#, duas sintaxes para o comando comentário: 
 
a) Para uma única linha de comentário: basta iniciar a linha de comentário com duas 
barras normais. Não é necessário marcar o final da linha. 
 
// ........Comentário 
 
b) Para comentários com mais de uma linha: deve-se iniciar a linha de comentário 
com uma barra normal seguida de asterisco e encerrar o comentário com 
asterisco seguido de uma barra normal. 
 
/* ...............Comentário ................ */ 
 
 
 
 
 
 
41 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Exemplo: 
 
namespace Ex01 
{ 
 class Comentario 
 { 
 static void Main(string[] args) 
 { 
 // Esta é uma linha de comentário que será desprezada pelo comando 
 /* Caso se deseje escrever comentários 
 com mais de uma linha basta iniciar 
 com barra asterisco e fechar com */ 
 } 
 } 
} 
 
 
3.2.2. Delimitando a largura de dados para a instrução “Write” 
 
Caso seja utilizada a instrução “Write” com a sintaxe de “parâmetros de formatação”, 
é possível delimitar o espaço onde uma informação será colocada. Para tanto, basta colocar 
após o “parâmetro de formatação”, uma vírgula e em seguida um número inteiro 
representando o espaço que será disponibilizado para a apresentação da informação. Caso 
seja colocado um número positivo o alinhamento será justificado à direita, caso seja 
colocado um número negativo o alinhamento será justificado à esquerda. Exemplo: 
 
// Concatena utilizando parametros de formatação e delimitadores 
Console.WriteLine("O primeiro valor é {0,10}, e o segundo é {1,10}", 120, 130); 
Console.WriteLine("O primeiro valor é {0,-10}, e o segundo é {1,-10}", 120, 130); 
 
 
 
 
 
 
 
 
 
 
 
42 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Figura 20: Resultado do processamento do programa com delimitação de espaço 
para apresentação dos dados. 
 
3.2.3. Determinando o número de casas decimais para a instrução “Write” 
 
Caso seja utilizada a instrução “Write” com a sintaxe de “parâmetros de formatação”, 
é possível determinar o número de casas decimais que um número será informado. Para 
tanto, basta colocar após o “parâmetro de formatação” ou após a indicação de largura 
disponibilizada dois pontos e em seguida a letra F e o número de casas desejadas. 
Exemplo: 
 
// Concatena utilizando parametros de formatação e delimitadores e 
// duas ou três casas decimais 
Console.WriteLine("O primeiro valor é {0,10:F2}, e o segundo é {1,10:F2}", 120, 130); 
Console.WriteLine("O primeiro valor é {0,-10:F3}, e o segundo é {1,-10:F3}", 120, 130); 
 
 
 
 
 
 
 
 
 
 
43 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Figura 21: Resultado do processamento do programa com determinação do número 
de casas decimais para apresentação dos dados. 
 
3.3. Lista de exercícios 
 
1) Entrar via teclado com a base e a altura de um retângulo, calcular e exibir sua 
área. 
2) Calcular e exibir a área de um quadrado, a partir do valor de sua aresta que 
será digitado. 
3) Calcular e exibir a área de um quadrado a partir do valor de sua diagonal que 
será digitado. 
4) A partir dos valores da base e altura de um triângulo, calcular e exibir sua 
área. 
5) Calcular e exibir o volume de uma esfera a partir do valor de seu diâmetro que 
será digitado. 
6) Calcular e exibir a média aritmética de quatro valores quaisquer que serão 
digitados. 
7) Calcular e exibir a média geométrica de dois valores quaisquer que serão 
digitados. 
8) Sabendo que uma milha marítima equivale a um mil, oitocentos e cinquenta e 
dois metros e que um quilômetro possui mil metros, fazer um programa para 
converter milhas marítimas em quilômetros. 
 
 
44 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
9) Calcular e exibir a tensão de um determinado circuito eletrônico a partir dos 
valores da resistência e corrente elétrica que serão digitados. Utilize a lei de 
Ohm. 
10) Entrar via teclado com o valor de uma temperatura em graus Celsius, calcular 
e exibir sua temperatura equivalente em Fahrenheit. 
11) A partir do diâmetro de um círculo que será digitado, calcular e exibir sua área. 
12) Calcular e exibir o volume de um cone a partir dos valores da altura e do raio 
da base que serão digitados. 
13) Calcular e exibir a velocidade final (em km/h) de um automóvel, a partir dos 
valores da velocidade inicial (em m/s), da aceleração (m/s²) e do tempo de 
percurso (em s) que serão digitados. 
14) Calcular e exibir o volume livre de um ambiente que contém uma esfera de 
raio “r” inscrita em um cubo perfeito de aresta “a”. Os valores de “r“ e “a” serão 
digitados. 
15) Entrar via teclado com o valor da cotação do dólar e uma certa quantidade de 
dólares. Calcular e exibir o valor correspondente em Reais (R$). 
16) Entrar via teclado com o valor de um ângulo em graus, calcular e exibir as 
seguintes funções trigonométricas: seno, coseno, tangente e secante deste 
ângulo. Lembre-se que uma função trigonométrica trabalha em radianos. 
17) Entrar via teclado com o valor de cinco produtos. Após as entradas, digitar um 
valor referente ao pagamento da somatória destes valores. Calcular e exibir o 
troco que deverá ser devolvido. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
4. ESTRUTURAS DE CONTROLE DE DECISÃO 
 
4.1. Comparações 
 
O computador tem a habilidade de efetuar comparações e em virtude desta 
comparação, se torna possível a este, a tomada de decisões. Tais comparações ocorrem 
através da análise de uma expressão, a qual, define o caminho correto a ser seguido pelo 
fluxo do programa. Estas expressões são apresentadas na forma de comparações entre 
informações, de tal forma que as mesmas possam ser analisadas pela máquina, retornando 
um valor lógico. Tais comparações podem ser divididas em: 
 
a) Comparações Simples 
b) Comparações Múltiplas 
 
Veremos a seguir as características de cada uma destas comparações, bem como 
analisaremos os conectores lógicos utilizados para criação das expressões. 
 
4.1.1. Comparações simples 
 
Quando definimos o computador, dissemos que ele tem a habilidade de comparar 
informações. Esta comparaçãoé realizada eletronicamente e como resultado dessa 
comparação surge uma informação interna da máquina chamada variável lógica, que pode 
assumir apenas dois valores: verdadeiro ou falso (true ou false). A variável lógica assumirá 
um valor verdadeiro (V ou 1) se for verdadeira a comparação efetuada e será falsa (F ou 
0) em caso contrário. Como internamente no computador temos apenas zeros e uns, o V é 
equivalente a um e o F equivale a zero. 
 
O resultado lógico de uma comparação definirá o caminho a ser seguido pelo 
programa. No quadro abaixo, mostramos as possíveis comparações simples que podem 
ser efetuadas entre os dados A e B: 
 
 
 
 
 
46 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Comparação O computador é capaz de verificar se: 
A = B os números são iguais (em C# usamos ==) 
A <> B são diferentes (nas linguagens C# em Java, usamos != ) 
A > B o primeiro é maior que o segundo 
A < B o primeiro é menor que o segundo 
A >= B o primeiro é maior ou igual ao segundo 
A <= B o primeiro é menor ou igual ao segundo 
 
Nota: Os elementos A e B nas expressões no quadro acima, podem ser variáveis 
numéricas, alfanuméricas ou ainda literais numéricos ou alfanuméricos. 
 
Exemplos: Considere as variáveis A = 10, B = 5, C = “Programa”; 
 
Comparação efetuada pelo 
computador 
Variável lógica interna gerada 
A > B V ou 1 
5 > A F ou 0 
C > “Roberto” F ou 0 
A >= A V ou 1 
6 >= B V ou 1 
6 <> 9 V ou 1 
C < “Zulmira” V ou 1 
A <> B V ou 1 
C > “Alberto” V ou 1 
“Programa” <> C F ou 0 
“6” < “5” F ou 0 
“63” > “120” V ou 1 
12 = 13 F ou 0 
 
Repare que não podemos comparar variáveis literais com variáveis ou literais 
alfanuméricas e vice e versa. 
 
 
 
 
 
 
 
47 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
4.1.2. Comparações múltiplas 
 
A comparação pode também ser constituída pela associação de comparações 
simples, associação esta chamada de comparação múltipla. Esta associação é feita 
utilizando os chamados operadores lógicos AND (E) e OR (OU). Para entendermos esta 
comparação múltipla, consideremos duas condições simples C1 e C2. 
 
4.1.2.1. O Operador lógico “AND” 
 
Regra: C1 AND C2 será V se C1 e C2 forem V. 
Exemplos: 
 
Comparação Múltipla Variável lógica interna gerada 
5 > 3 AND 3 = 3 V – pois ambas são V 
7 = 7 AND 3 = 5 F – pois a segunda é F 
4 > 10 AND 6 <= 12 F – pois a primeira é F 
12 <> 12 AND 6 > 10 F – pois ambas são F 
 
Resumo: 
 
V AND V V 
V AND F F 
F AND V F 
F AND F F 
 
 
 
 
 
 
 
 
 
 
 
 
48 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
4.1.2.2. O Operador lógico “OR” 
 
Regra: C1 OR C2 será V se pelo menos uma das condições simples for V. 
Exemplos: 
 
Comparação Múltipla Variável lógica interna gerada 
5 > 3 OR 3 = 3 V – pois ambas são V 
7 = 7 OR 3 >= 5 V – pois a primeira é V 
4 > 10 OR 6 <= 12 V – pois a segunda é V 
12 <> 12 OR 6 > 10 F – pois ambas são F 
 
Resumo: 
 
V OR V V 
V OR F V 
F OR V V 
F OR F F 
 
As informações comparadas podem conter operações. Neste caso o computador 
efetua inicialmente a operação e posteriormente a comparação, conforme exemplo abaixo: 
 
( 3 * 4 ) > 10 
 
O computador efetua a operação obtendo 12 e este valor é comparado com 10, 
resultando a expressão em V. Podemos ter comparações múltiplas ainda mais complexas. 
Isto é feito utilizando-se de parênteses para indicar a prioridade de análise, conforme o 
exemplo abaixo: 
 
( 3 > 4 AND 5 < > 6 ) OR 2 < 3 
 
 
 
 
 
 
 
 
49 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
4.1.3. Comparações com variáveis alfanuméricas 
 
A comparação pode também ser constituída pela associação de comparações 
envolvendo, especificamente, as variáveis alfanuméricas. Vejamos os exemplos abaixo: 
 
Comparação Variável lógica interna gerada 
“SANTOS“ = “SANTOS” V ou 1 
“ABEL” < “BENEDITO” V ou 1 
“JULIA” > “MARCOS” F ou 0 
“LUIZ” < “ LUIS” F ou 0 
“MARCIA” >= “MARCIA” V ou 1 
“AAA” <= “AAAB” V ou 1 
“SISTEMA” <> “SISTEMA” F ou 0 
“AAAAAA” = “aaaaaa” F ou 0 
“MARIA “ = “MARIA” F ou 0 
 
Notas: 
 
a) Caracteres maiúsculos são menores que caracteres minúsculos. 
b) Números são menores que letras. 
c) Espaços são menores que qualquer caractere que possa ser impresso. 
d) Caracteres acentuados e o ç são maiores que as letras não acentuadas (Mas 
obedecem a ordem entre si “á” é menor que “é” e “Á” é menor que “É”) 
 
4.1.4. Exercícios de reforço 
 
Complete a tabela abaixo com V ou F: 
 
01 5 <> 6 AND 5 <> 4 
02 5 = 5 OR 6 < 6 
03 5 <= 10 AND 5 <> 7 
04 12 >= 12 OR 12 < 10 
05 33 <> 5 OR 10 > 4 
06 6 <= 10 AND 8 = 8 
07 12 < 10 AND 56 <> 65 
08 34 < 30 OR 15 <= 5 
 
 
50 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
09 8 >= 10 AND 6 >= 7 
10 45 < 23 AND 8 <= 5 
 
11 (8 >= 10) AND (5 <> 7) 
12 (34 < 30) OR (3 <> 3) 
13 (5 = 5) XOR (10 > 4) 
14 (6 <= 10 OR 45 < 23) AND (8 = 8) 
15 (33 <> 5) AND (56 <> 65 OR 2 = 2) 
16 (52 <= 67 AND 23 > 20) OR (15 <= 5) 
17 (12 >= 12 AND 6 >= 7) AND (3 = 3) 
18 (6 <= 10 OR 29 <> 32) AND (8 <= 5) 
19 (12 < 10) AND (5 <> 4 OR 5 <> 6) 
20 (5 <> 6 AND 3 > 4) OR (6 < 6) 
 
21 (8 >= 10 AND 2 >= 2) AND (5 <> 7) 
22 (34 < 30) XOR (12 < 10 OR 3 <> 3) 
23 (6 <= 10 OR 45 < 23) AND (8 = 8) 
24 (5 = 5) XOR (10 > 4 AND 4 >= 3) 
25 (33 <> 5) AND (56 <> 65 XOR 2 = 2) 
26 (52 <= 67 AND 23 > 20) OR (15 <= 5) 
27 (12 >= 12 AND 6>= 7) AND (3 = 3) 
28 (5 <= 10 OR 29 <> 32) AND (8 <= 5) 
29 (4 < 1) AND (5 <> 4 OR 5 <> 6) 
30 (‘123’ > ‘87’) OR (‘012’ >= ‘6’) 
 
31 (‘Maria’ <= ‘Mario’ AND ‘É’ = ‘E’) 
32 (34 < 30) AND (12 < 10 OR X <> Y) 
33 ((6 <= 10) OR (45 < 23)) AND (‘A’ = ‘a’) 
34 (5 =>5) OR (10 > 4 OR 4 >= 3) OR (X > Y) 
35 (33 <> 5) OR (56 <> 65 AND 2 = 2) 
36 ((‘A’ < ‘B’) OR (‘X’ > ‘x’)) AND (15 <= 15) 
37 (12 <= 12 OR 6>= 7) AND (3 <= 5) 
38 (4 >= 15 AND 29 <> 30) OR (8 <= 5) 
39 (4 > 1) OR (5 <> A) OR (5 <> B) OR (A=B) 
40 (15 <= 17 AND 1 > 2) XOR (5 <= 5) 
 
 
 
 
 
 
51 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
4.2. Decisão lógica 
 
Normalmente as instruções em um programa são executadas uma após a outra, na 
ordem em que aparecem no programa. Isso é chamado de execução sequencial ou 
execução em linha. 
 
Muitas vezes em processamento de dados, devemos executar um determinado bloco 
de instruções em função de uma condicional, isto é, se determinada condição for satisfeita, 
o bloco será executado, caso contrário, não será. A decisão lógica possui apenas duas 
respostas possíveis, o verdadeiro (true) ou o falso (false), e nosso problema consiste em 
analisar quais instruções serão processadas em cada caso. 
 
Parece simples, mas realmente no início qualquer um de nós poderá sentir as 
dificuldades comuns de qualquer aprendizado. Veja a figura 22 abaixo para ilustrar melhor 
a decisão lógica. 
 
Figura 22: Representação gráfica (fluxograma) de uma decisão lógica. 
 
Neste caso, o “blocoA” será processado somente se a condição for verdadeira, caso 
contrário, o programa prossegue sua execução linear, ignorando o “blocoA”. 
 
4.3. Estrutura de controle de decisão “IF” 
 
Uma estrutura de decisão escolhe uma das duas opções possíveis de ações 
alternativas. Por exemplo, admita que para passar de ano na disciplina, o aluno necessita 
de média 7,0. Vamos gerar um pequeno fluxograma (figura 23) com esta condição e exibir 
a mensagem “Aluno Aprovado”, esperamos inclusive, que seja o seu caso. 
 
 
Condição 
BlocoA 
V F 
 
 
52 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Figura 23: Representação gráfica (fluxograma) da solução. 
 
Se a condição for verdadeira, então a mensagem éexibida e a próxima instrução é 
executada na ordem. Se a condição for falsa, a instrução de exibição é ignorada, e a 
próxima instrução é executada. 
 
Vejamos este fluxo com a programação C#. 
 
static void Main(string[] args) 
{ 
 float p1, p2, media; 
 
 Console.Clear(); 
 Console.Write("Valor da P1 : "); 
 p1 = float.Parse(Console.ReadLine()); 
 
 Console.Write("Valor da P2 : "); 
 p2 = float.Parse(Console.ReadLine()); 
 media = (p1 + p2) / 2; 
 
media > 
 = 7 . 0 
V F 
Aluno 
Aprovado 
Início 
P 1 
media = 
 ( P 1 + P 2 ) / 2 
P 2 
Fim 
Media 
 
 
53 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 Console.WriteLine("Media do aluno : {0}", media); 
 
 if (media >= 7.0) 
 { 
 Console.WriteLine("Aluno Aprovado"); 
 } 
 
 Console.ReadKey(); 
} 
 
Note que o código em C# é muito parecido, logicamente, com o fluxograma, 
demonstrando como o fluxograma pode ser útil como ferramenta de programação. A 
mensagem “Aluno Aprovado” será apresentada apenas se o aluno possuir média maior ou 
igual a 7 (sete). 
 
4.4. Operadores lógicos 
 
O C# utiliza alguns símbolos para representar os chamados operadores para 
comparação entre os argumentos, ou simplesmente, os operadores lógicos. São os 
seguintes (quadro 1): 
 
Operador Significado 
> Maior que 
< Menor que 
>= Maior ou igual que 
<= Menor ou igual que 
== Igual a 
!= Não igual a (diferente de) 
Quadro 1: Listagem de operadores lógicos. 
 
 
 
 
 
 
 
 
 
54 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
4.5. Estrutura de decisão “IF/ELSE” 
 
A estrutura de decisão “if” executa uma ação indicada apenas quando a condição é 
avaliada como sendo verdadeira, caso contrário, o programa prossegue linearmente, como 
já vimos. A estrutura de decisão “if/else” permite ao programador especificar blocos de 
instruções que serão executadas se a condição for verdadeira e, também, blocos de 
instruções que serão executadas se a condição for falsa. Graficamente (figura 24), temos 
a seguinte situação: 
 
 
Figura 24: Representação gráfica (fluxograma) da decisão lógica “if/else”. 
 
Neste caso, o “BlocoA” será executado se a condição for verdadeira, mas se a 
condição for falsa, então o “BlocoB” será processado, para então o programa prosseguir 
sequencialmente com as próximas instruções. 
 
Suponha então uma alteração em nosso programa exemplo, no sentido de exibir a 
mensagem “Aluno Aprovado”, se a média for maior ou igual a sete, mas exibir “Aluno 
Reprovado”, se a média for menor do que 7 (sete). 
 
O código em C# ficaria assim: 
 
if (media >= 7.0) 
{ 
Console.WriteLine("Aluno Aprovado"); 
} 
else 
 
Condição 
BlocoA BlocoB 
V F 
 
 
 
55 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
{ 
Console.WriteLine("Aluno Reprovado"); 
} 
 
Uma importante observação é que se um determinado bloco contiver mais de uma 
instrução, será necessário inserir os caracteres chaves “{ }” para representar o início e o 
final do bloco, mas lembre-se, isso é obrigatório apenas para mais de uma instrução no 
bloco. Por exemplo, o código acima poderia ser codificado da seguinte maneira: 
 
 
if (media >= 7.0) 
{ 
Console.WriteLine("Aluno Aprovado"); 
Console.WriteLine(“Parabéns!”); 
} 
else 
{ 
Console.WriteLine("Aluno Reprovado"); 
Console.WriteLine(“Ano que vem, recupera!”); 
} 
 
Como um desafio tente resolver o exercício abaixo: 
 
O usuário deverá digitar, via teclado, os coeficientes a, b e c de uma equação do 2º 
grau (ax2 + bx + c) e o programa deverá calcular e exibir suas raízes reais. Criamos duas 
condições para exibir estas raízes: 
 
• Se o valor “a” for igual a ZERO, exibir a mensagem “Não forma equação do 2º 
grau”. 
• Se o valor “∆” for negativo, exibir a mensagem “Não existem raízes reais”. 
 
Equação de 2º grau: 
 
∆= 𝑏2 − 4𝑎𝑐 
 
𝑥 =
−𝑏 ± √∆
2𝑎
 
 
 
56 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
4.6. Estrutura de decisão “IF” em cascata 
 
As instruções “if” pode ser aninhadas (colocado ou localizado em linha reta; posto em 
fila) dentro de outras instruções “if”. Dessa maneira, você pode encadear uma sequência 
de expressões booleanas (lógicas), que são testadas uma após a outra, até que umas delas 
seja avaliada como verdadeira. 
 
No exercício para calcular as raízes da equação, repare que o delta será comparado 
somente se o primeiro teste for falso. 
 
As estruturas “if/else” aninhadas podem testar múltiplos casos, colocando-as dentro 
de outras estruturas if/else. 
 
No exemplo abaixo, se o valor da variável “dia” for 0 (zero), o primeiro teste será 
avaliado como verdadeiro e “Domingo” será atribuído à variável “diaNome”. Se o valor de 
“dia” não for zero, o primeiro teste será falso e o controle passará para a cláusula else, que 
executará a segunda instrução “if” que irá comparar a variável dia com o valor 1 (um). A 
segunda instrução “if” só é avaliada se o primeiro teste for falso. Da mesma maneira, a 
terceira instrução “if” só será avaliada se o primeiro e o segundo testes forem falsos. 
 
namespace DiaSemana 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int dia; string diaNome; Console.Clear(); 
 Console.Write("Digite um valor de 0 a 6 : "); 
 dia = int.Parse(Console.ReadLine()); 
 
 if (dia == 0) 
 { 
 diaNome = "Domingo"; 
 } 
 else 
 { 
 
 
57 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 if (dia == 1) 
 { 
 diaNome = "Segunda-feira"; 
 } 
 else 
 { 
 if (dia == 2) 
 { 
 diaNome = "Terça-feira"; 
 } 
 else 
 { 
 if (dia == 3) 
 { 
 diaNome = "Quarta-feira"; 
 } 
 else 
 { 
 if (dia == 4) 
 { 
 diaNome = "Quinta-feira"; 
 } 
 else 
 { 
 if (dia == 5) 
 { 
 diaNome = "Sexta-feira"; 
 } 
 else 
 { 
 if (dia == 6) 
 { 
 diaNome = "Sábado"; 
 } 
 else 
 { 
 diaNome = "Não existe!"; 
 } 
 } 
 } 
 } 
 } 
 
 
58 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 } 
 Console.WriteLine("Dia da Semana : {0}", diaNome); 
 Console.ReadKey(); 
 } 
 
4.7. Operadores lógicos condicionais 
 
O C# também oferece operadores booleanos: o operador lógico “and”, que é 
representado pelo símbolo “&&” e o operador lógico “or”, que é representado pelo símbolo 
“||”. Coletivamente são conhecidos comooperadores lógicos condicionais. Sua finalidade é 
combinar expressões booleanas em expressões maiores. 
 
O resultado do operador “&&” é true, se todas as relações comparadas forem 
verdadeiras, enquanto, que o resultado do operador “||” é true, se pelo menos, uma das 
relações comparadas for verdadeira. 
 
Tabela das operações lógicas: 
 
Comparação 1 Comparação 2 AND (&&) OR (||) 
true true true true 
true false false true 
false true false true 
false false false false 
 
Vamos exemplificar com um programa para achar e exibir o maior de 3 (três) valores 
distintos que serão digitados pelo usuário. Faremos este programa de algumas maneiras 
diferentes para você se familiarizar com as várias formas da decisão lógica. 
 
a) A “solução 1” é uma solução clássica que utiliza a decisão aninhada, ou seja, 
instruções de decisão “dentro” de instruções de decisão. 
b) A “solução 2” se utiliza de operadores lógicos do tipo “e” (AND), mas faça uma 
análise e verifique que há perda de tempo nesta solução. 
c) A “solução 3” se utiliza de operador lógico e aninhamento de “ifs”. Esta é a melhor 
solução para este problema. 
 
 
59 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
d) A “solução 4” utiliza uma técnica de atribuições, evitando a cláusula “else”. 
Também é ótima solução. 
 
Solução 1 
 
namespace Solucao1 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int a, b, c; 
 Console.Clear(); Console.Write("1º valor : "); 
 a = int.Parse(Console.ReadLine()); 
 Console.Write("2º valor : "); 
 b = int.Parse(Console.ReadLine()); 
 Console.Write("3º valor : "); 
 c = int.Parse(Console.ReadLine()); 
 
 if (a > b) 
 { 
 if (a > c) 
 { 
 Console.WriteLine("Maior valor : {0}", a); 
 } 
 else 
 { 
 Console.WriteLine("Maior valor : {0}", c); 
 } 
 } 
 else 
 { 
 if (b > c) 
 { 
 Console.WriteLine("Maior valor : {0}", b); 
 } 
 else 
 { 
 Console.WriteLine("Maior valor : {0}", c); 
 } 
 } 
 
 
60 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.ReadKey(); 
 } 
 } 
} 
 
Solução 2 
 
namespace Solucao2 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int a, b, c; 
 Console.Clear(); 
 Console.Write("1º valor : "); 
 a = int.Parse(Console.ReadLine()); 
 Console.Write("2º valor : "); 
 b = int.Parse(Console.ReadLine()); 
 Console.Write("3º valor : "); 
 c = int.Parse(Console.ReadLine()); 
 
 if (a > b && a > c) 
 { 
 Console.WriteLine("Maior valor : {0}", a); 
 } 
 else 
 { 
 if (b > a && b > c) 
 { 
 Console.WriteLine("Maior valor : {0}", b); 
 } 
 else 
 { 
 if (c > a && c > b) 
 { 
 Console.WriteLine("Maior valor : {0}", c); 
 } 
 } 
 } 
 Console.ReadKey(); 
 
 
61 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 } 
} 
 
Solução 3 
 
namespace Solucao3 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int a, b, c; 
 Console.Clear(); 
 Console.Write("1º valor : "); 
 a = int.Parse(Console.ReadLine()); 
 Console.Write("2º valor : "); 
 b = int.Parse(Console.ReadLine()); 
 Console.Write("3º valor : "); 
 c = int.Parse(Console.ReadLine()); 
 
 if (a > b && a > c) 
 { 
 Console.WriteLine("Maior valor : {0}", a); 
 } 
 else 
 { 
 if (b > c) 
 { 
 Console.WriteLine("Maior valor : {0}", b); 
 } 
 else 
 { 
 Console.WriteLine("Maior valor : {0}", c); 
 } 
 } 
 Console.ReadKey(); 
 } 
 } 
} 
 
 
 
62 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
Solução 4 
 
namespace Solucao4 
{ 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 int a, b, c, maior; 
 Console.Clear(); 
 Console.Write("1º valor : "); 
 a = int.Parse(Console.ReadLine()); 
 Console.Write("2º valor : "); 
 b = int.Parse(Console.ReadLine()); 
 Console.Write("3º valor : "); 
 c = int.Parse(Console.ReadLine()); 
 
 if (a > b) 
 { 
 maior = a; 
 } 
 else 
 { 
 maior = b; 
 } 
 
 if (c > maior) 
 { 
 maior = c; 
 } 
 
 Console.WriteLine("Maior valor : {0}", maior); 
 Console.ReadKey(); 
 } 
 } 
} 
 
 
 
63 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
4.8. Lista de exercícios (1) 
 
1) Entrar via teclado, com dois valores distintos. Exibir o maior deles. 
2) Entrar via teclado, com dois valores distintos. Exibir o menor deles. 
3) Entrar com dois valores quaisquer. Exibir o maior deles, se existir, caso contrário, 
enviar mensagem avisando que os números são idênticos. 
4) Calcular e exibir a área de um retângulo, a partir dos valores da base e altura 
que serão digitados. Se a área for maior que 100, exibir a mensagem “Terreno 
grande”. 
5) Calcular e exibir a área de um retângulo, a partir dos valores da base e altura 
que serão digitados. Se a área for maior que 100, exibir a mensagem “Terreno 
grande”, caso contrário, exibir a mensagem “Terreno pequeno”. 
6) Entrar via teclado com três valores distintos. Exibir o maior deles. 
7) Uma escola com cursos em regime semestral, realiza 2 (duas) avaliações 
durante o semestre e calcula a média do aluno, da seguinte maneira: media = 
(p1 + 2p2) / 3. Fazer um programa para entrar via teclado com os valores das 
notas (P1 e P2) e calcular a média. Exibir a situação final do aluno (“Aprovado 
ou Reprovado”), sabendo que a média de aprovação é igual a 5 (cinco). 
8) Uma escola com cursos em regime semestral realiza duas avaliações durante o 
semestre e calcula a média do aluno, da seguinte maneira: media = (p1 + 2p2) / 
3. Fazer um programa para entrar via teclado com o valor da primeira nota (P1) 
e o programa deverá calcular e exibir quanto o aluno precisa tirar na segunda 
nota (P2) para ser aprovado, sabendo que a média de aprovação é igual a cinco. 
 
 
 
 
 
 
 
 
 
 
 
64 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
4.9. Lista de exercícios (2) 
 
1) Entrar com o peso e a altura de uma determinada pessoa. Após a digitação, 
exibir se esta pessoa está ou não com seu peso ideal. Veja tabela da relação 
peso/altura². 
 
Relação peso/altura2 Mensagem 
R< 20 Abaixo do peso 
20 <= R < 25 Peso ideal 
R >= 25 Acima do peso 
 
2) A partir de 3 (três) valores que serão digitados, verificar se formam ou não um 
triângulo. Em caso positivo, exibir sua classificação: “Isósceles, escaleno ou 
equilátero”. Um triânguloescaleno possui todos os lados diferentes, o triângulo 
isósceles, dois lados iguais e o equilátero, todos os lados iguais. Para existir 
triângulo é necessário que a soma de dois lados quaisquer seja maior que o 
outro, isto, para os três lados. 
 
3) Verificar se três valores quaisquer (A, B, C) que serão digitados formam ou não 
um triângulo retângulo. Lembre-se que o quadrado da hipotenusa é igual à soma 
dos quadrados dos catetos. 
 
4) Entrar com o peso, o sexo e a altura de uma determinada pessoa. Após a 
digitação, exibir se esta pessoa está ou não com seu peso ideal. Veja tabela da 
relação peso/altura2. 
 
Relação peso/altura2 
Feminino 
Mensagem 
R< 19 Abaixo do peso 
19 <= R < 24 Peso ideal 
R >= 24 Acima do peso 
 
 
 
 
 
65 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Relação peso/altura2 
Masculino 
Mensagem 
R< 20 Abaixo do peso 
20 <= R < 25 Peso ideal 
R >= 25 Acima do peso 
 
5) A partir dos valores da aceleração (a em m/s²), da velocidade inicial (v0 em m/s) 
e do tempo de percurso (t em s). Calcular e exibir a velocidade final de automóvel 
em km/h. Exibir mensagem de acordo com a tabela abaixo. Fórmula para o 
cálculo da velocidade em m/s: V = v0 + a. t. 
 
Velocidade em Km/h (V) Mensagem 
V < = 40 Veículo muito lento 
40 < V <= 60 Velocidade permitida 
60 < V <= 80 Velocidade de cruzeiro 
80 < V <= 120 Veículo rápido 
R >= 120 Veículo muito rápido 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
5. ESTRUTURAS DE CONTROLE DE REPETIÇÃO 
 
Em várias situações se faz necessário que um determinado conjunto de instruções 
seja repetido um certo número de vezes. Para que este tipo de processamento seja 
realizado, necessitamos utilizar uma “Estrutura de Repetição”, também conhecida como 
“loop” ou laço. A classificação das estruturas dependerá do número de vezes que o conjunto 
de instruções será executado. Desta forma podemos dividir as estruturas de repetição em 
laços contados e laços condicionais. 
 
5.1. Estrutura “WHILE” 
 
Existe uma maneira de se repetir um determinado bloco de instruções, enquanto uma 
condição permanecer verdadeira, ou seja, o programa irá executar as mesmas instruções 
repetidamente, enquanto uma determinada condição se mantiver como verdadeira. 
 
Utiliza-se a instrução “while” para executar repetidamente uma instrução enquanto 
uma determinada condição permanecer como verdadeira. Logicamente temos a seguinte 
estrutura: 
 
Figura 25: Fluxograma da estrutura de controle de repetição “While”. 
 
 
 
 
 
 
 
Condição 
BlocoA 
V 
F 
 
 
 
67 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Repare que a instrução “BlocoA” será executada se a condição testada for verdadeira 
e que, após executar o bloco, a condição é testada novamente, ou seja, ENQUANTO a 
condição permanecer como verdadeira o bloco de instruções será processado. Quando a 
condição resultar em falso, então o programa continuará sua execução linear, deixando 
assim, a estrutura de repetição. 
 
Outro detalhe também importante nesta estrutura é que a condição é testada ANTES 
de se executar o bloco de instruções, ou seja, se o bloco é processado, realmente a 
condição é verdadeira. Isso significa que nesta estrutura, se a condição for falsa na primeira 
vez que for testada, então o bloco não será executado nenhuma vez. 
 
Em contrapartida, devemos tomar cuidado também com os procedimentos que farão 
parte do bloco, pois se a condição sempre ficar como verdadeira, seu programa irá entrar 
em “loop” infinito, pois não teria como sair do laço (estrutura de repetição). 
 
Sintaticamente temos o seguinte: 
 
while (condição) 
{ 
 blocoA; 
} 
 
A condição é analisada antes de se executar o bloco de instruções, que deverá estar 
definido entre os caracteres chaves “{}”, a não ser, que o bloco tenha uma única instrução, 
onde não seriam necessárias as chaves para a definição do bloco. Isto significa que os 
caracteres chaves são necessários quando o bloco de instruções contiver mais de um 
comando. 
 
Assim como nas instruções de decisão lógica, a expressão a ser testada deverá estar 
entre os caracteres parênteses “()” e se a expressão for avaliada como falsa, na primeira 
avaliação, o bloco não será executado. 
 
 
 
 
 
68 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Exemplo 1: Vamos criar um programa para exibir valores inteiros de 1 a 10. 
 
 static void Main(string[] args) 
 { 
 int contador = 0; 
 while (contador < 10) 
 { 
 Console.WriteLine("Contador = {0}", contador); 
 contador++; 
 } 
 Console.ReadKey(); 
 } 
 
O resultado do processamento é apresentado na figura 26 abaixo. 
 
Figura 26: Resultado do processamento da aplicação do Exemplo 1 
 
Neste caso, enquanto o contador se mantém menor que dez, o laço é executado. 
Lembrando apenas que a expressão “contador++” é a mesma coisa que “contador = 
contador + 1”. 
 
 
 
 
 
 
69 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Desafio: Para um pequeno aquecimento, faça uma alteração no programa, no sentido 
de exibir na tela, a tabuada do número 7 (sete). 
 
Todas as instruções “while” devem terminar em algum ponto. Um erro muito comum 
é “esquecer” de criar procedimentos que façam a expressão analisada se tornar falsa, e se 
você esquecer, seu programa entrará em loop infinito. Por exemplo, no programa anterior, 
troque a condição contador <0 para contador >=0 e veja o resultado. 
 
Vamos agora exemplificar com mais códigos para você melhorar seu aprendizado. 
 
Exemplo 2: Criar uma rotina de entrada que aceite somente um valor positivo. 
 
 static void Main(string[] args) 
 { 
 int x = 0; 
 
 while (x <= 0) 
 { 
 Console.Write("Valor positivo: "); 
 x = int.Parse(Console.ReadLine()); 
 } 
 Console.Write("OK"); 
 Console.ReadKey(); 
 } 
 
Exemplo 3: Entrar com dois valores via teclado, onde o segundo deverá ser maior que 
o primeiro. Caso contrário solicitar novamente apenas o segundo valor. 
 
static void Main(string[] args) 
 { 
 int a, b; 
 
 Console.Write("1º valor :"); 
 a = int.Parse(Console.ReadLine()); Console.Write("2º valor :"); 
 b = int.Parse(Console.ReadLine()); 
 
 while (b <= a) 
 
 
70 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 { 
 Console.Write("2º valor :"); 
 b = int.Parse(Console.ReadLine()); 
 } 
 
 Console.Write("OK"); 
 Console.ReadKey(); 
 } 
 
Exemplo 4: Entrar via teclado com o sexo de determinado usuário, aceitar somente 
“F” ou “M” como respostas válidas. 
 
 static void Main(string[] args) 
 { 
 char s; 
 
 Console.Write("Sexo:"); 
 s = Console.ReadKey().KeyChar; 
 
 while (s != 'M' && s != 'F') 
 { 
 Console.SetCursorPosition(5, 0); 
 s = Console.ReadKey().KeyChar; 
 } 
 
 Console.Write("\nOK"); 
 Console.ReadKey(); 
 } 
 
 
 
 
 
 
 
 
 
 
 
 
 
71 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
5.1.1. Lista de exercícios 
 
1) Criar uma rotina de entrada que aceite somente um valor positivo. 
2) Entrar com 2 (dois) valores via teclado, onde o segundo deverá ser maior que 
o primeiro. Casocontrário solicitar novamente apenas o segundo valor. 
3) Entrar via teclado com o sexo de determinado usuário, aceitar somente “F” ou 
“M” como respostas válidas. 
4) Exibir a tabuada do número 5 (cinco) no intervalo de um a dez. 
5) Entrar via teclado com um valor qualquer. Travar a digitação, no sentido de 
aceitar somente valores positivos. Após a digitação, exibir a tabuada do valor 
solicitado, no intervalo de um a dez. 
6) Entrar via teclado com um valor (X) qualquer. Travar a digitação, no sentido de 
aceitar somente valores positivos. Solicitar o intervalo que o programa que 
deverá calcular a tabuada do valor digitado, sendo que o segundo valor (B), 
deverá ser maior que o primeiro (A), caso contrário, digitar novamente somente 
o segundo. Após a validação dos dados, exibir a tabuada do valor digitado, no 
intervalo decrescente, ou seja, a tabuada de X no intervalo de B para A. 
7) Exibir a tabuada dos valores de um a vinte, no intervalo de um a dez. Entre as 
tabuadas, solicitar que o usuário pressione uma tecla. 
8) Exibir a soma dos números inteiros positivos do intervalo de um a cem. 
9) escreva um programa que receba via teclado 10 (dez) valores e que, ao final, 
exiba o maior e menor deles. 
10) Exibir os 30 (trinta) primeiros valores da série de Fibonacci. A série: 1, 1, 2, 3, 
5, 8, ... 
11) Calcular e exibir a soma dos “N” primeiros valores da sequência abaixo. O valor 
“N” será digitado, deverá ser positivo, mas menor que cinquenta. Caso o valor 
não satisfaça a restrição, enviar mensagem de erro e solicitar o valor 
novamente. 
 
Sequência: 
1
2
,
2
3
,
3
4
,
4
5
, … 
 
 
 
72 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
12) Descreva um programa que receba via teclado 10 (dez) valores e que, ao final, 
exiba o maior e menor deles. 
13) Descreva um programa que calcule o resto da divisão de dois números A e B 
(A>B) utilizando somente subtrações. Faça todas as proteções necessárias. 
14) Descreva um programa que solicita que sejam digitados o peso e o sexo de um 
grupo de 100 (cem) pessoas. No final, o programa deverá mostrar na tela a 
média do peso dos homens e a média do peso das mulheres. 
15) Entrar via teclado com “N” valores quaisquer. O valor “N” (que representa a 
quantidade de números) será digitado, deverá ser positivo, mas menor que 
vinte. Caso a quantidade não satisfaça a restrição, enviar mensagem de erro e 
solicitar o valor novamente. Após a digitação dos “N” valores, exibir: 
 
a) O maior valor; 
b) O menor valor; 
c) A soma dos valores; 
d) A média aritmética dos valores; 
e) A porcentagem de valores que são positivos; 
f) A porcentagem de valores negativos. 
 
5.2. Estrutura “DO-WHILE” 
 
A instrução while faz o teste da condição antes de executar o laço (loop), já a instrução 
“Do While” fará o teste condicional APÓS a iteração do bloco de instruções. Isso significa 
que neste caso, o laço será executado com certeza pelo menos uma vez, pois a condição 
será testada depois do bloco. 
 
Da mesma maneira que a instrução “while” aqui também executará um bloco de 
instruções enquanto uma condição se mantém como verdadeira. Logicamente temos o 
seguinte gráfico: 
 
 
 
73 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 27: Fluxograma da estrutura de controle de repetição “Do While”. 
 
Neste caso, o “BlocoA” será executado e DEPOIS a condição é avaliada e se 
verdadeira, o laço é processado novamente. O loop deixa de ser executado quando a 
condição avaliada for falsa. 
 
Sintaticamente temos o seguinte: 
 
do 
{ 
 blocoA; 
} while (condição); 
 
As mesmas regras dos caracteres chaves “{}” valem também para esta estrutura, ou 
seja, é obrigatório o uso dos caracteres se o bloco contiver mais de uma instrução. 
 
Exemplo 1: Vamos criar um programa para exibir valores inteiros de 1 a 10. 
 
 static void Main(string[] args) 
 { 
 int contador = 0; 
 do 
 { 
 contador++; 
 Console.WriteLine("Contador = {0}", contador); 
 } while (contador < 10); 
 
 Console.ReadKey(); 
 
BlocoA 
Condição V 
F 
 
 
 
74 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 
 
Figura 28: Resultado do processamento da aplicação do Exemplo 1 
 
Para acompanhar melhor o que está acontecendo com a variável “contador” e, 
também, com a avaliação, faça uma execução passo a passo do programa. No menu Debug 
clique na opção “Step Into”, ou pressione a tecla de atalho “F11”. 
 
 
Figura 29: Opção “Step Info” para “debugação” do código fonte. 
 
 
 
75 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
Uma linha ficará em destaque, representando qual a instrução que será processada 
pelo programa e se você posicionar o indicador do mouse sobre a linha conseguirá 
acompanhar os valores que estarão na memória naquele instante da execução. 
 
Para encerrar este procedimento de acompanhamento, pressione as teclas “Shift+F5”, 
ou no menu “Debug”, acione a opção “Stop Debugging”. Poderá fechar a janela da 
“Console”, que o processamento também será interrompido. 
 
Vamos agora exemplificar com mais códigos para você melhorar seu aprendizado. 
 
Exemplo 2: Criar uma rotina de entrada que aceite somente um valor positivo. 
 
 static void Main(string[] args) 
 { 
 int x; 
 do 
 { 
 Console.Write("Valor positivo: "); 
 x = int.Parse(Console.ReadLine()); 
 } while (x <= 0); 
 
 Console.Write("OK"); 
 Console.ReadKey(); 
 } 
 
Exemplo 3: Entrar com dois valores via teclado, onde o segundo deverá ser maior que 
o primeiro. Caso contrário solicitar novamente apenas o segundo valor. 
 
 static void Main(string[] args) 
 { 
 int a, b; 
 b = 0; 
 
 Console.Write("1º valor :"); 
 a = int.Parse(Console.ReadLine()); 
 
 
 
76 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 do 
 { 
 Console.Write("2º valor :"); 
 a = int.Parse(Console.ReadLine()); 
 } while (b <= a); 
 
 Console.Write("OK"); 
 Console.ReadKey(); 
 } 
 
Exemplo 4: Entrar via teclado com o sexo de determinado usuário, aceitar somente 
“F” ou “M” como respostas válidas. 
 
 static void Main(string[] args) 
 { 
 char s; 
 
 Console.Write("Sexo:"); 
 
 do 
 { 
 Console.SetCursorPosition(5, 0); 
 s = Console.ReadKey().KeyChar; 
 } while (s != 'M' && s != 'F'); 
 
 Console.Write("\nOK"); 
 Console.ReadKey(); 
 } 
 
 
 
 
 
 
 
 
 
 
 
 
 
77 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
5.2.1. Lista de exercícios 
 
1) Descreva um programa que calcule a soma dos números inteiros positivos 
menores que 100. 
2) Descreva um programa que exiba no monitor os 100 primeiros números inteiros 
múltiplos de 5. 
3) Descreva um programa que a calcule a soma de: 1 + 3 + 5 + 7 + … + 121. 
4) Descreva um programa que exiba no monitor a sequência de números: 10, 8, 
6, 4, 2,0. 
5) Calcule e exiba no monitor a soma e o produto dos 5 primeiros termos da série: 
 
....
25
1
16
1
9
1
4
1
1
1
+++++
 
 
6) Desenvolva um programa que multiplique dois números inteiros A e B, que são 
digitados via teclado, utilizando somente somas. Proteja para que a digitação 
garanta que A seja maior que B bem como A e B sejam inteiros. 
7) Analise o tempo de execução do problema anteriore determine uma solução 
na qual a multiplicação ocorra num tempo mínimo. 
8) Desenvolva um programa que exiba no vídeo os 20 primeiros números primos. 
Um número é, por definição, primo se ele não tem divisores, exceto 1 e ele 
próprio. 
9) Desenvolva um programa que calcule a soma dos algarismos de um número 
inteiro “N” digitado via teclado. 
10) Descreva um programa que calcule a potência inteira N qualquer de um número 
positivo B utilizando somente produtos. Prever a possibilidade de N ser maior, 
menor ou igual a zero. 
11) Desenvolva um programa que calcule e exiba no monitor o produto dos 
números inteiros múltiplos de 9 menores que 39. 
12) Elabore um algoritmo que escreva todos os números múltiplos de 7 entre 1 e 
100. 
13) Descreva um programa que receba via teclado 50 valores que são digitados e 
a cada 5 valores exiba a soma parcial deles. 
 
 
78 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
14) Calcule e exiba no monitor a soma dos 20 primeiros termos da série: 
 
1
2
+
2
3
+
3
4
+
4
5
+⋯ 
 
15) Calcule e exiba no monitor a soma dos 10 primeiros termos da série: 
 
1!
1
+
2!
3
+
3!
5
+
4!
7
+ ⋯ 
 
5.3. Estrutura “FOR” 
 
Existe uma maneira de se repetir um determinado bloco de instruções, enquanto uma 
condição permanecer verdadeira, ou seja, o programa irá executar as mesmas instruções 
repetidamente, enquanto uma determinada condição se mantiver como verdadeira. Vimos 
a utilização desta técnica na última aula, através da estrutura “while”. 
 
Muito semelhante também será a estrutura de repetição deste capítulo, pois a 
estrutura de repetição “For” também executa um determinado bloco enquanto uma 
condição permanecer verdadeira, normalmente, um contador controla o laço. 
 
Esta estrutura consiste em repetir blocos de instruções controlados por contadores. 
Logicamente temos a seguinte estrutura (figura 30): 
 
 
Figura 30: Fluxograma da estrutura de controle de repetição “For”. 
 
 
 
79 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
A variável “V” irá variar de “A” até “B”, e para cada valor de “V”, o bloco de instruções 
será processado. Dizemos que: 
 
• V = variável de controle do laço. 
• A = Valor inicial de V. 
• B = Valor final de V. 
• P = Representa o passo da variação, isto é, de quantas unidades o controlador (V) 
será alterado, para se processar a variação. 
 
Por exemplo, para X = 0 até 10 com passo 2, terá a variável “X”, assumindo os 
seguintes valores: 0, 2, 4, 6, 8, 10. Um de cada vez, evidentemente. 
 
Outro detalhe também importante nesta estrutura é que a condição é testada ANTES 
de se executar o bloco de instruções, ou seja, se o bloco é processado, realmente a 
condição é verdadeira. Isso significa que nesta estrutura, se a condição for falsa na primeira 
vez que for testada, então o bloco não será executado nenhuma vez. 
 
Em contrapartida, devemos tomar cuidado também com os procedimentos que farão 
parte do bloco, pois se a condição sempre ficar como verdadeira, seu programa irá entrar 
em “loop” infinito, pois não teria como sair do laço (estrutura de repetição). Isto também é 
notado nas estruturas “while” e “do..while”, já vistas em capítulos anteriores. 
 
Sintaticamente temos o seguinte: 
 
for (v = a; v <= b; v++) 
{ 
BlocoA; 
} 
 
Onde: 
 
• v => Nome da variável de controle. 
 
 
80 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
• a => Valor inicial da variável de controle. 
• v <= b => Condição de continuação do laço. 
• b => Valor final de variável de controle. 
• v++ => Incremento da variável de controle 
 
As partes da inicialização, expressão booleana e atualização da variável de controle 
de uma instrução “for” devem sempre ser separadas por ponto-e-vírgulas (;). 
 
A condição é analisada antes de se executar o bloco de instruções, que deverá estar 
definido entre os caracteres chaves “{}”, a não ser, que o bloco tenha uma única instrução, 
onde não seriam necessárias as chaves para a definição do bloco. Isto significa que os 
caracteres chaves são necessários quando o bloco de instruções contiver mais de um 
comando. 
 
Exemplo 1: Vamos criar um programa para exibir valores inteiros de 1 a 10. 
 
static void Main(string[] args) 
{ 
 int contador; 
 for (contador = 1; contador <= 10; contador++ ) 
 { 
 Console.WriteLine("Contador = {0}", contador); 
 } 
 Console.ReadKey(); 
 } 
 
 
 
81 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Figura 31: Solução do processamento da solução do Exemplo 1. 
 
Neste caso, enquanto o contador se mantém menor ou igual a dez, o laço será 
executado. Lembrando apenas que a expressão “contador++” é a mesma coisa que 
“contador = contador + 1”. 
 
Podemos também fazer os laços em ordem decrescente, ou seja, a variável de 
controle irá diminuir enquanto não atingir o valor final, que seria menor que o valor inicial. 
Por exemplo, vamos fazer o mesmo projeto, mas exibir os valores em ordem decrescente, 
de dez para um. 
 
 static void Main(string[] args) 
 { 
 int contador; 
 
 for (contador = 10; contador >= 1; contador-- ) 
 { 
 Console.WriteLine("Contador = {0}", contador); 
 } 
 Console.ReadKey(); 
 } 
 
Neste caso, a variável de controle “contador” iniciou com o valor 10 (dez), executou o 
laço e foi alterada, sendo decrementada em uma unidade (contador--). Enquanto o contador 
se mantinha maior ou igual a 1 (um), o laço era repetido. 
 
 
82 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
A inicialização ocorre uma única vez no início do loop. Se a expressão booleana 
(condição) for avaliada como verdadeira, o laço será processado. A variável de controle é 
atualizada e a expressão é reavaliada. Se a condição ainda for verdadeira, o laço se repete, 
caso contrário, o programa prossegue sua execução linear, após o laço “for”. 
 
Alguns exemplos usando a estrutura “for” 
 
a) Variação da variável de controle de 1 a 10, em incrementos de 1. 
for (int i = 1; i <= 10; i++) 
 
b) Variação da variável de controle de 10 a 1 em incrementos de -1 (decrementos de 
1). 
for (int i = 10; i >= 1; i--) 
 
c) Variação da variável de controle de 5 a 65 em incrementos de 5 (passos de 5) 
for (int i = 5; i <= 65; i += 5) 
 
d) Variação da variável de controle de 20 a 0 em decrementos de 2 (passos de -2) 
for (int i = 20; i >= 0; i -= 2) 
 
Quando uma variável de controle for declarada na estrutura “for”, então ela somente 
poderá ser utilizada dentro do laço, ou seja, após o corpo da estrutura gera um erro de 
compilação. 
 
Se necessário, é possível fornecer várias inicializações e várias atualizações em um 
loop “for” (com apenas uma expressão lógica). Para conseguir isso, separe as várias 
inicializações e atualizações por vírgula, como mostrado no exemplo abaixo: 
 
 static void Main(string[] args) 
 { 
 int a, b, t; 
 
 for (a = 1, b = 10; a <= 10; a++, b--) 
 { 
 t = a * b; 
 
 
83 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.WriteLine("{0} x {1} = {2}", a, b, t); 
 } 
 
 Console.ReadKey(); 
 } 
 
A variável “a” será inicializada com o valor 1 e a variável “b” será inicializada com o 
valor 10. Enquanto a expressão lógica “a <= 10” resultar em verdadeiro, o laço será 
executado. Após o loop, a variável “a” é incrementada e a variável “b” é decrementada, 
simultaneamente. Vamos agora exemplificar com mais códigos paravocê melhorar seu 
aprendizado. 
 
Exemplo 2: Exibição da tabuada do número 5 (cinco) no intervalo de 1 (um) a 10 (dez). 
 
 static void Main(string[] args) 
 { 
 int i, t; 
 
 for (i = 1; i <= 10; i++) 
 { 
 t = 5 * i; 
 Console.WriteLine("{0} x {1} = {2}", 5, i, t); 
 } 
 
 Console.ReadKey(); 
 } 
 
5.3.1. Lista de exercícios 
 
1) Calcular e exibir a soma dos “N” primeiros valores da sequência abaixo. O valor 
“N” será digitado, deverá ser positivo, mas menor ou igual a 20 (vinte). Caso o 
valor não satisfaça a restrição, enviar mensagem de erro e solicitar o valor 
novamente. 
 
1
2
,
2
3
,
3
4
,
4
5
,… 
 
 
 
 
84 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
2) Calcular e exibir a soma dos “N” primeiros valores da sequência abaixo. O valor 
“N” será digitado, deverá ser positivo, mas menor ou igual a 50 (cinquenta). 
Caso o valor não satisfaça a restrição, enviar mensagem de erro e solicitar o 
valor novamente. 
 
2
1
,
5
8
,
10
27
,
17
64
,… 
 
3) A prefeitura de uma cidade fez uma pesquisa entre seus 500 (quinhentos) 
habitantes, coletando dados sobre o salário e o número de filhos. A prefeitura 
deseja saber: 
 
a) A média dos salários da população; 
b) A média dos números de filhos; 
c) O maior salário; 
d) A porcentagem de pessoas com salários até R$ 1.000,00. 
 
4) Um supermercado deseja facilitar o trabalho de seus caixas utilizando um 
computador para calcular quantas moedas de cada espécie (0,01, 0,05, 0,10, 
0,25, 0,50 e 1,00) devem ser devolvidas como troco. Desenvolva um programa 
para que o caixa digite o valor da compra, a quantia dada para pagamento e 
que após o processamento exiba no monitor o número de moedas a ser 
devolvida de cada espécie. 
 
5) Uma pessoa faz uma aplicação no valor digitado pelo usuário, durante 11 
meses, a uma taxa de juros compostos de 5% a.m., capitalizados 
mensalmente. Calcular o montante no final do prazo. 
 
 
 
 
 
 
 
 
 
85 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
6. VARIÁVEIS INDEXADAS 
 
6.1. Conceitos 
 
Em muitas situações práticas, se faz necessário à referência a um conjunto de 
variáveis do mesmo tipo através de um mesmo nome. Para que isto seja possível, foram 
criadas as variáveis indexadas, também chamadas de arrays ou variáveis compostas 
homogêneas, que representam um conjunto de variáveis do mesmo tipo, acessadas pelo 
mesmo nome e diferenciadas entre si através de uma posição dentro desta estrutura. Esta 
posição é chamada de índice ou subscritor do array, e as variáveis indexadas podem ser 
definidas tendo um ou mais índices. Chamados de vetor as variáveis indexadas que 
possuem apenas um índice. Quando uma variável indexada possuir mais de um índice, a 
chamaremos de matriz. 
 
Exemplo: 
 
X[3] 
 
 
 
A variável indexada X é afetada por 3 (três) índices, ou seja, 
podemos dizer que ela poderá armazenar 3 (três) informações 
distintas, todas do mesmo tipo. 
 
As variáveis indexadas apresentam algumas propriedades que fazem com elas sejam 
extremamente úteis em várias situações, a saber: 
 
a) O índice pode ser genérico: pode-se escrever, por exemplo, F[Y], onde o índice é 
Y desde que o valor de Y seja encontrado na memória conforme o exemplo: 
 
K=7 
X=D[K] 
 
 
 
Neste ponto do programa, o computador procura em sua memória 
o valor de K e passa então a entender que a variável indexada é 
D[7] 
 
b) É possível fazer operações internas no índice 
 
T=5 
Z=W[T+4] 
 
 
Neste ponto do programa, o computador efetua a operação T+4 
e passa a entender que a variável indexada é W[9] 
 
 
86 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
As variáveis indexadas são tratadas no computador de forma idêntica às variáveis 
convencionais, ou seja, elas representam endereços de memória nos quais estão 
armazenados os valores. 
 
No exemplo abaixo é demonstrado um vetor “prof” com seus índices e conteúdo: 
 
prof[0] = “José” 
prof[1] = “João” 
prof[2] = “Joana” 
prof[3] = “Maria” 
prof[4] = “Fernando” 
prof[5] = “Katia” 
 
Este é um vetor do tipo “string” chamado “prof”, contém 6 elementos, (nomes dos 
professores). O programa poderá fazer referência a qualquer elemento, bastando para isto, 
identificar a posição do elemento, entre os caracteres colchetes “[ ]”. 
 
Observações: 
 
a) Os números de 0 a 5 representam a posição do elemento (índice do array); 
b) Os valores “José”, “João” etc., representam o conteúdo do vetor “prof”; 
c) Todos os elementos possuem o mesmo nome (prof); 
d) O primeiro elemento de todo array é o elemento 0 (zero). Assim o primeiro 
elemento deste vetor é o prof[0], que contém o nome “José”, o segundo é prof[1] 
que contém “João”, o terceiro é prof[2] que contém “Joana” e assim até o enésimo 
elemento que é prof[n-1] que contém “Katia”. Isto significa que se o vetor possuir 
n elementos, os índices variam de 0 (zero) a n-1 (inteiros). 
 
Existe uma propriedade para vetores chamada “Length” na linguagem C#, que retorna 
o número de ocorrências de um vetor, ou seja, o tamanho do vetor em número de 
elementos. Em nosso exemplo, “prof.Length” retorna o valor 6 (seis). 
 
 
 
 
 
87 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
6.2. Declarando um vetor 
 
Especificamos o tipo dos elementos e usamos o operador new para alocar de 
maneira dinâmica os dados em memória. 
 
Exemplo 1 int[] x = new int[15]; 
Aloca 15 elementos para o vetor inteiro x. 
Isto também pode ser feito em dois momentos: 
int[] x; 
x = new int[15]; 
Exemplo 2 double[] r = new double[10]; 
Aloca 10 elementos para o vetor real r. 
Exemplo 3 string[] prof = new string[6]; 
Aloca 6 elementos para o vetor string prof. 
 
Vejamos o programa abaixo utilizando o vetor “prof”. 
 
 static void Main(string[] args) 
 { 
 string[] prof = new string[6] { 
 "José", 
 "João", 
 "Joana", 
 "Maria", 
 "Fernando", 
 "Katia" }; 
 
 for (int i = 0; i < prof.Length; i++) 
 { 
 Console.WriteLine("{0}", prof[i]); 
 } 
 
 Console.ReadKey(); 
 } 
 
Neste caso, o vetor “prof” já foi declarado e inicializado com os elementos (nomes 
dos professores). O laço simplesmente exibirá os elementos no vídeo. Repare que foi 
utilizada a propriedade “Length” para saber o tamanho do vetor. 
 
 
88 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
 
Desafio: Faça uma alteração no programa, no sentido de solicitar os nomes dos 
professores para o usuário, ou seja, os nomes serão digitados e não atribuídos 
pelo programa. 
 
 
No exemplo abaixo, serão digitados 10 valores quaisquer, e após a digitação, o 
programa irá “varrer” o vetor e acumular os valores de todos os elementos na variável 
soma. A soma será apresentada na tela, assim como os valores dos elementos digitados. 
 
 static void Main(string[] args) 
 { 
 double soma = 0; 
 int i; 
 double[] valor = new double[10]; // Entrada de dados no vetor 
 for (i = 0; i < valor.Length; i++) 
 { 
 Console.Write("{0}º valor :", i + 1); 
 valor[i] = double.Parse(Console.ReadLine()); 
 } 
 
 Console.Clear(); 
 // Varrer o vetor e calcular a soma 
 
 for (i = 0; i < valor.Length; i++) 
 { 
 Console.WriteLine("{0}º valor : {1}", i + 1, valor[i]); 
 soma += valor[i];} 
 
 // Exibir a soma dos valores 
 Console.WriteLine("Soma dos valores : {0:f1}", soma); Console.ReadKey(); 
 } 
 
 
 
 
 
89 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Mais exemplos... 
 
1) A armazenar 10 (dez) números na memória do computador. Exibir os valores na 
ordem inversa à da digitação. 
 
 static void Main(string[] args) 
 { 
 int i; 
 int[] x = new int[10]; // Entrada de dados 
 for (i = 0; i < x.Length; i++) 
 { 
 Console.Write("{0}º valor : ", i + 1); 
 x[i] = int.Parse(Console.ReadLine()); 
 } 
 
 // Exibir em ordem inversa a da digitação 
 for (i = x.Length - 1; i >= 0; i--) 
 Console.WriteLine("{0}º valor : {1}", i + 1, x[i]); 
 Console.ReadKey(); 
 } 
 
2) Armazenar 10 (dez) valores na memória do computador. Após a digitação dos 
valores, criar uma rotina para ler os valores e achar e exibir o maior deles. 
 
 static void Main(string[] args) 
 { 
 int i, maior; 
 int[] x = new int[10]; 
 
 // Entrada de dados 
 for (i = 0; i < x.Length; i++) 
 { 
 Console.Write("{0}º valor : ", i + 1); 
 x[i] = int.Parse(Console.ReadLine()); 
 } 
 
 // Achar e exibir o maior valor 
 maior = x[0]; 
 for (i = 1; i < x.Length; i++) 
 
 
90 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 { 
 if (x[i] > maior) 
 { 
 maior = x[i]; 
 } 
 } 
 Console.WriteLine("Maior valor : {0}", maior); 
 Console.ReadKey(); 
 } 
 
3) Armazenar 20 (vinte) valores em um vetor. Após a digitação, entrar com uma 
constante multiplicativa que deverá multiplicar cada um dos valores do vetor e 
armazenar o resultado no próprio vetor, na respectiva posição. 
 
 static void Main(string[] args) 
 { 
 int i, k; 
 int[] x = new int[20]; 
 
 // Entrada de dados 
 for (i = 0; i < x.Length; i++) 
 { 
 Console.Write("{0}º valor:", i + 1); 
 x[i] = int.Parse(Console.ReadLine()); 
 } 
 
 // valor da constante multiplicativa Console.Write("Valor da constante : "); 
 k = int.Parse(Console.ReadLine()); 
 
 // Multiplicar o vetor pela constante 
 for (i = 0; i < x.Length; i++) 
 { 
 x[i] = x[i] * k; 
 Console.WriteLine("{0}º valor: {1}", i + 1, x[i]); 
 } 
 
 Console.ReadKey(); 
 } 
 
 
 
 
91 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Conforme exposto anteriormente, chamados de vetor as variáveis indexadas que 
possuem apenas um índice. Quando uma variável indexada possuir mais de um índice, a 
chamaremos de matriz. Vejamos um exemplo de programa em linguagem C# que recebe 
6 (seis) valores inteiros através do teclado, os armazena em uma matriz e, na sequência, 
ainda, os exibe no vídeo. 
 
 static void Main(string[] args) 
 { 
 int i, j, contador = 1; 
 int[,] matriz = new int[2,3]; 
 
 // Entrada de dados via teclado e armazenamento na MATRIZ 
 for (i = 0; i < 2; i++) 
 { 
 for (j = 0; j < 3; j++) 
 { 
 Console.Write("Digite o {0} valor : ", contador); 
 matriz[i,j] = int.Parse(Console.ReadLine()); 
 contador++; 
 } 
 } 
 
 //Exibição dos valores armazenados na MATRIZ 
 for (i = 0; i < 2; i++) 
 { 
 for (j = 0; j < 3; j++) 
 { 
 Console.WriteLine("O valor da posição posicao {0},{1} é {2}", i, j, matriz[i, j]); 
 } 
 } 
 
 Console.ReadKey(); 
 } 
 
Vejamos outro exemplo com matriz no qual o objetivo é criar um programa para 
controlar as reservas de poltronas de uma peça teatral, sabendo que o teatro possui “X” 
seções de “Y” fileiras com “Z” cadeiras cada. Os valores de “X”, “Y” e “Z” serão digitados. 
 
 
 
92 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 static void Main(string[] args) 
 { 
 int num = 10; 
 string[,,] teatro = new string[num, num, num]; 
 int setor, fileira, cadeira, contador = 0; 
 string nome; 
 char resp; 
 
 do 
 { 
 Console.Write("Digite o seu nome : "); 
 nome = Console.ReadLine(); 
 Console.Write("Digite o setor (1 a {0}) : ", num); 
 setor = int.Parse(Console.ReadLine()); 
 Console.Write("Digite a fileira (1 a {0}) : ", num); 
 fileira = int.Parse(Console.ReadLine()); 
 Console.Write("Digite a cadeira (1 a {0}) : ", num); 
 cadeira = int.Parse(Console.ReadLine()); 
 
 teatro[--setor, --fileira, --cadeira] = nome; 
 contador++; 
 
 resp = 'N'; 
 if (contador < num * num * num) 
 { 
 Console.Write("Deseja continuar (S/N)? "); 
 resp = char.Parse(Console.ReadLine().ToUpper()); 
 } 
 
 } while (resp != 'N' && (contador < num*num*num)); 
 
 for (setor = 0; setor < num; setor++) 
 for (fileira = 0; fileira < num; fileira++) 
 for (cadeira = 0; cadeira < num; cadeira++) 
 { 
 if (teatro[setor, fileira, cadeira] != null) 
 { 
 Console.WriteLine("Nome = {0}, Setor = {1}, Fileira = {2}, Cadeira {3}", teatro[setor, fileira, 
cadeira], setor + 1, fileira + 1, cadeira + 1); 
 } 
 } 
 Console.ReadKey(); 
 
 
93 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 
6.3. Lista de exercícios com Vetores 
 
1) Desenvolva um programa que armazene em um vetor os 30 primeiros termos 
da série abaixo: 
 
1
2
,
2
3
,
3
4
,
4
5
,… 
 
2) Armazenar vinte valores na memória. Após a digitação, entrar com uma 
constante multiplicativa que deverá multiplicar cada um dos valores do vetor e 
armazenar o resultado em outro vetor, porém em posições equivalentes. Exibir 
os vetores na tela. 
3) Crie um programa que armazene na memória do computador, os 100 primeiros 
números inteiros, múltiplos de 5. 
4) Descreva um programa que armazene em um vetor 100 números inteiros e 
positivos que são digitados, e que em seguida leia esse vetor calculando a 
média aritmética dos números que são ímpares. 
5) Armazenar um máximo de 20 valores em um vetor. A quantidade de valores a 
serem armazenados será escolhida pelo usuário. Enviar mensagem de erro, 
caso a quantidade de valores escolhida esteja fora da faixa possível e solicitar 
a quantidade novamente. Após a digitação dos valores, criar uma rotina de 
consulta, onde o usuário digita um número e o programa exibe em qual posição 
do vetor este número está localizado. Se o número não for encontrado, enviar 
mensagem “Valor não encontrado!”. 
6) Armazenar o nome, sexo e idade de cem pessoas. Consistir as entradas no 
sentido de aceitar apenas “F” ou “M” para o sexo e valores positivos para a 
idade. Após a digitação dos dados, exibiros dados (nome, sexo e idade) de 
todas as pessoas do sexo feminino. 
7) Desenvolva um programa que receba uma palavra via teclado e verifique se a 
mesma é palíndroma. Uma palavra é palíndroma se é idêntica quando lida de 
trás para diante. Por exemplo, "ovo" é um palíndromo. 
8) Armazenar vinte valores em um vetor. Após a digitação, exibir os valores em 
ordem crescente. 
 
 
94 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
6.4. Lista de exercícios com Matrizes 
 
1) Armazenar seis valores em uma matriz de ordem 2x3. Apresentar os valores 
na tela. 
2) Armazenar seis valores em uma matriz de ordem 3x2. Apresentar os valores 
na tela. 
3) Armazenar seis nomes em uma matriz de ordem 2x3. Apresentar os nomes na 
tela. 
4) Entrar via teclado com doze valores e armazená-los em uma matriz de ordem 
3x4. Após a digitação dos valores solicitar uma constante multiplicativa, que 
deverá multiplicar cada valor matriz e armazenar o resultado na própria matriz, 
nas posições correspondentes. 
5) Entrar via teclado com doze valores e armazená-los em uma matriz de ordem 
3x4. Após a digitação dos valores solicitar uma constante multiplicativa, que 
deverá multiplicar cada valor matriz e armazenar o resultado em outra matriz 
de mesma ordem, nas posições correspondentes. Exibir as matrizes na tela, 
sob a forma matricial, ou seja, linhas por colunas. 
6) Entrar com uma matriz de ordem MxN, onde a ordem também será escolhida 
pelo usuário, sendo que no máximo 10x10. Após a digitação dos elementos, 
criar e exibir a matriz transposta. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
7. PROGRAMAÇÃO MODULAR 
 
7.1. Conceitos 
 
Todo programa de computador profissional executa uma série de diferentes tarefas 
como, por exemplo, realizar diferentes cálculos, emitir diferentes relatórios, arquivar 
diferentes conjuntos de informações, enviar diferentes informações aos terminais etc. 
 
Quando um problema dessa natureza é desenvolvido, é construído um conjunto de 
subprogramas chamados módulos, cada um dos quais executando uma tarefa específica. 
A junção desse conjunto de módulos constitui o que se chama de um Sistema. A grande 
vantagem desse tipo de procedimento é reduzir um grande programa a pequenos 
subprogramas, cada um dos quais será facilmente desenvolvido analisado e testado. Essa 
técnica chama-se Programação Modular. 
 
Como o Sistema é constituído de vários programas, se faz necessário à existência de 
um módulo que os administre. Este módulo determina qual deve ser executado a cada 
instante em função da determinação do usuário ou através da função de uma situação do 
momento. O módulo de programa que executa essa função é chamado de Módulo de 
gerenciamento do Sistema. 
 
O princípio básico deste método é resolver um problema complexo, dividindo-o em 
partes menores (subproblemas) e de soluções mais simples. Os subproblemas para os 
quais não for possível encontrar uma solução de imediata poderão ser novamente 
subdivididos. Ao solucionarmos todos os subproblemas menores, teremos solucionado 
também o problema como um todo. 
 
Este método também conhecido como Método dos Refinamentos Sucessivos 
representa uma sistemática de abordagem para resolução de problemas e implementação 
de aplicações. 
 
 
 
 
 
 
96 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
A estrutura básica de um módulo de gerenciamento de um Sistema é constituída de 
um “menu”, isto é, de uma lista de possíveis atividades realizadas pelo Sistema, entre as 
quais o usuário pode escolher seguido de uma estrutura de decisão que determina qual 
módulo (sub-rogaram) deve ser executado naquele momento. 
 
Estrutura da Programação Modular: 
 
Módulo A
Módulo B
Módulo A
Módulo B
Fim
Fim
Módulo C
Módulo C
Fim
 
No esquema acima é evidenciada a forma pela qual são invocados os módulos. Uma 
vez executados, eles realizam o processamento das instruções ali definidas e ao término 
da execução delas retornam ao programa chamador, para a próxima instrução após a 
chamada. 
 
É importante salientar que durante o processamento dos módulos A e B, o 
processamento do programa principal é paralisado. 
 
 
 
 
 
 
 
 
 
 
97 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Exemplo 1: Faça um algoritmo que leia a idade de uma pessoa expressa em 
anos, meses e dias e escreva a idade dessa pessoa expressa apenas em dias. 
Considerar ano com 365 dias e mês com 30 dias. 
 
 static int CalculaIdade (int anos, int meses, int dias) 
 { 
 int idade = (anos * 365) + (meses * 30) + dias; 
 return (idade); 
 } 
 
 static void Main(string[] args) 
 { 
 Console.Write("Digite a idade (anos) de uma pessoa: "); 
 int anos = int.Parse(Console.ReadLine()); 
 Console.Write("Digite a idade (meses) de uma pessoa: "); 
 int meses = int.Parse(Console.ReadLine()); 
 Console.Write("Digite a idade (dias) de uma pessoa: "); 
 int dias = int.Parse(Console.ReadLine()); 
 
 Console.Write("Esta pessoa possui {0} dias de idade", CalculaIdade(anos, meses, dias)); 
 Console.ReadKey(); 
 } 
 } 
 
Exemplo 2: Desenvolver um programa que permita ao usuário, selecionar as 
seguintes opções a partir de uma menu: (1) Digitação de valores em um array; (2) Cálculo 
da soma dos números pares; (3) Identificação do maior número do array; (4) Fim. 
 
 static void Criar_Array (ref int[]vetor) 
 { 
 for (int i = 0; i < vetor.Length; i++) 
 { 
 Console.Write("Digite o {0} valor: ", i + 1); 
 vetor[i] = int.Parse(Console.ReadLine()); 
 } 
 } 
 
 static int Soma(int[] vetor) 
 { 
 
 
98 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 int somatoria = 0; 
 for (int i = 0; i < vetor.Length; i++) 
 { 
 if (vetor[i] % 2 == 0) 
 { 
 somatoria += vetor[i]; 
 } 
 } 
 return (somatoria); 
 } 
 
 static int Maior(int[] vetor) 
 { 
 int maior_numero = vetor[0]; 
 for (int i = 1; i < vetor.Length; i++) 
 { 
 if (vetor[i] > maior_numero) 
 { 
 maior_numero = vetor[i]; 
 } 
 } 
 return (maior_numero); 
 } 
 
 static void Main(string[] args) 
 { 
 int[] vetor = new int[20]; 
 int escolha; 
 bool controle = true; 
 
 do 
 { 
 Console.Clear(); 
 Console.WriteLine("1 - Digitação dos valores no ARRAY"); 
 Console.WriteLine("2 - Cálculo da soma dos números pares"); 
 Console.WriteLine("3 - Determinar maior número do ARRRAY"); 
 Console.WriteLine("4 - Para SAIR"); 
 escolha = int.Parse(Console.ReadLine()); 
 
 switch(escolha) 
 { 
 case 1: 
 
 
99 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 if (controle == false) 
 { 
 Console.Write("Vetor já criado!"); 
 Console.ReadKey(); 
 } 
 else 
 { 
 Criar_Array(ref vetor); 
 controle = false; 
 }break; 
 
 case 2: 
 Console.Write("A soma dos elementos pares do Array é {0}", Soma(vetor)); 
 Console.ReadKey(); 
 break; 
 
 case 3: 
 Console.Write("O maior número do Array é {0}", Maior(vetor)); 
 Console.ReadKey(); 
 break; 
 } 
 
 
 } while (escolha != 4); 
 
 } 
 
7.2. Lista de exercícios 
 
1) Escreva uma função que calcule e retorne o fatorial de um número inteiro 
positivo. 
2) Escreva uma função que verifique se um número é primo. Sua função deve 
retornar verdadeiro ou falso. O argumento de entrada é o número a ser 
verificado. 
3) Descreva um programa que apresente as rotinas abaixo que são escolhidas 
pelo usuário a partir de um menu apresentado no início do programa: 
 
 
 
100 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
a) Criação de um array de 30 (trinta) números inteiros e positivos e que só pode 
ser executada uma única vez (faça as proteções necessárias contra uma 
Segunda utilização desta rotina); 
b) Cálculo da soma de todos os números que são ímpares; 
c) Determine o menor número do array; 
 
Observação: O programa deve impedir que números negativos sejam gravados 
no array bem como que a criação do array seja realizada uma 2ª vez ou então 
que as rotinas “b” e “c” sejam realizadas antes da criação do array. A rotina a 
ser executada deve ser de opção do usuário que a escolherá através de um 
menu que deve ser apresentado no início do programa e no fim da operação de 
cada rotina. Esse menu deve conter ainda a opção “Fim de serviço”. 
 
4) Desenvolva um programa que receba via teclado o número do CPF do usuário 
e o valide através de uma função C#. A fórmula de cálculo do dígito verificador 
pode ser consultada em http://ghiorzi.org/DVnew.htm 
 
7.3. Recursividade 
 
A ideia de recursividade é a de um processo que é definido a partir de si próprio. No 
caso de um algoritmo, esse é definido invocando a si mesmo. Em outras palavras, trata-se 
de uma função que pode chamar a si própria, direta ou indiretamente. Uma função assim é 
chamada função recursiva. Todo cuidado é pouco ao se fazer funções recursivas. A 
primeira coisa a se providenciar é um critério de parada. Este vai determinar quando a 
função deverá parar de chamar a si mesma. Isto impede que a função se chame infinitas 
vezes. 
 
7.3.1. Vantagens da recursividade 
 
a) É a maneira mais natural e lógica de resolver um problema; 
b) Redução do tamanho do código fonte; 
c) Permite descrever algoritmos de forma mais clara e concisa. 
 
 
 
http://ghiorzi.org/DVnew.htm
 
 
101 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
7.3.2. Desvantagens da recursividade 
 
a) O constante uso da pilha pode levar a uma execução mais lenta; 
b) O não gerenciamento dinâmico de memória pode levar a um “estouro” da 
pilha; 
c) Redução do desempenho de execução devido ao tempo para 
gerenciamento de chamadas; 
d) Dificuldades na depuração de programas recursivos, especialmente se a 
recursão for muito profunda. 
 
7.3.3. Outros aspectos da recursividade 
 
a) Procedimentos recursivos introduzem a possibilidade de iterações que 
podem não terminar: existe a necessidade de considerar o problema de 
terminação. É fundamental que a chamada recursiva a um procedimento “P” 
esteja sujeita a uma condição “A”, a qual se torna satisfeita em algum 
momento da computação. Ex.: Se não existisse a condição n=0, quando o 
procedimento terminaria? 
b) Condição de terminação: permite que o procedimento deixe de ser 
executado; 
c) O procedimento deve ter pelo menos um caso básico para cada caso 
recursivo, o que significa a finalização do procedimento 
 
Exemplo 1: Cálculo do fatorial de um número inteiro (na matemática, o fatorial de um 
número natural n, representado por n!, é o produto de todos os inteiros positivos menores 
ou iguais a n). 
 
 static int fatorial(int n) 
 { 
 if (n == 0) return 1; 
 return (n * fatorial(n - 1)); 
 } 
 
 static void Main(string[] args) 
 { 
 
 
102 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 int num; 
 Console.Write("Digite um número: "); 
 num = int.Parse(Console.ReadLine()); 
 Console.WriteLine("O fatorial de {0} é {1}", num, fatorial(num)); 
 Console.ReadKey(); 
 } 
 } 
 
Exemplo 2: Cálculo da somatória de valores armazenados em um vetor. 
 
 static int somatoria (int max, int[]v) 
 { 
 if (max == 0) 
 return (v[0]); 
 else 
 return v[max] + somatoria(max - 1, v); 
 } 
 
 static void Main(string[] args) 
 { 
 int[] vetor = new int[] { 10, 20, 30, 40, 50 }; 
 Console.WriteLine("A soma é {0}", somatoria(vetor.Length - 1, vetor)); 
 Console.ReadKey(); 
 } 
 
Exemplo 3: Exibir valores armazenados em um vetor. 
 
 static void exibe(int max, int[] v) 
 { 
 Console.WriteLine(v[max]); 
 if (max != v.Length - 1) 
 exibe(max + 1, v); 
 } 
 
 static void Main(string[] args) 
 { 
 int[] vetor = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
 exibe (0, vetor); 
 Console.ReadKey(); 
 } 
 
 
 
103 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
8. PROGRAMAÇÃO ORIENTADA A OBJETOS 
 
8.1. Conceitos 
 
Como a maioria das atividades que realizamos no dia a dia, programar também possui 
modos diferentes de se fazer, os quais são chamados de paradigmas de programação e, 
entre eles, estão a programação orientada a objetos (POO) e a programação estruturada. 
 
A diferença principal é que na programação estruturada, um programa é tipicamente 
escrito em uma única rotina (ou função) podendo, é claro, ser subdividido em rotinas. De 
qualquer forma, o fluxo do programa continua o mesmo, como se pudéssemos copiar e 
colar o código das sub-rotinas diretamente nas rotinas que as chamam, de tal forma que, 
no final, só haja uma grande rotina que execute todo o programa. 
 
A programação orientada a objetos (POO) surgiu como uma alternativa a essas 
características da programação estruturada. O intuito da sua criação também foi o de 
aproximar o manuseio das estruturas de um programa ao manuseio das coisas do mundo 
real, daí o nome "objeto" como uma algo genérico, que pode representar qualquer coisa 
tangível. 
 
A POO envolve um paradigma de programação que se baseia fundamentalmente no 
conceito de “Objetos”. É uma forma de desenvolvimento de sistemas de software que o 
trata como um conjunto de componentes que interagem entre si para resolver um problema. 
Esses componentes são denominados Objetos. 
 
Qualquer pessoa ou empresa que vive da criação de software sem dúvidas não fica 
contente ao ver-se escrevendo código similar infinitamente, gastando tempo e recursos na 
programação de rotinas que já foram criadas anteriormente, mas que pela falta de uma 
metodologia apropriada, não podem ser reutilizadas ou customizadas para suprirem 
necessidades específicas de cada cenário. Resumindo, as principais vantagens da POO 
são o reuso de código e a capacidade de expansão dele. 
 
 
 
 
 
104 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
A POO utiliza tipos de dados personalizados. Em vez de operar apenas com tipos de 
dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade. 
Esses novos tipos de dados, que chamamos de “classes”, podem conter estruturas 
semelhantesa funções, denominadas métodos, e variáveis internas, chamadas 
de “atributos”. As classes dão origem a objetos, em um processo 
denominado “instanciação”. Os objetos são, por sua vez, os “blocos de construção” de 
software na OO (Orientação a Objetos). 
 
São vantagens da Orientação a Objetos: 
 
a) Fornece uma estrutura modular para a construção de programas; 
b) Objetos podem ser reutilizados em aplicações diferentes; 
c) O software se torna mais fácil de manter; 
d) O desenvolvimento é mais rápido, devido ao reuso de código; 
e) Encapsulamento: não é necessário conhecer a implementação interna de um 
objeto para poder usá-lo. 
 
Qualquer linguagem orientada a objetos deve oferecer suporte aos seguintes 
conceitos da POO: 
 
i. Abstração: modelagem de atributos relevantes e as interações de entidades 
como classes para definir uma representação abstrata de um sistema. 
ii. Encapsulamento: ocultar o estado interno e a funcionalidade de um objeto e 
permitir o acesso apenas por meio de um conjunto público de funções. 
iii. Herança: capacidade de criar novas abstrações com base em abstrações 
existentes. 
iv. Polimorfismo: capacidade de implementar propriedades ou métodos 
herdados de diferentes maneiras em várias abstrações. 
 
 
 
 
 
 
 
 
105 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
8.2. Abstração 
 
Abstrair significa selecionar aspectos específicos de um problema a ser analisado, 
deixando de lado outros aspectos. É a representação de uma entidade do mundo real na 
forma de ideias. As entidades abstraídas podem se comunicar entre si, por meio da troca 
de Mensagens. 
 
Pode-se tomar um exemplo da vida real para ilustrar o conceito: um carro é uma 
abstração de um veículo que um indivíduo pode utilizar com o objetivo de mover-se de um 
ponto a outro. No dia a dia, ninguém dirá: “Vou abrir a porta daquele veículo movido a 
combustível, entrarei, me sentarei, darei a partida no motor, pisarei na embreagem, 
engatarei a primeira marcha, acelerarei, controlarei a direção em que o carro irá se mover 
utilizando o volante”. Tamanha explicação não se faz necessária pois todo o conceito 
daquilo foi abstraído para algo que conhecemos como “carro”. Apesar de um carro ser algo 
bastante complexo, basta dizer “vou usar o meu carro para ir ao trabalho amanhã”, e 
qualquer pessoa entenderá o recado. 
 
Existem também objetos que são criados em muitas aplicações com o intuito de 
abstraírem objetos complexos da vida real, como por exemplo Pedido, Cliente, Produto, e 
muitos outros. 
 
8.3. Classes 
 
Uma Classe é uma coleção de objetos que são descritos com os mesmos atributos e 
as mesmas operações. Uma classe representa uma ideia ou conceito e classifica objetos 
que tenham propriedades similares. 
 
As classes são os blocos de construção mais importantes dos sistemas orientados a 
objetos, e devem possuir características bem definidas dentro da aplicação. Uma classe é 
um tipo personalizado de dados. 
 
Desta forma, uma classe é um tipo abstrato de dados, um “molde” para a criação de 
objetos. Cada classe criada se torna um novo tipo disponível para declarar variáveis e criar 
objetos. Um objeto é, portanto, um “Instância de uma Classe”. 
 
 
106 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Por convenção, começamos o nome de uma classe com letra maiúscula, e 
capitalizamos cada palavra subsequente que o compuser. 
 
As classes possuem “atributos” e “métodos”. Atributos são características da classe, 
que são comuns a todos os objetos derivados, e que podem apresentar valores diversos. 
Já os Métodos são as operações possíveis em uma classe (nos objetos instanciados a 
partir dela). 
 
Conforme exposto acima, uma classe é um modelo para algo que deve ser criado. Por 
exemplo, quando alguém vai fazer um bolo de chocolate, pega-se uma “Receita para Bolo 
de Chocolate”, que será usada como um modelo para o bolo que será criado. De forma 
análoga, a receita é uma classe, e o bolo é um objeto. 
 
Uma classe não é utilizada diretamente. Ninguém come a receita de bolo. A classe é 
utilizada somente para criar objetos baseados nela, e são os objetos que serão realmente 
utilizados. 
 
As classes descrevem o tipo de objetos, enquanto objetos são instâncias úteis de 
classes. Por definição, afirma-se que um objeto é a instância de uma classe. Dessa forma, 
o ato de criar um objeto é chamado de instanciação. 
 
Cada classe pode ter membros de classe diferentes que incluem propriedades que 
descrevem dados de classe, métodos que definem o comportamento da classe e eventos 
que fornecem comunicação entre classes e objetos diferentes. 
 
8.4. Objetos 
 
Um objeto é uma ocorrência específica de uma classe, ou seja, uma “instância de 
classe”. Os objetos são a base da OO. Os objetos representam entidades do mundo real, 
como aviões, pessoas, contas correntes etc., mas também podem representar outros 
conceitos, como gráficos (círculos, quadrados, cones, esferas etc.) Um objeto possui 
características próprias (atributos) e executa determinadas ações (métodos), sendo esses 
atributos e métodos provenientes da classe que origina o objeto (figura 32). 
 
 
 
107 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
 
Figura 32: Exemplo ilustrativo de classe e objetos. 
 
8.5. Mensagens 
 
Os objetos se comunicam a partir da troca de mensagens. Uma mensagem é um sinal 
enviado de um objeto a outro, o qual requisita um serviço, usando uma operação 
programada no objeto chamado. Por exemplo, para que um objeto execute um método, é 
necessário enviar a este objeto uma mensagem solicitando a execução do método 
desejado. As mensagens somente ocorrem entre objetos que possuem uma Associação. 
As mensagens também são programadas. Quando uma mensagem é recebida, uma 
operação é invocada no objeto chamado. Há vários formatos de mensagens: procedures 
(subs e functions), passagem de sinais entre threads, acionamento de eventos etc. 
 
8.6. Atributos de Classe 
 
Os atributos de Classes, também chamados de Propriedades, envolvem a 
característica particular de uma ocorrência de uma classe, como por exemplo o nome e a 
idade de uma pessoa. Existem 2 (dois) tipos principais de propriedades: 
 
 
 
 
 
 
108 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
a) Estáticas: mantém o valor durante toda a sua existência. Por exemplo, a data de 
nascimento de uma pessoa é uma propriedade estática, pois mantém o valor 
durante toda a existência do objeto instanciado; 
b) Dinâmicas: podem ter valores que variam com o passar do tempo. A idade de uma 
pessoa pode ser considerada um atributo dinâmico, pois pode variar ao longo do 
tempo 
 
8.7. Métodos 
 
É a lógica contida em uma classe para atribuir-lhe comportamentos. São as funções 
e procedimentos contidos na classe. O ato de invocar um método é a passagem de 
mensagens para o objeto. 
 
Um método é uma sequência de declarações (instruções) que possui um nome de 
identificação. É similar a uma função ou procedimento. Um método possui um nome e um 
corpo onde ficam os comandos que serão executados quando o método for chamado, e 
podem receber dados para processamento (parâmetros) e retornar informações. 
 
Os métodos são a forma principal de passagem de mensagens entre objetos. Um 
método deve executar sempre uma operação única. Os métodos também precisam ter um 
tipo de retorno, que pode ser um tipo de valor, de referência ou ainda void (não retornam 
valor). 
 
Para definir um método de uma classe: 
 
 class SampleClass 
 { 
 public int ExemploMetodo (string exemploArgumento) 
 { 
 // Insera o código aqui 
 } 
 } 
 
 
 
 
109 Programação Orientada a Objetos 
UniversidadeSanta Cecília - Educação a Distância 
Toda classe possui um método especial chamado de método “construtor”, que 
inicializa o objeto instanciado, ou seja, os Construtores são os métodos da classe que são 
executados automaticamente quando um objeto de um determinado tipo é criado. Eles, 
geralmente inicializam os membros de dados do novo objeto. Além disso, o código no 
construtor é sempre executado antes de qualquer outro código em uma classe. Para definir 
um construtor para uma classe: 
 
 class ExemploClasse 
 { 
 public ExemploClasse() 
 { 
 // Insera o código aqui 
 } 
 } 
 
Por outro lado, as classes também usam métodos destruidores para finalizar os 
objetos após seu uso. 
 
8.8. Campos 
 
Conforme exposto anteriormente, uma classe pode conter vários elementos, dentre 
os quais, também se destacam os “Campos” que são variáveis declaradas dentro das 
classes. Por exemplo: 
 
 class ExemploClass() 
 { 
 public string nome; 
 } 
 
 
 
 
 
 
 
 
 
 
 
110 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
8.9. Exemplos de POO 
 
Exemplo 1: Cálculo da área de um círculo com um único método construtor. 
 
 class Program 
 { 
 class Circle 
 { 
 private int raio; 
 
 public Circle() // construtor padrão 
 { 
 raio = 0; 
 } 
 
 public double Area() 
 { 
 return (Math.PI * raio * raio); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Circle c; // cria uma variável da Classe Circle 
 c = new Circle(); // inicializa a variável 
 double areadocirculo; 
 
 areadocirculo = c.Area(); 
 Console.WriteLine(areadocirculo); 
 Console.ReadKey(); 
 } 
 } 
 
 
 
 
 
 
 
 
 
 
111 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Exemplo 2: Cálculo da área de um círculo com 2 (dois) métodos construtores. 
 
 class Program 
 { 
 class Circle 
 { 
 private int raio; 
 
 public Circle() // construtor padrão 
 { 
 raio = 0; 
 } 
 
 public Circle(int raioinicial) // construtor sobrecarregado 
 { 
 raio = raioinicial; 
 } 
 
 public double Area() 
 { 
 return (Math.PI * raio * raio); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Circle c; // cria uma variável da Classe Circle 
 c = new Circle(4); // inicializa a variável 
 double areadocirculo; 
 
 areadocirculo = c.Area(); 
 Console.WriteLine(areadocirculo); 
 Console.ReadKey(); 
 } 
 } 
 
 
 
 
 
 
 
112 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
Observação: O método construtor a ser processado é aquele que contém o montante 
de argumentos de sua chamada. No exemplo acima, o método construtor é chamado 
quando da instanciação do objeto e receberá o argumento “4”. O método construtor 
“sobrecarregado” é aquele que será invocado pois este foi declarado para receber um 
argumento. 
 
Exemplo 3: Cálculo da área de um círculo com 2 (dois) métodos construtores. Neste 
exemplo, 2 (dois) objetos serão instanciados. 
 
 class Program 
 { 
 class Circle 
 { 
 private int raio; 
 
 public Circle() // construtor padrão 
 { 
 raio = 0; 
 } 
 
 public Circle(int raioinicial) // construtor sobrecarregado 
 { 
 raio = raioinicial; 
 } 
 
 public double Area() 
 { 
 return (Math.PI * raio * raio); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Circle c; // cria uma variável da Classe Circle 
 c = new Circle(); // inicializa a variável 
 double areadocirculo; 
 
 areadocirculo = c.Area(); 
 Console.WriteLine(areadocirculo); 
 
 
113 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.ReadKey(); 
 
 Circle d; // cria uma variável da Classe Circle 
 d = new Circle(4); // inicializa a variável 
 
 areadocirculo = d.Area(); 
 Console.WriteLine(areadocirculo); 
 Console.ReadKey(); 
 } 
} 
 
Exemplo 4: Cálculo da área de um círculo. Neste exemplo, o método recebe um 
argumento (valor) que representa o raio da figura geométrica. 
 
 class Program 
 { 
 class Circle 
 { 
 private int raio; 
 
 public Circle() // construtor padrão 
 { 
 raio = 0; 
 } 
 
 public double Area(int raio) 
 { 
 return (Math.PI * raio * raio); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Circle c; // cria uma variável da Classe Circle 
 c = new Circle(); // inicializa a variável 
 double areadocirculo; 
 int raio = 4; 
 
 areadocirculo = c.Area(raio); 
 Console.WriteLine(areadocirculo); 
 Console.ReadKey(); 
 
 
114 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
} 
 
Exemplo 5: Programa que permite o armazenamento e acesso do nome de um aluno 
em um objeto instanciado da classe “Aluno”. 
 
 class Program 
 { 
 class Aluno 
 { 
 
 string nome; 
 
 // Método construtor 
 public Aluno(string n) 
 { 
 nome = n; 
 } 
 
 // Insere valor no atributo 
 public void GravaNome (string n) 
 { 
 nome = n; 
 } 
 
 // Método de retorna o valor do atributo 
 public string getNome() 
 { 
 return (nome); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Aluno alu = new Aluno("Carlos"); 
 Console.WriteLine("Nome do aluno é {0} ", alu.getNome()); 
 Console.ReadKey(); 
 
 alu.GravaNome("Pedro"); 
 Console.WriteLine("Nome do aluno agora é {0} ", alu.getNome()); 
 Console.ReadKey(); 
 
 
115 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 } 
} 
 
8.10. Lista de exercícios 
 
1) Declare uma classe “Funcionario” que possui 2 (dois) campos (nome do 
funcionário e salário). Em seguida realize o instanciamento de um objeto da 
respectiva classe. 
2) Altere a classe do exercício anterior de tal a forma a implementar um método 
construtor que realizar a atribuição inicial para os campos da classe. 
3) Crie uma classe chamada “Nota Fiscal” que possa ser utilizado por uma loja de 
suprimentos de tecnologia para representar uma fatura de um item vendido na 
loja. Uma Nota fiscal deve incluir as seguintes informações como atributos: o 
número do item faturado; a descrição do item; a quantidade comprada do item; 
o preço unitário do item. Esta classe deve ter um construtor que inicialize os 
quatro atributos. Além disso, forneça um método chamado “getInvoiceAmount” 
que calcula o valor da fatura (isso é, multiplica a quantidadepelo preço por 
item) e depois retorna o valor como um double. 
4) Implemente uma classe “Pessoa” que possua como atributos nome, idade, 
peso (em quilogramas) e altura (em metros). Faça com que os dados sejam 
inicializados através do construtor da classe. Adicione métodos para ler e 
alterar cada um dos atributos em separado. 
5) Altere a classe “Pessoa” do exercício anterior de modo que ela seja capaz de 
calcular o Índice de Massa Corporal (IMC). O cálculo é feito através da fórmula 
IMC = peso/altura2. Adicionalmente, implemente um método que informa a 
faixa de categoria do IMC que a pessoa se encontra, utilizando a seguinte 
tabela. 
 
Peso Categoria 
< 20 Abaixo do peso 
> 20 e <=25 Peso normal 
>25 e <= 30 Sobrepeso 
> 30 e <=35 Obesidade grau I 
> 35 e <=40 Obesidade grau II 
> 40 Obesidade grau III 
 
 
116 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 
9. PROPRIEDAES, HERANÇA E ENCAPSULAMENTO 
 
9.1. Propriedades 
 
Uma propriedade é um cruzamento entre um campo e um método – ela parece um 
campo, mas atua como um método. Uma propriedade é acessada, utilizando exatamente 
a mesma sintaxe empregada para acessar um campo. O compilador, porém, converte 
automaticamente essa sintaxe do tipo campo em chamadas a métodos de acesso. 
 
Uma propriedade pode conter dois blocos de código, começando com as palavras-
chave “get” e “set”. O bloco “get” contém instruções que são executadas quando a 
propriedade é lida, e o bloco “set” engloba instruções que são executadas quando a 
propriedade é gravada. 
 
As propriedades combinam aspectos de métodos e campos. Para o usuário de um 
objeto, uma propriedade parece ser um campo. Acessar a propriedade requer a mesma 
sintaxe. 
 
Para o implementador de uma classe, uma propriedade consiste em um ou dois blocos 
de código, que representam um acessador “get” e/ou um acessador “set”. O bloco de 
código para o acessador “set” é executado quando a propriedade é lida. O bloco de código 
para o acessador “set” é executado quando um novo valor é atribuído à propriedade. 
 
Uma propriedade sem um acessador “set” é considerada como somente leitura. Uma 
propriedade sem um acessador “get” é considerada como somente gravação. Uma 
propriedade que tem os dois acessadores é leitura/gravação. 
 
A sintaxe de uma declaração de propriedade se parece com esta: 
 
AcessaModificador 
{ 
 get 
 { 
 
 
117 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 // código da leitura da propriedade 
 } 
 set 
 { 
 // código da gravação da propriedade 
 } 
} 
 
Exemplo 1: Criação de uma classe “Triangulo” e instanciação de objeto com 
atribuição de valores aos campos deste último, através de propriedades. 
 
 class Program 
 { 
 // Neste exemplo os campos privados são inicializados com seus valores padrão 
 // e são definidas propriedades 
 
 class Triangulo 
 { 
 private int lado1 = 10; 
 private int lado2 = 10; 
 private int lado3 = 10; 
 
 public int TamanhoLado1 
 { 
 set { this.lado1 = value; } 
 } 
 
 public int TamanhoLado2 
 { 
 set { this.lado2 = value; } 
 } 
 
 public int TamanhoLado3 
 { 
 set { this.lado3 = value; } 
 } 
 
 public void MostraLados() 
 { 
 
 
118 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.WriteLine("Lado 1 = {0}", lado1); 
 Console.WriteLine("Lado 2 = {0}", lado2); 
 Console.WriteLine("Lado 3 = {0}", lado3); 
 Console.WriteLine(); 
 Console.ReadKey(); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 // A sintaxe abaixo é conhecida como inicializador do objeto 
 // O compilador C# chama o construtor padrão e então o método de acesso 
 // "set" de cada propriedade identificada para inicializá-la com o valor especificado 
 
 Triangulo a = new Triangulo { TamanhoLado3 = 15 }; 
 a.MostraLados(); 
 Console.ReadKey(); 
 
 Triangulo b = new Triangulo { TamanhoLado1 = 15, TamanhoLado3 = 20 }; 
 b.MostraLados(); 
 Console.ReadKey(); 
 
 Triangulo c = new Triangulo { TamanhoLado2 = 12, TamanhoLado3 = 17 }; 
 c.MostraLados(); 
 
 Triangulo d = new Triangulo { TamanhoLado1 = 09, TamanhoLado2 = 12, TamanhoLado3 = 
15 }; 
 d.MostraLados(); 
 } 
} 
 
Exemplo 2: Criação de uma classe “Calculadora” que realiza operações matemáticas 
através de propriedades. 
 
 class Program 
 { 
 class Calculadora 
 { 
 public Calculadora() // construtor padrão 
 { 
 termo1 = termo2 = 0; 
 
 
119 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 
 public float termo1 { get; set; } 
 public float termo2 { get; set; } 
 
 public float Soma 
 { 
 get { return (termo1 + termo2); } 
 } 
 
 public float Subtracao 
 { 
 get { return (termo1 - termo2); } 
 } 
 
 public float Multiplicacao 
 { 
 get { return (termo1 * termo2); } 
 } 
 
 public float Divisao 
 { 
 get { return (float)(termo1 / termo2); } 
 } 
 
 public void MostraValores() 
 { 
 Console.WriteLine("O 1o termo é {0:F2}", this.termo1); 
 Console.WriteLine("O 2o termo é {0:F2}", this.termo2); 
 Console.ReadKey(); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 int opcao; 
 
 Calculadora operacao = new Calculadora(); 
 do 
 { 
 Console.Clear(); 
 Console.WriteLine("1 - Soma"); 
 
 
120 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 Console.WriteLine("2 - Subtração"); 
 Console.WriteLine("3 - Multiplicação"); 
 Console.WriteLine("4 - Divisão"); 
 Console.WriteLine("5 - Opção"); 
 opcao = int.Parse(Console.ReadLine()); 
 
 if (opcao != 5) 
 { 
 Console.Write("Digite o 1o. termo : "); 
 operacao.termo1 = float.Parse(Console.ReadLine()); 
 Console.Write("Digite o 2o. termo : "); 
 operacao.termo2 = float.Parse(Console.ReadLine()); 
 
 switch (opcao) 
 { 
 case 1: 
 Console.WriteLine("A soma dos valores é {0:F2}", operacao.Soma); 
 Console.ReadKey(); 
 break; 
 
 case 2: 
 Console.WriteLine("A subtracao dos valores é {0:F2}", operacao.Subtracao); 
 Console.ReadKey(); 
 break; 
 
 case 3: 
 Console.WriteLine("A multiplicação dos valores é {0:F2}", operacao.Multiplicacao); 
 Console.ReadKey(); 
 break; 
 
 case 4: 
 Console.WriteLine("A divisão dos valores é {0:F2}", operacao.Divisao); 
 Console.ReadKey(); 
 break;} 
 } 
 
 } while (opcao != 5); 
 } 
} 
 
 
 
121 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
9.2. Herança 
 
Herança, em orientação a objetos, é a capacidade de um novo objeto tomar atributos 
e operações de um objeto existente. Assim, podemos criar classes mais complexas sem 
que precisemos repetir código. 
 
Aqui, a palavra-chave é Reuso de código, e é uma das metas a se atingir ao 
desenvolver softwares. O reuso permite reduzir o esforço dispendido no desenvolvimento 
de software ao reaproveitarmos códigos de uma classe na criação de outras classes. 
 
A Herança é, portanto, um conceito extremamente importante em Orientação a 
Objetos. Usamos a herança, por exemplo, para evitar repetição ao definirmos classes com 
características em comum e que são relacionadas entre si. A herança é um relacionamento 
entre classes, que permite que uma classe “adquira” os membros (atributos e métodos) de 
outra classe. 
 
Um exemplo clássico de herança seria a classificação de mamíferos no reino animal. 
Homens, Baleias e Gatos são mamíferos, que compartilham muitas características entre si, 
mas claramente possuem atributos que os diferem uns dos outros. 
 
Como podemos modelar Baleias, Gatos e Humanos em um software? Podemos criar 
classes distintas para cada animal, mas essas classes teriam muitos comportamentos 
(“métodos”) em comum entre eles, como Respirar, Mamar e Reproduzir-se, o que 
ocasionaria repetição desnecessária de código. 
 
Usamos então Herança para resolver esse problema. Podemos criar uma classe 
chamada Mamífero que possua as características comuns a todos os animais mamíferos, 
e então criar as classes Humano, Baleia e Gato herdando essas funcionalidades e também 
implementando as funcionalidades específicas de cada animal, como Falar, Nadar e Miar. 
 
 
 
 
 
 
 
122 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
A linguagem C# oferece suporte apenas à herança única, ou seja, uma classe pode 
herdar apenas de uma única classe. No entanto, a herança é transitiva, o que permite que 
você defina uma hierarquia de herança para um conjunto de tipos. Em outras palavras, o 
tipo “D” pode herdar do tipo “C”, que herda do tipo ”B”, que herda do tipo de classe base ”A”. 
Como a herança é transitiva, os membros do tipo “A” estão disponíveis ao tipo “D”. 
 
Enquanto todos os outros membros de uma classe base são herdados por classes 
derivadas, o fato de serem visíveis ou não depende de sua acessibilidade. A acessibilidade 
de um membro afeta sua visibilidade para classes derivadas da seguinte maneira: membros 
privados, membros protegidos, membros internos e membros públicos. 
 
A sintaxe de uma declaração de herança se parece com esta: 
 
Class ClasseDerivada : ClasseBase 
{ 
 ... 
} 
 
Exemplo 1: Criação de uma classe “Animal” cujas características serão herdadas por 
outra classe intitulada “Cachorro”. 
 
 class Program 
 { 
 
 public class Animal 
 { 
 
 public string Nome; 
 public int Idade; 
 public string CorDoPelo; 
 } 
 
 public class Cachorro : Animal 
 { 
 
 public string Raca; 
 
 
123 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
 public Cachorro() // construtor padrão 
 { 
 Nome = "Poli"; 
 Idade = 12; 
 CorDoPelo = "branca"; 
 Raca = "Dálmata"; 
 } 
 
 public void ExibeDados() 
 { 
 Console.WriteLine(Nome); 
 Console.WriteLine(Idade); 
 Console.WriteLine(CorDoPelo); 
 Console.WriteLine(Raca); 
 Console.ReadKey(); 
 } 
 } 
 
 static void Main(string[] args) 
 { 
 Cachorro cao = new Cachorro(); 
 cao.ExibeDados(); 
 } 
 } 
 
Exemplo 2: Criação de uma classe “Animal” cujas características serão herdadas por 
outras classes intituladas, respectivamente, “Mamifero”, “Morcedo” e “Baleia”. 
 
 class Program 
 { 
 public class Animal 
 { 
 private string nome; 
 
 public string AtribuirNome 
 { 
 set { this.nome = value; } 
 } 
 
 public string RetornaNome 
 
 
124 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 { 
 get { return (this.nome); } 
 } 
 
 public void Acordar(string info) 
 { 
 Console.WriteLine("{0} acordou...", info); 
 } 
 
 public void Comer(string info) 
 { 
 Console.WriteLine("{0} está comendo...", info); 
 } 
 
 public void Dormir(string info) 
 { 
 Console.WriteLine("{0} está dormingo...", info); 
 } 
 } 
 
 public class Mamifero : Animal 
 { 
 public void Mamar(string info) 
 { 
 Console.WriteLine("{0} está mamando...", info); 
 } 
 } 
 
 public class Morcego : Mamifero 
 { 
 public void Voar(string info) 
 { 
 Console.WriteLine("{0} está voando...", info); 
 } 
 } 
 
 public class Baleia : Mamifero 
 { 
 public void Nadar(string info) 
 { 
 Console.WriteLine("{0} está nadando...", info); 
 } 
 
 
125 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 } 
 
 static void Main(string[] args) 
 { 
 Morcego especie_voadora = new Morcego(); 
 especie_voadora.AtribuirNome = "Morcego Hematófago"; 
 especie_voadora.Acordar(especie_voadora.RetornaNome); 
 especie_voadora.Comer(especie_voadora.RetornaNome); 
 especie_voadora.Dormir(especie_voadora.RetornaNome); 
 especie_voadora.Voar(especie_voadora.RetornaNome); 
 Console.ReadKey(); 
 Console.WriteLine(); 
 
 Baleia especie_marinha = new Baleia(); 
 especie_marinha.AtribuirNome = "Baleia Jubarte"; 
 especie_marinha.Acordar(especie_marinha.RetornaNome); 
 especie_marinha.Comer(especie_marinha.RetornaNome); 
 especie_marinha.Dormir(especie_marinha.RetornaNome); 
 especie_marinha.Nadar(especie_marinha.RetornaNome); 
 Console.ReadKey(); 
 } 
 } 
 
9.3. Lista de exercícios com Herança 
 
1) Faça um programa que calcule a área de uma figura geométrica. Aceite quatro 
tipos de figura geométrica: quadrado, retângulo, triângulo e círculo. Use 
herança. 
2) Crie uma classe Calculadora que faça as quatro operações básicas (soma, 
subtração, multiplicação e divisão). Crie uma classe derivada 
“CalculadoraCientifica” que, além das operações básicas, faça extração de 
raízes. 
3) Crie uma classe chamada Ingresso que possui um valor em reais e um método 
imprimeValor(). 
 
a) crie uma classe VIP, que herda Ingresso e possui um valor adicional. Crie 
um método que retorne o valor do ingresso VIP (com o adicional incluído); 
 
 
126 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
b) crie uma classe Normal, que herda Ingresso e possui um método que 
imprime: "Ingresso Normal". 
c) Crie uma classe CamaroteInferior (que possui a localização do ingresso e 
métodos para acessar e imprimir esta localização) e uma classe 
CamaroteSuperior, que é mais cara (possui valor adicional). Esta última 
possui um método para retornar o valor do ingresso. Ambasas classes 
herdam a classe VIP. 
 
4) Crie a classe Imovel, que possui um endereço e um preço. 
 
a) Crie uma classe Novo, que herda Imovel e possui um adicional no preço. 
Crie métodos de acesso e impressão deste valor adicional; 
b) Crie uma classe Velho, que herda Imovel e possui um desconto no preço. 
Crie métodos de acesso e impressão para este desconto 
 
5) Um aluno de graduacao possui as informações de matrícula, nome, código do 
curso (1-Arquitetura, 2-Sistemas de Informação, 3-Engenharia e 4-
Biomedicina). Todo aluno deve poder calcular a mensalidade com base no 
curso escolhido (Arquitetura = 450.00, Sistemas de Informação = 650.00, 
Engenharia = 850.00 e Biomedicina = 750.00. O Aluno de pós-graduação 
possui as mesmas informações do aluno de graduação e, adicionalmente, 
possui as informações linha de pesquisa, orientador e valor da bolsa de 
estudos. O aluno de pós-graduação deve calcular a mensalidade com base no 
curso escolhido porem abatendo o valor da bolsa de estudos do valor do curso 
escolhido. 
 
9.4. Encapsulamento 
 
Encapsulamento é a combinação de atributos e operações dentro de uma classe, 
deixando visível apenas o que é necessário para a comunicação entre dois objetos, como 
por exemplo alguns detalhes da implementação ou ainda a lógica de um método. 
 
 
 
 
 
 
127 Programação Orientada a Objetos 
Universidade Santa Cecília - Educação a Distância 
 
O encapsulamento permite ocultar a complexidade do código. Não é necessário 
entender como a operação funciona para poder utilizá-la. Um exemplo clássico é o de um 
motorista conduzindo um veículo. O motorista não precisa saber exatamente como um 
motor funciona internamente para poder dirigir o automóvel – os detalhes da 
“implementação” do motor ficam ocultos do motorista. 
 
O encapsulamento protege os dados, permitindo o acesso a eles apenas a partir de 
métodos específicos e autorizados. 
 
Desta forma, os objetos encapsulados podem ser comparados uma caixa preta: 
conhecemos a sua interface externa, porém não precisamos nos preocupar com o que 
acontece internamente na caixa. 
 
Ao se tratar do conceito de encapsulamento, devem ser observados 3 (três) níveis 
principais de acesso dos objetos: Público, Privado e Protegido. 
 
O modificador de acesso “Public” permite que uma classe exponha suas variáveis de 
membros e funções de membros a outras funções e objetos. Qualquer membro público 
pode ser acessado de fora da classe. 
 
O modificador “Private” permite que atributos e métodos sejam acessados apenas 
pela própria classe. 
 
Já o modificador “Protected” atua como modificador tanto o acesso público e privado. 
Tal como privado, que só permite o acesso a membros de um mesmo tipo, exceto que ele 
age como público apenas aos tipos de derivados. De outra forma, protegido tipo membros 
só pode ser acessado por membros, quer dentro do mesmo tipo ou de membros de tipos 
derivados.

Mais conteúdos dessa disciplina