O documento apresenta os conceitos básicos de orientação a objetos em Java, incluindo classe, objeto, atributos, métodos, instanciação de objetos, referências, construtores e associação entre classes.
Classe e ObjetoClasse Projeto ou definição da conta. Possui: Características / Propriedades / Atributos. Comportamentos / Métodos. Objetos São contas de verdade, possuindo a mesma estrutura definida na classe.
4.
Classe e ObjetoClasse != Objeto Receita de bolo != bolo Planta da casa != casa
5.
Classe e Objetoclass Conta { int numero ; String nome ; double saldo ; double limite ; // .. }
6.
Instanciação de ObjetosUm objeto é uma instância de uma classe; Para instanciar um objeto a palavra reservada new é utilizada; Retorna uma referência para o objeto criado. Em Java, todos os objetos são criados dinamicamente. // Declaração da variável "s" String s ; // Criação da variável atribuída a "s" s = new String (); // Declaração da variável "p" e // criação da variável atribuída a "p" Pessoa p = new Pessoa ();
7.
new Aloca memóriapara um objeto; Devolve uma referência para o objeto criado.
8.
Atributos São característicasde cada objeto de uma determinada classe. São declarados fora de um bloco. Ficam “soltos” dentro da classe. Também chamados de: Propriedades Características Variáveis de instância Variáveis de objeto
9.
Usando uma outraClasse class Programa { public static void main ( String [] args ) { Conta minhaConta = new Conta (); minhaConta . nome = "Duke" ; minhaConta . saldo = 1000.0 ; System . out . println ( "Saldo atual: " + minhaConta . saldo ); } }
10.
Métodos Definem oscomportamentos de uma classe, ou seja, o que ela faz. É a maneira de fazer uma operação com um objeto. Exemplos de métodos para uma conta: saca deposita consultaSaldo
11.
Métodos class Conta { int numero ; String nome ; double saldo ; double limite ; void saca ( double valor ) { this . saldo = this . saldo - valor ; } void deposita ( double valor ) { this . saldo = this . saldo + valor ; } double consultaSaldo () { return this . saldo ; } }
12.
Retorno de MétodosTodo método deve ter um retorno, nem que esse retorno seja nada (void).
13.
Retorno de Métodosclass Conta { int numero ; String nome ; double saldo ; double limite ; boolean saca ( double valor ) { if ( this . saldo < valor ) { return false ; } else { this . saldo = this . saldo - valor ; return true ; } } void deposita ( double valor ) { this . saldo = this . saldo + valor ; } double consultaSaldo () { return this . saldo ; } }
14.
Usando a classeConta class Programa { public static void main ( String [] args ) { Conta minhaConta = new Conta (); minhaConta . nome = "Duke" ; minhaConta . saldo = 1000 ; boolean consegui = minhaConta . saca ( 2000 ); if ( consegui ){ System . out . println ( "Consegui sacar" ); } else { System . out . println ( "Não consegui sacar" ); } } }
15.
Criando instâncias daclasse Conta class TestaDuasContas { public static void main ( String [] args ) { Conta minhaConta = new Conta (); minhaConta . saldo = 1000 ; Conta meuSonho = new Conta (); meuSonho . saldo = 1500000 ; } }
16.
Referência Variáveis associadasa um objeto não guardam o objeto, mas uma referência para o objeto. Uma variável nunca é um objeto, mas uma referência para um objeto.
Referência Não écorreto dizer: “c1 é um objeto” . Correto seria: “Tenho uma referência c1 a um objeto do tipo Conta” . No entanto, por praticidade diz-se: “Tenho um objeto c1 do tipo Conta” . c1 e c2 guardam um número que identifica a posição de memória do objeto Conta referenciado por cada uma delas. Conta c1 ; c1 = new Conta (); Conta c2 ; c2 = new Conta ();
19.
Referência – Qualo resultado? class TestaReferencias { public static void main ( String args []) { Conta c1 = new Conta (); c1 . deposita ( 100 ); Conta c2 = c1 ; c2 . deposita ( 200 ); System . out . println ( c1 . saldo ); System . out . println ( c2 . saldo ); } }
Referência thisTodo objeto possui uma referência implícita para si mesmo, chamada referência this. A referência this é válida dentro de todo o corpo de uma classe, até mesmo no construtor. Quando um parâmetro de algum método de uma classe tiver o mesmo nome de um atributo da classe, a referência this é utilizada para referenciar o atributo.
22.
Igualdade de objetosO operador == compara o conteúdo das variáveis. As variáveis não guardam o objeto, mas o endereço em que o objeto se encontra. == compara se as variáveis apontam para o mesmo objeto e não se os objetos possuem o mesmo conteúdo. class VerificaIgualdade { public static void main ( String args []) { Conta c1 = new Conta (); c1 . nome = "Duke" ; c1 . saldo = 227 ; Conta c2 = new Conta (); c2 . nome = "Duke" ; c2 . saldo = 227 ; if ( c1 == c2 ) { System . out . println ( "Contas iguais" ); } } }
23.
Igualdade de objetosPara saber se dois objetos têm o mesmo conteúdo, é preciso comparar atributo por atributo.
Criando o métodotransfere class Conta { // atributos e metodos... void transfere ( Conta destino , double valor ) { this . saldo = this . saldo – valor ; destino . saldo = destino . saldo + valor ; } }
Um método usandooutro class Conta { // atributos e metodos... boolean transfere ( Conta destino , double valor ) { boolean retirou = this . saca ( valor ); if ( retirou == false ) { // não deu pra sacar! return false ; } else { destino . deposita ( valor ); return true ; } } }
28.
Passagem de ParâmetrosPara parâmetros que são objetos, há a passagem apenas do endereço de memória. Assim, não há cópia de objetos.
29.
Inicialização de AtributosVariáveis locais sempre precisam ser explicitamente inicializadas; Atributos recebem um valor padrão, mesmo que não sejam inicializados. No caso numérico, recebem 0 ; No caso de boolean, recebem false . No caso de objetos, recebem null . Podemos inicializar os atributos juntamente com sua declaração: class Conta { int numero = 1234 ; String dono = "Duke" ; String cpf = "123.456.789-10" ; double saldo = 1000 ; double limite = 1000 ; // ... }
Associação – Composição class Cliente { String nome ; String endereco ; String cpf ; Conta conta; } class Conta { int numero ; double saldo ; double limite ; Cliente dono ; // .. } class Teste { public static void main ( String [] args ) { Conta minhaConta = new Conta (); Cliente c = new Cliente (); minhaConta . dono = c ; c.conta = minhaConta; // ... } }
32.
null null éuma palavra chave em Java que indica uma referência para nenhum objeto.
33.
Construtores Ver Cap.6 da apostila da Caelum Utilizados para instanciar objetos da classe. Não são métodos, pois não possuem retorno e só são executados durante a instanciação do objeto. Algumas vezes são usados para inicializar atributos de um novo objeto. Possuem nome idêntico ao da classe. Possibilitam ou mesmo obrigam a passagem de argumentos para o objeto durante o processo de criação do mesmo. Facilitam a instanciação seguida de inicialização de atributos. Quando a classe não tem um construtor declarado explicitamente, um construtor padrão sem argumentos é implicitamente criado.
34.
Construtores Criando umconstrutor Usando um construtor // Construtor da classe Pessoa Conta (String nome, double saldo ) { this . nome = nome ; this . saldo = saldo ; } Conta c = new Conta ("Maria", 1000);
35.
Construtores Múltiplos Fornecemdiferentes formas para se inicializar um objeto. Implementam sobrecarga de métodos. São diferenciados pela quantidade, tipo e posição dos parâmetros. // Construtores múltiplos public Conta (String nome, double saldo , double limite ) { this . nome = nome ; this . saldo = saldo ; this . limite = limite ; } public Conta ( Conta c ) { this .nome = c . nome ; this . saldo = c . saldo ; this . limite = c . limite ; } public Conta () { }
36.
Construtores Múltiplos Usoespecial da referência this Quando uma classe possui vários construtores, a referência this pode ser usada, em um construtor, para chamar outros construtores Esse uso da referência this exige que ela seja o primeiro comando dentro de um construtor. // Construtores múltiplos public Conta (String nome, double saldo , double limite ) { this . nome = nome ; this . saldo = saldo ; this . limite = limite ; } public Conta ( Conta c ) { this (c.nome, c.saldo, c.limite) ; } public Conta(String nome) { this (nome, 0, 0); } public Conta () { }
37.
Exercícios Classe Carroe Motor Páginas 46, 47 (40, 41) Classe Funcionario Páginas 47 a 51 (41 a 44) Classe Pessoa, Porta e Casa Página 52 (45 e 46)
38.
Exercício Implemente asclasses em Java de acordo com o diagrama abaixo: O método main de UsaConta deve instanciar e associar uma Pessoa de nome “Maria” a uma Conta com saldo 1000.
39.
Referências e RecursosLivros/Apostilas Apostila Caelum – Java e Orientação a Objetos - FJ11 Object-Oriented System Development: HTML Edition http://g.oswego.edu/dl/oosdw3/ Software Engineering (5th Edition) – Ian Sommerville Object-Oriented Analysis and Design with Applications – Grady Booch Object-Oriented Software Engineering: A Case Driven Approach – Ivar Jacobson Thinking in Java, 3 rd ed. Revision 4.0 – Bruce Eckel http://www.mindview.net/Books/TIJ/ Web http://www.argonavis.com.br/cursos/java/j100/index.html