| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > ООП |
| Автор: koder 27.12.2005, 19:38 |
| свойства класса. открытые переменные - публичные поля. Правила применения свойств и открытых переменных? |
| Автор: Snowy 27.12.2005, 20:42 |
| А в чем вопрос? |
| Автор: koder 27.12.2005, 21:35 |
| Когда применяются открытые поля, а когда закрытые? Когда не требуется проверка открытых переменных? В книжке этого не написано! Хочу узнать от вас? |
| Автор: Snowy 27.12.2005, 21:49 |
| Что подразумевается под открытыми и закрытими? Применение private, protected, public и published? В общем случае: Закрытые поля применяются для внутренней реализации внутри класса. Открытые поля применяются для работы с объектом из вне. Т.е. то, что доступно всем. А приватные поля - для внутренней реализации и хранения данных. |
| Автор: DeadSoul 27.12.2005, 22:19 | ||
поле is_equal член класса, т.е переменная, а не функция? Если ДА, то такое делать не рекомендуют. Причины: допустим у тебя есть класс с членом mass(целое число). Если данные член public, то очень непросто найти все места где изменяется данная переменная. А это может понадобится: например, после полугодовой работы программы выяснилось, что масса не может быть более 1000. Искать все места где встречается обращения к массе? А если в дальнейшем неаккуратный программист не проверит новую массу перед присваиванием? P.S. Надеюсь понятно сформулировал? |
| Автор: koder 27.12.2005, 22:33 | ||
Зачем они применяются, мне понятно, а в каких случаях не требуется делать проверку на применение открытых переменных..? Открытые переменные, это переменные, в public описанные... |
| Автор: Snowy 28.12.2005, 00:32 |
| В любых. Работа ведется только с public и published свойствами. И проверять ничего не нужно. Работа с приватными полями ведется толькопри реализации класса. Для работы с классом используются только открытые свойства. Приватные просто не видны, и соответственно компилятор просто не даст с ними работать. |
| Автор: Zero 28.12.2005, 00:39 | ||
В основном, с точки зрения хорошего стиля программирования, закрытыми переменными делают именно переменные (то что после Var), а открытыми компоненты функции и процедуры, и они далее называются методами. Но это всё не строго... |
| Автор: koder 28.12.2005, 07:47 |
| Когда не следует делать проверку в открытых переменных? 1) Когда тип открытых переменных - Variant 2) Когда передаваемое знаение того же типа, и компилятор проверяет входит ли значение в тип открытых переменных. 3)? 4)? 5)? |
| Автор: Zero 28.12.2005, 10:04 | ||
Проверку чего делать то??? |
| Автор: koder 28.12.2005, 10:44 |
| На правильность данных. |
| Автор: Демо 28.12.2005, 11:02 | ||
Что означает "правильность данных". Если целое поле объекта содержит число 10, это правиьное число? |
| Автор: Zero 28.12.2005, 11:20 | ||
Она не как не связана, с открытыми и закрытыми переменными. Там где считаешь, что пользователь может ввести неправильные данные, там и ставь проверки. Но при этом имей ввиду, что если ты обращаешся к переменным не из компонент-функции, то переменные должны входить в паблик (хотя это плохой стиль программирования)... Лучше всего, сделать копонент-функцию, в паблике (открытой), а переменные в привате (закрытыми) и внутри этой КП делать проверки, а потом только использовать имя переменной которая типа "твой класс" и как метод вызвать эту комп.функцию... |
| Автор: Демо 28.12.2005, 11:21 | ||||
Не существует понятия "открытые переменные". Добавлено @ 11:23
Не надо про стиль. Использовать поля в классе нужно именно там, где это необходимо, руководствуясь целесообразностью и мозгом, а не исповедуя религий в виде слова "стиль". |
| Автор: Zero 28.12.2005, 13:47 | ||
Открытые переменные ─ это переменные которые доступны, не только в нутри описания компонент-функции, но а также и других местах. Пишутся после ключевого слова public: |
| Автор: Guedda 28.12.2005, 14:21 |
| Закрытые переменные - это переменные, которые доступны только внутри описания компонент-функции. Пишутся после слова private: |
| Автор: Демо 28.12.2005, 14:36 | ||||||
Вряд ли;) В секции private находятся поля и методы класса, доступные только внутри модуля, в котором объявлен класс. В секции protect находятся поля и методы класса, доступные всем классам-наследникам в других модулях. В секции public находятся поля и методы класса, доступные во всех модулях. В секции published находятся поля и методы класса, доступные во всех модулях и для редактирования в режиме Design-Time в оболочке Delphi. Добавлено @ 14:37
Не могли бы вы привести английский аналог этих терминов, чтобы можно было найти их в справке Delphi? |
| Автор: Guedda 28.12.2005, 14:40 |
| private - с английского означает частный, скрытый |
| Автор: Zero 28.12.2005, 16:28 | ||||||||
Я сказал, своими словами, то что ты потом написал, из учебника или т.п.
Ты их сам уже привёл:
|
| Автор: 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:38 | ||||
| Интересно... Новые горизонты открыты... Если я в модуле Unit1.pas напишу что-то типа:
Потом в модуле Unit2.pas сделаю:
то все будет работать? Что за нонсенс... Дай, пожалуйста вразумительный ответ... |
| Автор: Демо 31.12.2005, 15:39 | ||||||
Нет, не будет. Потому что поле i скрыто. Но будет вот так:
Для того и помещаются поля в секцию private, чтобы не допустить прямого доступа к ним. |
| Автор: koder 31.12.2005, 16:03 | ||
Я тебе эти горизонты не открывал, вышенаписанных моих постах ни где не упоминается об том, что ты написал.. |
| Автор: Guedda 31.12.2005, 16:30 | ||
Ну ничего. Ладно.
А это ли не означает, что они закрытые? Если у тебя в какой либо дом нет прямого доступа, то дом закрыт! Так и в этом вопросе. Чисто по человечески если рассудить... |
| Автор: Демо 31.12.2005, 17:42 | ||
Нет, это не означает, что они открыте. При использовании понятий языка программировнания следует придерживаться строгой терминологии, как и в любых науках, иначе понять друг друга будет невозможно. В Delphi существует понятие "открытый массив параметров", что, естественно, никаким образом не связано с нашей темой. Понятия "открытых и закрытых" переменных в Delphi не существует. Строгость языка не допускает расширительного толкования, как в разговорной речи. Поэтому для того, чтобы тебя поняли, необходимо использовать соответствующие термины, как то - public-поле, private-поле, либо, соответственно - общее поле и частное поле класса. |