Escolar Documentos
Profissional Documentos
Cultura Documentos
Artigo • 08/06/2023
Neste tutorial, você estenderá esse aplicativo para usar herança e polimorfismo para
adicionar novos recursos. Você também adicionará recursos à BankAccount classe,
aproveitando as técnicas de abstração e encapsulamento que aprendeu no tutorial
anterior.
Uma conta de ganho de juros que acumula juros no final de cada mês.
Uma linha de crédito que pode ter saldo negativo, mas quando há saldo, há
cobrança de juros a cada mês.
Uma conta de cartão presente pré-paga que começa com um único depósito, e só
pode ser paga. Ela pode ser preenchida novamente uma vez no início de cada mês.
C#
Cada uma dessas classes herda o comportamento compartilhado de sua classe base
compartilhada, a classe BankAccount . Escreva as implementações para
funcionalidades novas e diferentes em cada uma das classes derivadas. Essas classes
derivadas já têm todo o comportamento definido na classe BankAccount .
É uma boa prática criar cada nova classe em um arquivo de origem diferente. No
Visual Studio , você pode clicar com o botão direito do mouse no projeto e
selecionar adicionar classe para adicionar uma nova classe em um novo arquivo. No
Visual Studio Code , selecione Arquivo e Novo para criar um novo arquivo de origem.
Em qualquer ferramenta, nomeie o arquivo para corresponder à classe:
InterestEarningAccount.cs, LineOfCreditAccount.cs e GiftCardAccount.cs.
C#
C#
Você pode ver que todos os três tipos de conta têm uma ação que ocorre no final de
cada mês. No entanto, cada tipo de conta faz tarefas diferentes. Você usa polimorfismo
para implementar esse código. Crie um único método virtual na classe
BankAccount :
C#
C#
C#
C#
private readonly decimal _monthlyDeposit = 0m;
C#
C#
Console
7 Observação
A saída real inclui o caminho completo para a pasta com o projeto. Os nomes das
pastas foram omitidos para brevidade. Além disso, dependendo do formato de
código, os números de linha podem ser ligeiramente diferentes.
Esse código falha porque BankAccount pressupõe que o saldo inicial deve ser maior
que 0. Outra suposição feita na classe BankAccount é que o saldo não pode ficar
negativo. Em vez disso, qualquer retirada que sobrecarrega a conta é rejeitada. Ambas
as suposições precisam mudar. A linha de conta de crédito começa em 0 e geralmente
terá um saldo negativo. Além disso, se um cliente empresta muito dinheiro, ele incorre
em uma taxa. A transação é aceita, só custa mais. A primeira regra pode ser
implementada adicionando um argumento opcional ao construtor BankAccount que
especifica o saldo mínimo. O padrão é 0 . A segunda regra requer um mecanismo que
permite que classes derivadas modifiquem o algoritmo padrão. De certa forma, a
classe base "pergunta" ao tipo derivado o que deve acontecer quando há um cheque
especial. O comportamento padrão é rejeitar a transação lançando uma exceção.
Vamos começar adicionando um segundo construtor que inclui um parâmetro
minimumBalance opcional. Esse novo construtor faz todas as ações feitas pelo
construtor existente. Além disso, ele define a propriedade de saldo mínimo. Você pode
copiar o corpo do construtor existente, mas isso significa dois locais a serem alterados
no futuro. Em vez disso, você pode usar o encadeamento de construtor para que um
construtor chame outro. O código a seguir mostra os dois construtores e o novo
campo adicional:
C#
Owner = name;
_minimumBalance = minimumBalance;
if (initialBalance > 0)
MakeDeposit(initialBalance, DateTime.Now, "Initial balance");
}
Essa implementação chamará MakeDeposit somente se o saldo inicial for maior que
0 . Isso preserva a regra de que os depósitos devem ser positivos, mas permite que a
conta de crédito abra com um saldo 0 .
Agora que a classe BankAccount tem um campo somente leitura para o saldo mínimo,
a alteração final é alterar o código físico 0 para minimumBalance no método
MakeWithdrawal :
C#
C#
C#
C#
O método adicionado é protected , o que significa que ele pode ser chamado apenas
de classes derivadas. Essa declaração impede que outros clientes chamem o método. É
também virtual para que classes derivadas possam alterar o comportamento. O tipo
de retorno é Transaction? . A anotação ? indica que o método pode retornar null .
Adicione a seguinte implementação para LineOfCreditAccount cobrar uma taxa
quando o limite de saque for excedido:
C#
C#
Resumo
Se você não conseguir avançar, veja a origem deste tutorial em nosso repositório
GitHub .
Este tutorial demonstrou muitas das técnicas usadas na programação Orientada por
objeto:
Você usou Abstração quando definiu classes para cada um dos diferentes tipos de
conta. Essas classes descreveram o comportamento desse tipo de conta.
Você usou Encapsulamento quando manteve muitos detalhes private em cada
classe.
Você usou Herança quando aproveitou a implementação já criada na classe para
salvar o código BankAccount .
Você usou Polimorfismo ao criar métodos virtual que as classes derivadas
poderiam substituir para criar um comportamento específico para esse tipo de
conta.
6 Colaborar conosco no Comentários do .NET
GitHub O .NET é um projeto código aberto.
A fonte deste conteúdo pode Selecione um link para fornecer
ser encontrada no GitHub, onde comentários:
você também pode criar e
revisar problemas e solicitações Abrir um problema de
de pull. Para obter mais documentação
informações, confira o nosso
guia para colaboradores. Fornecer comentários sobre o
produto