Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2014, 14:32   #1
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию Create с параметрами. Вопрос для эстетов

В объекте несколько переменных, инициализируются при создании значениями из некого диалога. Что правильнее с точки зрения ООП, передавать все эти значения как параметры или внутри Create брать их прямо из того диалога?
Дmmm вне форума Ответить с цитированием
Старый 18.07.2014, 14:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю, как там с точки зрения ООП, а я бы инициализировал их в конструкторе, а вызов диалога опеределил бы в отдельный метод. Хочет проггер вызывать - пусть после создания вызывает.
Или в конструктор внес параметр со значением по умолчанию, установка которого вызывает диалог.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2014, 15:23   #3
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

А если этот диалог раньше уже вызывался (грубо говоря, это Options) и значения, что нужны, можно брать из его формы? Или важнее, что конструктор без параметров красивше?
Дmmm вне форума Ответить с цитированием
Старый 18.07.2014, 15:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Важна не красота кода а его надежность.
Вызывался заранее? Отлично - присваивай свойствам обьекта после его создания нужные значения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2014, 16:00   #5
Дmmm
Пользователь
 
Регистрация: 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);
?
Дmmm вне форума Ответить с цитированием
Старый 18.07.2014, 16:25   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Лично я что-то сомневаюсь, что код типа
Цитата:
Сообщение от Дmmm Посмотреть сообщение
Код:
constructor Create;
begin
a1:=dialog.d1;
a2:=dialog.d2;
end;
надёжен.
Новый экземпляр Вашего объекта должен знать, что dialog есть ни что иное как экземпляр именно того диалога из которого нужно брать требуемые значения, а не что-то другое.
Благодаря гибкости Delphi это может прокатить(с определёнными оговорками). Однако в целом это далеко не самый лучший вариант.
Это
Цитата:
Сообщение от Дmmm Посмотреть сообщение
Код:
constructor Create(d1, d2);
и это
Цитата:
Сообщение от Дmmm Посмотреть сообщение
Код:
Create(dialog.d1, dialog.d2);
идеи уже более подходящие. Однако, если количество параметров будет достаточно большим, оба эти варианта также себя не оправдают.
Здесь ещё нужно смотреть "количество данных", которое обязательно необходимо для инициализации объекта.
Опишите задачу подробнее.
Streletz вне форума Ответить с цитированием
Старый 18.07.2014, 16:33   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надёжней, чем:
Ничем, если этот конструктор находится в том же пространстве что и dialog.
Другое дело если этот класс будет сторонним, у программера на него не будет исходников, и он случайно захочет вместо dialog получать данные из другого источника и жестоко обломится, ибо dialog вызывается непосредственно в конструкторе.
Цитата:
До создания присвоить значений явно не удастся
Ты не понял.
Код:
c:=MyClass.create;
c.a1:=dialog.d1;
c.a2:=dialog.d2;
...
Вот что я имел ввиду. Такой вариант наиболее масштабируем, ибо сам класс не завязан с dialog жестко, и может получить свои данные в любое время в любом месте.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2014, 16:48   #8
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

И в каждом месте, где нужно создать экземпляр класса тянуть за ним хвост с присваиваниями? "Это же неестетично." Да уж, тут "количество данных" имеет значение. А кроме того, как же инкапсуляция?
Дmmm вне форума Ответить с цитированием
Старый 18.07.2014, 17:06   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А кроме того, как же инкапсуляция?
А зачем она тут нужна?
Цитата:
в каждом месте, где нужно создать экземпляр класса тянуть за ним хвост с присваиваниями?
А что тут такого? Тянуть кучу параметров в конструктор точно так же может показаться неэстетичным.
Делай как тебе удобно, если задача того позволяет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2014, 17:13   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем она тут нужна?

А что тут такого? Тянуть кучу параметров в конструктор точно так же может показаться неэстетичным.
Делай как тебе удобно, если задача того позволяет.
лучше в параметры, ибо тогда при смене конструктора ты ничего не забудешь поменять потом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оператор 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