introdução à programação

30
Introdução à Introdução à Programação Programação Um enfoque orientado a construção de Um enfoque orientado a construção de modelos em programas baseados em modelos em programas baseados em objetos objetos Gustavo Motta Gustavo Motta Departamento de Informática - UFPB Departamento de Informática - UFPB

Upload: duncan-padilla

Post on 02-Jan-2016

17 views

Category:

Documents


0 download

DESCRIPTION

Introdução à Programação. Um enfoque orientado a construção de modelos em programas baseados em objetos. Gustavo Motta Departamento de Informática - UFPB. 3. Classes, objetos & Cia. em Java. Java - PowerPoint PPT Presentation

TRANSCRIPT

Introdução à ProgramaçãoIntrodução à ProgramaçãoUm enfoque orientado a construção de Um enfoque orientado a construção de modelos em programas baseados em modelos em programas baseados em objetosobjetos

Gustavo MottaGustavo MottaDepartamento de Informática - UFPBDepartamento de Informática - UFPB

(C) 2008 Gustavo Motta 2

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Linguagem de programação concorrente de propósito Linguagem de programação concorrente de propósito

geral, baseada em classes e orientada a objetosgeral, baseada em classes e orientada a objetos► Especificamente projetada para ser o mais independente Especificamente projetada para ser o mais independente

possível de ambientes e hardware e softwarepossível de ambientes e hardware e software Portável – tanto o código-fonte, quanto o código objeto, desde Portável – tanto o código-fonte, quanto o código objeto, desde

que haja compilador e máquina virtual Java disponíveis, que haja compilador e máquina virtual Java disponíveis, respectivamente, no ambiente operacional escolhidorespectivamente, no ambiente operacional escolhido► Linux, Windows, PDAs, etc.Linux, Windows, PDAs, etc.

► Robustez – gerência automática de memória, tratamento Robustez – gerência automática de memória, tratamento erros eficaz em tempo de execuçãoerros eficaz em tempo de execução

► Sem custos de licenciamentoSem custos de licenciamento► Grande variedade de bibliotecas para diversas áreas de Grande variedade de bibliotecas para diversas áreas de

aplicaçãoaplicação Interfaces gráficas, internet, jogos, bancos de dados, realidade Interfaces gráficas, internet, jogos, bancos de dados, realidade

virtual, telefoniavirtual, telefonia

(C) 2008 Gustavo Motta 3

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Processamento de programasProcessamento de programas

Programa fonte

Código objetoJava bytecodes

Compilação

Interpretação

Máquina virtual (MV) Java

byte

code

s Código de máquina

Compilador Java

(C) 2008 Gustavo Motta 4

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Processamento de programasProcessamento de programas

► Compilador JavaCompilador Java Traduz um programa fonte em Java num código objeto expresso numa Traduz um programa fonte em Java num código objeto expresso numa

linguagem intermediária denominada de linguagem intermediária denominada de Java bytecodesJava bytecodes► Arquivos .Java sempre são os arquivos de programas em código fonte

de classes Java► Arquivos .Class sempre são os arquivos de programas em bytecode

Java resultante da compilação de código fonte de classes Java Após uma compilação bem sucedida, o programa objeto resultante pode ser

executado sucessivas vezes pelo interpretador da máquina virtual Java

► Máquina Virtual Java Interpreta as instruções expressas em Java bytecodesJava bytecodes e as traduz e

executa como instruções de máquina do ambiente operacional local real Java bytecodesJava bytecodes podem ser executados em qualquer ambiente onde haja

uma máquina virtual Java disponível, independente do local onde o código fonte foi compilado

A disponibilidade de MV Java em múltiplas plataformas torna os programas objeto Java multiplataforma

(C) 2008 Gustavo Motta 5

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Processamento de programasProcessamento de programas

► Plataforma é o ambiente de hardware e software no qual um Plataforma é o ambiente de hardware e software no qual um programa é executadoprograma é executado

► Ilustração de um programa Java executado em múltiplas Ilustração de um programa Java executado em múltiplas plataformasplataformas

Programa fonte Java

Compilador

Compilador

Interpretador

Interpretador

Interpretador

Linux

(C) 2008 Gustavo Motta 6

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Processamento de programas – Ciclo básicoProcessamento de programas – Ciclo básico

Editar o código

fonte de uma classe Java

Editar o código

fonte de uma classe Java

CompilarCompilar

Código objetoCódigo objeto

Lista de erros em tempo de compilação

Corrigir errosCorrigir erros

Executa programa na MV

Java

Executa programa na MV

Java

Lista de erros de encontrados em tempo de

execução

falhas

sucessofalhas

Corrigir errosCorrigir erros

(C) 2008 Gustavo Motta 7

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Plataformas de desenvolvimento e de execuçãoPlataformas de desenvolvimento e de execução

► Java 2 SDK (Java 2 SDK (Software Development KitSoftware Development Kit)) Compilador JavaCompilador Java Documentação das classes das bibliotecas básicasDocumentação das classes das bibliotecas básicas

► API (API (Application Programming InterfaceApplication Programming Interface) básica da plataforma Java) básica da plataforma Java Depurador Java Depurador Java

► Auxilia a entender o funcionamento passo-a-passo de um programa Auxilia a entender o funcionamento passo-a-passo de um programa visando detectar erros em tempo de execuçãovisando detectar erros em tempo de execução

► Java 2 JRE (Java 2 JRE (Java Runtime EnvironmentJava Runtime Environment)) Máquina Virtual JavaMáquina Virtual Java – interpretador – interpretador Java APIJava API

► Coleção de componentes de software prontos para usoColeção de componentes de software prontos para uso GUI – GUI – Graphical User InterfaceGraphical User Interface, funções matemáticas, comunicação, etc., funções matemáticas, comunicação, etc.

► Composta de classes afins agrupadas em pacotes Java (Composta de classes afins agrupadas em pacotes Java (Java Java PackagesPackages))

Isola a execução do programa objeto Java (Isola a execução do programa objeto Java (Java bytecodeJava bytecode) da plataforma ) da plataforma de hardwarede hardware

► Acesse Acesse http://java.sun.com/javase/6/download.jsphttp://java.sun.com/javase/6/download.jsp para baixar o para baixar o ambiente das plataformas Java SDK e Java JREambiente das plataformas Java SDK e Java JRE

Java JRE

class

Editores de programas Java

Compilador Javac Depurador JavaOutras ferramentas

Compilador “on-the-fly”

MáquinaVirtualJava

APIs

(C) 2008 Gustavo Motta 8

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

► JavaJava Categorias de software em JavaCategorias de software em Java

► Classes para representação de modelosClasses para representação de modelos Usadas para representar, em linguagem de programação, modelos e Usadas para representar, em linguagem de programação, modelos e

abstrações de dadosabstrações de dados Não podem ser executadas diretamenteNão podem ser executadas diretamente

► Classes como conjuntos de operações, mas sem estadoClasses como conjuntos de operações, mas sem estado Atuam como bibliotecas de operações afins que não compartilham Atuam como bibliotecas de operações afins que não compartilham

um estado, como as funções matemáticas de trigonometriaum estado, como as funções matemáticas de trigonometria

► Aplicações JavaAplicações Java Podem ser executadas diretamente em uma máquina virtual após a Podem ser executadas diretamente em uma máquina virtual após a

compilaçãocompilação

► AppletsApplets Java Java Aplicação Java que pode ser embutida em páginas HTML para serem Aplicação Java que pode ser embutida em páginas HTML para serem

carregados e executados via Internetcarregados e executados via Internet

Mais informaçõesMais informações► http://java.sun.com/docs/books/tutorial/index.htmlhttp://java.sun.com/docs/books/tutorial/index.html

(C) 2008 Gustavo Motta 9

► Estrutura básica de classes em JavaEstrutura básica de classes em Java

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

/** * A menor classe em Java não precisa de * variáveis, nem de operações, embora possa ser * compilada. */

class MenorClasseEmJava {

/* Corpo da classe, onde se definem variáveis e operações */

} //Fim da declaração da classe ‘MenorClasseEmJava’

(C) 2008 Gustavo Motta 10

► Estrutura básica de classes em JavaEstrutura básica de classes em Java Uma classe é declarada com a palavra-reservada Uma classe é declarada com a palavra-reservada classclass seguida do nome da classe e de seu corpo seguida do nome da classe e de seu corpo entre chavesentre chaves

classclass NomeDaClasse { ... } NomeDaClasse { ... }►Regras para nomes de classesRegras para nomes de classes

Não podem conter espaçosNão podem conter espaços Deve ser iniciado por uma letra ou ‘_’ ou ‘$’Deve ser iniciado por uma letra ou ‘_’ ou ‘$’ Recomenda-se não utilizar acentosRecomenda-se não utilizar acentos Pode conter númerosPode conter números Não pode ser uma palavra reservada da linguagem Java Não pode ser uma palavra reservada da linguagem Java

abaixoabaixo

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

abstract boolean break byte case catchchar class const continue default dodouble else extends false final finallyfloat for goto if implements importinstanceof int interface long native newnull package private protected public returnshort static strictfp super switch synchronizedthis throw throws transient true tryvoid volatile while

(C) 2008 Gustavo Motta 11

► Estrutura básica de classes em JavaEstrutura básica de classes em Java Caracteres maiúsculos e minúsculos são diferentesCaracteres maiúsculos e minúsculos são diferentes

► As palavras As palavras ClassClass, , ClAssClAss, , ClaSsClaSs e e classclass são distintas são distintas Somente a última opção pode ser usada para declarar uma classeSomente a última opção pode ser usada para declarar uma classe As outras provocam erros em tempo de compilaçãoAs outras provocam erros em tempo de compilação

O corpo da classe é delimitado pelos caracteres abre O corpo da classe é delimitado pelos caracteres abre chave chave {{ e fecha chave e fecha chave }}► Todo trecho delimitado por abre chave Todo trecho delimitado por abre chave {{ e fecha chave e fecha chave } }

define um bloco de programadefine um bloco de programa A cada caractere A cada caractere {{ que abre um bloco, deve haver um que abre um bloco, deve haver um

correspondente correspondente } } para fechá-lopara fechá-lo

Não existem regras especiais para o espaçamento Não existem regras especiais para o espaçamento vertical ou horizontal, mas o bom estilo de vertical ou horizontal, mas o bom estilo de programação facilita o entendimento e a modificação programação facilita o entendimento e a modificação de programasde programas

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

/** * A menor classe em Java não precisa de * variáveis, nem de operações, embora possa ser * compilada. */

class MenorClasseEmJava {

/* Corpo da classe, onde se definem variáveis e operações */

} //Fim da declaração da classe ‘MenorClasseEmJava’ Corp

o d

a

class

e

Nome da classeInício do corpo da classe

Fim do corpo da classe

(C) 2008 Gustavo Motta 12

► Estrutura básica de classes em JavaEstrutura básica de classes em Java Estilo para nomes de classesEstilo para nomes de classes

► As palavras que formam o nome devem iniciar com As palavras que formam o nome devem iniciar com

caracteres maiúsculoscaracteres maiúsculos Exemplos: Exemplos: LampadaLampada, , ContaCorrenteContaCorrente, , RegistroAcademicoRegistroAcademico, ,

NotaFiscalDeSupermercadoNotaFiscalDeSupermercado, , FiguraFigura

Excepcionalmente pode-se usar o caractere ‘_’Excepcionalmente pode-se usar o caractere ‘_’

► Exemplos:Exemplos: Contas_a_Pagar Contas_a_Pagar, , Contas_a_ReceberContas_a_Receber

► Devem preferencialmente ser Devem preferencialmente ser substantivossubstantivos

► O nome da classe em Java deve corresponder ao nome do O nome da classe em Java deve corresponder ao nome do

arquivo texto onde é gravadaarquivo texto onde é gravada Cada classe em Java deve ser gravada num arquivo separado Cada classe em Java deve ser gravada num arquivo separado

cujo nome é o nome da classe seguido da extensão cujo nome é o nome da classe seguido da extensão .java.java

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 13

► Estrutura básica de classes em JavaEstrutura básica de classes em Java ComentáriosComentários

► Texto escrito pelo programador para documentar o programa Texto escrito pelo programador para documentar o programa

fonte, mas que é ignorado pelo compilador, podendo serfonte, mas que é ignorado pelo compilador, podendo ser

Numa única linha, iniciado a partir de duas barras inclinadas Numa única linha, iniciado a partir de duas barras inclinadas //// e e

finalizado ao término da linhafinalizado ao término da linha

► Útil para comentários breves junto ao código que fica à Útil para comentários breves junto ao código que fica à

esquerdaesquerda

Bloco de comentário, com múltiplas linhas, delimitado pelo Bloco de comentário, com múltiplas linhas, delimitado pelo

conjunto de caracteres conjunto de caracteres /*/* bloco de comentáriobloco de comentário */*/

► Tudo entre Tudo entre /*/* e e */ */ é considerado comentário pelo é considerado comentário pelo

compilador, sendo, portanto, ignoradocompilador, sendo, portanto, ignorado

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

/** * A menor classe em Java não precisa de * variáveis, nem de operações, embora possa ser * compilada. */

class MenorClasseEmJava {

/* Corpo da classe, onde se definem variáveis e operações */

} //Fim da declaração da classe ‘MenorClasseEmJava’

Início do bloco de comentário

Fim do bloco de comentário

Início do comentário de linha única

(C) 2008 Gustavo Motta 14

► Estrutura básica de classes em JavaEstrutura básica de classes em Java Exemplo de classe executável diretamenteExemplo de classe executável diretamente

►Aplicação JavaAplicação Java

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

/*** A classe 'AloMundo' implementa uma aplicação* Java que simplesmente imprime na saída* padrão (console) o texto 'Alô Mundo!'*/

class AloMundo {

public static void main(String[] args) {

System.out.println("Alo Mundo!"); //Mostra o texto entre aspas. }

}

Cabeçalho da operação especial mainInício do corpo da operação

Início do corpo da operação

(C) 2008 Gustavo Motta 15

► Estrutura básica de classes em JavaEstrutura básica de classes em Java

Exemplo de classe executável diretamenteExemplo de classe executável diretamente

► Aplicação JavaAplicação Java

Caracteriza-se por possuir a operação especial (método) Caracteriza-se por possuir a operação especial (método) mainmain

► Sempre que a MV Java executa uma aplicação, ela procura Sempre que a MV Java executa uma aplicação, ela procura

automaticamente a operação especial automaticamente a operação especial main main para executarpara executar

► Caso a operação Caso a operação main main não esteja declarada, um erro em não esteja declarada, um erro em

tempo de execução é gerado pela MV Javatempo de execução é gerado pela MV Java

O significado das palavras reservadas O significado das palavras reservadas publicpublic, , staticstatic e e voidvoid

e do parâmetro e do parâmetro argsargs será definido mais adiante será definido mais adiante

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 16

►Declaração de operaçõesDeclaração de operações Operações executam ações sobre o estado de um Operações executam ações sobre o estado de um

objetoobjeto► São também denominadas de São também denominadas de métodosmétodos em Java em Java► Nomes de operações seguem as mesmas regras de nomes de Nomes de operações seguem as mesmas regras de nomes de

classesclasses Não podem conter espaçosNão podem conter espaços Deve ser iniciado por uma letra ou ‘_’ ou ‘$’Deve ser iniciado por uma letra ou ‘_’ ou ‘$’ Recomenda-se não utilizar acentosRecomenda-se não utilizar acentos Pode conter númerosPode conter números Não pode ser uma palavra reservada da linguagem JavaNão pode ser uma palavra reservada da linguagem Java

► Métodos (operações) não podem ser criados dentro de outras Métodos (operações) não podem ser criados dentro de outras operações, nem fora do corpo da classe à que pertencemoperações, nem fora do corpo da classe à que pertencem Não podem existir métodos isolados!Não podem existir métodos isolados!

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 17

►Declaração de operaçõesDeclaração de operações EstiloEstilo

► Nomes de operações refletem ações que são efetuadas Nomes de operações refletem ações que são efetuadas sobre o estado de um objeto, portantosobre o estado de um objeto, portanto Devem ser verbos na voz imperativa ou então no infinitivoDevem ser verbos na voz imperativa ou então no infinitivo

► Recomenda-se que comecem com caracteres minúsculosRecomenda-se que comecem com caracteres minúsculos Após a primeira palavra, as seguintes devem começar com o Após a primeira palavra, as seguintes devem começar com o

primeiro caractere maiúsculoprimeiro caractere maiúsculo► Exemplo: Exemplo: apagarRegistroDeNotaapagarRegistroDeNota, , incluiNotaAlunoincluiNotaAluno, etc., etc.

ExemploExemplo► Implementação em Java do modelo de Lampada visto em Implementação em Java do modelo de Lampada visto em

sala de aulasala de aula

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

/*** A classe 'Lampada' implementa um modelo para* controlar o acendimento-apagamento de uma lâmpada.*/

class Lampada { /** * Variável do tipo lógico que indica o estado da lâmpada, isto é, * se ela está acessa ou apagada. Inicialmente ela está apagada. */ boolean aceso = false;

/** * A operação 'apaga' apaga a lâmpada * alterando o seu estado para apagado. */ void apaga() { aceso = false; //Apaga a lâmpada }...

Declaração de variável de instância (ou campo da classe)Tipo da variável declarada

Nome da variável declarada

Comando de inicialização da variável (opcional)

Terminador da declaração de variável

É uma variável de instância (ou campoda classe) porque é declarada em algum lugar dentro do corpo da classe, mas nãodentro do corpo de uma operação!

Declaração de operação

• O tipo void indica que a operação nãoretorna nenhum valor quando executada

• Ela apenas consulta ou modifica o estado do objeto!

• Void em inglês significa “vazio”, “nulo”

• Logo, o tipo void é um tipo que não tem nenhum valor, sendo formado peloconjunto vazio

Nome da operaçãoLista de parâmetros da operação() indica lista vazia

Corpo da operação

Tipo de retorno da operaçãoCabeçalho da operação

(C) 2008 Gustavo Motta 18

►Declaração de operaçõesDeclaração de operações

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java... /** * A operação 'acende' acende a lâmpada * alterando o seu estado para aceso. */ void acende() { aceso = true; //Acende a lâmpada }

/** * A operação ‘estaApagada’ retorna o valor verdadeiro (true) * se a lâmpada estiver apagada, isto é, * o valor da variável ‘aceso’ for falso (false). Caso contrário, * a operação retorna falso (false) porque a lâmpada está acesa. */ boolean estaApagada() { if (aceso == false) { return true; } else { // caso em que a lâmpada está acesa, isto é, ‘aceso == true’ return false; } }} //Fim da classe lâmpada

Tipo de retorno da operação de void

• Neste caso, a operação deve ter em seu corpo a palavra-chave return seguida de um valor ou variável com mesmo tipo que o tipo de retorno da operação

• No caso específico da operação ‘estaApagada’, o tipo do valor de retorno é boolean

• A execução do return resulta no encerramento da execução da operação

• Operações com tipo de retorno void não precisam de um return, mas podem usá-lo para encerrar arbitrariamente a execução a sua execução

• No caso, o return não precisa ser seguido de valor ou variável, pois não retorna nada, apenas encerra a operação

(C) 2008 Gustavo Motta 19

► Referências e criação de objetosReferências e criação de objetos ReferênciaReferência

► Variável cujo conteúdo (valor) é um endereço de uma Variável cujo conteúdo (valor) é um endereço de uma posição de memória onde reside um objeto, ou então o valor nulo posição de memória onde reside um objeto, ou então o valor nulo – – null em Java em Java

► Quando declarada sem inicialização, o seu valor Quando declarada sem inicialização, o seu valor defaultdefault é nulo, é nulo, isto é, não está apontando – referenciando – nenhum objetoisto é, não está apontando – referenciando – nenhum objeto

► A declaração de referência anterior é equivalente a seguinte A declaração de referência anterior é equivalente a seguinte declaraçãodeclaração

► Qualquer tentativa de uso de uma referência apontando para Qualquer tentativa de uso de uma referência apontando para null resulta num erro resulta num erro Antes, deve-se inicializar a referência com o endereço de um objeto Antes, deve-se inicializar a referência com o endereço de um objeto

existenteexistente

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

Lampada lamp1;

Lampada lamp1 = null;

(C) 2008 Gustavo Motta 20

► Referências e criação de objetosReferências e criação de objetos Criação de objetosCriação de objetos

►Objetos são criados (instanciados) com o uso do Objetos são criados (instanciados) com o uso do operador operador new

new tem a capacidade de criar um objeto com base tem a capacidade de criar um objeto com base numa classe existentenuma classe existente

Objetos podem ser criados na própria classe que o Objetos podem ser criados na própria classe que o define, por exemplo, na operação define, por exemplo, na operação mainmain, caso exista, caso exista

1

2

3

Memória

4

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

Lampada lamp1 = null; lamp1 null

lamp1.acende();

• A execução da operação acende() provoca um erro porque não há objeto referenciado por lamp1

• Antes, é preciso criar um objeto para atribuí-lo a lamp1

lamp1 = new Lampada(); aceso false

lamp1 2

• Ou seja, o valor armazenado em lamp1 corresponde ao endereço de memória do objeto recém criado

• Agora, quando manipulamos lamp1, estamos, de fato, manipulando o objeto armazenado na posição de memória 2, isto é, o objeto referenciado por lamp1

lamp1.acende();

aceso true

Lampada lamp2 = lamp1;lamp2 2

• Agora, tanto lamp1, quanto lamp2 estão apontando (referenciando) para um mesmo objeto, na posição 2 de memória

• O objeto na posição 2 também pode ser manipulado através da referência lamp2

lamp2.apaga();

aceso false

lamp2 = new Lampada();

aceso false

lamp2 4

lamp2.acende();

aceso true

(C) 2008 Gustavo Motta 21

► Interagindo com objetosInteragindo com objetos Uma vez declarada uma classe, é recomendável Uma vez declarada uma classe, é recomendável

definir uma outra classe para testar sua definir uma outra classe para testar sua funcionalidadefuncionalidade►Por exemplo, para classe Por exemplo, para classe LampadaLampada, pode-se definir a , pode-se definir a

classe classe CriadorDeLampadasCriadorDeLampadas

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java/** * A classe 'CriadorDeLampadas' cria objetos que * são instâncias da classe 'Lampada' para * demonstrar como manipulá-los e também * para testar a implementação da classe * 'Lampada'*/

class CriadorDeLampadas {

public static void main(String[] args) {

Lampada lamp1 = new Lampada(), lamp2 = new Lampada();

System.out.println();

lamp2.acende(); //Acende a lâmpada 2 System.out.print("lamp2 esta apagada? "); System.out.println(lamp2.estaApagada()); System.out.println();

System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println();...

... lamp1.acende(); //Acende a lâmpada 1 System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println();

lamp1.apaga(); //Apaga a lâmpada 1 System.out.print("lamp1 esta apagada? "); System.out.println(lamp1.estaApagada()); System.out.println();

lamp2.apaga(); //Apaga a lâmpada 2 System.out.print("lamp2 esta apagada? "); System.out.println(lamp2.estaApagada()); System.out.println();

}

} //Fim da classe 'CriadorDeLampadas‘

(C) 2008 Gustavo Motta 22

► Modificadores de acessoModificadores de acesso Permitem que se controle a visibilidade externa das Permitem que se controle a visibilidade externa das

variáveis e operações de um objetovariáveis e operações de um objeto TiposTipos

► publicpublic Uma variável ou operação declarada como pública Uma variável ou operação declarada como pública pode ser pode ser

acessada no ambiente externo à classe onde está declaradaacessada no ambiente externo à classe onde está declarada► publicpublic int int saldo = 0; saldo = 0;► publicpublic int int retornaSaldo(); retornaSaldo();

► privateprivate Uma variável ou operação declarada como privada Uma variável ou operação declarada como privada nãonão pode pode

ser acessada no ambiente externo à classe onde está ser acessada no ambiente externo à classe onde está declarada, ou seja, declarada, ou seja, só pode ser acessada dentro da própria só pode ser acessada dentro da própria classeclasse► privateprivate int int saldo = 0; saldo = 0;► privateprivate int int retornaSaldo(); retornaSaldo();

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 23

►Modificadores de acessoModificadores de acesso TiposTipos

► protectedprotected Uma variável ou operação declarada como protegida pode ser Uma variável ou operação declarada como protegida pode ser

acessada no ambiente externo à classe onde está declarada, acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta ou quando herdada por outra classemesmo diretório que esta ou quando herdada por outra classe► protectedprotected int int saldo = 0; saldo = 0;

► protectedprotected int int retornaSaldo(); retornaSaldo();

► defaultdefault (quando omitido, isto é, não especificado) (quando omitido, isto é, não especificado) Uma variável ou operação declarada sem modificador de acesso Uma variável ou operação declarada sem modificador de acesso

(ou seja, o modificador de acesso (ou seja, o modificador de acesso defaultdefault) pode ser acessada no ) pode ser acessada no ambiente externo à classe onde está declarada, desde que o ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo acesso seja feito a partir de uma classe declarada no mesmo diretório que estadiretório que esta► intint saldo = 0; saldo = 0;

► intint retornaSaldo(); retornaSaldo();

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 24

►Modificadores de acessoModificadores de acesso ExemploExemplo

► Considere o seguinte problema: um cartão de crédito Considere o seguinte problema: um cartão de crédito

simplificadosimplificado

Representar um cartão de crédito que mantém informações Representar um cartão de crédito que mantém informações

sobre o saldo do cartão, seu limite máximo e o total de pontos sobre o saldo do cartão, seu limite máximo e o total de pontos

de bônus, que poderão ser trocados posteriormente por prêmiosde bônus, que poderão ser trocados posteriormente por prêmios

No cartão poderão ser realizadas operações de compra No cartão poderão ser realizadas operações de compra

(aumento do saldo) e de pagamento do cartão (dedução no (aumento do saldo) e de pagamento do cartão (dedução no

saldo)saldo)

O limite do cartão é fixado em 10.000O limite do cartão é fixado em 10.000

A cada compra realizada, o valor da compra é adicionado ao A cada compra realizada, o valor da compra é adicionado ao

saldo, desde que não ultrapasse o limite do cartãosaldo, desde que não ultrapasse o limite do cartão

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 25

►Modificadores de acessoModificadores de acesso

ExemploExemplo► Considere o seguinte problema: um cartão de crédito Considere o seguinte problema: um cartão de crédito

simplificadosimplificado

Cada real de compras vale um ponto de bônus, sendo portanto, Cada real de compras vale um ponto de bônus, sendo portanto,

o valor comprado adicionado ao total de pontos de bônuso valor comprado adicionado ao total de pontos de bônus

A cada pagamento realizado, o valor do pagamento é deduzido A cada pagamento realizado, o valor do pagamento é deduzido

do saldo. do saldo.

Cada real pago vale um ponto de bônus, sendo portanto, o Cada real pago vale um ponto de bônus, sendo portanto, o

valor pago adicionado ao total de pontos de bônusvalor pago adicionado ao total de pontos de bônus

O total de bônus é limitado ao limite de crédito, ou seja, 10.000 O total de bônus é limitado ao limite de crédito, ou seja, 10.000

pontospontos

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 26

►Modificadores de acessoModificadores de acesso

ExemploExemplo►Considere o seguinte problema: um cartão de crédito Considere o seguinte problema: um cartão de crédito

simplificadosimplificado

Deve-se ter operações para retornar o saldo do cartão e o Deve-se ter operações para retornar o saldo do cartão e o

total de bônustotal de bônus

Os valores do saldo e o total de pontos de bônus somente Os valores do saldo e o total de pontos de bônus somente

podem ser alterados através das operações para compra podem ser alterados através das operações para compra

e pagamentoe pagamento

► Nenhum usuário de objetos da classe Nenhum usuário de objetos da classe

“CartaoDeCredito” pode alterar diretamente o saldo “CartaoDeCredito” pode alterar diretamente o saldo

ou o total de pontos do bônusou o total de pontos do bônus

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 27

►Modificadores de acessoModificadores de acesso ExemploExemplo

► Cartão de crédito simplificado – propriedade essenciaisCartão de crédito simplificado – propriedade essenciais Nome da classe: Nome da classe: CartaoDeCreditoCartaoDeCredito EstadoEstado

► Três variáveis do tipo inteiro para representar o saldo, o Três variáveis do tipo inteiro para representar o saldo, o limite e o total de pontos de bônus do cartãolimite e o total de pontos de bônus do cartão

private intprivate int saldo = 0; saldo = 0;

private intprivate int limite = 10000; limite = 10000;

private intprivate int bonus = 0; bonus = 0;

► São privadas porque somente podem ser São privadas porque somente podem ser acessadas/modificadas dentro da classe, através de suas acessadas/modificadas dentro da classe, através de suas operações, que respeitam as regras de limite de crédito e de operações, que respeitam as regras de limite de crédito e de pontuação de bônuspontuação de bônus

► Caso contrário, Caso contrário, alguém, que não a classe, poderia modificar alguém, que não a classe, poderia modificar diretamente o valor do saldo, do limite ou do bônus para diretamente o valor do saldo, do limite ou do bônus para cometer uma fraude, por exemplocometer uma fraude, por exemplo..

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 28

► Modificadores de acessoModificadores de acesso ExemploExemplo

► Cartão de crédito simplificado – propriedade essenciaisCartão de crédito simplificado – propriedade essenciais ComportamentoComportamento

► Determinado pela execução das seguintes operações – Determinado pela execução das seguintes operações –

apenas os cabeçalhos são mostradosapenas os cabeçalhos são mostrados

public voidpublic void compra(int compra(int

valor)valor)

public voidpublic void paga(int valor) paga(int valor)

public intpublic int retornaSaldo() retornaSaldo()

public intpublic int retornaBonus() retornaBonus()

► e pela operação auxiliar abaixoe pela operação auxiliar abaixo

private voidprivate void

creditaBonus(int valor)creditaBonus(int valor)

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 29

►Modificadores de acessoModificadores de acesso ExemploExemplo

► Cartão de crédito simplificadoCartão de crédito simplificado As operações que foram declaradas como públicas As operações que foram declaradas como públicas

respeitam as regras estipuladas para o cartão de crédito. respeitam as regras estipuladas para o cartão de crédito.

Mais do que isso, devem ser Mais do que isso, devem ser visíveisvisíveis, isto é, poder ser , isto é, poder ser

acessada externamente à classe para que possamos dispor acessada externamente à classe para que possamos dispor

de sua funcionalidade essencialde sua funcionalidade essencial

A operação A operação creditaBonuscreditaBonus foi definida como privada porque foi definida como privada porque

é utilizada internamente na classe, para auxiliar na é utilizada internamente na classe, para auxiliar na

implementação das operações implementação das operações compracompra e e pagapaga

► Caso fosse definida como pública, seria possível alterar o Caso fosse definida como pública, seria possível alterar o

valor do total de bonus sem precisar efetuar uma valor do total de bonus sem precisar efetuar uma

compra ou um pagamento, violando, portanto, as regras compra ou um pagamento, violando, portanto, as regras

especificadas para o cartão de créditoespecificadas para o cartão de crédito

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

(C) 2008 Gustavo Motta 30

►Modificadores de acessoModificadores de acesso ExemploExemplo

►Cartão de crédito simplificadoCartão de crédito simplificado Considere uma outra classe qualquer que usa a classe Considere uma outra classe qualquer que usa a classe

CartaoDeCreditoCartaoDeCredito

3. Classes, objetos & Cia. em Java3. Classes, objetos & Cia. em Java

CartaoDeCredito cartao = new CartaoDeCredito();

1

2

3

Memória

4

saldo

limite

bonus

0

10000

0

cartao.compra(100);saldo

limite

bonus

100

10000

100

cartao.compra(500);

saldo

limite

bonus

600

10000

600cartao.paga(400);

saldo

limite

bonus

200

10000

1000cartao.compra(150);

saldo

limite

bonus

350

10000

1150

cartao.bonus = 20000

• Tal tentativa de acesso provoca um erro em tempo de compilação porque a variável bonus foi declarada como privada (private), só podendo ser acessada, portanto, dentro da classe onde foi declarada, ou seja, a classe CartaoDeCredito

• O mesmo vale para as outras variáveis ou operações declaradas como privadas

•Recomendação• Toda variável ou operação de uma classe que não precise ser pública deve ser declarada como privada

• O objetivo é evitar a violação das regras especificadas para a classe