Третий манифест Кристофера Дейта и Хью Дарвена

       

Положительные OO-утверждения


Положительные OO-утверждения

Этот раздел явно подчеркивает трактовку Д&Д OO как "Other Orthogonal", а не как "Object-Oriented". По сути дела, ни одно из положительных OO-утверждений не имеет прямого отношения к объектной ориентации.

  • В языке D должна допускать проверка типов во время компиляции.

  • Если в языке D допускается определение некоторого типа T' как подтипа некоторого супертипа T, то такая возможность должна соответствовать некоторой четко определенной и общепризнанной модели.

  • Если в языке D допускается определение типа T' как подтипа некоторого другого типа T, то это не противоречит тому, чтобы T' определялся как подтип и некоторого иного типа, который не является типом T или каким-либо супертипом T (если требования OO-утверждения 2 не запрещают такую возможность).

  • Язык D должен быть вычислительно полным. В языке D может иметься (но не должна требоваться) поддержка вызова из так называемых "основных программ", написанных на языках, отличных от D. Аналогично, в языке D может иметься (но не должна требоваться) поддержка использования других языков программирования для реализации определяемых пользователями операций.

  • Инициация транзакций должны производиться только средствами явного выполнения операции "begin transaction". Завершение транзакции должно производиться только средствами выполнения операций "commit" или "rollback"; фиксация всегда должна быть явной, а откат может быть неявным (если транзакция завершается неуспешно не по своей вине). Если транзакция TX завершается выполнением операции commit ("нормальное завершение"), то изменения, произведенные TX в соответствующей базе данных, должны быть зафиксированы. Если транзакция TX завершается выполнением операции rollback ("ненормальное завершение"), то изменения, произведенные транзакцией TX в соответствующей базе данных, должны быть аннулированы.

  • В языке D должны поддерживаться вложенные транзакции, т.е. должно допускаться образование транзакцией-предком TX транзакции-потомка TX' до завершения транзакции TX.
    При этом:


    1. TX и TX' должны взаимодействовать с одной и той же базой данных (что в действительности требуется RM-требованием 17).

    2. Не требуется задержка выполнения TX на время выполнения TX' (хотя это и допускается). Однако TX не должна завершаться до завершения TX'; другими словами, TX' должна полностью содержаться в TX.

    3. Откат TX должен включать откат TX', даже если TX' завершилась фиксацией. Другими словами, "фиксация" всегда интерпретируется в контексте предка (если он существует) и может быть отменена транзакцией-предком.


  • Пусть AggOp - агрегатная операция, такая как SUM. Если аргумент AggOp является пустым, то:


    1. Если AggOp является сокращенной формой некоторой итеративной бинарной операции Op (в случае SUM это операция "+") и если для Op существует начальное значение (0 в случае SUM), то результатом вызова AggOp должно быть это начальное значение;

    2. В противном случае результат вызова AggOp должен быть неопределенным.


    Последнее OO-утверждение снова явно направлено на избавление от неопределенных значений. Но, во-первых, лично для меня совершенно неочевидно, что при сложении пустого набора чисел должно получиться значение 0. По-моему, это как минимум неясно с позиций интуиции. Во-вторых, во второй части этого утверждения появляется словосочетание "неопределенный результат", но что это значит, формально не поясняется.



    Содержание раздела