Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Вниз

Верно ли это?   Найти похожие ветки 

 
Abcdef123   (2008-11-10 03:32) [0]

Программер, которому я не особо доверяю, сделал замечание, что согласно ООП надо вместо паблик переменных использовать паблик свойство. Верно ли это, если да, то почему?
И второе, я назвала паблик переменную _DefKeyField, он сказал, чтоб я убрала первый знак из названия, то есть "_". Существенно ли это? Если да, то почему?
Извините, может я не по теме данного форума, но это ж вопрос для начинающих.
Спасибо заранее!
Надя


 
Eraser ©   (2008-11-10 03:47) [1]

> [0] Abcdef123   (10.11.08 03:32)


> что согласно ООП надо вместо паблик переменных использовать
> паблик свойство

да, только с поправочкой - в ООП, принятом в Делфи.

> И второе, я назвала паблик переменную _DefKeyField, он сказал,
> чтоб я убрала первый знак из названия, то есть "_". Существенно
> ли это?

правильно сказал. в Делфи это противоречит основным стандартам.
советую http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802


 
Германн ©   (2008-11-10 03:50) [2]


> Верно ли это? [D6, XP]
>
> Abcdef123   (10.11.08 03:32)
>
> Программер, которому я не особо доверяю, сделал замечание,
>  что согласно ООП надо вместо паблик переменных использовать
> паблик свойство. Верно ли это, если да, то почему?
> И второе, я назвала паблик переменную _DefKeyField, он сказал,
>  чтоб я убрала первый знак из названия, то есть "_". Существенно
> ли это? Если да, то почему?
>

И то и другое  не верно в общем случае.


 
Rouse_ ©   (2008-11-10 10:55) [3]

Скажем так, на исполнение программы в общем случае это не повлияет, но программер, которому ты "не особо доверяешь" прав. :)


 
Palladin ©   (2008-11-10 11:02) [4]

Попроси аргументировать и начни доверять :)


 
Поросенок Винни-Пух ©   (2008-11-10 11:08) [5]

да чувак просто жениться на ней не хочет.


 
Anatoly Podgoretsky ©   (2008-11-10 11:14) [6]


> > что согласно ООП надо вместо паблик переменных использовать
>
> > паблик свойство
>
> да, только с поправочкой - в ООП, принятом в Делфи.

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


 
Поросенок Винни-Пух ©   (2008-11-10 11:23) [7]

интересно, а ссылку на единственный на процесс экземпляр класса с полем вместо глобальной переменной в какой переменной хранить?


 
Anatoly Podgoretsky ©   (2008-11-10 11:26) [8]

Поросенок Винни-Пух ©   (10.11.08 11:23) [7]
Это уже не имеет отношения к ООП, ООП начинается там, где кончается ссылка.
Но правила хранения общии, не выше необходимой видимости.


 
DVM ©   (2008-11-10 11:30) [9]


> интересно, а ссылку на единственный на процесс экземпляр
> класса с полем вместо глобальной переменной в какой переменной
> хранить?

Можно выкрутиться. Без глобальных переменных можно обойтись. Вон в Java их вообще нет и ничего.


 
Поросенок Винни-Пух ©   (2008-11-10 11:30) [10]

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

Это неверно.


 
Поросенок Винни-Пух ©   (2008-11-10 11:31) [11]

Вон в Java их вообще нет и ничего.

Это в сидиезе их по настоящему нет и любая запятая это член класса.
А ява - это так. Полумеры.


 
KSergey ©   (2008-11-10 11:44) [12]

> Поросенок Винни-Пух ©   (10.11.08 11:31) [11]
> Это в сидиезе их по настоящему нет и любая запятая это член класса.

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


 
Поросенок Винни-Пух ©   (2008-11-10 11:50) [13]

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

public static class Globals {
...
}

:)


 
Vlad Oshin ©   (2008-11-10 12:38) [14]


> вместо паблик переменных использовать паблик свойство. Верно
> ли это, если да, то почему?

Св-во можно менять с помощью метода +

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


Ну мало ли чего туда по ошибке запишут? А св-во автоматически вызовет метод(если он описан) для своего изменения, в котором можно проверять корректность значения.


 
Поросенок Винни-Пух ©   (2008-11-10 12:47) [15]

... и при всем при этом почему-то decimal separator - это не поле с методом по записи.


 
Поросенок Винни-Пух ©   (2008-11-10 12:51) [16]

А св-во автоматически вызовет метод(если он описан) для своего изменения, в котором можно проверять корректность значения.

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


 
Юрий Зотов ©   (2008-11-10 13:09) [17]

> Поросенок Винни-Пух ©   (10.11.08 12:51) [16]

Не обязательно "я". Это может быть коллега, который не в курсе тонкостей. Так что защита не помешает.


 
AndreyV ©   (2008-11-10 13:11) [18]

> [16] Поросенок Винни-Пух ©   (10.11.08 12:51)
> И я создаю класс с полем и методом по записи, для того,
> что бы опять же я не испортил бы глобальное неправильным
> значением, путем проверки значения в методе, который написал
> я.

Ну да. Проверка в одном месте, присваивание во многих.


 
Anatoly Podgoretsky ©   (2008-11-10 14:23) [19]

> Vlad Oshin  (10.11.2008 12:38:14)  [14]

Свойства для того и придумали, что бы скрыть методы доступа и кой что еще. Что бы это выглядело как переменная. В тех языках, где нет свойств это делается явно через функции, а само поле все равно скрыто в private.


 
clickmaker ©   (2008-11-10 17:21) [20]

> согласно ООП надо вместо паблик переменных использовать
> паблик свойство

если класс или структура используется только как контейнер для данных (н-р, в параметрах методов), то нафик там свойства?


 
Marser ©   (2008-11-10 20:48) [21]


> Eraser ©   (10.11.08 03:47) [1]
>
> > [0] Abcdef123   (10.11.08 03:32)
>
>
> > что согласно ООП надо вместо паблик переменных использовать
> > паблик свойство
>
> да, только с поправочкой - в ООП, принятом в Делфи.

В Шарпе тоже.


 
Bless ©   (2008-11-11 10:27) [22]

топикстартеру:
Замечание твоего знакомого программиста - это как библейские заповеди:
они не всегда бесспорны и уместны, но если все всегда будут им следовать, то жить будет легче, чем когда все всегда будут их нарушать.


 
GrayFace ©   (2008-11-11 12:26) [23]

+1. В частности, при отсутствии свойств использование get"теров и set"теров весьма спорно.

Но "_" безусловно надо избегать в нормальных функциях, в методах - тем более, там просто нельзя.


 
Leonid Troyanovsky ©   (2008-11-11 13:26) [24]


> Поросенок Винни-Пух ©   (10.11.08 11:23) [7]

> интересно, а ссылку на единственный на процесс экземпляр
> класса с полем вместо глобальной переменной в какой переменной
> хранить?

В поле класса TApplication.

--
Regards, LVT.


 
stas ©   (2008-11-11 15:45) [25]

Abcdef123   (10.11.08 03:32)
Чем же этот программер незаслужил доверия? )))
В том что он посоветовал подвоха нет.


 
Anatoly Podgoretsky ©   (2008-11-11 15:52) [26]

Ну уже ответили в [5]


 
Поросенок Винни-Пух ©   (2008-11-11 15:54) [27]

В поле класса TApplication.

А чем заменить глобальную переменную TAplication?
Каким полем и в каком классе?


 
Anatoly Podgoretsky ©   (2008-11-11 16:00) [28]

> Поросенок Винни-Пух  (11.11.2008 15:54:27)  [27]

Заменить функцией (конструктором), при том если по реализации системы, или встроеный в систему, или скрытой локальной переменной.


 
Leonid Troyanovsky ©   (2008-11-11 16:14) [29]


> Поросенок Винни-Пух ©   (11.11.08 15:54) [27]

> А чем заменить глобальную переменную TAplication?

Она уже есть, и пока заменить ее нечем.
Борланды пошли на компромисс, целясь в повторное использование
кода в GUI, консолях и dll. Короче говоря, отошли от ООП, а так бы было
что-то вроде:

with TApplication.Create(nil) do
 begin
    Initialize;
    ..
    Run;
    ..
 end;

Доступ к Application организовали б через прокси-объект, создаваемый
по мере надобности программистом, и снабженным нужными свойствами, например, тем же DecimalSeparator.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-11-11 16:49) [30]

> Leonid Troyanovsky  (11.11.2008 16:14:29)  [29]

Вроде и сейчас так же можно, вот только другие модули будут обращаться к другому экземпляру TApplication.
Борланд мог сделать функцию, которая бы возвращала ссылку на экземпляр, как бы не было сделано обращение к Application.


 
DesWind   (2008-11-11 17:19) [31]

Какои смысл прописывать метод доступа, если он будет вида fField:=Value;
Либо это вообще свойство для чтения?


 
Leonid Troyanovsky ©   (2008-11-11 17:57) [32]


> Anatoly Podgoretsky ©   (11.11.08 16:49) [30]

> Вроде и сейчас так же можно

Можно обращаться к самой переменной Application,
а надо б было к промежуточному объекту, который бы
и управлял доступом к объекту {F}Application.
Ну, например, чтоб он не давал сделать Applcation.Free,
хотя, в данном случае, ничего предосудительного в оном нет.

> Борланд мог сделать функцию, которая бы возвращала ссылку
> на экземпляр, как бы не было сделано обращение к Application.

Вот здесь их подвело, IMHO, стремление к общности:
вдруг некто захочет пользовать Application из длл в чуждом процессе.

А, все равно, идея пригодилась лишь в package, т.е. при отказе
обслуживать чужих.

--
Regards, LVT.


 
Поросенок Винни-Пух ©   (2008-11-11 18:02) [33]

насколько я знаю, никто пока в массовых объемах не убивал ни TApplication, ни DecimalSeparator ни другие глобальные переменные.
Так что все это пустое. Эстецво и сектанство.


 
Leonid Troyanovsky ©   (2008-11-11 18:03) [34]


> DesWind   (11.11.08 17:19) [31]

> Либо это вообще свойство для чтения?

В дельфи свойство для чтения легко становится таковым для записи,
если оно не релизовано геттером.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-11-11 18:10) [35]


> Поросенок Винни-Пух ©   (11.11.08 18:02) [33]

> Так что все это пустое. Эстецво и сектанство.

М.б.

Хочу лишь обратить внимание на разрыв между
двумя дельфийскими моделями: модульной и ООП.
А граница проходит по глобальным переменным и
секциям их инициализации/финализации.

Например, невозможность управлять инициализацией собс-ного
приложения раздражало, IMHO, не одно поколение программистов.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-11-11 18:24) [36]


> Поросенок Винни-Пух ©   (11.11.08 18:02) [33]

> насколько я знаю, никто пока в массовых объемах не убивал
> ни TApplication, ни DecimalSeparator

Во-первых, где границы твоих знаний?
Во-вторых, использование глобальных переменных вопреки
требованиям ООП (а дельфи позиционируется как ООП ЯВУ)
должны чем-то быть оправданы?

А где оные бонусы?
В консольных приложениях, где никто и не предполагает
использовать Application?
Или в длл (свят-свят)?

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-11-11 19:17) [37]


> Какои смысл прописывать метод доступа, если он будет вида
> fField:=Value;

Сегодня так, а завтра SetfField(Value);

Основная идея скрыть прямой доступ до переменной, абстрагироваться от хранения, типа, прочего, но чтобы выглядело как переменная. Всю необходимую работу выполнит компилятор, где подменит на прямое присвоение, где будет вызван метод с контролем, а где то даже и поля не будет, а будет вызвана функция, которая например обратится к ФСБ с докладом, мол тут Вася Пупкин делает что-то.

Свойство это великая вещь.


 
Anatoly Podgoretsky ©   (2008-11-11 19:18) [38]

> Leonid Troyanovsky  (11.11.2008 17:57:32)  [32]

Applcation.Free, равносилен закрытию приложения, почему бы и нет?
Мы же можем работать разными методами с динамическими массивами.


 
Anatoly Podgoretsky ©   (2008-11-11 19:20) [39]

> Leonid Troyanovsky  (11.11.2008 18:10:35)  [35]

Зато оно сейчас не дает покоя остальным программистам.


 
Тын-Дын ©   (2008-11-11 22:41) [40]

А для чего скрывать public-переменные? Из принципа?
Вот я предоставляю (как было выше сказано) поле как контейнер для хранения данных, даю программисту возможность обрабатывать его как методами моего класса, так и доступом напрямую, например к некоторой структуре. Причём надо учитывать, что никаких проверок не нужно.
И что же в этом плохого? Зачем делать дополнительные вызовы, нагружать класс ненужными свойствами и методами?

То, что однажды (через пару десятков лет) вдруг кто-то решит использовать мой класс в качестве родителя?
Да ради бога.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.006 c
2-1227864512
Golden
2008-11-28 12:28
2009.01.11
Позиция в таблице


2-1227780469
NS1989
2008-11-27 13:07
2009.01.11
TFileStream


8-1188381068
hahol
2007-08-29 13:51
2009.01.11
Эквалайзер


3-1212598398
Цукор5
2008-06-04 20:53
2009.01.11
FireBird 1.5 & Vista ?


15-1226588778
antonn
2008-11-13 18:06
2009.01.11
нужен jpeg.pas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский