Você está na página 1de 30

LINGUAGENS DE PROGRAMAO: NOES PRELIMINARES PROGRAMA Duas formas de manifestao: Como documento: especificao de um conjunto de operaes; Em execuo: realizao

ao das operaes especificadas Programa, uma mquina abstrata: manipula e produz entidades abstratas (dados). , ao mesmo tempo, a descrio da mquina (documento) e a prpria mquina (em execuo). Papel da linguagem de programao(LP): define recursos para a construo de mquinas abstratas especficas. LP: conjunto de recursos que podem ser compostos para construir programas, mais um conjunto de regras de composio. As regras visam a implementaes com qualidade apropriada (ex: verificao de tipos).

Elementos a serem observados no projeto de uma LP: requisitos: universo de problemas a serem resolvidos; expressividade: qual a melhor forma de representar os elementos da linguagem? paradigma: qual a forma mais apropriada para representar e resolver os problemas daquele domnio. implementao: os requisitos e sua representao so passveis de implementao? (ex: recursividade) eficincia: a implementao se d em um nvel aceitvel de eficincia? SINTAXE E SEMNTICA Para que uma LP atenda aos requisitos especificados de forma eficiente, deve ser especificada de forma nica (no ambgua). Isso envolve a definio: sinttica: como escrito cada elemento da LP. semntica: o que significa cada elemento. Ex1 - a declarao de uma varivel feita em cada linguagem, de acordo com suas regras sintticas: A: real; {pascal} float A; // C/C++ A semntica indica que a declarao de uma varivel A acarretar a reserva de memria para A.

Ex2 o uso de expresses aritmticas deve obedecer s regras sintticas da LP: a + b * c (+ a (* b c)) {pascal} ; lisp

A semntica indica que a resoluo da expresso se dar pelo produto de b por c, seguido da soma desse resultado com a. COMPILADORES E INTERPRETADORES A implementao de cada um dos elementos de uma LP feita atravs de processadores: compiladores: os programas so transformados por inteiro em um conjunto de instrues que podem ser fisicamente efetuadas por um computador. Interpretadores: cada expresso transformada nas instrues correspondentes e acionada no computador.

METODOLOGIA DE PROGRAMAO Novas formas de resolver problemas podem requerem desde novos elementos bsicos nas LP at novos paradigmas. Diferentes paradigmas advm de formas diferentes de resolver problemas (novas orientaes metodolgicas) LP orientadas a objetos(OO): solues de problemas a partir de objetos; LP imperativas: solues de problemas orientadas por dados; LP declarativas: solues de problemas orientadas por relaes entre declaraes; Cada linguagem deve prover os mecanismos que permitam a representao e a manipulao natural dos elementos bsicos, conforme o paradigma de referncia. De acordo com a evoluo das metodologias de desenvolvimento, novos elementos so incorporados s LP. Ex: a verificao de tipos, tradicionalmente feita no momento da compilao, feita durante a execuo em linguagens mais modernas.

CARACTERSTICAS DESEJVEIS PARA UMA LP 1 - LEGIBILIDADE: a LP deve possuir elementos de fcil entendimento e no-ambguos. Para preservar a legibilidade, a LP deve combinar: Simplicidade: a linguagem deve prover um nmero reduzido de elementos bsicos, evitando-se multiplicidade de escrita. Ortogonalidade: a linguagem deve possuir um conjunto mnimo de primitivas que possam ser combinadas para gerar componentes mais elaborados. Instrues de controle claras: estas devem se reduzir a um conjunto estritamente essencial para o controle do fluxo de execuo. o uso indiscriminado de instrues de desvio (go to) prejudica a legibilidade: 100 110 120 130 140 150 160 170 180 190 I = 1; se I > N then goto 190 J = 1; se J > N then goto 110 leia(M[I,J]); J = J+1; goto 130; I = I+1; goto 110; ...

Sem goto... for I:= 1 to N do for J := 1 to N do readln(M[I,J]); Facilidade para representao de estruturas de dados: deve haver mecanismos claros de definio e manipulao de tipos primitivos e compostos. Sintaxe limpa e concisa: cada instruo deve representar de forma nica e intuitiva seu significado. 2 FACILIDADE DE ESCRITA A LP deve possuir expressividade suficiente para resolver problemas de forma clara e natural. Isso envolve: simplicidade e ortogonalidade suporte a abstraes (forma de tratar objetos em que apenas os elementos essenciais so representados) facilidade de escrita est relacionada com legibilidade 3 CONFIABILIDADE As implementaes correspondentes aos problemas devem produzir os resultados esperados. Ex: mecanismos de verificao de tipos impedem que programadores faam operaes com tipos conflitantes

manipulao de excees: resultados so produzidos apenas para dados consistentes, e excees so providas quando a consistncia violada (tendncia das LP atuais) 4 CUSTO custo de desenvolvimento (a aceitao no mercado provoca amortizao desse custo) custo de uso: treinamento, custo de escrita, compilao e execuo. Linguagens legveis, de fcil escrita e confiveis tendem a ter um custo menor. TIPOLOGIA DAS LP LINGUAGENS ASSERTIVAS: baseiam-se em expresses que modificam valores de entidades (dados ou objetos). Incluem: linguagens imperativas: construo de programas dirigida pela transformao de dados linguagens OO: construo de programas dirigida pelas mudanas de estadop de entidades abstratas denominadas objetos.

Objeto: repositrio de dados mais um conjunto de operaes capazes de transformar os valores desses dados. Exemplo - classe de objetos pilha:

LINGUAGENS ASSERTIVAS: baseiam-se em expresses que verificam ou induzem a que ocorram relaes entre declaraes. linguagens funcionais: relaes so caracterizadas por mapeamentos (funes) entre estruturas simblicas; linguagens lgicas: relaes so caracterizadas como expresses da lgica matemtica; linguagens orientadas a satisfaes de restries: relaes so caracterizadas como equaes e inequaes algbricas. Cada um desses paradigmas apresenta caractersticas (propriedades sintticas e semnticas) que o torna mais adequado para certos tipos de problema.

VALORES E TIPOS
Dados: razo de ser dos programas; Programas razo de ser das LP importncia do estudo da natureza dos dados Dados: trs aspectos bsicos: valores: representaes simblicas de conceitos tipos: classes de valores variveis: os valores precisam ser registrados para passar de uma expresso a outra Importncia do estudo de tipos de dados necessidade da representao de valores para que estes possam ser manipulados; convenincia em tratar uniformemente valores semanticamente relacionados operaes em LP devem ser definidas para um tipo como um todo (e no para valores em particular)

Tipos de dados: agrupamento de elementos de natureza semelhante. Isso envolve: valores que elementos de um certo tipo podem assumir; operaes para tratamento desses elementos (com regras unificadas) Ex: para tipos numricos desejamos operaes aritmticas e comparaes entre valores mesmo elementos de tipos no numricos possuem entre si uma ordem os principais tipos de dados tm influncias de conceitos matemticas. Os tipos de dados so divididos em dois grandes grupos: primitivos compostos alm destes, podemos definir tipos em funo deles prprios: tipos recursivos

TIPOS PRIMITIVOS Tipos cujos valores so atmicos: no podem ser desmembrados em valores mais simples a implementao de um tipo primitivo feita fora da LP: sendo um elemento atmico, no h como descrev-lo atravs dos elementos da LP. a implementao dos tipos primitivos numricos varia de uma LP para outra e de acordo com o ambiente computacional. Ex: 16 tipo Word (Pascal): com 2 bytes, representa 2 valores: 0 a 65.535. tipos reais: alguns bits representam o expoente de notao cientfica (ponto flutuante) e outros bits representam a mantissa. um valor real, quando implementado no computador aproximado pelo valor representvel mais prximo. os intervalos entre reais (valores representados) cresce medida que cresce o expoente

para que no se confunda essa representao aproximada com nmeros reais, usa-se o termo nmero de ponto flutuante. os conjuntos de inteiros e reais (matemtica) so infinitos: s podem ser parcialmente representados em computador. A escolha dos tipos primitivos para uma LP depende dos propsitos para os quais a linguagem foi criada. Ex: a linguagem MATLAB (voltada para problemas matemticos), possui matrizes como um tipo primitivo. TIPOS NUMRICOS Os tipos numricos primordiais fazem parte da maioria das LP Ex: inteiro e real Pascal Representao de inteiros Representao de nmeros de ponto flutuante Real, Double, Extended, etc. C float, double, etc.
Integer, Word, Byte, int, unsigned int, etc. long int, etc.

TIPOS NO NUMRICOS Mais comuns: booleanos caracteres os ponteiros (apontadores) so usados para manipular o valor de memria correspondente ao seu endereo. Exemplo de definio (ponteiro para inteiro)
var PtInt: ^integer; int *PtInt; {linguagem Pascal} //linguagem C/C++

TIPOS ENUMERADOS Alm dos tipos pr-definidos, alguns problemas requerem a construo de novos tipos. As LP em geral fornecem mecanismos para construo de novos tipos

Ao se construir um tipo enumerado, so explicitados todos os valores possveis para as suas variveis. Ex:
{Pascal} type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez); {C/C++} enum Meses = {jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez);

Os elementos que aparecem na enumerao sero os nicos valores possveis para variveis daquele tipo. Ex: var M: Meses; begin M := jan; { no so requeridas aspas } H uma relao de ordem entre os valores. Portanto, podese comparar dois valores (jan<fev) ou variveis do tipo. Para implementar essa relao de ordem, em geral as LP associam cada valor a um valor inteiro, iniciando-se em 0: jan associado a 0, fev a 1, etc.

SUBINTERVALOS Novos tipos, criados como subconjuntos de tipos j existentes (primitivos ou definidos pelo usurio). Ex:
type DiasMes = 1..31; PrimSem = jan..jun;

TIPOS COMPOSTOS
Os tipos apresentados anteriormente relacionam-se com valores atmicos: no temos acesso a partes do valor. H vrios problemas que exigem a modelagem de valores compostos, ou seja, constitudos de um conjunto de valores mais simples. Ex: podemos estar interessados em ter acesso separadamente s partes de uma data (dia, ms ou ano) As LP provem mecanismos para criao de tipos compostos, cujos valores podem ser desmembrados em valores mais simples.

Os tipos compostos visam ao agupamento de valores que representam os dados das aplicaes (resolues de problemas) Os elementos matemticos que inspiram os agrupamentos de valores nas LP so: produto cartesiano unio disjunta mapeamentos conjunto potncia

PRODUTO CARTESIANO Dados dois conjuntos A e B, o produto cartesiano AXB correponde a todos os pares onde o primeiro elemento pertence a A e o segundo elemento a B. C = AXB = {(x,y)|xA, yB} Sendo #S o nmero de elementos de um conjunto S, #C = #A * #B

Ex: A = {jan, fev, mar} B = {1,2,3} AXB = {(jan,1),(jan,2),(jan,3), (fev,1),(fev,2),( fev,3), (mar,1),(mar,2),( mar,3) } Se qualquer dos conjuntos for infinito, o produto cartesiano resultante ser infinito. Em vrias situaes necessrio agrupar valores deswsa forma. Assim, as LP provem construtores para a formao de produtos cartesianos: record (em Pascal), struct (em C). Ex:
type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez); Dias = 1..31; Data = record D: Dias; M: Meses; end;

Com o tipo Data, pode-se representar datas do ano, atravs do par <dia, ms>.

UNIO DISJUNTA A unio de dois conjuntos gera um terceiro com todos os elementos de ambos os conjuntos originrios. A unio disjunta tem a peculiaridade de podermos distingir o conjunto origem de cada elemento.

C=S+T={prim x|xS}U{seg y|yT}


Por conveno, adotou-se o termo prim para indicar que o elemento provm do primeiro conjunto e o termo seg para indicar que provm do segundo conjunto. O nmero de elementos do conjunto C : #C = #S+#T Na unio de conjuntos, quando os dois conjuntos possem elementos iguais, somente um deles far parte do resultado. Na unio disjunta, os dois elementos so considerados, j que usado um discriminador. Ex:

A = {jan,fev,mar} B = {1,2,3} A+B = (prim jan, prim fev, prim mar, seg 1, seg 2, seg 3}

Em termos prticos, um elemento do conjunto A+B tanto pode assumir um valor do conjunto A (jan,fev,mar) quanto um valor do conjunto B (1,2,3). Em Pascal, a unio disjunta implementada atravs de um registro que possui uma varivel que discrimina o tipo. type Precis=(exato,aprox); Num = record case P: Precis of exato: (VlInt:integer); aprox: (VlRl :real); end; var X: Num; begin X.P := exato; X.VlInt := 3; A varivel X pode assumir tanto um valor inteiro quanto um valor de ponto flutuante. Apenas um campo dentro do case pode ser usado por vez. O mesmo espao de memria compartilhado pelos campos ( alocado espao para o campo maior real no exemplo acima: 6 bytes).

Implementao na linguagem C:

union N { int VlInt; float VlRl; };


OBS: em C no h o elemento discriminador. MAPEAMENTOS O mapeamento de dois conjuntos resulta em um terceiro conjunto de pares onde: o primeiro elemento provm do primeiro conjunto o segundo elemento provm do segundo conjunto cada elemento do primeiro conjunto est associado, no mximo, a um elemento do segundo. Ex:

A = {jan,fev,mar} B = {1,2,3} Mapeamentos possveis (entre outros): C = {jan1,fev3,mar1} D = {jan2,fev2,mar1}

Definio:

m:ST={m|xS m(x)T}
O primeiro conjunto denominado de domnio e o segundo o contradomnio ou imagem. os elementos do domnio correspondem aos ndices em LP A cardinalidade (nmero de elementos) do conjunto ST dada por:

#(ST) = (#T)#S
Os mapeamentos aparecem nas LP como arrays. Em algumas LP os domnios so sempre inteiros (ou naturais) Outras permitem que os ndices sejam definidos pelo programador Ex: em Pascal, o conjunto de ndices explicitamente definido. J em C, apenas o nmero de elementos do domnio definido. Domnios inteiros em Pascal e C:

var V:array[1..10] of integer; int V[10]; // C

{Pascal}

Domnios no inteiros (Pascal) Representao da menor temperatura de cada ms do ano:


type Meses = (jan,fev,mar,abr,mai,jun, jul,ago,set,out,nov,dez); var MinTemp: array[Meses] of real;

Outras possibilidades:
MinTemp: array[jan..dez] of real; MinTempSem: array[jan..jun] of real;

Possibilidades de manuseio:
var I: Meses; begin for I:= jan to dez do readln(MinTemp[I]);

A funes na maioria das LP tambm so mapeamentos entre um domnio e um contradomnio. Nesse caso, um algoritmo descreve a relao entre os elementos do domnio e do contradomnio.

CONJUNTOS POTNCIA Alguns problemas computacionais requerem uma representao de conjuntos (em vez de um nico elemento) Dado um conjunto S, o conjunto potncia P(S) o conjunto formado por todos os possveis subconjuntos de S. Definio: P(S) = {R|R S} O nmero de elementos (cardinalidade) do conjunto P(S): #(P(S)) = 2
#S

Ex: A = {vermelho,azul,amarelo}
P(A) = {{},{vermelho},{azul},{amarelo}, {vermelho,azul},{vermelho,amarelo}, {azul,amarelo},{vermelho,azul,amarelo}}

#(P(A)) = 2

#A

= 2

= 8

Aplicao: a partir das cores primrias, representar as vrias cores por meio da mistura destas cores primrias. A linguagem C no implementa conjuntos

Pascal e Modula-3 esto entre as poucas linguagens que provem manipulao de conjuntos (construtores e operadores). {exemplo acima em Pascal} type Cores=(vermelho,azul,amarelo); NovasCores = set of Cores; TIPOS RECURSIVOS Aqui entra um texto que fiz em casa Definio em Pascal de uma lista de inteiros: type PtNo = ^No; No = record Valor: integer; Prox: PtNo; end; OBS: Em Pascal no pode ser definido um tipo usando-se seu prprio nome.

Torna-se necessrio um elemento auxiliar para a referncia (PtNo) A mesma definio em C: typedef struct No *PtNo; struct No { int Valor; PtNo Prox; } Alternativa: struct No { int Valor; No *Prox; } TIPOS CONSTRUDOS PELO PROGRAMADOR O programador pode definir tipos de dados pela: Renomeao de tipos existentes Agregao de tipos predefinidos ou criados na LP (atravs de seus construtores)

Vantagens de tipos nomeados :

legibilidade (tipos so nomeados de forma significativa para o contexto) facilidade de escrita (no necessrio definir a estrutura para cada varivel) facilidade de modificao (basta modificar o tipo para modificar todas as variveis correspondentes)

VARIVEIS
Necessidade de armazenar valores de forma que eles possam ser usados posteriormente: variveis. PAPEL DAS VARIVEIS A Soluo de problemas, em geral, uma transformao sucessiva dos valores originais at a obteno dos valores desejados. Varivel: uma forma de abstrair a representao efetiva de cada valor (atravs de um nome fantasia). Variveis so utilizadas para modelar objetos reais de forma que seus valores possam ser consultados ou modificados.

O armazenamento feito atravs de clulas de memria ( o nmero de clulas depende do tipo associado e da LP) Para cada varivel tem-se: Um identificador Um endereo da clula de memria O contedo A declarao de uma varivel envolve, portanto, trs subtarefas: Associar um tipo varivel Alocar espao de memria apropriado Associar a esse espao o identificador ARMAZENAMENTO E ACESSO A VALORES Variveis podem armazenar tanto contedos atmicos quanto compostos variveis simples: o acesso feito, em geral, sobre o valor como um todo variveis compostas: podemos armazenar e ter acesso a partes (valores mais simples) VARIVEIS SIMPLES Espaos de memria que podem ter seus contedos armazenados e acessados atomicamente.

TIPOS PRIMITIVOS: Os valores dos tipos primitivos so sempre referidos como elementos atmicos (embora sejam armazenados por meio de elementos que possam ser desmembrados) Ex: nmeros inteiros so representados internamente com um bit para sinal e um conjunto de bits para o valor.... nmeros reais (ponto flutuante) so representados internamente por um expoente e uma parte fracionria... ...entretanto, no fazemos referncia a essas partes separadamente. Ex (linguagem C) int i1,i2; float r; i1 = 10; i2 = i1 10; r = 20.5; Assim como os numricos, os caracteres e booleanos so tambm armazenados em variveis simples. Definio em C do tipo booleano Enum Bool {false, true};

... Bool b; ... If (b = true) ... OBS: alguns compiladores C++ suportam o tipo bool, outros no. Ponteiros So tambm tipos primitivos: guardam endereos de memria onde se encontram determinados contedos necessrios. Ex (Pascal): var PtInt1, PtInt2: ^Integer; I: Integer; ... New(PtInt1); I := 10; PtInt2 := @I; PtInt1^ := I; Dispose(PtInt1);

Em C... int * PtInt1, *PtInt2; int I; ... PtInt1 = (int *) malloc(sizeof(int)); I = 10; PtInt2 = &I; *PtInt1 = I; free(PtInt1);

Você também pode gostar