O que exatamente o fato de fazer com que os impostos IKCV e ICPP herdarem de TemplateDeImpostoCondicional que herda de Imposto traz de vantagem para o meu código?!
O que exatamente o fato de fazer com que os impostos IKCV e ICPP herdarem de TemplateDeImpostoCondicional que herda de Imposto traz de vantagem para o meu código?!
A ideia é que vc consiga compor eles da maneira que seu programa necessite. Quero agora ter um imposto que é formado pelo IKCV + ICPP, é só passar como argumento para o outro. Com a herança você padronizou a interface de acesso e trouxe o polimorfismo para o jogo.
Imagine que o algoritmo de cálculo do imposto seja bem mais complexo, e que ambas as classes se utilizem desse algoritmo, apesar de que ambas têm suas peculiaridades. A classe pai "desenhará" esse algoritmo, cabendo a cada classe filha colocar suas particularidades no mesmo.
Assim você não vai ficar repetindo código, e se por um acaso o algoritmo sofrer alguma pequena alteração você não precisa alterar nada nas classes filhas.
Sim, na realidade o propósito do padrão de projeto em si, eu compreendi, no entanto o que não ficou muito claro, foi o fato de no exercício em questão "Decorando IKCV e ICPP", como opinião do instrutor, veio a sugestão de criar um cara chamado TemplateDeImpostoCondicional que por sua vez herda de Imposto que a princípio já era o cara que fazia o papel de "decorar" os retornos das classes encadeadas. Ficou na verdade a sensação de que essa classe adicional para intermediar esse processo ser desnecessária. A menos que essa classe a mais seja uma forma de adicionar mais uma camada na tentativa de abstrair um pouco mais o cálculo de imposto. Não sei se seria esse o caso.
Jun, pelo que entendi a classe TemplateDeImpostoCondicional
foi criada para implementar o pattern Template Method, para impostos que tem a caracteristica de ter um algoritimo similar, que pudesse deixar espaços para serem preenchidos pelas implementações.
O que fizemos agora foi adequar as classes IKCV
e ICPP
para também serem capazes de formar impostos complexos com outros impostos, ou seja, implementar o pattern Decorator.
Foi isso mesmo para vários padrões de projeto temos o mesmo contexto dos impostos o que acontece e que essa classe abstrata TemplateDeImpostoCondicional tinha sido implementada na demostração do padrão anterior que no caso era o Template Method e foi utilizada também no Decorator.
Relacionamento entre padrões são comuns.
Espero ter ajudado e bons estudos.