View
223
Download
0
Category
Preview:
DESCRIPTION
Trabalho de ICC
Citation preview
TRABALHO 03 – LINGUAGENS DE PROGRAMAÇÃO
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - COM06850- 2012-II
CIÊNCIA DA COMPUTAÇÃO
GRUPO 5
2012204302 – Caíque de Oliveira de Souza 2012204291 - Heloiza Barros Del‟Esposti
2012204278 - Maycown Douglas O. Miranda 2012204279 - Melissa Silva de Souza 2012204298 - Otto Freitas Quintanilha 2012204286 - Paloma Marques Nobre
Compilação
Compilação é o processo de tradução de um programa escrito em linguagem de alto nível para código em
linguagem de máquina. Compilação é um processo análogo ao da montagem (verificação / análise do
código fonte, resolução das referências de memória, reserva de espaço em memória e conversão para
código de máquina binário). O que diferencia a compilação do processo de montagem é sua maior
complexidade. No processo de montagem, há uma relação de 1:1, ou seja, cada instrução do código fonte
resulta em uma instrução de máquina, enquanto na compilação a relação é múltipla, cada instrução do
código fonte gerando várias instruções de máquina.
Durante a compilação, o código fonte é analisado (análise léxica, sintática e semântica), é gerado um
código intermediário e são construídas tabelas de símbolos, alocam-se as áreas de memória para variáveis
e atribui-se os registradores a serem utilizados, e é finalmente gerado o código objeto em linguagem
binária de máquina. Em alguns compiladores, é gerado um código intermediário em Assembly (que pode
ser visualizado pelo programador) e que em seguida passa pelo montador para gerar finalmente o código
objeto em linguagem de máquina.
O código objeto pode ser absoluto (os endereços constantes são endereços reais de memória) ou
relocável (os endereços são relativos, tendo como referência o início do programa, e os endereços reais de
memória são definidos apenas em tempo de execução).
Tipos de Compiladores:
Single-Pass: compilação numa única leitura do programa fonte
Multi-Pass: compilação através de várias leituras do programa fonte
Load-And-Go: compilação e a execução do programa fonte
Debugging: compilação permitindo a depuração do programa fonte
Optimizing: compilação e a otimização do programa alvo
Vantagens:
O código compilado é mais rápido de ser acessado;
Impossibilita ou pelo menos dificulta ser quebrado e visualizado o código-fonte original;
Permite otimização do código por parte do compilador;
Compila o código somente se estiver sem algum erro.
Desvantagens:
Para ser utilizado o código precisa passar por muitos níveis de compilação;
Assim como vantagem a possibilidade de não poder visualizar o código-fonte, pode ser uma
desvantagem;
Processo de correção ou alteração do código requer que ele seja novamente recompilado.
Interpretação
Com o processo de execução de um programa em fases distintas (compilação / ligação / execução)
apresentado, um programa para ser executado precisa primeiro ter sido convertido para código objeto pelo
compilador e depois ter passado pelo ligador. Esse processo é o mais largamente utilizado, porém não é o
único.
O método alternativo chama-se de interpretação e, a partir do programa fonte, realiza as três fases
(compilação, ligação e execução), comando por comando, em tempo de execução. Não existem fases
distintas nem se produzem códigos intermediários. Todo o processo de conversão é efetuado em tempo de
execução e imediatamente executado. Ou seja, cada comando é lido, verificado, convertido em código
executável e imediatamente executado, antes que o comando seguinte seja sequer lido.
Linguagens como C, Pascal, COBOL, etc, são linguagens tipicamente compiladas, enquanto o BASIC foi
desenvolvido como linguagem interpretada (hoje também existem linguagens BASIC compiladas e o
programador pode optar). As linguagens de programação tipicamente de usuário, tais como das planilhas
Excel, o Word Basic (linguagem de construção de Macros do Word), o Access, etc, são todas linguagens
interpretadas.
Uma vantagem é que o ciclo de escrita, execução, modificação é mais rápido em relação à compilação.
Por outro lado, a execução é mais lenta.
No programa em linguagem de alto nível, os interpretadores executam os passos definidos para cada
instrução e produzem o mesmo resultado que o do programa compilado. Entretanto, a execução de um
programa em linguagem de alto nível com o uso de interpretadores é mais lenta que a execução de um
programa compilado, uma vez que precisa examinar cada instrução no programa-fonte, à medida que ela
ocorre, e desviar para a rotina que executa a instrução.
Vantagens:
Correções e alterações são mais rápidas de serem realizadas;
Código não precisa ser compilado para ser executado;
Consomem menos memória.
Desvantagens:
Execução é mais lenta do programa;
Necessita sempre ser lido o código original para ser executado;
Veja o comparativo abaixo:
Tradução
Um programa escrito por um programador (chamado código fonte) em uma linguagem de alto
nível é um conjunto de instruções que é clara para programadores, mas não para computadores.
Ou seja, os computadores entendem única e exclusivamente suas linguagens nativas, as
linguagens de máquina. Programas em linguagem de alto nível, a exemplo dos programas escritos
em linguagem de Montagem, também precisam ser traduzidos para linguagem de máquina para
poderem ser submetidos ao computador e processados.
O processo de tradução do programa escrito em uma linguagem simbólica pelo programador,
chamado código fonte (source code) para a linguagem de máquina do computador chamada
código objeto (object code), é chamado compilação e é realizado por um programa chamado
Compilador (Compiler).
Tradução sucessiva de uma linguagem para outra intermediária mais simples, da linguagem fonte
até à linguagem objeto.
Cada tradução pode dividir-se nas seguintes fases:
Análise Léxica (scanner)
Ele separa a sequência de caracteres que representa o programa fonte em entidades ou tokens,
símbolos básicos da linguagem. Durante a análise léxica, os tokens são classificados como
palavras reservadas, identificadores, símbolos especiais, constantes de tipos básicos (inteiro real,
literal, etc.), entre outras categorias. Basicamente é reconhecer as sequências de símbolos que
representam uma unidade. Ex.: o nome de uma variável, uma constante, uma palavra chave de
uma instrução (while).
Um token consiste de um par ordenado (valor, classe). A classe indica a natureza da informação
contida em valor.
Outras funções atribuídas ao analisador léxico são: ignorar espaços em branco e comentários, e
detectar erros léxicos.
Análise Sintática (parser)
Ele agrupa os tokens fornecidos pelo analisador léxico em estruturas sintáticas, construindo a
árvore sintática correspondente. Para isso, utiliza uma série de regras de sintaxe, que constituem a
gramática da linguagem fonte. É a gramática da linguagem que define a estrutura sintática do
programa fonte.
O analisador sintático tem também por tarefa o reconhecimento de erros sintáticos, que são
construções do programa fonte que não estão de acordo com as regras de formação de estruturas
sintáticas como especificado pela gramática.
Identifica a estrutura gramatical do programa e reconhece o papel de cada componente. É
normalmente construída uma árvore sintática do programa e uma tabela de símbolos, que
identifica variáveis.
Analisador Semântico
O compilador executa ainda a análise semântica. O analisador semântico utiliza a árvore sintática
determinada pelo analisador sintático para: identificar operadores e operandos das expressões,
reconhecer erros semânticos, fazer verificações de compatibilidade de tipo, analisar o escopo das
variáveis, fazer verificações de correspondência entre parâmetros atuais e formais.
Fundamentalmente, a análise semântica trata os aspectos sensíveis ao contexto da sintaxe das
linguagens de programação. Por exemplo, não é possível representar em uma gramática livre de
contexto uma regra como “Todo identificador deve ser declarado antes de ser usado.“, e a
verificação de que essa regra foi aplicada cabe à análise semântica.
Otimização de Código
O processo de otimização de código consiste em melhorar o código intermediário de tal forma que
o programa objeto resultante seja mais rápido em tempo de execução. Por exemplo, um algoritmo
para geração do código intermediário gera uma instrução para cada operador na árvore sintática,
mesmo que exista uma maneira mais otimizada de realizar o mesmo comando.
Geração de Código
A fase final do compilador é a geração do código para o programa objeto, consistindo
normalmente de código em linguagem assembly ou de código em linguagem de máquina. Aqui é o
processo de construir instruções da linguagem máquina (em assembly, normalmente) que simulam
as instruções reconhecidas pelo analisador sintáctico. A geração de código pode englobar: análise
semântica, geração de código intermédio, otimizadores e geração de código final.
Evolução
Notamos que durante o tempo as linguagens de programação evoluíram devido a necessidade de
eficiência para o programador, pois as linguagens mais primordiais eram bem mistificadas,
quando obtinha-se erros, eram complicado achá-los, também não eram nem um pouco práticas,
devido a cada instrução precisava ser individualmente codificada, entre outras desvantagens.
Com base nas informações anteriores temos as seguintes etapas da evolução das
linguagens de programação:
Linguagem de máquina → Linguagem de montagem → Linguagens de alto nível
A linguagem de máquina é a única que pode ser compreendida pelo computador, o que as
linguagens de alto nível fazem é converter as instruções para a linguagem de máquina através de
compiladores (Programas que transformam linguagens de alto nível em linguagem de máquina). O
código das linguagens de máquina é definido por números binários (0 ou 1).
A linguagem de montagem já vem substituindo os códigos binários por instruções,
símbolos, e endereços. Essa linguagem ficou também conhecida como linguagem simbólica. Um
programa chamado montador, traduz o código em linguagem de máquina.
Já as linguagens de alto nível surgiram melhorando a eficiência da programação. Foram
devidamente projetadas para aliviar o programador dos detalhes da linguagem de montagem. O
processo de conversão de linguagem de alto nível para linguagem de máquina é chamado de
interpretação ou compilação.
Exemplos:
Linguagem de baixo Nível: Assembly
Linguagens De Alto Nível: Basic,Cobol,Pascal,Object-Pascal,Ada,C, C++,C#,Java,
Asp,PHP,Python,Ruby.
Paradigma Funcional
Um programa é considerado uma função matemática, nesse contexto a função é uma caixa preta
que mantem uma lista de entrada para uma de saída. Uma linguagem funcional predefine um
conjunto de funções primitivas que pode ser utilizado por qualquer programador, e permite que
essas funções sejam combinadas para criar novas funções.
Uma linguagem tem duas vantagens sobre uma procedural, ela incentiva a programação modular
e permite que o programador desenvolva novas funções a partir das já existentes, ajudando o
programador a criar programas maiores, e com menos propensões a erros.
Algumas linguagens funcionais:
Lisp
A linguagem lista projetada por uma equipe de programadores MIT (instituto de tecnologia de
massachussets) baseada em processamento de lista.
Sheme
Devido a falta de padronização da Lisp, havia diferentes versões então , a Sheme veio e definiu
um conjunto de funções primitivas que resolvem problemas. O nome da função e a lista de entrada
da função são limitados entre parênteses. O resultado é uma lista de saída que pode ser utilizada
como uma de entrada para outras funções.
Paradigma declarativo
Utiliza o principio do raciocínio logico para responder a consultas, tem como base a logica formal
definida por matemáticos gregos e posteriormente desenvolvida no calculo de predicados de
primeira ordem.
O raciocínio logico é fundamentado em dedução, a partir de fatos que assumimos serem
verdadeiros, utilizamos regras solidas de raciocínio para deduzir novos fatos.
Exemplo: se A é igual a B e B é igual a C, então A é igual a C .
Um problema associado com as linguagens declarativas é que um programa é especifico para um
domínio particular, pois a coleta de todos os fatos em um programa o torna imenso. Por isso a
programação declarativa é limitada a campos específicos , como a inteligência artificial.
Umas das famosas linguagens declarativas é chamada prolog (programação em logica), um
programa em prolog é composto de fatos e regras.
Paradigmas da Computação
- Procedural : É um agente ativo que manipula um agente passivo, ou seja um agente passivo
não pode iniciar uma ação por si mesmo, mas pode receber ações de agentes. Em um programa
procedural podemos chamar de agente ativo o que utiliza de objetos (dados/itens) que serão
armazenados no computador e depois um programa o utiliza como ferramenta.Para manipular os
dados o programa executa uma ação, chamada procedimento. Por exemplo,o programa que
apresenta(imprime) o conteúdo de um arquivo, para ser impresso o arquivo precisa ser
anteriormente armazenado na memória. Para imprimir um arquivo, o programa utiliza um
procedimento, que podemos chamar de imprimeArquivos.Esse procedimento geralmente é
escrito anteriormente para incluir todas as ações exigidas para informar ao computador como
imprimir cada caracter do arquivo O programa invoca (chama) o procedimento imprimeArquivo,
em um paradigma procedural , o arquivo e o procedimento(imprimeArquivo) são entidades
completamente separadas. O arquivo é uma entidade independente que pode receber a ação de
imprimir ou algumas outras ações, como deletar, copiar e assim por diante. Para aplicar qualquer
uma dessas ações ao arquivo precisamos de um procedimento para agir sobre o arquivo. O
procedimento imprimeArquivo(ou copiaArquivo ou deletaArquivo) é uma entidade separada para
que já foi escrita, e o programa somente invoca (aciona).
Para evitar escrever um novo procedimento cada vez que precisamos imprimir (mostrar) um
arquivo, podemos escrever um procedimento geral que possibilita imprimir (mostrar) qualquer
arquivo. Quando escrevemos, todas as referencias ao nome do arquivo são substituídas por um
símbolo, tal como F ou FILE, ou algum outro. Quando o procedimento é chamado (invocado),
informamos o nome do arquivo real a ser impresso (mostrado), de modo que podemos escrever
apenas uma vez o procedimento e adiciona-lo (invoca-lo) duas vezes no programa, a fim de
imprimir dois arquivos diferentes.
Precisamos separar o procedimento de seu acionamento pelo programa, pois o programa não
define o procedimento, somente o inicia ou aciona, e este já deve existir. Quando utilizamos uma
linguagem procedural de alto nível, o programa consiste em nada além de inúmeras chamadas
de procedimentos, embora isso não seja imediatamente óbvio, mesmo quando utilizamos um
simples operador matemático, estamos acionando um procedimento que já foi escrito
anteriormente.
Exemplo: Quando utilizamos a expressão A+B e esperamos que ela adicione os valores de dois
“arquivos”, A e B, neste momento estamos acionando o procedimento adiciona e transmitindo-lhe
o nome desses dois arquivos. O procedimento adiciona, precisa de dois arquivos para poder agir,
esse procedimento foi escrito pelo projetista da linguagem e nós apenas o acionamos.
O jeito mais simples de compreender o conceito de paradigma procedural é pensar na relação
entre o procedimento e os objetos sobre os quais ele vai atuar. O Programa procedural é
composto três partes:
- criação do objeto
-conjunto de chamadas de procedimentos e objetos
-conjunto de códigos para cada procedimento
Algumas linguagens procedurais (linguagens imperativas):
1 –Fortran
Foi a primeira linguagem de alto nível , e durante os últimos 40 anos, passou por várias
versões:Fortran,FortranII,FortranIV,Fortran 77, Fortran 99 e Fortran de alto desempenho(HPF).
A Fortran é uma linguagem ideal para aplicações cientificas e de engenharia, devido a alguns
recursos que possui. Esses recursos podem ser resumidos em:-Aritmética de alta precisão,
Capacidade de manipular números complexos, Cálculo de exponenciação
2 –Cobol
A linguagem do Cobol tinha como objetivo ser utilizada como uma linguagem para negócio , pois
possui recursos específicos diferente do que se é utilizado na área de engenharia, ou seja: -Uma
linguagem de rápido acesso aos arquivos e banco de dados, rápida atualização, grande
quantidade de relatórios gerados, e uma saída formatada de forma simplificada ao usuário.
3-Pascal
A linguagem foi programada com o objetivo especifico de ensinar programação, enfatizando a
programação estruturada, mas nunca atuou na área industrial da programação.
4 –C
A linguagem foi originalmente destinada a escrever sistemas operacionais e software de sistema,
posteriormente tornou-se popular entre programadores, pois, tem todas as instruções de alto
nível que uma linguagem de programação deve ter , oculta do programador os detalhes de
hardware, tendo também algumas instruções de baixo nível que permite melhor acesso e é mais
próxima da linguagem de montagem de qualquer outra linguagem de alto nível.
5 –Ada
A linguagem ADA foi criada para o ministério da defesa dos estados unidos com a finalidade de
ser a linguagem uniformemente utilizada por todas as companhias contratadas por este
ministério, pois tem instruções que possibilitam o processamento em tempo real , oque a torna
adequada para o controle de processos ,tem a capacidade também e paralelo de ser executada
em computadores mainframe com múltiplos processadores.
Orientado a objetos
Trabalha com objetos ativos em vez de passivos, ou seja as ações serão realizadas sobre esses
objetos recebendo um estimulo externo apropriado para realiza-la , podendo ser agrupado com
todos os procedimentos. O programa apenas envia a solicitação correspondente para o objeto
realizar uma tarefa, assim o programa imprime , copia e em seguida é deletado.
O programa apenas envia o estimulo necessário para os objetos ativos e o arquivo será
impresso,copiado ou deletado.
O conceito baseia-se em métodos compartilhados por todos os objetos do mesmo tipo, se o
programa quiser imprimir envia o estímulo necessário para os objetos ativos e o arquivo será
impresso, comparando o paradigma procedural com o orientado, veremos que no procedural são
partes independentes , já no orientado os métodos pertencem ao objeto.
Classes
Os objetos do mesmo tipo precisam de um conjunto de métodos que utilizam da unidade
chamada classe para criar novos métodos que mostram como o objeto reage a diferentes
estímulos. Para criar esses métodos as linguagens utilizam uma unidade chamada classe.
Métodos
Cada método tem seu cabeçalho , suas variáveis e seus comandos, ou seja, em maioria tudo
oque já foi discutido em relação as linguagens procedurais se aplica aos objetos escritos para um
programa orientado aos objetos, podendo assim se afirmar, que as linguagens orientada aos
objetos são a extensão das procedurais, com algumas novas ideias e recursos, a linguagem C++
por exemplo, é uma extensão da linguagem C.
Herança
Quando uma classe geral é definida podemos estabelecer uma parte mais especifica , que herda
uma característica daquela, mas, também tem algumas novas. Ou seja, herança é uma
subclasse da geral com características adicionais.
Poliformismo
No paradigma orientado podemos definir várias operações com o mesmo nome, que podem
fazer diferentes coisas em classes relacionadas, ou seja, fazemos operações parecidas , porem
distintas em uma mesma classe.
Algumas linguagens orientadas a objetos :
C++
Foi desenvolvida a partir da “C”, utiliza das classes para definir características de objetos
similares, e operações, funções, ou métodos que podem ser aplicadas a elas .
Dois princípios utilizados na linguagem C++ : Herança , Poliformismo.
Java
Foi desenvolvida para ser uma linguagem mais robusta também baseada em “C”, mas, mais
característica de “C++”, totalmente orientada a classes todos os itens de dados, pertencem a
uma classe. Em Java, um programa pode ser uma aplicação, ou seja, um programa que pode ser
executado independente. Mas, em contra partida é um HTML embutido, armazenado em um
servidor e executado por um servidor.um programa de aplicação é um conjunto de classes e
instancias , ou seja, uma biblioteca de classes.
Uma característica interessante é o suporte multhread , o thread é uma sequencia de ações executadas uma depois da outra, ou seja, possibilita uma execução simultânea de varias linhas de códigos, diferente da C++ que permite somente um thread simples, isto é, o programa todo é executado como uma thread única de processo.
Conceitos Comuns
Identificadores
São nomes escolhidos para representar constantes, variáveis, tipos, funções, procedimentos, unidades, programas e campos de um registro. Ou seja, nome de um local onde se pode colocar qualquer valor do conjunto de valores possíveis de um tipo associado. Usado para manipular todas as dadas variáveis do algoritmo. Pode também ser usado para rotular valores constantes (ex: uso do identificador pi para representar o valor constante 3.14).
(1º) Não pode ser iniciado com um dígito numérico;
(2º) Não pode conter espaços em branco nem símbolos especiais, exceto o sublinha (underline);
(3º) Não pode ser uma palavra reservada;
Tipos de Dados
O tipo de uma variável define os valores que ela pode assumir e as operações que podem ser realizadas com ela.
Tipos de Dados Simples
a) Inteiro (INTEGER) : Representa números entre -32768 até +32767. Ocupa 2 bytes na memória;
b) Real (REAL): Representa os números entre 2.9 x 10 -39 até 1.7 x 1038. Ocupa 6 bytes na memória;
c) Caractere (CHAR) Representa um dos caracteres, da tabela ASCII. Ocupa 1 byte na memória;
d) Lógica (BOOLEAN): Valor lógico. Assuma somente dois valores: TRUE(Verdade) ou FALSE(Falso). Ocupa 1 byte na memória;
e) String: apresenta uma ou mais unidades literais (no máximo 255). Por convenção, deve-se representar esse tipo entre aspas simples. Ex: „a‟, „a1b343‟, „teste@gmail.com‟, „João da Silva‟. Nos algoritmos esse tipo é descrito como string. Também pode ter tamanho pré-definido, nesse caso, string[10], por exemplo, permite no máximo 10 caracteres, e não 255.
Tipos de Dados Compostos
Além dos tipos predefinidos da linguagem Pascal, existe a possibilidade de se definir outros tipos com estrutura própria, chamados de Tipos Estruturados, a partir do comando TYPE na área de declarações, utilizando alguns dos tipos estruturados predefinidos no Pascal como: Array, Record, File, Set e Pointer, ou seja, Matrizes, Registros, Arquivos, Conjuntos e Ponteiros.
Variaveis
Variáveis e constantes, são espaços reservados na memória ram do computador para guardar informações que serão utilizadas durante o código do programa. Podem ter valores de diversos tamanhos e tipos, tais como números inteiros, números reais, caracteres, frases, enfim, diversas coisas.
Uma variável é formada por uma letra ou então por uma letra seguida de letras ou dígitos, em qualquer número. Não é permitido o uso de espaços em branco ou de qualquer outro caractere, que não seja letra ou dígito, na formação de um identificador. Na formação do nome da variável de um nome significativo, para que se possa ter ideia do seu conteúdo sem abri-la. Se utilizar palavras para compor o nome da variável utilize o “_ ” underline para separar as palavras. As variáveis podem modificar durante a execução do programa.
Literais
Os literais são maneiras de especificar constantes na linguagem. Para garantir que uma constante é realmente de certo tipo, podemos colocar um sufixo para indicar o tipo.
Constantes
Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa, ou seja, não variam no decorrer do algoritmo. Conforme o seu tipo, a constante é classificada como sendo numérica lógica ou literal. A declaração de constantes deve ser feita antes da declaração das variáveis.
Entrada e Saída de Dados
Todo o programa necessita de ler e escrever dados, essas instruções podem ser complicadas ou simples. A maioria das linguagens de programação, sempre utiliza uma função predefinida para entrada e saída.
Entrada
A entrada de dados e feita por comandos predefinidos ou funções. Existem milhares de funções de entrada de dados. Um exemplo é uma função que lê dado a partir do teclado e armazena em uma variável.
Saída
A saída de dados é usa mesmo método, ou seja, funções predefinidas e comandos. Um exemplo de saída de dados é um comando que possa imprimir certo texto.
Expressões
Uma Expressão é similar a uma equação matemática, na qual um conjunto de operandos, que podem ser variáveis e/ou constantes, interage com operadores resultando num único valor. Do ponto de vista do Pascal, uma expressão pode resultar um dado de qualquer tipo predefinido; portanto, se uma expressão resulta um valor numérico, é denominada Expressão Aritmética; se resulta um valor lógico é denominada Expressão Lógica e, se manipula ou resulta uma string ou caracter é denominada Expressão Alfanumérica.
Operadores
Operadores são usados para fazer cálculos, atribuir valores a variáveis, teste de igualdade ou operador de desigualdade e executar outras operações.
Operadores aritméticos
É utilizada na maioria das linguagens, a tabela mostra exemplos de operadores aritméticos.
.
Operadores Relacionais
Operadores relacionais são usados para comparar e verificar se o valor é maior, menor ou igual a outro. O resultadosemprevaiser do tipobooleano.
Operadores lógicos
A Negação (não), a Conjunção (e) e a Disjunção (ou) são consideradas as três operações fundamentais da lógica computacional, são do tipo booleano.
Comandos de Controle
Um conjunto de comandos executados em uma sequência, numa linguagem procedural, constitui
um programa. Mas em certos casos é necessário modificar esta ordem para , por exemplo, para
repetir um comando.
Para tal, recomenda-se o uso de três construções já conhecidas, sequência, seleção e
repetição. A maioria das linguagens conhecidas usam os comandos que determinam a decisão
por dois caminhos(if-else), e por vários caminhos(switch-case). Já as de repetições ou laço são:
while, do, for. Sendo que todas elas podem ser simuladas utilizando o while.
Variáveis Locais
O programa ou subprograma as utiliza e as destrói somente em sua utilização, sendo que as
mesmas podem ser utilizadas em outros subprogramas.
Variável Global
Uma variável global é uma variável acessível em todos os escopos de um programa de
computador. O mecanismo de interação com variáveis globais é chamada ambiente global. Em
contraste o ambiente local é um mecanismo no qual as variáveis são locais e sem memória
compartilhada.
O uso de variáveis globais é geralmente considerado inadequado pois seu conteúdo pode ser
potencialmente modificado de qualquer local, e qualquer parte de um código pode depender dela.
A técnica possui o potencial de criar dependências mútuas, o que aumenta a complexidade e
dificuldade de leitura de um código. Entretanto, para alguns casos seu uso pode ser adequado;
um exemplo é a passagem frequente de variáveis continuamente por diversas funções.
Parâmetros
Quando se deseja escrever um subprograma que seja o mais genérico possível, deve-se usar a
passagem de parâmetros. A passagem de parâmetros formaliza a comunicação entre os
módulos. Além disto, permite que um módulo seja utilizado com operandos diferentes,
dependendo do que se deseja do mesmo. Dá-se a designação de parâmetro real ou de chamada
ao objeto utilizado na unidade chamadora/ativadora, e de parâmetro formal ou de definição ao
recebido como parâmetro no subprograma. Dentre os modos de passagem de parâmetros,
destacasse a passagem por valor e a passagem por referência.
Referências
FOROUZAN, Behrouz; MOSHARRAF, Firouz. Fundamentos da Ciência da Computação,
tradução da 2ª edição internacional.
http://wwwusers.rdc.puc-rio.br/rmano/processo.html
http://www.dcc.fc.up.pt/~nam/aulas/0001/ic/slides/sliic0018/node3.html
http://gec.di.uminho.pt/discip/TextoAC/cap1.html
http://www.dcc.fc.up.pt/~nam/aulas/0001/ic/slides/sliic0018/node4.html
http://www.oficinadanet.com.br/artigo/1527/diferencas_entre_compiladores_e_interpretad
ores - http://angela-santana.zip.net/ - http://www.cin.ufpe.br/~pftbm/apostila-LFeC-II.pdf
Recommended