|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.07.2014, 14:32 | #1 |
Пользователь
Регистрация: 26.02.2013
Сообщений: 66
|
Create с параметрами. Вопрос для эстетов
В объекте несколько переменных, инициализируются при создании значениями из некого диалога. Что правильнее с точки зрения ООП, передавать все эти значения как параметры или внутри Create брать их прямо из того диалога?
|
18.07.2014, 14:40 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Не знаю, как там с точки зрения ООП, а я бы инициализировал их в конструкторе, а вызов диалога опеределил бы в отдельный метод. Хочет проггер вызывать - пусть после создания вызывает.
Или в конструктор внес параметр со значением по умолчанию, установка которого вызывает диалог.
I'm learning to live...
|
18.07.2014, 15:23 | #3 |
Пользователь
Регистрация: 26.02.2013
Сообщений: 66
|
А если этот диалог раньше уже вызывался (грубо говоря, это Options) и значения, что нужны, можно брать из его формы? Или важнее, что конструктор без параметров красивше?
|
18.07.2014, 15:42 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Важна не красота кода а его надежность.
Вызывался заранее? Отлично - присваивай свойствам обьекта после его создания нужные значения.
I'm learning to live...
|
18.07.2014, 16:00 | #5 |
Пользователь
Регистрация: 26.02.2013
Сообщений: 66
|
До создания присвоить значений явно не удастся
Я и прошу, чтобы объяснили, чем код типа: constructor Create; begin a1:=dialog.d1; a2:=dialog.d2; end; ..................... Create; надёжней, чем: constructor Create(d1, d2); begin a1:=d1; a2:=d2; end; ..................... Create(dialog.d1, dialog.d2); ? |
18.07.2014, 16:25 | #6 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Лично я что-то сомневаюсь, что код типа
надёжен. Новый экземпляр Вашего объекта должен знать, что dialog есть ни что иное как экземпляр именно того диалога из которого нужно брать требуемые значения, а не что-то другое. Благодаря гибкости Delphi это может прокатить(с определёнными оговорками). Однако в целом это далеко не самый лучший вариант. Это и это идеи уже более подходящие. Однако, если количество параметров будет достаточно большим, оба эти варианта также себя не оправдают. Здесь ещё нужно смотреть "количество данных", которое обязательно необходимо для инициализации объекта. Опишите задачу подробнее. |
18.07.2014, 16:33 | #7 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Другое дело если этот класс будет сторонним, у программера на него не будет исходников, и он случайно захочет вместо dialog получать данные из другого источника и жестоко обломится, ибо dialog вызывается непосредственно в конструкторе. Цитата:
Код:
I'm learning to live...
|
||
18.07.2014, 16:48 | #8 |
Пользователь
Регистрация: 26.02.2013
Сообщений: 66
|
И в каждом месте, где нужно создать экземпляр класса тянуть за ним хвост с присваиваниями? "Это же неестетично." Да уж, тут "количество данных" имеет значение. А кроме того, как же инкапсуляция?
|
18.07.2014, 17:06 | #9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
Делай как тебе удобно, если задача того позволяет.
I'm learning to live...
|
||
18.07.2014, 17:13 | #10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
лучше в параметры, ибо тогда при смене конструктора ты ничего не забудешь поменять потом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оператор Create | salerr | SQL, базы данных | 4 | 09.04.2014 20:02 |
Вопрос для людей, кто реально «шарит» в сфере VPN. Очень важно для меня. | Sorus_Nomad | Безопасность, Шифрование | 5 | 27.10.2011 11:22 |
программа с типизированными параметрами-значениями и параметрами-переменными | Kira09 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 20.12.2010 22:23 |
Использование CREATE TABLE для Access | at0104 | БД в Delphi | 0 | 10.09.2009 11:16 |