Baixe o app para aproveitar ainda mais
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 como
Compartilhar