.
Соционика в программировании. "Социотип" компонента TForm.
Автор megabax   
01.04.2010 г.
New Page 1

Соционика в программировании. Социотип компонента TForm.

Как то в дороге я читал книгу Савелия Калашникова "Соционика - наука общения", в котором описывались разные психотипы людей и то, как они взаимодействуют между собой. "Какое отношение это имеет к программированию?" - спросите вы. "Все дело в том", - отвечу я, - "Что автор книги толкнул интересную мысль: психотипом по соционике обладают не только люди, но и неодушевленные предметы. Более того, можно даже построить модель взаимодействия людей с техникой, руководствуясь именно теорией психотипов, как будь-то они взаимодействуют с реальным людьми. Это, по мнению Савелия Калашникова, позволит оценить, насколько человек с тем или иным психотипом подходит для профессии, например, летчика или программиста. Иными словами, насколько он найдет общий язык с самолетом или компьютером".

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

А теперь давайте возьмем какую нибудь отдельно взятую небольшую программу и проанализируем ее с позиции соционики. Возьмем например программу складского учета из уроков Delphi. Проанализируем на совместимость компоненты, используемые в программе.  И так, начнем с самого главного компонента TForm.

Интроверт или экстраверт? Давайте посмотрим, как объявлен класс TForm в самом Delphi:

TForm = class(TCustomForm)
public
    procedure ArrangeIcons;
    procedure Cascade;
    procedure Next;
    procedure Previous;
    procedure Tile;
    property ActiveMDIChild;
    property ClientHandle;
    property DockManager;
    property MDIChildCount;
    property MDIChildren;
    property TileMode;
published
   property Action;
   property ActiveControl;
   property Align;
   property AlphaBlend default False;
   property AlphaBlendValue default 255;
   property Anchors;
   property AutoScroll;
   property AutoSize;
   property BiDiMode;
   property BorderIcons;
   property BorderStyle;
   property BorderWidth;
   property Caption;
   property ClientHeight;
   property ClientWidth;
   property Color;
   property TransparentColor default False;
   property TransparentColorValue default 0;
   property Constraints;
   property Ctl3D;
   property UseDockManager;
   property DefaultMonitor;
   property DockSite;
   property DragKind;
   property DragMode;
   property Enabled;
   property ParentFont default False;
   property Font;
   property FormStyle;
   property Height;
   property HelpFile;
   property HorzScrollBar;
   property Icon;
   property KeyPreview;
   property Menu;
   property OldCreateOrder;
   property ObjectMenuItem;
   property ParentBiDiMode;
   property PixelsPerInch;
   property PopupMenu;
   property Position;
   property PrintScale;
   property Scaled;
   property ScreenSnap default False;
   property ShowHint;
   property SnapBuffer default 10;
   property VertScrollBar;
   property Visible;
   property Width;
   property WindowState;
   property WindowMenu;
   property OnActivate;
   property OnCanResize;
   property OnClick;
   property OnClose;
   property OnCloseQuery;
   property OnConstrainedResize;
   property OnContextPopup;
   property OnCreate;
   property OnDblClick;
   property OnDestroy;
   property OnDeactivate;
   property OnDockDrop;
   property OnDockOver;
   property OnDragDrop;
   property OnDragOver;
   property OnEndDock;
   property OnGetSiteInfo;
   property OnHide;
   property OnHelp;
   property OnKeyDown;
   property OnKeyPress;
   property OnKeyUp;
   property OnMouseDown;
   property OnMouseMove;
   property OnMouseUp;
   property OnMouseWheel;
   property OnMouseWheelDown;
   property OnMouseWheelUp;
   property OnPaint;
   property OnResize;
   property OnShortCut;
   property OnShow;
   property OnStartDock;
   property OnUnDock;
end;

Мы видим огромное количество свойство и методов published и public. У его  предка TCustomForm много private и protected свойств, но большинство из них в TForm превращаются в published и public, а некоторые приватные поля дублируют public свойства. Если пойти по иерархии TForm дальше по направлению к родительским классам, то мы увидим, что у его предков много приватных и protected полей и методов. Из этого мы можем сделать вывод, что интроверсии и экстраверсии у класса TForm примерно одинаково. Но, форма у нас отображает данные на экране. Это уже говорит в пользу экстровертности. И так, TForm у нас типичный экстраверт.

Сенсорик или интуит? На какой вид поступающей  информации более всего ориентирован объект класса TForm? От внешних устройств (клавиатура, мышка) или от других объектов? Конечно же первое, на то она и форма. Значит, это сенсорик.

Этик или логик? (вот я загнул то, а). Данный объект больше предназначен для взаимодействия с другим объектами, так что это все же этик, а не логик.

И, наконец, рационал или иррационал?  Данный объект не использует циклические приближенные вычисления, в нем нет функции адаптации к изменяющейся внешней среде. Явный рационал. Этот класс можно назвать так же и рационалом еще и  потому, что он понятен и предсказуем. собственно говоря, это можно сказать и про многие другие классы. Давайте сейчас немножко отвлечемся и подумаем, а какие классы могут считаться иррациональными? К иррациональным классам я бы отнес все компоненты для работы с сетью, COM, OLE, ActiveX и другие подобные. Почему? Да потому, что у них достаточно сложно организованы внутренние алгоритмы. Возможно, это лишь мое IMHO. Кто то, наверняка думает иначе. Ну что-ж, в этом случае если этот человек будет использовать соционический подход к программированию, у него будет другой стиль написание кода, более подходящий именно ему.

Ладно, раз уж "пошла такая пьянка", давайте еще пораскинем мозгами, а какой же класс может быть, в отличии от формы, интроверт, интуит и этик?

И так, начнем с интроверсии. Однозначно к интроверту я бы отнес TTable, так как он предназначен для работы с таблицей базы данных, но не содержит средств для их отображения. А вот если рассматривать с этих позиций TDBGrid, то он у нас будет экстравертом. Класс TDataSource смело можем отнести к интуитам, он ничего не принимает ни от клавиатуры, ни от мыши, и ничего не выводить на экран, хотя и осуществляет обмен данными между компонентами для работы с БД и компонентами визуального отображения данных. Он же относиться и к компоненту типа этик. А кто у нас будет логиком? Ответ прост TTable.

Теперь определим "тип личности" компонента TForm. Это "Гюго" - рациональный этико-сенсорный экстраверт.

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

 

Последнее обновление ( 05.02.2013 г. )