"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора

Если вы можете организовать понятия программы только в виде обще-
го графа (не дерева или ациклического направленного графа), и если
вы не можете локализовать взаимные зависимости, то вы, по всей ви-
димости, попали в затруднительное положение, из которого вас не вы-
ручит ни один язык программирования. Если вы не можете представить
какой-либо просто формулируемой зависимости между основными поняти-
ями, то скорее всего справиться с программой не удастся.
Напомню, что большую часть программирования можно легко и
очевидно выполнять, используя только простые типы, структуры
данных, обычные функции и небольшое число классов из стандартной
библиотеки. Весь аппарат, входящий в определение новых типов, не
следует использовать за исключением тех случаев, когда он
действительно нужен.
Вопрос "Как пишут хорошие программы на C++" очень похож на вопрос
"Как пишут хорошую английскую прозу?" Есть два вида ответов:
"Знайте, что вы хотите сказать" и "Практикуйтесь. Подражайте
хорошему языку." Оба совета оказываются подходящими к C++ в той же
мере, сколь и для английского - и им столь же трудно следовать.

Правила Правой Руки (*)

Здесь приводится набор правил, которых вам хорошо бы
придерживаться изучая C++. Когда вы станете более опытны, вы можете
превратить их в то, что будет подходить для вашего рода
деятельности и вашего стиля программирования. Они умышленно сделаны
очень простыми, поэтому подробности в них опущены. Не воспринимайте
их чересчур буквально. Написание хороших программ требует ума,
вкуса и терпения. Вы не собираетесь как следует понять это с самого
начала; поэкспериментируйте!
[1] Когда вы программируете, вы создаете конкретное
представление идей вашего решения некоторой задачи. Пусть
структура отражает эти идеи настолько явно, насколько это
возможно:
[a] Если вы считате "это" отдельным понятием, сделайте его
классом.

____________________
(*) Некоторые легко запоминаемые эмпирические правила, "Правила-
помошники." (прим. перев.)

- стр 18 -

[b] Если вы считате "это" отдельным объектом, сделайте его
объектом некоторого класса.
[c] Если два класса имеют общим нечто существенное, сделайте
его базовым классом. Почти все классы в вашей программе
будут иметь нечто общее; заведите (почти) универсальный
базовый класс, и разработайте его наиболее тщательно.
[2] Когда вы определяете класс, который не реализует
некоторый математический объект, вроде матрицы или