powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объектная модель программы
25 сообщений из 108, страница 2 из 5
Объектная модель программы
    #35108816
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВо первых у всех ваших 3-х классов нет общего класса потомка с методом "позвени". Три класс и три раз вы добавляет метод. Может торопились ?


Вы поторопились анализировать предложенный пример.

Базовые классы фокспро не могут быть изменены пользователем.

Поэтому создан свой класс БУБЕН.

от класса БУБЕН уже пронаследованы 2 класса (красный и синий), котор. и имеют
общ.методы и св-ва.

вот об этих 2- х классах и идет речь.

от том что есть в фокспро и чем он отл-ся от др.сред разработки - не есть суть,
это не тема данной беседы и данных примеров
...
Рейтинг: 0 / 0
Объектная модель программы
    #35108837
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в данном случае, для более подробного объяснения воспользуюсь
заимствованием трудов стороннего автора (изв. займусь плагиатом)

автор
Понятие базовых классов. Основные свойства классов
Базовые классы Visual FoxPro хранятся в библиотеке самого пакета. Базовые классы не могут быть изменены пользователем и являются заготовками для создания пользовательских приложений. Однако, в каждом конкретном случае могут потребоваться какие-то свои особенности в функциональности объектов программы, и тогда на основе базовых классов создаются подклассы
Например, на основе базового класса "Форма" можно создать пользовательский класс формы со своим цветом, размерами, кнопками перемещения по записям и т.д. На основе подкласса можно создавать сколько угодно объектов конкретных форм.
Класс ведет себя как "черный ящик", т.е. инкапсулирует в себе все свойства, события, методы, обеспечивая постоянство алгоритма функционирования, тем самым уменьшая количество ошибок программирования. Подкласс наследует свойства класса, но может прибрести и новые свойства. Например, при создании своего подкласса типа "Форма" мы может унаследовать такие стандартные элементы базового класса, как кнопки закрытия окна, изменения его размеров, способности формы перемещаться, изменять размеры и т.д. Во всех случаях данные элементы будут работать одинаково, и программисту нет необходимости их программировать заново и даже беспокоиться о том, что они могут работать не так, как они должны по определению.
Объекты наследуют все основные свойства подкласса, на основе которого они были созданы, и если требуется во всех объектах поменять какое-то свойство, например, цвет, это изменение надо произвести в подклассе. Оно автоматически будет унаследовано всеми объектами.
...
Рейтинг: 0 / 0
Объектная модель программы
    #35108989
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109437
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мамочки родные!!!

Я на выходных врос задал, мне дали 2 ответа ну я и ушел фтуман на раздумья, а тут ТАКОЕ началось!!!
Ну вопрос-то я задал так как сумел рассуждая на основе каких-то понятий в вфп, которые у меня есть. Может не совсем понятно Вам, нет, таки точно непонятно :)
Суть какая - до сих пор я малевал процедуру main.prg откудова все запускалось и в которой была, нет совсем недавно появилась процедура выхода из проги, и которая какбы останавливалась на read events. Затем бороздя данный форум я наткнулся на статейку про создание этого самого главного файла проекта, где было сказано в конце, что лучше всего создать кастомный объект goAрр, в котором посоздавать разные методы и далее это уже будет работа с его свойствами и методами. Тут-то я и прозрел маленько. Особенно потому, что общалсо немного с Игорем Копыриным, ведущим рубрику на subscribe.ru Язык FoxPro - от простой программы к жизни с комфортом. . Вот у него я прочитал такую идею, что он вначале создает в программе все необходимые объекты, начиная, конечно с Арр, т.е. у него там ОбъектЗаконы, объектЗоны и тд и тп.
Поскольку я прозрел и понял ЧТО имелось в виду (в прошлом году я ваще выпучив шары думал - ну нихрена себе какой интересный подход к созданию проги - но самому ниче было не понятно, нах создавать все этиобъекты и что оно ваще такое) то перешел к созданию этого самого оАрр. Мне понравилось. :) Я вынес отдельными методами серию SET-ов, подключение к SQL-серверу, афторизацию, выход из проги и тд. Кроме того создал пропертя типа Админ, SQLHandle и т.п. (вместо создания паблик-переменных). Все это хорошо и я начал думать дальше. Значит у меня в проге есть список работников. Думаю - надо создавать объект оРаботники, который сможет методами
1) Выдать нужного работнега (по конкретному условию)
2) выдать список работнегов (по конкретному условию)
3) выдать всех работнегов
4) работать со словарем Работнеги (Редактирование, Прием/Увольнение и тп)
5) Присовокупить к определенной группе работников их календарь распорядка работы с днями/часами
6) Получать от этого объекта что-типа доступен ли такой-то работник, согласно его календаря, на работе в такой-то день, такой-то час
7) и тд/тп
Такого плана объект естесственно должен быть не один в программе. Их будет довольно много.
А в меню мне нужно к примеру так - Меню Справочнеги, Пункт Работнеги. Сейчас там do form ListWorkerz with ADD|EDIT. А если у меня это уже объект, то я, скажем, даю в меню команду типа oWorkerz.ShowListOfWorkerz. Это означает что собственно oWorkerz уже должен быть и у него уже должен быть к этому моменту список работнегов, выбранный в курсор с SQL-сервера. Ведь я же не могу дать в меню несколько команд, например screen.addobj('Workerz') oWorkerz.Init, oWorkerz.ShowListOfWorkerz и тп, неговоря о проверке наличия oWorkerz. Стало быть мне теперь что? Нада в объекте оАрр малевать метод для этого пункта. В нем будет проводиццо проверка наличия нужного объекта и еси его нет - создавать, инициализировать, наполнять и все такое, а тогда уже давать oWorkerz.ShowListOfWorkerz
Иначе, если все объекты сразу же создать (а еще минингит по раздаче прав, ведь не каждому клиенту в принципе будет необходимо все, а в данный момент у меня это реашется путем расдачи админом доступа к опр. пунктам меню), а раз так, то штатный цилик 650х128Мб РАМы/вынь2000 будет у клиента умирать на месте, в свапе :)

вот... думаю более-менее разъяснил че имелось в виду.
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109478
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO... до сих пор я малевал процедуру main.prg откудова все запускалось ...Вы может и не поверите, но многие так делают до сих пор и будут продолжать делать...

По поводу ООП. Просто как было верно замечено выше, не все среды разработки позволяют делать то, что позволяет делать FoxPro... Отсюда и пошли все эти объекты с их свойствами и методами... Например, в C# просто с самого начала этому учат, потому как там нет как такового FrameWork, который нам уже дали с самого начала в FoxPro + очень просто отталкиваться от данных, а не от объектов. В .NET пока все надо создавать самому и SQL внутри кода был большим ни-ни, то есть вся обработка данных проще делалась в объектах, которые передавали данные в базу данных... С версией 3.5 подход начнет меняться и надо будет еще посмотреть, как начнет меняться идеология разработки программ на .NET...

Если Вы не применяли ранее объекты, то не переживайте - дело это нехитрое, просто понапридумывали много разных понятий и подходов вокруг всего этого (народ поназащищал диссертаций)... С практической точки зрения применяйте то, что Вам удобнее...

Good luck!

P.S. Насчет медленности работы - ООП действительно работает очень медленно. Многие пишут сначала менеджер объектов (что-то наподобие сборщика мусора) который держит открытыми только те объекты, которые нужны. Много лет назад я стоял перед выбором, перед которым стоите Вы, но победил разумный рационализм
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109598
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Стало быть мне теперь что? Нада в объекте оАрр малевать метод для этого
> пункта. В нем будет проводиццо проверка наличия нужного объекта и еси его
> нет - создавать, инициализировать, наполнять и все такое, а тогда уже
> давать oWorkerz.ShowListOfWorkerz


Ну ты же сам и ответил на свой вопрос. Если ты ВСЮ работу хочешь сделать
через классы - тогда это наиболее правильное решение.


Только в такой постановке задачи логичнее создавать объект oWorkez как
свойство класса oApp:

в oApp

if !PEMSTATUS(This, 'oWorkez' , 5) && Это свойство еще не добавлено

This.AddObject('oWorkez', 'classWorkez')

** Или так :

*This.AddProperty('oWorkez', createobject('classWorkez'))
endif

This.oWorkerz.ShowListOfWorkerz





Внешний вызов (не из oApp) может выглядеть так:

oApp.oWorkerz.ShowListOfWorkerz

Но это не правильно, т.к. лучше все таки через метод класса oApp, в котором
будет проверка на присутствие свойства oWorkez, на то что свойство oWorkez -
объект type('oApp.oWorkerz')='O' (или pemstats и vartype) and
!isnull(oApp.oWorkerz), а потом уже вызов методов вложенного (связаного)
объекта.




Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109601
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> в oApp
>
> if !PEMSTATUS(This, 'oWorkez' , 5) && Это свойство еще не добавлено
>
> This.AddObject('oWorkez', 'classWorkez')
>
> ** Или так :
>
> *This.AddProperty('oWorkez', createobject('classWorkez'))

** Или даже так:
* This.AddProperty('oWorkez')
* This.oWorkez = createobject('classWorkez'))

> endif


PS и тут Остапа понесло :)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109761
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСтало быть мне теперь что?

стало быть вначале научиться правильно
создавать классы,
правильно наследовать,
понимать, что у них должно быть изменяемое,
каким образом осуществить взаимод-е между объектами.

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

впечатление, что Вы ринулись в бой без понимания основ.

Код: plaintext
Иначе, если все объекты сразу же создать
если нужны, то сразу, если нет - то по мере необх-ти

авторP.S. Насчет медленности работы - ООП действительно работает очень медленно
ООП чего? Где и что работает медленно? Медленно взлетает кастом класс?
Странно. Тогда откуда появляются процедурные алгоритмы автор....идет более 5-ти часов ?

автора раз так, то штатный цилик 650х128Мб РАМы/вынь2000 будет у клиента умирать на месте
от чего? от 2-х коллекций и от 3-х, 4-х -50-ти поднятых объектов кастом?
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109774
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример коллекции,
которая динамически добавляет .... при необходимости


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
DEFINE CLASS col_dictcollection AS collection


	Height =  23 
	Width =  23 
	Name = "col_dictcollection"


	*-- Возвращает данные
	PROCEDURE getcursor
		lparameters tcDictionaryCode, 	;	
					tcSearchStr,		;
					tcWhere,			;
					toProperties,		;
					toBufDictionary		


		local llSuccess, llReturnObject, lnItem, loDictionary, lcSearchSrtType, tcWhereStrType
		llReturnObject = (parameters()= 5 )
		lcSearchSrtType = vartype(tcSearchStr)
		tcWhereStrType  = vartype(tcWhere)

		for lnItem= 1  to this.Count
			loDictionary = this.Item(lnItem)
			if loDictionary.cCode==tcDictionaryCode ;
			   and vartype(loDictionary.cSearchStr)=lcSearchSrtType  and loDictionary.cSearchStr==tcSearchStr ;
			   and vartype(loDictionary.cWhere)	   =tcWhereStrType 	 and loDictionary.cWhere==tcWhere
				llSuccess = .t. 
				exit
			endif
		endfor

		if llSuccess and used(loDictionary.cAlias)
			* нашли существующий буфер справочника
			if llReturnObject
				toBufDictionary = loDictionary
			endif
			return loDictionary.cAlias
		else
			=msg("Ждите ... Идет загрузка справочника...")
			if llSuccess
				* существует уже в коллекции такой буфер,
				* но курсор по каким-то причинам отсутствует
				* поэтому необходимо запросить данные
				if loDictionary.ExecSqlSelect()
					if llReturnObject
						toBufDictionary = loDictionary
					endif
					=msg()
					return loDictionary.cAlias
				endif
			else
				* буфера не существует
				* необходимо запросить данные и создать буфер
				loDictionary = createobject("cus_dictionary", ;
													tcDictionaryCode,	; 
													tcSearchStr, 		; 
													tcWhere 			; 
													) 
				if loDictionary.ExecSqlSelect() ; && запрашиваем курсор
					and this.Add(loDictionary)    && добавляем буфер в коллецию
					if llReturnObject
						toBufDictionary = loDictionary
					endif
					=msg()
					return loDictionary.cAlias
				endif
			endif
		endif
		=msg("Ошибка загрузки справочника!")
		return .f.
	ENDPROC


ENDDEFINE
...
Рейтинг: 0 / 0
Объектная модель программы
    #35109812
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯзык FoxPro - от простой программы к жизни с комфортом..

вот это - просто безобразие

Код: plaintext
1.
2.
3.
PROCEDURE вставить
INSERT INTO ХорошиеДела FROM NAME oХорошиДела
ENDPROC

нет, не в том, что автор именует объекты по-русски,
а в том, что издеваетя над фокспро,
не объявляю переменные, не задумывается над зоной вид-ти прем-х ,
не говоря уже о какой-то внятности и логичности
виз.программирования, построения библ.классов, ...
...
Рейтинг: 0 / 0
Объектная модель программы
    #35111566
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь нарваться на праведный гнев защитников ООП :), но все-равно поделюсь личным опытом.
VFP выросло из процедурного FPD многое что касается ООП добавилось, но отказываться от проверенных подходов только в дань моде ООП считаю не уместным. Знать о возможностях ООП надо, но не надо пытаться использовать их любой ценой. Курсор, например, не может быть свойством объекта. Отказаться от их использования? Зачем?
CTAC-KO Я вынес отдельными методами серию SET-ов, подключение к SQL-серверу, афторизацию, выход из проги и тд. Кроме того создал пропертя типа Админ, SQLHandle и т.п. (вместо создания паблик-переменных).
Я можно сказать на том же остановился. Сделал обертки для наиболее используемых наборов функций (работа с файлом, с Ini-файлом, запуск и ожидание завершения внешнего приложения и т.п.)

Лично для меня в ООП важен только принцип повторно используемого кода.
Если попытаться сформулировать в правило какой код собирать в объект, то оно будет звучать так: "Если какой-то кусок кода пишешь второй раз, надо скопипастить и задуматься, пишешь в третий раз - сделать класс и использовать его, на 4 раз исправить первые два на объект" На третий раз приходит уже четкое понимание того какие свойства и методы нужны объекту, на 4-й это либо подверждается, либо класс переделывается.
И то за исключением случаев когда можно обойтись функцией и вставить ее в файл подцепляемый по SET PROC
CTAC-KOВсе это хорошо и я начал думать дальше.

Значит у меня в проге есть список работников. Думаю - надо создавать объект оРаботники, который сможет ...
А в меню мне нужно к примеру так - Меню Справочнеги, Пункт Работнеги. Сейчас там do form ListWorkerz with ADD|EDIT. ...
А форма разве не объект? На мой взгля форма самый идеальный базовый класс для простых объектов бизнес-логики. Курсор не может быть свойством объекта, он виден всем в DE, а если форма с PrivateDataSession, то курсор на форме становится ее свойством. Создать несколько однотипных форм фокс не запрещает. Производный класс раве что не создашь.
На мой взгляд достаточно нескольких классов форм (я так делаю):
1. clsForm (производный от Form) - прописан Resize(), создание пункта меню при получении фокуса, запуск модально/немодально, автоизменение размера шрифта, контроль повторного открытия формы и еще кое-что по мелочи
2. clsFormBSpr (производный от clsForm) - работа со списком записей, есть грид и набор кнопок (добавить, удалить ...)
3. clsFormESpr (производный от clsForm) - работа с одной записью, есть набор кнопок (сохранить, отмена)
и т.д. (есть еще clsFormBDoc, clsFormEDoc для документов с табличной частью, clsStepForm - для сложных расчетов с показом шагов и прогрессбаром)

Создав две формы на основе clsFormBSpr и clsFormESpr, добавляю в DE нужную таблицу или КА, на первой настраиваю колонки в гриде, на второй поля ввода. Остальное взаимодействие между этими формами прописано в классах форм (поиск, добавление, правка, удаление, копирование, ввод с возможностью отмены сохранения и т.д.). В 80% случаев этого достаточно чтобы за пару минут сделать интерфейс для простого справочника, в остальных случаях прописываются ньюансы обработки и отображения конкретных данных.
Все что касается бизнес-логики, то часть работы со списком добавляется в форму списка, часть касающаяся обработки конкретной записи в форму обработки записи. Если надо - всегда можно вызвать DO FORM ... NOSHOW
И самый главный плюс формы - ее можно запустить одним мышекликом, в отличии от классов в VCX. Классы в PRG наверно "не умею готовить"

Бывают ситуации когда такого подхода недостаточно. Например какая-то сложная логика, которую необходимо использовать на разных формах, вот в этом случае необходимо заводить отдельный класс для описания и использовать его из всех заинтересованных форм.
...
Рейтинг: 0 / 0
Объектная модель программы
    #35112435
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо авторЯзык FoxPro - от простой программы к жизни с комфортом..

вот это - просто безобразие

Код: plaintext
1.
2.
3.
PROCEDURE вставить
INSERT INTO ХорошиеДела FROM NAME oХорошиДела
ENDPROC

нет, не в том, что автор именует объекты по-русски,
а в том, что издеваетя над фокспро,
не объявляю переменные, не задумывается над зоной вид-ти прем-х ,
не говоря уже о какой-то внятности и логичности
виз.программирования, построения библ.классов, ...
Вы зря стучитесь в открытою дверь (да еще так громко и требовательного)!
Нет тут противников ООП. Все только за, но... VFP не есть полностью ООП язык.
Ну например, рабочие его области со всем, что там открыто ну ни как не "ложаться" в концепцию ООП, а отчеты, а меню? Все попытки придумать для них ООП-ную обертку только загоняет проблему вглубь этих оберток. Это его и недостаток и достоинство. Вот он такой, этот VFP и мы за это его используем. Это, как машина без ограничительей по скорости и маневренности: Плохой водитель расшибется, а хороший выжмет все, что можно.
Все это тут неоднократно обсуждалось и я, например, больше не буду участвовать в этой дискуссии.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Объектная модель программы
    #35112540
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордань моде
да нет, не моде..
это попытка еще раз рассказать о подходе, который:
- повышается производительность труда программистов и снижаются трудозатраты;
- повышается надежность программ.

авторВы зря стучитесь в открытою дверь
я не стучусь, а просто хочу продемонстировать
координально противоп-е решения задач,
начать с малого и объяснить почему и как,
а начинается сыр-бор с примеров, занимающих 3КБт

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


авторVFP не есть полностью ООП язык
и что? не нужно обучать наследованию, написанию библиотек?
использованию методов и принципов ООП?
так нет-же ничего, авторы в изданиях ограничиваются 2-мя страницами
печатного текста

автори я, например, больше не буду участвовать в этой дискуссии.

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

авторКурсор не может быть свойством объекта
GETCURSORADAPTER( [ cAlias ] ) .... + так страниц на ацать обоснований противопоожного
авторА форма разве не объект?
это ужас, летящий на крыльях ночи
авторКлассы в PRG наверно "не умею готовить"

вот как раз там "готовить" их и не нужно,
чем постить, лучше наберитесь терпения и я расскажу,
пр виз-е и невиз-е классы и чем отл-ся
созд-е виз-х библиотек от "готовить в прг"

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

Вот про это и весь разговор.
я и твержу все время,
анализ, анализ, синтез, синтез, снова анализ ...
вот про это будет следующие сообщение

автор Например какая-то сложная логика, которую необходимо использовать на разных формах, вот в этом случае необходимо заводить отдельный класс для описания и использовать его из всех заинтересованных форм
логика не бывает сложной,
логика или есть или ее нет (т.е. на самом деле логика есть всегда - законы существуют
более 3-х тысяч лет) - есть понятие истинности и неистинности (ошибочности, ложности, изв. за каламбур)
вот когда все сложно - и выручает наследование в 5 уровней + взаим-е десятка классов,
в 3-- 5-ти виз-х библиотеках
...
Рейтинг: 0 / 0
Объектная модель программы
    #35112613
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПлохой водитель расшибется, а хороший выжмет все, что можно.

да, начинаем изучать приборы

простейшие примеры использования
ACCESS и ASSIGN методов
...
Рейтинг: 0 / 0
Объектная модель программы
    #35112720
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа третий раз приходит уже четкое понимание того какие свойства и методы нужны объекту, на 4-й это либо подверждается, либо класс переделывается.


для того, чтобы этого не происходило,
необходим анализ и синтез

необходимо правильно мыслить, используя законы и методы Логики.
необходимо уметь правильно обобщать и правильно производить операции
деления объемов,
необходимо правильно находить существенные и несущественные признаки предметов,
правильно абстрагироваться от действ-ти

данный рисунок - это круги Эйлера,
которые как Вы видите они различны, в зависимости от того
по какому основанию судить о классах.

если кому-то интересно, то я продолжу данную ветку, если нет, то уж
извините - "и вот закрыта в сказку дверь и ты не ...."
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113153
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://forum.foxclub.ru/read.php?28,317228

авторВсе только за, но... VFP не есть полностью ООП язык.

авторЯ всегда говорил, что в фоксе наиболее продвинутая модель ООП. Технология опередила свое время :)

крайне противоположные мнения
..истина где-то рядом...
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113216
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо
Что-то я совсем перестал понимать автора ;-/
Вот пример с ACCESS и ASSIGN он подтверждает (опровергает) какое утверждение из вышесказанных? Или круги с бубнами? Это все здесь по какому вопросу?
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113275
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторон подтверждает (опровергает)

что ж ты злой то такой

да ничего я подтверждать не хочу и опровергать не хочу

я показываю класс, свойство и методы

кому интересно - посмотрит, может не знает.


это азы ООП,
азы проходим,
смотрим что есть в фокспро, что можно использовать
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113289
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
показал классический пример
( отличие, совсем иной подход к реализации )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
* процедурное программирование
tt =  10 
? tt
tt =  20 
? tt

* ООП
мойбубен = newobject('pp')
мойбубен.ff =  10 
мойбубен.ff =  20 
define class pp AS custom
	ff = null
	procedure ff_assign
		lparameters tnValue
		THIS.ff = tnValue
		? tnValue
	endproc
enddefine 


авторЧто-то я совсем перестал понимать автора

что не так-то?

хочу объяснить начинающим что и как
чтобы не пугались проектов в соурсах фокспро

что не так я делаю?
почему столько возмущений?
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113320
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторKruchinin Pahan

вот чтобы это начать понимать
http://fox.wikis.com/wc.dll?Wiki~VFPDesignPatternCatalog

нужно начать понимать классы,
нужно начать понимать абстракцию,
нужно понимать, что если мы начнем абстрагироваться,
то нам нужно сравнивать классы, объекты по каким-то основаниям,
почему могут быть предметы сравнимые, несравнимые ....
как объемы ограничить, как выделить ...
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113351
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что не так я делаю?
почему столько возмущений?
Александр, форма подачи не та. Способы аргументации. Способы ведения дискуссии. Даже если пишешь и правильно по сути.
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113380
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> что не так я делаю?
> почему столько возмущений?
>
> Александр, форма подачи не та. Способы аргументации. Способы ведения
> дискуссии. Даже если пишешь и правильно по сути.

Согласен с Sergey Sizov.

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

Про классы очень интересно. И новичкам будет очень полезно.

Если сможете поделится своим видением (или процитировать, что тоже хорошо
( а лучше и то и то)), не говоря что другие дураки, которые ничего не
понимают, то с удовольствием и я почитаю.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113391
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда застолбим здесь высказывание, поставив жирную точку

автор
при использовании ООП:
- повышается производительность труда программистов и снижает трудозатраты;
- повышается надежность программ.


и успокоимся


авторформа подачи
да я вот не делаю, и видел реализаций ...
да нет, просто ...
я не умею, я не .., это мода
и мне не нужно, но я вот воткну свои круказюльки ...
но формы как чесал, так и буду ...
ну вот и все
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113397
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне говоря что другие дураки, которые ничего не
понимают

покажи, где я это написал?
...
Рейтинг: 0 / 0
Объектная модель программы
    #35113398
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимо авторА форма разве не объект?
это ужас, летящий на крыльях ночи
Ничто так не меняет точку зрения как удар в глаз. Свои эмоции надо аргументировать. Цитат из мультфильмов недостаточно.
прошелмимоэто попытка еще раз рассказать о подходе, который:
- повышается производительность труда программистов и снижаются трудозатраты;
- повышается надежность программ.
...
логика не бывает сложной,
логика или есть или ее нет (т.е. на самом деле логика есть всегда - законы существуют
более 3-х тысяч лет) - есть понятие истинности и неистинности (ошибочности, ложности, изв. за каламбур)
вот когда все сложно - и выручает наследование в 5 уровней + взаим-е десятка классов,
в 3-- 5-ти виз-х библиотеках
Ага. Смотришь на этот изнаследованный код, лазишь по методам всех уровней и материшь про себя того джедая с бластером и красным мечом, который это напроектировал. Даже если это твой собственный проект законченный год назад и благополучно забытый. И в чем тут высокая производительность? В том что при внесении изменений самый нижний класс надо просмотреть и протестить всех наследников? Это повышает надежность? Или проекты выполненные по всем правилам теории ООП так хороши что не требуют внесения изменений? Инкапсуляция и наследование красивы только в теории, а на практике приходится жертвовать теорией в угоду производительности.
На мой взгляд понятней и надежней использовать свойства-объекты, чем наследование. Хотя тестить при изменении тоже не мало.

А у меня библиотека базовых форм едина на все проекты, постоянно используется, доработки не требует, поэтому не надо долго вспоминать что там к чему. В 99% времени работы с программой нужна именно визуализация, так почему бы не делать объекты на основе форм? В чем ужас? Про последовательность инитов в курсе. Чем это не ООП?
1. В форме легко собирается весь код для работы с конкретным объектом. Весь код и данные в одном месте. В случае чего поправил, быстро протестил и забыл.
2. Форму элементарно запускать (особенно в процессе разработки)
3. На форме простановка ControlSource делается мышекликами, а в VCX приходится руками писать

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

прошелмимоя и твержу все время,
анализ, анализ, синтез, синтез, снова анализ ...
А работу когда работать? Производительность производить?
Для анализа надо сначала досконально изучить предметную область. Ладно если проект большой есть отдельный аналитик, который только этим и занимается, круги с квадратами рисует, а если я все в одном? Потеря времени на излишний анализ явно мою суммарную производительность не повысит.
Я предпочитаю максимальное время анализа уделить проектированию структуры БД, чтобы можно было все данные правильно хранить, чтобы потом с нуля не переделывать, а все остальное строится уже от БД.

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

Любой написанный разработчиком код это результат его собственного опыта и знаний. Это и есть стиль программирования, то что он сочетает в себе различные классические теории и особенности языка программирования - это нормально. И то, что эти сочетания индивидуальны для каждого разработчика это тоже нормально. Если преуспевающий разработчик пишет код идущий в разрез всех канонов программирования, то от чего его успех? Почему он должен что-то менять только потому что так не положено? Знать законы надо и для того чтобы их умышленно нарушать.

Самое сложное для разработчика - понять предметную область, правила по которым работают его будущие пользователи, чтобы не получались велосипеды с квадратными колесами, слепленные по всем каконам теорий программирования, со слов заказчика, считающего многие вещи "общеизвестными" и не требующими упоминания.

PS Извини за резкость :)
...
Рейтинг: 0 / 0
25 сообщений из 108, страница 2 из 5
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объектная модель программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]