Сабж. Что тут можно делать, имеется ввиду какие операции тут было бы правильно разместить, а какие нет?
Вопрос родился на почве следущей ситуации, есть интерфейс с двумя методами get_count и get_item. Типа коллекции. Элементы коллекции передаются например серез пайп(не суть, с того же файла считываются). То есть, при создании объекта предоставляющего этот интерфейс надо, в случаее пайпа, приконектиться к пайпу, получить данные заполнить коллекцию... Сейчас я это делаю на этапе создания объекта. Тоесть в конструкторе. Это нормально? Это не коверкает какои либо постулаты ООП? :) Или лучше разместить это сделать при первом вызове например get_count?
Здравствуйте, myaso, Вы писали:
M>Всем привет!
M>Сабж. Что тут можно делать, имеется ввиду какие операции тут было бы правильно разместить, а какие нет? M>Вопрос родился на почве следущей ситуации, есть интерфейс с двумя методами get_count и get_item. Типа коллекции. Элементы коллекции передаются например серез пайп(не суть, с того же файла считываются). То есть, при создании объекта предоставляющего этот интерфейс надо, в случаее пайпа, приконектиться к пайпу, получить данные заполнить коллекцию... Сейчас я это делаю на этапе создания объекта. Тоесть в конструкторе. Это нормально? Это не коверкает какои либо постулаты ООП? Или лучше разместить это сделать при первом вызове например get_count?
В конструкторе не совсем хорошо делать действия, если есть вероятность, что объект будет создан раньше, чем то, с помощью чего объект, например инициализируется (в данном случае пайп). Лучше это вынести за пределы конструктора в кокой-нибудь метод, чтобы контролировать эти действия, поскольку если вы захотите объявить объект (допустим сделать членом класса), то не остается другого способа, как объявить указатель, а потом когда это станет возможно выделить память под объект. А если вынести из конструктора, то не надо об этом заботиться, а вызвать метод в нужный момент.
Короче из всего сказанного, в конструкторе нужно выполнять только те дейтвия, которые не зависят от внешних факторов, условий и возможно не созданных еще объектов.
M>Заранее спасибо!
Здравствуйте, Larev, Вы писали:
L>В конструкторе не совсем хорошо делать действия, если есть вероятность, что объект будет создан раньше, чем то, с помощью чего объект, например инициализируется (в данном случае пайп). Лучше это вынести за пределы конструктора в кокой-нибудь метод, чтобы контролировать эти действия, поскольку если вы захотите объявить объект (допустим сделать членом класса), то не остается другого способа, как объявить указатель, а потом когда это станет возможно выделить память под объект. А если вынести из конструктора, то не надо об этом заботиться, а вызвать метод в нужный момент. L>Короче из всего сказанного, в конструкторе нужно выполнять только те дейтвия, которые не зависят от внешних факторов, условий и возможно не созданных еще объектов.
мг. хорошо. получается если я не хочу ломать интерфейс. то мне нужно вызывать это наполнение коллекции при перовом вызове какго либо метода этого интерфейса. Получается только так...
Изначально в интерфейсе я предусмотрел что-то типа метода FillCollection, но мне сказали что это сакс, мол это всё надо скрыть от юзера. И я как бы с этим согласен, поэтому убрал этот метод. Теперь получается что вызов из конструктора коряво, сделать как я описал выше тоже коряво... Откуда ж позвать его? :)
Я понимаю что идеальных ситуаций не бывает и всё сделать красиво не получиться. но....
Здравствуйте, kavlad, Вы писали:
K>Здравствуйте, GlebZ, Вы писали:
GZ>>В дельфе, я бы так не рискнул.
K>Зря
Аргументируй. Например, напиши подобную конструкцию.
Что более похоже на правду.
Так что можно и в Delphi, хотя я обычно стараюсь вынести подобную логику из конструктора. Явный вызов деструктора очень колебает, особенно когда пишешь на 3 языках одновременно. Начинаешь боятся того, что автоматизировано в других языках.