Baixe o app para aproveitar ainda mais
Prévia do material em texto
01/10/2018 1 Parte 7 – Agregação e Particionamento. Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento caugusto.sicsu@uva.br Cursos de Ciência da Computação e Engenharia da Computação Classes e Objetos Métodos e Atributos Herança Polimorfismo Sobrescrita Encapsulamento Agregação Particionamento Métodos Construtores Polimorfismo Sobrecarga Métodos Setters e Getters Classes Abstratas Interfaces Desenvolvimento e Linguagem 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 2 01/10/2018 2 Agregação • Uma classe também é um tipo definido pelo usuário. • Pode-se usar um conjunto de classes para criar novas classes. • Podemos então agregar diferentes classes formando uma nova classe mais completa e com melhor controle de atualização e manutenção. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 3 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 4 Agregação X Particionamento Agregação É o mecanismo através do qual o ser humano constata que alguns objetos ou conceitos, obtidos a partir de objetos dentro de uma parcela do mundo real (mini-mundo ou domínio do problema), podem ser justapostos formando objetos ou conceitos mais complexos cujos componentes são os objetos ou conceitos iniciais. Particionamento É o inverso da agregação, onde uma classe pode ser dividida em fragmentos de objetos que em um conjunto, formam um outro objeto. 01/10/2018 3 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 5 Agregação X Particionamento 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 6 Agregação X Particionamento CARROCERIA RODA VIDROS AUTOMÓVEL AGREGAÇÃO 01/10/2018 4 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 7 MECANISMOS BÁSICOS DE ABSTRAÇÃO (GENERALIZAÇÃO) AUTOMÓVEL AVIÃO COMPRI MENTO LAR GURA PESO TIPO DE PARA- CHOQUE COMPRI MENTO LAR GURA PESO TIPO DE ASA VEÍCULO GENERALIZAÇÃO PARTICIONAMENTO 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 8 MECANISMOS BÁSICOS DE ABSTRAÇÃO (ESPECIALIZAÇÃO) AUTOMÓVEL AVIÃO COMPRI MENTO LAR GURA PESO TIPO DE PARA- CHOQUE COMPRI MENTO LAR GURA PESO TIPO DE ASA VEÍCULO ESPECIALIZAÇÃO 01/10/2018 5 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 9 MECANISMOS BÁSICOS DE ABSTRAÇÃO AUTOMÓVEL AVIÃO COMPRIMENTO LARGURA PESO TIPO DE PARA- CHOQUE TIPO DE ASA VEÍCULO GENERALIZAÇÃO 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 10 MECANISMOS BÁSICOS DE ABSTRAÇÃO (AGREGAÇÃO) CHASSIS MOTOR RODA TIPO CHASSIS MATERIAL CHASSIS RESISTÊNCIA A CHOQUE CHASSIS POTÊNCIA MOTOR CONSUMO DE COMBUSTÍVEL MOTOR DIÂMETRO RODA TIPO PNEU RODA DIÂMETRO TIPO PNEU AUTOMÓVEL POTÊNCIA CONSUMO DE COMBUSTÍVEL AGREGAÇÃO TIPO MATERIAL RESISTÊNCIA A CHOQUE 01/10/2018 6 • Exemplo: Classe : Motor Atributos: PotenciaMaxima : inteiro TipoCombustivel : texto PotenciaAtual : inteiro Métodos: - Setters e Getters para todos os atributos. - cadastrar (todos os atributos) – recebe todos os atributos e armazena. - imprimir () – Exibe todos os dados do Motor. - acelarar() – Aumenta a potência atual em incremento de 100 unidades. - desacelarar() – Diminui a potência atual em decremento de 100 unidades. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 11 public class Motor { public String tipoCombustivel; public int potenciaMaxima, potenciaAtual ; public void acelerar(){ if(potenciaAtual < potenciaMaxima) { potenciaAtual += 100; } } public void desacelerar(){ if(potenciaAtual > 0) { potenciaAtual -= 100; } } ...//demais métodos } 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 12 01/10/2018 7 Classe : Aviao Atributos: Prefixo : texto CapacidaDoTanque : inteiro NumeroPassageiros : inteiro Preco : Real DataRevisao : Texto Motor1 : Motor Motor2 : Motor Motor3 : Motor Motor4 : Motor Métodos: - Setters e Getters para todos os atributos. - cadastrar (todos os atributos) – recebe todos os atributos do Avião e armazena suas propriedades. - imprimir () – Exibe todos os dados do Avião. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 13 public class Aviao { // Atributos da classe: public String prefixo, dataRevisao; public int capacidadeTanque, numeroPassageiros; public double preco; Motor motor1 = new Motor(); Motor motor2 = new Motor(); Motor motor3 = new Motor(); Motor motor4 = new Motor(); // Métodos da classe: } 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 14 01/10/2018 8 Em uma aplicação: ... Aviao a1 = new Aviao(); a1.motor1.setPotenciaMaxima(1000); a1.motor2.setPotenciaMaxima(1000); a1.motor3.setPotenciaMaxima(1000); a1.motor4.setPotenciaMaxima(1000); a1.motor1.acelerar(); // motor1.potenciaAtual = 100 a1.motor2.acelerar(); // motor2.potenciaAtual = 100 a1.motor3.acelerar(); // motor3.potenciaAtual = 100 a1.motor4.acelerar(); // motor4.potenciaAtual = 100 a1.motor1.acelerar(); // motor1.potenciaAtual = 200 a1.motor2.desacelerar(); // motor2.potenciaAtual = 0 a1.motor3.acelerar(); // motor3.potenciaAtual = 200 a1.motor4.desacelerar(); // motor4.potenciaAtual = 0 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 15 Pode-se aplicar a muitas outras situações, por exemplo, pode-se criar a classe Endereco e uma outra classe, Cliente pode ter como atributos três diferentes endereços: Comercial, Residencial, Entrega. Cria-se então a classe Endereco public class Endereco { String tipoLogradouro, logradouro, cep; public setCep(String c) { cep = c; } ... // demais atributos e métodos } Na classe Cliente: public class Cliente{ String nome; Endereco endComercial = new Endereco( ); Endereco endResidencial = new Endereco( ); Endereco endEntrega = new Endereco( ); } 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 16 01/10/2018 9 Na aplicação então, usamos: Cliente cliente = New Cliente( ); cliente.endComercial.setCep(“22220-020”); cliente.endResidencial.setCep(“22220-042”); cliente.endEntrega.setCep(“22222-222”); Assim, criamos uma vez a classe endereço e esta pode ser reutilizada inúmeras vezes e em diferentes aplicações, pois, caso precisássemos do endereço do dono do avião, bastaria acrescentar um atributo do tipo Endereço à classe Avião, o mesmo para o endereço da seguradora e assim, por diante. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 17 Exercício 2 (Parte 7): Crie uma superclasse que contenha os atributos e métodos comuns, reformulando as classes apresentadas a seguir. É necessário criar pelo menos 5 métodos construtores para cada classe. Crie uma aplicação para testar as classes criadas, criando pelo menos três objetos de cada tipo usando diferentes construtores para cada um. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 18 01/10/2018 10 Classe : Aviao Atributos: Prefixo : Texto CapacidadeTanque : inteiro NumeroPassageiros : inteiro Preco : real DataRevisao : Texto Motor1 : Motor Motor2 : Motor Métodos: - Setters e Getters para todos os atributos. - cadastrar (todos os atributos) – recebe dados de todos os atributos e armazena no objeto. - imprimir () – Exibe todos os dados do Avião, usando o println(). - reajustarPreco(percentual : real) – Reajusta o preço do avião, alterando o valor anterior, de acordo com o percentual passado como parâmetro. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 19 Classe : Navio Atributos: Nome : Texto CapacidadeTanque : inteiro NumeroPassageiros : inteiro NumeroTripulantes : inteiro Preco : real DataLancamento : Texto Motor1 : Motor Motor2 : Motor Métodos: - Setters e Getters para todos os atributos. - cadastrar (todos os atributos) – recebe dados de todos os atributos e armazena no objeto. - imprimir () – Exibe todos os dados do Navio, usando o println(). - passageirosPorTripulantes() – Retorna a proporção de passageiros por tripulantes do navio, de acordo com as suas propriedades.01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 20 01/10/2018 11 Classe : Motor Atributos: PotenciaMaxima : inteiro TipoComubustivel : Texto PotenciaAtual : inteiro Métodos: - Setters e Getters para todos os atributos. - cadastrar (todos os atributos) – recebe todos os atributos e armazena. - imprimir () – Exibe todos os dados do Motor. - acelarar() – Aumenta a potência em incremento de 100 unidades. - desacelarar() – Diminui a potência em decremento de 100 unidades. 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 21 Exercício 2 (Parte 7): • Baseado nas classes a seguir pede-se: – Crie uma superclasse que seja capaz de atender às necessidades das subclasses Geladeira e MicroOndas, com pelo menos 8 métodos construtores; – A Superclasse deve reaproveitar métodos das classes agregadas; – Criar as subclasses Geladeira e MicroOndas utilizando os conceitos de herança a partir da superclasse criada e com o mínimo 10 métodos construtores (cada); – As subclasses Geladeira e MicroOndas devem reaproveitar métodos herdados da Superclasse e das classes agregadas; – Cada Subclasse deverá reaproveitar no mínimo 5 métodos construtores da superclasse; – Aplique as regras da boa prática de programação em java. 01/10/2018 Prof. Dr. Eng. Carlos A. Sicsú A. do Nascimento 22 01/10/2018 12 Classes Atributos Métodos Geladeira Marca: Texto Modelo: Texto Volume: inteiro Preço: real Temperatura Mínima: real Temperatura Máxima: real Porta1 : Porta Porta2: Porta . Setters para todos os atributos . Getters para todos os atributos . Cadastrar (...) - Todos os atributos do objeto . Imprimir ( ) - Exibir todos os atributos do objeto . EntradaDados( ) – Efetua a entrada de dados via teclado. Micro Ondas Marca: Texto Modelo: Texto Volume: inteiro Preço: real Potência Mínima: inteiro Potência Máxima: inteiro Porta1 : Porta . Setters para todos os atributos . Getters para todos os atributos . Cadastrar (...) - Todos os atributos do objeto . Imprimir ( ) - Exibir todos os atributos do objeto . EntradaDados( ) – Efetua a entrada de dados via teclado. Porta Comprimento: real Largura: real Possui Vidro: Lógico . Setters para todos os atributos . Getters para todos os atributos . Cadastrar (...) - Todos os atributos do objeto . Imprimir ( ) - Exibir todos os atributos do objeto . EntradaDados( ) – Efetua a entrada de dados via teclado. 01/10/2018 Prof. Dr. Eng. Carlos A. Sicsú A. do Nascimento 23 Fim da Parte VII 01/10/2018 Prof. Dr. Engº Carlos A. Sicsú A. do Nascimento 24
Compartilhar