Использование jung2 в плагинах для цитоскейпа

Я занялся java около полутора недель с прицелом на написание плагинов для цитоскейпа и использование jung2 для анализа и управления графическими объектами цитоскейпа. Есть ли способ расширить объект графа цитоскейпа, назвав его классом xyz, чтобы включить новое поле объекта типа графа jung2, поля и методы которого указывают на соответствующие в цитоскейпе без создания совершенно нового объекта в памяти. Не уверен, что я делаю и смысл здесь, но предположим, например, у меня было два класса, представляющих один и тот же тип объекта

public class xyz {

    public double i;

    public xyz(double a) {
        i=a;
    }
}

public class pqr {

    public double j;

    public pqr(double b) {
        j=b;
    }
} 

тогда что-то вроде

public class trans extends xyz {

    public pqr toPqr;

    public trans(double a) {
        super(a);
        toPqr = new pqr(i);
    }
}

где теперь, если

trans myTrans = new trans(5);

затем myTrans.toPqr.j указывает на myTrans.i

если я назначу новое значение, то myTrans.i изменится

и если я изменю myTrans.i, то это будет видно в myTrans.toPqr.j


person Stephen Kauffman    schedule 27.07.2013    source источник
comment
Это трудно понять, потому что у всего есть такие абстрактные имена. Не могли бы вы опубликовать реальный пример с использованием классов JUNG и Cytoscape?   -  person sdasdadas    schedule 30.07.2013
comment
Я попытался объяснить лучше ниже   -  person Stephen Kauffman    schedule 01.08.2013
comment
Чтобы не быть непостоянным, но вы должны отредактировать этот пост в своем вопросе. Просто нажмите изменить ^, а затем удалите свой ответ. Тем не менее, я посмотрю на добавленную информацию.   -  person sdasdadas    schedule 01.08.2013
comment
Я думаю, что знаю, о чем вы говорите, но реальный пример сделал бы это намного проще. Чтобы уточнить, у вас есть два класса представления графа (скажем, список смежности и матрица), и вы хотите, чтобы они оба выполняли одну и ту же операцию, не имея их обоих в памяти? (если это для SNA, я лучше пойму термины, которые вы мне бросаете, чем xyz :D)   -  person sdasdadas    schedule 01.08.2013


Ответы (1)


хорошо, что я ищу, есть ли способ определить класс trans, который расширяет класс xyz, так что, если у меня есть, например,

public class xyz {

    public String r;
    public double i;

    public xyz(String a, double b) {
        r=a;
        i=b;
    }
}

и

public class pqr {
    public String s;
    public double j;

    public pqr(String a, double b) {
        s=a;
        j=b;
    }
}

и

public class trans extends xyz {

    public pqr toPqr; //adding a new field of type pqr

    trans(xyz myXyz) {
        super(myXyz.r, myXyz.i);
        //code
    }
}

то если

xyz xyzA = new xyz("a",8); // constructor for two fields string r and double s

и (переделать?)

xyzA = new trans(xyzA); // trans takes an xyz object as constructor arg

так что

((trans)xyzA).toPqr.s всегда равно xyzA.r, где изменение одного изменяет другое ((trans)xyzA).toPqr.j всегда равно xyzA.i, где изменение одного изменяет другое

По сути, есть два разных объекта Java, представляющих один и тот же тип математического объекта, например, график. Один пакет подпрограмм работает с первым представлением, а другой набор подпрограмм работает только со вторым представлением графа. Чтобы использовать второй набор подпрограмм в первом представлении, мне пришлось бы воссоздать в памяти граф из первого представления, чего я делать не хочу. Я хотел бы расширить первый объект новым полем того же типа, что и второе представление. Без дублирования графика в памяти.

Я предполагаю, что самым простым и самым бессмысленным упражнением было бы определение класса с двумя различными полями, которые всегда равны и изменяются друг с другом. Можно ли сделать это?

person Stephen Kauffman    schedule 31.07.2013