Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумПаттерныАнтипаттерныТест-драйвЗаметкиВопрос-ответКнигорецензииСправочная

9. Симметрия и стек

— Все, что имеет начало, имеет и конец.

Агент Смит.
 
Общий смысл
Придерживайтесь симметрии и принципа стека в своих действиях — это хорошая привычка, которая придает разрабатываемой системе строгость, дисциплинирует и оберегает от совершения ряда ошибок.
 
Симметрия
Если вы вступаете во владение ресурсом в конструкторе, освобождайте этот ресурс в деструкторе. Если у вас есть функция Open, напишите функцию Close. Если вы написали отправку в поток, напишите и чтение из потока. Если некоторая система вступила во владение некоторым ресурсом, то пусть эта же система и будет ответственной за его освобождение. И вообще, если вы сделали определенным образом шаг вперед, делайте зеркально противоположным (но в то же время аналогичным по своей сути) образом шаг назад.
Плохо, если для чтения используется мембер-функция, а для записи — поток ввода-вывода. Плохо, если инициализация происходит в конструкторе, а освобождение — в специальной функции. Плохо, если система, вступая во владение некоторым ресурсом и выдавая вам хендл, не котнтролирует его дальнейшую судьбу и оставляет обязанность освободить этот ресурс за вами.
 
Стек
Шаги относительно вложенной функциональности старайтесь осуществлять по принципу стека. Открыли поток, открыли файл, закрыли файл, закрыли поток. Начали языковую транзакцию, начали SQL-транзакцию, завершили SQL-транзакцию, завершили языковую транзакцию. В случае исключения откатили SQL-транзакцию, затем откатили языковую транзакцию. Придерживайтесь принципа стека даже если на ваш взгляд не принципиально, в какой последовательности следует выполнить шаги назад.
Принцип стека можно подсмотреть во многих ситуаицях. Конструирование и уничтожение членов класса происходит по принципу стека. Конструирование и уничтожение локальных объектов — по принципу стека. Конструирование и уничтожение глобальных объектов в пределах единицы трансляции — тоже по признаку стека. Конструирование и уничтожение объектов по этажам иерархии — да, и здесь используется этот принцип. И это не случайно — принцип стека наиболее естественен для инициализации и освобождения ресурсов с точки зрения вложенной функциональности.
 
Исключения
В некоторых ситуациях удобно объявить конструктор закрытым, а создание объектов поручить статической или дружественной функции. Иногда такой подход окажется удобнее. Однако не забывайте, что подобный подход весьма специфичен, и на его использование должны быть действительно веские основания.

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

Шлагбаумы. тамбурные двери металлические. рефераты безопасность. PornoEra.com смотреть порно видео онлайн, порно бесплатно