Объектно-ориентированная Тора

Несколько лет назад один из моих ливжурнальных френдов 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) какую-либо часть кода.
Код Торы может быть расширен, используя определенные правила.

Leave a Reply

%d bloggers like this: