Académique Documents
Professionnel Documents
Culture Documents
Padoca Calado
Informao
Stio da cadeira:
http://www.padoca.org/padoca/p2
Bibliografia
etc.
2008
Avaliao
Exame (60%)
2008
Contactos
Esclarecimento de Dvidas:
Assuntos Pessoais: atravs do endereo de e-mail duvidas@padoca.org (usar com moderao). Sesses de dvidas: para esclarecimento de dvidas pelos docentes. As questes sobre a matria leccionada devem ser colocadas preferencialmente nos horrios de atendimento presencial.
2008
tica e Deontologia
Fraude
Os principios ticos orientam a conduta individual e o nosso curso um espao onde todos os estudantes tm a oportunidade de aplicar e aprofundar os princpios ticos que os desafios de uso das novas tecnologias colocam. Este tema um aspecto transversal a todo o curso e a sua prtica fundamental quer agora na sua vida estudantil quer no seu futuro profissional. O trabalho de equipa uma constante ao longo do curso e no exerccio de uma profisso. Por isso, pretende-se que seja efectuado com um esprito de entreajuda. Devem ser respeitados os direitos de autor e de propriedade intelectual.
O aluno deve ter presente as regras da honestidade acadmica. O plgio de trabalhos e projectos no tolerado.
O uso de materiais que visam deturpar e falsear os resultados dos exames uma atitude altamente reprovvel e punido. Visa-se com estas punies estabelecer um esprito de justia e de facto atribuir as melhores notas aos melhores alunos.
2008
tica e Deontologia
Crime Informtico
Os alunos devem ter sempre presente que o uso dos computadores implica determinadas regras e que existem leis que especificam que determinado uso ou prtica um crime.
Vulgarmente designadas como pirataria, essas aces para alm de constituirem um crime para quem as pratica e de prejudicarem o seu futuro profissional, tambm tm consequncias, para a Faculdade, que vo desde a perda de tempo perda de informao, passando, pelo prestgio, que se deve manter intocado. O uso dos recursos informticos desta Instituio para fins ilegais ou imorais proibido e o aluno apanhado nas actividades ilcitas ser alvo de um processo nas instancias policiais.
2008
Objectivos
2008
Programa
Programao em Java
Tipos, variveis, expresses e instrues de seleco Ciclos, matrizes, Strings e tipos enumerados Modularizao, abstraco e encapsulamento Mtodos, parmetros, argumentos e contratos (programao por contrato) Classes Leitura e escrita de dados em ficheiros
2008
Metodologia
Aulas tericas
2008
Aula 1
Programao II
O que um computador?
Memria lenta
disco rgido
11
2008
Computador
Principais Componentes:
Suporte Fsico
Hardware (HW)
girtby.net/images/hardware.jpg
Suporte Lgico
Software (SW)
do filme Matrix, whatisthematrix.warnerbros.com
12
2008
Computador
HW (Recursos Fsicos) + SW (Parte Decisora) => Execuo de Tarefas
Limitaes do Hardware impem limites s possibilidades do Software que o utiliza Estrutura exacta do HW depende do fabricante Componentes genricos do HW na maioria dos casos so relativamente semelhantes
2008
13
Memria
Perifricos
15
2008
Memria do computador
16
2008
Bits e Bytes
1 Byte = 23 ou 8 bits (ou 8 digitos binrios: 0s ou 1s) 1 KB (Kbyte ou Kilobyte) = 210 ou 1024 bytes 103 1 MB (Megabyte) = 220 ou 1024 KB ou 1048576 Bytes 106 1 GB (Gigabyte) = 230 ou 1024 MB 109
[ ao trabalharmos com valores binrios e no decimais, o espao de memria disponvel no bem o que imaginamos: por exemplo um disco de 200 GB, tal como publicitado, corresponde, em binrio, a cerca de 186 Gigabytes a sua capacidade real ]
17
2008
Conceitos principais:
Ficheiro
Conjunto de Dados armazenado sob um nome identificador
Programa
Instrues (contidas num ficheiro) que descrevem uma tarefa numa dada linguagem
Sistema Operativo
Programa especial que gere o HW, executa outros programas, etc.
18
2008
Linguagem?
19
2008
Linguagens
Linguagem natural
Muito bsica: usada quase directamente pelos processadores dos computadores, ex:
20
2008
Linguagens
Sem as ambiguidades e imprecises de uma linguagem natural, mas no to penosa de utilizar como a linguagem mquina, ex: if (x == 1) System.out.println(X igual a 1);
21
2008
Instrues e Linguagens
Informao armazenada:
Sob a forma de bits Bits organizados em bytes Instrues so informao, logo, conjuntos de bytes Instrues do seu repertrio prprio Instrues consideradas de baixo nvel Mais prximas da forma humana de raciocinar Processador no capaz de as executar directamente
2008
Processador executa:
Instrues de alto-nvel
22
Linguagens
Exemplos de L.P.A.N.:
Factos:
CPU entende instrues oriundas de uma L.P.B.N. Humanos preferem descrever tarefas para execuo pelo computador usando L.P.A.N. Necessidade de um meio de traduo LPAN -> LPBN Traduo realizada atravs de programas: compiladores
2008
23
A reter...
Programar:
resolver problemas de modo a obter solues - finitas - bem definidas e - eficazes
24
A ler...
Captulos 1 e 2 e seces 3.1 e 3.2 do livro:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
25
2008
Aula 1: Sumrio
Computador como mquina programvel Conceitos de linguagens naturais, de programao e mquina
26
2008
Programao II
Licenciatura de Cincias da Computao
Padoca Calado
Aula 2
Introduo linguagem Java
da Aula 1...
Programar: resolver problemas de modo a obter solues finitas, bem definidas e eficazes
Tipos de linguagens: naturais, de programao de alto nvel, mquina, etc.
Necessidade de um meio de traduo: LPAN LPBN Traduo realizada atravs de programas: compiladores
29
2008
31
2008
Nota: esquema retirado do livro Fundamentos de Programao em Java 2 (Mendes e Marcelino, 2005, p. 21)
32
2008
Nota: a classe deve sempre ter o mesmo nome do ficheiro com o cd. fonte!
33
2008
Donald E. Knuth
34
2008
Resoluo de um Problema/Tarefa
(exemplo de algoritmo para fazer um bolo)
Misturar os ingredientes
Bolo
Cozinhar o bolo
35
2008
Programao de computadores
Fundamental:
Desenvolver aptides para criar solues
e para traduzir essas solues em programas
36
2008
Algoritmo
Ajudam o programador:
Planificao do programa antes de o escrever (codificar) numa dada linguagem de programao Para o programador novio, codificar directamente no fantasticamente natural.
2008
37
Algoritmo
Finitude: tem de terminar Definitude: cada passo bem definido Entradas: zero ou mais, de conjunto bem definido
38
2008
Problema
inteiros positivos (m e n)
39
2008
Problema
inteiros positivos (m e n)
40
2008
Problema
m e n so divisveis por k
(o resto da diviso por k zero), e
41
2008
Propriedades conhecidas
42
2008
Nmeros e variveis
Operaes lgicas: e, ou
2008
43
Operaes lgico-aritmticas:
x + y (soma de x e y)
x y (subtraco de x e y) x / y (resultado da diviso de x por y) x * y (resultado da multiplicao de x por y) x % y (resto da diviso de x por y) x = y (x passa a ter o valor de y) x == y (x igual a y?), x != y (x diferente de y?)
44
2008
Algoritmo do MDC
1
( no quadro )
45
2008
Algoritmo do MDC
1
ler m, n
se m < n ento
2
k=m
3
seno
4
k=n
5
enquanto m % k != 0 ou n % k != 0 fazer:
6
k=k1
7
fim do enquanto 8
46 escrever k // enviar resultado para o monitor
2008
}
47
2008
Comentrios ao programa
1
( no quadro )
48
2008
49
2008
50
2007/2008
Problema
inteiros positivos (m e n)
51
2008
Problema
Clculo do mnimo mltiplo comum de dois inteiros positivos (m e n) Entradas: m e n Sadas: mmc, tal que mmc = mmc(m, n), i.e:
mmc mltiplo de m e de n
(o resto da diviso de mmc pelo menor entre m e n zero)
52
Propriedades conhecidas
mmc (m, n) >= m e mmc (m, n) > 0 mmc (m, n) >= n e mmc (m, n) > 0
53
2008
Algoritmo do MMC
1
( no quadro )
54
2007/2008
Algoritmo do MMC
ler m, n se m > n ento maior = m menor = n seno maior = n // ler 2 inteiros a partir do teclado
menor = m
fim do se inicializar mmc = maior enquanto mmc % menor != 0 fazer: mmc = mmc + maior fim do enquanto escrever mmc
55
public class CalcMMC1 { public static void main (String args[]) { Scanner teclado = new Scanner (System. in); System.out.print ("Introduza um inteiro positivo: "); int n = teclado.nextInt(); System.out.print ("Introduza outro inteiro positivo: "); int m = teclado.nextInt(); int maior, menor, mmc; if (n < m) { // Calcular o maior e o menor entre m e n maior = m; menor = n; } else { maior = n; menor = m; } mmc = maior; // Inicializar mmc while (mmc % menor != 0) // Calcular mmc mmc = mmc + maior; System.out.println("O m.m.c. entre " + m + " e " + n + " " + mmc + "."); } }
56
2008
57
2008
if (m < n) {
mmc = n; n = m; m = mmc; } mmc = m; // Calcular mmc while (mmc % n != 0) mmc = mmc + m; System.out.println("O m.m.c. entre " + m + " e " + n + " " + mmc + "."); } }
58
2008
Algoritmos - optimizao
Importa tentar encontrar a soluo mais simples, clara, estruturada, eficaz e eficiente para um dado problema
2008
59
Especificao [humano]
Desenvolvimento do algoritmo [humano] Concretizao do algoritmo na linguagem de programao [humano] Traduo do programa para linguagem mquina [computador/compilador] Execuo do programa para problema particular (e.g., mdc(131, 47)) [computador/JVM]
2008
60
A reter...
61
2008
A ler...
Captulos 1 e 2 e seces 3.1 e 3.2 do livro:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
62
2008
Aula 2: Sumrio
63
2008
Aula 3
Variveis, expresses, operadores e instrues de seleco
comentrios
2007/2008
Variveis
435.72
Inteiro
Letra/caracter
Decimal 435.72
Letras
66
2007/2008
Variveis
Tem de se declarar quais as variveis que passam a existir nesse programa, qual o seu nome e tipo -
declarao
inicializao
Aps a declarao:
Colocao de um valor numa varivel chama-se atribuio atribuio de um valor a uma varivel
2007/2008
67
numero : int
12
ou:
int numero; numero = 12;
Valor: 12
68
2007/2008
69
2007/2008
70
2007/2008
Variveis e Identificadores
O nome da varivel um identificador Os identificadores no podem ser repetidos na mesma zona do programa
71
2007/2008
Variveis e Identificadores
Primeiro caracter no pode ser um algarismo (0, 1, , 9) Maisculas e minsculas so caracteres diferentes!
No podem ser palavras reservadas (e.g. for, while, int, if, for, etc.)
72
2007/2008
Tm um significado especial para o compilador No podem ser usadas para outras finalidades
Tipo de dados sempre uma palavra reservada (tipos primitivos) No pode ser usado para outras finalidades
Tipos de dados
Primitivos
char um caracter int nmero inteiro (existem trs outros tipos de inteiros) float ou double nmero decimal boolean verdadeiro ou falso
Classes
74
Caracteres
Tipo: char
Nmero de bits para guardar um caracter: 16 Nmero total de padres de bits: 216 = 65 536 Cdigo: Unicode ( associa um nmero a cada caracter independente do idioma.
Sugesto: consulte Unicode )
char
memria
A ..... 0000 0000 0100 0001 a ..... 0000 0000 0110 0001
75
2007/2008
Inteiros
Tipo Tamanho
Exemplo:
byte
short
8
16 32 64
int long
memria
0000 0000 0000 0000 0000 0000 0100 0001
76
int
65
2007/2008
Nmero de bits: 32
float x = 0.0f; (ou 0.0F)
( por omisso um real double; para ser explicitamente float poder inicializar-se a var. desta forma )
memria
0000 0000 0000 0000 0000 0000 0100 0001 77
float
9.1E-44
2007/2008
Memria
Os 32 bits de memria:
20 * 1
podem corresponder a:
78
Nota: o que est num endereo de memria pode ser igual ... mas ser interpretado de formas diferentes...
Memria
A mesma memria pode ser vista a vrios nveis:
x:int 5 5 A A Contedos, assumindo tipos definidos letra:char Variveis com nomes e tipos
Referncias/Objectos
Object um_objecto = new Object(); Memria dinmica (heap)
@10b62c9 @10b62ca I S C T E
2007/2008
@10b62db
@10b62ec
80
Valores literais
Domnio
10, ... 234, ... 176, ... 8374L, ... 3.14f, 200.482F, ... 18.0, 1.8e1, 18.0d, ... (outros tipos) A, ., , ... false e true
ecr
375 12 375-12
83
2007/2008
2.0 3.0
2007/2008
At h pouco tempo no existia nos packages da linguagem um mtodo directo em JAVA para ler informao do teclado. Era necessria uma sequncia de vrias operaes, por exemplo:
String s = ""; char c; try { do { c = (char)System.in.read(); s = s + c; } while (c != '\n'); } catch(IOException e) {}
S por curiosidade
85
2007/2008
H cerca de dois anos, um grupo de investigadores desenvolveu uma classe, Scanner, utilizvel em qualquer mquina, que facilita a interface com o computador e o input em programas em Java. Para podermos recorrer aos mtodos definidos para esta classe Scanner, basta que no nosso programa importemos o package (ou biblioteca) desta classe, que lhes permite aceder e utilizar: import java.util.Scanner; e que criemos um objecto do tipo Scanner (p.e., teclado): Scanner teclado = new Scanner (System.in);
Agora, recorrendo a teclado, podemos ler diferentes dados, p.e., um valor inteiro n (existem inmeros mtodos: de leitura, pesquisa, etc.): int n = teclado.nextInt();
86
2007/2008
Outro mtodo para ler informao do teclado (sequncia de operaes) ... ex:
S por curiosidade
InputStreamReader leitor = new InputStreamReader (System.in); BufferedReader input = new BufferedReader(leitor); System.out.print("Introduza um inteiro positivo: "); String linha = input.readLine(); int m = Integer.parseInt(linha);
87
2007/2008
possvel tambm usar uma janela para ler valores (p.e., uma frase ou cadeia de caracteres - String) a partir do teclado:
2007/2008
possvel considerar um valor de uma classe primitiva como se fosse um objecto. Para cada um dos oito tipos primitivos em Java existe, associada, uma wrapper class com variveis do correspondente tipo primitivo. Entre as funcionalidades das wrapper classes encontramos vrias rotinas termo que passaremos a designar por mtodos como por exemplo:
int i = Integer.parseInt(123);
// para converter umaString num valor inteiro
i = 123
Nota * : desenvolveremos esta questo mais tarde, quando abordarmos Classes 90 ( p.e., Integer i = new Integer (5); )
2007/2008
Instrues
...
2007/2008
91
Operao de atribuio
varivel = expresso;
valor
x : int
Exemplo:
12
x = 4 + 8;
92
2007/2008
Converses (cast)
Converses possveis entre tipos de dados:
93
2007/2008
Converses (cast)
int i = 65; char c = 'a';
94
2007/2008
+, -, *, / e %
A diviso (/) a diviso inteira se os seus operandos forem inteiros
int x = 1 / 2; // System.out.println(x);
ex. exp.java
95
2007/2008
Se os operandos forem de tipos diferentes, o operando de um tipo com menor domnio (gama de valores) convertido para o tipo maior domnio antes do clculo:
System.out.println(1.5 + 1);
2.5 convertido para 1.0 sem ser preciso escrever (double)
96
2007/2008
System.out.println(16 / 2 / 2);
4
97
2007/2008
Excepo: atribuio
int i = 1, j = 1; i = j = 0; System.out.println(i + + j); 0 0
1.0
98
2007/2008
Operadores relacionais:
Operador de igualdade:
==
Operador de diferena:
!=
99
2007/2008
Operadores lgicos
Operadores lgicos:
&& : E
|| : OU
! : Negao
O resultado sempre um boolean (true ou false) Exemplo (x est entre 0 e 10?): boolean b = (x >= 0 && x <= 10)
// Estas expresses
++ e -- prefixos e sufixos
(diferenas analisadas mais tarde)
x: int 3 1. Soma x+1 -> 4
Somar 1 a x:
++x; operador prefixo ou x++; operador sufixo
nota: ex. em exp.java
(guarda 4 em memria)
2. Pe o 4 em x
x: int 4
101
2007/2008
Instruo de seleco
Guarda
if(condio){
instrues_1;
} else {
instrues_2;
}
executada quando a condio falsa
nota: ver ex. exp_if.java
102
2007/2008
if(x < 0) {
x = 0; } else {
1
x = 1;
} System.out.println(x);
103
2007/2008
int x = teclado.nextInt();
0
x = 0;
}
Dados introduzidos pelo utilizador System.out.println(x);
104
8 0
2007/2008
x: int
int x = teclado.nextInt();
-3
}
System.out.println(x);
105
2007/2008
A reter...
Variveis:
Expresses:
106
A ler...
Captulos 3, 5 e 7:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
107
2007/2008
Aula 3: Sumrio
108
Aula 4
Ciclos, matrizes e String
Na aula passada
Variveis e operadores:
char a = z;
int x = 45 + 23; int y = x + 1; String nome = new String(Doris Lessing);
Instrues de seleco:
if (x >= 0 && x <= 10) System.out.println(x est entre 0 e 10); else System.out.println(x no est entre 0 e 10);
110
2007/2008
Ciclos
inicializao
Enquanto (condio) Fazer... Fazer... Enquanto (condio) Para... De... At (condio) ... Fazer...
inicializao
condio V
instrues
condio
V instruo1 V
instrues
condio instruo2
Enquanto... Fazer...
Fazer... Enquanto
Para... Fazer...
2007/2008
111
Instruo while
while(condio) {
instrues/passo; }
Progresso: Instruo para Garantir que o ciclo termina. Passo = aco + progresso
Ciclos
inicializao
condio V
While... do...
113
2007/2008
(condio)
Guarda Aco
Passo
System.out.println( );
System.out.println(Terminou.); } }
Progresso
Exemplo Contagem.java
114
2007/2008
Desenvolver o algoritmo:
Descrever como se calcula a potncia usando:
enquanto fazer:
115
2007/2008
}
System.out.println("A potncia " + n + " de " + x + " : " + r + " ."); } }
116
2007/2008
aco
}
Aco:
Executado sempre que a guarda seja verdadeira
117
2007/2008
Ciclos
inicializao
condio
V - passo
- progresso
For...
2007/2008
118
Desenvolver o algoritmo:
Descrever como se calcula a potncia usando:
119
2007/2008
}
System.out.println("A potncia " + n + " de " + x + " : " + r + " ."); } }
120
2007/2008
121
2007/2008
Ciclos
condio
Do... While...
2007/2008
122
Criar um menu com 3 opes e, para as duas primeiras indicar qual a que o utilizador escolheu:
Pratos do dia:
Opo 1: Pataniscas de bacalhau Opo 2: Lasanha vegetariana Opo 3. Sar
123
2007/2008
124
2007/2008
125
2007/2008
Ciclos
inicializao
Guarda
while (condio) {passo; progresso;} do {passo; progresso;} while (condio) for (init; condio; progresso) {passo;}
aco inical
condio V
condio
V - passo
condio - progresso
While... do
do... While
for...
2007/2008
126
Ciclos - Exemplos
ler x, n;
int i = 1, r = x;
int i = 1;
int i = 0;
i != n
V
Escrever(i); ++i;
i != 100
V Escrever (Java);
r = r * x; ++i;
i != 6 ++i;
While... do ( Calcular xn )
Ciclos Indeterminados
127
}
}
128
2007/2008
int a0 = teclado.nextInt();
int a1 = teclado.nextInt(); ... int a999 = teclado.nextInt();
Pouco prtico
System.out.println(a999);
System.out.println(a998); ... System.out.println(a0); }
}
129
2007/2008
130
2007/2008
Sintaxe
Tipo dos elementos Nome da matriz
Nmero de elementos
Organizao
Recordar noo de Referncia
Inicializao
double[] m = new double[4];
m: double[4] m[0]: 0 m[1]: 0 m[2]: 0 m[3]: 0
Com zero!
133
2007/2008
134
2007/2008
m: double[0]
135
2007/2008
m: char[10][10]
m[0][0] m[0][1] m[0][2] m[0][3] m[0][4]
m[0][10]
m[10][10]
136
2007/2008
Directo
Do primeiro ao elemento final, 0 -> 999
Inverso
Do ltimo ao elemento inicial, 999 -> 0
137
2007/2008
Constante!
Tipos vlidos para indexar uma matriz: byte, short, int, char
2007/2008
139
Cadeias de caracteres
140
2007/2008
String s = null;
141
2007/2008
142
2007/2008
I, S, C, T, E
}; String b = new String(caracteres);
a: referncia para String : String ISCTE b: referncia para String : String ISCTE
143
2007/2008
Comprimento
Mostra 24.
2007/2008
Concatenao e sub-cadeias
String s1 = Introduo ;
String s2 = Informtica; String s3 = s1.concat(s2); Concatena s1 com s2: s3 fica com Introduo Informtica a fica com Introduo b fica com Informtica
ou
String s3 = s1 + s2;
2007/2008
Comparao
if(s1 == s2)
Comparao entre referncias: No deve ser usado! System.out.println(Referenciam a mesma cadeia);
if(s1.equals(s2)) System.out.println(Guardam cadeias com igual valor); Se Devolve s1 < s2: int negativo s1 = s2: zero if(s1.compare(s2) < 0) s1 > s2: int positivo System.out.println(s1 + aparece antes de + s2 + no dicionrio.);
147
2007/2008
i fica com 0 j fica com -1 k fica com 17, 1 r aps a posio 10 l fica com 13 m fica com -1 n fica com 13
A reter...
Ciclos:
Indicam quantas vezes (ou em que condies) um conjunto de instrues repetido Sries indexveis de variveis do mesmo tipo Classe de variveis onde se guardam palavras ou frases Tm um conjunto de propriedades, ao contrrio das variveis primitivas
Matrizes:
String:
Nota: pode consultar informao os mtodos que integram a classe String (cadeia) em: Classe String - mtodos
149
2007/2008
A ler...
Captulo 4:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
150
2007/2008
Aula 4: Sumrio
Instruo while
Sintaxe Semntica
Exemplo de ciclos simples Inicializao, guarda, passo (aco e progresso) As instrues for e do-while Prtica da construo de ciclos Matrizes:
Objecto com instncias do mesmo tipo Sintaxe: definio e inicializao Tamanho de uma matriz: length Indexao
Cadeias de caracteres
2007/2008
151
Aula 5
Mtodos, Parmetros, Argumentos e Contratos
Na aula passada
Ciclos:
while (condio) {passo; progresso;} for (init; condio; progresso) {passo;} do {passo; progresso;} while (condio);
int[] matriz_de_inteiros = new int[100]; matriz_de_inteiros[99] = 10; int x = matriz_de_inteiros[99];
Matrizes:
String:
153
Introduo Programao
2007/2008
Modularizao em Java
Funes Conjunto de instrues, com interface bem definida, que efectua um dado clculo
Devolvem explicitamente um resultado ao exterior
Procedimentos Conjunto de instrues, com interface bem definida, que faz qualquer coisa
No devolvem explicitamente um resultado ao exterior
Nota * : designam-se muitas vezes por Sub-programas ou Rotinas; correspondem a operaes (conjuntos de instrues) que um programa (ou Classe) executa, quando dele se pretende uma dado comportamento
154
Introduo Programao
2007/2008
Sintaxe (declarao)
Classe? static?
Funes de classe
Declarao / cabealho
Corpo
Sintaxe (declarao)
Procedimentos de classe
Tipo e nome de cada parmetro (separados por virgulas), ex: (int x, char a, String s, double[][] m) Variveis que s existem dentro do mtodo (var. locais)
156
Introduo Programao 2007/2008
Sintaxe (utilizao)
parmetros do mtodo
( a sua chamada integra-se numa instruo para o valor de retorno poder ser utilizado )
( basta saber o nome do procedimento, para que serve e que eventuais dados necessita )
157
Introduo Programao
2007/2008
Passagem de argumentos
Parmetros (do mtodo) so sinnimos dos argumentos respectivos (com que chamado o mtodo)
Em Java no h indicao explcita de passagem por referncia! Argumentos so sempre passados por valor (ainda que o valor seja uma referncia)
Tipos primitivos: parmetro uma cpia do valor do argumento Outros tipos: parmetro uma cpia da referncia (i.e. aponta para os mesmos dados que o argumento)
158
Introduo Programao
2007/2008
Ideal
1 a 5 linhas
Normal
at 10 linhas
Em casos extremos
at 60 linhas
159
Uma funo que procura, numa lista (matriz) de palavras (String), uma palavra comeada por uma determinada letra e devolve a primeira encontrada nessas condies, ou null se no encontrar:
O que ser devolvido? Como se chama a funo? Quais os dados (parmetros) que precisa?
160
Qual o algoritmo?
Introduo Programao 2007/2008
O que devolvido? uma palavra Qual o nome da funo? procuraPalavra (sem espaos!) Quais os dados que precisa? uma matriz de palavras e uma letra (so dois parmetros) Em Java:
162
Introduo Programao
2007/2008
}
Porque no est aqui o else ?
163
Introduo Programao 2007/2008
Exemplo de um procedimento
Um procedimento que pergunta uma letra ao utilizador e escreve no ecr uma palavra (existente numa matriz) comeada por essa letra ou indica ao utilizador que no encontrou
O que devolvido? Como se chama o procedimento? Quais os dados que precisa? Qual o algoritmo?
Introduo Programao 2007/2008
164
Exemplo de um procedimento
Um procedimento que pergunta uma letra ao utilizador e escreve no ecr uma palavra comeada por essa letra
O que devolvido?
165
Introduo Programao
2007/2008
Exemplo de um procedimento
Procedimento que pergunta uma letra ao utilizador e escreve no ecr uma palavra comeada por essa letra
public static void escrevePalavra(String[] lista_de_palavras) { // pede ao utilizador para inserir uma letra // L a letra // procura palavra comeada por: letra em lista_de_palavras // se encontrou
166
Introduo Programao
2007/2008
Exemplo de um procedimento
Procedimento que pergunta uma letra ao utilizador e escreve no ecr uma palavra comeada por essa letra
public static void escrevePalavra(String[] lista_de_palavras) { System.out.println(Introduza uma letra e <enter>: );
Scanner teclado = new Scanner (System.in);
String palavra = procuraPalavra (lista_de_palavras, letra); if (palavra != null) { // se encontrou mostra palavra ao utilizador System.out.println(Palavra encontrada: + palavra); } else { // seno mostra ao utilizador que no encontrou System.out.println(Palavra no encontrada); } }
167
Utilizao do procedimento
public class CodificadorDeLetra {
// declarao da funo e procedimento public static void main(String[] argumentos) {
escrevePalavra(palavras);
} }
168
Introduo Programao 2007/2008
Fluxo de controlo
Programa CodificadorDeLetra Incio do programa 1. Chamada de main() (sempre) 2. Chamada de escrevePalavra() 3. Chamada de procuraPalavra()
escrevePalavra() ainda em execuo!
devolve a palavra encontrada e volta a executar escrevePalavra() no ponto onde foi suspenso No devolve nada, um procedimento
4. Devoluo de procuraPalavra()
5. Retorno de escrevePalavra()
Fim do programa
(Duvida? faa o traado/debug e verifique)
169
Introduo Programao 2007/2008
final int d) {
... } public static void main(String[] argumentos) { ... } }
170
Introduo Programao 2007/2008
Papeis do programador
Produtor
Desenvolve mecanismo do mdulo Preocupa-se com:
o que faz como se vai usar como funciona
Consumidor
Integra cada mdulo num sistema mais complexo Preocupa-se com:
o que faz
171
Introduo Programao
2007/2008
172
Introduo Programao
2007/2008
Indica qual dever ser o comportamento esperado Comportamento descrito com a mxima exactido possvel
173
Introduo Programao
2007/2008
Cada mtodo deve indicar o seu contrato Cada contrato contm (pelo menos)
174
Introduo Programao
2007/2008
return r;
}
175
Ateno s pr-condices!
if (m <= 0 || n <= 0) throw new IllegalArgumentException ("Pelo menos um dos argumentos errado!");
return r; }
177
Introduo Programao
Ateno s pr-condices!
178
Especificao de contrato
No cabealho de rotinas
Forar a existncia de pr e ps-condies e recorrer a asseres d origem a programas optimizados, e minimiza os erros de programao. No cdigo Java
Instrues assert
Uma assero uma instruo que permite testar determinados pontos-chave do programa.
As asseres permitem confirmar se o funcionamento do programa corresponde ao que dele esperamos/pretendemos.
Introduo Programao 2007/2008
179
Especificao de contrato
Pr-condies e condies objectivo
Possvel especific-las:
Ao nvel de mtodos
Ao nvel de instrues mais elementares
180
Introduo Programao
2007/2008
Exemplo: absolutoDe()
/** Devolve o valor absoluto do parmetro.
@pre ?. @post ?. */
O que faz
181
Introduo Programao
2007/2008
absolutoDe(): pr-condio
/** Devolve o valor absoluto do argumento.
@pre V. // Todos os valores do parmetro so vlidos @post ?. */
182
Introduo Programao
2007/2008
absolutoDe(): condio-objectivo
/** Devolve o valor absoluto do argumento.
@pre V. @post 0 absolutoDe. */
183
absolutoDe(): condio-objectivo
/** Devolve o valor absoluto do argumento.
@pre V. @post 0 absolutoDe. */ public static int absolutoDe (final int valor) { return 5; }
Errado! Mas, ... A condio objectivo (C.O.) verifica-se! H muitas C.O. que so vlidas, mas umas so melhores que outras (as mais restritivas)
Introduo Programao 2007/2008
184
absolutoDe(): Cond.-Objectivo
/** Devolve o valor absoluto do argumento.
@pre V. @post 0 absolutoDe e
(absolutoDe = valor ou
absolutoDe = -valor). */ public static int absolutoDe (final int valor) {
...
}
185
Introduo Programao
2007/2008
absolutoDe()
/** Devolve o valor absoluto do argumento.
@pre V. @post 0 absolutoDe e (absolutoDe = valor ou absolutoDe = -valor). */ public static int absolutoDe (final int valor) { int absoluto; ... return absoluto; }
186
Introduo Programao
2007/2008
absolutoDe()
/** Devolve o valor absoluto do argumento.
@pre V. @post 0 absolutoDe e (absolutoDe = valor ou absolutoDe = -valor). */ public static int absolutoDe(final int valor) {
// V
int absoluto; ...
// 0 absoluto e
// (absoluto = valor ou absoluto = -valor) return absoluto; }
187
Introduo Programao
2007/2008
absolutoDe()
/** Devolve o valor absoluto do argumento. @pre V. @post 0 absolutoDe e (absolutoDe = valor ou absolutoDe = -valor). */ public static int absolutoDe(final int valor) { assert true; // V int absoluto; ... // 0 absoluto e // (absoluto = valor ou absoluto = -valor)
Instrues afirmaes Asseres:de assero: verificao explcita acerca do estado dode asseres. programa
Para usar no Eclipse necessrio a flag de execuo ea. (Run/Run/(X)=Arguments/VM arguments): -ea
188
Introduo Programao
2007/2008
absolutoDe()
/** Devolve o valor absoluto do argumento. @pre V. @post 0 absolutoDe e (absolutoDe = valor ou absolutoDe = -valor). */ public static int absolutoDe(final int valor) { int absoluto; ... // 0 absoluto e // (absoluto = valor ou absoluto = -valor) assert 0 <= absoluto;
Instrues afirmaes Asseres:de assero: verificao explcita acerca do estado dode asseres. programa
Para usar no Eclipse necessrio a flag de execuo ea. (Run/Run/(X)=Arguments/VM arguments): -ea
189
Introduo Programao
2007/2008
absolutoDe()
absoluto = -valor;
190
Introduo Programao
2007/2008
absolutoDe(): PC1
// PC1: 0 -valor e // (-valor = valor ou -valor = -valor), ou seja,
// PC1: valor 0 e (-valor = valor ou V), ou seja, // PC1: valor 0 e V, ou seja,
// PC1: valor 0
absolutoDe(): PC2
// PC2: 0 valor e
// (valor = valor ou valor = -valor), ou seja, // PC2: 0 valor e (V ou valor = -valor), ou seja,
absolutoDe()
/** Devolve o valor absoluto do argumento. @pre V.
A reter...
Servem para agrupar instrues associadas. Executam um clculo ou procedimento bem definido Tm parmetros
Passagem de argumentos
Tipos primitivos: so cpias, o argumento original no pode ser alterado
194
Introduo Programao
2007/2008
A ler...
Captulo 6:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
195
Introduo Programao
2007/2008
Aula 5: Sumrio
196
Introduo Programao
2007/2008
Aula 7
Classes
Mtodos:
198
2007/2008
Classes e Objectos
Classe:
(1) Unidade de cdigo, tipo, padro ou modelo definido e desenhado durante a construo de um programa; (2) Modelo/Projecto para a criao de objectos que partilham um conjunto de caractersticas comuns: atributos ou propriedades Variveis (java) operaes, aces ou comportamentos Mtodos (java)
Objecto:
(1) (2) (3) Instncia de uma classe; criado e manipulado durante a execuo do programa; Tem identidade e valores especficos para os seus atributos.
199
2007/2008
Classes e Objectos
objecto do
tipo Aluno
Exemplo: Conjunto de atributos e operaes (ou comportamentos) que podem definir um aluno (Classe e um objecto construdo a partir desta):
Classe: Aluno
Atributos
numero nome morada datanasc sexo
Objecto: Joca
Atributos
23456 Joca Rua Direita, 5 25-10-1987 M
Operaes
inscrever verMorada verIdade
200
Operaes
inscrever verMorada verIdade
2007/2008
Classes e Objectos
mtodos (includos no
comportamento da classe)
Classe
define um tipo estrutura de dados configura um conjunto de operaes configura os atributos como um conjunto de variveis-membro, cada uma com o seu tipo (p.e., em Aluno, int x String x String x int(*) x char)
Objecto
tem um estado conjunto especfico dos valores que o caracterizam partilha operaes ou mtodos, que: Alteram estado em um ou mais atributos; p.e. inscrever, No alteram estado devolvem informao; p.e. verIdade (inspectores)
(*)
201
Classes e Objectos
A especificao dos atributos variveis e comportamentos mtodos que os objectos desta classe tero.
veremos num outro exemplo o que o construtor de uma classe, como se instncia uma classe e como se acede ao componente de um objecto
(*)
public void inscrever() { numero = 23456; nome = Joca; // somente um objecto especfico modificado, no a classe! } // ... }
202
2007/2008
Funcionam, essencialmente, atravs de objectos que tm caractersticas prprias e que podem desempenhar diversas tarefas (ou operaes); Fazem uso destas funcionalidades e da interaco entre objectos.
Programar:
Definir as classes (os seus dados e funcionalidades), o modo como se relacionam e instanciar os objectos de forma a garantir que se alcanam os objectivos pretendidos.
203
2007/2008
204
2007/2008
tem numerador tem denominador Ao criar um Racional queremos indicar qual o numerador e o denominador tem um valor (float) quando avaliado (1/2 = 0.5)
205
2007/2008
206
2007/2008
public class Racional { public int getDenominador() { } return denominador; public int getNumerador() { }
return numerador;
207
public class Racional { public Racional (final int numerador, final int denominador) { this.numerador = numerador; this.denominador = denominador; }
//
208
2007/2008
mtodo(s)
construtor(es)
209
2007/2008
construtor
mtodo particular que tem por objectivo criar os objectos da classe; difere de outros mtodos (em especial das funes) em trs aspectos: tem o mesmo nome que a prpria classe; no devolve o que quer que seja (no tem valor de retorno); tem um operador new que invoca construtores
210
2007/2008
211
2007/2008
int mdc = mdc (numerador, denominador); numerador = numerador / mdc; denominador = denominador / mdc;
}
private int numerador; private int denominador; }
213
Introduo Programao - Aula 7
Vamos precisar de uma funo chamada mdc()? Construa a partir do exemplo da aula 2
2007/2008
reduz();
} private int numerador; private int denominador;
Procedimento da classe Racional. Racional x = new Racional(2, 3); Racional y = new Racional(7, 4); x.soma(y); // x fica com o valor 31/15
2007/2008
}
214
Introduo Programao - Aula 7
return resultado;
} private int numerador; private int denominador;
Funo da classe Racional. Racional x = new Racional(2, 3); Racional y = new Racional(7, 5); Racional z = x.soma(y); // z tm o valor 31/15, e x tem o valor 2/3
2007/2008
}
215
Introduo Programao - Aula 7
public class Racional { // public static Racional soma (final Racional r1, final Racional r2) { Racional resultado = new Racional(r1.numerador * r2.denominador + r2.numerador * r1.denominador, r1.denominador * r2.denominador ); resultado.reduz(); return resultado;
}
private int numerador; private int denominador; }
Funo da classe Racional (Mtodo de classe). Racional x = new Racional(2, 3); Racional y = new Racional(7, 5); Racional z = Racional.soma(x, y); // z tm o valor 31/15, e x tem o valor 2/3
Introduo Programao - Aula 7 2007/2008
216
}
217
Introduo Programao - Aula 7 2007/2008
public class Racional { numerador_lido = teclado.nextInt(); char separador = teclado.nextLine().charAt(0); // barra denominador_lido = teclado.nextInt(); return new Racional (numerador_lido, denominador_lido); } private int numerador; private int denominador; }
218
}
219
Introduo Programao - Aula 7 2007/2008
Classes e Objectos
//
}
Um objecto (instncia de uma classe) cada uma das variveis criadas a partir dessa definio
Racional resultado = new Racional(2, 3);
220
2007/2008
Criao de objectos
Racional r1 = new Racional (6, 9);
Racional r2 = new Racional (7, 3);
Objecto
Referncia
222
2007/2008
Objectos
: Racional
Referncias
numerador = 7 denominador = 3
Introduo Programao - Aula 7 2007/2008
223
2 referncias
2 racionais 4 int
224
denominador: int
9
Introduo Programao - Aula 7
denominador: int
3
2007/2008
Objectos e referncias
Racional x; Constri referncia nome_da_varivel para objecto da classe Racionalque ainda no existe. Contm lixo se for instncia local e null se for membro de classe.
Racional x = null;
Contm valor null
Constri referncia x para objecto da classe Racional, depois constri o prprio objecto Racional apontado pela referncia x , e chama o construtor para Introduo Programao - Aula 7 2007/2008 inicializar o objecto criado.
Operador .
referncia.membro
S se pode aceder a um membro de um objecto quando o objecto existe (i.e., se referncia a objecto no for null). Exemplos:
Racional r = new Racional(2, 3); int d = r.getDenominador(); float f = r.valorDecimal(); r.escreve();
226
2007/2008
Bloco de instrues
Conjunto de instrues agrupadas Funcionam (em certos sentidos) como uma s instruo
{ // Instrues: ... }
227
2007/2008
Variveis e mbitos
Variveis locais
Definidas dentro de mtodos Pertencem ao contexto do bloco de instrues onde foram definidas e a todos os blocos interiores Os parmetros so tambm variveis locais
Definidas fora das rotinas Pertencem ao contexto da classe So visveis em todos os mtodos da classe (excepto mtodos static)
Dentro do mesmo contexto no podem ser definidas duas variveis com o mesmo nome
Introduo Programao - Aula 7 2007/2008
228
Exemplo
public class Programa {
private int j = 1; public int soma(int x, int y) { // Bloco 3. int z = x+y; return z; } public static void main(String[] args) { int i = 2; if(0 < i) { int j = i; int k = 10; System.out.println(i + + j); // Bloco 2. // Bloco 1.
}
} }
Ocultao. A evitar !
Introduo Programao - Aula 7 2007/2008
229
}
}
230
2007/2008
Constantes de classe
public class CalculadorDoPermetro { //Muito teis para casos como este: public static final double = 3.14159; public static double permetroDeCircDeRaio(final double raio) { return 2.0 * * raio; }
231
2007/2008
Nomes (I)
Classes
Variveis
Instncias
Exemplo:
int nmero_de_alunos = 20;
Instncias booleanas
Exemplo:
232
2007/2008
Nomes (II)
Procedimentos
Exemplo:
public static void escreveFraco(final int n, final int d)
233
2007/2008
Nomes (III)
Funes
Substantivo ou frase substantiva: aquilo que devolvido Esta funo devolve Exemplo: public static double quadradoDe (final double x)
Afirmao que pode ser verdadeira ou falsa Esta funo devolve um valor que indica se Exemplo: public static boolean soIguais (final char a, final char b)
Introduo Programao - Aula 7 2007/2008
234
Grafismo
235
2007/2008
A reter...
Classes
Servem para agrupar dados e mtodos associados a um conceito Podem ser instanciadas criando objectos desse tipo Os objectos contm variveis (internas) e funes (acessveis usando o operador )
mbito de variveis
As variveis membro so visveis em toda a classe
A ler...
Captulo 10:
Y. Daniel Liang, "Introduction to Java Programming", 5 Edio, Prentice-Hall, 2005. ISBN: 0-13-185721 - 5
237
2007/2008
Aula 7: Sumrio
Sintaxe da definio de classes Sintaxe da definio de variveis de uma classe Acesso a variveis membro de uma classe
238
Aula 8
Leitura e escrita de dados em ficheiros
Na aula passada
Classes:
public class NomeDoTipo { private int varivel; // variveis membro (var. internas) float funo();
// mtodos (acessveis)
void procedimento();
}
// mtodos (acessveis)
Objectos:
240
241
2007/2008
Tipos fundamentais de dados, de input e output, trocados entre o sistema (pelo programa em execuo) e a) o ambiente (utilizador atravs do teclado ou monitor), b) outro programa ou um c) ficheiro (numa memria secundria):
dados binrios
dados textuais
baseados em bytes
baseados em caracteres
Estabelecem-se canais de comunicao ou fluxos de informao (streams): fluxos binrios fluxos de texto
242
2007/2008
Entradas e sadas
243
2007/2008
Insucesso?
Porque fonte de dados de leitura afinal no existe
244
2007/2008
Se houver problemas:
245
2007/2008
Lanamento de Excepes
246
2007/2008
Classe IOException
As excepes de I/O (E/S) esto relacionadas, em geral, com as operaes de entrada/sada (input/output), como p.e.,
247
2007/2008
Entradas e sadas
248
2007/2008
Entradas e sadas
Desde a verso 1.5 (2004) a classe Scanner permite-nos lidar de modo eficiente com o fluxo de input da classe System ( System.in )
249
2007/2008
Fluxos de dados associados leitura/escrita de dados atravs de um (ou num) ficheiro (Mendes & Marcelino,
2003, pg. 226)
250
2007/2008
Recorrendo varivel entrada podemos ler diferentes dados, p.e., um valor inteiro n (existem inmeros mtodos: de leitura, pesquisa, etc.):
int n = entrada.nextInt();
(Resumo do slide 23, Aula 03)
251
2007/2008
O acesso (mecnico) a memria secundria (p.e. disco rgido, CD, etc) bem mais lento que o acesso (electrnico) a memria primria (p.e. RAM), da haver memria intermediria ou tampo Buffer :
permite tratar conjuntos de 512, 1024 ou 2048 bytes de uma s vez, em lugar de byte a byte
...
252
2007/2008
Abertura de um ficheiro (sabendo o seu nome) Interaco do programa com o contedo do ficheiro (s leitura ou s escrita) A leitura (ou escrita) efectua-se continuamente do incio ao fim do ficheiro. Ateno: em geral no se pode voltar atrs (tal
como na escrita no ecr ou leitura de valores do teclado)
3.
4.
253
Abertura de um Ficheiro
S operaes de leitura de dados (do ficheiro) S operaes de escrita de dados (no ficheiro)
254
Obrigatrio usar:
Mecanismo de captura e tratamento de Excepes em Java
Na Abertura de Ficheiro
Porque pode falhar!
255
2007/2008
classe File
necessrio recorrer a outras classes especializadas, de acordo com o tipo de ficheiro e a operao em causa
256
2007/2008
FileReader - para operao de leitura (carcter a carcter) FileWriter - para operao de escrita (carcter a carcter)
Para criar objectos destas classes deve ter-se como parmetro um objecto da classe File correspondente ao ficheiro pretendido:
FileReader f1 = new FileReader (new File (nomeDoFicheiro)); FileWriter f2 = new FileWriter (new File (nomeDoFicheiro)); FileReader f1 = new FileReader (nomeDoFicheiro); FileWriter f2 = new FileWriter (nomeDoFicheiro);
f1 e f2 referenciam o ponto actual de leitura/escrita no ficheiro
ou, abreviadamente,
257
2007/2008
FileWriter
FileReader
FileReader (File)
read(): l apenas um carcter de cada vez **
** mtodos da classe BufferedWriter e BufferedReader, respectivamente
258
2007/2008
FileWriter
FileWriter f1 = new FileWriter (new File (nomeFicheiro)); FileWriter f1 = new FileWriter (nomeFicheiro);
FileReader
Classes para leitura e escrita de (linhas de) caracteres num ficheiro de texto
BufferedWriter
BufferedReader
260
261
2007/2008
Scanner (mais fcil de usar que FileReader, l e transforma no tipo de dados requerido)
para abertura de fich. em modo de leitura l at ao prximo separador l prximo inteiro l prximo decimal
boolean hasNext() V se uma nova palavra existe para ser lida boolean hasNextInt() V se um novo inteiro... boolean hasNextFloat() V se um novo decimal...
Introduo Programao - Aula 8 2007/2008
262
FileInputStream
read(): l apenas um byte (ou int) de cada vez (assinala fim-de-ficheiro devolvendo -1)
FileOutputStream
263
2007/2008
264
2007/2008
// Quando os dados esto em linhas separadas a ltima instruo pode ter // lido o fim da linha anterior por isso pode ter de ser repetida trim() retira if (tarifrio.equals()) { os espaos String tarifrio = ficheiro.nextLine(); do incio e fim da String tarifrio = tarifrio.trim(); } Telefonema t1 = new Telefonema (num, operadora, tarifrio);
265
Introduo Programao - Aula 8 2007/2008
266
2007/2008
Ficheiros: Escrita
try {
Escrita de objectos
private static final String SEPARADOR = " "; private static final String FIM_DE_REGISTO = "\r\n"; public String toString() { return new String (numero + SEPARADOR + operadora + SEPARADOR + tarifrio + FIM_DE_REGISTO); } public void escreveParaFicheiro(FileWriter ficheiro) { try { ficheiro.write (toString()); } catch (IOException e) { System.out.println ("Erro na escrita do Telefonema " + toString()); // ou System.out.println("Erro na escrita do Telefonema " + this); }
268
269
2007/2008
270
2007/2008
A reter...
Leitura de ficheiros
Classe Scanner
Escrita de ficheiros
271
2007/2008
A ler...
Captulo 8:
Y. Daniel Liang, "Introduction to Java Programming", 6 Edio, Prentice-Hall, 2007. ISBN: 0-13-185721 - 5
272
2007/2008
Aula 8: Sumrio
FileReader
FileWriter Scanner InputStreamReader OutputStreamWriter
273