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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самособирающийся проект, дописывать классы, не регистрируя их 
:(
    Опции темы
_Y_
Дата 4.4.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



Чисто философский вопрос. Возможно ли сделать программу, которую можно дописывать новыми классами, без вмешательства в основной код.

Ну, например, в проекте имеется подробно описанный интерфейс. Пользователь  (знающий Java естественно, на некотором уровне) пишет новый класс имплементирующий этот интерфейс, собирает его, и кладет класс в нужную директорию. При запуске программа читает директорию и добавляет в меню своего GUI данный класс, с тем, чтобы пользователь мог радоваться самостоятельно заданной функциональности.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
dobrolub
Дата 4.4.2010, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



можно, и многие так и делают. Ещё можно прикрутить к своей программе какой нибудь скриптовый язык, например java-script и пусть пользователи пишут скрипты -  обычно так и делают для пользователей. 

Если пользователи - программисты, то пусть имплементрируют интерфэйс или абстрактный класс. 

Один подход не исключает другого. Первое можно использовать как надстройку над вторым.
PM   Вверх
_Y_
Дата 4.4.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



Цитата(dobrolub @ 4.4.2010,  10:00)
можно, и многие так и делают .... пусть имплементрируют интерфэйс или абстрактный класс

Тогда вопрос, а как это делается? Как создается объект класса, имя которого есть в данных, но в основном коде оно не прописано?



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
jk1
Дата 4.4.2010, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 40
Всего: 75



Делается очень просто, вот небольшой пример. Пусть у нас есть класс edu.modules.main, который занимается тем, что ищет в директории ./src/edu/plugins классы-плагины, количество и названия которых на этапе компиляции не известны. Вот одна из возможных реализаций
Код

package edu.modules;

import java.io.File;

public class Main {
    public static void main(String[] args) throws Exception {
        File pluginDir = new File("./src/edu/modules/plugins");
        for (File item : pluginDir.listFiles()){
            ((Runnable)Class.forName("edu.modules.plugins."+item.getName().split("\\.")[0]).newInstance()).run();
        }
    }
}

Class.forName(...).newInstance() позволит нам получить класс по полному имени и создать его экземпляр. Чтобы после этого использовать функциональность класса необходимо, чтобы все классы-плагины реализовывали интерфейс или абстрактный класс. Чтобы не писать лишнего, в примере использован интерфейс Runnable. Теперь напишем пару простых плагинов
Код

package edu.modules.plugins;

public class Stupid implements Runnable{
    @Override
    public void run() {
        System.out.println("I'm stupid");
    }
}

Код

package edu.modules.plugins;

public class OneMore  implements Runnable{
    @Override
    public void run() {
        System.out.println("I am not!");
    }
}

Если классы расположены в правильном месте, то при запуске метод run() каждого класса-плагина будет выполнен.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
_Y_
Дата 4.4.2010, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



jk1, спасибо. Поэкспериментирую с этим делом и доложу smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
aleksandy
Дата 5.4.2010, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот тут описан процесс создания простейшего plugable-приложения.

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.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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