Инициализация объекта
От: volder2001  
Дата: 27.04.06 04:47
Оценка:
Тут у меня спор возник.
есть форма — читай класс.
Есть конструктор этого класса.
Понятно что в конструкторе инициализируются поля класса и непосрелсвенно создается объект.
Есть ли что-то
криминальное в том, что в конструкторе так же будут заполняться контролы (но все культурно,
посредсвом вызова приват методов этого класса)?
Или лучше создать паблик метод и вызывать его из вне.
Т.е. из объекта создающего этот объект?
Re: Инициализация объекта
От: alex_ez Россия alex.jife.ru
Дата: 27.04.06 04:52
Оценка:
Здравствуйте, volder2001, Вы писали:

V>Тут у меня спор возник.

V>есть форма — читай класс.
V>Есть конструктор этого класса.
V>Понятно что в конструкторе инициализируются поля класса и непосрелсвенно создается объект.
V>Есть ли что-то
V>криминальное в том, что в конструкторе так же будут заполняться контролы (но все культурно,
V>посредсвом вызова приват методов этого класса)?
V>Или лучше создать паблик метод и вызывать его из вне.
V>Т.е. из объекта создающего этот объект?

class from {
private:
void a, b, c, ...;

public:
form ( a = ?, b = ?, c = ?, ... ) {
this ->setParam1();
this ->setParam2();
this ->setParam3();
...
};

protected:
void setParam1( param ) {
// тут же проверка на валидность параметра
[this ->]a = param;
};

...
}


внимание вопрос: ПОЧЕМУ НЕТ, ЕСЛИ ЯЗЫК НА ТО И РАСЧИТАН?
silence in quite
Re[2]: Инициализация объекта
От: volder2001  
Дата: 27.04.06 05:16
Оценка:
Здравствуйте, alex_ez, Вы писали:

_>class from {

_> private:
_> void a, b, c, ...;

_> public:

_> form ( a = ?, b = ?, c = ?, ... ) {
_> this ->setParam1();
_> this ->setParam2();
_> this ->setParam3();
_> ...
_> };

_> protected:

_> void setParam1( param ) {
_> // тут же проверка на валидность параметра
_> [this ->]a = param;
_> };

_> ...

_>}


_>внимание вопрос: ПОЧЕМУ НЕТ, ЕСЛИ ЯЗЫК НА ТО И РАСЧИТАН?


Что именно нет?
Re[3]: Инициализация объекта
От: alex_ez Россия alex.jife.ru
Дата: 27.04.06 05:19
Оценка:
Здравствуйте, volder2001, Вы писали:

_>>внимание вопрос: ПОЧЕМУ НЕТ, ЕСЛИ ЯЗЫК НА ТО И РАСЧИТАН?


V>Что именно нет?


в том то и дело, что ДА!
Нужно использовать именно так, хотя иногда это не требуется, или занимает много времени и в любом случе переопределяется после создания. надо смотреть по ситуации, но это грамотный подход к созданию инкапсулируемых обьектов.

p.s. давно не писал на с++, синтаксиса точно не помню.
silence in quite
Re[4]: Инициализация объекта
От: volder2001  
Дата: 27.04.06 05:22
Оценка:
Здравствуйте, alex_ez, Вы писали:

_>в том то и дело, что ДА!

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

_>p.s. давно не писал на с++, синтаксиса точно не помню.


Простите я не понял ответа
Так как все таки по вашему мнению лучше инициализировать объект?
Re[5]: Инициализация объекта
От: alex_ez Россия alex.jife.ru
Дата: 27.04.06 05:27
Оценка:
Здравствуйте, volder2001, Вы писали:

V>Простите я не понял ответа

V>Так как все таки по вашему мнению лучше инициализировать объект?

в зависимости от template.

во первых определитесь с языком.
во вторых — все зависит от типа предполагаемого обьекта.
в третьих — не так уж и много вариантов, как удобнее в данном месте — так и делайте.
в че...
silence in quite
Re[6]: Инициализация объекта
От: volder2001  
Дата: 27.04.06 05:42
Оценка:
Здравствуйте, alex_ez, Вы писали:

_>в зависимости от template.


_>во первых определитесь с языком.

Язык C#
_>во вторых — все зависит от типа предполагаемого обьекта.
Объект достаточно "тяжелая" форма, со сложной бизнес логикой
_>в третьих — не так уж и много вариантов, как удобнее в данном месте — так и делайте.
И все таки. Есть что либо криминиальное заполнять контролы на форме значениями при инициализации (т.е. в конструкторе) объекта? Или лучше (как один из вариантов), создать паблик метод и вызвать его из вне уже после того как объект создан.
Re[7]: Инициализация объекта
От: alex_ez Россия alex.jife.ru
Дата: 27.04.06 05:49
Оценка: :)
Здравствуйте, volder2001, Вы писали:

V>И все таки. Есть что либо криминиальное заполнять контролы на форме значениями при инициализации (т.е. в конструкторе) объекта? Или лучше (как один из вариантов), создать паблик метод и вызвать его из вне уже после того как объект создан.


буквально вчера обьяснял своему подчиненному программисту, что есть обьект...
с c sharp дела не имел, но ООП это вещь универсальная.

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

при создании обьект должен быть создан на столько, чтобы изза него при вызове ЛЮБОГО метода не вылетело исключение на ошибку...

короче, ничего криминального не будет в том, что вы определяете значения не в самом конструкторе, если только изза этого у вас не возникают проблемы со стабильностью программы в целом.

а внутри или снаружи определять начальные значения свойств — это дело лично программиста и только его.
silence in quite
Re[8]: Инициализация объекта
От: volder2001  
Дата: 27.04.06 06:14
Оценка:
Здравствуйте, alex_ez, Вы писали:

_>Здравствуйте, volder2001, Вы писали:


V>>И все таки. Есть что либо криминиальное заполнять контролы на форме значениями при инициализации (т.е. в конструкторе) объекта? Или лучше (как один из вариантов), создать паблик метод и вызвать его из вне уже после того как объект создан.


_>буквально вчера обьяснял своему подчиненному программисту, что есть обьект...

_>с c sharp дела не имел, но ООП это вещь универсальная.
Согласен.

_>если вы хотите стабильный класс — вы должны сделать приватные свойства обьекта, и публичные (протектед) методы для чтения/записи данных в эти свойства.

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

Непонятно


_>при создании обьект должен быть создан на столько, чтобы изза него при вызове ЛЮБОГО метода не вылетело исключение на ошибку...

Согласен

_>короче, ничего криминального не будет в том, что вы определяете значения не в самом конструкторе, если только изза этого у вас не возникают проблемы со стабильностью программы в целом.

_>а внутри или снаружи определять начальные значения свойств — это дело лично программиста и только его.
А вот тут я поспорю.
Предположим есть класс:


public class Class1
{
private int _x, _y, _z;
private TextBox1 _txt1, _txt2, _txt3;

public Class1(int x, int y, int z)
{
//инициализируем поля класса
 _x = x;
 _y = y;
 _z = z;
 txt1 = x;
 txt2 = y;
 txt3 = z;

}
}

Что в этом плохого?
Re[9]: Инициализация объекта
От: alex_ez Россия alex.jife.ru
Дата: 27.04.06 07:20
Оценка:
Здравствуйте, volder2001, Вы писали:

_>>короче, ничего криминального не будет в том, что вы определяете значения не в самом конструкторе, если только изза этого у вас не возникают проблемы со стабильностью программы в целом.

_>>а внутри или снаружи определять начальные значения свойств — это дело лично программиста и только его.
V>А вот тут я поспорю.
V>Предположим есть класс:

V>
V>public class Class1
V>{
V>private int _x, _y, _z;
V>private TextBox1 _txt1, _txt2, _txt3;

V>public Class1(int x, int y, int z)
V>{
V>//инициализируем поля класса
V> _x = x;
V> _y = y;
V> _z = z;
V> txt1 = x;
V> txt2 = y;
V> txt3 = z;

V>}
V>}

V>Что в этом плохого?
V>


плохо то, что если у вас будет не просто присвоение, а нечто больше, вам придется это нечто больше писать везде, где вы хотите присвоить свойству другое значение.

например, либо я пишу метод SetX( _x ) { if ( ... ) return; else this ->x = _x; };
либо я пишу везде этот if ( ... ) ... ... иногда забываю написать, иногда путаюсь...
silence in quite
Re: Инициализация объекта
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.04.06 16:23
Оценка: :)
Здравствуйте, volder2001, Вы писали:

V>Тут у меня спор возник.

V>есть форма — читай класс.
V>Есть конструктор этого класса.
V>Понятно что в конструкторе инициализируются поля класса и непосрелсвенно создается объект.
V>Есть ли что-то
V>криминальное в том, что в конструкторе так же будут заполняться контролы (но все культурно,
V>посредсвом вызова приват методов этого класса)?
V>Или лучше создать паблик метод и вызывать его из вне.
V>Т.е. из объекта создающего этот объект?

Ничего не понимаю. Какая такая форма? Какие такие контролы? И при чем тут философия?
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re: Инициализация объекта
От: ddaa Россия  
Дата: 28.04.06 11:08
Оценка: 2 (2) +1
Здравствуйте, volder2001, Вы писали:

V>Тут у меня спор возник.

V>есть форма — читай класс.
V>Есть конструктор этого класса.
V>Понятно что в конструкторе инициализируются поля класса и непосрелсвенно создается объект.
V>Есть ли что-то
V>криминальное в том, что в конструкторе так же будут заполняться контролы (но все культурно,
V>посредсвом вызова приват методов этого класса)?
V>Или лучше создать паблик метод и вызывать его из вне.
V>Т.е. из объекта создающего этот объект?

Многошаговая инициализация всегда зло. Если вы создаете объект, которым будут пользоваться другие люди, слишком велика вероятность, что они забудут вызвать дополнительные методы инициализации. Нужно делать полную инициализацию в конструкторе.
IMHO, конечно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.