Diagramas Sintáticos
Programação
Pedro Alexandre Pereira (palex@cc.isel.ipl.pt)
Centro de Cálculo
CCISEL, 2014
• Cada classe X pública é
declarada num ficheiro X.java • Indicando as classes
exteriores que são usadas • Por convenção, o nome
começa por maiúscula
• Entre chavetas constam os seu membros
• O método main recebe como parâmetro um array de String • Entre chavetas constam as
suas instruções
2 Programação
Classe pública com método
main
classe pública
public
class
nome
{
import
;
}
Ficheiro .javamétodo main
. . .
.
*
nome
método main Código a executar inicialmente
public static void main
( String [ ] nome )
• Nomes sugestivos que identificam classes, variáveis, métodos… • Compostos por letras, dígitos e “_” sem espaços
• O primeiro símbolo não pode ser um dígito • Distinção entre maiúsculas e minúsculas • Não podem ser palavras reservadas
– (if, class, public, …) • Dimensão ilimitada
• Convenções:
– Classes: UpperCamelCase
– Variáveis e métodos: lowerCamelCase – Constantes: UNDER_SCORE
– O “_” não é normalmente usado no início
– O “$” também é permitido mas não é normalmente usado
Identificadores / Nomes
nome
Identificadorletra
letra
0
..9
letra
Maiúscula, minúscula ou _a
..z
A
..Z
_
. . .
counter3 maxValue Prog MIN_VALUECCISEL, 2014
• Uma variável associa um nome a um local de memória onde se armazena um valor de determinado tipo.
• Uma declaração define uma ou mais variáveis do mesmo tipo.
• Cada variável pode ser iniciada com a avaliação de uma expressão.
4 Programação
Declaração de variáveis
declaração Declaração de variáveis
tipo nome
= expressão
; ,
int x;
tipo Nome de um tipo int char float boolean byte short long double nome . . . .
float average, sum; byte b = 0xFF;
long time=100, total=0; java.util.Scanner in;
• Um literal é um valor (constante) de determinado tipo int: long: double: float: 2.7F char:
String: "Olá mundo" "ISEL\n"
Valores e literais
literal inteiro true false ' caráter ' " caráter " Constante realinteiro Valorinteiro
1..9 0..9 0 0..7 x 0..9 A..F b 0..1 L
-real Valorreal
. 0..9 0..9 e - 0..9 F -27 -32 0x2F 037 0b1010 27L -32L 0x2FL 2.7 -0.42 6.5e12 2.7F "ISEL\n" "Olá mundo" '\n' 'A' -0.42F
CCISEL, 2014
• Com variáveis, literais e operadores (e outros elementos). • Cada expressão tem um valor de determinado tipo.
• Uma expressão pode ser apenas uma variável ou um literal.
6 Programação
Expressões
expressão Para obter um valor
elemento sufixOp prefixOp binOp ? expressão : 23 counter counter + 23 -a * b++ (a+2)*2 10 * in.nextInt() + 1
Operadores
Unários pós-fixos expr++ expr--
Unários prefixos ++expr --expr +expr -expr ~ !
Multiplicativos * / % Aditivos + - Deslocamentos (shift) << >> >>> Relacionais < > <= >= instanceof Teste de igualdade == != E (AND) & OU exclusivo (XOR) ^ OU (OR) |
E lógico (AND) {parcial} &&
OU lógico (OR) {parcial} ||
Ternário ? : Afetações = += -= *= /= %= &= ^= |= <<= >>= >>>=
Priori
dade
+
-
CCISEL, 2014
• Declaração de variáveis locais • Expressão seguida de ';'
– Afetação, chamadas a métodos, … • Instrução de decisão:
– Binária (if else) – Múltipla (switch)
• Instrução de repetição com: – Teste inicial (while)
– Teste final (do while) – Teste inicial e expressões
de iniciação e de iteração (for) • Instrução de quebra do fluxo de:
– Ciclos ou de switch (continue break) – Métodos (return)
• Bloco de instruções entre chavetas
8 Programação
Instruções
instrução Unidade de execução
declaração expressão ; if while do-while for bloco switch break continue return bloco 0..N Instruções { instrução }
• Instrução if
– Expressão avaliada com resultado booleano – Parte else opcional
– É apenas executada a instrução selecionada (que pode ser um bloco)
Instruções de decisão
if if ( expressão ) instrução else instrução Decisão binária switch switch ( expressão ) instrução Decisão múltipla { } case expressão : default : instrução • Instrução switch– Expressão avaliada com resultado enumerável
– A expressões dos ramos case
são constantes do mesmo tipo com valores diferentes
– As instruções default são
executadas se não for selecionado um ramo case
– São executadas todas as instruções a partir do ramo selecionado até ao final do switch ou até a uma instrução break (ou return)
CCISEL, 2014
Executam a instrução enquanto a avaliação da expressão de condição resultar true
• Instrução while
– Avalia antes de executar
10 Programação
Instruções de repetição / iteração
while
while ( expressão ) instrução
Repetição com teste inicial do-while do instrução Repetição com teste final while ( expressão ) for for
Repetição com expressões inicial, de condição e de iteração
expressão ) ( expressão ; declaração expressão ; instrução , • Instrução do while
– Avalia depois de executar
• Instrução for
– A primeira expressão é avaliada uma vez no início
– Avalia a condição (a segunda expressão) antes de executar a instrução – A terceira expressão é avaliada (ou executada) no final de cada iteração
• Uma classe pode conter campos para armazenar informação • Cada campo tem um nome e um tipo
• Opcionalmente o campo pode ter uma expressão para definir o seu valor inicial. Caso contrário é iniciado com o valor por omissão.
• Campos estáticos pertencem à classe (só existe um) • Campos não estáticos pertencem a cada objeto
• Campos final têm um valor que não pode ser alterado (constantes), tendo obrigatoriamente a expressão de iniciação.
Definição de campos
campo Membro de uma classe para armazenar informaçãp static tipo nome = expressão ; , final visibilidade visibilidade public private . . .
CCISEL, 2014
• Uma classe pode conter métodos
• Cada método tem um nome, o tipo de valor retornado, os parâmetros a passar e o bloco de instruções a executar, quando chamado.
• Podem existir vários métodos com o mesmo nome.
• As instruções são executadas sequencialmente até ao final do método ou até uma instrução return
• Pode ser estático se for chamado a partir da classe (sem objeto) • O método main, chamado pela máquina virtual, é obrigatoriamente
estático, público e tem um parâmetro do tipo String[].
12 Programação
Definição de métodos
bloco
0..N Instruções{
instrução
}
método Membro de uma classe com código a executar
static tipo nome
( tipo nome ) bloco
,
void
• O break termina o fluxo de execução da instrução switch ou de repetição onde está incluído, ou com o nome indicado.
– A execução continua na instrução seguinte
Instruções de quebra de fluxo
break ;
nome
break Termina o fluxo
de um ciclo ou um switch
return ;
expressão return Termina o método
continue ;
nome
continue Continua na próxima
iteração do ciclo
• O continue faz o fluxo de execução continuar no início do ciclo repetitivo onde está incluído.
– "Salta" as instruções até ao final do bloco.
– No while e no do while a execução continua avaliando novamente a expressão de condição.
– No for, a execução continua executando a expressão de iteração.
• O return termina o fluxo de execução do método onde está incluído, retornando o valor da avaliação da expressão.
– A execução continua na instrução seguinte à chamada – Se o tipo de retorno é void não existe expressão
CCISEL, 2014
• A primeira declaração de um ficheiro que define uma classe pública deve indicar o package a que pertence a classe
– A hierarquia de pastas no caminho do ficheiro deve corresponder à hierarquia de packages • Caso não exista esta declaração, a classe fica
no package anónimo e o ficheiro na pasta raiz
• Declarar uma variável de uma classe que pertence a um package: – Indicar o nome completo da classe
– Realizar um import especifico para essa classe ou um import para todas as classes do package
14 Programação
Declaração e utilização de Packages
package isel.poo; public class A { ... } isel/poo/A.java isel.poo.A var; import isel.poo.A; ...
A var; import isel.poo.*; ... A var; package package ; Declaração do package . nome
import Importação de classes
import ;
. *