Baixe o app para aproveitar ainda mais
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
Compartilhar