Положительные 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.
При этом:
- TX и TX' должны взаимодействовать с одной и той же базой данных (что в действительности требуется RM-требованием 17).
- Не требуется задержка выполнения TX на время выполнения TX' (хотя это и допускается). Однако TX не должна завершаться до завершения TX'; другими словами, TX' должна полностью содержаться в TX.
- Откат TX должен включать откат TX', даже если TX' завершилась фиксацией. Другими словами, "фиксация" всегда интерпретируется в контексте предка (если он существует) и может быть отменена транзакцией-предком.
Пусть AggOp - агрегатная операция, такая как SUM. Если аргумент AggOp является пустым, то:
- Если AggOp является сокращенной формой некоторой итеративной бинарной операции Op (в случае SUM это операция "+") и если для Op существует начальное значение (0 в случае SUM), то результатом вызова AggOp должно быть это начальное значение;
- В противном случае результат вызова AggOp должен быть неопределенным.
Последнее OO-утверждение снова явно направлено на избавление от неопределенных значений. Но, во-первых, лично для меня совершенно неочевидно, что при сложении пустого набора чисел должно получиться значение 0. По-моему, это как минимум неясно с позиций интуиции. Во-вторых, во второй части этого утверждения появляется словосочетание "неопределенный результат", но что это значит, формально не поясняется.
Содержание раздела