Tópicos de Programação Técnico de Informática 3º. Módulo Profa. Madalena Pereira da Silva [email protected] Roteiro das Aulas Apresentar o plano de Ensino Revisar Conceitos disciplina de Programação Orientada a Objetos Classes, objetos, atributos, métodos, construtor, atributos e métodos de classe, encapsulamento Praticar CRÉDITOS Boa parte do conteúdo dos slides foram retirados do material do professor Carlos Andrés Ferrero, conforme indicado nas referências. Visão Geral da Disciplina Visão Geral da Disciplina Classes Classe l l l É uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos Na classe concreta é um modelo, com atributos e métodos, usados para criar objetos Objetos Objetos l l Qualquer entidade do mundo real que pode ser representada no mundo computacional. Os objetos serão modelados de acordo com o contexto da aplicação Atributos São características que qualificam um objeto. São as variáveis da classe a qual o objeto pertence l l Atributos Métodos l l l Modelam o comportamento (ações) dos objetos. São funções que acessam e manipulam os atributos dos objetos Os objetos se comunicam entre si através dos métodos Atributos Métodos Classes, objetos, atributos, métodos Atributos Métodos Classes, objetos, atributos, métodos Classes, objetos, atributos, métodos Classe, objetos, atributos e métodos Exemplo para o contexto de sistemas de controle de manutenção de veículos Associação - Definição: - - Denota a relação entre os objetos Tipos: - Agregação Composição Agregação - Definição: l l É um tipo de associação em que duas classes de existência independente possuem uma relação todo-parte. Por exemplo, um time (todo) está constituído por atletas (parte). Mesmo que o time pare de existir, o atleta ainda poderá existir na aplicação. Composição l l Associação de duas classes em que a destruição do todo implica na destruição da parte. Por exemplo, um pedido (todo) está constituído por itens do pedido (parte). Esses itens só fazem sentido em um pedido específico, quando o pedido é eliminado, os itens também serão Associação E quando se programa em Java qual a diferença de agregação e composição Associação A diferença entre composição e agregação tem relação com a existência dos objetos. Essa diferença não é tratada pelas linguagens de programação que seguem o paradigma orientado a objetos (pelo menos não as convencionais: java, c#, c++). Associação Java não possui uma forma declarativa para implementar agregações nem associações. Java apenas cria associações unidirecionais através de referências Exemplo No caso do sistema de bancário, uma Conta tem uma propriedade do tipo Cliente e a referência de conta para cliente, mas não de cliente para conta Associação - No caso do sistema de manutenção de automóveis, para relacionar/vincular o proprietário com o veículo é preciso de dois objetos, um que represente o cliente e o outro que represente o veículo. Desta forma, duas classes devem ser criadas (cliente e veículo). Associação public class Cliente{ private String nome; private String telefone; private String endereco; } Associação unidirecional public class Veiculo{ private String marca; private String modelo; private int ano; private String chassi; private Cliente cliente; } Para expressar o relacionamento entre Cliente e Veículo podemos adicionar um atributo do tipo Cliente na classe Veículo EXEMPLO DE IMPLEMENTAÇÃO DE AGREGAÇÃO EM JAVA EXEMPLO DE IMPLEMENTAÇÃO DE AGREGAÇÃO EM JAVA EXEMPLO DE IMPLEMENTAÇÃO DE COMPOSIÇÃO EM JAVA EXEMPLO DE IMPLEMENTAÇÃO DE COMPOSIÇAÕ EM JAVA Construtores - Usado para instanciar/criar objetos - Ao instanciar um objeto de uma classe e mandar imprimir o valor de alguns dos atributos, estes apresentarão o seu valor padrão. public class Veiculo { String marca, modelo, cor; int ano; int velocidade; } public class TesteVeiculo { public static void main(String[] args) { Veiculo v = new Veiculo(); //imprimirá valor 0 System.out.println(v.velocidade); } } Construtores Após a instanciação, os valores dos atributos podem ser alterados, antes da impressão. l public class TesteVeiculo { public static void main(String[] args) { Veiculo v1 = new Veiculo(); Veiculo v2 = new Veiculo(); v1.marca = "Ford"; v1.modelo = "Focus"; v1.cor = "Prata"; v1.ano = 2011; v1.velocidade = 100; } } System.out.println(v1.marca); System.out.println(v1.modelo); System.out.println(v1.cor); System.out.println(v1.ano); System.out.println(v1.velocidade); Construtores É possível definir quais atributos devem ser informados na instanciação do objeto. public class Veiculo { String marca, modelo, cor; int ano; int velocidade; } public Veiculo (String marca, String modelo, String cor, int ano, int velocidade) { this.marca = marca; this.modelo = modelo; this.cor = cor; this.ano = ano; this.velocidade = velocidade; } Neste caso, o objeto do tipo Veiculo só pode ser instanciado se TODOS os parâmetros da classe (marca, modelo, cor, ano, velocidade) forem informados Construtores É possível definir quais atributos devem ser informados na instanciação do objeto. public class Veiculo { String marca, modelo, cor; int ano; int velocidade; } public Veiculo (String modelo, String cor, int ano) { this.modelo = modelo; this.cor = cor; this.ano = ano; this.marca= null; this.velocidade= 0; } Neste caso, o objeto do tipo Veiculo pode ser instanciado apenas com o valor de ALGUNS atributos, sendo eles, modelo, cor e ano. Os atributos não definidos como parâmetros receberão valores padrão. public class Veiculo { String marca, modelo, cor; int ano, velocidade; Construtores public Veiculo (String marca, String modelo, String cor, int ano int velocidade) { this.marca = marca; this.modelo = modelo; this.cor = cor; this.ano = ano; this.velocidade = velocidade; } É possível definir vários construtores na mesma classe public Veiculo (String modelo, String cor, int ano) { this.modelo = modelo; this.cor = cor; this.ano = ano; } } public Veiculo (int ano, int velocidade) { this.ano= ano; this.velocidade = velocidade; } Os atributos não definidos como parâmetros receberão valores padrão. Construtores Por que quando não criamos construtores, Java permite a instanciação de objetos? Construtores Porque por padrão, para toda classe concreta criada em Java, é criado automaticamente um construtor padrão (sem passagem de parâmetro), o qual todos os atributos são inicializados com valor padrão. Exercícios 1. Dadas as seguintes classes: l l l Acrescente um construtor na classe Agencia para receber o número como parâmetro. Compilar TesteAgencia. l Porque ocorreu esse erro de compilação? Resolva. Exercícios 2. Cria a classe Conta, conforme abaixo Exercícios 3. Acrescente o atributo Agencia na classe Conta e altere os três métodos construtores da classe Conta de forma que seja obrigatório informar a Agencia ao criar uma instância de Conta. Exercícios 4. Implemente todas as operações do diagrama a seguir. Exercícios 5. Continue a implementação do item anterior incrementando com novos métodos de Agencia Atributos e Métodos de Classes Problema Supondo que o banco paga um valor de vale refeição igual para todos os funcionários. O sistema precisa guardar esse valor em algum lugar, ou seja, na classe Funcionario. Atributos e Métodos de Classes Problema Ao instanciar vários objetos da classe Funcionario Qual é o problema desta abordagem? Como o atributo valeRefeicaoDiario é de instância, cada objeto criado a partir da classe Funcionario terá o seu próprio atributo valeRefeicaoDiario. Observe que não faz sentido ter esse valor repetido em todos os objetos, já que o valor é único para todos os funcionários. Atributos e Métodos de Classes Solução Como esse atributo é comum a todos os objetos da classe Funcionário deve-se declará-lo como estático. Atributos e Métodos de Classes Ainda é possível definir métodos de classe, para manipular os próprios atributos de classe Embora seja possível acessar atributos e métodos de classe por meio de uma instância, o correto é acessá-lo usando a classe. Encapsulamento A partir da seguinte classe l l Várias classes que instanciem objetos da classe Funcionário poderão manipular o atributo “salario” de diferentes formas. Como cada classe poderá manipular de uma forma específica dizemos que o controle sobre esse atributo é descentralizado Encapsulamento Atributos privados O encapsulamento permite centralizar o controle de acesso e alteração de atributos, declarando os atributos como privados da classe. Nesta abordagem também necessitamos criar métodos para alterar os dados, como por exemplo, aumentaSalario. Encapsulamento l l Dessa forma, só poderemos alterar o atributo salário por qualquer classe externa à classe Funcionário usando o método aumentaSalario. Isso facilita, principalmente, a manutenção do sistema e a detecção de erros. Encapsulamento Métodos privados: l l Usados geralmente por métodos públicos e que não fazem sentido estarem acessíveis por outras classes. Por exemplo, um método para descontar uma tarifa pelas operações de saque e depósito poderia ser implementada Encapsulamento Perguntas 1) Para acender uma “boca” do fogão a gás, você pressiona o botão/chave correspondente ou “ergue/balança” o botijão de gás (para perceber o volume/peso do gás)? 2) Para desligar o notebook, você usa o botão ou desmonta o aparelho até retirar a bateria? l) Observe que o encapsulamento oculta detalhes da implementação e provê integridade dos dados. No entanto, é necessário criar métodos para acessar/alterar os dados. Encapsulamento Métodos de Alteração e de Acesso l Para cada variável de instância tem-se um método SET e um GET, usados para permitir a alteração e o acesso aos valores dos atributos Exercícios 6. Retorne ao exercício 5 da aula passada e: a) Implemente os conceitos de encapsulamento. b) Implemente o atributo estático privado de tarifaOperacao, com seus respectivos métodos estáticos sets e gets, bem como o método privado que desconta o valor dessa taxa nas operações dos métodos “saca” e “deposito”. Referências Bibliográficas l FERRERO, C. A. Notas de Aulas de TOP: Aula03_RevisãoPOO. Disponível em https://sites.google.com/site/anfer86/disciplinas/2015-1-poo . l Treinamentos K19. Orientação a Objetos em Java. 2012. Disponível em: http:// www.k19.com.br/downloads/apostilas/java/k19-k11-orienta cao-a-objetos-em-java2012 l ASCENCIO, A. F.; CAMPOS, E. A. V. Fundamentos da Programação de Computadores, 3. ed., São Paulo: PearsonEducationdo Brasil, 2012.