powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Еще раз о Классах Delphi
18 сообщений из 18, страница 1 из 1
Еще раз о Классах Delphi
    #39758495
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, возник вопрос по классах, возможно покажется глупым и дурацким, не ругайте громко.

Допустим есть класс.
Код: pascal
1.
TUsers = class



есть поля класса

Код: pascal
1.
2.
3.
4.
5.
FID:Integer;
FLogin:string;
FID_parent:Integer;
....
и т. д


Есть проперти

Код: pascal
1.
2.
3.
4.
5.
 property ID:Integer read FID write setID;
 property Login:string read FLogin write setLogin;
 property ID_parent:string read FID_parent write setID_parent;
....
и т. д



Есть различные методы класса.

В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39758498
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaВ случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?
Без разницы.

Обычно делаю один супер-метод, который покрывает все необходимые поля, а потом прикручиваю к нему через overload со значениями по умолчанию, если не получается обойтись с помощью default (например, порядок/тип переменных неоднозначный).
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39758515
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua...или...
Пофиг. Это ж не капитальное строительство высотного здания, практически все и всегда переделать можно.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39758670
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой для себя рефакторинг, почитай по нему книжки. И делай как проще. А потом по мере вырисовывания/развития/изменения архитектуры будешь рефакторить. А там видно будет, что в итоге лучше применить на конкретном этапе развития продукта...
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39759189
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос нормальный, архитектурный.
В целом, это дело вкуса, хотя:
- больше 3-4 параметров в подпрограмме - не гут (рекомендация)
- куча перегруженных конструкторов может запутать, да и не всегда на все сочетания можно наклепать вариантов
- если поле допускает дефолтное значение, то логично сделать его свойством. С другой стороны, если значение должно присваиваться строго при создании, то либо конструктор, либо отдельный метод типа Init.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39759231
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если делаешь для себя или для внутреннего ограниченного использования, то можешь делать как угодно. Потом поправите, если что. Если код на сторону или на продажу, желательно, что бы он имел стабильное API. И лучше заранее максимально хорошо продумать.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39759277
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua...
В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload? Да, как уже сказали тут дело вкуса.
На мой вкус лучше в Create передавать минимальный обязательный набор свойств, обычно те, которые не могут меняться.
Когда много параметров и особенно с overload легко запутаться. Возможны несчастные случаи когда в зависимости от типа входного параметра может поменяться логика работы, например Integer можно без проблем передавать в Double, но при наличии нескольких overload может поменяться вызываемый метод и смысл передаваемого значения.
Код: pascal
1.
2.
3.
4.
5.
6.
constructor Create(Id: integer); overload;
constructor Create(Price: Double); overload;
...
X := TCoolObject.Create(Query.FieldByName('Id').Value); 
// Value какого типа? Integer, Double, Variant, ... 
// Какая версия конструктора будет вызвана?
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39759303
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо. А ля как ты говоришь в Create передавать минимальный обязательный набор свойств. После вызвать Init... религии не запрещают.
imho буде лучше, чем CreateById и CreateByPrice
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39759431
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatorroschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо... Собственно, пример на это толсто намекает
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39770189
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите еще ответ на такой дурацкий вопрос, с всего прочитанного в нете несевсем для меня понятно.

Если есть метод которому на вход надо передать параметр .
get_users (id_user);

как правильно делать.

1. можна сразу в метод передавать парамерт
Код: pascal
1.
2.
3.
4.
var
TUsers:users;
 begin
users.get_users (1);



2. или
Код: pascal
1.
2.
3.
4.
5.
var
TUsers:users;
 begin
users.id_user=1 
users.get_users;


А уже в реализации метода get_users id_user брать из поля класса, значение которого я передал перед вызовом метода?
Заранее спасибо.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39770197
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaА уже в реализации метода get_users id_user брать из поля класса, значение которого я передал перед вызовом метода?
Зависит от...

Например, если ожидается более одного вызова, то можно и второй способ использовать.
А так особой роли не играет.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39770198
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совершенно похеру.
ты сам творец.
тебе решать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39770201
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanНапример, если ожидается более одного вызова
Имею в виду: если ожидается более одного вызова метода или методов, которым понадобится единожды установленный параметр.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39770243
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметры - это дополнительная информация для метода, которую он не знает.
Если 1 - это параметр id_user, то передавать его не нужно.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39771879
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийсовершенно похеру.
ты сам творец.
тебе решать.

Обычно, "творцы" которым "похеру", не приложения пишут, а выгребные ямы наполняют.

Лучше все-таки исходить из того, что проект будут сопровождать и развивать в будущем, возможно даже что не вы. Поэтому стоит с самого начала использовать стандартные подходы и наименования. Например: префиксы Get и Set прочно ассоциируются с геттерами и сеттерами. Первые возвращают значения, вторые принимают. Если наоборот, то это вызывает когнитивный диссонанс...
Я бы сделал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
TUsers = class(...)
private
  FId: Integer;
  procedure SetId(const Value: Integer);
proteted
  procedure Change; 
public
  property Id: Integer read FId write SetId;

...
procedure TUsers.SetId(const Value: Integer);
begin
  if FId <> Value then
  begin
    FId := Value;
    Change;
  end;
end;

...

Users.Id := 1;
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39771905
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roschinspb,
Именно! Иначе - голимые извраты, писанные извращенцами.
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39772274
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.02.2019 17:45, roschinspb пишет:
> Лучше все-таки исходить из того, что проект будут сопровождать и развивать в будущем, возможно даже что не вы.
> Поэтому стоит с самого начала использовать стандартные подходы и наименования. Например:
> префиксы Get и Set прочно ассоциируются с геттерами и сеттерами. Первые возвращают значения, вторые принимают.
> Я бы сделал так:

не чейтатетель.
но советователь.
ога.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Еще раз о Классах Delphi
    #39772309
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийне чейтатетель.
но советователь.
ога.
Да ладно.
Представь, параметрх[ы] зашиты жестко, а алгоритм вычисления поменялся поменялся... Нафига класс менять?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Еще раз о Классах Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]