Você está na página 1de 19

APÊNDICE A

ESPECIFICAÇÕES DA LINGUAGEM
ALGORÍTMICA UPSAM 2.0

SUMÁRIO

A.1 Elementos da linguagem A.6 Arquivos


A.2 Operadores A.7 Variáveis dinâmicas
A.3 Estrutura de um programa A.8 Programação orientada a objetos
A.4 Estruturas de controle A.9 Conjuntos de palavras reservadas e símbolos
A.5 Programação modular reservados

A.1 ELEMENTOS DA LINGUAGEM

A.1.1 Identificadores
Podem ser formados com qualquer caractere alfabético regional (não necessariamente ASCII padrão), dígitos
(0-9) e o símbolo de sublinhado (_), devendo começar sempre por um caractere alfabético. Os nomes dos iden-
tificadores são sensíveis a maiúsculas e recomendamos que seu comprimento não ultrapasse os 50 caracteres.

A.1.2 Comentários
Existem dois tipos de comentários. Comentários somente de uma linha utilizarão barra dupla inclinada (//);
este símbolo servirá para ignorar tudo o que apareça até o final da linha. Comentários multilinha poderão
ocupar mais de uma linha utilizando os caracteres { e }, que indicarão respectivamente o início e o final do
comentário. Todos os caracteres incluídos entre esses dois símbolos serão ignorados.

A.1.3 Tipos de dados padrão

Dados numéricos
• Inteiros. Consideramos inteiro qualquer valor numérico sem parte decimal, independentemente de sua
grandeza. Para a declaração de um tipo de dado inteiro, utilizamos a palavra reservada inteiro.
• Reais. Consideramos real qualquer valor numérico com parte decimal, independentemente de uma gran-
deza ou precisão. Para a declaração de um tipo de dado real, utilizamos a palavra reservada real.

mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

Dados lógicos
Utilizamos a palavra reservada lógico em sua declaração.

Dados de tipo caractere


Utilizamos a palavra reservada caractere em sua declaração.

Dados de tipo cadeia


Utilizamos a palavra reservada cadeia em sua declaração. A não ser que indiquemos o contrário, conside-
ram-se cadeias de comprimento variável. As cadeias de caracteres são consideradas como um tipo de dado
padrão, mas estruturado (poderá ser considerado como um array de caracteres).

A.1.4 Constantes de tipos de dados padrão

Numéricas inteiras
São compostas pelos dígitos (0...9) e os sinais + e – utilizados como prefixos.

Numéricas reais
Os números reais em vírgula fixa utilizam o ponto como separador decimal, além dos dígitos (0...9), e o
caractere de sinais (+ e –). Nos reais em vírgula flutuante, a matriz poderá utilizar os dígitos (0...9), o carac-
tere de sinais (+ e –) e o ponto decimal (.). O expoente irá separar-se da matriz mediante a letra E e a matriz
estará formada pelo caractere de sinais e os dígitos.

Lógicas
Somente poderão conter os valores verdade (verdadeiro) e falso.

De caractere
Qualquer caractere válido do conjunto de caracteres utilizado, delimitados por separadores ‘ ou “.

De cadeia
Seqüência de caracteres válidos do conjunto de caracteres utilizados, delimitados pelos separadores ‘ ou “.

A.2 OPERADORES

Operadores aritméticos

Operador Significado

- Menos unitário
- Subtração
+ Mais unitário (soma)
* Multiplicação
/ Divisão real
div Divisão inteira
mod Resto da divisão inteira
** Exponencial
Especificações da linguagem algorítmica UPSAM 2.0mm

O tipo de dado de uma expressão aritmética depende do tipo de dado dos operandos e do operador. Com os
operadores +, -, * e ^, o resultado será inteiro se os operandos forem inteiros. Se algum dos operandos for real,
o resultado será de tipo real. A divisão real (/) devolve sempre um resultado real. Os operadores mod e div
devolvem sempre um resultado tipo inteiro.

Operadores de relação

Operador Significado

= Igual a
< Menor que
> Maior que
<= Menor que ou igual a
>= Maior que ou igual a
< > Diferente de

Os operandos devem ser do mesmo tipo e o resultado será de tipo lógico.

Operadores lógicos

Operador Significado

não Negação lógica


e Multiplicação lógica (verdadeiro se os dois operandos forem verdadeiros)
ou Soma lógica (verdadeiro se algum dos operando for verdadeiro)

Os operandos devem ser de tipo lógico e devolvem um operando do mesmo tipo.

Operadores de cadeia

Operador Significado

+ Concatenação de cadeias
& Concatenação de cadeias

Trabalham com operandos do tipo cadeia ou caractere e o resultado sempre será de tipo cadeia.

Prioridade básica de operadores


Primários ( ) [ ] Parênteses em expressões ou em chamadas a procedimentos ou funções. Colchetes em
índices de arrays.
Unitário -, +, não
Multiplicativos *, /, div, mod, e Exponencial **
Aditivos +, -, ou
De cadeia &, +
De relação =, <, >, <=, >=, <>

Prioridade avançada de operadores1


Os operadores são mostrados em ordem decrescente de prioridade de cima para baixo. Os operadores do
mesmo grupo têm a mesma prioridade (precedência) e são executados da esquerda para a direita ou da direi-
ta para a esquerda de acordo com a associatividade.

1
  Essas regras de prioridade se ajustam a linguagens de programação modernas como C++, Java ou C#.
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

Operador Significado Associatividade

( ) Parênteses Dir-Esq
( ) Chamada à função Dir-Esq
[ ] Subíndice Dir-Esq
. Acesso a membros de um objeto Dir-Esq

+ + Prefixo incremento Dir-Esq


- - Prefixo decremento Dir-Esq

+ Mais unitário Dir-Esq


- Menos unitário Dir-Esq
! Negação lógica unitária Dir-Esq
~ Complemento bit a bit unitário Dir-Esq
(tipo) Modelo unitário Dir-Esq
novo (new) Criação de objetos Dir-Esq

* Produto Esq-Dir
/ Divisão Esq-Dir
% Porcentagem Esq-Dir
+ Soma Esq-Dir
- Subtração Esq-Dir

<< Deslocamento bit a bit para a esquerda Dir-Esq


>> Deslocamento bit a bit para a direita com extensão de sinal Dir-Esq
>>> Deslocamento bit a bit para a direita enchendo com zeros Dir-Esq

< Menor que Esq-Dir


<= Menor que ou igual a Esq-Dir
> Maior que Esq-Dir
>= Maior que ou igual a Esq-Dir
instância_de
(instance_of) Verificação de tipo de objeto Esq-Dir

= = Igualdade Esq-Dir


! = Desigualdade Esq-Dir

& AND (Y) bit a bit Esq-Dir

^ OR (ou) exclusivo bit a bit Esq-Dir

| OR (ou) inclusivo bit a bit Esq-Dir

&& AND (E) lógico Esq-Dir

|| OR (ou) lógico Esq-Dir

?: Condicional ternário Dir-Esq

= Atribuição Dir-Esq
+= Atribuição de soma Dir-Esq
-= Atribuição de subtração Dir-Esq
*= Atribuição de produto Dir-Esq
/= Atribuição de divisão Dir-Esq
% = Atribuição de módulo Dir-Esq
& = Atribuição AND bit a bit Dir-Esq

(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm

(continuação)

Operador Significado Associatividade

^= Atribuição OR exclusive bit a bit Dir-Esq


|= Atribuição OR inclusive bit a bit Dir-Esq
<<= Atribuição de deslocamento para a esquerda bit a bit Dir-Esq
>>= Deslocamento direito bit a bit com atribuição de extensão de sinal Dir-Esq
>>>= Deslocamento direito bit a bit com atribuição de extensão a zero Dir-Esq

A.3 ESTRUTURA DE UM PROGRAMA


algoritmo <nome_do_algoritmo>
//Seções de declarações
[const
//declarações de constantes]
[tipos
//declarações de tipos]
[var
//declarações de variáveis]
//Corpo do programa
início
...
fim

A.3.1 Declarações de tipos de dados estruturados

Arrays

array[<dimensão>...] de <tipo_de_dado> : <nome_de_tipo>

<dimensão> é um subintervalo com o índice do limite inferior e o limite superior. Por exemplo, array
[5..20] de inteiro declararia um array de 16 elementos inteiros. Podem aparecer vários separadores por
vírgulas para declarar arrays de mais de uma dimensão.
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que será utilizado para referenciar o tipo de dado.
O acesso a um elemento de um array se realizará indicando-se seu índice entre colchetes. O índice será
uma expressão inteira.

Registros
registro : <nome_de_tipo>
<tipo_de_dado> : <nome_do_campo>
...
fim_registro

<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.


<nome_do_tipo> é um identificador válido que se utilizará para referenciar o tipo de dado.
<nome_do_campo> é um identificador válido que se utilizará para referenciar o campo do registro.
O acesso a um campo de uma variável de tipo registro será realizado utilizando-se o caractere ponto (.),
por exemplo, MeuRegistro.MeuCampo.
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

Arquivos seqüenciais
arquivo_s de <tipo_de_dado> : <nome_do_tipo>
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que se utilizará para referenciar o tipo de dado.

Arquivos diretos
arquivo_s de <tipo_de_dado> : <nome_do_tipo>
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que se utilizará para referenciar o tipo de dado.

A.3.2 Declaração de constantes


É realizada dentro da seção de declarações de constantes.
<nome_de_constante> = <expressão>
<nome_de_constante> é um identificador válido que se utilizará para referenciar a constante.
<expressão> é uma expressão válida. O tipo da constante será o tipo de dado que a expressão devolve.

A.3.3 Declaração de variáveis


É realizada dentro da seção de declarações de variáveis.
<tipo_de_dado> : <nome_de _variáveis> [= <expressão>]...
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_de_variável> é um identificador válido que se utilizará para referenciar a variável. Em uma
declaração é possível declarar várias variáveis separadas por vírgulas.
É possível inicializar a variável na declaração, <expressão> é uma expressão válida do tipo de dado da
variável.

A.3.4 Biblioteca de funções

Funções aritméticas

Função Significado
abs(x) Devolve o valor absoluto da expressão numérica x.
aleatório( ) Devolve um número aleatório real maior que ou igual a 0 e menor que 1.
arctan(x) Devolve o arco tangente de x.
cos(x) Devolve o cosseno de x.
inteiro(x) Devolve o primeiro valor inteiro menor que a expressão numérica x.
exp(x) Devolve o valor ex.
1n(x) Devolve o logaritmo neperiano de x.
log10(x) Devolve o logaritmo em base 10 de x.
raiz2(x) Devolve a raiz quadrada de x.
sen(x) Devolve o seno de x.
trunc(x) Trunca (elimina os decimais) da expressão numérica x.

Funções de cadeia

Função Significado
comprimento(c) Devolve o número de caracteres da cadeia c.
posição(c, sc) Devolve a posição da primeira aparição da subcadeia sc na cadeia.
subcadeia(c, ini[, long]) Devolve uma subcadeia da cadeia c formada por todos os caracteres a partir
da posição ini. Incluindo-se o argumento long, devolve só os primeiros
long caracteres a partir da posição ini.
Especificações da linguagem algorítmica UPSAM 2.0mm

Funções de conversação de número da cadeia

Função Significado

código(car) Devolve o código ASCII de um caractere car.


caractere(x) Devolve o caractere correspondente ao código ASCII x.
valor(©) Converte a cadeia c em um valor numérico. Caso o conteúdo da cadeia c não possa converter-se em
um valor numérico (contém caracteres alfabéticos, sinais de pontuação inválidos etc.), devolve 0.
cadeia(x) Converte a cadeia o valor numérico x.

Funções de informação

Função Significado

tamanho_de(<variável>) Devolve o tamanho em bytes da variável.

A.3.5 Procedimentos de entrada e saída


ler(<lista_de_variáveis>) lê uma ou mais variáveis do teclado do sistema.
escrever(<lista _de_ expressões>) escreve uma ou mais expressões no console do sistema.

A.3.6 Instrução de atribuição


<variável> ← <expressão>

Primeiro avalia o valor da expressão e o atribui à variável. A variável e a expressão devem ser do mesmo
tipo de dado.

A.4 ESTRUTURAS DE CONTROLE

A.4.1 Estruturas seletivas

Estrutura seletiva simples e dupla


se <expressão_lógica> então
<ações>
[se_não
<ações>]
fim_se

Estrutura seletiva múltipla


conforme_seja <expressão> fazer
<lista_de_valores> : <ações>
...
[se_não
<ações>
fim_conforme
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

<expressão> pode ser qualquer expressão válida.


<lista_de_valores> será um ou mais valores separados por vírgulas do mesmo tipo que <expressão>.
A estrutura verifica se o valor da expressão coincide com alguns dos valores da primeira lista de valores, se isso
ocorre, realiza as ações correspondentes e o fluxo de controle sai da estrutura; caso contrário, avalia a lista
seguinte. As ações da cláusula se_não serão executadas se nenhum valor coincidir com a <expressão>.

A.4.2 Estruturas repetitivas


Estrutura enquanto
enquanto <expressão_lógica> fazer
<ações>
fim_enquanto

Estrutura repetir
repetir
<ações>
até_que <expressão_lógica>

Estrutura desde
desde <variável> ← <valor_inicial> até <valor_final>
[incremento | decremento <valor_incremento>] fazer
<ações>
fim_desde

<variável> pode ser qualquer variável cujo valor possa ser incrementado ou decomposto, ou seja, todas
as numéricas, as de tipo caractere e as lógicas.
<valor_inicial> é uma expressão com o primeiro valor que a variável do laço recebe. Deve ser do
mesmo tipo que a variável do laço.
<valor_final> é uma expressão com o último valor que a variável do laço recebe. Deve ser do mesmo
tipo que a variável do laço. O laço finaliza quando a variável recebe um valor maior que esse valor inicial.
<valor_incremento> é uma expressão com o valor no qual se irá incrementar ou decompor a variável
do laço ao final de cada iteração.

A.5 PROGRAMAÇÃO MODULAR

A.5.1 Questões gerais


O escopo das variáveis declaradas dentro de um módulo (procedimento ou função) é local, e o tempo de vida
dessa variável será o tempo de execução do módulo.

A.5.2 Procedimentos
Declaração
procedimento <nome_procedimento> ([<lista_parâmetros_formais>])
[declarações locais]
início
...
fim_procedimento
Especificações da linguagem algorítmica UPSAM 2.0mm

<nome_procedimento> deve ser um identificador válido.


<lista_parâmetros_formais> são um ou mais grupos de parâmetros separados por ponto-e-vírgula.
Cada grupo de argumentos se define da seguinte forma:

{E | E/S} <tipo_de_dado> : lista_de_parâmetros>

E indica que a passagem de parâmetro se realiza por valor.


E/S indica que a passagem de parâmetro se realiza por referência.
<tipo_de_dado> é um tipo de dado padrão ou definido previamente pelo usuário.
<lista_de_parâmetros> é um ou mais identificadores válidos separados por vírgulas.

Chamada a procedimentos
[chamar_a] <nome_procedimento>([<lista_parâmetros_atuais>])

A lista de parâmetros atuais pode ser uma ou várias variáveis ou expressões separadas por vírgulas que
devem coincidir em número, ordem e tipo com a lista de parâmetros formais da declaração.

A.5.3 Funções

Declaração
<tipo_de_dado> :função < nome_função>([<lista_parâmetros_formais>])
[declarações locais]
início
...
devolver(<expressão>)
fim_função

<tipo_de_dado> é um tipo de dado padrão ou definido previamente pelo usuário. Trata-se do tipo de
dado que devolve a função.
<nome_função> deve ser um identificador válido.
<lista_parâmetros_formais> pode ser um ou mais grupos de parâmetros separados pelo ponto-e-
vírgula. Cada grupo de argumentos se define da seguinte forma:

{E | E/S} <tipo_de_dado> : <lista_de_parâmetros>

E indica a passagem de parâmetros realizada por valor.


E/S indica a passagem de parâmetros realizada por referência.
<tipo_de_dado> é um tipo de dado padrão ou definido previamente pelo usuário.
<lista_de_parâmetros> pode ser um ou mais identificadores válidos separados por vírgulas.
<expressão> é o valor de retorno da função. Deve coincidir com o tipo de dado da declaração.

Chamada a funções
<nome_função>([<lista_parâmetros_atuais>])

A lista de parâmetros atuais é uma ou várias variáveis ou expressões separadas por vírgulas que devem
coincidir em número, ordem e tipo com a lista de parâmetros formais da declaração. Devolvendo um valor e
não existindo funções que não devolvem valores (funções void de C ou Java), a chamada deve ser sempre
feita dentro de uma expressão.
10mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

A.6 ARQUIVOS

A.6.1 Arquivos seqüenciais

Abertura do arquivo
abrir(<variável_tipo_arquivo,<modo_abertura>,<nome_arquivo>)

<var_tipo_arquivo> é uma variável do tipo arquivo seqüencial.


<modo_abertura> indica o tipo de operação que será realizada com o arquivo. No caso de arquivos
seqüenciais será:
• leitura, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
leitura. O arquivo deve existir previamente.
• escrita, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
escrita. Se o arquivo não existe, primeiro cria um arquivo vazio. Se o arquivo existe, subrescreve os dados
que contém.
• acrescentar, coloca o ponteiro no registro seguinte, na marca de final de arquivo e somente realiza
operações de escrita.

<nome_arquivos> é uma expressão de cadeia com o nome que o sistema dará ao arquivo.

Fechamento de arquivo
fechar(<lista_variáveis_tipo_arquivo>)

Fecha o arquivo ou arquivos abertos previamente.

Entrada/saída
ler(<variável_tipo_arquivo>, <variável>

Ler do arquivo aberto para leitura representado por <variável_tipo_arquivo> o registro seguinte.
O tipo da variável deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.

escrever(<variável_tipo_arquivo>, <expressão>)

Escreve o valor da expressão no arquivo aberto para escritura e representado pela variável de tipo arquivo.
O tipo da expressão deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.

A.6.2 Arquivos de texto


Considera-se o arquivo de texto como um tipo especial de arquivo composto de caracteres ou cadeias. A
declaração de um tipo de dado de tipo arquivo de texto seria, portanto:

arquivo_s de caractere : <nome_tipo>


arquivo_s de cadeia : <nome_tipo>

A leitura de um caractere único em um arquivo de texto pode ser feita da forma escrever(<variável_
tipo_caractere>) que leria o caractere seguinte do arquivo. A leitura de uma variável de tipo cadeia
(ler(<variável_tipo_cadeia>)) leria todos os caracteres até o final da linha.
A escrita de dados em um arquivo de texto também poderá ser feita caractere por caractere (escrever
(<variável_tipo_caractere>)) ou linha por linha (escrever (<variável_tipo_cadeia>)).
Especificações da linguagem algorítmica UPSAM 2.0mm11

A detecção do final da linha em um arquivo de texto quando lemos caractere por caractere será efetuada
com a função fdl:

fdl(<variável_tipo_arquivo>)

A função fdl devolve o valor lógico verdade se o último caractere lido é o caractere de fim de linha.

A.6.3 Arquivos diretos

Abertura do arquivo
abrir(<variável_tipo_arquivo,<modo_abertura>,<nome_arquivo>)

<var_tipo_arquivo> é uma variável de tipo arquivo direto.


<modo_abertura> indica o tipo de operação que será realizada com o arquivo. No caso de arquivos
diretos, será:

• leitura, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
leitura. O arquivo deve existir previamente.
• escrita, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
escrita. Se o arquivo não existe, primeiro cria um arquivo vazio. Se o arquivo existe, sobrescreve os
dados que contém.
• leitura/escrita, coloca o ponteiro no começo do arquivo e permite operações tanto de leitura como
de escrita.

<nome_arquivo> é uma expressão de cadeia com o nome que o sistema dará ao arquivo.

Fechamento do arquivo

fechar(<lista_variáveis_tipo_arquivo>)

Fecha o arquivo ou arquivos abertos previamente.

Acesso seqüencial
ler(<variável_tipo_arquivo>, <variável>)

Ler do arquivo aberto para leitura representado por <variável_tipo_arquivo> o registro seguinte.
O tipo da variável deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.

escrever(<variável_tipo_arquivo>, <expressão>)

Escreve o valor da expressão no arquivo aberto para escrita e representado pela variável de tipo arquivo.
O tipo da expressão deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.

Acesso direto
ler(<variável_tipo_arquivo>, <posição>, <variável>)

Lê o registro situado na posição relativa <posição> e guarda seu conteúdo na variável.

escrever(<variável_tipo_arquivo>, <posição>, <variável>)

Escreve o conteúdo da variável na posição relativa <posição>.


12mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

A.6.4 Considerações adicionais

Detecção do final do arquivo


Ao fechar um arquivo aberto para escrita, colocamos depois do último registro a marca de fim de arquivo.
A função fda permite detectar se chegamos a tal marca.

fda(<variável_tipo_arquivo>)

Devolve o valor lógico verdade quando tentamos fazer uma leitura seqüencial depois do último registro.

Determinar o tamanho do arquivo


A função lda devolve o número de bytes do arquivo.

lda(<nome_arquivo>)

<nome_arquivo> é o nome do arquivo físico.


Para determinar o número de registros de um arquivo, pode ser utilizada a expressão:

lda(<nome_arquivo>) / tamanho_de(<tipo_base_arquivo>)

Outros procedimentos
apagar(<nome_arquivo>)

Elimina do disco o arquivo representado pela expressão de cadeia <nome_arquivo>. O arquivo deve
estar fechado.

renomear(<nome_arquivo>,<novo_nome>)

Muda o nome do arquivo <nome_arquivo> pelo de <novo_nome>. O arquivo deve estar fechado.

A.7 VARIÁVEIS DINÂMICAS

Declaração de tipos de dados dinâmicos


ponteiro_a <tipo_de_dado> : <nome_do_tipo>

Declara o tipo de dado <nome_do_tipo> como um ponteiro a variáveis de tipo <tipo_de_dado>.

O valor constante nulo indica uma referência a um ponteiro nulo.

Referência ao conteúdo de uma variável dinâmica


<variável_dinâmica>↑

Nomeação e liberação de memória com variáveis dinâmicas


reservar(<variável_dinâmica>)

Reserva espaço na memória para uma variável do tipo de dado do ponteiro e faz com que a variável dinâ-
mica aponte esta zona.

liberar(<variável_dinâmica>)

Libera o espaço de memória apontado pela variável dinâmica. Essa variável fica com um valor indeterminado.
Especificações da linguagem algorítmica UPSAM 2.0mm13

A.8 PROGRAMAÇÃO ORIENTADA A OBJETOS

A.8.1 Classes e objetos

Declaração de uma classe


classe <nome_de_classe>
//Declaração de atributos
//Declaração de construtores e métodos
fim_classe

<nome_de_classe> é um identificador válido.

Declaração de tipos de referências


<nome_de_classe> : <nome_de_referência>

<nome_de_classe> é o nome de uma classe previamente declarada.


<nome_de_referência> é um identificador válido que será utilizado para referenciar um objeto dessa
classe.
A declaração de uma referência a uma classe será feita na sessão de declarações de variáveis ou tipos de
dados de um algoritmo, ou dentro da sessão de variáveis de outra classe.

Instanciação 2 de classes
novo <nome_de construtor>([<argumentos_construtores>])

A declaração novo reserva espaço para um novo objeto da classe a que pertence o construtor e devolve
uma referência a um objeto dessa classe. <nome_de_construtor> terá o mesmo nome da classe a que
pertence. A ativação do construtor pode levar argumentos para a inicialização de atributos (veja mais adiante
no item de construtores). A instanciação pode ser efetuada em uma sentença de atribuição.

MeuObjeto ← novo MinhaClasse(arg1, arg2, arg3) //Dentro do código executável

Referência a membros de uma classe


NomeReferência.nomeDeMembro //Para atributos
NomeReferência.nomeDeMembro ([listaParamAtuais]) //Para métodos

Construtores
construtor <nome_de_classe>[<lista_parâmetros_formais>])
//Declaração de variáveis locais
início
//Código do construtor
fim_construtor

Existe um construtor por omissão sem argumentos que ativamos mediante <nome_de_classe( )>. Como
os métodos, admite-se a sobrecarga dentro de construtores distinguindo-se os diferentes construtores por ordem,
número e/ou tipo de seus argumentos.
Uma vez que a missão de um construtor é inicializar uma instância de uma classe, a <lista_parâme-
tros_formais> somente inclui argumentos de entrada, pelo que se pode omitir a forma em que passam
os argumentos.

  Criação de instâncias.
2
14mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

Destrutores
Não consideramos a existência de destrutores. As instâncias são consideradas destruídas quando é perdida uma
referência a elas (coleta de lixo).

Visibilidade das classes


Consideramos todas as classes como públicas, ou seja, é possível acessar os membros de qualquer classe
declarada em qualquer momento.

Referência à instância de dentro da declaração de uma classe


É possível fazer referência a uma instância de dentro de uma classe com a palavra reservada instância que
devolve uma referência à instância da classe que realizou a ativação do método. Desta forma instância.
UmAtributo faria referência ao valor do atributo UmAtributo dentro da instância atual.

A.8.2 Atributos

Declaração de atributos
A declaração dos atributos de uma classe será realizada dentro da sessão de declarações var dessa classe.

const [privado|público|protegido]<tipo_de_dado>:<nome>=<valor>
var
[privado|público|protegido] [estático]
<tipo_de_dado> : <nome_atributo> [ = <valor_inicial>]
...

<nome_atributo> pode ser qualquer identificador válido.


<tipo_de_dado> pode ser qualquer tipo de dado padrão, definido pelo usuário ou outra classe declarada
anteriormente.
É possível dar um valor inicial ao atributo mediante uma expressão de inicialização que deverá ser do
mesmo tipo de dado que o atributo.
As constantes são membros estáticos, se ligam em tempo de compilação e indicam que o valor não pode
ser modificado.

Visibilidade dos atributos


Por omissão, os atributos privados são considerados, ou seja, somente são acessíveis pelos membros da classe.
Para que possam ser utilizados pelos membros de outras classes, utilizaremos o modificador público. O modi-
ficador protegido é usado para que apenas possam ser utilizados pelos membros de sua classe e pelos das
classes de suas filhas.

Atributos de classe (estáticos)


Um atributo que tenha o modificador estático não pertence a nenhuma instância da classe, ele será comum a
todas elas. Para fazer referência a um atributo de uma classe, será utilizado o nome da classe seguido do nome
do atributo (MinhaClasse.MeuAtributoEstático).

Atributos constantes
O modificador const permite criar atributos constantes que não se modificarão durante o tempo de vida da
instância.
Especificações da linguagem algorítmica UPSAM 2.0mm15

A.8.3  Métodos

Declaração de métodos

A declaração de métodos será realizada dentro da classe depois da declaração de atributos sem indicar nenhuma
sessão especial.

[estático] [abstrato] [público|privado|protegido] <tipo_de_retorno>


método <nome_do_método>(<lista_de_parâmetros_formais>)
//declaração de variáveis
início
//Código
[devolver(<expressão>)]
fim_método

<nome_do_método> é um identificador válido.


<tipo_de_retorno> é qualquer tipo de dado padrão, estruturado ou uma referência a um objeto. A decla-
ração devolver é utilizada para indicar a data de retorno que devolve a função que deve coincidir com o tipo
de retorno que aparece na declaração. Se o método não devolve valores, será utilizada a palavra reservada nada
e não aparecerá a palavra devolver.
A lista de parâmetros formais será declarada da mesma maneira como nos procedimentos e funções. A
passagem de argumentos será realizada como nos procedimentos e funções normais.
As variáveis locais serão declaradas na sessão var entre o cabeçalho do método e seu corpo.

Visibilidade dos métodos3


Por omissão, os métodos são considerados como públicos, ou seja, é possível acessá-los de qualquer lugar do
algoritmo. Para que possa ser utilizado só por membros de sua classe, será utilizado o modificador privado, no
caso dos procedimentos, ou privada, no caso das funções. O modificador protegido ou protegida será
utilizado para que só possa ser utilizado pelos membros de sua classe e pelos de suas classes filhas.

Métodos estáticos
Um método que tenha o modificador estático ou estática não pertence a nenhuma instância da classe,
mas será comum a todas elas. Para fazer referência a um método de uma classe, será utilizado o nome da
classe seguido do nome do método (MinhaClasse.MeuMétodoEstático( )).

Sobrecarga de métodos
É permitida a sobrecarga de métodos, ou seja, a declaração de métodos com o mesmo nome mas com funcio-
nalidades diferentes. Para que na ativação se possa distinguir entre os métodos sobrecarregados, o número, a
ordem ou o tipo de seus argumentos deve mudar.

Ligação de métodos
A ligação de chamada de um método com o método correspondente sempre é feita de maneira dinâmica,
isto é, em tempo de execução, com o qual se permite a existência de polimorfismo.

3
  É recomendado usar apenas um método e, portanto, os modificadores serão privados ou protegidos.
16mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

A.8.4 Herança
classe <classe_derivada> herda_de[<especificador_acesso>]<superclasse>

<classe_derivada> é um identificador válido.


<superclasse> é uma classe declarada anteriormente.
[<especificador_acesso>] estabelece o tipo de herança (pública, protegida ou privada).
Omitindo-se, podemos supor ser pública. Com o especificador de acesso omitido, a classe derivada:

• Herda todos os métodos e atributos da superclasse acessíveis (atributos públicos e protegidos e métodos
públicos e protegidos) presentes somente na superclasse.
• Sobrescreve todos os métodos e atributos da superclasse acessíveis (atributos públicos e protegidos e
métodos públicos e protegidos) presentes em ambas as classes.
• Acrescenta todos os métodos e atributos presentes somente na classe derivada.

É possível acessar atributos da superclasse ou executar seus métodos mediante a palavra reservada super.

• Referência a um membro da superclasse super.nomeMembro( ).


• Referência ao construtor da superclasse: super( ).

Classes e métodos abstratos


Classes nas quais alguns ou todos os membros não têm implementação, porque não podem instanciar-se
diretamente. Servirão de classe base para classes derivadas.

abstrata classe <classe_base>

Aqueles métodos sem implementação poderiam ser declarados sem início nem fim de método.

abstrata TipoDado: método NomeMétodo ([paramFormais])

Nesses casos, as classes filhas deveriam implementar o método.

Herança múltipla
classe<classe_derivada> herda_de [<especificador_
de_acesso>]<superclasse1> ...
[<especificador_de_acesso>]<superclasseN>
//membros
...
fim_classe

A.9 CONJUNTOS DE PALAVRAS RESERVADAS E SÍMBOLOS RESERVADOS


símbolo, palavra Tradução/Significado

- Menos um (negativo)
- Subtração
& Concatenação
fl Operador de atribuição
 Referência a uma variável apontada
* Multiplicação
. Qualificador de acesso a registros ou a membros de uma classe
. Separador de decimais

(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm17

(continuação)

símbolo, palavra Tradução/Significado

/ Divisão real
// Comentário de uma linha só. Ignora tudo aquilo aparece depois da linha
[ ] Índice de array
^ Exponencial
{ Início do comentário multilínea. Ignora tudo aquilo que aparece até achar o caractere
de final de comentário (})
} Fim de comentário multilínea. Ignora tudo aquilo que aparece a partir do caractere
de início do comentário ({)
’ Aspa simples, delimitador de dados de tipo caractere ou cadeia
” Aspa dupla, delimitador de dados de tipo caractere ou cadeia
+ Mais unário (positivo)
+ Soma
+ Concatenação
< Menor que
<= Menor que ou igual a
< > Diferente de
= Igual a
> Maior que
>= Maior que ou igual a
abrir Abre um arquivo
abs(x) Devolve o valor absoluto da expressão numérica x
abstrato Declaração de métodos abstratos (sem implementação)
aleatório( ) Devolve um número aleatório real maior que ou igual a 0 e menor que 1
algoritmo programa, início do pseudocódigo
somar Modo de abertura de um arquivo
arctan(x) Devolve o arco tangente de x
arquivo_d Declaração de arquivos diretos
arquivo_s Declaração de arquivos seqüenciais
array Declaração de arrays
apagar Apaga um arquivo do disco
cadeia string
cadeia(x) Converte a cadeia para o valor numérico de x
caractere char
caractere(x) Devolve o caractere que corresponde ao código ASCII de x
fechar Fecha um arquivo
fechar Fecha um ou mais arquivos abertos
classe Início da declaração de uma classe
código(car) Devolve o código ASCII do caractere car
const Início da sessão de declarações de constantes
const Declaração de atributos constantes na definição de classes
construtor Início da declaração de um construtor
cos(x) Devolve o cosseno de x
decremento Decremento de estruturas repetitivas desde
desde Início de estrutura repetitiva desde, for
devolver Indica o valor de retorno de uma função
div Divisão inteira
e Expoente
e Passagem de argumentos por valor
e/s Passagem de argumentos por referência
inteiro integer, int, long, byte etc.
inteiro(x) Devolve o primeiro valor inteiro menor que a expressão numérica x

(continua)
18mmFundamentos de programação – Algoritmos, estruturas de dados e objetos

(continuação)

símbolo, palavra Tradução/Significado

então then
escrever Escreve uma ou mais expressões em dispositivo de saída (console, arquivo etc.)
escrita Modo de abertura de um arquivo
estático Declaração de atributos ou métodos de classe ou estáticos
exp(x) Devolve o valor ex
falso Falso, false
fda Fim de arquivo
fdl Fim de linha
fin Fim de algoritmo
fim_classe Final de declaração de uma classe
fim_construtor Fim da declaração de um construtor
fim_desde Fim de estrutura repetitiva desde
fim_função Fim da declaração de uma função
fim_enquanto Fim da estrutura repetitiva enquanto
fim_procedimento Final de um procedimento
fim_registro Fim da declaração de registro
fim_conforme Fim de estrutura seletiva múltipla
fim_se end if, fim de estrutura seletiva simples
função Início da declaração de uma função
fazer do
até to
até_que Fim da estrutura repetitiva repetir
herda_de Indica que uma classe derivada herda membros de uma superclasse
incremento Incremento em estruturas repetitivas desde
início início do código executável de um algoritmo, módulo, construtor etc.
instância Referência à instância atual da classe de onde aparece
lda Devolve o comprimento em bytes de um arquivo
leitura Modo de abertura de um arquivo
leitura/escritura Modo de abertura de um arquivo
ler Ler uma ou mais variáveis de um dispositivo de entrada (console, arquivo etc.)
liberar Libera o espaço atribuído a uma variável dinâmica
ln(x) Devolve o algoritmo neperiano de x
log10(x) Devolve o algoritmo em base 10 de x
comprimento(c) Devolve o número de caracteres da cadeia c
chamar_a Instrução de chamada a um procedimento
enquanto while, início da estrutura repetitiva enquanto
mod Módulo da divisão inteira
nada Tipo de retorno de métodos que não devolvem valores, void
não Not
novo Reserva espaço em memória para um objeto de uma classe e devolve uma referência
desse objeto
nulo Constante de ponteiro nulo
ou Operação lógica “ou” , “or”
posição(c,sc) Devolve a posição da primeira aparição da subcadeia sc na cadeia
privado Modificador de acesso privado a um atributo ou método
procedimento Início da declaração de um procedimento
protegido Modificador de acesso a um atributo ou método que permite o acesso aos membros
de sua classe e das classes filhas
público Modificador de acesso público a um atributo ou método
ponteiro_a Declaração de tipos de dados de alocação dinâmica
raiz2(x) Devolve a raiz quadrada de x

(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm19

(continuação)

símbolo, palavra Tradução/Significado

real float, double, single, real etc.


registro record, início da declaração de registro
renomear Troca o nome de um arquivo
repetir repeat, início da estrutura repetitiva repetir
reservar Reserva espaço em memória para uma variável dinâmica
conforme_seja Início de estrutura seletiva múltipla, case, select case, switch
sen(x) Devolve seno de x
se Início de estrutura seletiva simple/doble, if
se_não else
subcadeia (c,ini[,long]) Devolve uma subcadeia da cadeia c formada por todos os caracteres a partir da
posição ini. Se for incluído o argumento long, devolve somente os primeiros long
caracteres, a partir da posição ini
super Permite acesso a membros da superclasse
tamanho_de(x) Devolve o tamanho em bytes da variável x
tipos Início da seção de declarações de tipos de dados
trunc(x) Trunca (elimina os decimais) da expressão numérica x
valor(c) Converte a cadeia c a um valor numérico. Se o conteúdo da cadeia c não pode
converter-se em um valor numérico (contém caracteres alfabéticos, sinais de pontuação
inválidos etc.), devolve 0
var Inicio da seção de declarações de variáveis, ou da declaração de atributos de uma
classe
verdade Verdadeiro, true
e Operação lógica “e”, “and”

Você também pode gostar