Визуализация структуры данных на основе аннотаций - существуют ли подобные инструменты? - PullRequest
0 голосов
/ 18 июня 2010

Для проекта в университете я планирую создать инструмент на основе аннотаций для визуализации / воспроизведения структур данных.

Вот моя идея:

Студенты, которые хотят попробовать себя взаписанные структуры данных должны:

  • пометить тип их структур данных с помощью некоторой маркировки аннотации, например,

    @List
    public class MyList<E> { ... }
    

    , чтобы я знал, как представлять данныеструктура

  • должна предоставить итератор, чтобы я мог извлекать элементы в правильном порядке

  • необходимо аннотировать методы для вставки и удаления,например,

    @add public boolean insert(E e) { ... }
    

    , чтобы я мог "привязать" этот метод к какой-либо кнопке.

Существуют ли подобные приложения?Я немного погуглил, но ничего подобного не нашел.

1 Ответ

2 голосов
/ 18 июня 2010

Я не очень понимаю, зачем вам использовать аннотации для такой задачи? В результате вы получите несколько странных методов, которые ваша инфраструктура не сможет проанализировать, или проанализируете их неверно, что приведет вас к созданию набора правил, как правильно писать эти методы, чтобы ваша инфраструктура могла их понимать. *

Я думаю, что вместо этого лучше использовать интерфейсы. Создайте свой собственный интерфейс с именем StudentList или чем-то подобным, с такими методами, как getIterator, getIndex и т. Д., И заставьте студентов реализовать этот интерфейс. Затем вы сможете загрузить любой из этих классов и использовать его на основе интерфейса, который они реализуют.

Кроме того, вы можете просто повторно использовать доступные интерфейсы, такие как List или Collection, однако это может заставить студентов написать много неиспользуемого кода для реализации этих интерфейсов. Поэтому я бы предпочел написать свой собственный интерфейс.

Примером такого интерфейса будет:

interface StudentList<T> {
    public Iterator<T> getIterator();
    public T get(int index);
    public void add(T element);
    public void remove(T element);
}

Студенты реализуют это следующим образом (этот пример просто оборачивается вокруг ArrayList):

class MyList<T> implements StudentList<T> {
    private ArrayList<T> realList;

    public MyList() {
        realList = new ArrayList<T>();
    }

    public void add(T element) {
        realList.add(element);
    }

    .......
}

И вы бы проверили это так:

void testList(StudentList<String> list) {
   list.add(5);
   list.add(10);
   list.get(20);
}

testList(new MyList<String>());

Таким образом, для студентов и для вас все ясно.

...