Aula 13
description
Transcript of Aula 13
Programação em Java 2006-2007
Aula 13
Classes e Objectos
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
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
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)
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 )
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
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…..}
}
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
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
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
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
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
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
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
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:
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
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) ); } }
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