Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызов метода для объектов произвольных классов 
V
    Опции темы
ElKa
Дата 18.8.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



есть выражение, состоящее из подвыражений
подвыражения - это объекты разных классов
каждое подвыражение тоже состоит из подвыражений
в общем они все вложены
надо вывести выражение на печать, при этом преобразовывая названия переменных x в x'
переменная -это один из объектов
для этого надо этот же метод вызвать для каждого объекта и  в нем тоже преобразовать переменные
для этого мне надо узнать его класс

как это лучше реализовать? 
 
PM   Вверх
AxNe0
Дата 18.8.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: 4
Всего: 5



не совсем понятно, что именно требуется.... можно пример?


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
ElKa
Дата 18.8.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



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()


Код


String toEffString(){
   String str = "";
   for(int i=0;i<objects.size();i++)
     str = str + objects.get(i).toEffString(); // но класс объекта неизвестен.. метод вызвать нельзя
   return str;
}


что делать?
PM   Вверх
Ortega
Дата 18.8.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.11.2005
Где: Харьков, Украина

Репутация: 4
Всего: 6



И снова, интерфейсы тебе в помощь!
Скажи, пожалуйста, вот эти все объекты - это твоих рук дело и ли стороння библиотека?
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
AxNe0
Дата 18.8.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: 4
Всего: 5



если надо парсить арифметические выражения, то есть несколько готовых алгоритмов, например тут.

что должен делать метод object.toEffString() ? и должен быть класс у этих object'ов ?



--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
ElKa
Дата 18.8.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



Цитата(Ortega @ 18.8.2008,  12:12)
И снова, интерфейсы тебе в помощь!
Скажи, пожалуйста, вот эти все объекты - это твоих рук дело и ли стороння библиотека?

моих.. я написала класс для каждого выражения

Добавлено через 2 минуты и 32 секунды
AxNe0

нет там не только арифметические.. там целый язык спецификаций надо парсить
метод toEffString() выдает модифицированный стринг этого выражения

классы у объектов есть.. для каждого выражения свой класс
из них синтаксическое дерево строится 

PM   Вверх
AxNe0
Дата 18.8.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: 4
Всего: 5



кажется, становится ясно smile
т.е. у тебя есть несколько классов, характеризующих разные выражения. В каждом классе есть метод toEffString().
Чтобы можно было вызвать метод, не зная точного класса, как уже сказал товарищ (или господин, как ему будет угоднее ;) ) Ortega, используй один из трех важнейших механизмов ООП - полиморфизм. Т.е. Создай либо интерфейс, либо абстрактный класс (если реализация этого метода везде одинаковая) и реализуй/наследуй его в своих классах.


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
AxNe0
Дата 18.8.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

Репутация: 4
Всего: 5



Вот пример использования интерфейсов для подобной задачи:

Код
interface InterfaceClazz {
    public String toEffString();
}

class Clazz1 implements InterfaceClazz {
    public String toEffString() {
        // do stuff
    }
}

class Clazz2 implements InterfaceClazz {
    public String toEffString() {
        // do stuff
    }
}

// etc.


тогда надо будет хранить не массив/коллекцию Object[] objects, а InterfaceClazz[] objects и твой код выше будет работать без всяких изменений

Добавлено через 4 минуты и 13 секунд
а вообще, еще лучше создать абстрактный класс, т.к. видимо, метод везде один и тот же:

Код
abstract class AbstractCommonClazz {
    List<AbstractCommonClazz> objects;
    
    String toEffString(){
        String str = "";
        for(int i=0;i<objects.size();i++)
          str = str + objects.get(i).toEffString();
        return str;
     }
}

class Clazz1 extends AbstractCommonClazz {
    // do stuff
}

class Clazz2 extends AbstractCommonClazz {
    // do stuff
}


вот, как-то так...


--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
ElKa
Дата 18.8.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.2.2006

Репутация: 2
Всего: 4



AxNe0

спасибо.. уже пишу.. 
но абстрактный класс не нужен, потому что метод везде разный  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.