Baixe o app para aproveitar ainda mais
Prévia do material em texto
85Java Básico Classes e Objetos: atributos e métodos 86Java Básico Programação Orientada a Objetos � Olhar o mundo como se tudo pudesse ser representado por objetos � Estruturação do programa é baseada na representação de objetos do mundo real (estados + comportamento) � Vantagens − Facilidade de manutenção − Maior extensibilidade − Maior reuso 87Java Básico Objeto DVD parar()parar() pausar()pausar() avancar()avancar() voltar()voltar() tempoDecorridotempoDecorrido horaAtualhoraAtual tipoSistematipoSistema alterarHora()alterarHora() duracaoDiscoduracaoDisco tocar()tocar() carregarDisco()carregarDisco() 88Java Básico Classes e Objetos � Classes especificam a estrutura e o comportamento dos objetos � Classes são como "moldes" para a criação de objetos � Objetos são instâncias de classes. 89Java Básico Objetos � Um objeto representa uma entidade do mundo real � Todo objeto tem Identidade Estado Comportamento 90Java Básico Objetos � Identidade − Todo objeto é único e pode ser distinguido de outros objetos � Estado − Todo objeto tem estado, que é determinado pelos dados contidos no objeto � Comportamento − O comportamento de um objeto é definido pelos serviços/operações que ele oferece 91Java Básico Número Saldo 21.342-7 875,32 creditar debitar Objeto Conta Bancária 92Java Básico Estados do Objeto Conta creditar(20.00) Número Saldo 21.342-7 875,32 creditar debitar Número Saldo 21.342-7 895,32 creditar debitar 93Java Básico Classe e objeto Conta Bancária Número Saldo String double creditar debitar Número Saldo 21.342-7 875,32 creditar debitar Número Saldo 89.342-X105,33 creditar debitar classeclasse objetosobjetosinstanciaçãoinstanciação 94Java Básico Definição de Classes em Java class NomeDaClasse { CorpoDaClasse } class NomeDaClasse { CorpoDaClasse } O corpo de uma classe pode conter • atributos • métodos • construtores • outras classes... 95Java Básico Estrutura básica de uma classe Java class NomeDaClasse { atributo1; atributo2; ... método1 { Corpo do método1 } método2 { Corpo do método2 } } class Conta { CorpoDaClasse } class Conta { CorpoDaClasse } 96Java Básico Atributos 97Java Básico Declaração de atributos double LIMITE_MAXIMO;double LIMITE_MAXIMO; private static String numero;private static String numero; double saldo;double saldo; modificadores tipo nome ; private String nome, sobrenome;private String nome, sobrenome; Vários atributos podem ser declarados na mesma linha int numEstoque = 8;int numEstoque = 8; Um atributo pode ser inicializado na declaração 98Java Básico Exemplos de atributos class Livro { int anoDePublicacao; int numeroDePaginas; String titulo; ... } class Conta { String numero; double saldo; ... } class Cabine { int nivel; String codigo; int codCategoria int lotacaoMaxima; ... } 99Java Básico Métodos 100Java Básico O que são métodos? Métodos são operações que realizam ações e modificam os valores dos atributos do objeto responsável pela sua execução Métodos são operações que realizam ações e modificam os valores dos atributos do objeto responsável pela sua execução 101Java Básico Declaração de métodos modificadores tipo de retorno nome ;( )parâmetros private double obterRendimento(String numConta, int mes); nomeDoMetodo()nomeDoMetodo() { { Corpo do métodoCorpo do método }} 102Java Básico O corpo do método � O corpo do método contém os comandos que determinam as ações do método � Esses comandos podem − realizar simples atualizações dos atributos de um objeto − retornar valores − executar ações mais complexas como chamar métodos de outros objetos � O corpo do método também pode conter declarações de variáveis − Variáveis cuja existência e valores são válidos somente dentro do método em que são declaradas. 103Java Básico Exemplo de Método class Conta { String numero; double saldo; void creditar(double valor) { saldo = saldo + valor; } ... } 104Java Básico Métodos e tipo de retorno class Conta { String numero; double saldo; String getNumero() { return numero; } double getSaldo() { return saldo; } ... } Os métodos que retornam valores como resultado usam o comando return Os métodos que retornam valores como resultado usam o comando return 105Java Básico Mais sobre métodos class Conta {class Conta { ...... voidvoid debitar(double valor) { debitar(double valor) { saldo = saldo - valor;saldo = saldo - valor; }} }} Por que o debitar não tem como parâmetro o número da conta? Por que o debitar não tem como parâmetro o número da conta? Usa-se void para indicar que o método não retorna nenhum valor, apenas altera os valores dos atributos de um objeto 106Java Básico Chamada de métodos � Métodos são invocados em instâncias (objeto) de alguma classe. − Podem também ser invocados a partir da própria classe (métodos estáticos). � Os objetos se comunicam para realizar tarefas � Parâmetros são passados por “cópia” � A comunicação é feita através da chamada de métodos conta.creditar(45.30) variável contendo referência para objeto nome do método a ser executado operador de chamada de método 107Java Básico Modificadores 108Java Básico Modificadores � Modificadores de acesso − public − protected − private − default (friendly) � Outros modificadores − static − final − native − transient − synchronized Valor padrão quando nenhum modificador de acesso é especificado 109Java Básico Modificadores de Acesso � Controlam o acesso aos membros de uma classe � Membros de uma classe: − A própria classe − Atributos − Métodos e construtores (um tipo especial de métodos) � Não são aplicados à variáveis 110Java Básico public � Uma classe public pode ser instanciada por qualquer classe � Atributos public podem ser acessados (lidos, alterados) por objetos de qualquer classe � Métodos public podem ser chamados por métodos de qualquer classe public class Conta { public String numero; public double saldo; public void creditar(double valor) { saldo = saldo + valor; } ... } public class Conta { public String numero; public double saldo; public void creditar(double valor) { saldo = saldo + valor; } ... } 111Java Básico protected � Usado somente para atributos e métodos � Atributos protected podem ser acessados (lidos, alterados) por objetos de classes dentro do mesmo pacote ou de qualquer subclasse da classe ao qual ele pertence � Métodos protected podem ser chamados por objetos de classes dentro do mesmo pacote ou de qualquer subclasse da classe ao qual ele pertence public class Conta { protected String numero; protected double saldo; protected void creditar(double valor) { saldo = saldo + valor; } ... }} public class Conta { protected String numero; protected double saldo; protected void creditar(double valor) { saldo = saldo + valor; } ... }} 112Java Básico default (friendly) � A classe é visível somente por classes do mesmo pacote � Se um atributo não tem nenhum modificador de acesso associado, ele é “implicitamente”definido como friendly, e só é visível para objeto de classes do mesmo pacote � Se um método não tem nenhum modificador de acesso associado, ele é “implicitamente” definido como friendly, e só pode ser chamado a partir de objetos de classes do mesmo pacote class Conta {class Conta { String numero;String numero; double saldo;double saldo; void creditar(double valor) {void creditar(double valor) { saldo = saldo + valor;saldo = saldo + valor; } } ... ... }} class Conta {class Conta { String numero;String numero; double saldo;double saldo; void creditar(double valor) {void creditar(double valor) { saldo = saldo + valor;saldo = saldo + valor; } } ... ... }} 113Java Básico private e encapsulamento class Pessoa {class Pessoa { privateprivate int anoDeNascimento; int anoDeNascimento; privateprivate String nome, sobrenome; String nome, sobrenome; privateprivate boolean casada = false; boolean casada = false; ...... }} class Pessoa {class Pessoa { privateprivate int anoDeNascimento; int anoDeNascimento; privateprivate String nome, sobrenome; String nome, sobrenome; privateprivate boolean casada = false; boolean casada = false; ...... }} � Java não obriga o uso de private, mas vários autores consideram isso essencial para a programação orientada a objetos � Impacto em coesão e acoplamento � Use private para atributos! atributos private podem ser acessados somente por objetos da mesma classe 114Java Básico private � Métodos private só podem ser chamados por métodos da classe onde são declarados class class PessoaPessoa { { privateprivate int anoDeNascimento; int anoDeNascimento; ...... int getAnoDeNascimento(){int getAnoDeNascimento(){ return formatarAno(); return formatarAno(); }} private private int formatarAno(){int formatarAno(){ //código para formatar o ano//código para formatar o ano }} ... ... }} class class PessoaPessoa { { privateprivate int anoDeNascimento; int anoDeNascimento; ...... int getAnoDeNascimento(){int getAnoDeNascimento(){ return formatarAno(); return formatarAno(); }} private private int formatarAno(){int formatarAno(){ //código para formatar o ano//código para formatar o ano }} ... ... }} 115Java Básico Outros modificadores � final − Pode ser utilizado para em qualquer membro de uma classe − Torna o atributo constante − O atributo não pode ser alterado depois de inicializado − Métodos final não podem ser redefinidos − Classes final não podem ser estendidas 116Java Básico Outros modificadores � final class ConstantesBanco {class ConstantesBanco { public static public static finalfinal int NUM_MAXIMO_CONTAS; int NUM_MAXIMO_CONTAS; private static private static finalfinal double LIMITE_MIN_CHEQUES; double LIMITE_MIN_CHEQUES; private static private static finalfinal int NUM_CHEQUES_TALAO; int NUM_CHEQUES_TALAO; ...... }} Pelo padrão de codificação, constantes devem ter seus nomes em maiúsculas Atributos final geralmente são declarados como static também 117Java Básico Outros modificadores � static − Pode ser usado somente em atributos e métodos − Atributos static pertencem à classe e não aos objetos − Só existe uma cópia de um atributo static de uma classe, mesmo que haja vários objetos da classe − Atributos static são muito usados para constantes − O acesso é feito usando o nome da classe: int numCheques = numTaloes * int numCheques = numTaloes * ConstantesBanco.NUM_CHEQUES_TALAOConstantesBanco.NUM_CHEQUES_TALAO; ; 118Java Básico Outros modificadores � static − Métodos static pertencem a classes e não a objetos − Podem ser usados mesmo sem criar os objetos − Só podem acessar diretamente atributos estáticos − O acesso é feito usando o nome da classe: x = x = MathMath.random();.random(); media = media = FuncoesFuncoes.calcularMedia(valores);.calcularMedia(valores); 119Java Básico Outros modificadores � native − Usado somente em métodos − Código nativo � transient − Usado somente em atributos − Não é armazenado como parte persistente do objeto � synchronized − Usado somente em métodos − Acesso concorrente 120Java Básico Criação e remoção de objetos 121Java Básico Criação de objetos � Objetos precisam ser criados antes de serem utilizados � Construtores precisam ser definidos na classe � A criação é feita com o operador new Conta c = Conta c = newnew Conta(); Conta();Conta c = Conta c = newnew Conta(); Conta(); construtor 122Java Básico Construtores � Além de métodos e atributos, uma classe pode conter construtores � Construtores definem como os atributos de um objeto devem ser inicializados � São semelhantes a métodos, mas não têm tipo de retorno � O nome do construtor deve ser exatamente o nome da classe. � Uma classe pode ter diversos construtores, diferenciados pelos parâmetros nome da classe parâmetros( ) corpo do construtor { } modificador public Navio(String umNome, int umNumero) {public Navio(String umNome, int umNumero) { nome = umNome;nome = umNome; numCabines = umNumero;numCabines = umNumero; }} public Navio(String umNome, int umNumero) {public Navio(String umNome, int umNumero) { nome = umNome;nome = umNome; numCabines = umNumero;numCabines = umNumero; }} 123Java Básico Construtor default public Conta() {public Conta() { }} public Conta() {public Conta() { }} � Caso não seja definido um construtor, um construtor default é fornecido implicitamente � O construtor default inicializa os atributos com seus valores default � O construtor default não tem parâmetros: 124Java Básico Valores default para atributos TipoTipo Valor DefaultValor Default byte, short, int, long 0 float 0.0f double 0.0 char `\u0000` Tipos referência (Strings, arrays, objetos em geral) null boolean false 125Java Básico Outros construtores class Conta {class Conta { String numero;String numero; double saldo;double saldo; public public Conta(String numeroConta, double Conta(String numeroConta, double saldoInicial){saldoInicial){ numero = numeroConta;numero = numeroConta; saldo = saldoInicial;saldo = saldoInicial; }} ...... }} class Conta {class Conta { String numero;String numero; double saldo;double saldo; public public Conta(String numeroConta, double Conta(String numeroConta, double saldoInicial){saldoInicial){ numero = numeroConta;numero = numeroConta; saldo = saldoInicial;saldo = saldoInicial; }} ...... }} Quando é definido um construtor com parâmetros, o construtor default não é mais gerado • Podem ser criados novos construtores, com parâmetros 126Java Básico Conta c;Conta c; ...... c = c = newnew Conta(“12345”,100); Conta(“12345”,100); responsável por inicializar os atributos do objeto criado Mais sobre criação de objetos responsável por criar um objeto do tipo Conta em memória Atribui à variável c a referência criada para o novo objeto 127Java Básico Remoção de objetos �Não existe mecanismo de remoção explícita de objetos da memória em Java (como o free() de C++) � O Garbage Collector (coletor de lixo) de Java elimina objetos da memória quando eles não são mais referenciados � Você não pode obrigar que a coleta de lixo seja feita � A máquina virtual Java decide a hora da coleta de lixo 128Java Básico Referências Objetos são manipulados através de referências c == nullConta c = null; c = new Conta(“1287”,0); c.getSaldo(); c chama o método getSaldo() do objeto referenciado pela variável c 129Java Básico Mais de uma variável pode armazenar referências para um mesmo objeto (aliasing) Conta Conta aa = new Conta(“123-4”,340.0); = new Conta(“123-4”,340.0); Conta Conta bb;; b = ab = a; ; b.creditar(100);b.creditar(100); System.out.println(System.out.println(a.getSaldo());a.getSaldo()); a e b passam a referenciar a mesma conta qualquer efeito via b é refletido via a Referências
Compartilhar