Удаляйте глаголы из предложений, описывающих абстрактную модель — КиберПедия 

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Удаляйте глаголы из предложений, описывающих абстрактную модель

2017-07-31 229
Удаляйте глаголы из предложений, описывающих абстрактную модель 0.00 из 5.00 0 оценок
Заказать работу

Использование в описании абстрактной модели таких слов, как отслеживать, вычислять или других глаголов, портит ее внутреннюю сущность. Всегда применяйте только те атрибуты, которые описывают состояние. Этот подход примерно аналогичен тому, что был описан в разделе “Представляйте все существительные наборами”.
Программисты, пришедшие из мира процедурных языков, привыкли мыслить категориями действий. Они думают о сложении, тогда как программистам декларативных языков важна сумма. Они думают о процессах, а мы — о результатах.

Вам по-прежнему доступны “заглушки”

На одном из рисунков известного карикатуриста Сидни Харриса (Sydney Harris) изображены два математика перед доской, на которой посреди длинной цепочки сложных математических доказательств стоят слова. “А затем происходит чудо”. И математик-слушатель говорит математику-автору: “Вот этот шаг надо бы описать поподробнее”.
Аналогичный прием мы используем в процедурных языках программирования — вставляя “заглушку”, до поры до времени не зная, что делать в этом месте программы. Например, вы разрабатываете программу по расчету зарплаты для компании, которая имеет сложную систему выплаты премий. Она вам пока непонятна или не задана, и вы пишете процедуру-“заглушку”, которая возвращает константу или просто выдает сообщение о своем выполнении. Это позволит вам продолжить работу с теми фрагментами процедуры, которые вам ясны.
Указанное труднее осуществить в декларативных языках программирования. Модули процедурного языка не обременены жесткими связями, тогда как предложения и запросы оператора SELECT представляют собой монолитную единицу программного кода. В процедурных языках программирования вы без труда напишете код, предназначенный для тестирования модуля. Для конструкций SQL сделать это гораздо проблематичнее.
Вернемся к задаче выбора партнера по танцу. Я мог бы подойти к ее решению, предположив, что необходимо разделить кавалеров и дам на две отдельные группы. Но допустим, что я пока не знаю, как написать этот код. Поэтому я с помощью текстового редактора вставляю заглушку — псевдокод:

SELECT Ml.name AS male, FLname AS female FROM (<чудо-парни>) AS M1(name, <заглушка для парней>) FULL OUTER JOIN (<чудо-девушки>) AS F1(name, <заглушка для девушек>) ON M1 <заглушка для парней>?? F1 <заглушка для девушек>;

Заключенный в угловые кавычки псевдокод я позже заменю на совокупность табличных столбцов, подзапросы или что-нибудь другое. В данный момент они являются просто метками. Также я использую метку “??” для указания на взаимосвязь между кавалерами и дамами. Затем я могу перейти на следующий уровень вложения и заменить метку <чудо-парни> подзапросом следующего содержания:

(SELECT P1.name, <заглушка для парней> FROM People AS P1 WHERE P1.gender = 1) AS M1 (name, <заглушка для парней>)

Такой же шаблон для подзапроса применим и к метке <чудо-девушки>. Я знаю, что теперь мне необходимо определиться с кодом для метки <заглушка для парней>. Первым делом я обращаю внимание на столбцы в таблице People. Единственным интересующим меня атрибутом в данной таблице является пол. Я устанавливаю значение для этого атрибута таю для кавалеров оно равно 1, для дам — 2.
Я пробую следующее:

SELECT MLname AS male, F1.name AS female FROM (SELECT Pl.name, P1.gender FROM People AS P1 WHERE P1.gender = 1) AS M1 (name, gender)FULL OUTER JOIN(SELECT Pl.name, gender FROM People AS P1 WHERE P1.gender = 2) AS F1 (name, gender) ON M1.gender = 1 AND F1.gender = 2;

Легко увидеть, что данный фрагмент представляет собой всего-навсего неловко замаскированный оператор объединения CROSS JOIN. Добавить, что ли, уточнение по именам?

SELECT M1.name AS male, F1.name AS female FROM (SELECT P1.name, P1.gender FROM People AS P1 WHERE P1.gender = 1) AS M1 (name, gender) FULL OUTER JOIN (SELECT P1.name, gender FROM People AS P1 WHERE P1.gender = 2) AS F1 (name, gender) ON M1.gender = 1 AND FLgender = 2 AND M1.name <= F1.name;

Нет, не помогает. В результате мы хоть и получим результирующий набор меньшего размера, но в нем все еще будут повторяющиеся пары. В этой ситуации поможет некоторый опыт работы с SQL Обычный прием здесь — упорядочение пар при помощи самообъединения таблицы. Поскольку данный прием применим к любой таблице, для получения окончательного результата запроса мы можем использовать его как для кавалеров, так и для дам.

SELECT M1.name AS male, F1.name AS female FROM (SELECT P1.name, COUNT (P2.name) FROM People AS P1, People AS P2 WHERE P2.name <= P1.name AND P1.gender = 1 AND P2.gender = 1 GROUP BY PLname) AS M1 (name, rank) FULL OUTER JOIN (SELECT PLname, COUNT (P2.name) FROM People AS P1, People AS P2 WHERE P2.name <= P1.name AND P1.gender = 2 AND P2.gender = 2 GROUP BY PLname) AS F1 (name, rank) ON M1.rank = F1.rank;

Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.