Conceitos básicos e definições sobre programação
Transcrição
Conceitos básicos e definições sobre programação
Conceitos básicos e definições sobre programação Começaremos com umas definições um pouco técnicas, mas que porém são imprescindíveis para a aprendizagem. Tecnologia Dentro do campo que nos interessa, a tecnologia tem o objetivo de eliminar as tarefas repetitivas, facilitando o trabalho e fazendo-o mais eficiente assim como aumentando a produtividade e os benefícios da empresa. Programação A programação é uma das etapas mais importantes do ciclo de vida de um projeto (explicaremos mais adiante o que é este termo), e requer um método de trabalho. A programação é o resultado de tal trabalho. A programação é o instrumento que permite a execução das tarefas automatizadas de um sistema informático. As ferramentas que utilizaremos para programar são as linguagens de programação, através das quais codificaremos os programas. Programa Conjunto de instruções entendíveis pelo computador que permitem realizar um trabalho ou resolver um problema. Um programa deve ser finito, ou seja, tem que ter um início e um fim. Tem que estar bem confeccionado para que, ao introduzir um dado, saia uma solução e se, se voltasse a introduzir o mesmo dado, saísse de novo a mesma solução. Metodologia da programação Entende-se como metodologia da programação ao conjunto de normas, métodos e anotações que nos indicam a forma de programar. Cada linguagem de programação segue uma metodologia diferente. Linguagem de programação É um conjunto de regras semânticas assim como sintáticas que os programadores usam para a codificação de instruções de um programa ou algoritmo de programação. Existem várias linguagens de programação. Ambiente de programação ou ambiente de desenvolvimento É o conjunto de ferramentas utilizadas para a elaboração de um programa. Recursos Conjunto de componentes hardware que utilizaremos para a elaboração de um programa (cpu, disco rígido…..). Uma vez conhecidos os conceitos básicos necessários para a aprendizagem da programação podemos começar a ver os diferentes tipos de linguagens de programação. Tipos de linguagens de programação Existem dois tipos de linguagens claramente diferenciadas; as linguagens de baixo nível e as de alto nível. Por Sara Alvarez Langa O computador só entende uma linguagem conhecida como código binário ou código máquina, consistente em zeros e uns. Ou seja, só utiliza 0 e 1 para codificar qualquer ação. As linguagens mais próximas à arquitetura hardware se denominam linguagens de baixo nível e as que se encontram mais próximas aos programadores e usuários se denominam linguagens de alto nível. Linguagens de baixo nível São linguagens totalmente dependentes da máquina, ou seja, que o programa que se realiza com este tipo de linguagem não pode ser migrado ou utilizado em outras máquinas. Ao estar praticamente desenhado a medida do hardware, aproveitam ao máximo as características do mesmo. Dentro deste grupo se encontram: A linguagem máquina: esta linguagem ordena à máquina as operações fundamentais para seu funcionamento. Consiste na combinação de 0's e 1's para formar as ordens entendíveis pelo hardware da máquina. Esta linguagem é muito mais rápida que as linguagens de alto nível. A desvantagem é que são bastante difíceis de manejar e usar, além de ter códigos fonte enormes onde encontrar uma falha é quase impossível. A linguagem Assembler é um derivado da linguagem máquina e está formada por abreviaturas de letras e números chamados mnemotécnicos. Com o aparecimento desta linguagem se criaram os programas tradutores para poder passar os programas escritos em linguagem assembler a linguagem máquina. Como vantagem com respeito ao código máquina é que os códigos fontes eram mais curtos e os programas criados ocupavam menos memória. As desvantagens desta linguagem continuam sendo praticamente as mesmas que as da linguagem assembler, acrescentando a dificuldade de ter que aprender uma nova linguagem difícil de provar e manter. Linguagens de alto nível São aquelas que se encontram mais próximas à linguagem natural que à linguagem máquina. Estão dirigidas a solucionar problemas mediante o uso de EDD's. Nota: EDD's são as abreviaturas de Estruturas Dinâmicas de Dados, algo muito utilizado em todas as linguagens de programação. São estruturas que podem mudar de tamanho durante a execução do programa. Permitem-nos criar estruturas de dados que se adaptem às necessidades reais de um programa. Trata-se de linguagens independentes da arquitetura do computador. Sendo assim, à princípio, um programa escrito em uma linguagem de alto nível, pode ser migrado de uma máquina a outra sem nenhum tipo de problema. Estas linguagens permitem ao programador se esquecer completamente do funcionamento interno da máquina/s para a que está desenhando o programa. Somente necessita de um tradutor que entenda o código fonte como as características da máquina. Costumam usar tipos de dados para a programação e existem linguagens de propósito geral (qualquer tipo de aplicação) e de propósito específico (como FORTRAN para trabalhos científicos). Linguagens de Médio nível Trata-se de um termo não aceito por todos, porém certamente vocês já devem ter escutado. Estas linguagens se encontram em um ponto médio entre as duas anteriores. Dentro destas linguagens poderia se situar C já que pode acessar aos registros do sistema, trabalhar com endereços de memória, todas elas características de linguagens de baixo nível e ao mesmo tempo realizar operações de alto nível. Gerações A evolução das linguagens de programação pode ser dividida em 5 etapas ou gerações. Primeira geração: Linguagem máquina. Quinta geração: Aqui se encontram as linguagens orientadas à inteligência artificial. Estas linguagens ainda estão pouco desenvolvidas. Ex: LISP Segunda geração: Criaram-se as primeiras linguagens assembler. Terceira geração: Criam-se as primeiras linguagens de alto nível. Ex: C, Pascal, Cobol… Quarta geração: São linguagens capazes de gerar código por si só, são os chamados RAD, com o qual podese realizar aplicações sem ser um expert na linguagem. Aqui também se encontram as linguagens orientadas a objetos, tornando possível a reutilização de partes do código para outros programas. Ex: Visual, Natural Adabes… Processo de tradução das linguagens de programação Explicamos o processo mais importante na hora de fazer funcionar um programa realizado em linguagens de alto e médio nível. Por Sara Alvarez Langa Quando programamos em linguagens de alto nível, o que estamos fazendo na verdade é o código fonte desse programa. Este código fonte deve ser traduzido à binário para que as instruções que contém possam ser entendidas e executadas pela máquina. Para isto existe um programa encarregado de realizar a tradução, chamado tradutor da linguagem. Estes tradutores podem ser de dois tipos: Assembler São os encarregados de traduzir os programas escritos na linguagem assembler à linguagem máquina. Compiladores São programas que lêem o código fonte e o traduzem ou convertem a outra linguagem. Estes programas lhe mostram os erros existentes no código fonte. Etapas do processo de compilação: 1. 2. 3. Edição. Esta fase consiste em escrever o programa empregando alguma linguagem e um editor. Como resultado nos dará o código fonte de nosso programa. Compilação. Nesta fase se traduz o código fonte obtido na fase anterior a código máquina. Se não se produz nenhum erro se obtém o código objeto. No caso de erros o compilador os mostraria para nos ajudar a corrigi-los e se procederia a sua compilação de novo, uma vez corrigidos. Linkado. Esta fase consiste em unir o arquivo gerado na fase dois com determinadas rotinas internas da linguagem, obtendo o programa executável. Existem dois tipos de linkados: o o Linkado estático: Os binários das bibliotecas se acrescentam aos nossos binários compilados gerando o arquivo executável. Linkado dinâmico: não se acrescentam as bibliotecas ao nosso binário e sim que fará que se carreguem na memória as bibliotecas que nesse momento se necessitem. Uma vez traduzido, compilado e linkado o arquivo está pronto para sua execução onde também poderão surgir problemas e falhas, para os quais teríamos que voltar a realizar todo o processo anteriormente citado, de modo que possam ser corrigidos. Por este motivo é importante realizar numerosas provas em tempo de execução antes de apresentar o programa ao cliente. Outro sistema para a execução de nosso código fonte é mediante o uso de intérpretes (estes não se encontrariam dentro dos tradutores). Intérpretes Os intérpretes realizam a tradução e execução de forma simultânea, ou seja, um intérprete lê o código fonte e vai executando-o ao mesmo tempo. As diferenças entre um compilador e um intérprete basicamente são: Um programa compilado pode funcionar por si só enquanto que um código traduzido por um intérprete não pode funcionar sem este. Um programa traduzido por um intérprete pode ser executado em qualquer máquina já que, cada vez que se executa o intérprete, tem que compila-lo. Um arquivo compilado é muito mais rápido que um interpretado. Manejando bits Importância do manejo dos bits no mundo da programação. Por Emmanuel García De Caro Como bem é conhecido um Byte é um agrupamento de 8 bits respectivamente, cada bit faz parte do sistema de numeração Binário a quem deve seu nome, ou seja, de base 2 em outras palavras pode armazenar valores compreendidos entre 0 y 1. Se lembramos que um sistema de numeração se conforma de um conjunto de regras e princípios que permite expressar ou definir um número válido dentro do mesmo, podemos afirmar que a maioria deles (Sistemas: binários, octanos, decimais, hexadecimais, etc..) se pueden representar mediante un polinomio sencillo que nos permitirá entender su lógica: Número = N*basen + N*basen-1+ N*basen-2 até que a base fique elevada à 0 sempre e quando não contiver decimais o "Número" Onde Número é o valor expressado dentro do sistema, base como seu nome o indica a base do sistema (se é binário : 2 , octano: 8, decimal: 10, hexadecimal : 16, etc…) e n a posição que ocupa o digito "N" dentro do Número. Exemplos em sistema decimal (base:10): 18598 1*10 4 + 8*10 3 + 5*10 2 + 9*10 1 + 8*10 0 Descompomos o valor expressado "18598" multiplicando-o pela base do sistema (10) elevada à posição do dígito na expressão. O número 1 encontra-se iniciando a expressão e salva em seu interior 10 000 (Para comprova-lo: se eliminarmos o 1 o resultado será (18598-10 000)) portanto 10 000 é igual a 10 4 (1*104)=10 000 + (8*103)= 8 000… No sistema de numeração binário a mesma fórmula é aplicável: 10 (número binario) = 1*2 1 + 0*2 0 O que indica que 10, no sistema decimal é igual 2, na verdade, no sistema de numeração binário pode-se definir qualquer número inteiro maior ou igual a 0, entretanto a estrutura de armazenamento Byte só foi desenhada desde sua origem para armazenar até 256 porque inclui como máximo 8 bits (28 = 256) (lembremos que leva-se em conta o 0 pelo qual 255 equivalerá a 256) e foi escolhido este valor como máximo porque é a totalidade de caracteres disponível na tabla ASCII, que inclui todos os caracteres válidos dentro de um computador, para comprovar isto podemos salvar um caractere em um arquivo sem formato e como resultado teremos que sempre ocupará 1 byte, se colocamos 2 caracteres o tamanho do arquivo será igual a 2 bytes. O que justifica que 1 byte = 8 bits = pode armazenar até 256. e 1 bit é a mínima unidade na que se pode armazenar informação. Exemplo: o tipo booleano (bool) ocupa na memória 1 bit, portanto TRUE = 1 FALSE=0. Por esta razão a maioria dos hardwares com capacidade de armazenamento tais como Discos rígidos, memórias, e outros dispositivos; sua capacidade sempre será divisível entre 2 , assim como as demais estruturas de armazenamento ( Kb, Mb, Gb, Tb, etc) Como referia anteriormente, a tabela ASCII inclui todos os caracteres válidos dentro do computador, desde todas as letras em minúsculas e maiúsculas, números e outros especiais, estes últimos utilizados em sua maioria como delimitadores ou separadores guia dentro de um formato de arquivo de conteúdo binário (PDF, DOC, EXE, DLL, OCX, ENTRE OUTROS) Exemplo de delimitadores: O endereço IP inclui 4 pares de cujo valor máximo é 255 para poder representa-lo em decimal se faz mais que necessário, obrigatório o uso de delimitadores pelo qual se emprega um ". (Ponto)" de modo tal que 255.255.255.255, para reduzir esta informação a 4 bytes poderemos acudir à tabela ASCII. Por exemplo o caractere "A" dentro da tabela ASCII no sistema decimal ocupa 64, podemos executar uma função amplamente reconhecida por linguagens de programação entre eles (Delphi, C++, VB, Php, etc) chamada ORD que produzirá como resultado de ord(64) "A" se pelo contrário executarmos chr('A') o resultado será 64 em decimal, o qual representado em binário equivaleria a "1000000", embora 64 não ocupe fisicamente os 255 (1 byte completo) seu tamanho em disco sempre será 1 byte, porque a maioria de sistemas operacionais e hardware desde sua ensambladura está orientados para reservar um mínimo de espaço em memória e em disco levando em conta que esse valor pode ser modificado a 255 (máximo) ou 0 (mínimo) em qualquer momento. Portanto podemos dizer que um bit tem um valor de acordo com sua posição ou localização e para encontrar esse valor só temos que descompor 255. 128 62 32 16 8 4 2 1 1 2 3 4 5 6 7 8(bits) Como comentávamos anteriormente o bit se conforma de 0 e 1 respectivamente portanto afirmaremos a partir de agora que 0 É IGUAL A FALSO (false) E 1 É IGUAL A VERDADEIRO (true) se tivermos um conjunto de 8 bits o somaremos segundo sua posição, sempre e quando o bit for VERDADEIRO, ou seja, seu conteúdo for igual a 1, exemplo: dado os bits "10111011" para converte-lo a decimal aplicamos a tabela: 128 62 32 16 8 4 2 1 1 0 1 1 1011 E posteriormente, somamos somente os valores que são "VERDADEIROS" então: 128+32+16+8+2+1=187 Parabéns! 10111011=187!, então, podemos dizer que para armazenar 256 necessitaremos que os 8 bits sejam verdadeiros, ou seja, 8 bits e já teremos nosso byte. Para fazer o processo contrário, ou seja, de decimais a binário, só temos que descompor o decimal dividindo-o sempre entre 2 até que o valor seja igual a 1, o agrupamento dos resíduos obtidos será nosso valor binário; obviamente os resíduos sempre serão (0 ou 1). Os bits são amplamente utilizados para codificar dados, comprimir informação, etc. Por exemplo, o formato de imagens desenhado por Microsoft (.BMP) calcula a área da imagem, ou seja, base por altura ou o que é igual à largura pela altura, o qual assume como a quantidade de pontos disponíveis, estes pontos por sua vez armazenam uma cor hexadecimal de 3 pares conhecida como RGB que armazena as cores VERMELHO, VERDE E AZUL, pelo qual para o armazenamento da cor emprega 3 bytes (255,255,255) e os recebe com ASCII, por cada ponto , o que indica se uma imagem é de 10 px x 10 px empregará 300 bytes para armazenar os pontos e outros adicionais que salvam informação de propriedades e características de essencial importância. Utilizando bytes delimitadores ou separadores no caso de não conhecer o final do valor, ou seja, se a quantidade de bytes a empregar pelo cabeçalho do formato (que contém informação) se desconhece ou pode variar dependendo de fatores, se faz indispensável o uso de delimitadores (ASCII DEFINIDOS COMO DELIMITADORES), se pelo contrário sempre se situará entre os bytes 10 e 20, por exemplo (não será necessário). Por tal motivo quando lemos um arquivo (com um programa desenvolvido por nós) devemos especificar quantos bytes leremos por cada seqüência, no caso das cores dos formato (BMP) bastará ler de 3 em 3, cabe destacar que um arquivo pode ser lido até 1024 ou seja 1 KB de seqüência que equivale a uma linha de informação, a partir dessa base foram desenhados mecanismos de compreensão que agrupa os bits repetido em matrizes ou arrays. Para tornar possível este manejo existem alguns operadores similares aos de lógica ( OR, AND, NOT, XOR, ETC…) melhor conhecidos como operadores bit a bit. Deslocando bits: Podemos defini-lo como a ação de transportar bytes de um extremo da expressão a outro, como a expressão está conformada por 2 só se pode fazer em dois sentidos, esquerda e direita. a. Deslocando bits à esquerda (<<) Consiste em mover a quantidade de bit indicada na expressão, da esquerda à direita, esta operação equivale a multiplicar por 2. Por exemplo: 16 <<2 deslocaremos 2 bits da esquerda à direita 16 em binário equivale a 00010000 pelo qual moveremos os dois primeiros bits à parte de atrás do número (direita) de tal modo que ficará 01000000 o qual equivale a 64. Portanto se multiplicamos (16*2)=32 (32*2)=64 1 bit b. c. 2 bits Deslocando bits à direita (>>) Consiste em mover a quantidade de bit indicada na expressão, da direita à esquerda, esta operação equivale a dividir por 2. Por exemplo: 128 >>4 deslocaremos 4 bits da direita à esquerda. 128 em binário é igual a: 10000000, moveremos os últimos 4 bits à parte inicial ( da direita a esquerda), o resultado será 00001000 cujo valor é igual a 8 portanto se dividimos (128 / 2)=64 (64/2)=32 (32/2)=16 (16/2)=8 1 bit 2 bits 3 bits 4 bits d. Emprega-se 2 por ser a base do sistema de numeração binário. Operador de lógica OR | Lembraremos que chamaremos 0 em binário False e 1 True, então o operador OR Avaliará as expressões e produzirá TRUE ou seja, 1 só se um dos 2 bits a comparar for igual a 1. Exemplo: Expressão: 5 | 12 5 em binário é igual a 00000101 12 em binário = 00001100 Resultado : 00001101 = 13 Só se um par dos bits a comparar for 1 o resultado será 1, se comporta exatamente igual a uma condição: (true || false) é igual a true; (false || false) é igual a false, sua razão se deve a que a condição de dois ou mais argumentos se transforma sempre em binários para realizar a comparação utilizando o processador e a memória de computador. Operador de lógica AND & Só se o par de bits a comparar for igual a 1 o resultado será 1. Expressão: 5 & 12 5 em binário é igual a 00000101 12 em binário = 00001100 Resultado : 00000100 = 4 É parecido a (TRUE && TRUE) é igual a true, (False && True) é igual a false. Operador XOR ^ Só se o par de bits a comparar for diferente será igual a 1. Expresión: 5 ^ 12 5 em binário é igual a 00000101 12 em binário = 00001100 Resultado : 00001001 = 9 Similar a (TRUE XOR FALSE) es igual a true, ( TRUE XOR TRUE) es igual a false. Operador Not ~ Só se o bit a comparar for igual a 0 (False) será igual a 1. Expressão: ~5 5 em binário é igual a 00000101 Resultado : 00000010 = 2 Similar a (!FALSE) é igual a true Importância do manejo dos bits Como programador darrei uma opinião muito pessoal, torna-se indispensável na construção de aplicações em grande escala o desenvolvimento de formatos pessoais baseados em esquemas que armazenam a informação empregada de modo comprimido para a utilização de um ou outros recursos de nossa aplicação, permitindo ao usuário final maior comodidade y segurança durante o transporte da informação e oferecendo-lhe a capacidade de torna-las compatíveis com outras aplicações, e deixar a um lado (dependendo do objetivo) o típico uso de banco de dados que requerem recursos adicionais do computador ademais de interpretadores, etc. Considero que a informação redigida contribui consideravelmente a encaminhar seus esforços nessa direção. Conclusão: Podemos dizer que o computador sem software só tem capacidades para fazer operações aritméticas simples (somas, subtrações, multiplicação, etc…) E é o software que valendo essas simples operações com processos como os explicados anteriormente, pode criar a interface como da que hoje desfrutamos em matéria de Sistemas Operacionais, todas as linguagens desde as mais altas como Php até as mais baixas como Assembler passam por binário, cada vez que movemos o Mouse isso está produzindo um processamento de dados binários, enfim, oriente seus esforços como programador a reduzir ao máximo o consumo de recursos, certamente você conseguirá uma soma consumindo menor quantidade de recursos que o habitual. Tipos de programação Existe várias classes de programação, dependendo dos métodos utilizados e as técnicas empregadas. Por Sara Alvarez Langa Os tipos ou técnicas de programação são bastante variados, embora pode ser que haja muitos leitores que só conheçam uma metodologia para realizar programas. Na maioria dos casos, as técnicas centram-se em programação modular e programação estruturada, porém existem outros tipos de programação. Explicaremos isso melhor ao longo do artigo. Programação estruturada (PE) A programação estruturada é composta por um conjunto de técnicas que foram se evoluindo aumentando consideravelmente a produtividade do programa reduzindo o tempo de depuração e de manutenção do mesmo. Esta programação estruturada utiliza um número limitado de estruturas de controle, reduzindo assim consideravelmente os erros. Esta técnica incorpora: Design descendente (top-dow): o problema se descompõe em etapas ou estruturas hierárquicas. Estruturas básicas: existem três tipos de estruturas básicas: o Estruturas seqüenciais: cada ação segue a outra ação seqüencialmente. A saída de uma ação é a entrada de outra. o Estruturas seletivas: nestas estruturas avaliam-se as condições e em função do resultado das mesmas realizam-se umas ações ou outras. Utilizam-se expressões lógicas. o Estruturas repetitivas: são seqüências de instruções que se repetem um número determinado de vezes. Recursos abstratos (simplicidade): consiste em descompor as ações complexas em outras mais simples capazes de ser resolvidas com maior facilidade. As principais vantagens da programação estruturada são: Os programas são mais fáceis de entender Reduz a complexidade das provas Aumenta a produtividade do programador Os programas ficam melhor documentado internamente. Um programa está estruturado se possui um único ponto de entrada e só um de saída, existem de "1 a n" caminhos desde o princípio até o fim do programa e por último, que todas as instruções são executáveis sem que apareçam loops infinitos. Programação modular Na programação modular consta de várias seções dividas de forma que interagem através de chamadas a procedimentos, que integram o programa em sua totalidade. Na programação modular, o programa principal coordena as chamadas aos módulos secundários e passa os dados necessários em forma de parâmetros. Por sua vez cada módulo pode conter seus próprios dados e chamar a outros módulos ou funções. Programação orientada a objetos (POO) Trata-se de uma técnica que aumenta consideravelmente a velocidade de desenvolvimento dos programas graças à reutilização dos objetos. O elemento principal da programação orientada a objetos é o objeto. O objeto é um conjunto complexo de dados e programas que possuem estrutura e fazem parte de uma organização. Um objeto contém vários dados bem estruturados e podem ser visíveis ou não dependendo do programador e as ações do programa nesse momento. O polimorfismo e a herança são umas das suas principais características e por isso dedicaremos mais adiante um artigo exclusivamente para tratar destes dois termos. Publicamos em CriarWeb.com anteriormente uma explicação do que é a programação orientada a objetos. Programação concorrente Este tipo de programação se utiliza quando temos que realizar várias ações de só uma vez. Costuma-se utilizar para controlar os acessos de usuários e programas a um recurso de forma simultânea. Trata-se de uma programação mais lenta e trabalhosa, obtendo uns resultados lentos nas ações. Programação funcional Caracteriza-se principalmente por permitir declarar e chamar a funções dentro de outras funções. Programação lógica Costuma-se utilizar na inteligência artificial e em pequenos programas infantis. Trata-se de uma programação baseada no cálculo de predicados (uma teoria matemática que permite conseguir que um computador baseando-se em fatos e regras lógicas, que pode dar soluções inteligentes). Importância da documentação Descrevemos os aspectos chaves para o desenvolvimento de uma boa documentação do programa para entregar ao cliente. Por Sara Alvarez Langa A documentação dos programas é um aspecto sumamente importante, tanto no desenvolvimento da aplicação como na manutenção da mesma. Muita gente não faz esta parte do desenvolvimento e não se dá conta de que perde a possibilidade da reutilização de parte do programa em outras aplicações, sem necessidade de conhecer o código no dedo. A documentação de um programa começa com a construção do mesmo e finaliza justo antes da entrega do programa ou aplicação ao cliente. Mesmo assim, a documentação que se entrega ao cliente terá que coincidir com a versão final dos programas que compõem a aplicação. Uma vez concluído o programa, os documentos que se devem entregar são um guia técnico, um guia de uso e de instalação. Tipos de documentação A documentação que se entrega ao cliente se divide claramente em duas categorias, interna e externa: Interna: É aquela que se cria no mesmo código, já pode ser em forma de comentários ou de arquivos de informação dentro da aplicação. Externa: É aquela que se escreve em cadernos ou livros, totalmente alheia à aplicação em si. Dentro se esta categoria também se encontra a ajuda eletrônica. A guia técnica No guia técnico ou manual técnico se refletem o design do projeto, a codificação da aplicação e as provas realizadas para seu correto funcionamento. Geralmente este documento está desenhado para pessoas com conhecimentos de informática, geralmente programadores. O principal objetivo é o de facilitar o desenvolvimento, a correção e a futura manutenção da aplicação de uma forma rápida e fácil. Este guia está composto por três seções claramente diferenciadas: Caderno de carga: É onde fica refletido a solução ou design da aplicação. Esta parte do guia é unicamente destinada aos programadores. Deve estar realizado de tal forma que permita a divisão do trabalho. Programa fonte: É onde se inclui a codificação realizada pelos programadores. Este documento pode ter, por sua vez, outra documentação para sua melhor compreensão e pode ser de grande ajuda para a manutenção ou o desenvolvimento melhorado da aplicação. Este documento deve ter uma grande clareza em sua escritura para sua fácil compreensão. Provas: é o documento onde se especificam o tipo de provas realizadas ao longo de todo o projeto e os resultados obtidos. O guia de uso É o que comumente chamamos o manual do usuário. Contem a informação necessária para que os usuários utilizem corretamente a aplicação. Este documento é feito através do guia técnico, porém se suprimem os tecnicismos e se apresenta de forma que seja entendível para o usuário que não seja experiente em informática. Um ponto a ter em conta em sua criação é que não deve fazer referência a nenhuma seção do guia técnico e no caso de que faça uso de algum tecnicismo deve ir acompanhado de um glossário ao final da mesma para sua fácil compreensão. O guia de instalação É o guia que contém a informação necessária para implementar tal aplicação. Dentro deste documento encontram-se as instruções para o andamento do sistema e as normas de utilização do mesmo. Dentro das normas de utilização incluem-se também as normas de segurança, tanto as físicas como as referentes ao acesso à informação. Metodologia da programação Neste artigo e nos seguintes veremos as ferramentas e técnicas que nos ajudam a desenhar algoritmos para a resolução dos problemas na programação estruturada. Por Sara Alvarez Langa Estruturas de um programa Um programa vai se dividir em 3 partes claramente diferenciadas: processos de entrada processo de dados processos de saída Todo programa está constituído por um conjunto de instruções capazes de administrar um conjunto de dados. Algoritmos Um algoritmo é a descrição abstrata de todas as ações que deve realizar um computador, que nos conduz à solução do problema. Deve ser conciso e detalhado, assim como finito, porém, sobretudo tem que ser claro e o mais simples possível. Ferramentas e técnicas para o desenho de algoritmos Para o desenho de algoritmos o que mais se utiliza são os diagramas de fluxos. Diagramas de fluxo Os diagramas de fluxo são representações gráficas que mediante o uso de símbolos unidos mediante linhas de fluxo, mostram a seqüência lógica que se deve suceder para a solução do problema. Os diagramas de fluxo devem ser independentes da linguagem de programação empregada, devem ser flexíveis e simples. Por outro lado têm que estar normalizados com algum padrão como pode ser o ISO (a nível mundial), ANSI (a nível americano) ou o IEEE ( a nível europeu) Existem 3 tipos principais de diagramas de fluxos: Fluxograma de bloco: Representação gráfica simples com os elementos que representam a entrada e saída de dados do programa Fluxograma padrão: Representação gráfica com seqüências lógicas e detalhadas de todos os passos a seguir para a resolução do algoritmo. Pseudocódigo: Linguagem intermediária entre o natural e o de programação que representa mediante a palavra, a solução do algoritmo. Dentro destes três os mais utilizados são os ordinogramas ou pseudocódigos, já que são os que mais ajudam aos programadores na hora de passar esses algoritmos às diferentes linguagens de programação. Nos seguintes artigos aprofundaremos mais em cada um deles e aprenderemos a construí-los e lê-los para seu posterior passo à linguagem de programação que se requer. Fluxogramas Explicamos o que são, como se constroem e as representações gráficas utilizadas para sua construção. Por Sara Alvarez Langa Um fluxograma é uma representação gráfica que apresenta as entradas e saídas de dados ao programa. Os fluxogramas dividem-se em três partes claramente diferenciadas: Entrada: que deve aparecer na parte superior da representação gráfica Processo: que deve aparecer na parte central da representação gráfica Saída: que deve aparecer na parte inferior Símbolos para os dispositivos de entrada/saída Desenho Dispositivo Tipo teclado entrada monitor saída disquete Entrada/Saída Impressora Saída Discos magnéticos entrada/saída Símbolos para os dispositivos de processos Símbolo Processo Qualquer processo ou operação que realizarmos, salvo as que operarmos com arquivos. Classificação de dados em um arquivo Extração de dados de um arquivo União de vários arquivos em um só Datas utilizadas nos fluxos de dados Setas Função Linhas de tele-processo Direção do fluxo de dados Para entender melhor os fluxogramas temos estes três exemplos: Fluxograma que reflete a soma de 3 números lidos pelo ecrã, o resultado aparece na tela Fluxograma que reflete a atualização de um arquivo de dados (quadro de funcionários, por exemplo) Fluxograma que reflete a união de vários arquivos em um só. Fluxogramas II Um dos diagramas de fluxos mais utilizado. Muito parecido com o anterior, porém mais detalhado e preciso. Por Sara Alvarez Langa Tratamos de outro diagrama de fluxos que mostra a seqüência lógica e detalhada das operações que necessitamos para a realização de um programa. Assim como o o fluxograma visto no capítulo anterior, este também deve ser independente da linguagem de programação que utilizemos. Estrutura do fluxograma Este fluxograma deve estar composto de: Um símbolo de início de execução do programa A seqüência de operações necessárias para o correto funcionamento do programa. As operações seguirão uma ordem (de acima abaixo e da esquerda à direita). Um símbolo que indique o final do programa. Símbolos utilizados Simbolo Descrição Para início/fim ou para uma parada indeterminada Símbolo de entrada/saída genérico Representa uma operação ou processo geral com dados de memória. Símbolo de sub-programa ou sub-rotina. Utiliza-se para realizar uma chamada a um módulo do programa. Símbolo de decisão para realizar uma pergunta com duas possíveis respostas. É o que chamamos de símbolo de seleção simples. Símbolo de múltipla seleção Símbolo de loop definido. Conector. Utiliza-se para agrupar várias linhas de fluxo que saem da mesma origem. Símbolo para colocar comentários Regras na hora de fazer fluxogramas Todos os símbolos utilizados devem estar unidos por linhas de fluxo. Não se pode cruzar as linhas de fluxo A um símbolo de processo podem chegar várias linhas de fluxo, porém só pode sair uma dele. Ao símbolo de início não pode chegar nenhuma linha de fluxo De um símbolo de fim não pode sair nenhuma linha de fluxo, mas sim podem chegar várias a ele. Exemplos Este primeiro exemplo lhe diz o maior de dois números. Este segundo lhe devolve os graus introduzidos em Kelvin e Fahrenheit. Pseudocódigo Linguagem intermediária entre nossa linguagem e a linguagem de programação. Por Sara Alvarez Langa O principal objetivo do pseudocódigo é o de representar a solução a um algoritmo da forma mais detalhada possível, e por sua vez o mais parecido possível à linguagem que posteriormente se utilizará para a codificação do mesmo. As principais características desta linguagem são: Pode-se executar em um computador. É uma forma de representação simples de utilizar e de manipular. Facilita o passo do programa à linguagem de programação. É independente da linguagem de programação que for utilizar. É um método que facilita a programação e solução ao algoritmo do programa. Todo documento em pseudocódigo deve permitir a descrição de: Instruções primitivas Instruções de processo Instruções de controle Instruções compostas Instruções de descrição Estrutura a seguir em sua realização: Cabeçalho: Programa: Módulo: Tipos de dados: Constantes: Variáveis: Corpo: Início Instruções Fim Para comentar em pseudocódigo, se antepõe ao comentário dois asteriscos (*) Exemplos * Programa que calcula a área de um quadrado a partir de um lado dado por teclado. Programa: area_quadrado Modulo: main **( tambem se pode chamar principal) Variaveis: lado: natural area: natural Inicio Visualizar "Introduza o lado do quadrado" Ler lado Area<- lado * lado Visualizar "A área do quadrado é", area Fim * Programa que visualize a tabela de multiplicar do número introduzido por teclado Programa: Tabela multiplicar Modulo: main Variaveis: t: inteiro num : inteiro Inicio Visualizar "Introduza um numero" Ler num Desde t=1 ate t=10 repetir Visualizar num, " X", t, "=", num*t Fim desde Fim Uma vez que tivermos preparado um diagrama de fluxos (fluxograma) e um pseudocódigo, já podemos começar com a codificação do programa em nosso computador. A partir de aqui tudo varia dependendo da linguagem de programação que utilizarmos, porém em todos os programas teremos que definir os tipos de dados que utilizaremos. Tudo isso e mais, será falado no seguinte artigo. Tipos de dados Neste artigo falaremos dos possíveis tipos de dados que podemos utilizar na criação de nossos programas. Por Sara Alvarez Langa Antes de mergulharmos nos diferentes tipos de dados, passarei a descrição de dado para que tudo fique claro desde o princípio. Dado Elemento que não manejamos ou armazenamos em um sistema informático. Os dados manejados em um algoritmo devem levar associado um identificador, um tipo de dado e seu valor. Dados básicos Dentro dos dados básicos podemos encontrar os dados estáticos, derivados e estruturados. Os dados estáticos são os seguintes: inteiro, real e natural para os números caracteres cadeia lógico enumerado Como dado derivado encontramos os ponteiros que hoje em dia quase não se utilizam, a não ser que se programe em C. Os mais complexos são os estruturados e os principais são: array Estruturas Listas, pilhas, filas e árvores ( muito utilizados em C) Classes e objetos Arquivos Banco de dados Os quatros primeiros são os internos enquanto que os dois últimos correspondem a tipos de dados externos. Constantes e variáveis Define-se como variável a uma posição de memória referenciada por um identificador onde se pode armazenar um valor determinado (Tipo de dado). Define-se como constante a um valor que não se modifica ao longo de toda a execução do programa. Operadores Passamos a detalhar os diferentes operadores que existe e seu funcionamento. Por Sara Alvarez Langa Os operadores se classificam em aritméticos, alfanuméricos, relacionais, lógicos e por último um pequeno grupo de operadores especiais que dependerá das diferentes linguagens utilizadas. Operadores aritméticos: Para a soma e a subtração se utilizam respectivamente os símbolos; "+" "-" Para a divisão e encontrar o resto da mesma se utilizam respectivamente os símbolos; "/" "%" Para multiplicar e elevar potencias se utilizam respectivamente os seguintes símbolos; "*" "**" Operadores alfanuméricos: São os utilizados para trabalhar com cadeias. Principalmente utilizamos o símbolo "+" para concatenar cadeias. Logo dependendo da linguagem pode funcionar ou não o símbolo "-" para concatenar cadeias eliminando os espaços em branco. Operadores relacionais: O símbolo "==" nos compara dois valores O símbolo "!=" significa diferente e nos devolve verdadeiro se os valores comparados são diferentes. Logo temos os demais signos como são; "<", ">", "<>", "<=", ">=" Operadores lógicos: Como operadores lógicos nos encontramos com o símbolo "!" ou "not" para a negação e o símbolo "&&" ou "and" para a conjunção. Exemplos Aritméticos. A=3 B=2 X=a**2 onde x valeria 9 X=a/2 onde x valeria 1.5 X= a*2 onde x valeria 6 X= a%b onde x valeria 1 Alfanuméricos: A="Oi" B=" Tudo bem" X=a+b onde x valeria "Oi Tudo bem" Relacionais: Si x==a então Instruções Sino Instruções Fim se Lógicas Se !a então A variável está vazia Fim se Se a==3 and b==3 então A e b são iguais Fim se Expressões e instruções Passamos a descrever estes dois termos aplicados à programação e damos algum exemplo. Por Sara Alvarez Langa Expressões Como definição de expressões entendemos que é um conjunto de operandos e operadores, que depois de serem avaliados devolvem um determinado resultado. Em função do resultado obtido podemos classifica-las em: Expressões numéricas Expressões alfanuméricas Expressões lógicas booleanas Instruções Como definição de instruções entendemos que é um fato ou acontecimento de duração limitada que gera umas mudanças na execução do programa. Existem vários tipos de instruções: Instruções de definição de dados X: inteiro Instruções primitivas o de entrada (ler x) o de atribuição (x<-3) o de saída (visualizar x) Instruções compostas: São aquelas instruções que são executadas diretamente pelo processador e estão constituídas por um conjunto de ações agrupadas em módulos. Instruções de controle: São utilizadas para controlar a seqüência de execução do programa. Dentro deste tipo de instruções se encontram as instruções de salto que são aquelas que alteram ou rompem a seqüência de execução de um programa. Este tipo de instrução não se utiliza na programação estruturada. Por sua vez, temos as instruções alternativas que controlam a execução ou não de uma ou mais instruções em função da condição. Estão as instruções de alternativa simples, dupla e múltipla. Por último, dentro deste grupo de instruções de controle estão as instruções repetitivas que são aquelas que nos permitem alterar a seqüência normal da execução de um programa tornando possível que um grupo de instruções possam se repetir mais de uma vez. Todo loop está composto de três partes claramente diferenciadas: o A: Parte da condição, pode ser qualquer expressão. o B: Corpo do loop. São o conjunto de instruções que se repetirão. o C Parte final do loop. É o último em se executar quando não se cumpre a condição. Os elementos que intervêem na expressão que conforma a condição devem estar sempre refletidos no corpo do loop de tal forma que sempre exista a possibilidade de sair do mesmo. Existem dois tipos principais de loops: o o Loop do-while: Repetem-se as instruções até que não se cumpra a condição While <<condicao>> fazer Instrucoes Fin while Loop para (for) repetem-se as instruções um número determinado de vezes. Para v<-0 ate vf[com i de incremento] fazer Instrucoes Fim para Com isto já temos visto os conceitos básicos para poder começar a programar em qualquer linguagem de programação e sabendo disso, também sua sintaxe e as possíveis mudanças com respeito a outras linguagens de programação. Agora é hora de aprender alguma linguagem em concreto e começar a praticar tudo o que foi aprendido neste manual.