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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2015, 20:34   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
Радость Геттеры\Сеттеры

Всем привет!

Зачем они нужны, ведь можно читать\писать напрямую в переменную.
ДралсяСошибками вне форума Ответить с цитированием
Старый 25.04.2015, 20:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если понадобится не просто читать\писать а реагировать кодом на доступ к переменной? Ты ведь не можешь описать событие изменения переменки типа integer, не так ли? А Сеттер, коль скоро переменка становится свойством это позволяет. Т.е. Реагировать, контролировать, мониторить все присвоения и считывания значения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.04.2015, 21:10   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Понял, то есть, если мне не нужно контролировать переменные, то я могу их не использовать)))
ДралсяСошибками вне форума Ответить с цитированием
Старый 25.04.2015, 23:40   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Прочитайте уже про принципы ООП.
Человек_Борща вне форума Ответить с цитированием
Старый 25.04.2015, 23:51   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Лень, да и наверняка там много букв, а тут один ответ Stilet'а, сразу расставил все точки над "и")))
ДралсяСошибками вне форума Ответить с цитированием
Старый 26.04.2015, 01:29   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,875
По умолчанию

Цитата:
Сообщение от ДралсяСошибками Посмотреть сообщение
Понял, то есть, если мне не нужно контролировать переменные, то я могу их не использовать)))
Геттеры и сеттеры предназначены для работы не с переменными, а со "свойствами". Почувствуй разницу.
northener на форуме Ответить с цитированием
Старый 26.04.2015, 08:18   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если мне не нужно контролировать переменные, то я могу их не использовать)
Геттеры и сеттеры это по факту функции и процедуры, которые вызываются когда ты присваиваешь или считываешь что-то (как правильно акцентировал northener) из свойства объекта. Само свойство состоит из трех частей:
1) Переменка (поле класса), где будет храниться значение. Она кстати не обязательна
2) Геттер - функция, которая вызывается если это поле класса участвует в выражении
3) Сеттер - процедура, которая вызывается если этому полю что-то присваивают.
Вот и получается что закулисно ты не присваиваешь а вызываешь процедуру.

А про ООП почитать придется, ибо обычные переменные линейной программы врядли удастся оснастить обертками.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2015, 15:47   #8
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Меня просто вот такой вариант ввёл в заблуждение:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Str = class(TObject)
  private
    FS: String;
    function GetS: String;
    procedure SetS(const Value: String);
  public
    property S: String read GetS {FS} write SetS {FS};
  end;

  Str1 = class(TObject)
  public
    S: String;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ Str }

function Str.GetS: String;
begin
  Result := FS;
end;

procedure Str.SetS(const Value: String);
begin
  FS := Value;
end;

end.
А про дополнительные действия при присвоении, я сразу и не подумал, теперь всё стало ясно)))
ДралсяСошибками вне форума Ответить с цитированием
Старый 26.04.2015, 15:58   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Геттеры и сеттеры предназначены для работы не с переменными, а со "свойствами". Почувствуй разницу.
Запросто и с переменными. Особенно для доп. контроля значения, и других проверок. Своего рода хак для 1-2 курса, когда ООП ещё низзя.

Цитата:
Лень, да и наверняка там много букв, а тут один ответ Stilet'а, сразу расставил все точки над "и")))
Ну тогда ты очень печальный программист. Виталий всего в двух словах упомянул всего 1 принцип ООП, да и то сути не раскрыл.
Человек_Борща вне форума Ответить с цитированием
Старый 26.04.2015, 16:07   #10
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Я не программист и кодю по мере надобности)))
ДралсяСошибками вне форума Ответить с цитированием
Ответ


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