Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Законно и штаны через голову одевать. Вроде просто дают информацию к размышлению, а реакция - как обвинение в уголовке предъявили.
------------------ Лень - это неосознанная мудрость. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Была, начиная с 3-ки была! ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
(Штаны невозможно надеть через голову физически)
Я возмутился вот на такие фразы: "И что ООП ты воспринимаешь как непонятно как и для чего, но сделанное деление на процедуры, вызываемые в каком-то относительно определенном порядке. Про создание свойств и методов в дизайнтайме, похоже, тоже не подозреваешь ибо private all решает проблемы с любимыми переменными x, z, r, n и т.д." Нет повода говорить о незнании ООП, если я на каждый чих не создаю класс, тем более где уместна просто подпрограмма (т.к. нет необходимости в хранении свойств после отработки подпрограммы), или где много подпрограмм, не городить же на каждую подпрограмку метод! Вот, например, ИК в соседней ветке сделал полдесятка подпрограмм на ровном месте. И никто не заставляет его оформить их в класс. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
А латинская буква Т в формате текстовых полей ввода была еще в FPD 2.0 Но некоторые об этом не знают до сих пор и с упорством маньяка лепят тучами Alltrim(something.value). ------------------ Лень - это неосознанная мудрость. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Ну вот это возмущение опять только подтверждает мною написанное. Речь не про создание классов... Но формы в VFP сделаны по ООП-шному и лучше бы ими пользоваться так же. ------------------ Лень - это неосознанная мудрость. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
В курсе про буковки формата (в хелпе же все есть, а тогда книжка у меня была А.Горев). Но что-то там такое бывает... Когда в Value легло короткое значение, то потом набить более длинное было невозможно. Да и бывает пишешь "надежнее" в программе, т.е. если значение нужно без пробелов, значит ALLT чтобы не думалось... > Но формы в VFP сделаны по ООП-шному и лучше бы ими пользоваться так же. В этой reclass.scx чего там не ООП-шного ? Методы нештатные есть, реакция на события (в Click-ах например) есть. А чего нет? Исправлено 1 раз(а). Последнее : of63, 08.06.17 17:59 |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не "сделал", а показал как ПЕРЕделать имеющиеся функции не трогая логику их вызовов - убрав половину (а то и больше) лишних "букв кода". Автор "решения" не захотел почему-то оформить его в виде класса. Я бы сделал класс - чтобы в "общей" области видимости модулей (процедур/функций) не болтались эти AlphNum да checkDigitSum. Впрочем, возможно что и не стал бы делать класс, т.к. все эти "вспомогательные" процедуры, ну кроме расчёта остатка превращаются в тривиальный "однострочный" вызов фоксовых функций, а "расчёт остатка" вызывается всего 1 раз. Т.е. вообще ВСЯ приведенная бодяга может быть уложена в одну процедуру Т.е. для неё декомпозиция потребуется лишь в плане "улучшения читаемости", т.к. IF IsLatinOrNumbersString(part[3]) выглядит чутка "понятнее" чем IF LEN(CHRTRAN(part[3], C_NUMBERS+C_LATIN_LETTERS, "")) = 0 Хотя там есть и то что оправдывает создание класса - простыня со "странами" - если таки в самой процедуре это держать а не во внешней таблице, то гораздо выгоднее сделать класс, в Init заполнить массив этими данными (1 раз) (курсоры НЕ ложатся красиво в ООП подход, а массив - вполне), и далее многократно его (созданный объект) использовать. ------------------ WBR, Igor |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
И так напали на оффа))) Не хочется присоединяться)
Это не нападка. Мое видение. Все же ООП несколько иное. Не так просто на пальцах и объяснить. Ну например, кто то разные утилиты, сводит в класс, а мне это не нравится, и у меня они висят просто рпоцедурами. Тут дело вкуса. Но встречается, и довольно часто, одинаковое, типовое, шаблонное поведение многих (нескольких) "объектов" Для меня это повод, задуматься о создании класса. В общем то, для фокса, создать базовый класс, от которого ничего не наследуется, создается 1 объект... почти бессмысленно. В общем ООП, в уже подготовленном фреймворке - это смотришь, из каких классов слепить вот этот функционал. ------------------ |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
И вот опять тебе про Фому, а ты про Ерёму... Дело не в наличии/отсутствии, а в использованных подхода/привычках. Private all, Close all, сохранение/восстановление рабочей области при том, что она одна... ------------------ Лень - это неосознанная мудрость. |
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 |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
И опять ты не понял... Цитата:Объект в ООП - должен быть самодостаточный и независимый от внешних по отношению к нему факторов. Для этого у него есть, в частности, свойства, которыми и заменяются все твои переменные любой буквенности и избавляют от необходимости писать private в любой форме. Цитата:См. п. 1 Цитата:Вот именно потому, что в IDE она и не должна в ней ничего трогать и менять. Что она делает я вижу по ее коду. Цитата:Еще раз для туго читающих, в том числе и п.3 - установка для формы приватной датасессии как раз и решает проблемы, описанные в 3. и 4., снимая их напрочь. ------------------ Лень - это неосознанная мудрость. Исправлено 1 раз(а). Последнее : ssa, 09.06.17 10:43 |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
А что б не написать сразу вменяемые имена. Затрат на 0.1 сек больше при написании, и на часы экономия при разборе.
А почему бы не сделать приватную ДС, и убрать кучу кода? Вообще, полезно код который используется, иногда рефакторить) И.. .можно обижаться на замечания, можно на них положить, наплевать и забыть, а можно ими воспользоваться, и что то поправить. Но это только в случае, если согласен с ними) ------------------ |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Эй народ, вообще то помощи просил я.
Человек чем мог тем и помог, а вы на него наезжаете... Но как бы в заголовке было слово "ЛЕНЬ", тому как всегда я выбрал наиболее простой вариант предложенный Ігорем Королевым
Та и благодаря ему, у меня уже идея созрела перевести все на классы, вот и спрашивал помощи, большое спасибо за ваши ответы, тему можно закрывать. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
А что, не помогаем? Цитата:Не наезжаем, а конструктивно критикуем и указываем что и как можно сделать лучше. Тем более, сии рекомендации должны быть очень полезны некоторым практикующим использователям фокса. Цитата:Ну, собственно в силу его очевидности мной был предложен тоже именно он, только в другой форме. Цитата:Закрывать? Ладно, подумаем. ------------------ Лень - это неосознанная мудрость. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Это самый лучший форум, каким я пользуюсь, со времен FIDO!
А вникая в классы, вообще нарадоваться на VFP не могу, для моих задач, его за глаза. PS.Я только в этом году, и то благодаря форуму начал слезать с концепции программирования в стиле FoxPro DOS... Еще раз всем Вам огромное спасибо... Исправлено 1 раз(а). Последнее : ZenTigra, 09.06.17 11:31 |
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 с читаемым именем... |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Зачем их "наследовать", если ты ЯВНО выставляешь свои настройки, да ещё и запоминаешь старые для "возврата" (кстати, если форма не модальная - когда он их "вернёт взад"? А что будет происходить "в процессе" работы этой формы, если запустить другую подобную?)... "Лишний" это как раз кода сохранения/восстановления кучи настроек - т.к. он уже имеется в фоксе и как раз датасессиями и реализуется в полной мере - просто, прозрачно, без лишних усилий (жаль не всегда можно, точнее "эффективно" использовать разные датасессии)... Приватные переменные. Локальные - конечно же используются. Естественно. Источник потенциальных ошибок. "Лень" не есть оправдание выбору плохого проектного решения Тем более что "лень" прописывания LOCAL с успехом заменяется "неленью" прописывания этого самого PRIVATE - при том если local нужен только в методах где используются соответствующие переменные и только для используемых имён, то private нужен во ВСЕХ блоках кода. И, как я уже говорил, "забывчивость" с local может навредить лишь одному методу - где ты забыл объявить переменную, но использовал её (она "вырвалась" наружу и там её "испортили"). А вот "забывчивость" с private в твоём варианте способна навредить ЛЮБОМУ методу, который вызовет "плохой код" (т.к. у тебя ВСЕ эти переменные потенциально "доступны извне" - хороший дядя с private all говорит "я их не трону", а плохой...). Как по мне, это настолько очевидно, что даже смысла что-то обсуждать тут нет. Езда с непристёгнутым ремнём на 99.9% опасна лишь для "непристёгнутого", езда с неисправными тормозами или рулевым управлением опасна ВСЕМ ДРУГИМ участникам дорожного движения. ------------------ WBR, Igor |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Я на велике езжу, я безопасен по сравнению с водилами на ремнях или без.
Ладно. С DS замечание хорошее, с PRIVATE - ну, вы правы, но они не суть в ООП... К тому же вы ведь в принципе не используете однобуквенные переменные, это тоже хорошо, так что ваши подпрограммы, мне не помешают, а ваши испортить внешними переменными и SET-ами невозможно в принципе. > Зачем их "наследовать" (речь о DS), если ты ЯВНО выставляешь свои настройки, да ещё и запоминаешь старые для "возврата" (кстати, если форма не модальная - когда он их "вернёт взад"? А что будет происходить "в процессе" работы этой формы, если запустить другую подобную?)... Форма reclass - это как у тебя UPDATE поля_файла_класса. Она не для встраивания в проекты, предназначена для НЕШТАТНОЙ ПРАВКИ ФАЙЛА КЛАССОВ (И ФОРМ). В рабочик формах все как обычно (ну, когда живут без приватных DS). Да приватные DS еще напрягают, если захочется посмотреть курсор в другой DS. Это как обычно делается у вас. (Ответ "а нам туда не надо, т.к. мы правильно обращаемся с данными" очевиден, ну а вдруг?) Исправлено 1 раз(а). Последнее : of63, 09.06.17 15:02 |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Опять ошибаешься! Например, i очень даже используется, и даже без преффикса. PS: для особых лентяев, ленящихся писать ИНОГДА local, но не ленящихся, как ни странно, писать ВСЕГДА private, есть такая штука как zlocal. ------------------ Лень - это неосознанная мудрость. |
Re: Что делать, когда лень исправлять. Вопрос о работе с классами | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
У всех свои "принципы", привычки наработки) Я вот не использую префикс m. Практически никогда. Не нравится, не привык, не...))) Использую приватные переменные в классе. Очень СОЗНАТЕЛЬНО. Где то глубоко в классе зарыт метод EXEC, обертка над SQLEXEC И есть методы INS и UPG - где хранится текст вставок-апдейта. И в них часто пишу ... discount=?nDiscount... Меня устраивает. Рекомендовать не брался бы.) Обойти можно 1000 способов. Но код удлинится. А вот одно-буквенных нет вообще. Даже i пишу ii ))) Наверное в FPD нарвался-напугался когда то) ------------------ |
© 2000-2024 Fox Club  |