ієнта процесом трасування буде забезпечуватися менеджером трасування.
Після того, як основні сутності були виділені, слід перейти до їх формалізації. Обгорнемо кожну сутність у клас з коротким описом полів і методів класів. p> Розглянемо сутності В«контактна площадкаВ» і В«провідникВ». Обидві сутності представляють собою дискретний елемент, що розташовується в комірці сітки В«поле трасуванняВ». Обидві ці сутності мають однакові властивості, такими як розмір і позиція. Крім того, слід ввести властивість В«тип елементуВ», яке б визначало його тип. Наприклад, стан контактної площадки (вільна, слінковать, розлучена), напрямок провідника (направо, направо-ввехр і т.д.). Єдина відмінність даних сутностей (в рамках реалізованої завдання) полягає в їх зовнішньому вигляді. Переходячи до формалізації цих сутностей можна виділити окрему сутність В«елемент трасуванняВ», яка була б батьківського по відношенню до сутностей В«контактна площадкаВ» і В«провідникВ». Коректність спадкування можна перевірити таким твердженням: В«контактна площадкаВ» є В«елементом трасуванняВ» і В«провідникВ» є В«елементом трасуванняВ». p> Переходячи безпосередньо до класів, отримуємо:
В
Рисунок 2 - Діаграма класів
Як було зазначено вище, класи TTracePad, TTraceWire відрізняються один від одного зовнішнім виглядом. Клас TTraceElement абстрактний, який не має зовнішнього вигляду, тому що є узагальнюючою сутністю. Виходячи з цього, в класі TTraceElement слід виділити абстрактний метод Paint, який реалізовуватимуть нащадки TTracePad, TTraceWire. Наведемо сигнатуру класу TTraceElement:
TTraceElement = class
private
aWidth, aHeight: integer;
xpos, ypos: integer;
aType: integer;
aCanvas: TControlCanvas;
protected
procedure Paint; virtual; abstract;
property Canvas: TControlCanvas read aCanvas;
property Width: integer read aWidth write aWidth;
property Height: integer read aHeight write aHeight;
public
property Top: integer read ypos;
property Left: integer read xpos;
property ElementType: integer read aType;
constructor Create (pCanvas: TControlCanvas; pWidth, pHeigth, pxpos, pypos, pType: integer);
destructor destroy; override;
end;
Розглянемо поля класу TTraceElement:
aWidth - ширина елемента;
aHeight - висота елемента;
xpos, ypos - координати елемента;
aType - тип елемента;
aCanvas - канва, на якій буде малюватися елемент.
Тип поля aCanvas - TControlCanvas. Об'єкти даного типу мають посилання на об'єкт типу TControl, який дозволяє отримати розмір графічного елементу, на якому відбувається процес малювання. Розмір необхідний для забезпечення масштабування при зміні розміру графічного елементу. У класу TTraceElement оголошені властивості public: Top, Left, ElementType; Властивості мають директи...