Capítulo 2

LÓGICA DE PROGRAMAÇÃO

      A lógica de programação é necessária para pessoas que desejam trabalhar com
desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o
desenvolvimento.
        Então o que é lógica? Lógica de programação é a técnica de encadear pensamentos para
atingir determinado objetivo.


Seqüência Lógica
       Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem
ser seguidas para se cumprir uma determinada tarefa.
      Seqüência Lógica são passos executados até atingir um objetivo ou solução de um
problema.


Instruções
       Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas
definidas para a realização ou emprego de algo”. Em informática, porém, instrução é a
informação que indica a um computador uma ação elementar a executar.
        Convém ressaltar que uma ordem isolada não permite realizar o processo completo, para
isso é necessário um conjunto de instruções colocadas em ordem seqüencial lógica. Por exemplo,
se quisermos fazer uma omelete de batatas, precisaremos 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 tem que ser executadas em uma ordem adequada – 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 correta.
       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 computador uma ação elementar a executar.


1. CONCEITOS BÁSICOS DE PROGRAMAÇÃO
        Para armazenar um algoritmo na memória de um computador e para que ele possa, em
seguida, comandar as operações a serem executadas, é necessário que ele seja programado, isto
é, que seja transcrito para uma linguagem que o computador possa entender, direta ou
indiretamente.


1.1. LINGUAGENS DE PROGRAMAÇÃO
        Linguagem é uma maneira de comunicação que segue uma forma e uma estrutura com
significado interpretável.
Portanto, linguagem de programação é um conjunto finito de palavras, comandos e
instruções, escritos com o objetivo de orientar a realização de uma tarefa pelo computador.
        Logicamente, a linguagem que nós utilizamos em nosso cotidiano é diferente da linguagem
utilizada pela máquina. A máquina trabalha somente com códigos numéricos (linguagem de
máquina), baseados nos números 0 e 1 (sistema binário), que representam impulsos elétricos,
ausente e presente.
        Assim, qualquer linguagem de programação deve estar situada entre dois extremos: o da
linguagem natural do homem (muito clara, porém lenta) e o da linguagem de máquina (muito
rápida, porém complexa).
     Este é o conceito de nível de linguagem: alto nível para as mais próximas da linguagem
humana; baixo nível para as mais semelhantes à linguagem de máquina.


1.2. TRADUTORES
        Para que um computador possa "entender" um programa escrito em uma linguagem de
alto nível, torna-se necessário um meio de tradução entre a linguagem utilizada no programa e a
linguagem de máquina. Este meio pode ser de dois tipos: compilador e interpretador.


Compilador: traduz o programa escrito em linguagem de alto nível (programa-fonte) para um
programa equivalente escrito em linguagem de máquina (programa-objeto).




Interpretador: traduz e envia para execução, instrução por instrução e o programa permanece na
forma fonte.




1.3. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO
       Existem diversas linguagens de programação, cada uma com suas características
específicas e com níveis de complexidade e objetivos diferentes:
           Linguagem de Máquina
                 Única compreendida pelo computador.
                 Específica de cada computador.
           Linguagens de Baixo Nível
                 Utilizam mnemônicos para representar instruções elementares
 Ex.: Assembly
           Linguagens de Alto Nível
                 Utiliza instruções próximas da linguagem humana de forma a facilitar o
                   raciocínio.
                 Exemplos: Uso científico : Fortran
                               Propósito geral : Pascal, C, Basic
                               Uso comercial : Cobol, Clipper
                               Uso específico : Lisp, Prolog
                               Visuais : Delphi, Visual Basic, Java


1.4. CRITÉRIOS DE QUALIDADE DE UM PROGRAMA
 Integridade: Refere-se à precisão das informações manipuladas pelo programa, ou seja, os
  resultados gerados pelo processamento do programa devem estar corretos, caso contrário o
  programa simplesmente não tem sentido.

 Clareza: Refere-se à facilidade de leitura do programa. Se um programa for escrito com clareza,
  deverá ser possível a outro programador seguir a lógica do programa sem muito esforço, assim
  como o próprio autor do programa entendê-lo após ter estado um longo período afastado dele.
  O Pascal favorece a escrita de programas com clareza e legibilidade.

 Simplicidade: A clareza e precisão de um programa são normalmente melhoradas tornando as
  coisas o mais simples possível, consistentes com os objetivos do programa. Muitas vezes torna-
  se necessário sacrificar alguma eficiência de processamento, de forma a manter a estrutura do
  programa mais simples.

 Eficiência: Refere-se à velocidade de processamento e a correta utilização da memória. Um
  programa deve ter performance SUFICIENTE para atender às necessidades do problema e do
  usuário, bem como deve utilizar os recursos de memória de forma moderada, dentro das
  limitações do problema.

 Modularidade: Consiste no particionamento do programa em módulos menores bem
  identificáveis e com funções específicas, de forma que o conjunto desses módulos e a interação
  entre eles permitem a resolução do problema de forma mais simples e clara.

 Generalidade: É interessante que um programa seja tão genérico quanto possível de forma a
  permitir a reutilização de seus componentes em outros projetos.




2. PARADIGMAS DE PROGRAMAÇÃO
        Um paradigma se define na forma como o programador lida com um determinado
problema. Muitos pensam que as linguagens de programação surgiram em uma escala linear, ou
seja, que na primeira geração delas o homem se adaptava às máquinas e, depois de várias outras
gerações, as linguagens evoluíram umas das outras e capacitaram as máquinas a fazer as
necessidades humanas. Na verdade, as linguagens surgiram em diferentes trajetórias, cada uma
seguindo um determinado paradigma. Além disso, não é verdadeira a proposição que diz que uma
linguagem qualquer é, sem exceção, a evolução da linguagem anterior (historicamente).
As linguagens existentes hoje foram se adaptando a uma única forma de programação e às
linguagens inseridas no mesmo paradigma. Dentre esses paradigmas, vamos conceituar quatro,
que são considerados os principais: paradigma imperativo, lógico, funcional e orientado a
objetos.


2.1. PARADIGMA IMPERATIVO
       “Primeiro faça isso e depois faça aquilo.”
       A frase acima resume o paradigma imperativo, também conhecido como paradigma
procedural. O problema é analisado até que se encontre uma solução. Basicamente, é uma
sequência de comandos que o computador executará, passo-a-passo, modificando dados e
variáveis a fim de chegar ao resultado esperado. Algol, Basic, C e Pascal são algumas das
linguagens de programação que seguem esse paradigma.


2.2. PARADIGMA FUNCIONAL
       “Subdividir o problema em outras funções e resolver cada uma separadamente, pois os
resultados encontrados serão utilizados posteriormente.”
        Sobre o paradigma funcional, é fácil ilustrar através de um fluxograma. Cada bloco recebe
no topo uma entrada de dados e retorna, na base, os dados de saída. A solução geral é dividida em
várias funções (daí o nome funcional) que, no final, se associam para mostrar o resultado na tela.
        No (clássico) fluxograma ao lado, o problema –
fazer a média das notas de N alunos -, é dividido em
duas etapas: a soma das N notas e a atribuição da
quantidade N de alunos à variável contador. Ambos os
resultados, soma das notas e contagem dos alunos,
são utilizados na operação final, que é dividir a soma
das notas pelo número de alunos. É um exemplo muito
simples, mas que, penso eu, foi útil para exemplificar o
conceito.


2.3. PARADIGMA LÓGICO
       “Qual é o problema?”
       O paradigma lógico ou declarativo caracteriza-se pelo método preciso de descrever um
problema, sem se preocupar com qual algoritmo será utilizado para resolvê-lo. A idéia é criar um
algoritmo “universal”, capaz de solucionar qualquer problema. O problema se adapta a esse
algoritmo, e não o contrário. É baseado em axiomas (verdades universais) e regras de inferência.
Prolog é uma linguagem lógica que ilustra essa definição.


2.4. PARADIGMA ORIENTADO A OBJETOS
     “Um conjunto de classes faz a interação entre objetos (instâncias) e, com a troca de
mensagens entre eles, forma-se o software como um todo.”
       Praticamente tudo é objeto, cada qual com estrutura e comportamento próprios. Esses
objetos são classificados em classes e comunicam entre si. Cada uma dessas representa um
determinado fenômeno e seus objetos são organizados hierarquicamente. O conjunto de classes
faz a interação entre objetos e a troca de mensagens entre eles forma o software como um todo.
      Esse paradigma vem ganhando cada vez mais popularidade. Isso se dá devido ao grande
número de vantagens em trabalhar com orientação a objeto, como a flexibilidade do código
quando se trabalha em sistemas de grande porte e com uma maior equipe de programadores.




EXERCÍCIOS PROPOSTOS


Questão 01:
Defina, com suas palavras, os seguintes termos:
a) programa
b) linguagem de programação
c) tradutor


Questão 02:
Qual a diferença entre linguagem de baixo nível e linguagem de alto nível?


Questão 03:
Explique a diferença entre compilador e interpretador.


Questão 04:
Cite e explique com suas palavras os quatro paradigmas tradicionais de programação.

Cap02

  • 1.
    Capítulo 2 LÓGICA DEPROGRAMAÇÃO A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o desenvolvimento. Então o que é lógica? Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo. Seqüência Lógica Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa. Seqüência Lógica são passos executados até atingir um objetivo ou solução de um problema. Instruções Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas definidas para a realização ou emprego de algo”. Em informática, porém, instrução é a informação que indica a um computador uma ação elementar a executar. Convém ressaltar que uma ordem isolada não permite realizar o processo completo, para isso é necessário um conjunto de instruções colocadas em ordem seqüencial lógica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos 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 tem que ser executadas em uma ordem adequada – 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 correta. 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 computador uma ação elementar a executar. 1. CONCEITOS BÁSICOS DE PROGRAMAÇÃO Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas, é necessário que ele seja programado, isto é, que seja transcrito para uma linguagem que o computador possa entender, direta ou indiretamente. 1.1. LINGUAGENS DE PROGRAMAÇÃO Linguagem é uma maneira de comunicação que segue uma forma e uma estrutura com significado interpretável.
  • 2.
    Portanto, linguagem deprogramação é um conjunto finito de palavras, comandos e instruções, escritos com o objetivo de orientar a realização de uma tarefa pelo computador. Logicamente, a linguagem que nós utilizamos em nosso cotidiano é diferente da linguagem utilizada pela máquina. A máquina trabalha somente com códigos numéricos (linguagem de máquina), baseados nos números 0 e 1 (sistema binário), que representam impulsos elétricos, ausente e presente. Assim, qualquer linguagem de programação deve estar situada entre dois extremos: o da linguagem natural do homem (muito clara, porém lenta) e o da linguagem de máquina (muito rápida, porém complexa). Este é o conceito de nível de linguagem: alto nível para as mais próximas da linguagem humana; baixo nível para as mais semelhantes à linguagem de máquina. 1.2. TRADUTORES Para que um computador possa "entender" um programa escrito em uma linguagem de alto nível, torna-se necessário um meio de tradução entre a linguagem utilizada no programa e a linguagem de máquina. Este meio pode ser de dois tipos: compilador e interpretador. Compilador: traduz o programa escrito em linguagem de alto nível (programa-fonte) para um programa equivalente escrito em linguagem de máquina (programa-objeto). Interpretador: traduz e envia para execução, instrução por instrução e o programa permanece na forma fonte. 1.3. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Existem diversas linguagens de programação, cada uma com suas características específicas e com níveis de complexidade e objetivos diferentes:  Linguagem de Máquina  Única compreendida pelo computador.  Específica de cada computador.  Linguagens de Baixo Nível  Utilizam mnemônicos para representar instruções elementares
  • 3.
     Ex.: Assembly  Linguagens de Alto Nível  Utiliza instruções próximas da linguagem humana de forma a facilitar o raciocínio.  Exemplos: Uso científico : Fortran Propósito geral : Pascal, C, Basic Uso comercial : Cobol, Clipper Uso específico : Lisp, Prolog Visuais : Delphi, Visual Basic, Java 1.4. CRITÉRIOS DE QUALIDADE DE UM PROGRAMA  Integridade: Refere-se à precisão das informações manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrário o programa simplesmente não tem sentido.  Clareza: Refere-se à facilidade de leitura do programa. Se um programa for escrito com clareza, deverá ser possível a outro programador seguir a lógica do programa sem muito esforço, assim como o próprio autor do programa entendê-lo após ter estado um longo período afastado dele. O Pascal favorece a escrita de programas com clareza e legibilidade.  Simplicidade: A clareza e precisão de um programa são normalmente melhoradas tornando as coisas o mais simples possível, consistentes com os objetivos do programa. Muitas vezes torna- se necessário sacrificar alguma eficiência de processamento, de forma a manter a estrutura do programa mais simples.  Eficiência: Refere-se à velocidade de processamento e a correta utilização da memória. Um programa deve ter performance SUFICIENTE para atender às necessidades do problema e do usuário, bem como deve utilizar os recursos de memória de forma moderada, dentro das limitações do problema.  Modularidade: Consiste no particionamento do programa em módulos menores bem identificáveis e com funções específicas, de forma que o conjunto desses módulos e a interação entre eles permitem a resolução do problema de forma mais simples e clara.  Generalidade: É interessante que um programa seja tão genérico quanto possível de forma a permitir a reutilização de seus componentes em outros projetos. 2. PARADIGMAS DE PROGRAMAÇÃO Um paradigma se define na forma como o programador lida com um determinado problema. Muitos pensam que as linguagens de programação surgiram em uma escala linear, ou seja, que na primeira geração delas o homem se adaptava às máquinas e, depois de várias outras gerações, as linguagens evoluíram umas das outras e capacitaram as máquinas a fazer as necessidades humanas. Na verdade, as linguagens surgiram em diferentes trajetórias, cada uma seguindo um determinado paradigma. Além disso, não é verdadeira a proposição que diz que uma linguagem qualquer é, sem exceção, a evolução da linguagem anterior (historicamente).
  • 4.
    As linguagens existenteshoje foram se adaptando a uma única forma de programação e às linguagens inseridas no mesmo paradigma. Dentre esses paradigmas, vamos conceituar quatro, que são considerados os principais: paradigma imperativo, lógico, funcional e orientado a objetos. 2.1. PARADIGMA IMPERATIVO “Primeiro faça isso e depois faça aquilo.” A frase acima resume o paradigma imperativo, também conhecido como paradigma procedural. O problema é analisado até que se encontre uma solução. Basicamente, é uma sequência de comandos que o computador executará, passo-a-passo, modificando dados e variáveis a fim de chegar ao resultado esperado. Algol, Basic, C e Pascal são algumas das linguagens de programação que seguem esse paradigma. 2.2. PARADIGMA FUNCIONAL “Subdividir o problema em outras funções e resolver cada uma separadamente, pois os resultados encontrados serão utilizados posteriormente.” Sobre o paradigma funcional, é fácil ilustrar através de um fluxograma. Cada bloco recebe no topo uma entrada de dados e retorna, na base, os dados de saída. A solução geral é dividida em várias funções (daí o nome funcional) que, no final, se associam para mostrar o resultado na tela. No (clássico) fluxograma ao lado, o problema – fazer a média das notas de N alunos -, é dividido em duas etapas: a soma das N notas e a atribuição da quantidade N de alunos à variável contador. Ambos os resultados, soma das notas e contagem dos alunos, são utilizados na operação final, que é dividir a soma das notas pelo número de alunos. É um exemplo muito simples, mas que, penso eu, foi útil para exemplificar o conceito. 2.3. PARADIGMA LÓGICO “Qual é o problema?” O paradigma lógico ou declarativo caracteriza-se pelo método preciso de descrever um problema, sem se preocupar com qual algoritmo será utilizado para resolvê-lo. A idéia é criar um algoritmo “universal”, capaz de solucionar qualquer problema. O problema se adapta a esse algoritmo, e não o contrário. É baseado em axiomas (verdades universais) e regras de inferência. Prolog é uma linguagem lógica que ilustra essa definição. 2.4. PARADIGMA ORIENTADO A OBJETOS “Um conjunto de classes faz a interação entre objetos (instâncias) e, com a troca de mensagens entre eles, forma-se o software como um todo.” Praticamente tudo é objeto, cada qual com estrutura e comportamento próprios. Esses objetos são classificados em classes e comunicam entre si. Cada uma dessas representa um
  • 5.
    determinado fenômeno eseus objetos são organizados hierarquicamente. O conjunto de classes faz a interação entre objetos e a troca de mensagens entre eles forma o software como um todo. Esse paradigma vem ganhando cada vez mais popularidade. Isso se dá devido ao grande número de vantagens em trabalhar com orientação a objeto, como a flexibilidade do código quando se trabalha em sistemas de grande porte e com uma maior equipe de programadores. EXERCÍCIOS PROPOSTOS Questão 01: Defina, com suas palavras, os seguintes termos: a) programa b) linguagem de programação c) tradutor Questão 02: Qual a diferença entre linguagem de baixo nível e linguagem de alto nível? Questão 03: Explique a diferença entre compilador e interpretador. Questão 04: Cite e explique com suas palavras os quatro paradigmas tradicionais de programação.