Основы объектно-ориентированного проектирования

         

Форматирование


Рекомендуемое форматирование текста следует из общей синтаксической формы нотации, которую с некоторой натяжкой можно назвать "операторной грамматикой", когда текст класса представляет последовательность символов, разделенных на "операторы" и "операнды". Операторами являются фиксированные символы языка, такие как ключевые слова (do, например) или разделители (точка с запятой, запятая). Операндом является символ, выбираемый программистом (идентификатор, константа).

Основываясь на этом свойстве, форматирование текста следует гребенчато-подобной структуре (comb-like structure), введенной в языке Ada. Идея состоит в том, что каждая синтаксически важная часть класса, такая как инструкция или выражение должна либо:

  • размещаться на одной строке вместе с предшествующими и последующими операторами;
  • либо с отступами размещаться на нескольких строках, организованных так, чтобы это правило выполнялось рекурсивно.


Рис. 8.1.  Гребенчато-подобная структура организации программного текста

Каждая ветвь гребенки является последовательностью чередующихся операторов и операндов, обычно начинающихся и заканчивающихся оператором. В пространстве между двумя ветвями находится либо операнд, либо рекурсивно гребенчато-подобная структура.

Как пример, зависящий от размера его составляющих a, b и c, допустимы следующие формы представления инструкции выбора:

if c then a else b end

или

if c then a else b end

или:

if c then a else b end

Однако вы не можете использовать строку, содержащую просто if c или c end, так как они включают операнд вместе с чем-то еще, пропуская заканчивающий оператор в первом случае, а во втором - начинающий.

Подобным образом можно начать класс после предложения indexing так:

class C inherit -- [1]

или

class C feature -- [2]

или

class -- [3] C feature

Нельзя писать

class C -- [4] feature

поскольку первая строка нарушает правило.

Формы [1] и [2] используются в этой книге для небольших иллюстративных классов. Более практичные классы имеют одно или несколько помеченных предложений feature, они в отсутствие предложения inherit должны использовать форму [3] (она предпочтительнее, чем форма [2]):

class C feature -- Initialization ... feature -- Access и т.д.

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