Você está na página 1de 12

Programao Estruturada

Programao Estruturada

Paradigmas de Linguagens de Programao

As linguagens desse paradigma so muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas. So linguagens que reconstroem uma mquina para torn-la mais conveniente para programao. Mquinas que influenciaram fortemente a estrutura das linguagens de programao: arquitetura de von Neumann.

Profa. Heloisa 1. Sem. 2009

Idias Bsicas da Programao Estruturada


Caractersticas da Arquitetura de Mquina: unidade de processamento memria registradores que estabelecem comunicao entre 1) e 2) Conceitos introduzidos por essa mquina: varivel, valor e atribuio processamento seqencial programa armazenado

Controle de Fluxo Estruturado um programa dito estruturado quando o controle de fluxo evidente da estrutura sinttica do texto do programa. Invariantes uma afirmao (condio) em um ponto p do programa que vlida toda vez que o controle alcana o ponto p.

As linguagens imperativas so projetadas de acordo com o princpio do Modelo de Mquina: uma linguagem deve permitir usar diretamente uma mquina orientada por atribuies

Estruturas de Controle
Estruturas que determinam o fluxo de execuo (que comando executado depois do outro).

Estruturas de Controle em Nvel de Comando:


Controle Sequencial o mais simples. Os comandos so escritos na seqncia, e assim so executados: A;B;C... Ramificao ou Seleo permitem especificar uma escolha entre comandos alternativos. Exemplo: if-then-else Representao bsica:
V F

Podem ser em nvel de comando ou em nvel de unidades.

condio

comando

comando

Estruturas de Controle em Nvel de Unidades


Iterao ou Repetio permitem especificar repetio de certos comandos Exemplo: while

Mecanismos que permitem fazer chamadas de unidades. Chamadas de unidades explcitas: funes, procedimentos. Chamadas de unidades implcitas: tratadores de exceo, corrotinas, unidades concorrentes.

condio

comando

Outros exemplos: repeat, for

Unidades Subordinadas Chamadas Explicitamente


Inclui os subprogramas: subrotinas, funes, procedimentos Funo abstrai uma expresso a ser avaliada
Funes retornam valores. Exemplo: clculo de fatorial de um dado nmero: fatorial(n) deve retornar n! Efeito secundrio: quando os parmetros da funo retornam valores. PASCAL: function <nome da funo> ( <lista de argumentos> ) : <tipo>; < corpo da funo> end procedure <nome> (<parmetros>); <corpo> End C:

Procedimento abstrai um comando a ser executado


Modifica variveis Exemplo: ordenao de um vetor de nmeros. ordena(v) deve ordena o vetor v. <tipo do resultado> <nome> ( <declarao de parmetros formais. ) { <lista de declaraes> <lista de comandos> }

Parmetros
Permitem a aplicao de subprogramas a dados diferentes. Melhora o reuso de cdigo Sem parmetros, a utilidade dos subprogramas se restringiria a segmentao do cdigo. Parmetro formal identificadores usados no cabealho do subprograma (definio do subprograma) Parmetro real identificadores, expresses ou valores usados na chamada do subprograma. Argumento usado como sinnimo de parmetro real ou para referir o valor passado do parmetro real para o formal.

Correspondncia entre Parmetros Formais e Reais


A maioria das linguagens usa um critrio posicional para amarrao de argumentos e parmetros: Definio do procedimento pi so parmetros:
procedure S( p1; p2; ....; pn); .. end;

Chamada do procedimento ai so argumentos:


S( a1; a2; .....; an);

pi corresponde a ai para i=1,...n.

Convenes para passagem de parmetros


Passagem por Referncia
(Call by Reference) ou Compartilhamento (Sharing) Passagem por Cpia - Os parmetros se comportam como variveis locais. Pode ter 3 tipos:
Passagem de Valor argumentos so usados para inicializar parmetros, que funcionam como variveis locais. Valores no podem retornar por esses parmetros. Passagem de Resultado parmetros no recebem valores na chamada, funcionam como variveis locais mas retornam valores na sada Passagem de Valor-Resultado engloba os dois anteriores

Unidade chamadora passa para a unidade chamada o endereo do argumento. A varivel usada como argumento compartilhada e pode ser modificada.

Exemplos: Passagem por referncia X passagem por valor


Passagem de nome a amarrao do parmetro posio no feita na hora da chamada, mas a cada vez que ele usado na unidade chamada. Portanto, atribuies ao mesmo parmetro podem ser feitas a posies diferentes a cada ocorrncia.
PASCAL: var a, b: integer; procedure P (x: integer; var y: integer); begin x =: x + 1 ; y := y + 1 ; writeln (x , y) end; begin a := 0 ; b := 0 ; P (a,b); writeln (a,b) end. Sada: 1 1 0 1

Passagem por valor-resultado

C
void troca1(int x, int y) {int z; z =x; x = y; y = z;} a = 0; b = 0; troca1(a,b); os valores de a e b no so trocados void troca(int *px, int *py) { int z; z = *px; *px = *py; *py = z;} a = 0; b = 0; troca(&a,&b); os valores de a e b so trocados

Deve ter o mesmo efeito da passagem por referncia. Problemas que devem ser evitados:
program ...... procedure exemplo(x, y); begin i := y end; ........... begin i := 2; A[i] := 99; exemplo( i, A[i]); end. i pode ser alterado diretamente pela atribuio, ou indiretamente pela cpia do resultado Na chamada de exemplo (i, A[i]): endereos de i e A[i] so armazenados valores de i e A[i] so copiados em x e y valor de i modificado em i := y valores de x e y so copiados de volta em i e A[i], logo valor antigo de i restaurado

Escolha de Mecanismos:
Parmetros que devem retornar valores, devem ser passados por referncia Parmetros que no retornam valores podem ser passados por valor, por segurana; Eficincia da implementao: passagem por referncia cara em termos de processamento pois faz acesso indireto; passagem por cpia pode custar em termos de memria se os objetos forem grandes.

Passagem por nome


Parmetro real substitui textualmente o parmetro formal correspondente em todas as suas ocorrncias. O parmetro formal amarrado ao mtodo de acesso no momento da chamada mas a amarrao a valor ou endereo feita s na hora que o parmetro atribudo ou referenciado. Objetivo: flexibilidade


A forma do parmetro real determina o mtodo de implementao. Isto distingue a passagem por nome dos outros mtodos Se parmetro real varivel escalar: Equivale a passagem por referncia Se parmetro real uma constante: Equivale a passagem por valor

Se parmetro real elemento de array:


Pode ser diferente dos outros mtodos porque o valor da expresso do ndice pode mudar durante a execuo entre variveis referenciadas.

Se o parmetro real uma expresso que contm uma varivel:


Diferente dos outros mtodos porque a expresso calculada a cada acesso ao parmetro formal no momento que a varivel encontrada. O valor da varivel pode ter sido mudado, o que faz com que o valor da expresso mude a cada referncia ao parmetro formal.

procedure BIGSUB; integer GLOBAL; integer array LIST [1:2]; procedure SUB (PARAM); integer PARAM; begin PARAM := 3; GLOBAL := GLOBAL + 1; PARAM := 5 end; begin LIST [1] := 2; LIST[2] := 2; GLOBAL := 1; SUB(LIST [GLOBAL]) end;

No final LIST tem valores 3 e 5, atribudos em SUB. Vantagem: flexibilidade Desvantagens:


-mais lento -algumas operaes simples no podem ser implementadas como trocar os parmetros

Amarrao, Entidades e Atributos


Programas envolvem entidades: variveis, subprogramas, comandos, etc. Entidades tem atributos.
Varivel - nome, tipo, valor Subprograma - nome, parmetros

Tempo de amarrao
Amarrao pode ser: esttica ocorre antes da execuo do programa e no pode ser mudada dinmica ocorre em tempo de execuo e pode ser mudada, respeitando as regras da linguagem.

Amarrao : especificao da natureza exata dos atributos de uma entidade Tempo de amarrao: momento em que a amarrao ocorre importante na diferenciao de linguagens.

Variveis
Variveis so conceitos abstratos de clulas de memria. So caracterizadas por um nome e quatro atributos bsicos:
escopo, tempo de vida, valor e tipo.

Escopo
Trecho do programa onde uma varivel conhecida. Uma varivel visvel dentro do seu escopo e invisvel fora dele. Amarrao esttica a escopo: o escopo definido pela estrutura lxica do programa.

{ int i; for ( .....) { int c; if (...) { int i; ........ } ........... } } while (..........) { int i; ........ } .............. } } .............. } while (..........) { ........... { int c; if (...) { { } } int i ; int i; 2 ........ ........ { int i1; for ( .....)

Amarrao Dinmica a escopo


o escopo definido em funo da execuo do programa. O efeito de uma declarao se estende at que uma nova declarao com o mesmo nome seja encontrada. procedure big; var x : integer; procedure sub1; begin { sub1 } ...... x ........ end; { sub1 } procedure sub2; var x : integer; begin { sub2 } ...... end; { sub2 } begin { big } ...... end; { big }

int i; int i3; ........ ........

Valor de varivel
As referncias a um identificador no podem ser identificadas na compilao Para a sequncia de chamadas: big - sub2 sub1
a referncia a x em sub1 ao x declarado em sub2

Representado de forma codificada na rea de memria amarrada a varivel. Pode ser uma referncia (ponteiro). Amarrao dinmica (mais comum)
atravs do comando de atribuio.

Para a sequncia de chamadas: big - sub1


a referncia a x em sub1 ao x declarado em big

Amarrao esttica
definio de constantes PASCAL: const n = 50

Tipo de varivel
Especificao da classe de valores que podem ser associados varivel, bem como das operaes que podem ser usadas sobre eles, atravs da declarao de varivel. Amarrao de tipo esttica: definida atravs da declarao de variveis, que pode ser:
Declarao Explcita comando que lista as variveis e seus tipos; Declarao Implcita feita normalmente por convenes definidas para os nomes das variveis. Exemplo: no FORTRAN, variveis que comeam com I, J, K, L, M ou N so inteiras.

Amarrao de tipo dinmica: variveis no so declaradas, e a mesma varivel pode conter valores de tipos diferentes durante a execuo do programa.
O tipo da varivel definido quando um valor atribudo a essa varivel. Vantagem: flexibilidade de programao Desvantagens: - Diminui a capacidade de deteco de erros pelo compilador - Custo maior, verificao de tipo em tempo de execuo - Memria de tamanho varivel

Tempo de vida de varivel


Intervalo de tempo durante o qual uma rea de memria est amarrada a uma varivel Alocao: ao que adquire reas de memria para variveis de um pool de memria disponvel.

Alocao esttica
Ocorre antes da execuo do programa, nos casos de: variveis globais devem ser acessveis a todo o programa variveis locais estticas so declaradas dentro de um subprograma mas devem ser reter valores entre execues separadas do subprograma (sensveis histria). Vantagem: eficincia endereamento direto, no exige custo adicional para alocao Desvantagem: pouca flexibilidade linguagens que usam apenas alocao esttica no do suporte subprogramas recursivos nem a compartilhamento de memria.

Exemplos
FORTRAN I, II, IV todas as variveis eram estticas C, C++, JAVA permitem definir uma varivel local como esttica Pascal no possui variveis estticas

Alocao dinmica
Ocorre durante a execuo do programa, nos casos de: Variveis Dinmicas de Pilha: so alocadas na pilha de execuo Variveis Dinmicas de Heap so alocadas na heap

Variveis dinmicas de pilha


A alocao de memria feita quando a declarao elaborada, mas o tipo da varivel amarrado estaticamente. Elaborao: processo de alocao que acontece no momento em que iniciada a execuo do cdigo onde aparece a declarao (ativao). Vantagem: implementao de recurso, subprogramas usam a mesma memria Desvantagem: custo adicional de alocao FORTRAN 77 e FORTRAN 90 permitem o uso de variveis dinmicas de pilha C, C++ - variveis locais so dinmicas de pilha por default Pascal todas as variveis (no-heap) de subprogramas s dinmicas de pilha

Chamada do procedimento ativao elaborao execuo Trmino da execuo do procedimento retorno do controle unidade chamadora desalocao da memria

Varivies Dinmicas de Heap


So alocadas na heap Clulas de memria sem nome so alocadas explicitamente por instrues do programador. S podem ser referenciadas por ponteiros ou variveis de referncia. So usadas frequentemente para implementar estruturas dinmicas que crescem e diminuem durante a execuo. Desvantagem: custo adicional de referncia, alocao e desalocao.
Exemplo: C++ new operando : tipo Aloca uma posio de memria na heap e retorna um ponteiro para essa posio int *intnode; .... intnode = new int; .... delete intnode;

/* aloca uma posio de memria tipo int */ /* desaloca a posio de memria para a qual intnode aponta */

JAVA Todos os dados, exceto primitivos escalares so objetos portanto so dinmicos de heap e acessados por variveis de referncia. A desalocao no feita explicitamente, mas implicitamente pelas rotinas de coleta de lixo (garbage collection)

Verificao de Tipo
Atividade que certifica que os operandos de um operador so de tipos compatveis. So considerados operadores e operandos:
operadores usuais (aritmticos, relacionais, etc) subprogramas (operadores) e parmetros (operandos) atribuio (operador) e variavel / expresso (operandos)

Verificao de tipo esttica


Feita antes da execuo Amarrao de tipo esttica permite quase sempre a verificao de tipo esttica Verificao de tipo deve ser dinmica quando a mesma posio de memria pode armazenar valores de tipos diferentes em momentos diferentes durante a execuo. Ada e Pascal : record variante FORTRAN: EQUIVALENCE C, C++ : unions

Os tipos de operandos so compatveis com um operador se:


so aceitos pelo operador ou podem ser convertidos implicitamente pelo compilador (coero)

Erro de tipo: aplicao de um operador a um operando de tipo no apropriado.

Verificao de tipo dinmica


Feita durante a execuo do programa. Amarrao de tipo dinmica exige verificao de tipo dinmica. Tipagem forte
Uma linguagem considerada fortemente tipada se erros de tipo podem sempre ser detectados. FORTRAN no fortemente tipada no faz verificao de tipo entre parmetros formais e reais EQUIVALENCE permite acesso a mesma posio de memria por variveis de tipos diferentes estruturas do tipo union so checadas permitem uso de funes que no fazem verificao de tipo de parmetros Java fortemente tipada - permite converso explicita de tipo, que pode resultar em erro de tipo Pascal quase fortemente tipada record variante permite omisso do tag que armazena o tipo corrente de uma varivel C, C++ no so fortemente tipadas