:: Visual Foxpro, Foxpro for DOS
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Законно и штаны через голову одевать. Вроде просто дают информацию к размышлению, а реакция - как обвинение в уголовке предъявили.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
of63
кстати эта форма рождена еще в VFP5, была ли там DS не помню,

Была, начиная с 3-ки была!


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
(Штаны невозможно надеть через голову физически)

Я возмутился вот на такие фразы: "И что ООП ты воспринимаешь как непонятно как и для чего, но сделанное деление на процедуры, вызываемые в каком-то относительно определенном порядке. Про создание свойств и методов в дизайнтайме, похоже, тоже не подозреваешь ибо private all решает проблемы с любимыми переменными x, z, r, n и т.д."
Нет повода говорить о незнании ООП, если я на каждый чих не создаю класс, тем более где уместна просто подпрограмма (т.к. нет необходимости в хранении свойств после отработки подпрограммы), или где много подпрограмм, не городить же на каждую подпрограмку метод!

Вот, например, ИК в соседней ветке сделал полдесятка подпрограмм на ровном месте. И никто не заставляет его оформить их в класс.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
PaulWist
of63
кстати эта форма рождена еще в VFP5, была ли там DS не помню,

Была, начиная с 3-ки была!
А латинская буква Т в формате текстовых полей ввода была еще в FPD 2.0 Но некоторые об этом не знают до сих пор и с упорством маньяка лепят тучами Alltrim(something.value).

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
of63
(Штаны невозможно надеть через голову физически)
Я возмутился вот на такие фразы: "И что ООП ты воспринимаешь как непонятно как и для чего, но сделанное деление на процедуры, вызываемые в каком-то относительно определенном порядке. Про создание свойств и методов в дизайнтайме, похоже, тоже не подозреваешь ибо private all решает проблемы с любимыми переменными x, z, r, n и т.д."
Нет повода говорить о незнании ООП, если я на каждый чих не создаю класс
Ну вот это возмущение опять только подтверждает мною написанное. Речь не про создание классов... Но формы в VFP сделаны по ООП-шному и лучше бы ими пользоваться так же.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ssa
PaulWist
of63
кстати эта форма рождена еще в VFP5, была ли там DS не помню,

Была, начиная с 3-ки была!
А латинская буква Т в формате текстовых полей ввода была еще в FPD 2.0 Но некоторые об этом не знают до сих пор и с упорством маньяка лепят тучами Alltrim(something.value).

В курсе про буковки формата (в хелпе же все есть, а тогда книжка у меня была А.Горев). Но что-то там такое бывает... Когда в Value легло короткое значение, то потом набить более длинное было невозможно. Да и бывает пишешь "надежнее" в программе, т.е. если значение нужно без пробелов, значит ALLT чтобы не думалось...

> Но формы в VFP сделаны по ООП-шному и лучше бы ими пользоваться так же.
В этой reclass.scx чего там не ООП-шного ? Методы нештатные есть, реакция на события (в Click-ах например) есть. А чего нет?



Исправлено 1 раз(а). Последнее : of63, 08.06.17 17:59
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Вот, например, ИК в соседней ветке сделал полдесятка подпрограмм на ровном месте.
Не "сделал", а показал как ПЕРЕделать имеющиеся функции не трогая логику их вызовов - убрав половину (а то и больше) лишних "букв кода".
of63
И никто не заставляет его оформить их в класс.
Автор "решения" не захотел почему-то оформить его в виде класса. Я бы сделал класс - чтобы в "общей" области видимости модулей (процедур/функций) не болтались эти AlphNum да checkDigitSum. Впрочем, возможно что и не стал бы делать класс, т.к. все эти "вспомогательные" процедуры, ну кроме расчёта остатка превращаются в тривиальный "однострочный" вызов фоксовых функций, а "расчёт остатка" вызывается всего 1 раз. Т.е. вообще ВСЯ приведенная бодяга может быть уложена в одну процедуру Т.е. для неё декомпозиция потребуется лишь в плане "улучшения читаемости", т.к. IF IsLatinOrNumbersString(part[3]) выглядит чутка "понятнее" чем IF LEN(CHRTRAN(part[3], C_NUMBERS+C_LATIN_LETTERS, "")) = 0

Хотя там есть и то что оправдывает создание класса - простыня со "странами" - если таки в самой процедуре это держать а не во внешней таблице, то гораздо выгоднее сделать класс, в Init заполнить массив этими данными (1 раз) (курсоры НЕ ложатся красиво в ООП подход, а массив - вполне), и далее многократно его (созданный объект) использовать.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
И так напали на оффа))) Не хочется присоединяться)
Это не нападка.
Мое видение.
of63
В этой reclass.scx чего там не ООП-шного ? Методы нештатные есть, реакция на события (в Click-ах например) есть. А чего нет?
Все же ООП несколько иное.
Не так просто на пальцах и объяснить.
Ну например, кто то разные утилиты, сводит в класс, а мне это не нравится, и у меня они висят просто рпоцедурами.
Тут дело вкуса.
Но встречается, и довольно часто, одинаковое, типовое, шаблонное поведение многих (нескольких) "объектов"
Для меня это повод, задуматься о создании класса.
В общем то, для фокса, создать базовый класс, от которого ничего не наследуется, создается 1 объект... почти бессмысленно.

В общем ООП, в уже подготовленном фреймворке - это смотришь, из каких классов слепить вот этот функционал.


------------------
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
of63
> Но формы в VFP сделаны по ООП-шному и лучше бы ими пользоваться так же.
В этой reclass.scx чего там не ООП-шного ? Методы нештатные есть, реакция на события (в Click-ах например) есть. А чего нет?
И вот опять тебе про Фому, а ты про Ерёму...
Дело не в наличии/отсутствии, а в использованных подхода/привычках. Private all, Close all, сохранение/восстановление рабочей области при том, что она одна...


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ну, мы так опять скатываемся с "высот" ООП к обсуждению "как правильно оформить подпрограмму/метод". Придется еще раз:
1. PRIVATE ALL LIKE ? - экранирует однобуквенные переменные от вызовов вышележащщих подпрограмм/методов. Заменяет LOCAL a, b, c... (продолжить на все буквы). Не связано с ООП никак. Просто так я использую переменные в подпрограмме/методе.
2. Про однобуквенные переменные все в курсе, что в фоксе также называются рабочие области. Поэтому пользоваться ими надо аккуратно, с использованием m. и оператором скобки, чтобы фокс фидел, что это переменная. Например не надо писать SELECT a, но можно SELECT (m.a), даже SELECT (a) тоже можно.
3. CLOSE ALL - использовано в этой reclass.scx т.к. предполагается, что эта форма будет выполняться в командном окне IDE фокса. Эта форма - просто видеооболочка вокруг заменятеля имен классов REPLACE ... FOR ... в таблицах-формах/классах выбранного директория.
4. Другие сохранятели/восстановлятели в reclass.scx применены по той же причине, что в п.2, т.е. чтобы програмер не потерял любимые настройки SET DELETE, SET TALK и др. после запуска этого reclass
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
of63
Ну, мы так опять скатываемся с "высот" ООП к обсуждению "как правильно оформить подпрограмму/метод". Придется еще раз:
И опять ты не понял...
Цитата:
1. PRIVATE ALL LIKE ? - экранирует однобуквенные переменные от вызовов вышележащщих подпрограмм/методов. Заменяет LOCAL a, b, c... (продолжить на все буквы). Не связано с ООП никак. Просто так я использую переменные в подпрограмме/методе.
Объект в ООП - должен быть самодостаточный и независимый от внешних по отношению к нему факторов. Для этого у него есть, в частности, свойства, которыми и заменяются все твои переменные любой буквенности и избавляют от необходимости писать private в любой форме.
Цитата:
2. Про однобуквенные переменные все в курсе, что в фоксе также называются рабочие области. Поэтому пользоваться ими надо аккуратно, с использованием m. и оператором скобки, чтобы фокс фидел, что это переменная. Например не надо писать SELECT a, но можно SELECT (m.a), даже SELECT (a) тоже можно.
См. п. 1
Цитата:
3. CLOSE ALL - использовано в этой reclass.scx т.к. предполагается, что эта форма будет выполняться в командном окне IDE фокса. Эта форма - просто видеооболочка вокруг заменятеля имен классов REPLACE ... FOR ... в таблицах-формах/классах выбранного директория.
Вот именно потому, что в IDE она и не должна в ней ничего трогать и менять. Что она делает я вижу по ее коду.
Цитата:
4. Другие сохранятели/восстановлятели в reclass.scx применены по той же причине, что в п.2, т.е. чтобы програмер не потерял любимые настройки SET DELETE, SET TALK и др. после запуска этого reclass
Еще раз для туго читающих, в том числе и п.3 - установка для формы приватной датасессии как раз и решает проблемы, описанные в 3. и 4., снимая их напрочь.

------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 09.06.17 10:43
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
А что б не написать сразу вменяемые имена. Затрат на 0.1 сек больше при написании, и на часы экономия при разборе.
А почему бы не сделать приватную ДС, и убрать кучу кода?

Вообще, полезно код который используется, иногда рефакторить)

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


------------------
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Эй народ, вообще то помощи просил я.
Человек чем мог тем и помог, а вы на него наезжаете...

Но как бы в заголовке было слово "ЛЕНЬ", тому как всегда я выбрал наиболее простой вариант
предложенный Ігорем Королевым
UPDATE myform.scx SET Class = "cmd1", ClassLoc = "..\class\mylib.vcx" WHERE BaseClass="commandbutton" AND Class = "commandbutton"

Та и благодаря ему, у меня уже идея созрела перевести все на классы, вот и спрашивал помощи, большое спасибо за ваши ответы, тему можно закрывать.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
ZenTigra
Эй народ, вообще то помощи просил я.
А что, не помогаем?
Цитата:
Человек чем мог тем и помог, а вы на него наезжаете...
Не наезжаем, а конструктивно критикуем и указываем что и как можно сделать лучше. Тем более, сии рекомендации должны быть очень полезны некоторым практикующим использователям фокса.
Цитата:

Но как бы в заголовке было слово "ЛЕНЬ", тому как всегда я выбрал наиболее простой вариант
предложенный Ігорем Королевым
UPDATE myform.scx SET Class = "cmd1", ClassLoc = "..\class\mylib.vcx" WHERE BaseClass="commandbutton" AND Class = "commandbutton"
Ну, собственно в силу его очевидности мной был предложен тоже именно он, только в другой форме.
Цитата:
Та и благодаря ему, у меня уже идея созрела перевести все на классы, вот и спрашивал помощи, большое спасибо за ваши ответы, тему можно закрывать.
Закрывать? Ладно, подумаем.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Это самый лучший форум, каким я пользуюсь, со времен FIDO!

А вникая в классы, вообще нарадоваться на VFP не могу, для моих задач, его за глаза.

PS.Я только в этом году, и то благодаря форуму начал слезать с концепции программирования в стиле FoxPro DOS...

Еще раз всем Вам огромное спасибо...



Исправлено 1 раз(а). Последнее : ZenTigra, 09.06.17 11:31
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
2ZenTigra
> большое спасибо за ваши ответы, тему можно закрывать
Ну, немного поспамить то на программные темы можно?

2ssa
Да. п.3.4 решаются при помощи DS. Правда, минус DS в том, что приватная DS не наследует SET-ы, сделанные в основной DS, и приходится их повторять (ну хоть подпрограммой). "Лишний" код. Про DS я согласен, в ближайшую пятилетку переведу эту злополучную форму на DS, если не закошмарят "отчетами".

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

Ты это серьезно? Т.е. при написании кода метода обьекта/класса ты не используешь переменные. Я не верю.

В ООП есть свойства (как есть и методы) обьекта/класса. Но не писать же из-за этого бред типа такого:
This.AddProperty("iCount")
FOR This.iCount=1 TO 10
ENDFOR

Вероятно, тебя беспокоит видимость этих PRIVATE-переменных в нижележащих методах/подпрограммах. Да, это "минус" PRIVATE-переменных. Спросишь почему же я не делаю их LOCAL ? Да потому что у меня обычно однобуквенных переменных с 10ок всегда нужно, и просто ЛЕНЬ их перечислять в LOCAL. И из за этой лени приходится в КАЖДОЙ моей подпрограмме указывать такую строку: PRIVATE ALL LIKE ? (все однобуквенные переменные экранировать от вызывающих программ). Вполне можно заменить на кошерную LOCAL m.a, m.b, m.c, m.d... Причем, PRIVATE я делаю только однобуквенные переменные. В любом более-менее сложном методе/подпрограмме всегда возникает с 10ок другой переменных, типа m.i - счетчик, m.r - возвращаемое значение, m.s - сумма и т.п., причем имена именно такие. Это как в математике неизвестную обозначают обычно X. К тому же эти переменные у меня видны в пределах одного-двух экранов кода. Какие-то переменные, которые тащатся через весь метод делаю LOCAL с читаемым именем...
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Правда, минус DS в том, что приватная DS не наследует SET-ы, сделанные в основной DS, и приходится их повторять (ну хоть подпрограммой).
Зачем их "наследовать", если ты ЯВНО выставляешь свои настройки, да ещё и запоминаешь старые для "возврата" (кстати, если форма не модальная - когда он их "вернёт взад"? А что будет происходить "в процессе" работы этой формы, если запустить другую подобную?)...
of63
"Лишний" код.
"Лишний" это как раз кода сохранения/восстановления кучи настроек - т.к. он уже имеется в фоксе и как раз датасессиями и реализуется в полной мере - просто, прозрачно, без лишних усилий (жаль не всегда можно, точнее "эффективно" использовать разные датасессии)...
of63
Т.е. при написании кода метода обьекта/класса ты не используешь переменные. Я не верю.
Приватные переменные. Локальные - конечно же используются.
of63
Вероятно, тебя беспокоит видимость этих PRIVATE-переменных в нижележащих методах/подпрограммах.
Естественно. Источник потенциальных ошибок.
of63
ЛЕНЬ их перечислять в LOCAL. И из за этой лени приходится в КАЖДОЙ моей подпрограмме указывать такую строку:
"Лень" не есть оправдание выбору плохого проектного решения Тем более что "лень" прописывания LOCAL с успехом заменяется "неленью" прописывания этого самого PRIVATE - при том если local нужен только в методах где используются соответствующие переменные и только для используемых имён, то private нужен во ВСЕХ блоках кода. И, как я уже говорил, "забывчивость" с local может навредить лишь одному методу - где ты забыл объявить переменную, но использовал её (она "вырвалась" наружу и там её "испортили"). А вот "забывчивость" с private в твоём варианте способна навредить ЛЮБОМУ методу, который вызовет "плохой код" (т.к. у тебя ВСЕ эти переменные потенциально "доступны извне" - хороший дядя с private all говорит "я их не трону", а плохой...).
Как по мне, это настолько очевидно, что даже смысла что-то обсуждать тут нет.
Езда с непристёгнутым ремнём на 99.9% опасна лишь для "непристёгнутого", езда с неисправными тормозами или рулевым управлением опасна ВСЕМ ДРУГИМ участникам дорожного движения.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я на велике езжу, я безопасен по сравнению с водилами на ремнях или без.

Ладно. С DS замечание хорошее, с PRIVATE - ну, вы правы, но они не суть в ООП... К тому же вы ведь в принципе не используете однобуквенные переменные, это тоже хорошо, так что ваши подпрограммы, мне не помешают, а ваши испортить внешними переменными и SET-ами невозможно в принципе.

> Зачем их "наследовать" (речь о DS), если ты ЯВНО выставляешь свои настройки, да ещё и запоминаешь старые для "возврата" (кстати, если форма не модальная - когда он их "вернёт взад"? А что будет происходить "в процессе" работы этой формы, если запустить другую подобную?)...
Форма reclass - это как у тебя UPDATE поля_файла_класса. Она не для встраивания в проекты, предназначена для НЕШТАТНОЙ ПРАВКИ ФАЙЛА КЛАССОВ (И ФОРМ). В рабочик формах все как обычно (ну, когда живут без приватных DS). Да приватные DS еще напрягают, если захочется посмотреть курсор в другой DS. Это как обычно делается у вас. (Ответ "а нам туда не надо, т.к. мы правильно обращаемся с данными" очевиден, ну а вдруг?)



Исправлено 1 раз(а). Последнее : of63, 09.06.17 15:02
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
of63
вы ведь в принципе не используете однобуквенные переменные
Опять ошибаешься! Например, i очень даже используется, и даже без преффикса.
PS: для особых лентяев, ленящихся писать ИНОГДА local, но не ленящихся, как ни странно, писать ВСЕГДА private, есть такая штука как zlocal.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Что делать, когда лень исправлять. Вопрос о работе с классами
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
of63
Ладно. С DS замечание хорошее
:beer2: У всех свои "принципы", привычки наработки)
Я вот не использую префикс m. Практически никогда. Не нравится, не привык, не...)))
Использую приватные переменные в классе. Очень СОЗНАТЕЛЬНО.
Где то глубоко в классе зарыт метод EXEC, обертка над SQLEXEC
И есть методы INS и UPG - где хранится текст вставок-апдейта.
И в них часто пишу ... discount=?nDiscount...
Меня устраивает.
Рекомендовать не брался бы.)
Обойти можно 1000 способов. Но код удлинится.
А вот одно-буквенных нет вообще.
Даже i пишу ii )))
Наверное в FPD нарвался-напугался когда то)


------------------
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 29 (Гостей: 29)

© 2000-2024 Fox Club 
Яндекс.Метрика