introdução à programação
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 PresentationTRANSCRIPT
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