Аргументы конструктора объекта ООП - PullRequest
4 голосов
/ 17 августа 2011

Когда я должен передавать аргументы конструктору объекта?Какие критерии вы используете для передачи их конструктору вместо аргументов в методах объекта?

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

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

Неизменяемые свойства, назначаемые при конструировании, позволяют избежать различных условий гонки (особенно в многопоточных средах) и помогают гарантировать, что объект всегдапоследовательный, исключающий возможность многих видов ошибок.Принудительно определяя свойства при конструировании, вы избегаете обширного кода проверки ошибок.Как только весь объект может быть неизменным, появляются возможности для совместного использования эквивалентных объектов, что повышает производительность памяти.

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

1 голос
/ 17 августа 2011

Когда мой объект очень прост (1 или два атрибута), я могу предоставить конструктору эти аргументы.

Но в большинстве случаев конструктор по умолчанию и мои атрибуты устанавливаются с помощью сеттеров.

0 голосов
/ 17 августа 2011

По сути, вы хотите инициализировать все основные строительные блоки объекта в конструкторе. Но иногда объект содержит много элементов, что делает список аргументов для конструктора слишком длинным. Я следую этому принципу: если список аргументов для конструктора более 5 элементов, инициализация нового объекта делится на аргументы конструктора и методы set.

0 голосов
/ 17 августа 2011

Обычно вы передаете аргументы конструктору класса при создании экземпляра класса с ключевым словом new (это может отличаться в зависимости от языка).

Например (здесь выбирается стиль C / Java / C #)

MyClass class = new MyClass(arg1, arg2, arg3);

Перечитывая ваш вопрос, я склонен использовать аргументы конструктора для абсолютно необходимых ресурсов.Таким образом, вы знаете, что для вашего объекта должны быть доступны определенные свойства или ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...