A abstracção Caneta
A tarefa associada a este exercício corresponde à modelação e concretização em C (ficheiros .h e .c) de uma estrutura de dados que represente uma versão simples do conceito Caneta.
Uma caneta tem como características (ou campos) a marca (brand) e a cor da tinta (color).
Uma caneta deve escrever e deve ser possível criar novas canetas e destruir canetas antigas. Duas cenas são iguais se tiverem a mesma cor e marca. Deve ser possível aceder ao valor de cada um dos campos de uma caneta. Finalmente, deve ser possível apresentar ao utilizador o conteúdo dos vários campos de uma caneta.
Defina primeiro a interface deste conceito no ficheiro Pen.h e só depois é que deve comparar a sua solução com a seguinte solução proposta Pen.h.
Concretize agora o conceito Caneta no ficheiro Pen.c Compare a sua solução com a seguinte solução proposta: Pen.c
Programa exemplo
Agora é necessário criar um pequeno programa exemplo que irá exercitar as funcionalidades suportadas pelo conceito Caneta.Assim, deverá criar o seguinte ficheiro main.c:Ficheiro main.c |
---|
#include <stdio.h> #include "Pen.h" int main() { Pen p1 = newPen("Bic", "green"); Pen p2 = newPen("Bic", "red"); Pen p3 = newPen("Bic", "green"); print(p1); print(p2); write(p1, "SCP"); write(p2, "SLB"); printf("p1 == p2? %s\n", equalsPen(p1, p2) ? "yes" : "no"); |
Como compilar e executar?
O programa é constituído por dois módulos independentes, que têm de ser compilados (conversão de C para código binário) e "linkados" (ligação de todos os módulos binários e bibliotecas adicionais), para produção do executável.
gcc -c Pen.c -o pen.o gcc -c main.c -o main.o
A opção -o foi apresentada como o valor por omissão, apenas para explicitar o que acontece como resultado do comando.
gcc -o main main.o pen.o
Note-se que o comando "gcc" não é simplesmente o compilador de C: é um programa capaz de chamar o compilador em si (quando se usa com a opção -c) ou capaz de invocar o "linker", se não for dito nada em contrário (último comando acima).
A execução é simples (o comando seguinte executa o programa "main" que está na directoria actual, i.e., "."):
./main