Prévia do material em texto
Prof. Emerson Paduan: emerson@paduan.pro.br Programação Orientada a Objetos Herança Prof. Emerson Paduan: emerson@paduan.pro.br Um dos conceitos principais na Orientação a Objetos é o conceito de herança. Herança é um mecanismo que permite que características comuns a diversas classes sejam derivadas de uma classe base, ou superclasse. A herança é uma forma de reutilização de software em que novas classes são criadas a partir das classes existentes, herdando seus atributos e comportamentos e adicionando novos recursos que as novas classes exigem. Herança Prof. Emerson Paduan: emerson@paduan.pro.br A partir de uma classe base, outras classes podem ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da superclasse e acrescenta a elas o que for definido de particularidade para ela. Cada subclasse se torna uma candidata a ser uma superclasse para alguma subclasse futura. Herança Prof. Emerson Paduan: emerson@paduan.pro.br Pessoa Estudante Professor é um (a) Herança Prof. Emerson Paduan: emerson@paduan.pro.br Pessoa nome endereco telefone Estudante ra curso anoGraduacao Professor titulo instituicao salario Herança Prof. Emerson Paduan: emerson@paduan.pro.br extends - indica que a criação de uma nova classe que herda de uma classe existente public class SuperClass { //corpo da superclasse... } public class SubClass extends SuperClass{ //corpo da subclasse... } Herança Prof. Emerson Paduan: emerson@paduan.pro.br Em um relacionamento de herança: – é necessário apenas indicar as diferenças entre a subclasse e superclasse → o reuso é automático – geralmente é necessário redefinir métodos → um dos primeiros motivos para usar herança Herança Prof. Emerson Paduan: emerson@paduan.pro.br Palavra-chave super refere-se a uma superclasse. ✔ indica a chamada ao construtor da superclasse ✔ se a superclasse não contiver o construtor padrão e o construtor da subclasse não chamar nenhum outro construtor da superclasse explicitamente, o compilador java vai informar um erro. ✔ também é utilizada para invocar métodos da superclasse dentro da subclasse super Prof. Emerson Paduan: emerson@paduan.pro.br Sabe-se que o gerente recebe um bônus adicional de 20% quando um aumento de salário é efetivado. Os demais funcionários recebem o aumento de acordo com o percentual informado. Exemplo Prof. Emerson Paduan: emerson@paduan.pro.br Exemplo Prof. Emerson Paduan: emerson@paduan.pro.br Exemplo Prof. Emerson Paduan: emerson@paduan.pro.br Exemplo Prof. Emerson Paduan: emerson@paduan.pro.br Reescrita do método aumentarSalario() – Para funcionar diferente para gerentes e funcionários comuns (gerente recebe um bônus adicional de 20%); – Esse método não tem acesso direto às variáveis de instância privados da superclasse, ou seja, esse método não pode alterar diretamente a variável de instância salario, embora cada objeto Gerente tenha uma variável de instância salario – Modificador de acesso protected – dá acesso direto aos atributos da superclasse pela subclasse! Polimorfismo Prof. Emerson Paduan: emerson@paduan.pro.br Uma das regras fundamentais da herança: um método definido em uma subclasse com o mesmo nome e mesma lista de parâmetros que um método em uma de suas classes antecessoras oculta o método da classe ancestral a partir da subclasse. Polimorfismo Prof. Emerson Paduan: emerson@paduan.pro.br Modificadores de acesso indicam o tipo de acesso que pode ser feito para os atributos e também para os métodos de um objeto. Modificadores Prof. Emerson Paduan: emerson@paduan.pro.br Let’s code! Prof. Emerson Paduan: emerson@paduan.pro.br • Construir uma classe para representar um funcionário com os seguintes dados: nome, horas trabalhadas e valor pago por hora trabalhada. Implementar um método para calcular e retornar o salário final de um funcionário e um método imprimir. • Criar uma subclasse para representar um funcionário sênior. A diferença entre eles é que um funcionário sênior recebe um bônus a cada 10 horas trabalhadas. Sobrescrever os métodos calcularSalario() e imprimir(). • Criar uma classe AppFuncionario para instanciar objetos da classe Funcionario e Senior e realizar chamada a seus métodos. Exercício 1 Prof. Emerson Paduan: emerson@paduan.pro.br Utilizando as classes do exercício anterior, criar a Classe para Gerenciar funcionário que contenha como atributo um ArrayList de Funcionarios. Implementar os seguintes métodos: – add() : para armazenar os funcionários no ArrayList; – listar() : retorna uma String com os dados de todos os funcionários; – listarSalario(): retorna uma String contendo o nome e o salário de todos os funcionários cadastrados no ArrayList; Exercício 2 Prof. Emerson Paduan: emerson@paduan.pro.br – totalDeFuncionariosSenior() : retorna um inteiro indicando o total de funcionários senior cadastrados no ArrayList. Para diferenciar os objetos utilizar instanceOf – funcionarioComMaiorBonus(): retorna o nome e o bonus calculado do funcionário Senior que recebeu o maior bônus (calculado) entre todos os cadastrados no ArrayList; – listarPorFaixaSalarial() : método que recebe uma faixa salarial inicial e final e retorna o nome e o salário dos funcionários dentro da faixa informada; Exercício 2 - continuação Prof. Emerson Paduan: emerson@paduan.pro.br Criar uma aplicação com o seguinte menu de opções: Exercício 2 - continuação Prof. Emerson Paduan: emerson@paduan.pro.br Lição de casa... Prof. Emerson Paduan: emerson@paduan.pro.br Criar a classe Media com os atributos valor1 e valor2. Implementar o método calcularMedia() para calcular a média aritmética entre os dois valores; Implementar o método imprimir que retorna uma String com os dados da classe Media; Criar a classe MediaPonderada que herda da classe Media. Os atributos dessa classe são: peso1 e peso2. Reescrever o método calcularMedia() considerando a média ponderada: MP = (valor1 * peso1) + (valor2 * peso2) / (peso1 + peso2) Exercício 3 Prof. Emerson Paduan: emerson@paduan.pro.br Implementar uma aplicação com o seguinte menu de opções: 1 – Média aritmética 2 – Média Ponderada 3 – Sair Validações: – Valor1 e valor2 não podem ser menor que 0 e nem maior que 10; – A soma dos pesos não pode ser 0 ou menor que zero e não pode ser maior que 10; Exercício 3 Prof. Emerson Paduan: emerson@paduan.pro.br Faça um programa que calcule a área de uma figura geométrica. Aceite quatro tipos de figura geométrica: quadrado, retângulo, triângulo e círculo. Use herança e polimorfismo. Exercício 4 Prof. Emerson Paduan: emerson@paduan.pro.br Crie uma classe chamada Invoice que possa ser utilizado por uma loja de suprimentos de informática para representar uma fatura de um item vendido na loja. Uma fatura deve incluir as seguintes informações como atributos: • o número do item faturado, • a descrição do item, • a quantidade comprada do item e • o preço unitário do item. Sua classe deve ter um construtor que inicialize os quatro atributos. Se a quantidade não for positiva, ela deve ser configurada como 0. Se o preço por item não for positivo ele deve ser configurado como 0.0. Forneça um método set e um método get para cada variável de instância. Além disso, forneça um método chamado getInvoiceAmount que calcula o valor da fatura (isso é, multiplica a quantidade pelo preço por item) e depois retorna o valor como um double. Escreva um aplicativo (main) de teste que demonstra as capacidades da classe Invoice. Exercício 5