Buscar

Programação Orientada a Objetos

Prévia do material em texto

Programação Orientada à Objetos 
INF1024/1017 
 
Profa. D.Sc. Dilza Szwarcman 
Unidade 3 – Programação OO em Java 
 Parte 1 
◦ Classes e Objetos 
◦ Métodos 
◦ Composição 
 Parte 2 
◦ Herança 
◦ Polimorfismo 
 Parte 3 
◦ Interfaces 
◦ Exceções 
 
2 
Classes e objetos 
 O mundo físico é constituído por objetos 
caracterizados pelas suas propriedades 
(ou atributos) e seus comportamentos. 
3 
Classes e objetos 
 Programação Orientada a Objetos 
estabelece que os objetos do mundo 
físico podem ser facilmente modelados 
como objetos de software usando as 
propriedades como atributos e os 
comportamentos como métodos. 
4 
Classes e objetos 
 Classes 
◦ A classe é a estrutura fundamental na POO. 
◦ Pode ser vista como um gabarito para a 
construção de um objeto. 
◦ Pode ser entendida como definição de um 
novo tipo de variável. 
◦ Consiste de dois tipos de elementos: 
atributos (ou propriedades) e métodos. 
5 
Classes e objetos 
 Classes 
◦ Atributos especificam os tipos de dados 
definidos pela classe, enquanto que os 
métodos especificam as operações. 
◦ As classes fornecem o benefício da 
Reutilização, ou seja, utilizar a mesma classe 
em vários projetos. 
 
6 
Classes e objetos 
 Objetos 
◦ Um objeto é uma instância de uma classe. 
◦ Composto pelo conjunto de atributos 
especificados na classe 
◦ Atributos descrevem as características 
essenciais ou estado do objeto 
◦ Os métodos definidos na classe, quando 
invocados para um determinado objeto, 
normalmente modificam o estado do objeto. 
7 
Classes e objetos 
 Exemplo 
◦ Carro A e Carro B são objetos da classe 
Carro 
8 
Classes e objetos 
 Declaração de classes 
public class Carro { 
public String placa; 
public String cor; 
public String fabricante; 
public double velocidade 
public void Acelerar() { 
 .... 
} 
public void Girar() { 
 .... 
} 
public void Frear(){ 
 .... 
} 
} 
 
 
9 
Classes e objetos 
 Criação de objetos 
◦ Para criar um objeto ou uma instância da 
classe, utiliza-se o operador new. 
String str2 = new String(“Alô mundo!"); 
◦ O operador new aloca a memória para o 
objeto (seus atributos) e retorna uma 
referência para essa alocação. 
10 
Classes e objetos 
 Criação de objetos 
◦ Ao criar um objeto, invoca-se, na realidade, o 
construtor da classe. 
◦ O construtor é um método que possui o 
mesmo nome da classe e normalmente 
cuida da inicialização do estado objeto. 
◦ Quando construídos, cada objeto adquire um 
novo estado. Entretanto, as implementações 
dos métodos são compartilhadas entre 
todos os objetos da mesma classe. 
 11 
Classes e objetos 
 Exemplo 
 
public class Pessoa { 
public String nome; 
public String sexo; 
public int idade; 
public Pessoa(String n, String s, int i ) { 
nome = n; 
sexo = s; 
idade = i; 
} 
} 
 
 
public class TestePessoa { 
public static void main(String[] args) { 
System.out. println ("Criação de objetos 
Pessoa :"); 
Pessoa p1 = new Pessoa(“Joao”, “m”, 20); 
Pessoa p2 = new Pessoa(“Maria” ,“f ”, 18); 
System.out. println (“nome1:” + p1.nome ); 
System.out. println (“id1:” + p1.idade); 
System.out. println (“nome2:” + p2.nome ); 
System.out. println (“id2:” + p2.idade); 
} 
} 
 
12 
Classes e objetos 
 Atributos e Métodos de Classe 
◦ Além dos atributos de objeto, também é possível 
definir atributos e métodos de classe. 
◦ São diferenciados dos métodos de objeto pela 
declaração da palavra-chave static na definição. 
◦ Também são chamados de atributos e métodos 
estáticos. 
◦ Atributos de classe possuem o mesmo valor 
para todos os objetos daquela classe. 
◦ Métodos estáticos podem ser invocados sem que 
um objeto tenha sido instanciado pela classe. 
13 
Classes e objetos 
 Atributos e Métodos de Classe 
 
public class Pessoa { 
public String nome; 
public String sexo; 
public int idade; 
public static int pop; 
public Pessoa(String n, String s, int i ) 
{ 
nome = n; 
sexo = s; 
idade = i; 
pop = pop+1; 
} 
} 
 
 
public class TestePessoa { 
public static void main(String[] args) { 
Pessoa p1 = new Pessoa(“Joao”, “m”, 20); 
Pessoa p2 = new Pessoa(“Maria” ,“f ”, 18); 
System.out. println (“p1:” + p1.nome ); 
System.out. println (“Pop:” + Pessoa.pop ); 
System.out. println (“p2:” + p2.nome ); 
System.out. println (“Pop:” + Pessoa.pop ); 
} 
} 
 
14 
Classes e objetos 
 Controle de acesso a classes, métodos e atributos 
◦ Também conhecido como Encapsulamento 
◦ Uma das principais características da POO 
◦ Encapsulamento é o ato de esconder de terceiros 
informações que não são de seu interesse ou dados 
que não devem ser manipulados livremente. 
◦ O objeto atua como uma caixa preta, que realiza 
determinadas operações sem que o usuário saiba 
(não precisa saber) exatamente como. 
◦ Basicamente, o encapsulamento separa os 
elementos visíveis de um objeto dos invisíveis. 
◦ Em pró da segurança, modularidade, facilidade de 
extensão/manutenção de código 
15 
Classes e objetos 
 Controle de acesso a classes, métodos e atributos 
◦ Feito através de palavras reservadas: 
 public 
 Tais atributos e métodos são sempre acessíveis a todos os métodos 
de todas as classes. Este é o nível menos rígido de encapsulamento, 
que equivale a não encapsular. 
 private 
 Esses atributos e métodos são acessíveis somente aos 
métodos(todos) da própria classe. Este é o nível mais rígido de 
encapsulamento. 
 protected 
 Tais atributos e métodos são acessíveis nos métodos da própria 
classe e suas subclasses, o que será visto em Herança . 
 Nada especificado, equivale “package” ou “friendly” 
 Esses atributos e métodos são acessíveis somente nos métodos das 
classes que pertencem ao “package” em que foram criados. 
16 
Classes e objetos 
 Controle de acesso 
 
public class Pessoa { 
private String nome; 
private String sexo; 
private int idade; 
private static int pop; 
public Pessoa(String n, String s, int i ) 
{ 
nome = n; 
sexo = s; 
idade = i; 
pop = pop+1; 
} 
} 
 
 
public class TestePessoa { 
public static void main(String[] args) { 
Pessoa p1 = new Pessoa(“Joao”, “m”, 20); 
Pessoa p2 = new Pessoa(“Maria” ,“f ”, 
18); 
System.out. println (“p1:” + p1.nome ); 
System.out. println (“p2:” + p2.nome ); 
System.out. println (“Pop:” + Pessoa.pop ); 
} 
} 
 
17 
erro 
Métodos 
 Um método é um serviço ou ação 
fornecido pelo objeto em forma de 
função, ou seja, um trecho de código 
distinto que pode ser chamado por 
qualquer outro método para realizar 
alguma função específica. 
 Quando um método é invocado, se diz 
que o objeto está recebendo uma 
mensagem (para executar uma ação). 
18 
Métodos 
 Programas complexos formam conjuntos 
de objetos que trocam mensagens 
entre si gerenciando inclusive os recursos do 
sistema 
 Métodos possuem as seguintes 
características: 
◦ Podem ou não retornar um valor 
◦ Podem aceitar ou não argumentos 
◦ Após o método encerrar sua execução, o fluxo 
de controle é retornado a quem o chamou. 
19 
Métodos 
 Chamando métodos de objeto 
nomeDoObjeto.nomeDoMétodo([argumentos]); 
 Chamando métodos de classe (estáticos) 
NomeClasse.nomeMétodoEstático(argumentos); 
 Usando os métodos: 
String str1 = “Olá"; 
// retornará o caractere H e o armazenará no atributo x 
char x = str1.charAt(0); 
String str2 = “olá";// aqui será retornado o valor booleano true 
boolean result = str1.equalsIgnoreCase(str2); 
20 
Métodos 
 Passando argumentos por valor 
◦ A chamada do método faz uma cópia do 
valor do atributo e o reenvia como 
argumento. 
◦ O método chamado não modifica o valor 
original do argumento, mesmo que esse valor 
seja modificado em operações implementadas 
pelo método 
◦ Como padrão, todo tipo primitivo, quando 
enviado para um método, segue a forma de 
envio por valor 
 
 
21 
Métodos 
 Passando argumentos por valor 
public class TestPassByValue { 
public static void main(String[] args ){ 
int i = 10; 
System.out.println( i ); //exibe o valor de i 
test( i ); //chama o método test e envia i 
System.out.println( i ); //exibe o valor de i não modificado 
} 
public static void test( int j ){ 
j = 33; //muda o valor do argumento j 
} 
} 
 
 22 
Métodos 
 Passando argumentos por referência 
◦ ou “passando uma referência de objeto por valor” 
◦ A referência do objeto é enviada para o método 
chamado. 
◦ O método faz uma cópia da referência do objeto 
enviado. Porém, o método pode modificar o objeto. 
Mesmo que diferentes referências sejam usadas nos 
métodos, a localização do dado para o qual ela aponta 
é a mesma. 
◦ Como padrão, todo tipo não primitivo, quando 
enviado para um método, segue a forma de envio por 
referência 
 
23 
Métodos 
 Passando argumentos por referência 
public class TestPassByReference { 
public static void main(String[] args) { 
int []ages = {10, 11, 12}; // cria um array de inteiros 
for (int i=0; i < ages.length; i++) { 
System.out.println( ages[i] ); // exibe os valores do array 
} 
test( ages ); // chama método test e envia a referência para o array 
for (int i=0; i < ages.length; i++) { 
System.out.println(ages[i]); // exibe os valores do array 
} 
} 
public static void test( int[] arr ){ 
for (int i=0; i < arr.length; i++) { 
// muda os valores do array 
arr[i] = i + 50; 
} 
} 
} 24 
Métodos 
 Get e Set 
◦ Padrão de programação Java chamado “beans” 
especifica que: 
 qualquer método que altere somente o valor de um 
atributo de nome X deve se chamar setX 
 qualquer método que retorne o valor de um atributo 
de nome X deve se chamar getX. 
◦ O padrão não é obrigatório mas é aconselhável 
pois Servlets, Reflexão, JSF e outras APIs fazem 
uso dele. 
◦ Esses métodos são chamados em inglês de 
acessors ou getters e setters 
25 
Métodos 
 Get e Set 
◦ Exemplos: 
public String getNome( ) { 
 return nome; 
} 
public int getIdade( ) { 
 return idade; 
} 
public void setNome(String n) { 
 nome = n; 
} 
public void setIdade(int i){ 
 idade = i; 
} 
 
 
 
26 
Métodos 
 Get e Set 
 
public class Pessoa { 
private String nome; 
private int idade; 
public String getNome( ) { 
return nome; 
} 
public int getIdade( ) { 
return idade; 
} 
public void setNome(String n) { 
nome = n; 
} 
public void setIdade(int i){ 
idade = i; 
} 
} 
 
 
public class TestePessoa { 
public static void main(String[] args) { 
Pessoa p1 = new Pessoa( ); 
Pessoa p2 = new Pessoa( ); 
p1.setNome(“João”); 
p1.setIdade(20); 
p2.setNome(“Maria”); 
p2.setIdade(18); 
System.out. println (“nome1:” + p1.getNome( ) ); 
System.out. println (“id1:” + p1. getIdade( )); 
System.out. println (“nome2:” + p2.getNome( ) ); 
System.out. println (“id2:” + p2. getIdade( )); 
 
} 
} 
 
27 
Métodos 
 this 
1. Palavra chave usada num método para 
explicitar referência para o objeto 
corrente. 
 “o objeto para o qual este trecho de código está 
sendo executado” 
 usado para clareza de código 
private int age; 
public void setAge(int age){ 
this.age = age; 
} 
 
28 
Métodos 
 this 
2. Palavra chave usada num método para explicitar 
referência para o objeto corrente. 
 comumente usado para retorno do objeto corrente 
public class Leaf { 
int i = 0; 
Leaf increment() { 
i++; 
return this; 
} 
void print() { 
System.out.println ("i = " + i); 
} 
public static void main(String[] args) { 
Leaf x = new Leaf(); 
x.increment().increment().increment().print(); 
} 
} 29 
Métodos 
 this 
3. Palavra chave usada num construtor para chamar 
outros construtores. 
public class Flower { 
int petalCount = 0; 
String s = new String("null"); 
Flower(int petals) { 
petalCount = petals; 
} 
Flower(String ss) { 
s = ss; 
} 
Flower(String s, int petals) { 
this(petals); 
//! this(s); // Não pode chamar 2! 
this.s = s; 
} 
} 
30 
Métodos 
 Sobrecarga (overloading) 
◦ Permite que um método com o mesmo 
nome, entretanto com diferentes 
argumentos, possa ter implementações 
diferentes e retornar valores de diferentes 
tipos. 
◦ O compilador distingue os métodos 
sobrecarregados pelas suas assinaturas. 
 
 
31 
Métodos 
 Sobrecarga (overloading) 
 
 
32 
class OverloadDemo { 
void test() { 
System.out.println(“Sem 
Parametros”); 
} 
void test (int a, int b) { 
System.out.println (“a e b: “ + a+ “ 
“ +b); 
} 
double test(double a) { 
System.out.println (“double a: ”+a); 
return a*a; 
} 
} 
 
 
class Overload { 
public static void main (String args[]) { 
OverloadDemo ob = new OverloadDemo () ; 
double result; 
ob.test(); 
ob.test(10, 20); 
result = ob.test (123.25); 
System.out.println (“Resultado de 
ob.test(123.2): “ + result); 
} 
} 
 
Métodos 
 Sobrecarga (overloading) 
◦ O que ocorre se for feita a chamada abaixo? 
int i = 88; 
ob.test(i); 
 
 
33 
Métodos 
 Sobrecarga (overloading) 
◦ O que ocorre se for feita a chamada abaixo? 
int i = 88; 
ob.test(i); 
 
Resp: O método test(double a) será invocado 
 
 
34 
Métodos 
 Sobrecarga (overloading) de construtores 
 
 
35 
public class Pessoa { 
public String nome; 
public String sexo; 
public int idade; 
public Pessoa( ) { 
} 
public Pessoa(String n, String s, int i ) { 
nome = n; 
sexo = s; 
idade = i; 
} 
} 
 
 
public class TestePessoa { 
public static void main(String[] args) { 
System.out. println ("Criação de objetos 
Pessoa :"); 
Pessoa p1 = new Pessoa(); 
p1.nome = “João”; 
Pessoa p2 = new Pessoa(“Maria” ,“f ”, 18); 
System.out. println (“nome1:” + p1.nome ); 
System.out. println (“id1:” + p1.idade); 
System.out. println (“nome2:” + p2.nome ); 
System.out. println (“id2:” + p2.idade); 
} 
} 
 
Métodos 
 Capturando entrada de dados através do 
teclado 
◦ Existem três formas para entrada de dados: 
 Através da Classe BufferedReader 
 Através da Classe Scanner 
 Através da Classe JOptionPane 
 
 
36 
Métodos 
 Capturando entrada de dados através do teclado 
◦ Através da Classe BufferedReader 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.IOException; 
public class GetInputFromKeyboard { 
public static void main(String[] args) { 
BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in)); 
String name = ""; 
System.out.print(“Digite seu nome:"); 
try { 
name = dataIn.readLine(); 
} 
catch (IOException e) { 
System.out.println("Erro!"); 
} 
System.out.println(“Olá " + name +"!"); 
} 
} 
 
37 
Métodos 
 Capturando entrada de dados através do teclado 
◦ Através da Classe Scanner 
import java.util.Scanner; 
public class GetInputFromScanner{ 
public static void main(String[] args) { 
Scanner sc = new Scanner(System.in); 
System.out.println(“Digite seu nome:"); 
String name = sc.next(); 
System.out.println(“Olá " + name +"!"); 
} 
} 
 
 
38 
Métodos 
 Capturando entrada de dados através do teclado 
◦ Através da Classe JOptionPane 
import javax.swing.JOptionPane; 
public class GetInputFromKeyboard { 
public static void main( String[] args ){ 
String name = ""; 
name = JOptionPane.showInputDialog("Please enter your name"); 
String msg = "Hello " + name + "!"; 
JOptionPane.showMessageDialog(null, msg); 
} 
} 
 
 
39 
Composição 
 Capacidade de um objeto ter, como 
membros, objetos de outras classes 
 Exemplo: Classe Employee 
◦ Atributos: 
 nome 
 sobrenome 
 data de nascimento 
 data de contratação 
◦ Métodos: construtores, toString() 
40 
Classe Date 
Composição 
 Exemplo: Classe Employee 
◦ Classe Date: 
 Atributos: mês, dia, ano 
 Métodos: construtores, Get e Set com críticas, 
toString( ) 
41 
Composição 
42 
Composição 
43 
Exercícios 
1. Criar uma classe “Time” que representa 
a hora do dia (hora, minutos e segundos). 
A classe deve conter métodos para: 
◦ setar a hora com as críticas apropriadas 
◦ converter a hora para String no formato 
hh:mm:ss 
◦ converter a hora para String no formato 
hh:mm:ss AM ou PM 
Dica : utilizar o método String.Format 
 
44 
Exercícios - respostas 
 
45

Continue navegando