Редактирование объекта
От: Limonadni Joe Россия  
Дата: 11.07.05 18:35
Оценка:
Язык Object Pascal.

Есть класс TFunction — математическая функция наподобие f(x). У этого класса есть наследники — TFunctionParabola и TFunctionHyperbola (соответственно парабола и гипербола). У TFunction есть свойство Expression — выражение функции, наследники его наследуют.

Ситуация: у объекта класса TFunctionParabola свойство Expression = 'x^2+1'. Юзер меняет Expression на '1/x'. При этом подразумевается, что класс объекта должен измениться на TFunctionHyperbola. Меняться он должен потому, что впоследствии проге нужна будет инфа о том, к какому классу принадлежит функция, чтобы выводить данные присущие только данному классу функций (например, уравнение асимптоты). Как это сделать? Мне видится следующее решение:

(Небольшое дополнение. Все объекты функций принадлежат некоторому объекту класса TGraph, т.е. у класса TGraph есть массив элементов типа TFunction)

В TFunctionParabola.SetExpression вызывается метод TGraph.EditExpression, который уничтожит объект данной функции и создаст на его месте объект класса TFunctionHyperbola с заданным Expression. Недостаток: надо быть уверенным, что программа после вызова TGraph.EditExpression в процедуре TFunctionParabola.SetExpression не будет блуждать по коду, относящемуся к TFunctionParabola, иначе ненароком налетит на AccessViolation.

Поделитесь, пожалуйста, своими мыслями. Решение можно улучшить или оно в корне неправильно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.