Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП 
:(
    Опции темы
koder
Дата 27.12.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



свойства класса.
открытые переменные - публичные поля.
Правила применения свойств и открытых переменных?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Snowy
Дата 27.12.2005, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А в чем вопрос?
PM MAIL   Вверх
koder
Дата 27.12.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



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

Это сообщение отредактировал(а) koder - 27.12.2005, 21:46
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Snowy
Дата 27.12.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Что подразумевается под открытыми и закрытими?
Применение private, protected, public и published?
В общем случае:
Закрытые поля применяются для внутренней реализации внутри класса.
Открытые поля применяются для работы с объектом из вне.
Т.е. то, что доступно всем. А приватные поля - для внутренней реализации и хранения данных.
PM MAIL   Вверх
DeadSoul
Дата 27.12.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 1
Всего: 11



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

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

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

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


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
koder
Дата 27.12.2005, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



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

Зачем они применяются, мне понятно, а в каких случаях не требуется делать проверку на применение открытых переменных..?
Открытые переменные, это переменные, в public описанные...
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Snowy
Дата 28.12.2005, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В любых. Работа ведется только с public и published свойствами.
И проверять ничего не нужно.
Работа с приватными полями ведется толькопри реализации класса.
Для работы с классом используются только открытые свойства.
Приватные просто не видны, и соответственно компилятор просто не даст с ними работать.
PM MAIL   Вверх
Zero
Дата 28.12.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



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

В основном, с точки зрения хорошего стиля программирования, закрытыми переменными делают именно переменные (то что после Var), а открытыми компоненты функции и процедуры, и они далее называются методами.
Но это всё не строго...
PM MAIL ICQ   Вверх
koder
Дата 28.12.2005, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



Когда не следует делать проверку в открытых переменных?
1) Когда тип открытых переменных - Variant
2) Когда передаваемое знаение того же типа, и компилятор проверяет входит ли значение в тип открытых переменных.
3)?
4)?
5)?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Zero
Дата 28.12.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



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

Проверку чего делать то???
PM MAIL ICQ   Вверх
koder
Дата 28.12.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



На правильность данных.
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Демо
Дата 28.12.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



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


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

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


--------------------
    
PM MAIL ICQ Skype   Вверх
Zero
Дата 28.12.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



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

Она не как не связана, с открытыми и закрытыми переменными.
Там где считаешь, что пользователь может ввести неправильные данные, там и ставь проверки. Но при этом имей ввиду, что если ты обращаешся к переменным не из компонент-функции, то переменные должны входить в паблик (хотя это плохой стиль программирования)...
Лучше всего, сделать копонент-функцию, в паблике (открытой), а переменные в привате (закрытыми) и внутри этой КП делать проверки, а потом только использовать имя переменной которая типа "твой класс" и как метод вызвать эту комп.функцию...
PM MAIL ICQ   Вверх
Демо
Дата 28.12.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



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


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


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

Это сообщение отредактировал(а) Демо - 28.12.2005, 11:24


--------------------
    
PM MAIL ICQ Skype   Вверх
Zero
Дата 28.12.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
Не существует понятия "открытые переменные".

Открытые переменные ─ это переменные которые доступны, не только в нутри описания компонент-функции, но а также и других местах. Пишутся после ключевого слова public:
PM MAIL ICQ   Вверх
Guedda
Дата 28.12.2005, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



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


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Демо
Дата 28.12.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(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?


--------------------
    
PM MAIL ICQ Skype   Вверх
Guedda
Дата 28.12.2005, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



private - с английского означает частный, скрытый


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Zero
Дата 28.12.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата
Вряд ли;)

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

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

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

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


Цитата
private


PM MAIL ICQ   Вверх
koder
Дата 30.12.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



Демо прав нет понятия открытые переменные, нету open variables в природе..
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Guedda
Дата 30.12.2005, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



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

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


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
koder
Дата 30.12.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



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

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

Можно только через свойства..Действо называется применения свойств.
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Guedda
Дата 30.12.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



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

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

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

... 
uses
  Unit1;
...

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

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

Это сообщение отредактировал(а) Guedda - 30.12.2005, 22:39


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Демо
Дата 31.12.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(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, чтобы не допустить прямого доступа к ним.


--------------------
    
PM MAIL ICQ Skype   Вверх
koder
Дата 31.12.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



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


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

Это сообщение отредактировал(а) koder - 31.12.2005, 16:45
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Guedda
Дата 31.12.2005, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Ну ничего. Ладно. smile
Цитата

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

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


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Демо
Дата 31.12.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



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


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

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

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


--------------------
    
PM MAIL ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.