Sie sind auf Seite 1von 12

Programao e Algoritmos II

2o semestre
ISCTEM
Agosto 2014
Docente: enga Tatiana Kovalenko

AULA TERICA 1
Reviso
Ficheiro de tipo texto
POO. Classes e Objectos. Array de Objectos

Elaborado por eng.Tatiana Kovalenko, UEM

Reviso: Ficheiro de tipo texto


Exemplo 1 de leitura do ficheiro e clculo de preo mdio
public static float lerDoFicheiro(String nf)
{StringTokenizer str; String umaLinha="", nomeArtigo;
int cod, cont=0; float s = 0, preco;
try
{ FileReader fr = new FileReader(nf);
BufferedReader fichIn = new BufferedReader(fr);
umaLinha = fichIn.readLine();
while (umaLinha != null)
{ str = new StringTokenizer (umaLinha);
cod = Integer.parseInt(str.nextToken());
nomeArtigo = str.nextToken();
preco = Float.parseFloat(str.nextToken());
s += preco;
umaLinha = fichIn.readLine();
cont++;
}
fichIn.close();
}catch (FileNotFoundException a)
{ System.out.println("Ficheiro "+nf+"nao encontrado!"); }
catch (NumberFormatException b){System.out.println(b.getMessage());}
catch (IOException c) {System.out.println(c.getMessage()); }
return s/cont;
}

Exemplo 2 de leitura do ficheiro e armazenamento no array de objectos


public void LerFichCriarArray(String nf)
{ StringTokenizer umaCadeia;
String umaLinha="", nom;
int qde; float pr;
try
{ FileReader fr = new FileReader(nf);
BufferedReader fichIn = new BufferedReader(fr);
umaLinha = fichIn.readLine();
while (umaLinha != null)
{ System.out.println(umaLinha);
umaCadeia = new StringTokenizer (umaLinha,";");
nom = umaCadeia.nextToken();
qde = Integer.parseInt(umaCadeia.nextToken());
pr = Float.parseFloat(umaCadeia.nextToken());
lista[cont] = new Produto(nom,qde,pr);
cont++;
umaLinha = fichIn.readLine();
}
fichIn.close();
}catch (FileNotFoundException a)
{ System.out.println("Ficheiro "+nf+"nao encontrado!"); }
catch (NumberFormatException b){System.out.println(b.getMessage());}
catch (IOException b) {System.out.println(b.getMessage()); }
}

Reviso: POO. Classes e Objectos. Array de Objectos


Em programao orientada aos objectos (POO) existem conjunto de princpios que
so o fundamento :
encapsulamento,
herana
polimorfismo.

Classes
Numa linguagem OO os programas funcionam atravs da criao de objectos, dos
comportamentos que estes so capazes de apresentar e da comunicao entre eles,
sendo permitido a um objecto solicitar a outro um determinado comportamento, de
entre os que tem definidos.
Os objectos no podem ser criados sem um molde que defina os seus atributos e
comportamentos. Este molde a classe e antes de criar um objecto necessrio
criar a respectiva classe. A partir desta classe podem ser criados vrios objectos,
cada um deles com atributos prprios, mas com os mesmos comportamentos.

Sintaxe de definio de classe:


[public] [abstract | final] class nomeDaClasse
{ //declaraes
//construtores
//mtodos
}
Os termos public, abstract e final so opcionais. Na declarao de uma
classe:
qualificador public significa que uma classe pblica e poder ser utilizada por
outras classes para instanciar (criar) objectos.
qualificador abstract indica que ela no poder instanciar nenhum objecto, ou
seja, nenhum objecto poder ser criado directamente a partir dela. As classes
abstractas geralmente so criadas com a finalidade de representar caractersticas
comuns de duas ou mais classes especializadas.
qualificador final indica que a classe no pode ser estendida, ou seja, no
podem ser criadas outras classes a partir dela.
Alm de serem opcionais, os qualificadores abstract e final so mutuamente
exclusivos e jamais podero ser utilizados em conjunto.
Os atributos, os construtores e os mtodos de uma classe so chamados
membros da classe.

Exemplo de uma classe que descreva caractersticas de um rectngulo utilizando POO.


import java.awt.*;
public class Rectangulo
{ //Atributos
private int posX, posY, comp, larg;
//Construtor da classe, promove a inicializao dos atributos
public Rectangulo(int pX, int pY, int c, int l)
{ posX = pX; posY = pY;
comp = c; larg = l; }
//Desenha rectangulo de acordo com os seus atributos
public void desenhaRect(Graphics g)
{ g.drawRect(posX, posY, comp, larg); }
//Apaga o rectangulo, usa comp+1 e larg+1 para garantir que o rect. fica dentro
public void apagaRect(Graphics g)
{ g.clearRect(posX, posY, comp+1, larg+1); }
//Muda a localizaao do rectangulo,recebe as novas coord. do canto sup.esquerdo
public void mudaPosicao(Graphics k, int newpX, int newpY)
{ apagaRect(k);
posX = newpX;
posY = newpY;
desenhaRect(k);
}

public void mudaTamanho(Graphics f, int newC, int newL)


{ apagaRect(f);
comp = newC;
larg = newL;
desenhaRect(f);
}
}
O applet que utiliza a classe Rectangulo:
import java.awt.*;
import java.applet.Applet;
public class AppletExec extends Applet
{ public void paint (Graphics g)
{ Rectangulo rect = new Rectangulo(20,20,150,120);
for ( byte i = 0; i < 30; i++ ) //while(true)
{ try
{ Thread.sleep(800); } catch (Exception z) {}
rect.mudaTamanho(g, 150+2*i, 120+3*i);
rect.mudaPosicao(g, 30+2*i, 50+2*i);
}
}
}
Ficheiro HTML:
<Title> Exemplo </Title>
<APPLET CODE = AppletExec.class WIDTH=800 HEIGHT=600></APPLET>

Reviso: Array de objectos

Caracterstica importante de array de objectos: criao de array e criao de objectos,


que sero armazenados no array, so duas coisas separadas.
Instanciao de um array de objectos reserva o espao para armazenamento somente
das referencias. Objectos que devem ser armazenados num array devem ser
instanciados separadamente.
Exemplo: Tomando em considerao que a classe Associado j foi criada, bem assim
como um array de objectos Associado[] lista com dados dos 200 associados,
pretende-se que elabore uma classe que permita devolver o valor mdio de
mensalidades somente dos associados do tipo A, gravar no ficheiro Lista.txt
informao completa sobre um associado cujo cdigo passado via parmetro, ler info
do ficheiro criado e visualizar no ecr.
import java.io.*;
public class Tarefas2
{ public Tarefas2() {}
public float mediaMens(Associado[] lista)
{ float total=0; int contA=0;
for (int i=0;i<200; i++)
if(lista[i].getTipoAssoc()=='A')
{ contA++;
total += lista[i].getMensal();
}
return Math.round(total/contA);
}

public void gravar(Associado[] x,int cod, String nome)


{ try
{ FileWriter f = new FileWriter(nome);
BufferedWriter b = new BufferedWriter(f);
for (int i=0;i<200; i++)
if(x[i].getCod()== cod)
b.write(x[i].toString());
else
System.out.println(Codigo nao encontrado!);
b.close();
} catch (IOException m) { System.out.println(m); }
}
public void lerDoFich(String nomeFich)
{ String umaLinha;
try
{ FileReader ff = new FileReader(nomeFich);
BufferedReader bb = new BufferedReader(ff);
umaLinha = bb.readLine();
while (umaLinha != null)
{ System.out.println(umaLinha);
umaLinha = bb.readLine();
}
} catch (FileNotFoundException k)
{ System.out.println("Ficheiro nao encontrado!); }
catch (IOException m) { System.out.println(m); }
bb.close(); }}

Leitura do teclado sem uso da classe Le


Exemplo de clculo de soma de dois nmeros recebidos do teclado.
import java.io.*;
public class SomaValores
{ public static void main(String[] args)
{ //Declarao de variveis
int val1, val2;
long soma;
BufferedReader x =
new BufferedReader(new InputStreamReader(System.in));
//L valor de val1 e val2
System.out.print("Introduza o 1-o valor: ");
try
{ val1 = Integer.parseInt(x.readLine());
System.out.print("Introduza o 2-o valor : ");
val2 = Integer.parseInt(x.readLine());
soma = val1 + val2;
} catch (NumberFormatException b
{System.out.println(b.getMessage())}
catch (IOException b) {System.out.println(b); }
System.out.println("A soma entre "+val1+" e "+
val2+" igual a " + soma);
}}

Referncia bibliogrfica:
Antnio Jos Mendes; Maria Jos Marcelino.
Fundamentos de programao em Java 2. FCA. 2002.
Elliot Koffman; Ursula Wolz.
Problem Solving with Java. 1999.

F. Mrio Martins;
Programao Orientada aos objectos em Java 2, FCA, 2000,
John Lewis, William Loftus;
Java Software Solutions: foundation of program design, 2nd edition, Addision-Wesley
John R. Hubbard.
Theory and problems of programming with Java. Schaums Outline series. McGraw-Hill.
H. Deitel; P. Deitel.
Java, como programar. 4 edio. 2003. Bookman.
Rui Rossi dos Santos.
Programando em Java 2 Teoria e aplicaes. Axcel Books. 2004