powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Console menu in OOP-style, less IF and SWITCH
16 сообщений из 16, страница 1 из 1
Console menu in OOP-style, less IF and SWITCH
    #38486770
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дали задание, написать программу в хорошем стиле ООП, разделенное по MVC, короче, много чего, но суть, задача в том, что бы используя ООП, разделить программу и написать МЕНЮ по управлению программою, используя чем меньше IF и SWITCH слова, как то в стиле ООП. Я как студент, без ком. опыта, без понятия, как это сделать, ПТУ-стайл код стараюсь не писать =), но горький опыт писанины всяких менюшек используя структурный подход, используя ООП языки как то задолбало.
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38486799
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Switch...case заменяешь на HashMap<String, Action>
Аналогично if заменятся на вызов виртуального метода и то или иное действие выполняется в зависимости от реализации
В общем, изучаем полиморфизм.
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38486805
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
ухх .. спасибо, буду думать, что такое полиморфизм я знаю, и что он проявляется на оверлоад, оверрайт, и генериках и может еще где то, но, то, что вы написали, я такое еще не видел, ни одного примера ... интересно ...
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38487822
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сижу уже который час и никак не пойму, HASHMAP - ключ - значение, допустим я там где ключ запишу как в меню цифры 1) запустить 2) напечатать 3) удалить 4) закрыть ... по ключу извлекать понятно, а вот ДЕЙСТВИЕ как ... как его запускать я не пойму, это ж будет у меня там допустим инстанст класа жить ... а с IF тем более ... я так понимаю, допустим пользователь вводит цифру от 1 до 4, и данные у меня в массиве MyMainObject [] array = { new First(), new Second }; и потом array[k].doSomething() ... но по сути мне надо вызывать 4 разные метода, которые делают разные действия ... как тут полиморфизм вписать я не пойму !!!
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38487840
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Console menu in OOP-style, less IF and SWITCH
    #38487864
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

первый раз такое чудо вижу ... наверно с годами такое приходит ... как я понимаю, это вы так заменили if и HM в такой способ, просто мне кажется, хотя не уверен на 100 % сейчас, что это можно и в IF or HM поместить ... сейчас буду пробовать ... а есть еще способы другие, просто интересно ...
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38487910
botasa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже разобрался, все понятно, но я написал свой интерфейс, не трогал 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
Console menu in OOP-style, less IF and SWITCH
    #38487919
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111, это массив интерфейсов или как это понятьЭто массив классов, которые реализуют ваш интерфейс DoSomething
...
Рейтинг: 0 / 0
Console menu in OOP-style, less IF and SWITCH
    #38487922
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
botasa111уже разобрался, все понятно, но я написал свой интерфейс
Не, можно 100500 способов ещё придумать. Просто проиллюстрировал идею.

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


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

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


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



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

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

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

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

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

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

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

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

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


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