Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Console menu in OOP-style, less IF and SWITCH / 16 сообщений из 16, страница 1 из 1
03.12.2013, 00:09:57
    #38486770
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Дали задание, написать программу в хорошем стиле ООП, разделенное по MVC, короче, много чего, но суть, задача в том, что бы используя ООП, разделить программу и написать МЕНЮ по управлению программою, используя чем меньше IF и SWITCH слова, как то в стиле ООП. Я как студент, без ком. опыта, без понятия, как это сделать, ПТУ-стайл код стараюсь не писать =), но горький опыт писанины всяких менюшек используя структурный подход, используя ООП языки как то задолбало.
...
Рейтинг: 0 / 0
03.12.2013, 01:06:55
    #38486799
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Switch...case заменяешь на HashMap<String, Action>
Аналогично if заменятся на вызов виртуального метода и то или иное действие выполняется в зависимости от реализации
В общем, изучаем полиморфизм.
...
Рейтинг: 0 / 0
03.12.2013, 01:11:32
    #38486805
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Blazkowicz,
ухх .. спасибо, буду думать, что такое полиморфизм я знаю, и что он проявляется на оверлоад, оверрайт, и генериках и может еще где то, но, то, что вы написали, я такое еще не видел, ни одного примера ... интересно ...
...
Рейтинг: 0 / 0
03.12.2013, 17:33:07
    #38487822
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
сижу уже который час и никак не пойму, HASHMAP - ключ - значение, допустим я там где ключ запишу как в меню цифры 1) запустить 2) напечатать 3) удалить 4) закрыть ... по ключу извлекать понятно, а вот ДЕЙСТВИЕ как ... как его запускать я не пойму, это ж будет у меня там допустим инстанст класа жить ... а с IF тем более ... я так понимаю, допустим пользователь вводит цифру от 1 до 4, и данные у меня в массиве MyMainObject [] array = { new First(), new Second }; и потом array[k].doSomething() ... но по сути мне надо вызывать 4 разные метода, которые делают разные действия ... как тут полиморфизм вписать я не пойму !!!
...
Рейтинг: 0 / 0
03.12.2013, 17:43:48
    #38487840
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
actions = new Runnable[]
{
   new Start(), new Print(), new Delete(), new Close();
}

class Start implements Runnable{
    public void run(){
        Runtime.exec(getCurrentFile().getName());
    }
} 

class Print implements Runnable{
    public void run(){
        Runtime.exec("print " + getCurrentFile().getName());
    }
} 

class Delete implements Runnable{
    public void run(){
        getCurrentFile().delete();
    }
} 

class Delete implements Runnable{
    public void run(){
        System.exit(1);
    }
}

public static void main(String[] args){
   //prompt
   //read command index from console
   actions[c].run();
}

 
...
Рейтинг: 0 / 0
03.12.2013, 17:53:35
    #38487864
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Blazkowicz,

первый раз такое чудо вижу ... наверно с годами такое приходит ... как я понимаю, это вы так заменили if и HM в такой способ, просто мне кажется, хотя не уверен на 100 % сейчас, что это можно и в IF or HM поместить ... сейчас буду пробовать ... а есть еще способы другие, просто интересно ...
...
Рейтинг: 0 / 0
03.12.2013, 18:34:59
    #38487910
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
уже разобрался, все понятно, но я написал свой интерфейс, не трогал Runnable, хотя как я понимаю, без Thread от него пользы нету, обыкновенный по сути интерфейс. Вот пример, как я понял, из использованием HM, это так набросок, но как сюда IF просто как наглядный пример сделать не пойму ...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
                //prompt
		//read command index from console
		
		HashMap<Integer, DoSomething> actions = new HashMap<>();
		actions.put(1, new Start());
		actions.put(2, new Print());
		actions.put(3, new Delete());
		actions.put(4, new Exit());

                int c = 3 // TODO replace method

		test.get(c).doIt();


interface DoSomething {
	void doIt();
}




Но вот, что это такое, я точно не понимаю ,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
interface DoSomething {
	void doIt();
}

DoSomething [] actions = new DoSomething []     <= ?    это массив интерфейсов или как это понять ?
{
     new Start(), new Print(), new Delete(), new Exit()
};
...
Рейтинг: 0 / 0
03.12.2013, 18:42:43
    #38487919
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
botasa111, это массив интерфейсов или как это понятьЭто массив классов, которые реализуют ваш интерфейс DoSomething
...
Рейтинг: 0 / 0
03.12.2013, 18:45:09
    #38487922
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
botasa111уже разобрался, все понятно, но я написал свой интерфейс
Не, можно 100500 способов ещё придумать. Просто проиллюстрировал идею.

botasa111, не трогал Runnable, хотя как я понимаю, без Thread от него пользы нету,
Заблуждаетесь. Это просто некоторая задача спрятаная за интерфейс. Более современная версия Runnable это Callable.
Да - часто используется для асинхронного исполнения. Но не обязательно.


botasa111Вот пример, как я понял, из использованием HM, это так набросок, но как сюда IF просто как наглядный пример сделать не пойму ...

Не понял вопроса. При чем тут if?


botasa111
Код: java
1.
DoSomething [] actions = new DoSomething []     <= ?    это массив интерфейсов или как это понять ?



Это массив ссылок на объекты, классы которых реализуют DoSomething.
...
Рейтинг: 0 / 0
03.12.2013, 19:01:09
    #38487941
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Blazkowicz,

авторЗаблуждаетесь. Это просто некоторая задача спрятаная за интерфейс. Более современная версия Runnable это Callable.
Да - часто используется для асинхронного исполнения. Но не обязательно.
почему же ? Runnable интерфейс, он служит для создания нового потока, например имплментить интерфейс класом, переопределить метод РАН и в нем что то поместить для исполнения, или класс Thread, но с интерфейсом надо будет передавать в качестве аргумента классу Thread класс, который имплимнтит этот интерфес, и метод start запускает новый поток и выполняет, то, что в методе РАН было написано, а на счет КОЛЕЙБЛА интерфейса у меня практики такое нету, но на сколько я знаю, он кидает ексепшин и значение возвращает, наверно в том, что он возвращает значение его примущество над раннайблом. Тем более если я правильно понимаю, использовать РАННЕЙБЛ интерфейс, который в себе прячет задачу какую нибудь, не используя ПОТОКОВ есть наверно безсмысленно, так, как можно написать людей другой интерфейс, и например, те, кто не понимает, зачем РАННЕЙБ интерфес тут ипользовать - не вводить заблуждение, ну это я так понимаю этот подход, на сколько он правильный я не знаю

авторНе понял вопроса. При чем тут if?
точнее IF не именно туда засунуть в этот пример, а в другом каком нибудь примере ... я постоянно использую if else, короче говоря я не понимаю как этот пример можно и IF-ом проделать ... if(action == 1) else if (action == 2) и т.д. по другому я чет не представляю, но интерес мучает =)
...
Рейтинг: 0 / 0
03.12.2013, 19:11:00
    #38487952
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
botasa111Runnable интерфейс, он служит для создания нового потока
Нет не служит. Часто используется для этого. Но никак не "служит".
SwingUtilities.invokeLater(), например, никаких новых потоков не создаёт.

botasa111Тем более если я правильно понимаю, использовать РАННЕЙБЛ интерфейс, который в себе прячет задачу какую нибудь, не используя ПОТОКОВ есть наверно безсмысленно

botasa111, так, как можно написать людей другой интерфейс, и например, те, кто не понимает, зачем РАННЕЙБ интерфес тут ипользовать - не вводить заблуждение, ну это я так понимаю этот подход, на сколько он правильный я не знаю
Не стоит писать свой интервейс, который от Runnable ничем не отличается. Стоит писать свой интерфейс, если он декларирует что-то более чем Runnable. Например как Callable и Action
...
Рейтинг: 0 / 0
03.12.2013, 19:25:06
    #38487967
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Blazkowicz,

значит я не правильно выразился, метод РАН интерфейса РАНЕЙБЛ инкапсулирует в себе задачу, но что бы создать еге и выполнить в отдельном потоке надо класс Thread. На, сколько я знаю, метод РАН не принимает ничего и не возвращает, только что то исполняет. На этом и заканчивается его работа. КАЛЕЙБЛ интерфейс имеет тоже метод 1 штуку, которая возвращает результат и кидает ексепшит, это на 2 действия больше чем в методе РАН, но его преймущество из за возврата значения, как я понимаю.

авторСтоит писать свой интерфейс, если он декларирует что-то более чем Runnable.
то есть, если у меня метод будет просто исполнят действие, мне достаточно простого метода РАН от РАНЕЙБЛА и всё ? правильно ? то есть если метод такой есть, мне безсмысленно создавать другой интерфейст, который яко бы будет инкапсулировать действие ?? Разницу между методами я вижу, но не совсем понимаю, что вы хотите сказать ...
...
Рейтинг: 0 / 0
04.12.2013, 13:32:20
    #38488774
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
botasa111а есть еще способы другие, просто интересно ...
шаблон - Команда
...
Рейтинг: 0 / 0
04.12.2013, 13:38:45
    #38488781
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Petro123шаблон - Команда
Стандартное заблуждение. Обсуждаемая тема это GoF "Стратегия". Паттерн "Команда" он о другом.
...
Рейтинг: 0 / 0
04.12.2013, 13:51:21
    #38488816
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
BlazkowiczPetro123шаблон - Команда
Стандартное заблуждение. Обсуждаемая тема это GoF "Стратегия". Паттерн "Команда" он о другом.
ясен пень. Сабж не про меню...и в Java всё по другому

авторШаблон Команда реализует популярную в современном программировании задачу. Он представляет некоторое сообщение в виде объекта, который затем может использоваться заранее неизвестными элементами программы. Такая парадигма широко используется в Delphi. Например, типичные события пользовательского интерфейса (выбор пункта меню, нажатие кнопки, щелчок мышью) в программах обрабатываются заранее не известными способами.
http://src-code.net/delphi-2006-shablon-command-komanda/
...
Рейтинг: 0 / 0
04.12.2013, 14:03:09
    #38488849
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Console menu in OOP-style, less IF and SWITCH
Petro123,

ОК. Уговорил.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Console menu in OOP-style, less IF and SWITCH / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]