Введение
Название этой книги отражает то, что я считаю основной трудностью при работе как с С++,
так и с С: эти языки дают вам столько гибкости, что если у вас нет желания и способности
призвать себя к порядку, то в итоге вы можете получить гигантский модуль не поддающейся
сопровождению тарабарщины, притворяющейся к тому же компьютерной программой. Вы можете
поистине делать все при помощи этих языков, даже если вы этого не хотите. В этой книге
делается попытка дать средство для преодоления этой трудности в виде собрания практических
правил программирования на С++ и С - правил, которые, надеюсь, уберегут вас от неприятностей,
если вы будете их использовать с самого начала. Хотя большинство из приводимых здесь правил
применимы равно при программировании как на С, так и на С++, я включил много материала,
относящегося лишь к миру С++ и сконцентрированного по мере возможности в заключительном
разделе. Если вы программируете лишь на С, то просто игнорируйте материал по С++, встречающийся
вам в более ранних разделах.
Я профессионально занимаюсь программированием примерно с 1979 года и ежедневно пользуюсь
правилами из этой книги. Я не утверждаю, что эти правила безусловны, или даже "верны". Однако
я могу сказать, что они отлично мне служили все это время. Хотя эта книга не относится к
категории путеводителей по "ловушкам и рытвинам", многие из этих правил предохранят вас от
неприятностей того сорта, который обсуждается в путеводителях по "ловушкам и рытвинах".
Практические правила по своей сути гибки. Они постепенно меняются с ростом опыта, и ни одно
правило не действует постоянно. Тем не менее я предупреждаю вас с самого начала, что мое мнение
относительно этого материла самое наилучшее и что я не очень симпатизирую неряшливым мыслям или
небрежному программированию. Я не извиняюсь за усиленное подчеркивание тех вещей, в которые я
сильно верю. Мои мнения всегда могут измениться, если, конечно, вы сможете убедить меня в том,
что я не прав, но имейте в виду, что эта книга основана на опыте, а не на теории. Я сознаю, что
большая часть этой книги подходит опасно близко к чьему-то культу и многие вещи, произносимые
мной, дискуссионны, но думаю, что всегда имеется возможность разумного разговора двух людей,
объединенных целью совершенствования своего мастерства.
Я часто читаю курсы по С++ и объектно-ориентированному проектированию как по приглашению частных
фирм, так и в Калифорнийском университете в Беркли. Эта книга появилась в ответ на просьбы моих
студентов, большинство из которых увлеченные профессионалы с настоящим желанием изучить этот
материал. Я вижу множество программ в процессе проверки домашних заданий, и эти программы достаточно
репрезентативны в качестве произведений сообщества профессиональных программистов из района залива
Сан-Франциско. К несчастью, каждый семестр я также вижу, что одни и те же проблемы повторяются снова
и снова. Поэтому эта книга является некоторым образом и списком распространенных проблем, найденных
мной в созданных настоящими программистами реальных программах, сопровождаемым моими советами по
их решению.
Обсуждаемые здесь проблемы программирования и проектирования не ограничиваются, к несчастью,
лишь ученическими программами. Многие из примеров того, что не следует делать, взяты из
коммерческого продукта: библиотеки классов Micrisoft Foundation Class(MFC) корпорации Micrisoft.
Я могу сказать, что эта библиотека была спроектирована без заботы о хорошем сопровождении людьми,
не подозревающими о существовании даже элементарных принципов объектно-ориентированного
проектирования. Я не выделял явно большинство примеров этого в тексте, так как это не книга с
названием "Что неправильно в MFC"; пользователи библиотеки MFC узнают ее код, когда натолкнутся
на него. Я выбрал примеры из MFC просто потому, что мне пришлось много с ней работать и очень
близко познакомиться с ее недостатками. Во многих других коммерческих библиотеках классов имеются
сходные проблемы.
Наконец, эта книга не является введением в С++. Обсуждение, сопровождающее относящиеся к С++
правила, предполагает, что вы знаете этот язык. Я не расходую место на описание того, как
работает С++. Имеется множество хороших книг, которые учат вас языку С++, включая мою собственную
C+C++ (New York, McGraw-Hill,1993). Вы должны также ознакомиться с принципами объектно-ориентированного
проектирования. Я рекомендую второе издание книги Гради Буча
Object-Oriented Analysis and Design with Applications (Redwood City, Benjamin Cummings,1994).
О нумерации правил: иногда я группировал некоторые правила вместе, потому что удобно описывать
их все одновременно. В этом случае все эти правила (имеющие различные номера) располагаются в
начале раздела. Я использовал запись номера правила вида "1.2" в случаях, когда оно является
особым случаем другого правила.
Используются технологии
uCoz