Orientação a Objetos Básica Regis Pires Magalhães [email_address]
Classe e Objeto
Classe e Objeto Classe 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.
Classe e Objeto Classe  != Objeto Receita de bolo != bolo Planta da casa != casa
Classe e Objeto class   Conta   { int   numero ; String   nome ; double   saldo ; double   limite ; // .. }
Instanciação de Objetos Um 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 ();
new Aloca memória para um objeto; Devolve uma referência para o objeto criado.
Atributos São características de 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
Usando uma outra Classe 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 ); } }
Métodos Definem os comportamentos 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
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 ; } }
Retorno de Métodos Todo método deve ter um retorno, nem que esse retorno seja nada (void).
Retorno de Métodos class   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 ; } }
Usando a classe Conta class   Programa   { public   static   void   main ( String []   args )   { Conta   minhaConta   =   new   Conta (); minhaConta . nome   =   &quot;Duke&quot; ; minhaConta . saldo   =   1000 ; boolean   consegui   =   minhaConta . saca ( 2000 ); if ( consegui ){ System . out . println ( &quot;Consegui sacar&quot; ); }  else  {  System . out . println ( &quot;Não consegui sacar&quot; ); } } }
Criando instâncias da classe Conta class   TestaDuasContas   { public   static   void   main ( String []   args )   { Conta   minhaConta  =   new   Conta (); minhaConta . saldo   =   1000 ; Conta   meuSonho =  new   Conta (); meuSonho . saldo   =   1500000 ; } }
Referência Variáveis associadas a 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
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 ();
Referência – Qual o 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 Conta   c1   =   new   Conta (); Conta   c2   =   c1 ;
Referência  this Todo 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.
Igualdade de objetos O 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   =   &quot;Duke&quot; ; c1 . saldo   =   227 ; Conta   c2   =   new   Conta (); c2 . nome   =   &quot;Duke&quot; ; c2 . saldo   =   227 ; if   ( c1   ==   c2 )   { System . out . println ( &quot;Contas iguais&quot; ); } } }
Igualdade de objetos Para saber se dois objetos têm o mesmo conteúdo, é preciso comparar atributo por atributo.
Criando o método transfere
Criando o método transfere class   Conta   { // atributos e metodos... void   transfere ( Conta   destino ,   double   valor )   { this . saldo   =   this . saldo   –   valor ; destino . saldo   =   destino . saldo   +   valor ; } }
Um método usando outro
Um método usando outro 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 ; } } }
Passagem de Parâmetros Para parâmetros que são objetos, há a passagem apenas do endereço de memória. Assim, não há cópia de objetos.
Inicialização de Atributos Variá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   =   &quot;Duke&quot; ; String   cpf   =   &quot;123.456.789-10&quot; ; double   saldo   =   1000 ; double   limite   =   1000 ; // ... }
Associação
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; // ... }   }
null null é uma palavra chave em Java que indica uma referência para nenhum objeto.
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.
Construtores Criando um construtor Usando um construtor // Construtor da classe Pessoa Conta (String nome,   double   saldo )   { this . nome   =   nome ; this . saldo   =   saldo ; } Conta   c   =   new   Conta (&quot;Maria&quot;, 1000);
Construtores Múltiplos Fornecem diferentes 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 ()   {   }
Construtores Múltiplos Uso especial 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 ()   {   }
Exercícios Classe Carro e 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)
Exercício Implemente as classes 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.
Referências e Recursos Livros/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

Java 05 Oo Basica

  • 1.
    Orientação a ObjetosBásica Regis Pires Magalhães [email_address]
  • 2.
  • 3.
    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 &quot;s&quot; String s ; // Criação da variável atribuída a &quot;s&quot; s = new String (); // Declaração da variável &quot;p&quot; e // criação da variável atribuída a &quot;p&quot; 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 = &quot;Duke&quot; ; minhaConta . saldo = 1000.0 ; System . out . println ( &quot;Saldo atual: &quot; + 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 = &quot;Duke&quot; ; minhaConta . saldo = 1000 ; boolean consegui = minhaConta . saca ( 2000 ); if ( consegui ){ System . out . println ( &quot;Consegui sacar&quot; ); } else { System . out . println ( &quot;Não consegui sacar&quot; ); } } }
  • 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.
  • 17.
  • 18.
    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 ); } }
  • 20.
    Referência Conta c1 = new Conta (); Conta c2 = c1 ;
  • 21.
    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 = &quot;Duke&quot; ; c1 . saldo = 227 ; Conta c2 = new Conta (); c2 . nome = &quot;Duke&quot; ; c2 . saldo = 227 ; if ( c1 == c2 ) { System . out . println ( &quot;Contas iguais&quot; ); } } }
  • 23.
    Igualdade de objetosPara saber se dois objetos têm o mesmo conteúdo, é preciso comparar atributo por atributo.
  • 24.
  • 25.
    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 ; } }
  • 26.
  • 27.
    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 = &quot;Duke&quot; ; String cpf = &quot;123.456.789-10&quot; ; double saldo = 1000 ; double limite = 1000 ; // ... }
  • 30.
  • 31.
    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 (&quot;Maria&quot;, 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