64 _____ ________________Часть /. Основные характеристики C++
лей, останутся в файлах типа -с, .ее, -ср или .срр. В чем преимущества такого подхода?
Во-первых, представим себе программный проект, в котором участвуют несколько программистов. Когда ваши классы и объекты разнесены по отдельным модулям, каждый программист может работать независимо от прочих. Друг с другом модули объединяют только интерфейсные части объектов, находящиеся в заголовочных файлах и определяемые обычно до стадии реализации. Модульность поддерживает крупномасштабное программирование — в противоположность программированию маломасштабному, имеющему склонность валить все классы и объекты в одну кучу.
Совет
1В объектно-ориентированной разработке физическому воплощению предшествует определение абстрактных и логических взаимоотношений.
Во-вторых, преимущество модульной организации в том, что отдельные модули можно модифицировать и перекомпилировать, не затрагивая серьезно остальную часть системы — интерфейсы ведь остаются теми же, что были.
В вышеупомянутом цифровом переключателе о восьми миллионах строках каждый разработчик отвечал за один или более модулей. Пока их интерфейсные части не менялись, программисты могли вволю трудиться над их внутренним содержимым. Однако картина резко меняется, если кому-либо вдруг потребуется изменить интерфейс между модулями. Любое подобное изменение, разумеется, требует соответствующей доработки и перекомпиляции тех модулей, которые пользуются этим интерфейсом. Всех, кого это непосредственно касается, требуется поставить в известность и получить его согласие, и только после этого все модули, затронутые переменами, перекомпилируются. Когда перекомпиляция начнет занимать изрядную часть суток, вы поймете, что разумное деление вашего проекта себя оправдает.
Совет
Создавая файлы заголовков для интерфейсов, всегда старайтесь обрамлять их условиями ttifndef, ftdefine и #endif. Определение _SAVINGS_HPP в листинге 3.1 позволяет любому количеству модулей включать этот файл, не опасаясь лавины предупреждений компилятора о повторном объявлении класса SavingsAccount. Директивы ftifndef _SAVINGS_HPP, #define _SAVINGS_HPP, ..., #endif предотвращают повторное включение файла savings, hpp в процесс компиляции. Он компилируется только однажды, когда _SAVINGS_HPP еще не определена, то есть в самый первый раз. Если вы незнакомы с макросами типа ftifndef, ftdefine, #endif и #include, обратитесь к главе 4 "Препроцессор".
Вернемся к классу SavingsAccount. Считаем, что первый класс SavingsAccount объявлен в заголовочном файле Savings.hpp. Что произойдет с другим модулем, использующим этот файл (посредством ^include "Savings.hpp"), когда