Anda di halaman 1dari 21

Departamento de Engenharia de Computao e Automao Universidade Federal do Rio Grande do Norte

Programao Avanada
Aulas 2 Ponteiros e Programao Modular

Hora de silenciar o celular

Manter o celular sempre desligado/silencioso quando estiver em sala de aula Nunca atender o celular em sala de aula

Ponteiros para Estruturas

C++ permite a declarao de ponteiros para estruturas

livro *p; livro l = {10,Linguagem C++, 150}; p = &l;

Qual o tamanho de um ponteiro para estrutura ?

Ponteiros para Estruturas

O acesso aos membros da estrutura atravs de um ponteiro feito usando o operador seta ->

typedef struct{ int id; char titulo[50]; int numero_de_paginas; } livro; int main(){ livro *p; livro l = {10,Linguagem C, 150}; p = &l; cout<<"Dados do livro ID:<< p->id << endl; cout<<"-Nome:<< p->titulo << endl; cout<<"-Numero de Paginas:<<p->numero_de_paginas<<endl; return 0; }

Passagem de argumentos para o programa

possvel executar um programa em C++ passando-se argumentos (parmetros) para o programa. Como podemos escrever programas em C++ que acessem esses argumentos?

Passagem de argumentos para o programa

Os argumentos digitados so enviados pelo sistema operacional como parmetros da funo main() Para que essa funo possa reconhec-los, necessrio declar-los, como feito em qualquer funo C++.

Passagem de argumentos para o programa


int main(int argc, char** argv)

O primeiro argumento argc representa o nmero de argumentos transmitidos. O segundo argumento uma matriz de ponteiros para char.
As cadeias de caracteres podem ser acessadas por meio da notao argv[0], argv[1] etc.

Programao Modular

Programa em vrios arquivos fontes


possvel subdividir o cdigo fonte de um programa em vrios arquivos. Exemplo:

Mdulos

De fato, quando desenvolvemos programas, procuramos identificar funes afins e agrup-las por arquivo. Quando temos um arquivo com funes que representam apenas parte da implementao de um programa completo, denominamos esse arquivo de mdulo. Assim, a implementao de um programa pode ser composta por um ou mais mdulos.

Mdulos

No caso de um programa composto por vrios mdulos, cada um desses mdulos deve ser compilado separadamente, gerando um arquivo objeto (arquivo com extenso .o) para cada mdulo. Aps a compilao de todos os mdulos, uma outra ferramenta, denominada ligador, usada para juntar todos os arquivos objeto em um nico arquivo executvel.

Mdulos

Para programas pequenos, o uso de vrios mdulos pode no se justificar. Porm, para programas de mdio e grande porte, a sua diviso em vrios mdulos uma tcnica fundamental, pois facilita a diviso de uma tarefa maior e mais complexa em tarefas menores e mais fceis de implementar. Alm disso, um mdulo com funes C++ pode ser utilizado para compor vrios programas, e assim poupar muito tempo de programao.

Mdulos

O arquivo converte.cpp apresentado no exemplo pode ser utilizado para compor outros programas que queiram utilizar a funo float converte (float c); Para que as funes implementadas em convert.cpp possam ser usadas por um outro mdulo C++, ele precisa conhecer os prottipos das funes oferecidas por
converte.cpp

No exemplo anterior, isso foi resolvido por meio da repetio dos prottipos da funo converte no incio do arquivo main.cpp.

Mdulos

Entretanto, para mdulos que ofeream vrias funes ou que queiram usar funes de muitos outros mdulos, essa repetio manual pode ficar muito trabalhosa e sensvel a erros. Para contornar esse problema, todo mdulo de funes C++ costuma ter associado um arquivo que contm apenas os prottipos das funes oferecidas e, s vezes, os tipos de dados exportados (structs).

Esse arquivo de prottipos caracteriza a interface do mdulo, e em geral tem o mesmo nome do mdulo, s que com extenso .h

Exemplo converte.h

Tipos abstratos de dados

Nesta aula, discutiremos uma importante tcnica de programao baseada em tipos estruturados, conhecida como tipos abstratos de dados (TAD).

A idia central encapsular (esconder) de que usa um determinado tipo a forma concreta com que ele foi implementado.

Tipos abstratos de dados

Por exemplo, se criamos um tipo para representar um ponto no espao, um usurio desse tipo usa-o de forma abstrata, com base apenas nas funcionalidade oferecidas pelo tipo. A forma com que ele foi implementado (armazenando cada coordenada num campo ou agrupando todas num vetor) passa a ser um detalhe de implementao. Desacoplamento da implementao e seu uso.
Facilidade de Manuteno Aumento do potencial de reutilizao do tipo criado.

Tipos abstratos de dados

Um mdulo agrupa vrios tipos e funes com funcionalidades relacionadas. Por exemplo, vimos um mdulo com funes para a converso de temperaturas. Nos casos em que um mdulo define um novo tipo de dado e o conjunto de operaes para manipular dados desse tipo, dizemos que o mdulo representa um TAD

Tipos abstratos de dados

Por exemplo, podemos criar um tipo matriz e uma srie de funes que o manipulam. Se criarmos um TAD, podemos esconder a estratgia de implementao. Quem usa o TAD precisa apenas conhecer a sua funcionalidade.

Exemplo 1: TAD Ponto

Vamos considerar a criao de um tipo de dado para representar um ponto no R2 Para isso, devemos definir um tipo abstrato, denominado Ponto, e o conjunto de funes que operam sobre esse tipo. Neste exemplo, vamos considerar as seguintes operaes:
atribui: operao que atribui novos valores s coordenadas de um ponto. acessa: operao que retorna as coordenadas de um ponto; distancia: operao que calcula a distncia entre dois pontos.

Exemplo 2: TAD Circulo

Vamos considerar a criao de um tipo de dado para representar um crculo no R2 As seguintes operaes podem ser oferecidas
atribui: operao que atribui valores ao raio e ao centro do crculo. area: operao que calcula a rea do crculo; interior: operao que verifica se um dado ponto est dentro do crculo.

Anda mungkin juga menyukai