sem01_revisao.pdf

12
ISCTEM Agosto 2014 Docente: eng a Tatiana Kovalenko Programação e Algoritmos II 2 o semestre

Upload: crimildo-moises

Post on 04-Dec-2015

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: sem01_revisao.pdf

ISCTEM Agosto 2014

Docente: enga Tatiana Kovalenko

Programação e Algoritmos II 2o semestre

Page 2: sem01_revisao.pdf

AULA TEÓRICA 1

Revisão Ø Ficheiro de tipo texto Ø POO. Classes e Objectos. Array de Objectos

Elaborado por eng.Tatiana Kovalenko, UEM

Page 3: sem01_revisao.pdf

Revisão: Ficheiro de tipo texto

Exemplo 1 de leitura do ficheiro e cálculo de preço médio 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; }

Page 4: sem01_revisao.pdf

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()); } }

Page 5: sem01_revisao.pdf

Revisão: POO. Classes e Objectos. Array de Objectos

Em programação orientada aos objectos (POO) existem conjunto de princípios que

são o fundamento :

Ø  encapsulamento,

Ø  herança

Ø  polimorfismo.

Classes

Numa linguagem OO os programas funcionam através da criação de objectos, dos

comportamentos que estes são capazes de apresentar e da comunicação entre eles,

sendo permitido a um objecto solicitar a outro um determinado comportamento, de

entre os que tem definidos.

Os objectos não podem ser criados sem um “molde” que defina os seus atributos e

comportamentos. Este “molde” é a classe e antes de criar um objecto é necessário

criar a respectiva classe. A partir desta classe podem ser criados vários objectos,

cada um deles com atributos próprios, mas com os mesmos comportamentos.

Page 6: sem01_revisao.pdf

Sintaxe de definição de classe:

[public] [abstract | final] class nomeDaClasse { //declarações //construtores //métodos }

Os termos public, abstract e final são opcionais. Na declaração de uma classe:

Ø qualificador public significa que uma classe é pública e poderá ser utilizada por outras classes para instanciar (criar) objectos.

Ø qualificador abstract indica que ela não poderá instanciar nenhum objecto, ou seja, nenhum objecto poderá ser criado directamente a partir dela. As classes abstractas geralmente são criadas com a finalidade de representar características comuns de duas ou mais classes especializadas.

Ø qualificador final indica que a classe não pode ser estendida, ou seja, não podem ser criadas outras classes a partir dela.

Além de serem opcionais, os qualificadores abstract e final são mutuamente exclusivos e jamais poderão ser utilizados em conjunto.

Os atributos, os construtores e os métodos de uma classe são chamados membros da classe.

Page 7: sem01_revisao.pdf

Exemplo de uma classe que descreva características de um rectângulo utilizando POO.

import java.awt.*; public class Rectangulo { //Atributos private int posX, posY, comp, larg;

//Construtor da classe, promove a inicialização 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 localizaçao 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); }

Page 8: sem01_revisao.pdf

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>

Page 9: sem01_revisao.pdf

Revisão: Array de objectos Característica importante de array de objectos: criação de array e criação de objectos, que serão armazenados no array, são duas coisas separadas.

Instanciação de um array de objectos reserva o espaço para armazenamento somente das referencias. Objectos que devem ser armazenados num array devem ser instanciados separadamente. Exemplo: Tomando em consideração 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 médio de mensalidades somente dos associados do tipo ‘A’, gravar no ficheiro “Lista.txt” informação completa sobre um associado cujo código é passado via parâmetro, 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); }

Page 10: sem01_revisao.pdf

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(); }}

Page 11: sem01_revisao.pdf

Leitura do teclado sem uso da classe Le

Exemplo de cálculo de soma de dois números recebidos do teclado.

import java.io.*; public class SomaValores { public static void main(String[] args) { //Declaração de variáveis 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); }}

Page 12: sem01_revisao.pdf

Referência bibliográfica:

António José Mendes; Maria José Marcelino. “Fundamentos de programação em Java 2”. FCA. 2002.

Elliot Koffman; Ursula Wolz. “Problem Solving with Java”. 1999.

F. Mário Martins; “Programação 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”. Schaum’s Outline series. McGraw-Hill.

H. Deitel; P. Deitel. “Java, como programar”. 4 edição. 2003. Bookman.

Rui Rossi dos Santos. “Programando em Java 2– Teoria e aplicações”. Axcel Books. 2004