Вопрос знатокам ООП. - страница 52

 

Посмотрел через свою новую призму - гибрид ООП и Ядра, на объектные системы описанные в программах, - чуть мозг не лопнул. В первую очередь, по новому взглянул на системы своего ГУИ. Через все эти объекты-параметры, объекты-состояния, объекты-события и объекты-обработчики. Поскольку ГУИ и его технология мне известны, все представилось довольно четко, но, система нарисовалась очень сложная. Масса параметров, связок и обработчиков. Пришел к выводу, что такие системы сами возникать никак не могут. И естественный отбор здесь бессилен.)))

Вот почему:

Каждый параметр может иметь n-ное количество производных параметров. Скажем: изменение Х может породить бесконечно много производных параметров от значений  этого Х в каждый момент времени.

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

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

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

Таким образом, без концепции, никакая система не может возникнуть. (Скорее всего).

Непонятно только, как зародилась жизнь на Земле...

 

Приведу еще пример:

Рассмотрим систему перемещения окна с элементами управления по графику.

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

Таким образом, благодаря этой системе, мы можем менять координаты окна и его объектов на событии ухвата его ручки курсором. Для перемещения нужно связать все это с функциями-обработчиками ObjectSetInteger которые меняют расположение МТ-объекта на графике.

Это реализация всего одной функции ГУИ методом связи специальных системых блоков - Объектов-параметров, Объектов-обработчиков и т.д...

Построить такую систему в Ядре, ни чуть не проще (а может и сложнее), чем написать обычный код, не превращая все подряд в Объект. Но, я буду копать дальше...


ЗЫ. Забыл добавить, что для перемещения окна нужно еще "смастерить" Объект-событие, фиксирующее нажатие на ручку окна и перемещение курсора. И этот Объект-событие соединить связкой с Объектом-обработчиком значений х,у курсора (что записывает разницу в производные параметры), что бы тот работал только по сигналу этого события.

ЗЫЫ. А для каждого Объекта-события нужно создавать свой Объект-обработчик и соединять его с ним.

ЗЫЫЫ. А каждый Объект-обработчик имеет свои свойства, значения которых он использует при работе с параметрами или событиями. Следовательно, должен быть шаблон, иначе, можно "запариться" все это создавать.))

 
Реter Konow:

Приведу еще пример:

Рассмотрим систему перемещения окна с элементами управления по графику.

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

Таким образом, благодаря этой системе, мы можем менять координаты окна и его объектов на событии ухвата его ручки курсором. Для перемещения нужно связать все это с функциями-обработчиками ObjectSetInteger которые меняют расположение МТ-объекта на графике.

Это реализация всего одной функции ГУИ методом связи специальных системых блоков - Объектов-параметров, Объектов-обработчиков и т.д...

Построить такую систему в Ядре, ни чуть не проще (а может и сложнее), чем написать обычный код, не превращая все подряд в Объект. Но, я буду копать дальше...


ЗЫ. Забыл добавить, что для перемещения окна нужно еще "смастерить" Объект-событие, фиксирующее нажатие на ручку окна и перемещение курсора. И этот Объект-событие соединить связкой с Объектом-обработчиком значений х,у курсора (что записывает разницу в производные параметры), что бы тот работал только по сигналу этого события.

ЗЫЫ. А для каждого Объекта-события нужно создавать свой Объект-обработчик и соединять его с ним.

ЗЫЫЫ. А каждый Объект-обработчик имеет свои свойства, значения которых он использует при работе с параметрами или событиями. Следовательно, должен быть шаблон, иначе, можно "запариться" все это создавать.))

Сложно. Неоправданно сложно.
Главный объект формы, внутри которого лежат остальные объекты этой формы - только он получает координаты. Изменение любой координаты меняет положение главного объекта формы. Остальным объектам этой формы просто передаются относительные координаты, определяющие их местоположение внутри формы. Все объекты имеют свой порядок расположения в форме, и перестраиваются в этом порядке. У каждого объекта есть список того, что он содержит внутри себя. Обращение через список к содержимому позволяет послать каждому содержимому команду на смещение. Таким образом, дав команду объекту-форме сместиться, по цепочке автоматически передаются команды сместиться всему содержимому формы. Т.е., смещение делаем только для формы, а всё остальное будет смещено автоматически. Нам не нужно будет самостоятельно давать каждому объекту формы команду на смещение.
Всё делаем только для одного объекта. Все остальные будут это повторять. Каким бы сложным ни был объект формы, одна команда на смещение формы будет лавинообразно передана всему содержимому этой формы.
Всё делаем только один раз. А далее - всё будет делаться по цепочке.
 
Artyom Trishkin:
Сложно. Неоправданно сложно.
Главный объект формы, внутри которого лежат остальные объекты этой формы - только он получает координаты. Изменение любой координаты меняет положение главного объекта формы. Остальным объектам этой формы просто передаются относительные координаты, определяющие их местоположение внутри формы. Все объекты имеют свой порядок расположения в форме, и перестраиваются в этом порядке. У каждого объекта есть список того, что он содержит внутри себя. Обращение через список к содержимому позволяет послать каждому содержимому команду на смещение. Таким образом, дав команду объекту-форме сместиться, по цепочке автоматически передаются команды сместиться всему содержимому формы. Т.е., смещение делаем только для формы, а всё остальное будет смещено автоматически. Нам не нужно будет самостоятельно давать каждому объекту формы команду на смещение.
Всё делаем только для одного объекта. Все остальные будут это повторять. Каким бы сложным ни был объект формы, одна команда на смещение формы будет лавинообразно передана всему содержимому этой формы.
Всё делаем только один раз. А далее - всё будет делаться по цепочке.

Все верно.

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

В моем ГУИ перемещение окна реализовано внутри функции делающей следующее:

(1) Проверяющей событие нажатия на ручку окна

(2) Событие перемещение курсора 

(3) Вычисляющей разницу между текущими координатами курсора и прошлыми

(4) Делающей цикл по объектами окна и меняющей их координаты поправкой разницы положения курсора.

(5) Вызывающей ObjectSetInteger для перемещения МТ-объекта формы окна (канваса) по графику на заданное расстояние.


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

 
Реter Konow:

Все верно.

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

В моем ГУИ перемещение окна реализовано внутри функции делающей следующее:

(1) Проверяющей событие нажатия на ручку окна

(2) Событие перемещение курсора 

(3) Вычисляющей разницу между текущими координатами курсора и прошлыми

(4) Делающей цикл по объектами окна и меняющей их координаты поправкой разницы положения курсора.

(5) Вызывающей ObjectSetInteger для перемещения МТ-объекта формы окна (канваса) по графику на заданное расстояние.


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

Да потому, что не нужно делать эти обработчики отдельно от объекта. Класс, возвращающий координаты курсора можно сделать статическим - он будет доступен любому классу программы, а получение координат и реакция на них должны быть реализованы в каждом объекте. Но вызов этих обработчиков должен быть только у главного объекта формы. Тогда для всех остальных объектов формы достаточно указать новые координаты и перерисовать. Внутри объекта-формы есть список всех его объектов. Объект-форма определил изменение своих координат - устанавливает новые значения своим координатам, идёт по списку своих объектов и вызывает методы установки координат каждого объекта в своём списке. При этом каждый очередной объект при изменении своих координат делает то же самое - просматривает список своих объектов и даёт им команду сменить координаты. В списках объекты расположены в порядке их отрисовки (Z-последовательность). Т.е., метод смены координат у каждого объекта свой, но реализован одинаково - просматривает список всех "своих" объектов и вызывает для каждого из них этот же метод. Таким образом, мы, разово вызвав у главного объекта-формы этот метод, автоматически запустим смену координат у абсолютно всех объектов формы. После завершения обработки всего списка "своих" объектов объекта-формы, вызывается его метод перерисовки чарта - единожны для всех изменённых объектов.

 
Artyom Trishkin:

... 

Это стандартный ООП-взгляд на механизм перемещения окна. Я покажу другой. Для этого, на секундочку очистите сознание и просто следуйте за моей мыслью. 

  1. Представьте массив-матрицу. Размеры не определены. Возможно, она бесконечна, возможно - нет. Это не важно.
  2. Матрица инициализирована нулями. Нули олицетворяют пустоту. То есть, - матрица пуста.
  3. В пустоте матрицы появилось нечто, отличное от пустоты. Это ноль сменился на некое значение. Не важно какое.
  4. Мы видим это значение в пустой матрице и говорим "это параметр". То есть, не само значение,  - а та ячейка в которой оно появилось. Ячейка удостоилась званием и названа параметром, - то есть "емкостью" содержащей значение.
  5. Параметр сразу же требует от нас своего определения. Он как бы говорит "я параметр, и у меня есть индивидуальность! Где мои свойства?!". И нам не остается ничего, как присовокупить к параметру его свойства, которые тоже параметры со своими значениями. Мы помещаем их рядом с ним и у нас получается цепочка  - параметр и его свойства. Мы говорим "мы создали Объект-параметр!".
  6. Далее, параметр "говорит": "А где другие параметры?! Почему я один?" И тогда мы создаем еще несколько параметров в пустоте матрицы, чтобы "первенцу" не было скучно. Конечно, каждый из новых параметров заявляет о своей индивидуальности и требует свойств, как ее носителей. Так вырастают цепочки из параметров, среди которых есть "первенцы"  и их свойства. Мы говорим "Мы создали Объекты-параметры!".
  7. Теперь в пустоте матрицы у нас несколько параметров с цепочками своих свойств. Но каждый из них "вопит" о бессмысленности своего существования. Каждый из них одинок. Тогда, мы решаем связать параметры, чтобы им не было "скучно". Для этого, мы создаем специальные параметры, которые служат связками между другими параметрами. Они тоже состоят из цепочек свойств. Теперь, параметры-первенцы связаны между собой параметрами связками. Все счастливы! Мы говорим "Мы создали Объекты-связки параметров!".
  8. Но, тут оказывается, что параметры-первенцы хотят общаться и передавать друг другу значения через связки, но связки предусматривают передачу значений (языка параметров), но не предусматривают перевода. А будучи одинокими, параметры понимают только свой язык, а значит, между параметрами возникает "языковой барьер" и они требуют от нас решения.
  9. Чтобы решить проблему "общения параметров" нам оказалось мало связок, нам потребовался перевод. Это означает, что передаваемые между параметрами значения нужно преобразовывать, учитывая свойства каждого из параметров. Кто то из них, понимает значения в диапазоне 1-10, а кто то (-5) - (-105). Кто то оперирует дробными числами, а кто то - степенями. Тогда, мы приходим к выводу, что нужны "переводчики", - то есть обработчики значений, учитывающие свойства параметров. Мы создаем специальные Объекты-обработчики и вставляем их в связки между параметрами. Объекты-обработчики значений "переводят" передаваемые значения между параметрами используя свойства параметров которые передают и принимают,и собственные свойства. Мы говорим - "Мы создали Объекты-обработчики! Теперь параметры могут свободно общаться!".
  10.  Параметры-первенцы общались, общались и надоело им. Устали. Тогда они решили, что будут общаться только по особым случаям - ну, когда у кого то из них невероятное значение выскочит. Но, оказалось, что за значением следить нужно, как за ребенком, без устали. Тогда попросили нас параметры-первенцы придумать какую то "систему контроля", которая бы сигнализировала о случаях необычных "выкрутасов" значений, чтобы они не парились на этот счет. И тогда, сделали мы слепок из значений, на которые нужно реагировать и поставили к нему спец. обработчик и получилось у нас "Объект-событие". Подключили мы его к каждому параметру-первенцу и стали они общаться по сигналам Объектов-событий. И вот, создали мы "Объект-событие".

Вот и сказки конец... 

Посмотрели мы на матрицу со стороны и ахнули! "Да мы же Объект-систему создали!"))

ЗЫ. Заметьте, что все можно создать в массиве-матрице. А массив-матрица и есть Ядро. А сущности в нем - самые настоящие объекты. И параметры, и события, и связки, и свойства, и обработчики. Систем которые можно соорудить в Ядре из этих базовых вещей - бесчисленно.

 

Шуточное продолжение...

11. Решили как то параметры-первенцы следовать моде. Узнали, что есть где то в матрице ярмарка свойств, а в новинке - некое пространство. Мол, целых три свойства имеет. "Измерения" называются. Выборка значений у этих свойств якобы бесконечна, а бонусом - еще "параметр-время" отдают. Пришли параметры на ярмарку и взяли себе свойства х,у,х_size,y_size. Оболочку говорят, хотим себе сделать, в пространстве. Ну, захватили еще цвет (color). Вернулись они и стали облачаться в новые свойства. Лепили, лепили себе пространственные оболочки, пока не устали. То вырастали непомерно, то схлопывались… Потом, цвета на себя надели и успокоились. Стали думать, что дальше... И тут, на коробочку свойства-времени взглянули. Дай думают, попробуем, что за штука... Открыли, приладили к себе, да не рассчитали значений и в миг испарились в пустоте. Ведь время, - это параметр с которым нужно быть очень осторожным... 

 
Реter Konow:

Шуточное продолжение...

11. Решили как то параметры-первенцы следовать моде. Узнали, что есть где то в матрице ярмарка свойств, а в новинке - некое пространство. Мол, целых три свойства имеет. "Измерения" называются. Выборка значений у этих свойств якобы бесконечна, а бонусом - еще "параметр-время" отдают. Пришли параметры на ярмарку и взяли себе свойства х,у,х_size,y_size. Оболочку говорят, хотим себе сделать, в пространстве. Ну, захватили еще цвет (color). Вернулись они и стали облачаться в новые свойства. Лепили, лепили себе пространственные оболочки, пока не устали. То вырастали непомерно, то схлопывались… Потом, цвета на себя надели и успокоились. Стали думать, что дальше... И тут, на коробочку свойства-времени взглянули. Дай думают, попробуем, что за штука... Открыли, приладили к себе, да не рассчитали значений и в миг испарились в пустоте. Ведь время, - это параметр с которым нужно быть очень осторожным... 

А первые десять было нешуточное?

Я, например, не могу читать без смеха.

 
Artyom Trishkin:

...

Вся эта "объектность" здорово мозги запутывает, согласитесь... С ней осторожным нужно быть. Николай Семко был прав, говоря о близости гениальности и шизофрении. Можно "поехать". Есть вещи, которые лучше не понимать. Некоторые двери, должны всегда быть закрыты для нашего Сознания. Как говорилось в одном фильме, - "самый опасный паразит - идея. Однажды попав в мозг, ее уже невозможно оттуда выковырять.". Матрица про которую я говорил - опасна для Разума. В ней легко заплутать и навеки потеряться. Будем же осторожны.)))

 
Представление систем в Матрице позволяет по новому взглянуть на их структуры, но никакого намека на облегчение создания систем я не увидел. Не говоря уже о каком то "само-развитии". Чертовски интересно именно так рассматривать системы, но не более. Я не вижу ни само-развития, ни даже намека на него. Поэтому, Божественное оставим Богу. Никакого саморазвития систем не добиться ни стандартным ООП-подходом, ни моим.
Причина обращения: