Baixe o app para aproveitar ainda mais
Prévia do material em texto
Projeto de Sistemas Computacionais I Material Teórico Responsável pelo Conteúdo: Prof. Me. Marcel Thomé Filho Revisão Textual: Prof.ª Me. Sandra Regina Fonseca Moreira Introdução à Lógica, Abstrações e Algoritmos • Conceitos sobre Lógica de Programação; • Diferentes Níveis de Abstração; • Algoritmos; • Exemplo de Desenvolvimento com Algoritmos. • Conheçer os conceitos sobre lógica, abstração, algoritmo e seus complementos. OBJETIVO DE APRENDIZADO Introdução à Lógica, Abstrações e Algoritmos Orientações de estudo Para que o conteúdo desta Disciplina seja bem aproveitado e haja maior aplicabilidade na sua formação acadêmica e atuação profissional, siga algumas recomendações básicas: Assim: Organize seus estudos de maneira que passem a fazer parte da sua rotina. Por exemplo, você poderá determinar um dia e horário fixos como seu “momento do estudo”; Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma alimentação saudável pode proporcionar melhor aproveitamento do estudo; No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você tam- bém encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua interpretação e auxiliarão no pleno entendimento dos temas abordados; Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus- são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e de aprendizagem. Organize seus estudos de maneira que passem a fazer parte Mantenha o foco! Evite se distrair com as redes sociais. Mantenha o foco! Evite se distrair com as redes sociais. Determine um horário fixo para estudar. Aproveite as indicações de Material Complementar. Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma Não se esqueça de se alimentar e de se manter hidratado. Aproveite as Conserve seu material e local de estudos sempre organizados. Procure manter contato com seus colegas e tutores para trocar ideias! Isso amplia a aprendizagem. Seja original! Nunca plagie trabalhos. UNIDADE Introdução à Lógica, Abstrações e Algoritmos Conceitos sobre Lógica de Programação A utilização da lógica está em todas as situações da nossa vida e do cotidiano, como por exemplo, abrir uma porta, dirigir um veículo, entre outras coisas. A capacidade de pensar de maneira lógica é um dos principais diferenciais para saber como resolver problemas, principalmente na área da computação. O que é e como devo utilizar a minha lógica e a lógica de programação? Elas são a mesma coisa?Ex pl or Diretamente ligado a esse conceito, compreender o conceito de algoritmo também é algo fundamental. Nossa mente grava situações e age instintivamente. Nesta unidade, você irá conhecer tais conceitos, e se o seu objetivo for de se tornar um bom programador, o próximo passo é aprender um pseudocódigo (Portugol, por exemplo), no qual a experiência de desenvolvimento lhe mostrará com detalhes como tratar uma das opções de entrada e saída de dados, assim como o processamento propriamente dito. Essa unidade, trará a você um pouco sobre esses conceitos fundamentais para quem está começando a programar. Frequentemente nos deparamos com pessoas interessadas em TI e programação que não sabem exatamente por onde começar a estudar. Esta unidade demonstrará conceitos e exemplos para que seu interesse se torne um pouco mais aguçado. Há algumas itens essenciais para dar início aos estudos em programação, entre eles, destacam-se a dedicação em praticar e aprender com os erros, além da afini- dade com matemática e inglês. Figura 1 – Lógica de programação Fonte: Getty Images 8 9 O desenvolvimento e a programação estão ligados à área de Exatas, e a mate- mática (e suas regras) estará presente em diversos momentos. Já o inglês é funda- mental em qualquer profissão, pois para programar, você encontrará uma varieda- de maior de cursos e materiais em inglês. Além disso, a maioria das linguagens de programação utiliza o inglês como base. Inicialmente, o que gera mais preocupação é a famosa pergunta: Qual linguagem eu começo a aprender? A linguagem em si não importa muito no início, pois a lógica é a mesma em todas as linguagens, por isso, começar aprendendo a lógica de programação é o melhor jeito. Ela é a base de todo o conhecimento em programação, pois com a lógica você apren- de a escrever um código para o computador interpretar corretamente, você aprende a se comunicar com a máquina a partir de uma linguagem, seja ela qual for. Sites para aprender a programar. Fluxograma e Pseudocódigo: https://goo.gl/XUs84i O que é um fl uxograma? https://goo.gl/453MX7 Ex pl or Vamos entender a lógica de programação. Já parou para pensar sobre o que é exatamente lógica da programação? Então vamos lá: lógica é a técnica utilizada para desenvolver instruções em uma sequência para atingir determinado objetivo. Ela também é a organização e planejamento de instruções, em um algoritmo, com o objetivo de tornar viável a implementação de um programa ou software. A lógica de programação nada mais é do que a organização coerente das instru- ções do programa para que seu objetivo seja alcançado. Por trás dela, temos um grande desafio para o programador: montar a estrutura do programa para ser executado pelo computador. É preciso partir do princípio de que o computador não pensa da mesma forma que nós, e não é inteligente para saber o que precisa ser feito, nem compreender as mensagens subjetivas. Figura 2 – Programador, desenvolvimento de código Fonte: Getty Images 9 roger Realce UNIDADE Introdução à Lógica, Abstrações e Algoritmos Dessa forma, organizar as informações de modo claro e na ordem adequada é primordial para que a ação seja executada corretamente. A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, permitindo definir a sequência lógica para o desenvolvimento. Então, o que é lógica? Lógica de programação é a técnica de encadear pensa- mentos para atingir determinado objetivo. O uso da lógica me obriga a atender a coerência, a sequência lógica. O que pode ser descrito como uma sequência lógica? Ah, uma sequência de instru- ções, que devem ser seguidas para se cumprir uma determinada tarefa. Então, posso definir sequência lógica como passos executados até atingir um ob- jetivo ou solução de um problema. Agora que já conhecemos algumas definições, vamos à outra: Instrução. TANENBAUM em Sistemas operacionais modernos diz que na linguagem co- mum, entende-se por instruções como “um conjunto de regras ou normas defini- das para a realização ou emprego de algo”. Em informática, na área de TI ou desenvolvimento, instrução é a informação que indica a um computador uma ação elementar a executar. Contudo, devemos observar que uma ordem isolada não permite realizar o processo completo, pois, para isso, é necessário um conjunto de instruções colocadas em ordem sequen- cial e lógica. Existe uma ordem na hora de se criar um programa? Ex pl or Vamos a um exemplo, fazer uma omelete de batatas, opa, esse é fácil. Vamos ao que precisaremos para colocar em prática. Uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas etc... É evidente que essas instruções devem ser executadas em uma ordem adequa- da – não se pode descascar as batatas depois de fritá-las. Dessa maneira, uma instrução tomada em separado não tem muito sentido. Para obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem corre- ta. Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computadoruma ação elementar a executar. 10 roger Realce 11 Diferentes Níveis de Abstração Pronto, os conceitos iniciais já conhecemos, agora vamos a algo um pouco mais complexo... A abstração, ela é um conceito fundamental em ciência da computação porque está diretamente ligada ao conceito de modelagem. No entanto, é difícil de explicar, e difícil de exemplificar. Em qualquer disciplina que lida com complexidade, abstrair de- talhes é de fundamental importância. Figura 3 – Abstração, abstrair, entender Fonte: Getty Images Para o engenheiro de software, saber lidar com diferentes níveis de abstração é, ao mesmo tempo, um requisito da profissão, e um desafio sempre presente. Um questionamento presente em quase todos os processos de desenvolvimento é: qual é o nível correto de abstração que devo usar nesse caso? Essa é uma per- gunta recorrente para o profissional consciente de que lidar com níveis de abstra- ção é importante. Vamos lá, então, o que é abstração? Pura e simplesmente é a subtração de deta- lhes, ou seja, é a capacidade de expressar algo de maneira concisa, abstrata, sem que os detalhes fiquem à mostra. Para qualquer disciplina que lida com complexidade, abstrair detalhes é de fun- damental importância. Olha o que achei na internet para tentar exemplificar este conceito tão abstrato que é a palavra árvore. Segundo o site a ideia é que, ao ser visualizada uma árvore, percebemos (abstraímos) vários detalhes e pensamos em uma ideia geral, mesmo sabendo que existem diferentes tipos de árvores. A partir daí a comparação da ár- vore propriamente dita com a estrutura de dados em “árvore” que é fundamental 11 roger Realce roger Realce UNIDADE Introdução à Lógica, Abstrações e Algoritmos em programação. A partir da ideia de comparação entre a árvore que está na natureza e árvore em programação, foi solicitado aos alunos um exemplo, e um voluntário falou sobre o “controle remoto”, sua justificativa foi que nós usamos o controle remoto sem preocupação como ele funciona realizando a comparação semelhante à da árvore. A Arquitetura de Computadores é o projeto conceitual e fundamental da estrutura operacional de um sistema computacional. Ela é o estudo dos requisitos necessários para que um computador funcione e de como organizar os diversos componentes para obter melhores desempenhos. Por computador, pode-se entender qualquer tipo de dispositivo capaz de receber uma entrada, e que retorna uma saída, após realizar uma série de operações com base nos valores recebidos e armazenados. Seus modelos são de vários tipos. Uma das formas de classificá-los é por meio das seguintes categorias: • Desktop: computadores de baixo-custo e com desempenho razoável para um usuário “comum”. • Servidor: máquinas projetadas para ter um desempenho considerado bom para uma aplicação muito grande e complexa, ou então para um número muito grande de operações mais simples. Alguns servidores são simples com- putadores de desktop melhorados. Entretanto, existem também aqueles que possuem arquiteturas muito mais sofisticadas, contando com dezenas ou até mesmo centenas de processadores. • Sistemas Embarcados: possuem um uso dedicado à uma única tarefa e nor- malmente vêm embutidos em outros aparelhos como celulares, microondas, elevadores ou veículos. Possuem uma Entrada/Saída muito simples. Os princípios estudados em Arquitetura de Computadores são fundamentais para se projetar máquinas realmente eficientes. Computadores são aparelhos extremamente complexos. Para compreender o seu funcionamento, precisamos entender várias camadas de abstração diferente. A camada mais baixa de todas é aquela formada por transistores, tensão e corrente elétrica. Quem costuma lidar com esta camada são físicos e engenheiros eletricistas. Nesta camada, estuda-se o funcionamento de transistores e circuitos sempre levando em conta as propriedades físicas da corrente elétrica. Numa camada acima, estão as portas lógicas - todas elas compostas por transis- tores. Neste nível, estuda-se como criar estruturas mais complexas combinando-se as diversas portas como AND, OR e NOT para criar estruturas como multiplexado- res, flip-flops e somadores. Neste estágio, pode-se usar linguagens como o Verilog ou VHDL para programar circuitos. A seguir, vemos desenhos que representam várias portas lógicas: 12 roger Realce roger Realce roger Realce roger Realce roger Realce roger Realce 13 Figura 4 – Portas lógicas, um dos níveis de abstração Fonte: Wikimedia Commons Su bindo mais um nível de abstração, começamos a lidar com estruturas mais complexas, como registradores e unidades lógicas aritméticas - todas compostas por muitos flip-flops, somadores e multiplexadores. Vemos como todas essas es- truturas realmente geram as instruções de cada máquina e como cada instrução funciona. É neste nível que costuma trabalhar um Arquiteto. Este será o nível que será abordado ao longo desta unidade. Abaixo, mostramos a imagem de uma Uni- dade Lógica Aritmética - estrutura usada por computadores para realizar cálculos: Figura 5 – Circuitos lógicos, um dos níveis de abstração Fonte: Wikimedia Commons Um nível além, estuda-se como combinar as instruções da camada anterior para realizar comandos mais sofisticados como as operações da linguagem C, e como coordenar o funcionamento de um sistema operacional por meio de interrupções e outros recursos. 13 roger Realce roger Realce UNIDADE Introdução à Lógica, Abstrações e Algoritmos Figura 6 – Kernel (núcleo) de um Sistema Operacional Acima desta camada, está o estudo do funcionamento de funções de bibliotecas, APIs e a programação de aplicativos e programas de computador simples. E, final- mente, na camada de abstração mais superior, está o funcionamento de um programa de computador, do ponto de vista do usuário: como utilizar um aplicativo já criado. Um dos conceitos mais importantes da orientação a objetos é a abstração. É um conceito que possui vários níveis e cada um pensa e codifica de uma maneira diferente. Lógica, programação, abstração, conhecimento. Ex pl or A abstração é tão importante que se não for bem pensada, o código pode se tornar uma catástrofe, tanto na criação quanto na manutenção. Por isso, conhecer bem a abstração e seus níveis é essencial. São eles: Abstração nível 1 (básico): • Todos os objetos representados são objetos da vida real. • Vantagens: É bem simples. • Desvantagens: Não é muito flexível. Entenda: Se fosse necessário inserir uma Galinha de Brinquedo, que bica e come, mas que não voa, seria necessário fazer várias adaptações. Abstração nível 2 (detalhamento): • Conceitos também são representados como objetos. • Vantagens: Possui boa simplicidade; possui alguma flexibilidade. • Desvantagens: Flexibilidade apenas parcial. Entenda: Se fosse necessário inserir várias galinhas, teria que se implementar, normalmente, o mesmo comportamento em todas elas, tendo assim muita du- plicação de código. 14 roger Realce roger Realce roger Realce 15 Abstração nível 3 (aprimoramento): • Comportamentos e conceitos também são representados como objetos. • Vantagens: Alto nível de flexibilidade; boa reutilização de código. • Desvantagens: Possui baixa simplicidade (arquitetura mais complexa); é difícil mapear, de início, os pontos extensíveis do projeto. Entenda: Ao criar o projeto de galinhas, não se sabe se amanhã terão outros animais e que características eles têm em comum. Abstração nível 4 (aprofundamento): • Comportamentos, conceitos e atributos também são representados como ob- jetos (Tiny Types). • Vantagens: Alto nível de flexibilidade; alta reutilização de código. • Desvantagens: Muitos frameworks não suportam esse formato de abstração. Alguns que suportam, necessitariam de muitas configurações. Algoritmos Vamos recapitular um pouco: Lógica é a técnica utilizada para desenvolver instruções em uma sequência para atingir determinado objetivo. Ela também é a organização e planejamento deins- truções, em um algoritmo, com o objetivo de tornar viável a implementação de um programa ou software. A lógica de programação nada mais é do que a organização coerente das instru- ções do programa para que seu objetivo seja alcançado. Por trás dela, temos um grande desafio para o programador: montar a estrutura do programa para ser executado pelo computador. É preciso partir do princípio de que o computador não pensa da mesma forma que nós e não é inteligente para saber o que precisa ser feito, nem compreender as mensagens subjetivas. A abstração é um conceito fundamental em ciência da computação porque está diretamente ligada ao conceito de modelagem. No entanto, é difícil de explicar, e difícil de exemplificar. Em qualquer disciplina que lida com complexidade, abstrair de- talhes é de fundamental importância. Para o engenheiro de software, saber lidar com diferentes níveis de abstração é, ao mesmo tempo, um requisito da profissão e um desafio sempre presente. Um questionamento presente em quase todos os processos de desenvolvimento é: Qual o nível correto de abstração devo usar nesse caso? Essa é uma pergunta recor- rente para o profissional consciente de que lidar com níveis de abstração é importante. Vamos lá, então o que é abstração? Pura e simplesmente é a subtração de deta- lhes, ou seja, é a capacidade de expressar algo de maneira concisa, abstrata, sem que os detalhes fiquem à mostra. 15 roger Realce roger Realce roger Realce roger Realce UNIDADE Introdução à Lógica, Abstrações e Algoritmos Agora vamos ao algoritmo. Embora às vezes não percebamos, utilizamos algoritmos no nosso dia-a-dia e não sabemos. Para a execução de alguma tarefa ou mesmo para resolver algum problema, muitas vezes, inconscientemente, executamos algoritmos. Mas o que é Algoritmo? Algoritmo é simplesmente uma “receita” para executarmos uma tarefa ou re- solver algum problema. E como toda receita, um algoritmo também deve ser finito. Se seguirmos uma receita de bolo corretamente, conseguiremos fazer o bolo. A computação utiliza muito esse recurso, então, se você pretende aprender programação, obviamente deve saber o que é algoritmo. Algoritmo: Sequência de passos ordenados que visam atender a um objetivo previamente determinado. Além disso, é parte da documentação. Ex pl or O computador, para que possa resolver um problema, ou executar uma tarefa, precisa de instruções ordenadas de forma lógica, e escritas em uma linguagem que ele possa compreender (programa). Exemplo de Desenvolvimento com Algoritmos Exemplo de Algoritmo Imagine o trabalho de um recepcionista de cinema: ele deve conferir os bilhetes e direcionar o cliente para a sala correta. Além disso, se o cliente estiver 30 minutos adiantado, o recepcionista deve informar que a sala do filme ainda não está aberta. E quando o cliente estiver 30 minutos atrasado, o recepcionista deve informar que a entrada não é mais permitida. Essas regras não são 100% verdadeiras. Foram assim definidas para fins didáticos! Ex pl or Vamos escrever um algoritmo para descrever a atividade do recepcionista. Algoritmo Recepcionista de Cinema Inicio 1. Solicitar ao cliente o bilhete do filme. 2. Conferir a data e o horário do filme no bilhete. 16 roger Realce 17 Se data/hora atual > data/hora do filme + 30 minutos Então 3. Informar ao cliente que o tempo limite para entrada foi excedido. 4. Não permitir a entrada. Senão Se data/hora atual < data/hora do filme - 30 minutos Então 5. Informar ao cliente que a sala do fi lme ainda não foi liberada para entrada. 6. Não permitir a entrada. Senão 7. Permitir a entrada. 8. Indicar ao cliente onde fi ca a sala do fi lme. Fim-Se Fim Qualquer pessoa que seguir esses passos executará a função do recepcionista do cinema. Concorda? É importante notar que o algoritmo tem um fluxo que pode seguir diferentes caminhos, dependendo da situação em que se encontra. Outro aspecto interessante é que o algoritmo é finito, uma hora ele tem que acabar! Pseudocódigo: tipo de algoritmo que utiliza uma linguagem fl exível, intermediária entre a linguagem natural e a linguagem de programação. É utilizado para organização do racio- cínio lógico a ser seguido para execução de uma tarefa, bem como para documentação de uma rotina em um sistema. Ex pl or Exemplo: leia nome, idade e salário de uma pessoa e exiba na tela. Programa exemplo_1 (Nome do pseudocódigo); Var nome: caracter → Declaração das variáveis – todas as variáveis a serem utilizadas devem ser previamente declaradas Idade: inteiro salário: real Início Leia (nome); → Corpo do pseudocódigo – onde as ins- truções e as condições são indicadas.Leia (idade); Leia (salário); Escreva (‘Nome:...’, nome); Escreva (‘Idade:...’, Idade); Escreva (‘Salário:...’, Salário); Fim 17 roger Realce UNIDADE Introdução à Lógica, Abstrações e Algoritmos VARIÁVEL: Uma informação que tem a possibilidade de ser alterada em algum dado mo- mento. Em programação, representa espaços na memória do computador reser- vados para armazenamento temporário de dados. Toda variável deve ser identificada, para isso: • Não utilize espaços entre as letras; • Não inicie o nome com números; • Não utilize palavras reservadas à linguagem (em caso de programação); • Não utilize caracteres especiais; • Seja sucinto e utilize nomes coerentes. Cada linguagem de programação tem suas particularidades para declaração de variáveis e atribuição de tipos de dados. Tipos de Dados: • Numérico: Real ou Inteiro. • Real: qualquer número positivo ou negativo, inteiro ou fracionário (com pon- to flutuante). • Inteiro: qualquer número inteiro positivo ou negativo. Caracter: • Letras, números e caracteres especiais. • Recebe também as seguintes denominações: literal, texto ou string. • Dica: números armazenados em variáveis do tipo caracter não podem ser utilizados em cálculos. Lógico: • Aceita apenas um entre dois valores – verdadeiro ou falso. Faça um pseudocódigo que receba três valores que representarão os lados de um triângulo, e serão fornecidos pelo usuário, verifique se os valores formam um triân- gulo e classifique este triângulo como: • equilátero: 3 lados iguais; • isósceles: 2 lados iguais; • escaleno: 3 lados diferentes. Lembre-se para formar um triângulo: • nenhum dos lados pode ser igual a zero; • um lado não pode ser maior do que a soma dos outros dois. 18 roger Realce roger Realce roger Realce roger Realce roger Realce roger Realce 19 Programa triangulo; Var A,B,C: inteiro; Inicio Leia (A); Leia (B); Leia (C) ; Se (A<B+C) .e. (B<A+C) .e. (C<A+B) então Se (A = B) .e. (B = C) então Escreva (‘Triângulo equilátero’); Senão Se (A = B) .ou. (A = C) .ou. (C = B) então Escreva (‘Triângulo isósceles’); Senão Escreva (‘Triângulo escaleno’); Fim_se Fim_se Senão Escreva (‘Os valores fornecidos não formam um triângulo’); Fim_se Fim. • Fluxograma – Descreve a sequência de passos para a resolução de um proble- ma através de símbolos gráficos. A seguir, os símbolos mais comuns: Marca o início e o �nal da rotina processamento; Processamento pré-de�nido; Saída de dados via tela; Entrada de dados via teclado; Tomada de decisão; Conector. Seta de orientação do �uxo; Figura 6 19 UNIDADE Introdução à Lógica, Abstrações e Algoritmos O fluxograma pode ser feito horizontalmente ou verticalmente. Ex: Leia nome e idade de uma pessoa e mostre na tela. Inicio Nome Idade Fim Nome:’, Nome ‘Idade:’, Idade Figura 7 – Exemplo de Fluxograma 20 21 Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Livros Computer Science Unplugged Teachers’ Edition BELL, T.; WITTEN, I. H.; FELLOWS, M. Computer Science Unplugged Teachers’ Edition em Português. Computer Science Unplugged, 2011. Arquitetura de Computadores CARTER, N. Arquitetura de Computadores. Porto Alegre: Ed. Bookman, 2003. ColeçãoSchaum. Administração de Recursos de Informática CIA - Centro de Informática Aplicada - Pesquisa Anual - Administração de Recursos de Informática. 4. edição de 1993 e resultados preliminares da 5ª edição de 1994, São Paulo, FGV. Introdução à Ciência da Computação MOKARZEL, F.; SOMA, N. Introdução à Ciência da Computação. São Paulo: Campus Elsevier, 2008. Novas Aplicações com Microcomputadores MEIRELLES. F. S. Informática: Novas Aplicações com Microcomputadores. 2. Ed. Atualizada e Ampliada. São Paulo: McGraw-Hill/Makron Books, 2008. Redes e Sistemas de Comunicação de Dados STALLINGS, W. Redes e Sistemas de Comunicação de Dados. São Paulo: Campus Elsevier, 2005. Sistemas Operacionais Modernos TANENBAUM, A. Sistemas operacionais modernos. Rio de Janeiro: LTC. 1999. Sistemas Operacionais: Projeto e Implementação TANENBAUM, A. S.; WOODHULL, A. S. Sistemas Operacionais: Projeto e Implementação, 3. Ed. Porto Alegre: Bookman, 2008. 21 UNIDADE Introdução à Lógica, Abstrações e Algoritmos Referências BROOKSHEAR, J. G. Ciência da Computação: uma visão abrangente. 11. ed. Porto Alegre: Bookman, 2013. (e-book) LOUREIRO, C.A.H. et al. Redes de Computadores III: níveis de enlace e físico. Porto Alegre: Bookman, 2014. (e-book) GERSTING, J. L. Fundamentos Matemáticos para a Ciência da Computação. 7. ed. Rio de Janeiro: LTC, 2016. (e-book) SOUSA, L. B. Administração de Redes Locais. São Paulo: Erica, 2014. (e-book) STALLINGS, W. Arquitetura e Organização de Computadores. 5. ed. São Paulo: Pearson. (e-book) 22
Compartilhar