Programação Orientada a Objetos
em Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
http://www.professorgiuliano.vai.la
A Plataforma Java
Programação Orientada a
Objetos em Java
OBJETIVOS DO CURSO
n Fornecer uma visão geral da linguagem Java e apresentar suas potencialidades.
n Capacitar os alunos a trabalhar com a linguagem de programação Java.
n Capacitar os alunos a trabalharem com os conceitos da Orientação a Objetos.
n Introduzir as principais fundamentos de
PLANO DE CURSO
1. Introdução a linguagem JAVA;2. Estrutura da Linguagem; 3. Java e Orientação a Objetos; 4. Classes
Objetos (Instanciação) Atributos
Métodos Construtores Encapsulamento;
§ Sobrecarga de Métodos;
5. Herança
Sobrescrita de métodos Polimorfismo
Classes abstratas
6. Coleção de Objetos
7. Tratamento de Exceções
8. Classes especiais da API Java
Introdução a Linguagem Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
CONCEITOS DO JAVA
Java é:– Uma Linguagem de Programação
– Um Ambiente de Desenvlvimento – Um Ambiente de Aplicativos
CONCEITOS DO JAVA
n J2SE
– Contém as classes principais da plataforma
Java, e é chamado às vezes de Core Java
Plataform.
n J2EE
– É um conjunto de tecnologias que fornecem APIs e um ambiente para desenvolvimento e execução de aplicações coorporativas.
n J2ME
INTRODUÇÃO AO JAVA
n Vantagens de Java como Linguagem
de Programação:
v Orientada a Objetos (O.O)
v código sem bugs: mais fácil em Java que em
C++
v desalocação manual de memória não existe
v independência de plataforma!
JAVA
n Simples
Sintaxe similar a C / C++
Não possui os recursos “perigosos”, desnecessários ou pouco usados:
Aritmética de ponteiros (*--pt = vet+5)
Estruturas (struct)
Definição de tipos (typedef)
Pré-processamento (#define)
Liberação explícita de memória (free)
COLETOR DE LIXO
n A Linguagem Java realiza a liberação de
memória, que antes era responsabilidade do programador.
JAVA
n Orientada a Objetos
• Utiliza o paradigma atual de objetos
n Distribuída
JAVA
n Robusta
Possui checagem em tempo de compilação e execução.
Gerenciamento automático de memória (“garbage collector” ).
Ausência de recursos “perigosos”. Extensiva verificação do código
INDEPENDÊNCIA DE
PLATAFORMA
n Robusta e Interpretada
O fonte é compilado para um código intermediário (“bytecode”).
O interpretador funciona como uma Máquina Virtual Java (JVM).
JVM - JAVA VIRTUAL
MACHINE
n Cabe ao interpretador Java de cada plataforma
de hardware específica assegurar a execução do código compilado para a JVM.
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Java 2 Standard Developers Kit (J2SDK)
JVM mais todas as APIs, compilador e ferramentas (tudo o que você precisa para escrever programas Java)
JVM mais as APIs (tudo o que você precisa para executar programas Java)
Documentação das APIs (Application Programming Interface)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Java 2 Standard Developers Kit (J2SDK
ou simplesmente JDK)
Disponível para download no Site Java da Oracle (www.oracle.com/java/index.html) Versão atual (J2SDK 8.40)
Principais aplicativos:
§javac (compilador) §java (interpretador)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Documentação das APIs (Application
Programming Interface)
Descreve quais são as classes definidas pela linguagem, o que fazem e como elas devem ser usadas nos programas.
Disponível para download ou on-line no Site Java da Sun
(http://java.sun.com/docs/index.html)
AMBIENTE DE
PROGRAMAÇÃO JAVA
n Existem editores (IDEs) específicos
para o desenvolvimento de Aplicativos Java
v Oracle NetBeans v Eclipse
v BlueJ
v JCreator
v JDeveloper
INSTALAÇÃO
n Fazer o download do J2SDK.
n Instalar o arquivo jdk-8u40-windows-i586.exe
n Instalação no estilo “next > next > next”
n Somente após o passo seguinte que poderá ser
instalado a IDE de sua preferência (JCreator ou BlueJ, etc)
n Recomendado incluir as seguintes variáveis de ambiente, porém,
não obrigatório:
JAVA_HOME:apontará para o diretório onde o J2SDK foi instalado = C:\Arquivos programas\Java\jdk1.6.23
CLASSPATH:responsável por definir um caminho de pesquisa para as classes do J2SE =;.JAVA_HOME
PATH: responsável por definir um caminho de pesquisa para arquivos executáveis. Se está variável não for configurada, o processo de compilação dos programas feitos em Java somente poderá ser executado dentro da pasta“lib” do diretório de instalação do J2SE 6.0 JDK =C:\Arquivos programas\Java\jdk1.6.23\bin
PRIMEIRO PROGRAMA
JAVA
Digite o programa “Teste.java”apresentado abaixo, utilizando o BlueJ
/*** Primeiro Programa Java ***/
class Teste {
public static void main(String arg[]) {
System.out.println(“Teste em Java”); }
PRIMEIRO PROGRAMA
JAVA
AMBIENTE DE
PROGRAMAÇÃO JAVA
Executar: Teste.class
DETALHES
IMPORTANTES
n Programa fonte tem extensão ‘.java’
n Programa compilado tem extensão
‘.class’
n A linguagem é “case-sensitive”, letras
maiúsculas são diferentes de letras minúsculas
n Cada programa é uma classe
DETALHES
IMPORTANTES
n Nome da classe no programa tem que ser
igual ao nome do arquivo físico ‘.java’
n Sintaxe similar a linguagem C/C++
n As classes podem estar agrupadas em
package
n Package é um subdiretório.
n As classes podem ser compactadas (zip
ANATOMIA DO
PROGRAMA
n Comentários
n Os comentários em Java seguem a
mesma sintaxe de c. /* texto */
// texto
/*** Primeiro Programa Java ***/
(JavaDocs)
n O compilador ignora estas linhas
ANATOMIA DO
PROGRAMA
n Definição de Classe
n É a unidade básica para uma
linguagem OO como Java
n class Nome {
... }
n class é a palavra reservada que marca
ANATOMIA DO
PROGRAMA
n Delimitação de Blocos
Um bloco está sempre entre chaves { }
Em Java as instruções terminam em ponto-evírgula (;)
ANATOMIA DO
PROGRAMA
Método main
n Toda aplicação Java, exceto Applets e
Servlets, deve possuir o método main.
public static void main (String args[ ]){
System.out.println("Teste em Java!"); }
n O método main indica o início de
ANATOMIA DO
PROGRAMA
Argumentos do Método main
public - é um qualificador do método que indica que este é acessível externamente a esta classe.
static - é um outro qualificador que especifica o método como sendo um método de classe.
void - indica que não existe retorno a este método.
main - é o nome do método.
String args[ ] - Armazena valores passados por linha de comando.
ANATOMIA DO
PROGRAMA
n System.out.println(“Teste em Java”);
Escreve na tela o conteúdo nos parêntesis.
Chamada do método println para o atributo out da classe System.
ANATOMIA DO
PROGRAMA
n System.out.println (sequência de
escape)
§ \n (nova linha)
§ \t (tabulação horizontal) § \r (retorno de carro)
§ \\ (barra invertida) § \” (aspas duplas)
ESTRUTURAS DE
PROGRAMAÇÃO
n Identificadores
Nomeiam variáveis, funções, classes e objetos
Podem conter letras e/ou dígitos, “_” e “$” Não podem ser iniciados por dígito
ESTRUTURAS DE
PROGRAMAÇÃO
VÁLIDOSn Nome
n NumDepen
n total_geral
n NOME
INVÁLIDOS
n 1prova
n total geral
ESTRUTURAS DE
PROGRAMAÇÃO
n Variáveis
n Inicialização padrão Java
• variáveis numéricas com zero
• variáveis booleanas com false
• outras variáveis com null
ESTRUTURAS DE
PROGRAMAÇÃO
n Inteiro
byte index = 50; short soma = 2000; int num carros = 5;
long valor = 0XDADAL;
ESTRUTURAS DE
PROGRAMAÇÃO
n Tipos Ponto Flutante (Real)
• float 32 bits
• double 64 bits
n – Representações:
• 3.14
• 6.02E23
• 2.718F
• 123.4E+306D
OPERADORES
n Atenção (programadores C/C++): • int i, j;
• float r;
• i = r / j; // ERADO! • i = (int) r / j; // OK!
ESTRUTURAS DE
PROGRAMAÇÃO
n Declarações e atribuições de variáveis
• As declarações podem ser exibidas em
qualquer posição do código-fonte.
int x, y;
float z = 3.144f; double w = 3.1415;
boolean verdade = true; char c, d;
c = 'A';
d = '\u0013'; x = 6;
Exemplo de utilização de
floa t , double e int
Fazer o exercício 01 da lista:
Lista_Pratica_Intro_Java.pdf
disponível no site da disciplina.
TIPOS DE DADOS
Texto
n char: representa um caracter Unicode de 16 bits (exemplos: ‘a’, ‘M’, ‘\t’, ‘\u02B1’)
– retrocesso – tab
– avanço de linha – retorno de carro – aspas
– apóstrofo – barra invertida
TIPOS DE DADOS
Texto
n String: representa uma seqüência de caracteres
String frase;
frase = “Ordem e Progresso”; char opcao;
opcao = 'S'; opcao = 'N';
TIPOS DE DADOS
n boolean: representa somente dois valores:
true (verdadeiro) e false (falso)
booolean achou;
OPERADORES
n Aritméticos
• Soma ( + )
• Subtração ( - )
• Multiplicação ( * )
• Divisão ( / )
• Resto ( % )
n Relacionais
• <
• >
• <=
• >=
• ==
• !=
• !
OPERADORES
n Lógicos
• Junção de expressões: &, &&, |, ||
OPERADORES
n Considere um operador @ qualquer
n Expressões do tipo X = X @ Z podem
ser substituídas por X @= Z
x = x + 3 x += 3
x = x * ( 9 + y ) x *= ( 9 + y )
OPERADORES
n Atenção (programadores C/C++):
• O operador + não é apenas aritmético (por
ex. pode ser utilizado para inicialização e concatenação de strings)
• Existe o tipo booleano, logo os operadores
relacionais e lógicos NÃO geram inteiros
• Não há conversões automáticas (por ex.
CONVERSÃO DE TIPOS
n Exemplos:
STRING ⇒ VALOR NUMÉRICO
St ring st r = "3 4 ";
int num _ int = I nt e ge r .pa r se I nt( st r ) ; float num _ float = Floa t .par se Floa t( st r ) ;
double num _ double = D ouble .par se D ouble( st r ) ;
VALOR NUMÉRICO ⇒ STRING
I nt e ge r .t oSt r ing( num _ int ) ; St ring valor_ st r = Floa t .t oSt r ing( num _ float ) ;
D ouble .t oSt r ing( num _ double) ;
Estruturas Condicionais
n Estrutura de Decisão - If / Else
if (expressão booleana)
{ instrução ou bloco de comandos } else
{ instrução ou bloco de comandos }
if (cont >= 0) {
System.out.println(“Erro !!!”);
} else {
System.out.println(“Ok !”);
Estruturas Condicionais
n Estrutura de Decisão - switch
switch (expressão short, int, byte ou char) {
case expressão2: comandos;
break;
case expressão3: comandos;
break;
default: comandos;
break; }
Estruturas Condicionais
n Estrutura de Decisão - switch
switch (opcao) {
case 0:
valor = a + b; break; case 2:
valor = (a * b) - c; break; default:
valor = a; break; }
n A instrução break (opcional) impede que o fluxo de execução continue pelas opções seguintes
Estruturas de Repetição
n Estrutura de Repetição – for
for (expr_inicial; expr_booleana; expr_increm) { bloco de comandos }
for (int x=0; x<10; x++) {
System.out.println(" Valor do X : " + x);
}
Estruturas de Repetição
n Estrutura de Repetição - while while (expr_booleana)
{ bloco de comandos }
int cont = 0
while (cont < 100) {
System.out.println(" contando " + cont); cont++;
Estruturas de Repetição
n Estrutura de Repetição - do while do
{ bloco de comandos } while (expr_booleana)
int x = 0; do {
x++;
} while (x <10);
VETORES(Arrays)
n Declaração
• Podem ser declarados arrays de quaisquer
dos tipos através dos símbolos “[” e “]”.
• A declaração não cria o array, isto é, não aloca memória. Isso é feito pela instrução new (arrays são objetos em Java).
char s[ ]; // declaração
s = new char[3]; // Criação
VETORES(Arrays)
n Declaração
• Os colchetes podem ser usados antes ou depois da variável.
• Exemplo:
char s[ ]; char [ ]s;
VETORES(Arrays)
n Declarando, criando e iniciando um array
n Em Java array é um objeto, mesmo quando é
composto por tipos primitivos. Apenas a
declaração não cria o objeto, sendo necessário o
uso da palavra reservada new.
char s[ ] = {'A', 'B', 'C'};
// declaração, criação e incialização
int p[ ] = new int[5]; p[0] = 25;
VETORES(Arrays)
n Arrays não podem ser dimensionados na
definição:
n Arrays não podem ser utilizados sem
a criação:
int vector[5]; //ERRADO!
int vector[];
vector[0] = 4; //ERRADO!
VETORES(Arrays)
n Para determinarmos o seu tamanho
podemos usar o método length:
int lista [] = new int [10];
for (int j = 0; j < lista.length; j++) {
VETORES(Matrizes)
n Multi-dimensionais
int lista [] = new int [10]; int matriz [][] = new int [4][5];
matriz [0][0] = 300; matriz [1][3] = 600;
For “aprimorado”
n Esse for permite percorrer um array ou
um enum (ou ainda uma Collection – que só veremos láááá na frente) de forma mais simples
n Definimos o tipo que é retornado pelo
Pra usar o for com array
public class TestaFor {
public static void main(String args[]) { int a[] = {4,5,6,3,4,2,1};
for (int i : a) {
System.out.println(i); }
} }
n Nesse exemplo, foi declarada uma variável de
controle do FOR ( i ) que receberá, cada elemento do vetor. Por isso ela foi criada inteira (pois os
elementos do vetor são inteiros)
n Perceba que foi dada a ela o vetor ( a ) que, em cada interação do FOR, dará um elemento à variável ( i ) n Nesse caso ( i ) não é o índice e sim o elemento!
Java e Orientação a Objetos
-
Conceitos Principais-Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Orientação a Objetos
n
História da OO
•
Evolução a partir da Programação
Estruturada
Programação sob demanda Programação estruturada Orientação a Objetos
Orientação a Objetos
n
Paradigma Estruturado
• O foco era no processo;
• Os dados + rotinas eram “misturados”, ou
Exemplo do paradigma
estruturado
Cadastrar o cliente
Efetuar o login
Efetuar pedido Consultar produtos Calcular frete Confirmar pedido Efetuar Pagamento Efetuar compra Acompanhar Frete Emitir
Nota Fiscal
Confirmar recebimento
Emitir relatório de compras
Orientação a Objetos
n Paradigma da Orientação a Objetos
• O foco é achar as entidades do meu sistema,
ou seja, “as coisas” que devemos manipular;
• Essas entidades são elementos do sistema,
que fazem algo específico, ou seja,
possuem RESPONSABILIDADES!!!
Orientação a Objetos
n
No nosso exemplo, se formos
pensar OO, devemos descobrir os
objetos que precisamos programar
e iremos manipular em nosso
sistema;
n
Quais seriam?
Exemplo do paradigma
orientado a objetos
Cadastrar o Cliente
Efetuar o Login
Efetuar Pedido Consultar Produtos Calcular Frete Confirmar pedido Efetuar Pagamento Efetuar Compra Acompanhar Frete Emitir
Nota Fiscal
Confirmar recebimento
Descobrindo os Objetos
n No sistema do exemplo, quais são os
objetos?
n Cliente
n Produto
n Pedido
n Compra
n Nota Fiscal
n Pagamento
Como representamos cada objeto?
Quais são os dados de cada um?
O que cada objeto faz ou precisamos fazer?
Quais serviços cada objeto oferece?
Descobrindo os Objetos
n Cada objeto precisa ser pensado (ou
encontrado) como alguém que possua responsabilidades;
• Por exemplo, se tivermos o objeto Produto,
ele deverá fazer tudo que se espera de um produto no sistema.
• Devemos então pensar em:
Quais são os dados de todo produto?
Quais são as operações que produto precisa para manipular seus dados, ou gerar
Orientação a Objetos
n Na Orientação a objetos:
n Os dados de um objeto _ Atributos
n As suas operações _ Métodos
Estrutura de um Objeto
n Atributos
• Cada objeto precisa ser representado no
sistema, e será através de seus dados;
• Por exemplo, precisamos saber quais são os
dados que cada Produto precisa. Logo, teremos:
código de identificação, nome, fornecedor, tipo, preço unitário, medida, data de fabricação
Estrutura de um Objeto
n Métodos
• Precisamos programar as “responsabilidades” do objeto, ou seja, o que precisamos fazer com cada objeto, quais operações precisamos programar para “mexer” com um objeto?
• No caso do Produto, podemos ter:
Exibir seus dados;
Calcular o imposto, mediante uma taxa; Verificar se seu código é válido
Verificar se já passou da validade, mediante uma data fornecida;
• Os métodos são implementados como funções do objeto.
Estrutura de um Objeto
n Métodos – definem o comportamento dos
objetos definidos pela classe.
n Para construirmos um método, ele é como
uma função em C, podendo ter parâmetros de entrada e retorno
n Um método sempre estará manipulando os
Estrutura de um Objeto
n Repare que todos os objetos de
PRODUTO que eu tiver em meu sistema terá os mesmos atributos e os mesmos métodos;
n O que será diferente são os valores de
cada um dos produtos, ou seja, teremos produtos diferentes;
n Mas tudo é PRODUTO!
CLASSES
n Logo, iremos ter vááááários produtos em
meu sistema;
n Só que para cria-los, precisamos de
“projetar” como será cada produto;
n Esse “projeto” é a estrutura de um objeto,
ou seja, quais são os atributos DE
TODOS os Produtos e quais os métodos que cada um terá.
CLASSES DE OBJETOS
n Uma classe é um modelo ou protótipo
que define as propriedades (atributos) e métodos (comportamento) comuns a um conjunto de objetos.
n Classes são “moldes” que definem as
variáveis e os métodos comuns a todos os objetos de um determinado tipo.
CLASSES DE OBJETOS
CLASSES DE OBJETOS
n Classes X Objetos
Uma classe é um “molde” a partir do qual vários objetos são criados.
O que interessa a um software são os objetos!
São eles que se guardam, consultam, exclui, verifica, agrupa, etc.
Criando Objetos
n Mas para termos objetos, precisamos
cria-los a partir de sua classe.
• Para criarmos, precisamos definir “valores” para cada atributo do objeto e saber que ele terá os métodos implementados na classe
n A operação de criação de objetos
Criando Objetos
n Atributos – são os “campos” que contém
as informações daquela classe. Ao
conjunto de atributos preenchidos de um objeto damos o nome de “estado do
objeto”
n Existem atributos de classe e atributos de
instância.
Classes e Objetos
n No mundo real existem vários
objetos do mesmo tipo. Por exemplo, a sua bicicleta é uma das milhares que existem no mundo.
n Usando a terminologia de orientação
Classes e Objetos
n Classes e Objetos: constituem a unidade
de representação de dados para esse
paradigma. E mantém uma relação muito próxima entre si.
n Podemos pensar na Classe como a forma
da peça ou do bolo, e nos objetos como peças prontas feitas de matéria prima.
Classes e Objetos
n Classes definem novos tipos de dados, tal
como structs de C ou registers de Pascal.
n A partir de novos tipos de dados torna-se
mais fácil organizar a aplicação em questão.
n Um objeto é uma instância de uma classe,
Java e Orientação a Objetos
-
Implementação-Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
ORIENTAÇÃO A
OBJETOS EM JAVA
n Programas em Java provavelmente irão
criar diversos objetos de diversos tipos de classes.
n Os objetos interagem entre si através
da troca de mensagens.
n Após o objeto ter realizado o trabalho
REPRESENTAÇÃO DE
UMA CLASSE
At ribut os
M é t odos Cla sse
ESTRUTURA DE UMA
CLASSE EM JAVA
class Produto
{
int codigo; String nome;
Date dataFabricacao; float preco;
void exibirProduto() {
… }
float calcularImposto(int taxa) {
…
}
}
CLASSES EM JAVA
n Declaração:
class Produto{ ...
}
n Propriedades (atributos): dados que as
instâncias da classe conterão: class Produto {
int codigo; String nome;
Date dataFabricacao; float preco;
CLASSES EM JAVA
Outro exemplo:class Veiculo {
// Propriedades
float velocidadeMaxima;
float capacidadeTanque, consumo;
protected int potencia, ano;
private String marca, modelo, cor;
public String chassis, placa; ...
// Métodos ...
public float autonomia ( ) {
return capacidadeTanque * consumo; }
}
CLASSE = “Molde de Objetos”
Objeto Carro: Instância 3 Classe:
Carro Esportivo
Tempo de Execução Tempo de
codigo nome
dataFabricacao fabricante
preco
ex ibir Fun cion ar io( ) calcu lar I m post o( t ax a) v er ificar Validade( dat a )
Produto prod1;
prod1
INSTANCIAÇÃO
codigo nome dataFabricacao fabricante preco 126798“ Biscoit o”
12/ 05/ 2010
“ Mabel”
3. 50
ex ibir Fun cion ar io( ) calcu lar I m post o( t ax a) v er ificar Validade( dat a )
Produto prod1 = ne w Produt o();
prod1
Pr odu t o pr od1 = n e w Pr odu t o( )
EXEMPLO DE INSTANCIAÇÃO
Pr odu t o pr od2 = n e w Pr odu t o( )
Pr odu t o pr od3 = n e w Pr odu t o( )
pr od1
pr od2
pr od3
REFERÊNCIAS PARA
OBJETOS
n Alocação de memória:
Produt o p1 ;
// cria apenas a referência
Produt o p1 = new Produt o( ) ;
// aloca memória e atribui // endereço à referência
Diferença com Tipos
Primitivos
n Quando se declara variáveis de
qualquer tipo primitivo (int, float, char, etc.), o espaço na memória é alocado como parte da operação.
n A declaração de uma variável de classe
não aloca memória, somente quando a
Exemplo Prático
n Classe Retangulo
• Atributos:
altura e base
• Métodos:
exibir()
exibirArea()
exibirPerimetro()
n Classe TestaRetangulo
• void main()
REFERÊNCIA PARA
OBJETOS
n Alocação de memória
n Cuidado com a cópia de objetos!
Produt o p2 = p1 ;
ATRIBUIÇÃO DE
VALORES
n As propriedades dos objetos podem ser manipuladas
diretamente pelo operador de ponto (.)
Produto p1 = new Produto();
p1.nome = "Biscoito Croc"; p1.preco = 3.50;
Produto p2 = new Produto();
p2.nome = "Arroz Padua"; p2.preco = 11.70;
p1 = p2;
p1.fabricante = "Mantimentos LTDA";
/ / p1 e p2 t erão o m esm o fabricant e, pois p1 e p2 est ão na m esm a área de m em ória ( p2 foi para p1 )
OBTENÇÃO DE
VALORES
n Os valores das propriedades podem ser
obtidos facilmente
System.out.pritln("Nome de 1 = " + p1.nome); System.out.pritln("Preco de 2 = " + p2.preco);
MÉTODOS
n Definem o comportamento da classe.
n Declaração:
class Ponto {
int x, y;
void mover (int dx, int dy) x += dx;
y += dy; }
}
MÉTODOS
n Implementam as funções de uma
classe
n Possuem sintaxe semelhante à sintaxe
de definição das funções de um programa procedural
n Determinam o comportamento da
classe e a troca de mensagens com
MÉTODOS
Assinatura
Corpo
Retorno
ASSINATURA DE UM
MÉTODO
O tipo de retorno pode ser void
float calcularI m post o ( int t axa)
Tipo de
CHAMADAS DE
MÉTODOS
n A troca de mensagens entre os objetos é
realizada através da chamada de métodos com passagem de argumentos
n Exemplo
...
p1.calcularImposto(30);
//Calculou o imposto baseado na taxa de 30%
...
EXEMPLO
class ProgramaPrincipal {
public static void main (String args[]) {
Produto prod;
prod = new Produto(“Feijão”,7.60,…);
}
}
prod.calcularImposto(30); Executando
Método
m a in()
class ProgramaPrincipal {
public static void main (String args[])
{
Produto prod;
prod = new Produto(“Feijão”,7.60,…);
} }
PASSAGEM DE
ARGUMENTOS
n Tipos de argumentos
n Objetos → passagem por referência.
• Originais são sujeitos a alterações dentro do método.
n Tipos primitivos → passagem por valor.
VARIÁVEIS LOCAIS
n Além das propriedades de um objeto, podem
ser definidos outros tipos de variável, locais a um método ou a um bloco de operações.
float calculaMedia(float p1, float p2) {
float media = (p1 + p2)/2; return media;
}
VARIÁVEIS
GLOBAIS X LOCAIS
...String alunos[]; //global ao método
float listaAprovados() {
for (int i = 0; i < alunos.length; i++) {
String nome = alunos[i];
System.out.println(i + ": " + nome); }
Java e Orientação a Objetos
-
Construtores-Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
CONSTRUTORES
n Devemos usar construtores quando
queremos definir o estado inicial de objetos de uma classe (atribuir valores aos atributos de um objeto no momento de sua criação, por exemplo)
n Usados na criação de um objeto através do
comando new
n Possuem o mesmo nome da classe e não
CONSTRUTOR PADRÃO
n A linguagem Java declara um construtor
padrão, vazio, que não recebe nenhum parâmetro
Ponto p1 = new Ponto();
n Quando declaramos um novo construtor,
esse construtor padrão deixa de existir e é substituído pelo novo construtor
class Ponto {
int x; int y; Ponto () { }
}
CONSTRUTORES
n Podem receber parâmetros, que podem
servir para inicialização dos atributos da classe
n Uma classe pode ter vários construtores
class Ponto { int x;
int y;
public Ponto (int x, int y) {
this.x = x; this.y = y; }
CONSTRUTORES
n Deve ser usado no momento da criação
do objeto:
Ponto p1 = new Ponto(1,2);
Ponto p2;
p2 = new Ponto(3,4);
Ponto p3 = new Ponto();
CONSTRUTORES
CONSTRUTORES
Chamada ao construtor
PALAVRA RESERVADA “This”
n As vezes é necessário que o objeto se
referencie;
n Muitas vezes, os nomes dos parâmetros não
são claros o bastante para sabermos “o que passar” para o método;
• Logo, procuramos colocar os nomes dos
parâmetros iguais aos dos atributos;
n Existe uma palavra reservada this que
significa uma referência ao próprio objeto,
para diferenciar o que é “do objeto” (atributo) e
PALAVRA RESERVADA “This”
n Exemplo:
class Ponto {
int x, y;
void mover (int x, int y) {
this.x = x;
this.y = y; }
}
PALAVRA RESERVADA “This”
PALAVRA RESERVADA “This”
SOBRECARGA DE
MÉTODOS
n Sobrecarregar um método significa
definir dois ou mais métodos com o
mesmo nome, porém com
assinaturas diferentes.
n Assinatura diferente pode ser: tipo de
SOBRECARGA DE
MÉTODOS
n A sobrecarga pode ser feita igualmente
aos métodos construtores
n Uma boa prática é usar a sobrecarga,
somente, em métodos que possuam a mesma funcionalidade.
SOBRECARGA DE
MÉTODOS
SOBRECARGA DE
MÉTODOS
n Exemplo
class Ponto { ...
void mover (int dx, int dy) { x += dx;
y += dy; }
void mover (int raio, float ang) { raio*Math.cos(ang); raio*Math.sen(ang); } }
SOBRECARGA DE
CONSTRUTORES
n Exemploclass Ponto {
int x; int y;
Ponto () { x = 20; y = 10; }
Ponto (int x, int y) { this.x = x;
this.y = y; }
SOBRECARGA DE
CONSTRUTORES
n A sobrecarga de construtores visa definir
formas diferentes de criar um objeto
n Exemplo:
Ponto p1 = new Ponto(); //p1 está em (20,10)
Ponto p2 = new Ponto(1,2); //P2 está em (1,2)
SOBRECARGA DE
CONSTRUTORES
n Um construtor pode chamar outro
construtor.
n Isso se chama “encadeamento de
construtores”.
n Para isto é necessário usar a palavra
reservada this.
n Uma chamada a outro construtor deverá
SOBRECARGA DE
CONSTRUTORES
n Exemplo:
class Ponto { int x=0; int y=0; Ponto () {
this(0,0);
}
Ponto (int x, int y) { this.y=y;
} }
Java e Orientação a Objetos
A API Java
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Classes da API
n Java apresenta várias classes “prontas”
com diversos recursos para serem usados pelos programadores.
n Para isso, você precisa:
• Saber onde encontrar a classe (pacote Java);
• Conhecer seu conteúdo (atributos + métodos);
• Descobrir na classe quais métodos possuem o que se deseja;
• Em caso de métodos, conhecer a sua assinatura, que define como usa-lo;
Acessando a API
n Saber onde achar as classes, basta
acessar o JavaDocs!
n JavaDocs é a documentação da API do
Java e pode ser acessada de 3 maneiras:
• Diretamente via site do Java
(http://docs.oracle.com/javase/6/docs/api/)
• Pela sua IDE, caso ela tenha instalado o JavaDocs;
JavaDocs
Descrição da classe
^ Pacotes de classes
^ Classes
STRINGS
n Uma string não é um tipo primitivo, é
uma classe pré-definida do Java. São seqüências de caracteres.
n Pode ser criado com ou sem a palavra
new.
String e = ""; // uma string vazia String alo = "Alo Pessoal";
String nova;
nova = "Sou nova";
String nome = new String("Antonio");
Classe String - Métodos
im port a nt e s
n String toLowerCase(): retorna a string de chamada
toda em minúscula
n String toUpperCase(): retorna a string de chamada
toda em maiúscula
n boolean endsWith(String s): verifica se a string de
chamada termina com a string s
n String startsWith(String s): verifica se a string de
chamada inicia com a string s
n String replace(char atual, char novo): troca todas
Classe String - Métodos
im port a nt e s
n int length(): retorna o tamanho da string;
n String trim(): retorna a string sem espaços em
brancos antes e depois da mesma;
n String substring(int idxInicial, int idxFinal+1):
retorna um pedaço da string de idxInicial até idxFinal
n boolean contains(String s): verifica se a string de
chamada possui a substring s;
n boolean isEmpty(): retorna se a string está ou não
vazia
STRINGS
n Operações com String new.
// Concatenação
String nova = alo + ", tudo Ok ? ";
// Edição
String substr = alo.substring(0,3); // "Alo"
// Verificando tamanho
Outras classes da API
n Outras classes da API são igualmente
importantes:
n Math: operações matemáticas
n Date e Calendar: manipulação de datas e
hora
n DecimalFormat: formatos de números
n Scanner: entrada de dados
n Integer, Float, Double: manipulação de cada
tipo de dados, como objeto
Classe Math
n Pesquisa sobre os métodos dessa
classe, particularmente: • abs()
• sqrt()
• random() • pow()
• max() • min() • round()
Observe suas assinaturas e qual o objetivo
Java e Orientação a Objetos
Entrada de dados
Classe Scanner
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
Entrada de Dados
n O Java possui várias classes para
que possamos realizar a entrada de dados de variáveis, tal como fazemos com o comando scanf na linguagem C
n Classes para leitura de dados da API
Java.
• DataInputStream (Java 1 e superior)
• Scanner (Java 5).
Entrada de Dados
n A classe mais “estável”, mais utilizada e
mais fácil de realizarmos a entrada de dados será a classe Scanner!
n Ela possui vários métodos para entrada
de dados, dentre eles:
• next() ou nextLine(): entrada de string
• nextInt(): entrada de nº inteiro
• nextFloat(): entrada de nº float
• nextDouble(): entrada de nº double
• nextChar(): entrada de 1 caracter do tipo char
Como utilizarmos a classe
Sc a nne r
1. Inicialmente, devemos importar a classe
Scanner em nosso arquivo .java para podermos utiliza-la.
import java.util.Scanner;
n Exemplo
import java.util.Scanner;
class Produto {
Como utilizarmos a classe
Sc a nne r
2. Depois, quando precisarmos no código de
realizar a entrada de dados, precisamos criar um objeto da classe Scanner
Scanner sc = new Scanner (System.in);
• O nosso objeto chama-se ‘sc’ (nome da variável)
• Temos que passar o modo de leitura para o construtor do Scanner _ System.in
• Isso habilita o Scanner para realizar a leitura via tela (e não de outro modo, como leitura de arquivo, de imagem, ou outro qualquer)
Fazendo a leitura via Scanner
3. Agora só começar a usa-lo!
Exemplo:
int idade; float salario; String nome;
Scanner sc = new Scanner(System.in);
println("Digite sua idade: "); idade = sc.nextInt();
println("Digite seu salário: "); salario = sc.nextFloat();
Leitura de Strings
n Há uma diferença importante na leitura de strings
entre os métodos next() e nextLine()
n next(): faz a leitura de uma string, porém só atribui
até o 1º espaço em branco que encontrar, desconsiderando o resto da string digitada. Exemplo:
String nome;
Scanner sc = new Scanner(System.in);
println("Digite seu nome: "); nome = sc.next();
Se ele digitou "Pedro da Silva"
Irá atribuir somente "Pedro"
Leitura de Strings
n nextLine(): faz a leitura de uma string,
considerando toda a string digitada. Exemplo:
String nome;
Scanner sc = new Scanner(System.in);
println("Digite seu nome: "); nome = sc.nextLine();
Se ele digitou "Pedro da Silva"
Irá atribuir "Pedro da Silva"
Leitura de Strings
n Porém, há um problema ao usar o nextLine() !!!
n Quando há uma digitação de um número
anteriormente, o ENTER que você dá para atribuir o valor é capturado pelo netxLine(), impedindo a entrada de dados de sua string.
n Logo, recomendamos usar um nextLine() sozinho
antes da atribuição da string na variável:
int idade; String nome;
println("Digite sua idade: "); idade = sc.nextInt();
println("Digite seu nome: ");
sc.nextLine();
nome = sc.nextLine();
Digitação de um inteiro antes e usando um nextLine() antes da digitação da string para pegar o ENTER
Digitação de um inteiro antes e usando um nextLine() antes da digitação da string para pegar o ENTER
Java e Orientação a Objetos
Encapsulamento
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
ENCAPSULAMENTO
n Através dos métodos podemos atingir
uma das principais características da
orientação a objetos. O encapsulamento,
que é a capacidade de esconder do
mundo exterior as estruturas internas de uma classe.
n O encapsulamento define que os atributos
só são acessados através de métodos o que evita o acoplamento
ENCAPSULAMENTO
n É a forma de restringir o acesso aos
métodos e propriedades de uma classe.
n Protege os dados de um objeto contra
uma modificação imprópria.
n É necessário definir o controle de
acesso aos métodos e propriedades de uma classe, de forma que não se
CONTROLE DE ACESSO
n Os membros de uma classe podem ser
protegidos de acessos indevidos
n Métodos de acesso: public e private
• public: membros podem ser acessados livremente
• private: membros só podem ser
acessados pela própria classe (necessário definir os accessor methods - get e set)
CONTROLE DE ACESSO
n Exemplo
class Pessoa {
private nome;
private idade;
public obs;
Pessoa (String nome, int idade){ this.nome = nome;
}
public imprimeNome() {
System.out.println(“Nome: ” + nome); }
CONTROLE DE ACESSO
n Exemplo
Pessoa p1 = new Pessoa("Joao",10);
p1.nome = "Raul";//ERRO DE COMPILAÇÃO!
p1.obs = "bom garoto"; //OK!
p1.imprimeNome(); //OK! // Nome: Joao
Exemplo
n Da forma como está, podemos ter
acesso direto (público) nos atributos
cpfCorrentista e senha;
n Este acesso não poderá ser público,
pois há regras para se atribuir valores a estes atributos, bem como para
recupera-los
Exemplo
n senha - só poderá atribuir um valor se: • Tiver 8 dígitos no mínimo;
• Tiver pelo menos 1 letra maiúscula e um dígito;
• A senha nunca poderá ser acessada;
n cpfCorrentista:
• Ter somente 11 dígitos;
• Não possuir pontos nem traço;
• O código verificador corresponder ao numero digitado;
Problemas de acesso
n Como a senha é pública, podemos:
Conta c1 = new Conta();
c1.senha = "sh1098";
System.out.println("Senha: " + c1.senha);
n Ou seja, temos acesso direto, sem passar
pelas regras para senha:
senha - só poderá atribuir um valor se:
» Tiver 8 dígitos no mínimo;
» Tiver pelo menos 1 letra maiúscula e um dígito; » A senha nunca poderá ser acessada;
Problemas de acesso
n Mesma coisa para CPF:
Conta c1 = new Conta();
c1.cpfCorrentista = "passarinho";
System.out.println("CPF: "+ c1.cpfCorrentista);
n Regras para CPF (violadas):
» Ter somente 11 dígitos;
» Não possuir pontos nem traço;
Restringindo o acesso
n senha - só poderá atribuir um valor se: • Tiver 8 dígitos no mínimo;
• Tiver pelo menos 1 letra maiúscula e um dígito;
• A senha nunca poderá ser acessada;
n cpfCorrentista:
• Ter somente 11 dígitos;
• Não possuir pontos nem traço;
• O código verificador corresponder ao numero digitado;
• Só será recuperado com os pontos e o traço;
class Conta {
private String numero;
private String cpfCorrentista; private String senha;
...
}
Acesso privado
n Desta forma, não se tem mais o acesso
DIRETO a senha ou cpf:
Conta c1 = new Conta();
c1.senha = "sh1098";
System.out.println("Senha: " + c1.senha);
c1.cpfCorrentista = "passarinho";
System.out.println("CPF: "+ c1.cpfCorrentista);
Métodos de acesso
n Para isso, criamos métodos de acesso
(accessor methods) para os atributos
privados:
n São os famosos métodos get e set
• Método Get: para capturar, “pegar ” o valor
Método GET
n Formato:
tipodoatributo getXxxx()
{ ...
return valordoatributo; }
Xxxx: é o nome do atributo, com a primeira letra maiúscula (padrão da OO);
Exemplos:
String getSenha() int getNumero() float getSalario()
Método SET
n Formato:
void setXxxx(tipodoatributo novoValor)
{ ...
atributo = novoValor; }
Xxxx: é o nome do atributo, com a primeira letra maiúscula (padrão da OO);
Exemplos:
Aplicando GET/SET
n No exemplo de ContaBancaria, podemos
então fazer os métodos get/set para senha e cpf, colocando então as regras de atribuição e recuperação previstas, implementadas cada um deles;
n Desta forma, toda vez que se atribuir ou
recuperar os valores, como SEMPRE
passará pelo get/set, serão aplicadas as regras;
Aplicando GET/SET
n Para Senha:
String getSenha() {
//regras para preparar a saida da senha return this.senha;
}
void setSenha(String novaSenha) {
//regras para atribuição
Aplicando GET/SET
n Para Senha:
String getSenha() {
//regras para preparar a saida da senha return this.senha;
}
void setSenha(String novaSenha) {
//regras para atribuição
this.senha = novaSenha;
Podemos optar por não implementar a captura da senha caso de fato não há necessidade de acesso a mesma.
Aplicando GET/SET
n Para cpfCorrentista:
String getCpfCorrentista() {
//regras para preparar a saida do cpf return this.cpfCorrentista;
}
void setCpfCorrentista(String cpf)
{
//regras para atribuição
Usando métodos Get/Set
n Desta forma, usamos os get/set para
acesso à senha ou cpf:
Conta c1 = new Conta();
c1.setSenha("sh1098");
c1.setCpfCorrentista("passarinho"); System.out.println("CPF: "+
c1.getCpfCorrentista());
Observe que os dados passados serão invalidados, pois as regras estão implementadas em cada método e verifica a
integridade dos dados. No caso de dados válidos, serão atribuidos/recuperados de acordo com as mesmas regras.
Notas Práticas sobre
Ge t /Se t
n Se os atributos estão private e todo acesso
agora será feito por get/set, sempre que precisar de pegar os valores dos atributos, mesmo dentro de métodos públicos da classe
faça via get !
n A mesma coisa é para atribuir um valor, mesmo
dentro de métodos públicos (sobretudo
Construtores), faça via set !
n Salvo exceções onde, dentro dos métodos
públicos da classe você precisa do dado “bruto”, logo, acessa-se diretamente!
Exercício de Get/Set
n Utilizar os métodos Get/Set no classe
Cliente do exercício Aula_Strings.pdf
n Para isso, coloque todos os atributos
private e gere todos os get/set para eles na classe;
n Observe e aplique as regras de
atribuição/recuperação de algum
Java e Orientação a Objetos
Membros de Classe e Constantes
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Programação Orientada a
Objetos em Java
MEMBROS DE CLASSE
n Pode-se definir numa classe membros que
sejam compartilhados por todas instâncias daquela classe.
n Esses membros são chamados de “membros
de classe”. Podem ser: • propriedades (variáveis)
• métodos
n Todo membro de classe deve usar o
VARIÁVEIS DE CLASSE
n Exemplo:
class Pessoa {
static int numPessoas = 0; int id;
Pessoa () {
id = numPessoas; numPessoas++; }
... }
VARIÁVEIS DE CLASSE
n Exemplo:
Pessoa joao = new Pessoa (); // joao.id = 0;
// joao.numPessoas = 1;
Pessoa ana = new Pessoa(); // ana.id = 1;
// ana.numPessoas = 2;
n Fazer este exemplo, imprimindo (id) e
(numPessoas).
VARIÁVEIS DE CLASSE
n Os membros de classe podem ser
acessados diretamente, sem
necessidade da existência de um objeto.
Pessoa.numPessoas = 100;
ESCOPO DE VARIÁVEIS
n Ao utilizar o nome de uma variável
dentro de um método, Java procurará a sua definição na seguinte ordem:
bloc o
bloco mais externo m é t odo
variável de instância ou classe supe r-c la sse
MÉTODOS DE CLASSE
class ContaBancaria { ..
static float calcEmprestimo(int valor) {
... }
}
§ Exemplo:
int val = 5000;
float total = Example.calcEmprestimo(val);
Métodos de Classe
(e stát icos)n Quando o método é de classe (static), a
própria classe chama o método;
n Logo, não se pode ter atributos de
objetos envolvidos no método;
n Caso tenha, o método É DO OBJETO e
não da classe - de todos! (tirar o static)
n São métodos extras, funções úteis que
não precisam de ter um objeto para executa-lo.
Métodos de Classe
(e stát icos)Atributos de classe
class Funcionario{
static int codigo; String nome;
static String cargo;
.... }
Atributos de classe
Funcionario f1 = new Funcionario();Funcionario f2 = new Funcionario();
f1.codigo = 30;
System.out.println("Codigo = " + f2.codigo);
n >> Codigo = 30; //f1 e f2 tem o mesmo codigo
f2.codigo = 50;
System.out.println("Codigo = " + f1.codigo);
Atributos de Classe
n Nesse caso, como codigo é static, seu valor é
“compartilhado” a todos os objetos;
n Logo, não importa qual objeto modifica seu valor,
que mudará TODOS os demais.
n Sendo assim, a própria classe pode acessa-lo,
caracterizando a mudança para todos os membros:
Funcionario.codigo = 1467;
Métodos de classe
class Funcionario {
static int codigo; ...
static float fator; float salario;
public float calcularSalarioLiquido(int taxa) { float sal;
if(taxa < 15)
sal = salario – (salario*0.13f) – (salario*taxa/100); else
sal = salario – (salario*taxa) + (salario*0.03f); return sal;
}
public float calcularGratificacao(int numFilhos) { return numFilhos * 50 + (fator * 0.30);
} }
Métodos de Classe
n O método de calcularSalarioLiquido() possui um
atributo que é do objeto (salario), o qual cada objeto tem o seu (não é static);
n Logo, só se pode executa-lo por um objeto, NÃO
devendo ser static;
n O método calcularGratificacao() não possui
atributos de objetos, somente numFilhos (que é um parametro) e o fator, que é um atributo de classe (static);
n Logo, esse método PODERÁ ser static.
Métodos de Classe
Funcionario f1 = new Funcionario();Funcionario f2 = new Funcionario();
f1.salario = 3000; f2.salario = 4000;
//cada funcionário tem seu próprio salário
float s1 = f1.calcularSalarioLiquido(30); float s2 = f2.calcularSalarioLiquido(30);
//logo, cada um terá seu próprio salario liq.
Métodos de Classe
Funcionario f1 = new Funcionario();Funcionario f2 = new Funcionario();
Funcionario.fator = 200;
//logo o fator 200 é para todos, pois é static
float g1 = f1.calcularGratificacao(50); float g2 = f2.calcularGratificacao(50);
//TODOS tem a mesma gratificação
System.out.println("Gratificacao de f1 " + g1); System.out.println("Gratificacao de f2 " + g2);
Métodos de Classe
n Nesse caso, como calcularGratificacao() é
static e não depende de qualquer atributo de objeto, a própria classe pode chama-lo;
Exercícios
Avaliar e aplicar static na
classe Teclado
CONSTANTES
n Podem ser:
• variáveis (de instância, de classe ou locais)
• métodos
n São declaradas com a palavra
reservada final
n Como padrão da OO, são declaradas
CONSTANTES
class Teste {
// Variáveis constantes
final int ESQUERDA = 0;
final int DIREITA = 0;
// Método constante
private final static void main (String args[]) {
.. }
.. }
Java e Orientação a Objetos
Uso de Herança de Classes
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Herança de Classes
Herança de Classes
conta1
numero = “1020-7” agencia = “025-2” saldo = 1500,00 valorTaxa = 23,00 limiteCheque = 500,00
Herança de Classes
Representando as contas Poupança
Herança de Classes
conta1
numero = “1020-7” agencia = “025-2” saldo = 1500,00 valorTaxa = 23,00 limiteCheque = 500,00 taxaRendimento = 0
emitirExtrato() emitirSaldo() aplicarTaxa() alterarLimite() aplicarRendimento() conta2
numero = “2140-8” agencia = “353-0” saldo = 2000,00 valorTaxa = 0 limiteCheque = 0 taxaRendimento = 1,5%
Herança de Classes
Herança de Classes
conta1
numero = “1020-7” agencia = “025-2” saldo = 1500,00 valorTaxa = 23,00 limiteCheque = 500,00
emitirExtrato() emitirSaldo() aplicarTaxa() alterarLimite()
conta2
numero = “2140-8” agencia = “353-0” saldo = 2000,00
taxaRendimento = 1,5%
Herança de Classes
?
?
???
Definindo a Herança
Definindo a Herança
Definindo a Herança
O QUE É HERANÇA?
n Herança é um mecanismo que permite
a uma classe herdar todo o
comportamento e os atributos de outra classe.
n Uma classe que herda de outra classe
é chamada subclasse e a classe que fornece a herança é chamada
superclasse.
O QUE É HERANÇA?
n A classe A é a superclasse de B
n A classe B é uma subclasse de A
n A classe B é a superclasse de C, D e E
HERANÇA
n As superclasses definem atributos e métodos
genéricos que são herdados pelas classes derivadas.
n Um método herdado de uma superclasse pode
ser redefinido pela classe derivada, mantendo o mesmo nome mas agindo de forma diferente.
n Normalmente os atributos de um objeto só
podem ser consultados ou modificados através dos seus métodos (accessor methods).
HERANÇA EM JAVA
n Java adota o modelo de árvore
n A classe Object é a raiz da hierarquia de
classes à qual todas as classes existentes pertencem;
n Quando não declaramos que uma classe
estende outra, ela, implicitamente, estende
HERANÇA EM JAVA
n Uma classe Java estende apenas uma
outra classe (herança simples ou única)
n Para criar uma sub-classe, usamos a
palavra reservada extends
HERANÇA EM JAVA
class ContaCorrente extends ContaBancaria
{
.... }
class ContaPoupanca extends ContaBancaria
{