Factoring e herança em c ++

Video: Curso de C++ - Aula 30 - Construtores e destrutores

O conceito de hereditariedade, e assim factoring, em C ++ permite uma classe de herdar as propriedades de uma classe de base. Hereditariedade tem um certo número de fins-a principal vantagem de herança é a capacidade para assinalar a relação entre as classes. Este é o chamado É UM relacionamento - um Forno de micro-ondas is_a Forno e coisas assim.

Factoring é uma grande coisa se você fizer as correlações corretas. Por exemplo, o forno de microondas contra relação forno convencional parece natural. Afirmam que microondas é um tipo especial de torradeira, e você está indo para o problema. É verdade, ambos fazem coisas quente, ambos usam eletricidade, e eles estão ambos encontrados na cozinha, mas a semelhança termina aí - um microondas não pode fazer torradas e uma torradeira não pode fazer nachos.

Identificar as classes inerentes a um problema e desenhando as relações corretas entre essas classes é um processo conhecido como factoring. (A palavra está relacionada com a aritmética que você foi forçado a fazer na escola: factoring os denominadores menos comuns, por exemplo, 12 é igual a 2 vezes 2 vezes 3.)

Veja como você pode usar a herança para simplificar seus programas usando um exemplo conta bancária. Suponha que lhe pedissem para escrever um programa de banco simples que implementou o conceito de uma conta poupança e uma conta corrente.

programadores orientados a objetos vieram acima com uma maneira concisa para descrever os pontos mais importantes de uma classe em um desenho. o checagem e Poupança classes são mostrados nesta figura. (Esta é apenas uma das várias maneiras de expressar graficamente a mesma coisa.)

as classes independentes & lt; i & gt; Verificação & lt; / i & gt; e & lt; i & gt;. Poupança & lt; / i & gt; “/ & gt; & lt; / p & gt; & lt; div classe =aulas independentes checagem e Poupança.

Para ler esta figura e as outras figuras, lembre-se o seguinte:

  • A caixa grande é a classe, com o nome da classe no topo.

  • Os nomes em caixas são funções membro.

  • Os nomes não em caixas são membros de dados.

  • Os nomes que se estendem parcialmente para fora das caixas são publicamente membros- acessível que é, esses membros podem ser acessados ​​por funções que não fazem parte da classe ou qualquer de seus descendentes. Os membros que estão completamente dentro da caixa não são acessíveis de fora da classe.

  • Uma seta grossa representa o É UM relação.

  • A seta representa o fino TEM UM relação.

UMA Car Vehicle is_a, mas um Carro HAS_A Motor.

Você pode ver na primeira figura que o checagem e Poupança classes têm muito em comum. Por exemplo, ambas as classes têm um retirada() e depósito() função de membro. Porque as duas classes não são idênticos, no entanto, eles devem permanecer como classes separadas. (Em um aplicativo de banco de vida real, as duas classes seria um bom negócio mais diferente do que neste exemplo.) Ainda assim, deve haver uma maneira de evitar esta repetição.



Você poderia ter uma dessas classes herdam o outro. Poupança tem mais membros do que Verificando, assim que você poderia deixar Poupança herdam Verificação. Este arranjo é mostrada nesta figura a seguir.

o Poupança classe herda todos os membros. A classe é completado com a adição do membro de dados noWithdrawals e por substituir a função retirada(). Você tem que substituir retirada() porque as regras para retirar dinheiro de uma conta poupança são diferentes daqueles para retirar dinheiro de uma conta corrente.

<i>Poupança implementado como uma subclasse de <i>Verificação.</i>“/ Gt;</div><div class=Poupança implementado como uma subclasse de Verificação.

embora permitindo Poupança herdam checagem é laborsaving, não é completamente satisfatória. O principal problema é que, como o peso listada na minha carteira de motorista, ele deturpa a verdade. Esta relação de herança implica que uma conta poupança é um tipo especial de conta corrente, o que não é.

Video: Curso de C++ - Aula 33 - Herança

Tais distorções são confusas para o programador, tanto hoje e de amanhã. Um dia, um programador familiarizado com nossos truques de programação terá que ler e entender o nosso código faz. declarações enganosas são difíceis de conciliar e entender.

Além disso, tais distorções podem levar a problemas no caminho. Suponha, por exemplo, que o banco alterar as suas políticas com relação a contas correntes. Diga-decide cobrar uma taxa de serviço sobre contas correntes somente se o saldo mínimo mergulhos abaixo de um determinado valor durante o mês.

Uma mudança como essa pode ser facilmente manuseado com mudanças mínimas para a classe Verificação. Você vai ter que adicionar um novo membro de dados para a classe checagem para acompanhar o saldo mínimo durante o mês. Vamos sair em um membro e chamá-lo saldo mínimo.

Mas agora você tem um problema. Porque Poupança herda de Corrente, poupança recebe este novo membro de dados também. Ele não tem nenhum uso para esse membro, porque o saldo mínimo não afeta contas de poupança, para que ele apenas se senta lá. Lembre-se que cada objeto conta corrente tem esse adicional saldo mínimo membro. Um membro de dados extra pode não ser um grande negócio, mas acrescenta mais confusão.

Alterações como essa acumular. Hoje é um membro extra de dados - amanhã é uma função membro alterado. Eventualmente, a conta de poupança classe está carregando um monte de bagagem extra que é aplicável somente a contas correntes.

Agora o banco volta e decide mudar algumas economias política de conta. Isso requer que você modificar alguma função no Verificação. Alterações como essa na classe base propagar automaticamente para a subclasse a menos que a função já está substituído na subclasse Poupança.

Por exemplo, suponha que o banco decide dar torradeiras para cada depósito na conta corrente. Sem o banco (ou seus programadores) sabendo que, depósitos para contas correntes, automaticamente resultará em doações torradeira. A menos que você está muito cuidado, muda para checagem inesperadamente pode aparecer em Poupança.

Como você pode evitar esses problemas? alegando que checagem é um caso especial de Poupança faz mudanças, mas não resolve o nosso problema. O que você precisa é de uma terceira classe (chamá-lo Conta, apenas para sorrisos) que incorpora as coisas que são comuns entre checagem e Poupança, como mostrado aqui.

Video: Dicas de C++ - Usando Herança Multipla

Baseando & lt; i & gt; Verificação & lt; / i & gt; e & lt; i & gt; Poupança & lt; / i & gt; em comum um & lt; i & gt; Conta & lt; / i & gt; classe “/ & gt;. & lt; / p & gt; & lt; div classe =Basing checagem e Poupança em comum Conta classe.

Como é que a construção de uma nova conta de resolver os problemas? Em primeiro lugar, a criação de um novo Conta classe é uma descrição mais precisa do mundo real (qualquer que seja). Claro, não há realmente algo conhecido como uma conta. contas de poupança e contas correntes são casos especiais deste conceito mais fundamental.

Video: Programação em C# - Herança - Parte 01 - 37

Além disso, a classe Poupança é isolado a partir de mudanças para a classe checagem (e vice versa). Se os institutos bancários uma mudança fundamental a todas as contas, você pode modificar Conta, e todas as subclasses vai herdar automaticamente a alteração. Mas se o banco muda sua política apenas para contas correntes, você pode modificar apenas o checagem classe conta sem afetar Poupança.

Este processo de abate propriedades comuns a partir de classes semelhantes, é a essência do factoring classe.

Factoring é legítima apenas se o relacionamento de herança corresponde à realidade. Factoring em conjunto uma classe Rato e Controle de video game porque eles são tanto de hardware dispositivos apontadores é legítimo. Factoring em conjunto uma classe Rato e Exibição porque ambos fazem chamadas de sistema operacional de baixo nível não é.

">

Publicações relacionadas