четверг, августа 30, 2007

Замечание по конструкторам

При инстанцировании классов нужно следовать одному из правил:
  • Свойства класса задаются через параметры конструктора.
  • Свойства класса задаются через установщики уже после вызова конструктора.
Иначе начинается путаница. Если в конструкторе что-то инициализируется, и использует при этом другие свойства класса, которые задаются установщиком, то есть риск, что эти свойства еще не установлены.

Первый способ удобнее, т.к. позволяет создать объект одной строкой.
Второй способ нагляднее и позволит определить последовательность инициализации свойств так, как удобно клиенту (объект, инстанцирующий наш класс).

Есть ли смысл делать установщики для свойств, которые инициализируются один раз в конструкторе? Наверное нет.

В общем, надо строго разделять свойства по частоте обращения к ним извне.

1 комментарий:

Racer комментирует...

Пример такой неоднозначности, которая требует жесткого разделения инициализации:

Конструктор объекта A создает объект B, которому передает ссылку на себя. При этом, объект B использует класс A и обращается к его свойствам, которые могут быть еще не инициализированы.

Соответственно, создание класса B лучше вынести в отдельный установщик.