Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > ООП


Автор: koder 27.12.2005, 19:38
свойства класса.
открытые переменные - публичные поля.
Правила применения свойств и открытых переменных?

Автор: Snowy 27.12.2005, 20:42
А в чем вопрос?

Автор: koder 27.12.2005, 21:35
Когда применяются открытые поля, а когда закрытые?
Когда не требуется проверка открытых переменных?
В книжке этого не написано! Хочу узнать от вас? smile

Автор: Snowy 27.12.2005, 21:49
Что подразумевается под открытыми и закрытими?
Применение private, protected, public и published?
В общем случае:
Закрытые поля применяются для внутренней реализации внутри класса.
Открытые поля применяются для работы с объектом из вне.
Т.е. то, что доступно всем. А приватные поля - для внутренней реализации и хранения данных.

Автор: DeadSoul 27.12.2005, 22:19
Цитата(koder @ 27.12.2005, 21:35)
Когда применяются открытые поля,

поле is_equal член класса, т.е переменная, а не функция?
Если ДА, то такое делать не рекомендуют.

Причины: допустим у тебя есть класс с членом mass(целое число). Если данные член public, то очень непросто найти все места где изменяется данная переменная. А это может понадобится: например, после полугодовой работы программы выяснилось, что масса не может быть более 1000. Искать все места где встречается обращения к массе? А если в дальнейшем неаккуратный программист не проверит новую массу перед присваиванием?

P.S. Надеюсь понятно сформулировал?

Автор: koder 27.12.2005, 22:33
Цитата(Snowy @ 27.12.2005, 21:49)
Что подразумевается под открытыми и закрытими?
Применение private, protected, public и published?
В общем случае:
Закрытые поля применяются для внутренней реализации внутри класса.
Открытые поля применяются для работы с объектом из вне.
Т.е. то, что доступно всем. А приватные поля - для внутренней реализации и хранения данных.

Зачем они применяются, мне понятно, а в каких случаях не требуется делать проверку на применение открытых переменных..?
Открытые переменные, это переменные, в public описанные...

Автор: Snowy 28.12.2005, 00:32
В любых. Работа ведется только с public и published свойствами.
И проверять ничего не нужно.
Работа с приватными полями ведется толькопри реализации класса.
Для работы с классом используются только открытые свойства.
Приватные просто не видны, и соответственно компилятор просто не даст с ними работать.

Автор: Zero 28.12.2005, 00:39
Цитата(koder @ 27.12.2005, 22:35)
Когда применяются открытые поля, а когда закрытые?

В основном, с точки зрения хорошего стиля программирования, закрытыми переменными делают именно переменные (то что после Var), а открытыми компоненты функции и процедуры, и они далее называются методами.
Но это всё не строго...

Автор: koder 28.12.2005, 07:47
Когда не следует делать проверку в открытых переменных?
1) Когда тип открытых переменных - Variant
2) Когда передаваемое знаение того же типа, и компилятор проверяет входит ли значение в тип открытых переменных.
3)?
4)?
5)?

Автор: Zero 28.12.2005, 10:04
Цитата(koder @ 28.12.2005, 08:47)
Когда не следует делать проверку в открытых переменных?

Проверку чего делать то???

Автор: koder 28.12.2005, 10:44
На правильность данных.

Автор: Демо 28.12.2005, 11:02
Цитата(koder @ 28.12.2005, 11:44)
На правильность данных.


Что означает "правильность данных".

Если целое поле объекта содержит число 10, это правиьное число?

Автор: Zero 28.12.2005, 11:20
Цитата(koder @ 28.12.2005, 11:44)
На правильность данных.

Она не как не связана, с открытыми и закрытыми переменными.
Там где считаешь, что пользователь может ввести неправильные данные, там и ставь проверки. Но при этом имей ввиду, что если ты обращаешся к переменным не из компонент-функции, то переменные должны входить в паблик (хотя это плохой стиль программирования)...
Лучше всего, сделать копонент-функцию, в паблике (открытой), а переменные в привате (закрытыми) и внутри этой КП делать проверки, а потом только использовать имя переменной которая типа "твой класс" и как метод вызвать эту комп.функцию...

Автор: Демо 28.12.2005, 11:21
Цитата(koder @ 28.12.2005, 08:47)
2) Когда передаваемое знаение того же типа, и компилятор проверяет входит ли значение в тип открытых переменных.


Не существует понятия "открытые переменные".
Добавлено @ 11:23
Цитата(Zero @ 28.12.2005, 12:20)
(хотя это плохой стиль программирования)...


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

Автор: Zero 28.12.2005, 13:47
Цитата
Не существует понятия "открытые переменные".

Открытые переменные ─ это переменные которые доступны, не только в нутри описания компонент-функции, но а также и других местах. Пишутся после ключевого слова public:

Автор: Guedda 28.12.2005, 14:21
Закрытые переменные - это переменные, которые доступны только внутри описания компонент-функции. Пишутся после слова private:

Автор: Демо 28.12.2005, 14:36
Цитата(Zero @ 28.12.2005, 14:47)
Открытые переменные ─ это переменные которые доступны, не только в нутри описания компонент-функции, но а также и других местах. Пишутся после ключевого слова public:


Вряд ли;)

В секции private находятся поля и методы класса, доступные только внутри модуля, в котором объявлен класс.

В секции protect находятся поля и методы класса, доступные всем классам-наследникам в других модулях.

В секции public находятся поля и методы класса, доступные во всех модулях.

В секции published находятся поля и методы класса, доступные во всех модулях и для редактирования в режиме Design-Time в оболочке Delphi.
Добавлено @ 14:37
Цитата(Zero @ 28.12.2005, 14:47)
Открытые переменные


Цитата(Guedda @ 28.12.2005, 15:21)
Закрытые переменные


Не могли бы вы привести английский аналог этих терминов, чтобы можно было найти их в справке Delphi?

Автор: Guedda 28.12.2005, 14:40
private - с английского означает частный, скрытый

Автор: Zero 28.12.2005, 16:28
Цитата
Вряд ли;)

Я сказал, своими словами, то что ты потом написал, из учебника или т.п.
Цитата
Добавлено @ 15:37
Цитата (Zero @ 28.12.2005, 14:47)
Открытые переменные

Цитата (Guedda @ 28.12.2005, 15:21)
Закрытые переменные

Не могли бы вы привести английский аналог этих терминов, чтобы можно было найти их в справке Delphi?

Ты их сам уже привёл:
Цитата
public


Цитата
private


Автор: koder 30.12.2005, 18:43
Демо прав нет понятия открытые переменные, нету open variables в природе..

Автор: Guedda 30.12.2005, 22:28
Ну тогда ответьте на вопрос:
Можно ли из другого юнита вытащить переменную, которую организовали в секции private в другом модуле?

Как это действо назвать?

Автор: koder 30.12.2005, 22:31
Цитата(Guedda @ 30.12.2005, 22:28)
Ну тогда ответьте на вопрос:
Можно ли из другого юнита вытащить переменную, которую организовали в секции private в другом модуле?

Как это действо назвать?

Можно только через свойства..Действо называется применения свойств.

Автор: Guedda 30.12.2005, 22:38
Интересно... Новые горизонты открыты...
Если я в модуле Unit1.pas напишу что-то типа:
Код

TForm1 = class(TForm)
private
  i : Integer;
...
var
  Form1 : TForm1;

Потом в модуле Unit2.pas сделаю:
Код

... 
uses
  Unit1;
...

var
  Uni : Integer;
begin
  Uni := Form1.i; 
end;

то все будет работать? Что за нонсенс...
Дай, пожалуйста вразумительный ответ...

Автор: Демо 31.12.2005, 15:39
Цитата(Guedda @ 30.12.2005, 23:38)
то все будет работать? Что за нонсенс...
Дай, пожалуйста вразумительный ответ...



Нет, не будет. Потому что поле i скрыто.
Но будет вот так:

Код

  TForm1 = class(TForm)    
  private    
     i : Integer;    
  public
     property Counter: Integer read i write i;
  ...    
var    
  Form1 : TForm1;


Код
Uni := Form1.Counter; 


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

Автор: koder 31.12.2005, 16:03
Цитата(Guedda @ 30.12.2005, 22:38)
Интересно... Новые горизонты открыты...


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

Автор: Guedda 31.12.2005, 16:30
Ну ничего. Ладно. smile
Цитата

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

А это ли не означает, что они закрытые?
Если у тебя в какой либо дом нет прямого доступа, то дом закрыт! smile
Так и в этом вопросе. Чисто по человечески если рассудить...

Автор: Демо 31.12.2005, 17:42
Цитата(Guedda @ 31.12.2005, 17:30)
А это ли не означает, что они закрытые?
Если у тебя в какой либо дом нет прямого доступа, то дом закрыт! 
Так и в этом вопросе. Чисто по человечески если рассудить...


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

В Delphi существует понятие "открытый массив параметров", что, естественно, никаким образом не связано с нашей темой.

Понятия "открытых и закрытых" переменных в Delphi не существует. Строгость языка не допускает расширительного толкования, как в разговорной речи. Поэтому для того, чтобы тебя поняли, необходимо использовать соответствующие термины, как то - public-поле, private-поле, либо, соответственно - общее поле и частное поле класса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)