Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

herança em progamação, Esquemas de Informática

material sobre herança com a linguagem c#

Tipologia: Esquemas

2019

Compartilhado em 23/09/2019

joao-henrique-8ar
joao-henrique-8ar 🇧🇷

4

(1)

1 documento

1 / 25

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Curso C# Completo
Programação Orientada a
Objetos + Projetos
Capítulo: Herança e polimorfismo
http://educandoweb.com.br
Prof. Dr. Nelio Alves
Herança
http://educandoweb.com.br
Prof. Dr. Nelio Alves
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Pré-visualização parcial do texto

Baixe herança em progamação e outras Esquemas em PDF para Informática, somente na Docsity!

Curso C# Completo

Programação Orientada a

Objetos + Projetos

Capítulo: Herança e polimorfismo

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Herança

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Herança

  • É um tipo de associação que permite que uma classe herde dados e comportamentos de outra
  • Definições importantes
  • Vantagens
    • Reuso
    • Polimorfismo
  • Sintaxe
    • : (estende)
    • base (referência para a superclasse)

Exemplo

Suponha um negócio de banco que possui uma conta comum e uma conta para

empresas, sendo que a conta para empresa possui todos membros da conta

comum, mais um limite de empréstimo e uma operação de realizar empréstimo.

Demo

Vamos implementar as classes

Account e BusinessAccount e fazer

alguns testes.

Modificadores de acesso

própria classe subclasses no assembly

classes do assembly

subclasses fora do assembly

classes fora do assembly

public x x x x x

protected internal x x x x

internal x x x

protected x x x

private protected x x

private x

Suponha que, para realizar um empréstimo, é

descontada uma taxa no valor de 10.

Isso resulta em erro:

public void Loan(double amount) {

if (amount <= loanLimit) {

balance += amount - 10.0;

https://github.com/acenelio/inheritance1-csharp

Modificador de acesso protected

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Upcasting e downcasting

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Checklist

  • Upcasting
    • Casting da subclasse para superclasse
    • Uso comum: polimorfismo
  • Downcasting
    • Casting da superclasse para subclasse
    • Palavra as
    • Palavra is
    • Uso comum: métodos que recebem parâmetros genéricos (ex: Equals)

Exemplo

https://github.com/acenelio/inheritance2-csharp

Sobreposição, palavras virtual,

override e base

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Account:

public virtual void Withdraw(double amount) { Balance -= amount + 5.0; }

SavingsAccount:

public override void Withdraw(double amount) { Balance -= amount; }

Palavra base

É possível chamar a implementação da superclasse usando a palavra base.

public override void Withdraw(double amount) { base.Withdraw(amount); Balance -= 2.0; }

Exemplo: suponha que a regra para saque para conta poupança seja realizar o saque

normalmente da superclasse (Account), e depois descontar mais 2.0.

Recordando: usando base em construtores

class BusinessAccount : Account { public double LoanLimit { get; set; }

public BusinessAccount() { }

public BusinessAccount(int number, string holder, double balance, double loanLimit) : base(number, holder, balance) { LoanLimit = loanLimit; }

(...)

Código fonte desta aula

https://github.com/acenelio/inheritance3-csharp

Exemplo - Classe selada

Suponha que você queira evitar que

sejam criadas subclasses de

SavingsAccount

namespace Course {

sealed class SavingsAccount {

(...)

Exemplo - método selado

Suponha que você não queira que o método Withdraw de

SavingsAccount seja sobreposto novamente

public sealed override void Withdraw(double amount) {

base.Withdraw(amount);

Balance -= 2.0;

}

Pra quê?

  • Segurança: dependendo das regras do negócio, às vezes é desejável garantir que uma classe não seja herdada, ou que um método não seja sobreposto. - Geralmente convém selar métodos sobrepostos, pois sobreposições múltiplas

podem ser uma porta de entrada para inconsistências

  • Performance: atributos de tipo de uma classe selada são analisados de forma mais rápida em tempo de execução. - Exemplo clássico: string

Introdução ao polimorfismo

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Memória

Stack Heap

acc2^1023 Anna^ 500.0^ 0.

Account acc1 = new Account(1001, "Alex", 500.0); Account acc2 = new SavingsAccount(1002, "Anna", 500.0, 0.01);

acc1.Withdraw(10.0); acc2.Withdraw(10.0);

acc1^1020 Alex^ 500.

Account:

public virtual void Withdraw(double amount) { Balance -= amount + 5.0; }

SavingsAccount:

public override void Withdraw(double amount) { base.Withdraw(amount); Balance -= 2.0; }

Importante entender

  • A associação do tipo específico com o tipo genérico é feita em tempo de execução (upcasting).
  • O compilador não sabe para qual tipo específico a chamada do método Withdraw está sendo feita (ele só sabe que são duas variáveis tipo Account):

Account acc1 = new Account(1001, "Alex", 500.0);

Account acc2 = new SavingsAccount(1002, "Anna", 500.0, 0.01);

acc1.Withdraw(10.0);

acc2.Withdraw(10.0);

Exercício resolvido

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Uma empresa possui funcionários próprios e terceirizados.

Para cada funcionário, deseja-se registrar nome, horas

trabalhadas e valor por hora. Funcionários terceirizados

possuem ainda uma despesa adicional.

O pagamento dos funcionários corresponde ao valor da hora

multiplicado pelas horas trabalhadas, sendo que os

funcionários terceirizados ainda recebem um bônus

correspondente a 110% de sua despesa adicional.

Fazer um programa para ler os dados de N funcionários (N

fornecido pelo usuário) e armazená-los em uma lista. Depois

de ler todos os dados, mostrar nome e pagamento de cada

funcionário na mesma ordem em que foram digitados.

Construa o programa conforme projeto ao lado. Veja

exemplo na próxima página.

Fazer um programa para ler os dados de N

produtos (N fornecido pelo usuário). Ao final,

mostrar a etiqueta de preço de cada produto na

mesma ordem em que foram digitados.

Todo produto possui nome e preço. Produtos

importados possuem uma taxa de alfândega, e

produtos usados possuem data de fabricação.

Estes dados específicos devem ser

acrescentados na etiqueta de preço conforme

exemplo (próxima página). Para produtos

importados, a taxa e alfândega deve ser

acrescentada ao preço final do produto.

Favor implementar o programa conforme

projeto ao lado.

Enter the number of products: 3 Product #1 data: Common, used or imported (c/u/i)? i Name: Tablet Price: 260. Customs fee: 20. Product #2 data: Common, used or imported (c/u/i)? c Name: Notebook Price: 1100. Product #3 data: Common, used or imported (c/u/i)? u Name: Iphone Price: 400. Manufacture date (DD/MM/YYYY): 15/03/

PRICE TAGS:

Tablet $ 280.00 (Customs fee: $ 20.00) Notebook $ 1100. Iphone (used) $ 400.00 (Manufacture date: 15/03/2017)

https://github.com/acenelio/inheritance5-csharp

Classes abstratas

http://educandoweb.com.br

Prof. Dr. Nelio Alves

Classes abstratas

  • São classes que não podem ser instanciadas
  • É uma forma de garantir herança total: somente subclasses não abstratas podem ser instanciadas, mas nunca a superclasse abstrata