Несколько лет назад один из моих ливжурнальных френдов reb_moyshe написал пост о том, как объектно-ориентированное програмирование напоминает структуру Торы.
С тех пор, как я начал програмировать в .Net и Java, думаю, что понял о чем он писал. И думаю, что я также понял разницу между ОО програмированием и ОО Торы.
Попробуем простой пример.
Законы потомков Ноя насчитывают 7 простых утсановления.
Создадим класс для них:
class NoahideLaws () { public int NO_PUNISHMENT = 0; // нет наказания public int PUNISHMENT = 1; // есть наказание public int Idolatry(Boolean isDone) // идолопоклонство { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public int Murder (Boolean isDone) // убийство { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public int Theft(Boolean isDone) // кража { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public int SexualImmorality(Boolean isDone) // прелюбодеяние { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public int Blasphemy(Boolean isDone) // богохульство { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public int EatingFleshTakenFromAnAnimalWhileItIsStillAlive(Boolean isDone) // есть мясо животного, которое было отрезано пока животное еще было живо { if (isDone) return PUNISHMENT; return NO_PUNISHMENT; } public in EstablishmentOfCourtsOfLaw(Boolean isDone) // установление судебной системы { if (isDone) return NO_PUNISHMENT; return PUNISHMENT; } }
Позднее закон был расширен и определен только для евреев.
class TenCommandments extends NoahideLaws () { private Boolean _isJewish = false; // если это еврей public void setNation(Boolean isJewish) // проверка на национальность { _isJewish = isJewish; } public int KeepShabbat(Boolean isDone) // соблюдать шабат { if (isDone || !_isJewish) return NO_PUNISHMENT; return PUNISHMENT; } public int HonourFatherAndMother(Boolean isDone) // чтить родителей { if (isDone || !_isJewish) return NO_PUNISHMENT; return PUNISHMENT; } public int FalseWitness(Boolean isDone) // лжесвидетельствовать { if (isDone && _isJewish) return PUNISHMENT; return NO_PUNISHMENT; } public int CovetNeighborsHouse(Boolean isDone) // желать имущество соседа { if (isDone && _isJewish) return PUNISHMENT; return NO_PUNISHMENT; } }
Основная разница между Торой и програмированием заключается в том, что никто не может отменить (override) или опротестовать (deprecate) какую-либо часть кода.
Код Торы может быть расширен, используя определенные правила.