335 _________Часть II. Программирование на C++

значительной степени дело вкуса. Сейчас, пока вы учитесь, стремитесь просто к правильности. Достигнув достаточного мастерства, перенесите акцент в сторону выразительной простоты; и лишь потом уделите внимание скорости. Правильно — это всегда лучше, чем быстро и неверно; с простыми выражениями легче работать, чем с длинными; а скорость все равно больше зависит от компьютера, чем от вас.

Маскировка деталей

Имея дело с большими программами, легко потеряться в изобилии имен. Несметное количество глобальных имен и функций может просто подавить. Именно так часто случается в средних и больших проектах.

Благодаря маскировке деталей программист избавляется от необходимости непосредственно общаться с каждой переменной и каждой функцией. Инкапсуляция позволяет разработчику класса реализовать взаимосвязанные функции и данные в виде законченной цельной конструкции. •

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

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

Уровень понимания автомобиля у всех этих категорий пользователей различен. Очевидно, что он зависит не от модели автомобиля, а от субъекта. Точно так же обстоит дело и с классами. Разработчик класса обязан знать свой класс во всех подробностях, но пользователям класса достаточно знания только тех аспектов, которые относятся непосредственно к управлению им. Если вы — создатель класса, то для вас важен класс как таковой, практически независимо от его дальнейшей судьбы. Если же вы являетесь потребителем класса, то для вас имеют значение не детали, а те его свойства, которые помогут вам в решении собственных задач. (Конструкторы автомобилей предусматривают тормоза, поскольку знают, что автомобилю иногда приходится останавливаться. Однако решать, когда жать на тормоз, приходится не им, а водителю).

Такое разделение полномочий, являющееся неотъемлемой стороной объектно-ориентированной философии, позволяет существенно сократить сложность проекта в целом.