3.1 Classes e Objetos • Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. • Por exemplo, um programa de controle de estoque de uma livraria pode conter vários clientes e vários livros. • As classes descrevem as informações armazenadas e os serviços providos por um objeto. • Em outras palavras, são padrões a partir dos quais os objetos são criados (código). Alan Santos 1 3.1 Classes e Objetos • Um objeto é uma instância de uma classe. • Os objetos que são instâncias de uma mesma classe armazenam os mesmos tipos de informações e apresentam o mesmo comportamento. Alan Santos 2 3.1 Classes e Objetos • Um objeto representa uma entidade • concreta (ex. produto em estoque) ou • abstrata (transação bancária, histórico, taxa de juros) do mundo real. • Também pode ser algo necessário ao funcionamento do sistema sem uma ligação forte com uma entidade do mundo real. Alan Santos 3 3.1 Classes e Objetos • Um objeto num sistema possui três propriedades: • Estado: definido pelo conjunto de propriedades do objeto (os atributos) e de suas relações com os outros objetos, muda com o tempo. • Ex. objeto turma pode estar aberta ou fechada – passa ao estado fechada quando 10 alunos fizerem a inscrição. • Comportamento: como um objeto responde às solicitações dos outros e tudo mais o que um objeto é capaz de fazer. É implementado por um conjunto de operações. • Ex. objeto turma pode ter operações acrescentar aluno ou suprimir aluno. • Identidade: significa que cada objeto é único no sistema Alan Santos 4 3.1 Classes e Objetos • Em Java, uma classe é definida pela palavra-chave class seguida do nome da classe. • A conta corrente é uma classe que é definida da seguinte maneira: class ContaCorrente { // Definição dos métodos e atributos } Alan Santos 5 3.1.1 Variáveis • Definem o comportamento estático do objeto. • Para cada variável são especificados: • • • • um modificador (opcional), o nome, o tipo e o valor inicial (opcional) do atributo. Alan Santos 6 3.1.1 Variáveis • Na classe ContaCorrente, defina os atributos: • nome (nome do titular da conta) e • saldo (valor do saldo) Alan Santos 7 3.1.2 Métodos • Definem os serviços que podem ser solicitados a uma instância (objeto), • ou seja, o comportamento dinâmico de um objeto. • A definição de um método em Java inclui • • • • • um modificador (opcional), o tipo do dado retornado após a execução do método, o nome do método, o nome e tipo dos parâmetros e o código delimitado por chaves ( { } ). Alan Santos 8 3.1.2 Métodos • Na classe ContaCorrente, defina os métodos: • verificaSaldo: retorna o saldo da conta corrente; • depositaValor: deposita um valor especificado x na conta; • retiraValor: retira um valor especificado x da conta; • A lógica dos métodos é escrita a seguir: Alan Santos 9 3.1.2 Métodos class ContaCorrente { float saldo; String nome; float verificaSaldo ( ) { return saldo; } void depositaValor (float valor) { saldo = saldo + valor; } void retiraValor (float valor) { if (saldo>=valor) { saldo = saldo – valor; } } } Alan Santos 10 3.1.3 Métodos Construtores • Quando uma classe é criada, pode ser necessário atribuir um valor inicial a algumas variáveis ou chamar um método. • Isto pode ser feito através de um método construtor, o qual é automaticamente executado toda vez que a classe é instanciada. • Em Java, os construtores têm o mesmo nome da classe a qual são membros. Alan Santos 11 3.1.3 Métodos Construtores • O método construtor não tem tipo de retorno • O tipo implícito de retorno de um objeto construtor é a instância da própria classe. • Não é obrigatório criar um construtor • Caso não exista a declaração de um construtor, o compilador gera automaticamente um construtor default (padrão). • Uma mesma classe pode ter vários construtores, desde que eles tenham • Quantidade diferente de parâmetros ou • Parâmetros de tipos diferentes. Alan Santos 12 3.1.4 Instanciando uma classe • Em Java, os objetos são criados (as classes são instanciadas) através do operador new. • A execução desse comando cria um objeto de um determinado tipo (classe) e retorna uma referência a este objeto. Alan Santos 13 3.1.4 Instanciando uma classe • Implemente e execute o código abaixo e observe o resultado: ContaCorrente minhaConta; minhaConta = new ContaCorrente (“Maria”); Alan Santos 14 3.1.4 Instanciando uma classe • Analise o que aconteceu • Na primeira linha tem-se o nome da variável (minhaConta) na qual o identificador do objeto será armazenado. • Na segunda linha é criado o objeto do tipo ContaCorrente com o comando new que retorna o identificador do objeto que é armazenado na variável minhaConta. • O código anterior poderia ser escrito também da seguinte maneira: ContaCorrente minhaConta = new ContaCorrente (“Maria”); Alan Santos 15 3.1.5 Operador this • Java inclui um valor de referência especial, chamado this, que é usado dentro de qualquer método para referir-se ao objeto corrente. • O valor de this refere-se ao objeto do qual o método corrente foi chamado. • Em Java é permitido que variáveis locais (dentro de um método) tenham o mesmo nome de variáveis de instância. • Para definir que se está acessando a variável de instância, usa-se o this. Alan Santos 16 3.1.5 Operador this • Declare os métodos construtores da classe ContaCorrente da seguinte maneira: class ContaCorrente { float saldo; String nome; public ContaCorrente (String nome) { this.nome = nome; saldo = 0; } ... // restante do código } Alan Santos 17 3.1.6 Acessando métodos e variáveis de um objeto • Após criar um objeto, queremos manipular os seus dados acessando as variáveis e métodos deste objeto. • Os métodos e variáveis são chamados de uma instância de outra classe através de operador ponto ( . ). Alan Santos 18 3.1.6 Acessando métodos e variáveis de um objeto • Implemente uma classe chamada AcessaContaCorrente que cria um objeto do tipo ContaCorrente e modifica os seus valores, definindo o nome do dono da conta e modificando e visualizando o saldo. Alan Santos 19 3.1.6 Acessando métodos e variáveis de um objeto class AcessaContaCorrente { public static void main (String args [ ]) { ContaCorrente minhaConta = new ContaCorrente (“Maria”); float saldo; saldo = minhaConta.verificaSaldo ( ); System.out.println (saldo); minhaConta.depositaValor (200); saldo = minhaConta.verificaSaldo ( ); System.out.println (saldo); } } Alan Santos 20 3.1.6 Acessando métodos e variáveis de um objeto • Crie um objeto do tipo ContaCorrente com valores iniciais de “João” para nome e 1000 para valor. • Depois, • verifique o saldo da conta, • deposite 300 e • verifique novamente o saldo. Alan Santos 21