Stoa :: C/C++ :: Blog :: Introdução à programação em C/C++ - parte 2

outubro 31, 2007

user icon

Retomemos o exemplo da parte 1 desta introdução:

 

1: #include<stdio.h>

2:

3: int main() {

4:         printf("\nOla, mundo da programacao!!!\n");

5:         return 0; }

6:

 

Este exemplo é típico das introduções à programação em C/C++, pois é um dos menores programas que é possível fazer nessa linguagem, e portanto serve como paradigma de qual é a estrutura que tem de estar necessariamente presente em um código-fonte de um programa em C.

 

As linhas do programa foram numeradas para facilitar o comentário sobre elas, que é o que será feito agora. Num código fonte de C para ser realmente compilado, não se deve numerar as linhas.

 

Na linha 1, o comando que é dado é um comando de pré-processador que ordena ao compilador que inclua, naquele ponto do código-fonte, todo o conteúdo do arquivo entre os símbolos < e >. Em outras palavras, é como se tivessemos aberto o arquivo "stdio.h" em nosso editor de textos e copiado e colado todo o seu conteúdo em nosso arquivo de código fonte.

 

Ora, portanto esse exemplo "mínimo" pode ser bem substancial, a depender do tamanho de "stdio.h"! Isso serve de aviso aos iniciantes: em programação muitas vezes são usados comandos como esse "include" (que, em português seria traduzido como "incluir") que com uma única linha "incham" o nosso programa com muitas e muitas páginas de código.

 

Mas por que incluir um outro arquivo?

A grande, na verdade a gigantesca vantagem de incluir um outro arquivo é o chamado "reuso" de código fonte. "Reuso" significa "utilizar novamente", ou seja, através da inclusão de outros arquivos em nosso código fonte, podemos utilizar comandos criados em outro momento, possivelmente por outras pessoas. É uma espécie de divisão do trabalho: João escreve as funções que lidam, por exemplo, com palavras, Mário utiliza essas funções escritas por João para escrever funções que lidam com frases, Zeca utiliza essas funções de João e de Mário para escrever funções que lidam com parágrafos e finalmente eu utilizo as funções de João, Mário e de Zeca para escrever um programa que lida com um texto de vários parágrafos, frases e palavras.

 

Isso que acabamos de ver são chamadas funções de biblioteca. Em inglês isso é chamado de library functions. A idéia por trás desse nome é que as funções seriam pequenos pedaços de código fonte que são armazenados como os livros de uma biblioteca, e que quando um programador precisa utilizar um desses livros (ou seja, uma dessas funções), ele "pede emprestado" esse livro da biblioteca e o utiliza.

 

Por exemplo, digamos que "motor" seja o nome de uma biblioteca que armazena as funções que efetuam comandos sobre um motor de um carrinho ligado ao computador por meio de rádio. Suas funções seriam "ligar", "acelerar", que pode ser negativa ou positiva e "desligar". Um programador poderá utilizar essa biblioteca de funções para criar os comandos de um carrinho mais inteligente, que por exemplo percorra uma pista de corrida predefinida, digamos um quadrado. Nesse caso, o programa será uma série de chamadas às funções da biblioteca, mais ou menos assim:

 

ligar

acelerar +10

acelerar -9

acelerar +9

acelerar -9

acelerar +9

acelerar -9

acelerar +9

acelerar -9

acelerar +9

acelerar -10 

desligar

 

É necessário desacelerar para virar nas curvas; acelera-se para percorrer as retas (os lados do quadrado) o mais rápido possível. Este programa não faria muito sentido se não houver uma forma de controlar a direção do carrinho, por exemplo usando a biblioteca "direcao", que exporta as funções "direita" e "esquerda". Aí nosso exemplo seria

 

ligar

acelerar +10

acelerar -9

esquerda

acelerar +9

acelerar -9

esquerda

acelerar +9

acelerar -9

esquerda

acelerar +9

acelerar -9

esquerda

acelerar +9

acelerar -10 

desligar

 

Para que o exemplo seja plenamente compreensível, seria necessário controlar quando o carrinho "vira à esquerda". Isto ocorreria após andar um espaço predefinido, por exemplo, o lado da pista, que seria, digamos, 10 cm. Isto poderia ser feito com a função "odômetro" da biblioteca "painel". Aí nosso exemplo seria:

 

ligar

acelerar +10

andar até odômetro = 5 cm

acelerar -9

esquerda

acelerar +9

andar até odômetro = 15 cm

acelerar -9

esquerda

acelerar +9

andar até odômetro = 25 cm

acelerar -9

esquerda

acelerar +9

andar até odômetro = 35 cm

acelerar -9

esquerda

acelerar +9

andar até odômetro = 40 cm

acelerar -10

desligar

 

Apenas para irmos nos acostumando com a sintaxe de C, aqui está o código fonte desse exemplo em C:

 

#include”motor.h”

#include”direcao.h”

#include”painel.h”

 

int main() {

            odometro odo;

 

ligar();

acelerar(10);

while(odo < 5);

acelerar(-9);

esquerda();

acelerar(9);

while(odo < 15);

acelerar(-9);

esquerda();

acelerar(9);

while(odo < 25);

acelerar(-9);

esquerda();

acelerar(9);

while(odo < 35);

acelerar(-9);

esquerda();

acelerar(9);

while(odo < 40);

acelerar(-10);

desligar();

return 0; }

 

Não se preocupe em entender completamente cada detalhe desse código; o importante é perceber que existe uma modularidade na programação em C: pequenos trechos de código são copiados de outros lugares e “justapostos” para produzir um novo programa.

 

Portanto, o uso de bibliotecas em um programa C faz com que a tarefa de programação se assemelhe à eletrônica, ou à mecânica, no aspecto de que o programador utiliza peças "prontas", feitas por outras pessoas, e combina essas peças para produzir um software novo, da mesma maneira que um engenheiro ou técnico eletrônico cria novos aparelhos utilizando componentes comercialmente disponíveis, ou um mecânico cria aparelhos com motores e engrenagens compradas prontas.

 

Quanto a esse último quesito, o da comercialização das peças, é importante fazer uma distinção entre o software comercial "normal" e o software livre: as bibliotecas comerciais são compráveis e só podem ser utilizadas legalmente caso o programador pague sua "licença de uso". Por exemplo, para utilizar uma biblioteca de sintetização de voz comercial é necessário pagar uma taxa para os detentores do direito autoral sobre esse software. Mas no caso de software livre, essa taxa de comercialização é opcional. Note bem: opcional. E quem determina a opção é o detentor dos direitos autorais, também. Isso significa que uma biblioteca de software livre pode exigir pagamento para ser utilizada, também. Afinal de contas, para produzir a biblioteca é necessário pagar programadores, então é razoável que quem crie bibliotecas como negócio, mesmo que o faça como software livre, o faça mediante pagamento.

 

Então qual a diferença entre uma biblioteca livre e uma comercial? A diferença é que a biblioteca comercial não oferece seu código fonte à consulta enquanto que a biblioteca livre permite a leitura e modificação de seu código fonte, desde que quaisquer modificações sejam disponibilizadas como software livre.

 

Se software fosse carro, e bibliotecas fossem motores, é como se as bibliotecas comerciais fossem motores em que é proibido abrir o capô e fuçar no motor; só o fabricante pode consertar o motor se ele quebrar. O software livre é como o carro que conhecemos: podemos abrir e mexer ou pagar a alguém que entenda de mecânica para que faça isso por nós. Isso significa que o software livre é o único software que tem chance de sobreviver por um longo tempo: porque mesmo que a empresa que o criou venha à falência, poderemos utilizar um programador para que faça a manutenção e até mesmo a melhoria desse software para nós.

 

Além disso, alguns softwares livres são também esforços de colaboração internacional, como, por exemplo, os software da Gnu. Por serem feitos colaborativamente, esses softwares são melhorados continuamente: todos os dias, para não dizer que muitas vezes todas as horas, é lançada uma nova versão de algum software Gnu. Isto significa robustez, segurança, confiabilidade: nenhum software comercial em toda a história da computação foi desenvolvido com tanta qualidade em tão pouco tempo.

 

Bom, chega de proselitismo. No próximo texto eu explico outras linhas do exemplo inicial.

Palavras-chave: Bibliotecas de Funções, Introdução à Programação, Introdução ao C

Postado por Renato Callado Borges em C/C++

Você deve entrar no sistema para escrever um comentário.

Termo de Responsabilidade

Todo o conteúdo desta página é de inteira responsabilidade do usuário. O Stoa, assim como a Universidade de São Paulo, não necessariamente corroboram as opiniões aqui contidas.