Мой подход. Ядро - Движок.

 

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

На первых парах, ООП был мне понятен и даже близок. Я знал что такое "Объект", "Структура", "Класс" в философском контексте. Углубление программирования в философию мне очень нравилось и зажигало интерес. И я почти взялся за серьезное изучение... Но, в процессе я чувствовал нарастание сопротивления. Отторжение чужой философии. И это отторжение росло. 

Я с детства привык мыслить философски. И в программировании я нашел философию. В какой то момент, она мне понравилась. Но, моя мысль неизменно, стремилась сломать чужую концепцию. Побороть ее. Для чего? - чтобы победить и установить свой порядок. 

Испокон веков, философские концепции "воевали" друг с другом. И для меня, как прирожденного философа, концепция ООП стала личным вызовом.


Но, это всего лишь предистория. 

И так, все началось почти 4 года назад. 

Тогда, в простом процедурном стиле я создавал панели. И мне пришла идея, объединить свойства графических объектов в одном массиве. Я подумал, что это будет удобно. Для чего? 

  1. Делать цикл по объектам и менять их свойства.
  2. Связывать объекты между собой.
  3. Получать значения свойств объектов простым обращением к массиву.

Так родилась идея "Ядра". 

В ООП, отсутствует понятие "Ядра". ООП предлагает строить ансамбль из классов и структур, но не дает фактического центра программы. Только условный. Объекты в ООП, на самом деле являются ссылками. Средствами описания и ключами доступа. Связка классов напоминает сложную нецентрализованную сеть. ООП заточено на построении архитектуры программы. ТО ЕСТЬ, ПОСТРОЕНИЕ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ ПРОГРАММЫ - ГЛАВНАЯ ЗАДАЧА ООП.

Мой подход, также имеет понятия Объекта. Однако, "Объект" в моем подходе, намного более вещественнен. Это сборка из свойств. При этом, мой подход игнорирует важность конкретной Архитектуры программы. Архитектура складывается в соотвествии с требованиями эффективности программы, а не удобства программиста. Это упрощает синтаксис и уменьшает количество правил.

В Природе понятие Ядра присутствует повсюду. Ядро есть в каждой клетке организма. Ядро есть у небесных тел. У Земли, Солнца. Ядро есть у плодов растений из которых появляются новые растения. И НИГДЕ в Природе, Архетиктура не поставлена выше Эффективности. Поэтому, Природа не создает прямых линий и живые существа не состоят из блоков. Но, человек слабее Природы и нуждается в запоминающихся схемах, расстановке, классификации. Человек воспринимает мир фрагментарно, и воспроизводит его тоже фрагментарно. 

Концепция ООП очень хорошо отражает природу человека. 

Но, вернемся к моему подходу: 

  • И так, ОБЪЕКТ - это сборка из свойств.  
  • Ядро - это пространство памяти, в котором существуют Объекты.

На практике, - Ядро это матрица. Объект - вектор.

Матрица может содержать множество векторов. И это - граница основных правил моего подхода. Далее, я покажу примеры того, что с этим можно делать.







 
Сразу вопрос: где открытый код?
 
Vladimir Karputov:
Сразу вопрос: где открытый код?

Я выложу код и примеры. Это предисловие.

 
Реter Konow:

Я выложу код и примеры. Это предисловие.

Открытый код?

 

Во ! Давай, Петер, мне тоже интересен твой подход.  Даже без всяких кодов (Владимир, не мешай человеку, давай сперва послушаем).

 
Опять вода в ступе
 

У меня чувство дежавю какое-то.

Но т.к. сейчас читать особо нечего, очередная тема от Петер вполне зайдет.

 

Женя, Вася, вот вы нетерпеливые... Дайте человеку высказаться !

 
Georgiy Merts:

Женя, Вася, вот вы нетерпеливые... Дайте человеку высказаться !

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

 

Пример объявления графического элемента, представленного в Ядре:

_OBJECTS_SET,BUTTON,
//------------T------X----Y----W-----H----B_TYPE-- MOB---PXL-----------G------------C----SG--SC--OBJSCR--NEUTRAL----GRADIENT--A1--B1--C1-----------A2----B2--C2----------A3----B3--C3--------A4--B4--C4-------OBH--OBI--C5--D5--E5--------------------------------------------------------------------------------------------------------------ACT-STATUS--CURRENT-----CURRENT---LAST--------------------------------------------
//Основание кнопки--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,  5,     0,   0,   100,  25,  _STRIP, _CNVS, 1,  _aw1,BUTTON,   0,_MOB,    0,    _aw1, C'245,245,245',  FR_32,  _C2C,_CNVS, 0,  FR_33,  _C2C,_CNVS, 0,   FR_32, 0,    0,   0,   A4, 0, 0,  0,    A5,0,  0,  0,  0,  0,   A6,  0,    A7, 0,       0,        0,        0,        0,       FR_32,        FR_33,       0,      0,       0,       0,         0,         0,       0,       0,   A8,  0,  0,  0,  

             A9, CLICKED_RELEASED, C'230,230,230',  0,  _C_PIXEL,  _C_PIXEL,    _C_PIXEL,    _C_PIXEL,    C'245,245,245',   _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Лейбл кнопки--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,  5,     0,    0,   0,  0, _LABEL, _CNVS,  0,  _aw3,BUTTON,  _EL,   0,   0,    _aw1, _NS_gr1,   A1, _X2X, _aw1,   7,   A2,  _C2C,  _aw1,  0,  A3,  0,    0,   0,   A4,  0, 0,  0,      A5,0,0, _aw1,  0,  0,   A6,  0,    A7,0,    0,        0,        0,        0,        0,        0,    0,      0,       0,       0,         0,         0,       0,       0,   A8,  0,  0,  0,  

             A9, 0, 0,   0, 0,   0,  0,    0,    0,  0,  0,  0,  0,  0,  0,     _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Текст наименования кнопки --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,  5,     0,   0,    0,  0,  _TEXT_, _CNVS,  0,  _aw2,BUTTON,_OCN,   0,    0,    _aw1, 0,     A1,  _C2C,_aw1,  0,   A2, _C2C,_aw1, 0,     A3,  0,    0,   0,   A4,  0, 0,  0,    A5,0,  0,  0,  0,  0,  A6,  0,  A7, 0,       0,        0,        0,        0,        0,        0,        0,      0,       0,       0,         0,         0,       0,       0,   A8,  Microsoft_JhengHei_Light, FW_NORMAL,  8,   

             A9, 0, 0,  0, C'100,100,100',   C'100,100,100',  0,    0,    0,  0,  0,  0,  0,  0,  0,   2,1,1,   1,0,  _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_END_,

  1. Объявление Элемента:   _OBJECTS_SET,BUTTON,


2. Объявление Объекта внутри Элемента - _NEW_OBJECT

Далее, после объявления Объекта идут значения свойств. Размеры, цвета для различных состояний, привязки объектов между собой...


Все это вместе представляет из себя прототип одного элемента - Кнопки.

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

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




 
Реter Konow:

В ООП, отсутствует понятие "Ядра". ООП предлагает строить ансамбль из классов и структур, но не дает фактического центра программы...

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