Ошибка:
Graphics.pas(146) : Класс Circle не реализует метод MoveOn(IStyledGraphicsObject) интерфейса Engine_6.GraphicsObjects.IMovable
Вот архив: Engine 6.rar (420,3 КБ)
Вот описание класса Circle:
  /// Окружность.
  Circle = class(StyledGraphicsObject, ICircle, ICloneable)
  private
    [ContractInvariantMethod]
    procedure PropertiesValidation();
    
  public
    /// Радиус.
    auto property Radius: real;
    
    constructor(__vector2D: Vector2D; radius: real);
    
    /// Возвращает рендер объекта.
    function GetRender(): IRender; override;
    
    /// Клонирует объект.
    function Clone(): object; override;
  end;
А вот StyledGraphicsObject:
using Engine_6.Tools;
using System;
using System.Diagnostics.Contracts;
namespace Engine_6.GraphicsObjects
{
    /// <summary>
    /// Простой визуализируемый графический объект.
    /// </summary>
    public abstract class StyledGraphicsObject : IStyledGraphicsObject, ICloneable
    {
        [ContractInvariantMethod]
        protected virtual void PropertiesValidation() => Contract.Invariant(Style != null);
        /// <summary>
        /// Стиль объекта.
        /// </summary>
        public IStyle Style { get; set; }
        /// <summary>
        /// Задаёт центр объекта.
        /// </summary>
        public Vector2D Center { get; set; }
        public StyledGraphicsObject(Vector2D center) => Center = center;
        // Для языков, требующих конструктор по умолчанию.
        public StyledGraphicsObject() : this(Vector2D.Default)
        {
        }
        /// <summary>
        /// Возвращает рендер объекта.
        /// </summary>
        /// <returns>рендер.</returns>
        public abstract IRender GetRender();
        /// <summary>
        /// Перемещает объект на вектор.
        /// </summary>
        /// <param name="vector2D">Вектор смещения.</param>
        public void MoveOn(Vector2D vector2D) => Center = new Vector2D(Center.X + vector2D.X, Center.Y + vector2D.Y);
        /// <summary>
        /// Перемещает объект к другому объекту.
        /// </summary>
        /// <param name="vector2D">Объект-цель.</param>
        public void MoveOn(IStyledGraphicsObject styledGraphicsObject) => Center = styledGraphicsObject.Center; // <--
        /// <summary>
        /// Клонирует объект.
        /// </summary>
        /// <returns>Копия объекта.</returns>
        public abstract object Clone();
    }
}
А вот сам IMovable:
using Engine_6.Tools;
namespace Engine_6.GraphicsObjects
{
    /// <summary>
    /// Перемещаемый объект.
    /// </summary>
    public interface IMovable
    {
        /// <summary>
        /// Перемещает объект на вектор.
        /// </summary>
        /// <param name="vector2D">Вектор смещения.</param>
        void MoveOn(Vector2D vector2D);
        /// <summary>
        /// Перемещает объект к другому объекту.
        /// </summary>
        /// <param name="vector2D">Объект-цель.</param>
        void MoveOn(IStyledGraphicsObject styledGraphicsObject);
    }
}
        
 Институт математики, механики и компьютерных наук ЮФУ, 2005–2021