Existem formas diferentes de se programar, mesmo utilizando a mesma língua-
,
gem de programação. E como se fossem comparados textos que tratam do mesmo as- sunto mas que foram escritos por pessoas diferentes.
Apesar disso, as linguagens de programação possuem características e regras que determinam como o programa deverá ser escrito para que seja 'interpretado' pela
' .
maquma.
4.2. 1 CONCEITOS S O B R E A PROG RAMAÇAO L I N E A R -
A programação linear pressupõe a criação de programas que, na sua execução, obedeçam a uma seqüência de passos executados consecutivamente, com início e fim específicos. Esse princípio era utilizado por linguagens mais antigas, como o Basic, no qual as linhas de código eram numeradas uma a uma e eventuais desvios eram executa dos apontando-se para a linha desejada.
Embora alguns tipos de linguagem tenham restrições na forma de programação, dando pouca flexibilidade ao desenvolvedor, nada impede que programas lineares se jam gerados utilizando-se de linguagens estruturadas ou orientadas a objetos.
A desvantagem da programação linear é a complexidade. Programas lineares extensos são difíceis de ser desenvolvidos e até compreendidos.
4.2.2 "
CONCEITOS SOB R E A PROG RAMAÇAO
E S T R U T U RADA
Usando o velho provérbio "dividir para conquistar", pode-se afirmar que, para a consecução de um objetivo, é melhor e bem mais fácil dividir as tarefas a serem realiza das em etapas, executando-as uma por vez, até que todo o trabalho tenha sido realizado.
Pode-se, ainda, pensar que esse trabalho pode ser realizado em equipe. A divisão do trabalho e a distribuição adequada das tarefas a cada um dos elementos da equipe, se
bem coordenadas, com certeza produzirão resultados melhores e bem mais rápidos. O problema, muitas vezes, está em como dividir essas tarefas de forma adequada e eqüita tiva e gerenciar o seu desenvolvimento.
Em programação, pode-se pensar da mesma forma. A construção de um progra ma monolítico que execute uma tarefa complexa, além de ser complicada e demorada, pode não produzir o resultado esperado. Mesmo que o resultado seja alcançado, o tem
po despendido pode ser demasiado. Essa situação se agrava se for considerado que esse tempo gasto representa custos no desenvolvimento de uma aplicação que podem supe rar as expectativas de custos do projeto.
Deve-se utilizar esta filosofia para criar um programa extenso e complicado. Um bom programador deve ser como um bom gerente no momento de atribuir tarefas em um programa: deve separar as tarefas que o programa deve realizar, depois deve atacá las uma a uma, tornando o trabalho menos assustador. Essa abordagem é o que norteia o conceito de programação estruturada.
CAPÍTULO 4 - CONCEITOS DE PROGRAMAÇÃO 33
Na programação estruturada, a divisão de tarefas é um processo chamado de modularização. Nesse processo, divide-se o programa em pmtes ou módulos que exe-
,
cutam tarefas específicas. E importante que essas tarefas, representadas pelos módulos, sejam específicas e cada uma delas seja o mais independente possível das demais reali
zadas por outros módulos do programa. Isto é, a independência funcional está relacio nada diretamente à modularização. Por exemplo, suponha que você pertença a uma equipe que está participando de uma gincana na qual várias tarefas são determinadas e o prazo fmal está estabelecido. Vence a equipe que completar o maior número de tarefas dentro do prazo. Se as tarefas forem divididas adequadamente, será grande a chance de que todas sejam cumpridas no tempo determinado. Por outro lado, se ocorrer um erro nessa distribuição e alguém acabar fazendo algo que outro elemento do grupo também esteja fazendo, com certeza o tempo não será suficiente ou alguma tarefa deixará de ser realizada.
Os procedimentos ou funções são blocos de programa que executam detenui nada tarefa. Cada um desses blocos de código recebe um nome, o qual é utilizado como chamada do procedimento ou função. Tanto procedimentos quanto funções podem re ceber valores para que possam realizar suas tarefas. A diferença é que os procedimen tos, embora possam receber valores, não retornam outros valores como resultado, en quanto uma função retoma valores como resultado das operações que realizou.
Os nom.es dos procedimentos, normalmente, são palavras ou pequenas frases que procuram associá-los de forma mnemônica à tarefa realizada. Por exemplo:
AtualizarDados ( )
As funções são nomeadas da mesma maneira que os procedimentos, lembran do que o nome de uma função pode ser utilizado em uma expressão como se fosse
uma variável, porque uma função retoma um valor quando termina sua execução. Por exemplo:
soma (x, y) .
A seguir é apresentado um pequeno programa em C, que executa a soma de dois números introduzidos pelo teclado e exibe o resultado no vfdeo.
1 . / * funcao . c * /
2 . ma in ( )
3 . (
4 . int x , y, r;
5 . print f ( "Digite dois números: " ) ;
6 . scanf ( "%d %d" , &x , &y) ;
7 . r = soma (x, y) ;
8 . printf ( "A soma dos números é : %d" , r ) ;
9 . )
10 . / * soma ( ) * /
1 1 . / * retorna a soma de dois numeros * /
13 . int
1 4 . {
J ' k ;
1 5. return ( j +k ) ;
1 6 . }
No exemplo, as variáveis x e y recebem os números cuja entrada é feita pelo
teclado (linha 6). A função soma ( ) é chamada na linha 7, com a passagem dos valores. A função é executada a partir da linha 1 2 e, na linha 1 5 , retoma o valor da soma dos
'
numeros.
O exemplo é bastante simples e, obviamente, não seria necessário criar uma função apenas para somar dois números. Serve apenas como ilustração para a chamada de uma função com passagem e retorno de valores.
Ainda dentro do exemplo, podem-se encontrar outras funções internas da pró pria linguagem, como printf ( ) e scanf ( ) que funcionam, a princípio, da mesma
forma que a função soma ( ) .
Estudaremos outros exemplos de procedimentos e funções no Capítulo 7, que tratará com mais profundidade desse assunto.
Quando se pensa na criação de um programa, surge a pergunta: por onde devo começar? Uma forma de desenvolver um programa é partir de sua representação em pseudocódigo ou fluxograma, conforme discutido no Capítulo 2. O fluxograma é um tipo de algoritmo que utiliza símbolos gráficos para representar as ações ou instruções a
serem seguidas. Assim como o pseudocódigo, ele é utilizado para organizar o raciocínio lógico a ser seguido para a resolução de um problema ou para a definição dos passos na execução de uma tarefa.
Cada etapa importante definida em seu fluxograma ou pseudocódigo pode ser usada como um nome de sub-rotina (procedimento ou função) no programa. Essas eta pas devem estar definidas e claramente identificadas em seu esboço, de forma que se
possa saber onde são utilizadas.