Aula 13

18
Programação em Java 2006-2007 Aula 13 Classes e Objectos

description

Aula 13. Classes e Objectos. Introdução. Java é uma linguagem de programação orientada a objectos (POO) , mas aceita os outros paradigmas de programação de um nível de desenvolvimento inferior, tais como programação estruturada e programação imperativa. - PowerPoint PPT Presentation

Transcript of Aula 13

Page 1: Aula 13

Programação em Java 2006-2007

Aula 13

Classes e Objectos

Page 2: Aula 13

Programação em Java 2006-2007 2

Introdução

ProgramaProgramaçção Orientada a Objectosão Orientada a Objectos

ProgramaProgramaçção Estruturadaão Estruturada

ProgramaProgramaçção ão ProceduralProcedural

ProgramaProgramaçção Orientada a Objectosão Orientada a Objectos

ProgramaProgramaçção Estruturadaão Estruturada

ProgramaProgramaçção ão ProceduralProcedural

nív

el

paradigma de programação estilo de programação

Também chamada imperativa. Organiza o código em funções

(subprogramas)

Organiza código em subprogramas dando especial atenção às

estruturas de dados.

Encapsula dados (atributos) e subprogramas (métodos) em

componentes (classes)

Java é uma linguagem de programação orientada a objectos programação orientada a objectos (POO)(POO), mas aceita os outros paradigmas de programação de um nível

de desenvolvimento inferior, tais como programação estruturada programação estruturada e programação imperativaprogramação imperativa

Page 3: Aula 13

Programação em Java 2006-2007 3

objectoobjecto = atributos (dados) + métodosmétodos (subprogramas)

objectoobjecto = instância de uma classe

classeclasse = molde (padrão) para criar objectos similares

Objectos e Classe

Classe: AlunoJavaatributos nº mecanográfico nome nota aval.periódica nota do exame final nº de faltas às TP nº de faltas às Pmétodos calcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno1atributos nº mec.: 23478 nome: João Pires nota aval.periódica: 16 nota exame final: 18 nº de faltas às TP: 1 nº de faltas às P: 0métodos calcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno2atributos nº mec.: 25506nome: Luisa Santos nota aval.periódica: 15nota exame final: 13nº de faltas às TP: 0 nº de faltas às P: 0métodos calcular a nota final reprovou por faltas? pode ir a exame final?

Classe - padrão

Objecto - instância Objecto - instância

Page 4: Aula 13

Programação em Java 2006-2007 4

Objectos

Os objectos aluno1aluno1 e aluno2aluno2 foram

criados a partir do molde definido pela

classe AlunoJavaAlunoJava

O número de objectos que pode ser

criado a partir de uma classe

não é limitado

Convenção de nomes: os nomes das classes começam com

maiúsculas

os nomes dos objectos começam com

minúsculas

Classe: AlunoJavaatributosnº mecanográficonomenota aval.periódicanota do exame finalnº de faltas às TP nº de faltas às Pmétodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Classe: AlunoJavaatributosnº mecanográficonomenota aval.periódicanota do exame finalnº de faltas às TP nº de faltas às Pmétodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Classe: AlunoJavaatributosnº mecanográficonomenota aval.periódicanota do exame finalnº de faltas às TP nº de faltas às Pmétodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno1atributosnºmec.: 23478nome: J oão Piresnota aval.periódica: 16nota exame final: 18nºde faltas às TP: 1 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno1atributosnºmec.: 23478nome: J oão Piresnota aval.periódica: 16nota exame final: 18nºde faltas às TP: 1 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno1atributosnºmec.: 23478nome: J oão Piresnota aval.periódica: 16nota exame final: 18nºde faltas às TP: 1 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno2atributosnºmec.: 25506nome: Luisa Santos nota aval.periódica: 15nota exame final: 13nºde faltas às TP: 0 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno2atributosnºmec.: 25506nome: Luisa Santos nota aval.periódica: 15nota exame final: 13nºde faltas às TP: 0 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Objecto: aluno2atributosnºmec.: 25506nome: Luisa Santos nota aval.periódica: 15nota exame final: 13nºde faltas às TP: 0 nºde faltas às P: 0métodoscalcular a nota final reprovou por faltas? pode ir a exame final?

Os objectos são entidades criadas a partir de uma classe e possuem um estado (definido pelos seus atributos atributos )

e um comportamentocomportamento (definido pelos seus métodosmétodos)

Page 5: Aula 13

Programação em Java 2006-2007 5

Passos para criar uma Classe

1. Definir nome da classe2. Definir atributos (variáveis)3. Definir construtores

construtor - método utilizado para criar e inicializar os objectos da classe

subprograma com o mesmo nome da classe sem valor de retorno

cada classe deve ter pelo menos um construtor

4. Definir métodos (subprogramas)5. Guardar em ficheiro com nome:

NomeClasse.java

public class Produto extends P1App { // atributos da classe Produto int codigocodigo; String designacaodesignacao; double precoUnitprecoUnit; int quantStockquantStock; // construtor para a classe Produto public Produto (int c, String d, double p, int q) { codigocodigo = c; designacao designacao = d; precoUnit precoUnit = p; quantStockquantStock = q; }public void entradaEmStock (int numUnidades) { quantStockquantStock = quantStockquantStock + numUnidades; }}

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Este método modifica o estado do atributo quantStockquantStock (note que o tipo de dados de saída é void void )

Page 6: Aula 13

Programação em Java 2006-2007 6

Criação de Objectos

A declaração de um objecto é semelhante à das variáveis de tipo primitivo

NomeClasse nomeObjectoExemplo: Produto p1;

Nota: Esta declaração por si só não cria o objecto.

Apenas reserva na memória um espaço capaz de armazenar um endereço da memoria (referencia) onde este objecto venha a ser armazenado.

A criação de um objecto é feita usando newnewnomeObjecto = new NomeClasse(parâm.)

Exemplo:

p1 = new new Produto Produto ((1, "Computador portátil", 1100.00, 0)

Nota: newnew encarrega-se de chamar o construtor da

classe. Entre parêntesis devem ser passados os respectivos parâmetros, se houver

public class Produto extends P1App { // atributos da classe Produto int codigocodigo; String designacaodesignacao; double precoUnitprecoUnit; int quantStockquantStock; // construtor para a classe Produto public Produto (int c, String d, double p, int q) { codigocodigo = c; designacao designacao = d; precoUnit precoUnit = p; quantStockquantStock = q; }// métodos associados à classe Produto ….. }}

Depois de construir uma classe, é possível escrever um outro programa que utilize objectos criados a partir desta classe

Page 7: Aula 13

Programação em Java 2006-2007 7

Declaração, Criação e Inicialização

int cod, quant;double preco;String design;//1º. declarar 2º produto ProdutoProduto p2p2; // 2º. ler os dados do 2º produto do teclado println("Produto #2"); cod = readInt (" . código do produto: "); design = readLine (" . designação : "); preco = readDouble(" . preço unitário : "); println(); // 3º. Criar objecto com nome p2 p2p2 = new new ProdutoProduto(cod, design, preco, 0);

Exemplo:

NomeClasse nomeObjecto nomeObjecto = newnew NomeClasse(parâmetros_do_construtor)NomeClasse nomeObjecto nomeObjecto = newnew NomeClasse(parâmetros_do_construtor)

Ou podemos apenas declarar o objecto para logo cria-lo e inicializá-lo

ProdutoProduto p1 = new new Produto Produto ((1, "Computador portátil", 1100.00, 0)

Exemplo:

Podemos declarar, criar e inicializar um objecto numa única instrução

public class Produtoextends P1App {

// atributos daclasseProdutoint codigocodigo;String designacaodesignacao;double precoUnitprecoUnit;int quantStockquantStock; // construtorparaa classeProdutopublic Produto (int c, String d, double p, int q) {codigocodigo = c;designacaodesignacao= d;precoUnitprecoUnit = p;quantStockquantStock= q;

}// métodos associados àclasseProduto…..}

}

Page 8: Aula 13

Programação em Java 2006-2007 8

// declarar e criar um objecto da classe Produto Produto pp = newnew Produto(1, "Computador portátil", 1100.00, 0);// mostrar no ecrã o stock inicial (mostra 0) println(“stock inicial: ” + p.stockstock)// actualizar stock p.entradaEmStockentradaEmStock(5)(5)// mostrar no ecrã o stock actualizado (mostra 5) println(“stock actual: “ + p.stockstock)

Exemplo:

Acedendo aos atributose invocando métodos

Para aceder a um atributo de um objecto: nomeObjecto.nomeAtributonomeObjecto.nomeAtributonomeObjecto.nomeAtributonomeObjecto.nomeAtributo

Para invocar um método:nomeObjecto.nomeMétodo nomeObjecto.nomeMétodo (parâmetros) (parâmetros) nomeObjecto.nomeMétodo nomeObjecto.nomeMétodo (parâmetros) (parâmetros)

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Classe: ProdutoatributoscodigodesignacaoprecoUnitquantStockmétodosentradaEmStock

Page 9: Aula 13

Programação em Java 2006-2007 9

Exemplo 1: Gestão de Produtos

importimport p1.*;public classpublic class Pr_13_1_GestProdutos extendsextends P1App { public static voidpublic static void main(String [] args) { int cod, quant; double preco; String design; // declarar e criar um objecto da classe Produto Produto p1p1 = newnew Produto(1, "Computador portátil", 1100.00, 0); // declarar outro objecto da classe Produto Produto p2p2; // ler os dados do 2º produto println("Produto #2"); cod = readInt (" . código do produto: "); design = readLine (" . designação : "); preco = readDouble(" . preço unitário : "); println(); // criar e inicializar dados do 2º produto p2p2 = new Produto (cod, design, preco, 0); // mostrar os valores de cada produto println("Produto #1:"); mostrarAtributos(p1p1); println("Produto #2:"); mostrarAtributos(p2);

// subprograma que imprime os atributos de um produto public static void mostrarAtributos(Produto p) { println(" . código -> " + p.codigo p.codigo); println(" . designação -> " + pp..designacaodesignacao); print (" . preço unitário -> "); printfd(4,2, pp.precoUnitprecoUnit); println();

println(" . quantidade em stock -> " + p.quantStockp.quantStock); println(); } // fecho suprograma

} // fecho main} // fecho programa

Dois objectos (instâncias) da classe ProdutoProduto são criados, com nomes

p1p1 e p2

Page 10: Aula 13

Programação em Java 2006-2007 10

Problema 1. Supondo que a empresa comercializa apenas dois produtos, alterar o exemplo anterior para que este passe implementar um pequeno sistema de gestão de produtos em stock. O programa deverá ter o seguinte menu de opções: 1. Listar produtos 2. Entrada em stock 3. Saída (venda) 4. Encomenda 0. Terminar

Page 11: Aula 13

Programação em Java 2006-2007 11

public static void main(String args[]) { // declaração de variáveis do { // repetir enquanto opção <> 0 println(“Menu"); println(" 1 – Listar Produtos"); println(" 2 – Entrada em Stock"); println(" 3 - Saída (venda)”); println(" 4 - Produtos a Encomendar”); println(" 0 - Terminar o programa”); op = readInt(“Seleccione uma opção ", 0, 4);

switchswitch (op) { casecase 1: // listar produtos break; casecase 2: // entrada em stock breakbreak;

casecase 3: // venda breakbreak;

casecase 4: // Produtos a encomendar breakbreak;} whilewhile (op !=0); } // fecha main

public static void main(String args[]) { // declaração de variáveis do { // repetir enquanto opção <> 0 println(“Menu"); println(" 1 – Listar Produtos"); println(" 2 – Entrada em Stock"); println(" 3 - Saída (venda)”); println(" 4 - Produtos a Encomendar”); println(" 0 - Terminar o programa”); op = readInt(“Seleccione uma opção ", 0, 4);

switchswitch (op) { casecase 1: // listar produtos break; casecase 2: // entrada em stock breakbreak;

casecase 3: // venda breakbreak;

casecase 4: // Produtos a encomendar breakbreak;} whilewhile (op !=0); } // fecha main

Problema 1: Menu de Operações

A opção “1. Listar produtos” deve listar todos os dados associados aos dois produtos usando o subprograma mostrarAtributos como mostrado no exemplo anterior

Page 12: Aula 13

Programação em Java 2006-2007 12

Problema 1. Opção 2 – Entrada em Stock

Variáveis: int codcod, quantquant; Produto p1p1, p2p2;Algoritmo:

switchswitch (op) { …… casecase 2: // entrada em stock Leitura do código do produto a entrar (codcod););

SESE codigo válido { Leitura da quantidade do produto a entrar (quant)quant); Entrar quant quant do produto em stockdo produto em stock;

Mostrar no ecrã o stock actualizado;

} CASO CONTRÁRIOCASO CONTRÁRIO

Escrever mensagem “código não válido”; Escrever mensagem “prima <enter> para continuar”; break;}

Usar o método entradaEmStock da classe Produto

Classe: Produtoatributos codigo designacao precoUnit quantStockmétodos entradaEmStock

Page 13: Aula 13

Programação em Java 2006-2007 13

Problema 1. Opção 3 – Venda

casecase 3: // saída (venda) Leitura do código do produto a entrar (codcod););

SESE (código válido) { Leitura da quantidade do produto a vender (quant);quant); Venda de produto (quant);quant); SESE (foi possível vender) Mostrar no ecrã o valor da venda; Mostrar no ecrã o stock actualizado; CASO CONTRÁRIO CASO CONTRÁRIO

Escrever mensagem “stock não suficiente”; } CASO CONTRÁRIO CASO CONTRÁRIO

Escrever mensagem “código não válido”; Escrever mensagem “prima <enter> para continuar”; break;

Classe: Produtoatributos codigo designacao precoUnit quantStockmétodos entradaEmStockvendavenda

acrescentar o método venda à classe Produto. Este método deve receber como parâmetro o nº de unidades vendidas numUnidadesnumUnidades SE nº de unidades do produto em stock é suficiente para satisfazer o pedido: 1º. subtrair do stock numUnid 2º. devolver o valor da venda (quantidade x preço unitário); CASO CONTRARIO: devolver um valor negativo

Page 14: Aula 13

Programação em Java 2006-2007 14

Problema 1. Opção 4 – Encomenda

casecase 4: // encomendar produtosSE SE (p1.verificarPontoEncomendap1.verificarPontoEncomenda() > 0 ){ Mostrar dados do produto # 1 (modificar o subprograma “mostrarAtributos”):

Produto #1 . código -> 1 . designação -> Computador portátil . preço unitário -> 1100,00 . quantidade em stock -> 0 . pontoEncomenda -> 4

Mostrar quantidade mínima a encomendar: quantidade mínima a encomendar: 4 unidades

} SE SE (p2.verificarPontoEncomendap2.verificarPontoEncomenda() > 0 ){ Mostrar dados do produto # 2 Mostrar quantidade mínima a encomendar: }

Escrever mensagem “prima <enter> para continuar”; break; break;

1. acrescentar o atributo pontoEncomendapontoEncomenda -

o nº mínimo de unidades que deverão existir em stock de forma a evitar eventuais rupturas de stock (isto leva a modificar o construtor da classe e o programa principal)

2. acrescentar o método verificarPontoEncomendaverificarPontoEncomenda

SESE (pontoEncomenda – quantStock > 0) devolver este valor que corresponde ao nº mínimo de unidades a encomendar para regularizar o stock; CASO CONTARIO devolver o valor zero

Classe: Produtoatributos codigo designacao precoUnit quantStock pontoEncomendapontoEncomendamétodos entradaEmStockvendavendaverificarPontoEncomverificarPontoEncomendaenda

Page 15: Aula 13

Programação em Java 2006-2007 15

A Classe String: uma classe do pacote java.lang

String nome_do_string nome_do_string = newnew String(“texto”)String nome_do_string nome_do_string = newnew String(“texto”)

StringString str = new new StringString(“Bom dia turma”);

Exemplos:

Podemos assim declarar, criar e inicializar um objecto da classe String:

Uma vez instanciado um objecto da classe String podemos invocar todos os seus métodos:

nomeObjecto.nomeMétodo nomeObjecto.nomeMétodo (parâmetros) (parâmetros) nomeObjecto.nomeMétodo nomeObjecto.nomeMétodo (parâmetros) (parâmetros)

int n = int n = str.lengthstr.length(); (); char c = str.charAttstr.charAtt(2);String s = str.substring(8)

int n = int n = str.lengthstr.length(); (); char c = str.charAttstr.charAtt(2);String s = str.substring(8)

Todas as classes definidas em Java estão bem documentadas no site da

Sun (java.sun.com)Toda a documentação sobre todos

os métodos da classe String podem ser consultados on-line em:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#method_summary

Exemplo:

Page 16: Aula 13

Programação em Java 2006-2007 16

Classes usadas com FicheirosBufferedReader, FileReader, BufferedWriter, FileWriter

Todas estas classes pertencem ao pacote java.ioDocumentação on-line em: http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html

import java.io.*;class Ex_12_1_lerFicheiro extends P1App { static void main(String [] args) throws IOExceptionthrows IOException { String s, nomeFx; // atribuir a nomeFx o nome do ficheiro nomeFx = “teste1.txt”; // declarar um objecto da classe BufferedReader BufferedReaderBufferedReader f; // cria e inicializa o objecto com nome f da classe BufferedReader f = new BufferedReader(new FileReaderFileReader(nomeFx)); // lee a primeira linha do ficheiro s = f.readLinef.readLine(); // readLine é um método da classe BufferedReader }}

Exemplo:

A documentação sobre todas as classes de Java pode ser consultada em: http://java.sun.com/j2se/1.4.2/docs/api/allclasses-noframe.html

Page 17: Aula 13

Programação em Java 2006-2007 17

A classe Math

A classe Math é uma das classes do pacote java.lang.

Esta inclui um vasto conjunto de métodos que implementam diversas funções matemáticas

As classes pertencentes ao pacote

java.lang das “JAVA API classes”,

tais como MathMath, SystemSystem, StringString,

etc., não precisam ser importadas

toda a documentação sobre os métodos da classe Math está disponível em: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html

import p1;class Ex_2_5_ClasseMath extends P1App { public static void main(String args[]) { println("abs(-30): " + Math.abs(-30) ); println("acos(0.5): " + Math.acos(0.5) ); println("asin(0.5): " + Math.asin(0.5) ); println("atan(60): " + Math.atan(60) ); println("ceil(5.215): " + Math.ceil(5.215) ); println("ceil(-5.215): " + Math.ceil(-5.215) ); println("cos(60): " + Math.cos(60) ); println("exp(10): " + Math.exp(10) ); println("floor(54.687): " + Math.floor(54.687) ); println("floor(-54.687): " + Math.floor(-54.687) ); println("log(2): " + Math.log(2) ); println("max(5,7): " + Math.max(5,7) ); println("min(-3,2): " + Math.min(-3,2) ); println("pow(2,3): " + Math.pow(2,3) ); println("random(): " + Math.random() ); println("round(13.124): " + Math.round(13.124) ); println("sin(30): " + Math.sin(30) ); println("sqrt(16): " + Math.sqrt(16) ); println("tan(45): " + Math.tan(45) ); println("toDregrees(2): " + Math.toDegrees(2) ); println("toRadians(90): " + Math.toRadians(90) ); } }

Page 18: Aula 13

Programação em Java 2006-2007 18

Bibliografia

António José Mendes, Maria José Marcelino. Fundamentos de programação em JAVA 2.FCA – Editora de informática, 2003.

Tutorial da Sun sobre classes e Objectos em Javahttp://java.sun.com/docs/books/tutorial/java/javaOO/index.html