Aula 13
Classes e Objectos
Programação em Java 2006-2007
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
nível
Programação Orientada a Objectos
Encapsula dados (atributos) e
subprogramas (métodos) em
componentes (classes)
Programação Estruturada
Programação Procedural
paradigma de programação  estilo de programação
Programação em Java 2006-2007
Organiza código em
subprogramas dando especial
atenção às estruturas de dados.
Também chamada imperativa.
Organiza o código em funções
(subprogramas)
2
Objectos e Classe
objecto = atributos (dados) + métodos (subprogramas)
objecto = instância de uma classe
classe = molde (padrão) para criar objectos similares
Classe - padrão
Objecto - instância
Classe: AlunoJava
Objecto - instância
Objecto: aluno1
atributos
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: 0
métodos
calcular a nota final
reprovou por faltas?
pode ir a exame final?
atributos
nº mecanográfico
nome
nota aval.periódica
nota do exame final
nº de faltas às TP
nº de faltas às P
métodos
calcular a nota final
reprovou por faltas?
pode ir a exame final?
Programação em Java 2006-2007
Objecto: aluno2
atributos
nº mec.: 25506
nome: Luisa Santos
nota aval.periódica: 15
nota exame final: 13
nº de faltas às TP: 0
nº de faltas às P: 0
métodos
calcular a nota final
reprovou por faltas?
pode ir a exame final?
3
Objectos
Os objectos são entidades criadas a partir de uma classe e possuem
um estado (definido pelos seus atributos )
e um comportamento (definido pelos seus métodos)
Objecto: aluno1

atributos
Os objectos aluno1 e aluno2 foram
Classe: AlunoJava
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: 0
atributos
métodos
criados a partir do molde definido pela
classe AlunoJava

O número de objectos que pode ser
criado
a
partir
de
uma
classe
não é limitado

Convenção de nomes:

métodos
os nomes das classes começam com
maiúsculas

nº mecanográfico
nome
nota aval.periódica
nota do exame final
nº de faltas às TP
nº de faltas às P
calcular a nota final
reprovou por faltas?
pode ir a exame final?
os nomes dos objectos começam com
calcular a nota final
reprovou por faltas?
pode ir a exame final?
Objecto: aluno2
atributos
nº mec.: 25506
nome: Luisa Santos
nota aval.periódica: 15
nota exame final: 13
nº de faltas às TP: 0
nº de faltas às P: 0
métodos
minúsculas
calcular a nota final
reprovou por faltas?
pode ir a exame final?
Programação em Java 2006-2007
4
Classe: Produto
atributos
codigo
designacao
precoUnit
quantStock
Passos para criar
uma Classe
métodos
entradaEmStock
public class Produto extends P1App {
// atributos da classe Produto
int codigo;
String designacao;
double precoUnit;
int quantStock;
// construtor para a classe Produto
public Produto (int c, String d, double p, int q) {
codigo = c;
designacao = d;
precoUnit = p;
quantStock = q;
}
public void entradaEmStock (int numUnidades) {
quantStock = quantStock + numUnidades;
}
}
1. Definir nome da classe
2. 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
Este método modifica o estado do
atributo quantStock (note que o
tipo de dados de saída é void )
Programação em Java 2006-2007
5
Criação de Objectos
Depois de construir uma classe, é possível escrever um outro
programa que utilize objectos criados a partir desta classe
public class Produto extends P1App {
// atributos da classe Produto
int codigo;
String designacao;
double precoUnit;
int quantStock;
// construtor para a classe Produto
public Produto (int c, String d, double p, int q) {
codigo = c;
designacao = d;
precoUnit = p;
quantStock = q;
}
// métodos associados à classe Produto
…..
}
}
 A declaração de um objecto é semelhante à
das variáveis de tipo primitivo
NomeClasse nomeObjecto
Exemplo:
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 new
nomeObjecto = new NomeClasse(parâm.)
Exemplo:
p1 = new Produto (1, "Computador portátil",
1100.00, 0)
Nota: new encarrega-se de chamar o construtor da
classe. Entre parêntesis devem ser passados os
respectivos parâmetros, se houver
Programação em Java 2006-2007
6
Declaração, Criação e Inicialização
Podemos declarar, criar e inicializar um objecto numa única instrução
NomeClasse nomeObjecto = new NomeClasse(parâmetros_do_construtor)
Exemplo:
Produto p1 = new Produto (1, "Computador portátil", 1100.00, 0)
Ou podemos apenas declarar o objecto para logo cria-lo e inicializá-lo
Exemplo:
public class Produto extends P1App {
int cod, quant;
double preco;
String design;
//1º. declarar 2º produto
Produto p2;
// 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
p2 = new Produto(cod, design, preco, 0);
Programação em Java 2006-2007
// atributos da classe Produto
int codigo;
codigo
String designacao;
designacao
double precoUnit;
precoUnit
int quantStock;
quantStock
// construtor para a classe Produto
public Produto (int c, String d, double p, int q) {
codigo = c;
designacao = d;
precoUnit = p;
quantStock = q;
}
// métodos associados à classe Produto
…..
}
}
7
Acedendo aos atributos
e invocando métodos
Para aceder a um atributo de um objecto:
Para invocar um método:
Exemplo:
nomeObjecto.nomeAtributo
nomeObjecto.nomeMétodo (parâmetros)
Classe: Produto
atributos
codigo
designacao
precoUnit
quantStock
métodos
entradaEmStock
// declarar e criar um objecto da classe Produto
Produto p = new Produto(1, "Computador portátil", 1100.00, 0);
// mostrar no ecrã o stock inicial (mostra 0)
println(“stock inicial: ” + p.stock)
// actualizar stock
p.entradaEmStock(5)
// mostrar no ecrã o stock actualizado (mostra 5)
println(“stock actual: “ + p.stock)
Programação em Java 2006-2007
8
Exemplo 1: Gestão de Produtos
import p1.*;
// subprograma que imprime os atributos de um produto
public class Pr_13_1_GestProdutos extends P1App { public static void mostrarAtributos(Produto p) {
public static void main(String [] args) {
println(" . código
-> " + p.codigo);
int cod, quant;
println(" . designação
-> " + p.designacao);
double preco;
print (" . preço unitário
-> ");
String design;
printfd(4,2, p.precoUnit); println();
// declarar e criar um objecto da classe Produto
println(" . quantidade em stock -> " + p.quantStock);
Produto p1 = new Produto(1, "Computador portátil", println();
1100.00, 0);
} // fecho suprograma
// declarar outro objecto da classe Produto
Produto p2;
} // fecho main
// ler os dados do 2º produto
} // fecho programa
println("Produto #2");
cod = readInt (" . código do produto: ");
design = readLine (" . designação
: ");
preco = readDouble(" . preço unitário : ");
println();
Dois objectos (instâncias)
// criar e inicializar dados do 2º produto
da classe Produto são
p2 = new Produto (cod, design, preco, 0);
criados, com nomes
// mostrar os valores de cada produto
println("Produto #1:");
p1 e p2
mostrarAtributos(p1);
println("Produto #2:");
mostrarAtributos(p2);
Programação em Java 2006-2007
9
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
10
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
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);
switch (op) {
case 1:
// listar produtos
break;
case 2:
// entrada em stock
break;
case 3:
// venda
break;
case 4:
// Produtos a encomendar
break;
} while (op !=0);
} // fecha main
Programação em Java 2006-2007
11
Problema 1.
Opção 2 – Entrada em Stock
Variáveis:
int cod, quant;
Produto p1, p2;
Algoritmo:
switch (op) {
…
case 2:
// entrada em stock
Leitura do código do produto a entrar (cod);
SE codigo válido {
Leitura da quantidade do produto a entrar (quant);
Entrar quant do produto em stock;
Mostrar no ecrã o stock actualizado;
} CASO CONTRÁRIO
Escrever mensagem “código não válido”;
Escrever mensagem “prima <enter> para continuar”;
break;
}
Programação em Java 2006-2007
Classe: Produto
atributos
codigo
designacao
precoUnit
quantStock
métodos
entradaEmStock
Usar o método
entradaEmStock
da classe Produto
12
Problema 1.
Opção 3 – Venda
case 3:
// saída (venda)
Leitura do código do produto a entrar (cod);
SE (código válido) {
Leitura da quantidade do produto a vender (quant);
Venda de produto (quant);
SE (foi possível vender)
Mostrar no ecrã o valor da venda;
Mostrar no ecrã o stock actualizado;
CASO CONTRÁRIO
Escrever mensagem “stock não suficiente”;
} CASO CONTRÁRIO
Escrever mensagem “código não válido”;
Escrever mensagem “prima <enter> para continuar”;
break;
Programação em Java 2006-2007
Classe: Produto
atributos
codigo
designacao
precoUnit
quantStock
métodos
entradaEmStock
venda
acrescentar o método venda à
classe Produto. Este método deve
receber como parâmetro o nº de
unidades vendidas
numUnidades
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
13
Problema 1.
Classe: Produto
atributos
Opção 4 – Encomenda
case 4:
// encomendar produtos
SE (p1.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 (p2.verificarPontoEncomenda() > 0 ){
Mostrar dados do produto # 2
Mostrar quantidade mínima a encomendar:
}
Escrever mensagem “prima <enter> para
continuar”;
break;
codigo
designacao
precoUnit
quantStock
pontoEncomenda
métodos
entradaEmStock
venda
verificarPontoEncomenda
1. acrescentar o atributo pontoEncomenda 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
verificarPontoEncomenda
SE (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
Programação em Java 2006-2007
14
A Classe String:
uma classe do pacote java.lang
Podemos assim declarar, criar e inicializar um objecto da classe String:
String nome_do_string = new String(“texto”)
Exemplo:
String str = new String(“Bom dia turma”);
Uma vez instanciado um objecto da classe String podemos
invocar todos os seus métodos:
nomeObjecto.nomeMétodo (parâmetros)
Exemplos:
int n = str.length();
char c = str.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
Programação em Java 2006-2007
15
Classes usadas com Ficheiros
BufferedReader, FileReader, BufferedWriter, FileWriter
Todas estas classes pertencem ao pacote java.io
Documentação on-line em:
http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html
Exemplo:
import java.io.*;
class Ex_12_1_lerFicheiro extends P1App {
static void main(String [] args) throws IOException {
String s, nomeFx;
// atribuir a nomeFx o nome do ficheiro
nomeFx = “teste1.txt”;
// declarar um objecto da classe BufferedReader
BufferedReader f;
// cria e inicializa o objecto com nome f da classe BufferedReader
f = new BufferedReader(new FileReader(nomeFx));
// lee a primeira linha do ficheiro
s = f.readLine(); // readLine é um método da classe BufferedReader
}
}
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
16
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 Math, System, String, 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
17
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 Java
http://java.sun.com/docs/books/tutorial/java/javaOO/index.html
Programação em Java 2006-2007
18
Download

Slides PowerPoint