Вынос перерасчета вне Init делает ее столь простой, что вы вполне резонно могли бы спросить, зачем она существует вообще. Так же легко можно было бы поместить начальные значения в поля записи и вызвать Recale. Это достаточно верно, но совсем неплохо иметь одну единственную процедуру, которая "заполняет" таблицу закладной одной операцией. Поступая таким образом, вы будете достаточно уверенны, что не забудете какую-то часть операции, вроде придания значения полю PeriodsPerYear. Как только вы удостоверились, что инициализацию закладной вы выполненили правильно, вы можете "запечатать" ее в процедуре и быть уверенными, что отныне и в течение всего времени вам достаточно только вызвать Init, чтобы правильно обсчитать закладную.

Recale

Процедура Recale во всех отношениях является наиболее важной одиночной процедурой в MortUnit. Она берет текущие значения в записи TMortgage, вычисляет значение платежа на данный период и затем использует это значение платежа, чтобы распределить уплату займа по таблице с одним входом для каждого из указанных номеров периодов. Необходимо вызвать Recale при установке закладной, а также каждый раз при изменении любого из параметров закладной. Это Еключает в себя изменение величины оплаты любого одиночного платежа или группы платежей, поскольку люди часто делают это для сокращения срока закладной и избегания уплаты некоторого процента, обычно достающегося кредитору.

Фактически, если вы глянете на остальные процедуры в MortUnit, то увидите, что почти все они включают в себя добавление или удаление дополнительных сумм основного капитала где-нибудь в амортизационной таблице закладной. Поскольку при изменении даже единственного платежа в закладной требуется пересчет всей таблицы из-за измененного платежа, почти все другие процедуры также обращаются к Recale.

В этом заключается главная причина использования процедур. Если бы каждая процедура в MortUnit выполняла собственный перерасчет, то в модуле имелось бы огромное количество дублирующихся кодов, делая модуль более громоздким, чем он должен быть в действительности. Но это - менее серьезный вопрос по сравнению с опасностью выполнения всех перерасчетов разными способоми Как вы увидите, заглянув в Recale, это не простой процесс. Стоит пропустить где-нибудь один шаг, и вычисление может незаметно оказаться ошибочным. Заставляя все подпрограммы в MortUnit вызывать Recale для производства своих вычислений, нам необходимо только быть уверенными, что Recale работает правильно не то, что код перерасчета внутри шести или семи различных процедур.

Две магические функции: ЕХР и LN

Если какая-либо часть MortUnit и сложна для понимания, так это функция CalcPay-ment, которая целиком существует только в разделе реализации модуля и предназначена исключительно для частного использования другими подпрограммами в модуле. CalcPayment берет начальные значения для закладной и возвращает величину, которую нужно оплатить в каждом платеже. Эта формула является стандартной в финансовой практике, и если вам знакома наука о деньгах, вы по крайней мере узнаете ее. Чтобы заставить ее работать, используются две стандартные математические функции Object Pascal - ЕХР и LN.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31