Положительные 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. По-моему, это как минимум неясно с позиций интуиции. Во-вторых, во второй части этого утверждения появляется словосочетание "неопределенный результат", но что это значит, формально не поясняется.
Назад |
Содержание |
Вперед
|
|