A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Introdução à Programação Um enfoque orientado a construção de modelos em programas baseados em objetos Gustavo Motta Departamento de Informática - UFPB."— Transcrição da apresentação:

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

2 (C) 2008 Gustavo Motta2 3. Classes, objetos & Cia. em Java Java Java Linguagem de programação concorrente de propósito geral, baseada em classes e orientada a objetos Linguagem de programação concorrente de propósito geral, baseada em classes e orientada a objetos Especificamente projetada para ser o mais independente possível de ambientes e hardware e software Especificamente projetada para ser o mais independente possível de ambientes e hardware e software Portável – tanto o código-fonte, quanto o código objeto, desde que haja compilador e máquina virtual Java disponíveis, respectivamente, no ambiente operacional escolhido Portável – tanto o código-fonte, quanto o código objeto, desde que haja compilador e máquina virtual Java disponíveis, respectivamente, no ambiente operacional escolhido Linux, Windows, PDAs, etc. Linux, Windows, PDAs, etc. Robustez – gerência automática de memória, tratamento erros eficaz em tempo de execução Robustez – gerência automática de memória, tratamento erros eficaz em tempo de execução Sem custos de licenciamento Sem custos de licenciamento Grande variedade de bibliotecas para diversas áreas de aplicação Grande variedade de bibliotecas para diversas áreas de aplicação Interfaces gráficas, internet, jogos, bancos de dados, realidade virtual, telefonia Interfaces gráficas, internet, jogos, bancos de dados, realidade virtual, telefonia

3 (C) 2008 Gustavo Motta3 3. Classes, objetos & Cia. em Java Java Java Processamento de programas Processamento de programas Programa fonte Código objeto Java bytecodes Compilação Interpretação Máquina virtual (MV) Java bytecodes Código de máquina Compilador Java

4 (C) 2008 Gustavo Motta4 3. Classes, objetos & Cia. em Java Java Java Processamento de programas Processamento de programas Compilador Java Compilador Java Traduz um programa fonte em Java num código objeto expresso numa linguagem intermediária denominada de Java bytecodes Traduz um programa fonte em Java num código objeto expresso numa linguagem intermediária denominada de Java 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 Java bytecodes Interpreta as instruções expressas em Java bytecodes e as traduz e executa como instruções de máquina do ambiente operacional local real Java bytecodes Java 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

5 (C) 2008 Gustavo Motta5 3. Classes, objetos & Cia. em Java Java Java Processamento de programas Processamento de programas Plataforma é o ambiente de hardware e software no qual um programa é executado Plataforma é o ambiente de hardware e software no qual um programa é executado Ilustração de um programa Java executado em múltiplas plataformas Ilustração de um programa Java executado em múltiplas plataformas Programa fonte Java Compilador Interpretador Linux

6 (C) 2008 Gustavo Motta6 3. Classes, objetos & Cia. em Java Java Java Processamento de programas – Ciclo básico Processamento de programas – Ciclo básico Editar o código fonte de uma classe Java Compilar Código objeto Lista de erros em tempo de compilação Corrigir erros Executa programa na MV Java Lista de erros de encontrados em tempo de execução falhas sucesso falhas Corrigir erros

7 (C) 2008 Gustavo Motta7 3. Classes, objetos & Cia. em Java Java Java Plataformas de desenvolvimento e de execução Plataformas de desenvolvimento e de execução Java 2 SDK (Software Development Kit) Java 2 SDK (Software Development Kit) Compilador Java Compilador Java Documentação das classes das bibliotecas básicas Documentação das classes das bibliotecas básicas API (Application Programming Interface) básica da plataforma Java API (Application Programming Interface) básica da plataforma Java Depurador Java Depurador Java Auxilia a entender o funcionamento passo-a-passo de um programa visando detectar erros em tempo de execução Auxilia a entender o funcionamento passo-a-passo de um programa visando detectar erros em tempo de execução Java 2 JRE (Java Runtime Environment) Java 2 JRE (Java Runtime Environment) Máquina Virtual Java – interpretador Máquina Virtual Java – interpretador Java API Java API Coleção de componentes de software prontos para uso Coleção de componentes de software prontos para uso GUI – Graphical User Interface, funções matemáticas, comunicação, etc. GUI – Graphical User Interface, funções matemáticas, comunicação, etc. Composta de classes afins agrupadas em pacotes Java (Java Packages) Composta de classes afins agrupadas em pacotes Java (Java Packages) Isola a execução do programa objeto Java (Java bytecode) da plataforma de hardware Isola a execução do programa objeto Java (Java bytecode) da plataforma de hardware Acesse para baixar o ambiente das plataformas Java SDK e Java JRE Acesse para baixar o ambiente das plataformas Java SDK e Java JREhttp://java.sun.com/javase/6/download.jsp Java JRE class Editores de programas Java Compilador Javac Depurador Java Outras ferramentas Compilador on-the-fly Máquina Virtual Java APIs

8 (C) 2008 Gustavo Motta8 3. Classes, objetos & Cia. em Java Java Java Categorias de software em Java Categorias de software em Java Classes para representação de modelos Classes para representação de modelos Usadas para representar, em linguagem de programação, modelos e abstrações de dados Usadas para representar, em linguagem de programação, modelos e abstrações de dados Não podem ser executadas diretamente Não podem ser executadas diretamente Classes como conjuntos de operações, mas sem estado Classes como conjuntos de operações, mas sem estado Atuam como bibliotecas de operações afins que não compartilham um estado, como as funções matemáticas de trigonometria Atuam como bibliotecas de operações afins que não compartilham um estado, como as funções matemáticas de trigonometria Aplicações Java Aplicações Java Podem ser executadas diretamente em uma máquina virtual após a compilação Podem ser executadas diretamente em uma máquina virtual após a compilação Applets Java Applets Java Aplicação Java que pode ser embutida em páginas HTML para serem carregados e executados via Internet Aplicação Java que pode ser embutida em páginas HTML para serem carregados e executados via Internet Mais informações Mais informações

9 (C) 2008 Gustavo Motta9 Estrutura básica de classes em Java Estrutura básica de classes em Java 3. 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

10 (C) 2008 Gustavo Motta10 Estrutura básica de classes em Java Estrutura básica de classes em Java Uma classe é declarada com a palavra-reservada class seguida do nome da classe e de seu corpo entre chaves Uma classe é declarada com a palavra-reservada class seguida do nome da classe e de seu corpo entre chaves class NomeDaClasse {... } Regras para nomes de classes Regras para nomes de classes Não podem conter espaços Nã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 acentos Recomenda-se não utilizar acentos Pode conter números Pode conter números Não pode ser uma palavra reservada da linguagem Java abaixo Não pode ser uma palavra reservada da linguagem Java abaixo 3. Classes, objetos & Cia. em Java abstract boolean break byte casecatch charclassconstcontinuedefaultdo doubleelseextendsfalsefinalfinally floatforgotoifimplementsimport instanceofintinterfacelongnativenew nullpackageprivateprotectedpublicreturn shortstaticstrictfpsuperswitchsynchronized thisthrowthrowstransienttruetry voidvolatilewhile

11 (C) 2008 Gustavo Motta11 Estrutura básica de classes em Java Estrutura básica de classes em Java Caracteres maiúsculos e minúsculos são diferentes Caracteres maiúsculos e minúsculos são diferentes As palavras Class, ClAss, ClaSs e class são distintas As palavras Class, ClAss, ClaSs e class são distintas Somente a última opção pode ser usada para declarar uma classe Somente a última opção pode ser usada para declarar uma classe As outras provocam erros em tempo de compilação As outras provocam erros em tempo de compilação O corpo da classe é delimitado pelos caracteres abre chave { e fecha chave } O corpo da classe é delimitado pelos caracteres abre chave { e fecha chave } Todo trecho delimitado por abre chave { e fecha chave } define um bloco de programa Todo trecho delimitado por abre chave { e fecha chave } define um bloco de programa A cada caractere { que abre um bloco, deve haver um correspondente } para fechá-lo A cada caractere { que abre um bloco, deve haver um correspondente } para fechá-lo Não existem regras especiais para o espaçamento vertical ou horizontal, mas o bom estilo de programação facilita o entendimento e a modificação de programas Não existem regras especiais para o espaçamento vertical ou horizontal, mas o bom estilo de programação facilita o entendimento e a modificação de programas 3. 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 Corpo da classe Nome da classe Início do corpo da classe Fim do corpo da classe

12 (C) 2008 Gustavo Motta12 Estrutura básica de classes em Java Estrutura básica de classes em Java Estilo para nomes de classes Estilo para nomes de classes As palavras que formam o nome devem iniciar com caracteres maiúsculos As palavras que formam o nome devem iniciar com caracteres maiúsculos Exemplos: Lampada, ContaCorrente, RegistroAcademico, NotaFiscalDeSupermercado, Figura Exemplos: Lampada, ContaCorrente, RegistroAcademico, NotaFiscalDeSupermercado, Figura Excepcionalmente pode-se usar o caractere _ Excepcionalmente pode-se usar o caractere _ Exemplos: Contas_a_Pagar, Contas_a_Receber Exemplos: Contas_a_Pagar, Contas_a_Receber Devem preferencialmente ser substantivos Devem preferencialmente ser substantivos O nome da classe em Java deve corresponder ao nome do arquivo texto onde é gravada O nome da classe em Java deve corresponder ao nome do arquivo texto onde é gravada Cada classe em Java deve ser gravada num arquivo separado cujo nome é o nome da classe seguido da extensão.java Cada classe em Java deve ser gravada num arquivo separado cujo nome é o nome da classe seguido da extensão.java 3. Classes, objetos & Cia. em Java

13 (C) 2008 Gustavo Motta13 Estrutura básica de classes em Java Estrutura básica de classes em Java Comentários Comentários Texto escrito pelo programador para documentar o programa fonte, mas que é ignorado pelo compilador, podendo ser Texto escrito pelo programador para documentar o programa fonte, mas que é ignorado pelo compilador, podendo ser Numa única linha, iniciado a partir de duas barras inclinadas // e finalizado ao término da linha Numa única linha, iniciado a partir de duas barras inclinadas // e finalizado ao término da linha Útil para comentários breves junto ao código que fica à esquerda Útil para comentários breves junto ao código que fica à esquerda Bloco de comentário, com múltiplas linhas, delimitado pelo conjunto de caracteres /* bloco de comentário */ Bloco de comentário, com múltiplas linhas, delimitado pelo conjunto de caracteres /* bloco de comentário */ Tudo entre /* e */ é considerado comentário pelo compilador, sendo, portanto, ignorado Tudo entre /* e */ é considerado comentário pelo compilador, sendo, portanto, ignorado 3. 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

14 (C) 2008 Gustavo Motta14 Estrutura básica de classes em Java Estrutura básica de classes em Java Exemplo de classe executável diretamente Exemplo de classe executável diretamente Aplicação Java Aplicação Java 3. 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 main Início do corpo da operação

15 (C) 2008 Gustavo Motta15 Estrutura básica de classes em Java Estrutura básica de classes em Java Exemplo de classe executável diretamente Exemplo de classe executável diretamente Aplicação Java Aplicação Java Caracteriza-se por possuir a operação especial (método) main Caracteriza-se por possuir a operação especial (método) main Sempre que a MV Java executa uma aplicação, ela procura automaticamente a operação especial main para executar Sempre que a MV Java executa uma aplicação, ela procura automaticamente a operação especial main para executar Caso a operação main não esteja declarada, um erro em tempo de execução é gerado pela MV Java Caso a operação main não esteja declarada, um erro em tempo de execução é gerado pela MV Java O significado das palavras reservadas public, static e void e do parâmetro args será definido mais adiante O significado das palavras reservadas public, static e void e do parâmetro args será definido mais adiante 3. Classes, objetos & Cia. em Java

16 (C) 2008 Gustavo Motta16 Declaração de operações Declaração de operações Operações executam ações sobre o estado de um objeto Operações executam ações sobre o estado de um objeto São também denominadas de métodos em Java São também denominadas de métodos em Java Nomes de operações seguem as mesmas regras de nomes de classes Nomes de operações seguem as mesmas regras de nomes de classes Não podem conter espaços Nã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 acentos Recomenda-se não utilizar acentos Pode conter números Pode conter números Não pode ser uma palavra reservada da linguagem Java Não pode ser uma palavra reservada da linguagem Java Métodos (operações) não podem ser criados dentro de outras operações, nem fora do corpo da classe à que pertencem Métodos (operações) não podem ser criados dentro de outras operaçõ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 Java

17 (C) 2008 Gustavo Motta17 Declaração de operações Declaração de operações Estilo Estilo Nomes de operações refletem ações que são efetuadas sobre o estado de um objeto, portanto Nomes de operações refletem ações que são efetuadas sobre o estado de um objeto, portanto Devem ser verbos na voz imperativa ou então no infinitivo Devem ser verbos na voz imperativa ou então no infinitivo Recomenda-se que comecem com caracteres minúsculos Recomenda-se que comecem com caracteres minúsculos Após a primeira palavra, as seguintes devem começar com o primeiro caractere maiúsculo Após a primeira palavra, as seguintes devem começar com o primeiro caractere maiúsculo Exemplo: apagarRegistroDeNota, incluiNotaAluno, etc. Exemplo: apagarRegistroDeNota, incluiNotaAluno, etc. Exemplo Exemplo Implementação em Java do modelo de Lampada visto em sala de aula Implementação em Java do modelo de Lampada visto em sala de aula 3. 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 campo da classe) porque é declarada em algum lugar dentro do corpo da classe, mas não dentro do corpo de uma operação! Declaração de operação O tipo void indica que a operação não retorna 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 pelo conjunto vazio Nome da operação Lista de parâmetros da operação () indica lista vazia Corpo da operação Tipo de retorno da operação Cabeçalho da operação

18 (C) 2008 Gustavo Motta18 Declaração de operações Declaração de operações 3. 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

19 (C) 2008 Gustavo Motta19 Referências e criação de objetos Referências e criação de objetos Referência Referência 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 – em Java 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 – null em Java Quando declarada sem inicialização, o seu valor default é nulo, isto é, não está apontando – referenciando – nenhum objeto Quando declarada sem inicialização, o seu valor default é nulo, isto é, não está apontando – referenciando – nenhum objeto A declaração de referência anterior é equivalente a seguinte declaração A declaração de referência anterior é equivalente a seguinte declaração Qualquer tentativa de uso de uma referência apontando para resulta num erro Qualquer tentativa de uso de uma referência apontando para null resulta num erro Antes, deve-se inicializar a referência com o endereço de um objeto existente Antes, deve-se inicializar a referência com o endereço de um objeto existente 3. Classes, objetos & Cia. em Java Lampada lamp1; Lampada lamp1 = null;

20 (C) 2008 Gustavo Motta20 Referências e criação de objetos Referências e criação de objetos Criação de objetos Criação de objetos Objetos são criados (instanciados) com o uso do operador Objetos são criados (instanciados) com o uso do operador new tem a capacidade de criar um objeto com base numa classe existente new tem a capacidade de criar um objeto com base numa classe existente Objetos podem ser criados na própria classe que o define, por exemplo, na operação main, caso exista Objetos podem ser criados na própria classe que o define, por exemplo, na operação main, caso exista Memória 4 3. 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

21 (C) 2008 Gustavo Motta21 Interagindo com objetos Interagindo com objetos Uma vez declarada uma classe, é recomendável definir uma outra classe para testar sua funcionalidade Uma vez declarada uma classe, é recomendável definir uma outra classe para testar sua funcionalidade Por exemplo, para classe Lampada, pode-se definir a classe CriadorDeLampadas Por exemplo, para classe Lampada, pode-se definir a classe CriadorDeLampadas 3. 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

22 (C) 2008 Gustavo Motta22 Modificadores de acesso Modificadores de acesso Permitem que se controle a visibilidade externa das variáveis e operações de um objeto Permitem que se controle a visibilidade externa das variáveis e operações de um objeto Tipos Tipos public public Uma variável ou operação declarada como pública pode ser acessada no ambiente externo à classe onde está declarada Uma variável ou operação declarada como pública pode ser acessada no ambiente externo à classe onde está declarada public int saldo = 0; public int saldo = 0; public int retornaSaldo(); public int retornaSaldo(); private private Uma variável ou operação declarada como privada não pode ser acessada no ambiente externo à classe onde está declarada, ou seja, só pode ser acessada dentro da própria classe Uma variável ou operação declarada como privada não pode ser acessada no ambiente externo à classe onde está declarada, ou seja, só pode ser acessada dentro da própria classe private int saldo = 0; private int saldo = 0; private int retornaSaldo(); private int retornaSaldo(); 3. Classes, objetos & Cia. em Java

23 (C) 2008 Gustavo Motta23 Modificadores de acesso Modificadores de acesso Tipos Tipos protected protected Uma variável ou operação declarada como protegida pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta ou quando herdada por outra classe Uma variável ou operação declarada como protegida pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta ou quando herdada por outra classe protected int saldo = 0; protected int saldo = 0; protected int retornaSaldo(); protected int retornaSaldo(); default (quando omitido, isto é, não especificado) default (quando omitido, isto é, não especificado) Uma variável ou operação declarada sem modificador de acesso (ou seja, o modificador de acesso default) pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta Uma variável ou operação declarada sem modificador de acesso (ou seja, o modificador de acesso default) pode ser acessada no ambiente externo à classe onde está declarada, desde que o acesso seja feito a partir de uma classe declarada no mesmo diretório que esta int saldo = 0; int saldo = 0; int retornaSaldo(); int retornaSaldo(); 3. Classes, objetos & Cia. em Java

24 (C) 2008 Gustavo Motta24 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Considere o seguinte problema: um cartão de crédito simplificado Considere o seguinte problema: um cartão de crédito simplificado 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 de bônus, que poderão ser trocados posteriormente por prêmios 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 de bônus, que poderão ser trocados posteriormente por prêmios No cartão poderão ser realizadas operações de compra (aumento do saldo) e de pagamento do cartão (dedução no saldo) No cartão poderão ser realizadas operações de compra (aumento do saldo) e de pagamento do cartão (dedução no saldo) O limite do cartão é fixado em O limite do cartão é fixado em A cada compra realizada, o valor da compra é adicionado ao saldo, desde que não ultrapasse o limite do cartão A cada compra realizada, o valor da compra é adicionado ao saldo, desde que não ultrapasse o limite do cartão 3. Classes, objetos & Cia. em Java

25 (C) 2008 Gustavo Motta25 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Considere o seguinte problema: um cartão de crédito simplificado Considere o seguinte problema: um cartão de crédito simplificado Cada real de compras vale um ponto de bônus, sendo portanto, o valor comprado adicionado ao total de pontos de bônus Cada real de compras vale um ponto de bônus, sendo portanto, o valor comprado adicionado ao total de pontos de bônus A cada pagamento realizado, o valor do pagamento é deduzido do saldo. A cada pagamento realizado, o valor do pagamento é deduzido do saldo. Cada real pago vale um ponto de bônus, sendo portanto, o valor pago adicionado ao total de pontos de bônus Cada real pago vale um ponto de bônus, sendo portanto, o valor pago adicionado ao total de pontos de bônus O total de bônus é limitado ao limite de crédito, ou seja, pontos O total de bônus é limitado ao limite de crédito, ou seja, pontos 3. Classes, objetos & Cia. em Java

26 (C) 2008 Gustavo Motta26 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Considere o seguinte problema: um cartão de crédito simplificado Considere o seguinte problema: um cartão de crédito simplificado Deve-se ter operações para retornar o saldo do cartão e o total de bônus Deve-se ter operações para retornar o saldo do cartão e o total de bônus Os valores do saldo e o total de pontos de bônus somente podem ser alterados através das operações para compra e pagamento Os valores do saldo e o total de pontos de bônus somente podem ser alterados através das operações para compra e pagamento Nenhum usuário de objetos da classe CartaoDeCredito pode alterar diretamente o saldo ou o total de pontos do bônus Nenhum usuário de objetos da classe CartaoDeCredito pode alterar diretamente o saldo ou o total de pontos do bônus 3. Classes, objetos & Cia. em Java

27 (C) 2008 Gustavo Motta27 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Cartão de crédito simplificado – propriedade essenciais Cartão de crédito simplificado – propriedade essenciais Nome da classe: CartaoDeCredito Nome da classe: CartaoDeCredito Estado Estado Três variáveis do tipo inteiro para representar o saldo, o limite e o total de pontos de bônus do cartão Três variáveis do tipo inteiro para representar o saldo, o limite e o total de pontos de bônus do cartão private int saldo = 0; private int limite = 10000; private int bonus = 0; São privadas porque somente podem ser acessadas/modificadas dentro da classe, através de suas operações, que respeitam as regras de limite de crédito e de pontuação de bônus São privadas porque somente podem ser acessadas/modificadas dentro da classe, através de suas operações, que respeitam as regras de limite de crédito e de pontuação de bônus Caso contrário, alguém, que não a classe, poderia modificar diretamente o valor do saldo, do limite ou do bônus para cometer uma fraude, por exemplo. Caso contrário, alguém, que não a classe, poderia modificar diretamente o valor do saldo, do limite ou do bônus para cometer uma fraude, por exemplo. 3. Classes, objetos & Cia. em Java

28 (C) 2008 Gustavo Motta28 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Cartão de crédito simplificado – propriedade essenciais Cartão de crédito simplificado – propriedade essenciais Comportamento Comportamento Determinado pela execução das seguintes operações – apenas os cabeçalhos são mostrados Determinado pela execução das seguintes operações – apenas os cabeçalhos são mostrados public void compra(int valor) public void paga(int valor) public int retornaSaldo() public int retornaBonus() e pela operação auxiliar abaixo e pela operação auxiliar abaixo private void creditaBonus(int valor) private void creditaBonus(int valor) 3. Classes, objetos & Cia. em Java

29 (C) 2008 Gustavo Motta29 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Cartão de crédito simplificado Cartão de crédito simplificado As operações que foram declaradas como públicas respeitam as regras estipuladas para o cartão de crédito. Mais do que isso, devem ser visíveis, isto é, poder ser acessada externamente à classe para que possamos dispor de sua funcionalidade essencial As operações que foram declaradas como públicas respeitam as regras estipuladas para o cartão de crédito. Mais do que isso, devem ser visíveis, isto é, poder ser acessada externamente à classe para que possamos dispor de sua funcionalidade essencial A operação creditaBonus foi definida como privada porque é utilizada internamente na classe, para auxiliar na implementação das operações compra e paga A operação creditaBonus foi definida como privada porque é utilizada internamente na classe, para auxiliar na implementação das operações compra e paga Caso fosse definida como pública, seria possível alterar o valor do total de bonus sem precisar efetuar uma compra ou um pagamento, violando, portanto, as regras especificadas para o cartão de crédito Caso fosse definida como pública, seria possível alterar o valor do total de bonus sem precisar efetuar uma compra ou um pagamento, violando, portanto, as regras especificadas para o cartão de crédito 3. Classes, objetos & Cia. em Java

30 (C) 2008 Gustavo Motta30 Modificadores de acesso Modificadores de acesso Exemplo Exemplo Cartão de crédito simplificado Cartão de crédito simplificado Considere uma outra classe qualquer que usa a classe CartaoDeCredito Considere uma outra classe qualquer que usa a classe CartaoDeCredito 3. Classes, objetos & Cia. em Java CartaoDeCredito cartao = new CartaoDeCredito(); Memória 4 saldo limite bonus cartao.compra(100); saldo limite bonus cartao.compra(500); saldo limite bonus cartao.paga(400); saldo limite bonus cartao.compra(150); saldo limite bonus cartao.bonus = 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


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

Apresentações semelhantes


Anúncios Google