• Nenhum resultado encontrado

Linguagens de Programação. Roberto Willrich INE- CTC-UFSC URL:

N/A
N/A
Protected

Academic year: 2021

Share "Linguagens de Programação. Roberto Willrich INE- CTC-UFSC URL:"

Copied!
53
0
0

Texto

(1)

Linguagens de

Linguagens de

Programação

Programação

Roberto Willrich

Roberto Willrich

INE- CTC-UFSC

INE- CTC-UFSC

E-Mail: [email protected]

E-Mail: [email protected]

URL: http://www.inf.ufsc.br/~willrich

URL: http://www.inf.ufsc.br/~willrich

(2)

Linguagens de Programação

Linguagens de Programação

Conteúdo

Conteúdo

– Software e Hardware

– Tipos de Softwares

– Níveis de Linguagem de Programação

– Etapas para Geração de um Programa

– Paradigmas de programação

– Linguagens Interpretadas e Compiladas

– Exemplos de Linguagens de Programação

(3)

Roberto Willrich - INE/UFSC - 27/06/06

Programação de Computadores

Programação de Computadores

Sistema Computacional

Sistema Computacional

– Termo mais abrangente que computador

• Inclui qualquer máquina baseada em processador

– Características diferentes tanto a nível de arquitetura e linguagem de programação

– Visto como uma associação de

• Hardware

– está associado à parte física do sistema (os circuitos e dispositivos) que suporta o processamento da informação;

• Software

– corresponde ao conjunto de programas responsáveis pela pilotagem do sistema para a execução das tarefas consideradas

(4)

Programação de Computadores

Programação de Computadores

Classificação dos softwares quanto ao tipo de serviço por ele

Classificação dos softwares quanto ao tipo de serviço por ele

realizado

realizado

– software de sistema (ou sistema operacional)

• capaz de oferecer ao usuário, ou a outros softwares, facilidades de acesso aos recursos do computador

• através de comandos ou serviços especiais a nível de um programa • administra os arquivos, controla periféricos e executa utilitários.

– software utilitário

• programas desenvolvidos por especialistas ou mesmo por usuários experimentados

• tem por objetivo facilitar a realização de determinadas atividades correntes no uso dos computadores

– detecção e eliminação de vírus, programas de comunicação em redes de computadores, compressão de arquivos, etc...

– software aplicativo

• programas desenvolvidos ou adquiridos pelos usuários para algum fim específico

(5)

Roberto Willrich - INE/UFSC - 27/06/06

Programação de Computadores

Programação de Computadores

Linguagem de Programação

Linguagem de Programação

– Definida como sendo um

• conjunto limitado de

instruções

(vocabulário)

• associado a um conjunto de regras (

sintaxe

)

– define como as instruções podem ser associadas

– como se pode compor os programas para a resolução de um determinado problema

Existem várias linguagens de programação

Existem várias linguagens de programação

– algumas de uso mais geral

– outras concebidas para áreas de aplicação

(6)

Níveis de Linguagens de Programação

Níveis de Linguagens de Programação

Classificação das linguagens de programação

Classificação das linguagens de programação

– Podem ser classificadas em níveis de

linguagens

• Sendo que os níveis mais baixos são mais próximos da

linguagem interpretada pelo processador e mais distante das

linguagens naturais

– Níveis:

• Linguagem de Máquina

• Linguagem Hexadecimal

• Linguagem Assembly

• Linguagem de Alto nível

(7)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem de Máquina

Linguagem de Máquina

Computador

Computador

– Corresponde basicamente a um conjunto de circuitos

• Sua operação é controlada através de programas escritos numa forma bastante primitiva

– baseada no sistema binário de numeração tanto para a representação dos dados quanto das operações

Linguagem de Máquina

Linguagem de Máquina

– Forma básica (em linguagem binária) de representação

dos programas

– É a forma compreendida e executada pelo hardware do

(8)

Linguagem de Máquina

Linguagem de Máquina

Representação

Representação

– Instruções de linguagem de máquina são representadas

por códigos na forma de palavras binárias cuja extensão

pode variar de 8 a 64 bits

• 01000101000111010101010000100101010100010111101101...

– Contém instruções elementares, como transferência de

dados da memória para registros internos da CPU,

adição de valores, etc.

• 1011000000000001 significa colocar valor 1 no registro interno AL • 1111111011000000 incrementa de 1 o valor do registro AL

(9)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem Hexadecimal

Linguagem Hexadecimal

Linguagem Hexadecimal

Linguagem Hexadecimal

– Simplifica a compreensão e a programação de

computadores

• seqüência de bits é representada por números hexadecimais

– Notação em hexadecimal

• 1011000000000001

b

= B001

h

significa colocar valor 1 em AL

• 1111111011000000

b

= FEC0

h

incrementa de 1 AL

– Programação de aplicações diretamente em

linguagem de máquina é impraticável

(10)

Linguagem Assembly

Linguagem Assembly

Linguagem Assembly (linguagem de montagem)

Linguagem Assembly (linguagem de montagem)

– linguagem de máquina de cada processador é acompanhada de

uma versão “legível” da linguagem de máquina

Uma linguagem simbólica

Uma linguagem simbólica

– Pois não é composta de números binários/hexadecimais – Utiliza palavras abreviadas, chamadas de mnemônicos,

indicando a operação

• MOV R1, R2

– mnemônico MOV (abreviação de MOVE) – dois registradores como parâmetros: R1 e R2

– processador comanda o movimento do conteúdo de R2 para R1 – equivalente a instrução Pascal R1:=R2

• ADD R1, R2

– mnemônico ADD (abreviação de ADDITION) – dois registradores como parâmetros: R1 e R2.

(11)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem Assembly

Linguagem Assembly

Simplifica a programação em código de máquina

Simplifica a programação em código de máquina

– Escolhendo nomes descritivos para as posições

de memória e usando mnemônicos para

representar códigos de operação

– Exemplo: operação de dois números inteiros:

v1:=v2+v3

• se associarmos o nome v2 à posição de memória 200

h

, v3 à

posição 202

h

e v1 à posição 204

h

• em notação hexadecimal ficaria: A1000203060202A30402

• usando a técnica mnemônica:

– MOV AX,v2; AX recebe o valor de memória associada a B – ADD AX,v3 ; AX recebe a soma de AX (B) com o valor de C – MOV v1,AX; variável A recebe valor de AX

(12)

Linguagem Assembly

Linguagem Assembly

Linguagem Assembly apresenta certas dificuldades

Linguagem Assembly apresenta certas dificuldades

– Necessidade de definição de um conjunto relativamente

grande de instruções para a realização de tarefas que

seriam relativamente simples

– Exigência do conhecimento de detalhes do hardware do

sistema

• arquitetura interna do processador, endereços e modos de operação de dispositivos de hardware, etc...

Tem vantagens

Tem vantagens

– Utilização da linguagem Assembly proporciona um maior

controle sobre os recursos do computador

• permitindo também obter-se bons resultados em termos de otimização de código

(13)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem Assembly

Linguagem Assembly

Geração do código de máquina

Geração do código de máquina

– Assembly é uma versão legível da linguagem de máquina

• passagem de um programa escrito em Assembly para a linguagem de máquina é quase sempre direta

– não envolvendo muito processamento

– Passagem de um programa Assembly para linguagem de

máquina é chamada de Montagem

• programa que realiza esta operação é chamado de montador (Assembler).

Linguagem simbólica Linguagem simbólica

Assembly

(14)

Linguagem Assembly

Linguagem Assembly

Linguagem Assembly é orientada para máquina (processador)

Linguagem Assembly é orientada para máquina (processador)

– É necessário conhecer a estrutura do processador para poder

programar em Assembly

• Utiliza instruções de baixo nível que operam com registros e memórias diretamente

– é muito orientada às instruções que são diretamente executadas pelo processador

• Não pode ser reutilizado em famílias de processadores diferentes

– Famílias geralmente mantém um certo nível de

interoperabilidade

• Família x86 processador Pentium suporta o Assembly do 80486, que suporta o do 80386...

Na seqüência da evolução

Na seqüência da evolução

– Procurou-se aproximar mais a linguagem de programação à

linguagem natural que utilizamos no dia-a-dia

(15)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem Assembly

Linguagem Assembly

Desvantagens com relação as linguagens de alto nível:

Desvantagens com relação as linguagens de alto nível:

– Assembly apresenta um número muito reduzido de

instruções

• do tipo operações de movimentação de dados em memória, para registros e para memórias, e operações lógicas e aritméticas bem simples

• instruções assembly são de baixa expressividade

– elas são de baixo nível

– programador deve programar num nível de detalhamento muito maior para fazer a mesma coisa que em um programa escrito em linguagem de alto nível

– Programador utiliza diretamente os recursos do

processador e memória

• ele deve conhecer muito bem a máquina onde ele está programando

– Programa escrito em linguagem Assembly não é muito

legível

(16)

Linguagem Assembly

Linguagem Assembly

Desvantagens com relação as linguagens de alto nível:

Desvantagens com relação as linguagens de alto nível:

– Programa Assembly não é muito portável

• portável apenas dentro de uma família de processadores

– Assembly tem um custo de desenvolvimento maior

• devido a sua baixa expressividade, ilegibilidade e exigência do conhecimento sobre a máquina faz a programação

• requerendo um maior número de homens/hora comparado com a programação utilizando linguagens de alto nível

(17)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem Assembly

Linguagem Assembly

Vantagens com relação as linguagens de alto

Vantagens com relação as linguagens de alto

nível:

nível:

– Permite o acesso direto ao programa de

máquina

• utilizando uma linguagem de alto nível não tem-se o controle

do código de máquina gerado pelo compilador

• programador pode gerar um programa mais compacto e

eficiente que o código gerado pelo compilador

– pode ser 0 ou 300 % menor e mais rápido que um programa compilado

– Assembly permite o controle total do hardware

• por exemplo, permitindo a programação de portas seriais e

paralela de um PC

(18)

Linguagem Assembly

Linguagem Assembly

Aplicações da Linguagem Assembly

Aplicações da Linguagem Assembly

– Controle de processos com resposta em tempo real

• devido a possibilidade de gerar programas mais eficientes • Aplicação tempo-real

– processador deve executar um conjunto de instruções em um tempo limitado

» exemplo: a cada 10 ms processador deve ler um dado, processá-lo e emitir um resultado

– Comunicação/transferência de dados

• devido a possibilidade de acessar diretamente o hardware

• linguagem Assembly é utilizada para a implementação de programas de comunicação ou transferência de dados

– Otimização de sub-tarefas da programação de alto nível

• um programa não precisa somente ser escrito em linguagem Assembly ou linguagem de alto nível

• existem programas de alto nível com sub-tarefas escritas em linguagem Assembly

(19)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem de Alto Nível

Linguagem de Alto Nível

Linguagem de Alto Nível

Linguagem de Alto Nível

– Assim denominadas por apresentarem uma sintaxe mais

próxima da linguagem natural

– Fazem uso de palavras reservadas extraídas do vocabulário

corrente (como READ, WRITE, TYPE, etc...)

– Permitem a manipulação dos dados nas mais diversas formas

• números inteiros, reais, vetores, listas, etc...

• enquanto a linguagem Assembly trabalha com bits, bytes, palavras, armazenados em memória.

Origem e Exemplos

Origem e Exemplos

– Surgiram entre o final da década de 50 e início dos anos 60

• Fortran, Cobol, Algol e Basic

– Algumas delas têm resistido ao tempo e às críticas

• Fortran ainda é visto como uma linguagem de implementação para muitas aplicações de engenharia

• Cobol é uma linguagem bastante utilizada no desenvolvimento de aplicações comerciais

(20)

Linguagem de Alto Nível

Linguagem de Alto Nível

Linguagem de Alto Nível para linguagem de

Linguagem de Alto Nível para linguagem de

máquina

máquina

– Passagem é bem mais complexa

• são utilizados compiladores e linkadores

Linguagem simbólica Linguagem simbólica

de Alto Nível

(21)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagem de Alto Nível

Linguagem de Alto Nível

Permitiria Interoperabilidade

Permitiria Interoperabilidade

– Dado que os comandos das linguagens de alto nível não

referenciam os atributos de uma dada máquina

• podem ser facilmente compilados tanto em uma máquina como em outra

– Programa escrito em linguagem de alto nível poderia,

teoricamente, ser usado em qualquer máquina

• bastando escolher o compilador correspondente

Interoperabilidade não é tão simples

Interoperabilidade não é tão simples

– Quando um compilador é projetado

• certas restrições impostas pela máquina são refletidas como características da linguagem a ser traduzida

• Exemplo

– tamanho do registrador e as células de memória de uma máquina limitam o

tamanho máximo dos inteiros que nela podem ser convenientemente manipulados

– Em diferentes máquinas uma “mesma” linguagem pode

apresentar diferentes características, ou dialetos

• é necessário fazer ao menos pequenas modificações no programa antes de move-lo de uma máquina para outra

(22)

Linguagem de Alto Nível

Linguagem de Alto Nível

Problema da Interoperabilidade

Problema da Interoperabilidade

– Para auxiliar a interoperabilidade

• American National Standards Institute (ANSI) e a International Organization for Standardization (ISO) adotaram e publicaram padrões para muitas das linguagens mais populares

• também surgiram padrões informais

– devido à popularidade de um dados dialeto de uma linguagem e ao desejo oferecerem produtos compatíveis

(23)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagens de Alto Nível

Linguagens de Alto Nível

Classificação quanto ao uso

Classificação quanto ao uso

– Linguagens de uso geral

• podem ser utilizadas para implementação de programas com as mais diversas características e independente da área de aplicação

• Pascal, Modula-2 e C;

– Linguagens especializadas

• são orientadas ao desenvolvimento de aplicações específicas • Prolog, Lisp e Forth;

– Linguagens orientadas a objeto

• oferecem mecanismos sintáticos e semânticos de suporte aos conceitos da programação orientada a objetos

(24)

Desenvolvimento de Programas

Desenvolvimento de Programas

Ambiente de desenvolvimento

Ambiente de desenvolvimento

– Desenvolvimento de programas é associado ao uso de

ferramentas ou ambientes de desenvolvimento

• que acompanham o programador desde a etapa de codificação propriamente dita até a geração e teste do código executável

– Principais etapas de geração de um programa

• Codificação do código fonte • Tradução do código fonte • Linkagem

• Depuração

– Engenharia de Software

• Metodologias mais completas que definem os passos para o desenvolvimento de programas

(25)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Compreende três atividades: análise léxica, análise

sintática e geração de código

• são processadas pelos módulos do tradutor: analisadores léxico, sintático e gerador de código

– Análise léxica

• É o processo de reconhecer quais cadeias de símbolos do programa-fonte representam entidades indivisíveis

• Exemplos

– três símbolos 153 não devem ser interpretados como 1, seguido por 5, seguido por 3, mas são reconhecidos como um valor numérico apenas – palavras que aparecem no programa, embora compostas de caracteres

individuas, devem ser interpretadas cada qual como uma unidade inseparável

(26)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Análise léxica

• Analisador léxico identifica um grupo de símbolos que representam uma única entidade

– classifica como sendo um valor numérico, ou uma palavra, ou um operador aritmético, e assim por diante

– gera um padrão de bits conhecido como átomo (token), indicativo da classe do elemento

(27)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Análise sintática

• Processo de identificação da estrutura gramatical do programa, e de reconhecimento do papel de cada um dos seus componentes

• Processo de análise sintática é feito com base em um conjunto de regras sintáticas que definem a sintaxe da linguagem de

programação

• Uma forma de expressar regras sintáticas é através de diagramas de sintaxe

(28)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Diagramas de Sintaxe

• Representações gráficas da estrutura gramatical de um programa • Terminais são identificados por elipses

• Não-Terminais são identificados por retângulos

if

(29)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

Árvore sintática

• Processo de análise sintática de um programa consiste em construir uma árvore de sintaxe para o programa-fonte

• Por isso as regras de sintaxe que descrevem a estrutura gramatical de um programa não devem propiciar que duas ou mais árvores de sintaxe distintas possam ser construídas para a mesma cadeia

– dado que isto levaria a ambigüidades no analisador sintático

• Esta falha pode ser bastante sutil

– A própria regra de if-then-else apresentada contém esse defeito – If B1 then if B2 then S1 else S2

(30)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Árvore sintática

Comando Comando then Expressão Expressão booleana

booleana ComandoComando

else ComandoComando

then

Expressão

Expressão

booleana

booleana ComandoComando

if

B1 if

(31)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Árvore sintática

Comando Comando then Expressão Expressão booleana

booleana ComandoComando

else ComandoComando

then

Expressão

Expressão

booleana

booleana ComandoComando

if

B1 if

B2 S1

(32)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Em muitas linguagens, evita-se tais problemas usando

chaves, ou então Begin-End

If B1 then Begin if B2 then S1 End else S2 e If B1 then Begin if B2 then S1 else S2

(33)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– À medida que um analisador sintático recebe átomos do

analisador léxico, ele vai analisando os comandos e

ignorando os comentários

– As informações extraídas das declarações são tabeladas

em uma estrutura conhecida como tabela de símbolos

• guarda informações sobre as variáveis declaradas, os tipos de dados e as estruturas de dados associadas a tais variáveis

– Analisador sintático utiliza como base estas informações

ao analisar comandos tais como:

(34)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Total:=Custo+Imposto;

– para determinar o significado do símbolo +

• analisador deverá saber qual o tipo de dados associados às variáveis Custo e Imposto

– Se Custo for do tipo real e Imposto for do tipo caractere

» estão somar Custo e Imposto faz pouco sentido e deverá ser considerado um erro

– Se Custo e Imposto forem ambos de tipo inteiro

» analisador solicitará ao gerador de código a construção de uma instrução em linguagem de máquina que utilize o código de operação correspondente à adição de inteiros

– Se ambos forem de tipo real

» analisador solicitará o uso do código de operação correspondente à adição de valores em ponto flutuante

(35)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Total:=Custo+Imposto;

• Também tem sentido quando os dados envolvidos não forem do mesmo tipo

– Por exemplo, se Custo for inteiro e Imposto for real, o conceito de adição ainda será aplicável

• Analisador sintático poderá decidir que o gerador de código construa as

instruções necessárias para converter um dado de um tipo para outro, antes de executar a adição

– Tal conversão implícita entre tipos é denominada coerção.

– As operações de coerção são mal-vistas por muitos projetistas

de linguagens

• argumentam que a necessidade da coerção é um sintoma de falha no projeto do programa, não devendo, pois, ser contornada pelo analisador sintático • a maioria das linguagens modernas são fortemente tipadas

– todas as ações solicitadas por um programa devem envolver dados de tipos compatíveis, sem coerção

(36)

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– processo de construção das instruções em linguagem de

máquina envolve numerosos problemas

• um dos quais é o da construção de um código eficiente

– Por exemplo, consideremos a tarefa de traduzir a seguinte

seqüência de dois comandos:

• x:=y+z; • w:=x+z;

– Estes comandos poderiam ser traduzidos como comandos

independentes

• esta interpretação tende a não produzir um código eficiente.

– gerador de código deve ser construído de tal forma que seja

capaz de identificar que, ao ser completado o primeiro comando, os valores de x e de z já se encontram em registradores de propósito geral do processador

(37)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Tradução do Código Fonte (código objeto)

Tradução do Código Fonte (código objeto)

– Análises léxica e sintática e a geração de código não são

efetuadas em ordem estritamente seqüencial, mas de

forma intercalada

– Analisador léxico começa identificando o primeiro átomo

e fornecendo-o ao analisador sintático

• com esta pista sobre a estrutura que vem a seguir, o analisador sintático solicita ao analisador léxico o próximo átomo

– À medida que o analisador sintático reconhece sentenças

ou comandos completos

• vai ativando o gerador de código

• para que este possa produzir as correspondentes instruções de máquina

(38)

Desenvolvimento de Programas

Desenvolvimento de Programas

Editores de ligação (linker)

Editores de ligação (linker)

– Objetivo: rearranjar o código do programa incorporando

a ele todas as partes referenciadas no código original

• resultando num código executável pelo processador

– Tarefa é feita pelos ligadores (linkadores)

Código Código Fonte Fonte Código Código Fonte Fonte Código Código Fonte Fonte Código Código Fonte Fonte Código Código Objeto Objeto Código Código Objeto Objeto Código Código Objeto Objeto Código Código Objeto Objeto

(39)

Roberto Willrich - INE/UFSC - 27/06/06

Desenvolvimento de Programas

Desenvolvimento de Programas

Depuradores ou debuggers

Depuradores ou debuggers

– Auxilia o programador a eliminar (ou reduzir) a

quantidade de “bugs” (erros) de execução no seu

programa

– Executam o programa gerado através de uma interface

apropriada que possibilita uma análise efetiva do código

do programa

– Graças à:

• execução passo-a-passo (ou instrução por instrução) de partes do programa

• visualização do “estado” do programa através das variáveis e

eventualmente dos conteúdos dos registros internos do processador • alteração em tempo de execução de conteúdos de memória ou de

variáveis ou de instruções do programa • etc...

(40)

Paradigmas de programação

Paradigmas de programação

Existem vários paradigmas de programação

Existem vários paradigmas de programação

– que são estilos utilizados pelos programadores para

conceber um programa

– os mais conhecidos são

• Programação não-estruturada • Programação Procedural

• Programação Modular

(41)

Roberto Willrich - INE/UFSC - 27/06/06

Paradigmas de programação

Paradigmas de programação

Programação não-estruturada

Programação não-estruturada

– Pessoas aprendem a programação escrevendo

programas pequenos e simples

• consistindo apenas de um programa principal

• uma seqüência de comandos ou declarações que modificam

dados que são acessível a todos os pontos do programa

– Técnica de programação não estruturada

• tem várias desvantagens no caso de programas grandes

– se a mesma seqüência é necessária em localizações diferentes ela deve ser copiada

(42)

Programação não estruturada

Programação não estruturada

PROGRAM MaiorN; VAR

Num1,Num2,Num3,Maior : integer; BEGIN

(* Leitura dos numeros *)

write(‘Entre com o primeiro numero -> ‘); readln(Num1); write(‘Entre com o segundo numero -> ‘); readln(Num2); write(‘Entre com o terceiro numero -> ‘);readln(Num3); (* Determinacao do maior numero *)

Maior := Num1; IF Maior < Num2

THEN Maior := Num2; IF Maior < Num3

THEN Maior := Num3;

(* Impressao do maior numero *)

writeln(‘Programa de Determinacao do Maior Numero’); writeln;

(43)

Roberto Willrich - INE/UFSC - 27/06/06

Paradigmas de programação

Paradigmas de programação

Programação Procedural

Programação Procedural

– Programa é visto como uma seqüência de chamadas de

procedimentos

• exemplo de procedimento clássico é o cálculo de uma raiz quadrada

– Uma chamada de procedimento é usado para invocar o

procedimento

• podendo ser passado alguns parâmetros

– Após a seqüência ser executada

• controle retorna justo após o ponto de chamada do procedimento

– Programas podem ser escritos mais estruturados e livres de

erro

• introduzindo parâmetros tão bem quanto procedimentos de procedimentos (sub-procedimentos)

– Por exemplo, se um procedimento é correto, toda vez que ele é usado ele produz um resultado correto

» no caso de erros pode-se direcionar a busca àqueles lugares que não são livres de erros

(44)

Programação Procedural

Programação Procedural

PROGRAM MaiorN1; VAR

Num1,Num2,Num3,Maior : Integer;

PROCEDURE LeNum(VAR N1: Integer; VAR N2: Integer; VAR N3: Integer); BEGIN

write(‘Entre com o primeiro numero -> ‘); readln(N1); write(‘Entre com o segundo numero -> ‘); readln(N2); write(‘Entre com o terceiro numero -> ‘); readln(N3); END; (* LeNum *)

FUNCTION DetMaior(N1:Integer;N2:Integer;N3:Integer): Integer; var M: Integer;

BEGIN

M := Num1;

IF M < Num2 THEN M := Num2; IF M < Num3 THEN M := Num3;

DetMaior:=M; END; (* DetMaior *)

BEGIN (* Programa Principal *) LeNum(Num1,Num2,Num3);

(45)

Roberto Willrich - INE/UFSC - 27/06/06

Paradigmas de programação

Paradigmas de programação

Programação Modular

Programação Modular

– No passar dos anos

• ênfase no projeto de programas passou do projeto de procedimentos para a organização dos dados

– surgindo a programação modular

– Procedimentos relacionados e dados que eles utilizam

são agrupados em módulos separados

• por exemplo, todas as funções de manipulação de uma pilha

(empilhar, desempilhar, etc.) e a pilha em si podem ser agrupadas em um módulo

– Cada módulo tem seus próprios dados

• permite que cada módulo gerencie um estado interno que é modificado por chamadas a procedimentos deste módulo

(46)

Programação Modular

Programação Modular

Program InverteNome ; Uses PilhaCar ;

Var Tam , i : Integer ; Nome , Inverso : String ; Begin

Write ( 'Entre um nome : ' ) ; Readln ( Nome ) ;

Tam := Length ( Nome ) ; For i := 1 To Tam Do Empilha ( Nome [ i ] ) ; Inverso := '' ;

While Not PilhaVazia Do

Inverso := Inverso + Retira ; Writeln ( Inverso )

End.

Unit PilhaCar ; Interface

Function PilhaVazia : Boolean ; Procedure Empilha ( X : Char ) ; Function Retira : Char ;

Implementation

Const TamPilha = 100 ; Type Indice = 1..TamPilha ;

VetorChar = Array [ Indice ] Of Char ; Var Pilha : VetorChar ;

Topo : 0..TamPilha ; Function PilhaVazia : Boolean ; Begin

PilhaVazia := (Topo = 0) End ;

Procedure Empilha ( X : Char ) ; Begin

Topo := Topo + 1 ; Pilha [ Topo ] := X End ;

Function Retira : Char ; Begin

Retira := Pilha [ Topo ] ; Topo := Topo - 1

(47)

Roberto Willrich - INE/UFSC - 27/06/06

Paradigmas de programação

Paradigmas de programação

Programação Orientada a Objetos

Programação Orientada a Objetos

– Temos uma malha de objetos que interagem

• cada um mantendo seu próprio estado

– Essência da programação orientada a objetos

• consiste em tratar os dados e os procedimentos que atuam sobre os dados como um único objeto

– Objeto

• entidade independente com uma identidade e certas características próprias

(48)

Paradigmas de programação

Paradigmas de programação

Linguagens de programação e seus paradigmas

Linguagens de programação e seus paradigmas

– Uma linguagem de programação fornece o suporte a um

estilo ou paradigma de programação se ela fornece

funcionalidades que a tornam conveniente para usar

determinado estilo

– Uma linguagem não suporta uma técnica se é necessário

esforços excepcionais ou destreza para escrever tal

programa

• ela meramente habilita a técnica a ser usada

• Por exemplo, pode-se escrever programas estruturados em Fortran e programas orientados a objetos em C

– mas isto é desnecessariamente difícil de fazer porque estas linguagens não suportam diretamente estas técnicas

(49)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagens Interpretadas

Linguagens Interpretadas

Linguagens de programação compiladas

Linguagens de programação compiladas

– Etapas de desenvolvimento anteriores consideram que o uso de

linguagens de programação compiladas

• aquelas que produzirão um programa na forma da linguagem de máquina do processador

• instruções definidas pelo programador usando uma linguagem de alto nível serão traduzidas para as instrução na linguagens de máquina

Linguagens de programação interpretadas

Linguagens de programação interpretadas

– Interpretação do programa usando outro programa, chamado

interpretador

– Linguagem interpretada mais conhecida: Basic

Linguagens Híbridas: Parcialmente compilada e

interpretada (java)

• interpretada por uma máquina virtual chamada JVM (Java Virtual Machine)

Interpretador

Interpretador

– Programa que executa as instruções escritas em linguagem de

alto nível

(50)

Linguagens Interpretadas

Linguagens Interpretadas

Compilador Versus Interpretador

Compilador Versus Interpretador

– Programa compilado executa mais rapidamente que um

programa interpretado

– Vantagem do interpretador é que ele não necessita

passar por um estágio de compilação durante a qual as

instruções de máquina são gerados

• Processo de tradução pode consumir muito tempo se o programa é longo

• Interpretador pode executar imediatamente os programas de alto-nível

– Interpretadores são algumas vezes usados durante o

desenvolvimento de um programa

• quando um programador deseja testar rapidamente seu programa

(51)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagens Interpretadas

Linguagens Interpretadas

Compilador Versus Interpretador

Compilador Versus Interpretador

– Tanto os interpretadores como os compiladores são

disponíveis para muitas linguagens de alto nível

• Java, Basic e LISP são especialmente projetadas para serem executadas por um interpretador

– Linguagens interpretadas podem possibilitar a

portabilidade

• Como não é gerado um código de máquina, e sim um código intermediário que será interpretado por uma máquina virtual

• Pode-se obter a portabilidade do código se esta máquina virtual for desenvolvida para várias plataformas

(52)

Linguagens Híbridas

Linguagens Híbridas

Java

Java

– Códigos fontes de Java (arquivos com a extensão .java)

são traduzidos na forma de um código intermediário

chamado bytecode (arquivos com a extensão .class)

• que podem ser executados por um interpretador Java.

– Bytecode pode ser transferido através de uma rede e

(53)

Roberto Willrich - INE/UFSC - 27/06/06

Linguagens Interpretadas

Linguagens Interpretadas

Java

Java

– Existem várias implementações de JVM’s para diversos

sistemas operacionais, incluindo UNIX, Macintosh OS e

Windows

Referências

Documentos relacionados