| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > вызов метода для объектов произвольных классов |
| Автор: ElKa 18.8.2008, 11:43 |
| есть выражение, состоящее из подвыражений подвыражения - это объекты разных классов каждое подвыражение тоже состоит из подвыражений в общем они все вложены надо вывести выражение на печать, при этом преобразовывая названия переменных x в x' переменная -это один из объектов для этого надо этот же метод вызвать для каждого объекта и в нем тоже преобразовать переменные для этого мне надо узнать его класс как это лучше реализовать? |
| Автор: AxNe0 18.8.2008, 11:53 |
| не совсем понятно, что именно требуется.... можно пример? |
| Автор: ElKa 18.8.2008, 12:04 | ||
| object = object1 object2 ... objectN object1 = object11 object12 ... object1M . . . objectIJ это может быть какое нибудь арифметическое выражение или логическое или с множествами например object = (x+y) - ((x+z) - 2*y) object1 = (x+y) object2 = "-" object3 = ((x+z) - 2*y) и т.д. теперь надо вызвать object.toEffString()
что делать? |
| Автор: Ortega 18.8.2008, 12:12 |
| И снова, интерфейсы тебе в помощь! Скажи, пожалуйста, вот эти все объекты - это твоих рук дело и ли стороння библиотека? |
| Автор: AxNe0 18.8.2008, 12:20 |
| если надо парсить арифметические выражения, то есть несколько готовых алгоритмов, например http://algolist.manual.ru/syntax/parsear.php. что должен делать метод object.toEffString() ? и должен быть класс у этих object'ов ? |
| Автор: ElKa 18.8.2008, 12:38 | ||
моих.. я написала класс для каждого выражения Добавлено через 2 минуты и 32 секунды AxNe0, нет там не только арифметические.. там целый язык спецификаций надо парсить метод toEffString() выдает модифицированный стринг этого выражения классы у объектов есть.. для каждого выражения свой класс из них синтаксическое дерево строится |
| Автор: AxNe0 18.8.2008, 13:07 |
| кажется, становится ясно т.е. у тебя есть несколько классов, характеризующих разные выражения. В каждом классе есть метод toEffString(). Чтобы можно было вызвать метод, не зная точного класса, как уже сказал товарищ (или господин, как ему будет угоднее ;) ) Ortega, используй один из трех важнейших механизмов ООП - http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F. Т.е. Создай либо интерфейс, либо абстрактный класс (если реализация этого метода везде одинаковая) и реализуй/наследуй его в своих классах. |
| Автор: AxNe0 18.8.2008, 13:28 | ||||
Вот пример использования интерфейсов для подобной задачи:
тогда надо будет хранить не массив/коллекцию Object[] objects, а InterfaceClazz[] objects и твой код выше будет работать без всяких изменений Добавлено через 4 минуты и 13 секунд а вообще, еще лучше создать абстрактный класс, т.к. видимо, метод везде один и тот же:
вот, как-то так... |
| Автор: ElKa 18.8.2008, 14:09 |
| AxNe0, спасибо.. уже пишу.. но абстрактный класс не нужен, потому что метод везде разный |