Стандартні реалізації програми для обчислення податків Visual C # (Sharp)

У деяких випадках в базових класах немає необхідності Іноді можна просто створити стандартну реалізацію, яка може охоплювати кілька підсистем У випадку з движком для обчислення податків, дохід Тобто дохід, що в Канаді, що в Сполучених Штатах, що в Німеччині Різниця полягає в тому, яким обром дохід обробляється при обчисленні податків Ще одним постійним Аспе для всіх країн є обставина, що капітальний дохід обкладається тільки частковим податком

Для доходу можна створити реалізацію, однакову для різних движків для обчислення податку:

sealed class Taxlncome : ITaxIncome { double „amount

double „taxableRate

public Taxlncome(double amount, double taxableRate) {

_amount = amount

_taxableRate = taxableRate

}

public double RealAmount { get {

return „amount

}

}

public double TaxableAmount { get {

return „amount * „taxableRate

}

}

}

Інтерфейс iTaxincome має дві властивості, які реалізуються в класі Taxlncome: RealAmount І TaxableAmount Значення ЦІ Х двох свойст У вважаються доступними тільки для читання і визначаються конструктором класу Taxlncome Призначенням конструктора є привласнити ці два значення, після чого обєкт стає незмінним Таким чином, змінити значення в інтерфейсі

8 Зак 555

ITaxIncome можна, тільки створивши новий екземпляр класу Taxincome Хоча створю нового екземпляра кожного разу, коли нам потрібно змінити значення властивостей ReaiAmount і TaxabieAmount, може здатися додаткової роботою, даний підхід має певні переваги в термінах продуктивності та упраенія ресурсами

У коді прикладу властивість TaxabieAmount є результатом множення членів даних _amount і _taxableRate Наприклад, при обчисленні оподатковуваної частини капітальних доходів у Канаді загальна сума множиться на 50% Тому значення члена даних _taxabieRate буде о 50

Слід також звернути увагу на те, що в оголошення класу Taxincome оасть видимості вказана не як public, а як sealed Це означає, що з даного класу не можна отримувати похідні класи В аспекті проектування, це Говіт, що клас Taxincome є розділяються і не підлягає спадкоємства, чти не вплинути будь-яким чином на поділюване поведінку

Ключове слово sealed може також застосовуватися з методами такі методи не можна підміняти або перевантажувати Зазвичай ключове слово sealed використовується з метом, коли ми не хочемо, щоб похідний клас зраджував поведінка методу

Реалізація класу ITaxDeduction схожа на реалізацію класу ITaxIncome:

sealed class TaxDeduction : ITaxDeduction { double _amount

public TaxDeduction(double amount) {

_amount = amount

}

public double Amount { get {

return _amount

}

}

}

Область видимості класів Taxincome І TaxDeduction оголошена як seladed, Т К їх функціональність буде спільною для всіх реалізацій Але чи розумно предостаять інтерфейси, а не самі класи Інтерфейси застосовуються як засіб для відділення реалізацій від ідей Інтерфейси змінюються дуже рідко, в той час як реалізації можуть змінюватися і в дійсності змінюються частіше Але якщо реалізують поводиться подібно інтерфейсу в термінах зміни сигнатури інтерфейсу, то чому б не надавати сам клас Тому, що іноді ми будемо предтавлять клас, а іноді – інтерфейс Для движка для обчислення податків проставлення класів Taxincome І TaxDeduction, мають область ВИДИМОСТІ sealed, швидше за все, не виявилося б проблемою Практичним правилом в даом аспекті надаватиме класи тільки тоді, коли є впевненість у тому, що сигнатури інтерфейсів методів і властивостей не змінюватимуться сліом часто

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*