|
|
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Дали задание, написать программу в хорошем стиле ООП, разделенное по MVC, короче, много чего, но суть, задача в том, что бы используя ООП, разделить программу и написать МЕНЮ по управлению программою, используя чем меньше IF и SWITCH слова, как то в стиле ООП. Я как студент, без ком. опыта, без понятия, как это сделать, ПТУ-стайл код стараюсь не писать =), но горький опыт писанины всяких менюшек используя структурный подход, используя ООП языки как то задолбало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 00:09:57 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Switch...case заменяешь на HashMap<String, Action> Аналогично if заменятся на вызов виртуального метода и то или иное действие выполняется в зависимости от реализации В общем, изучаем полиморфизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 01:06:55 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ухх .. спасибо, буду думать, что такое полиморфизм я знаю, и что он проявляется на оверлоад, оверрайт, и генериках и может еще где то, но, то, что вы написали, я такое еще не видел, ни одного примера ... интересно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 01:11:32 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
сижу уже который час и никак не пойму, HASHMAP - ключ - значение, допустим я там где ключ запишу как в меню цифры 1) запустить 2) напечатать 3) удалить 4) закрыть ... по ключу извлекать понятно, а вот ДЕЙСТВИЕ как ... как его запускать я не пойму, это ж будет у меня там допустим инстанст класа жить ... а с IF тем более ... я так понимаю, допустим пользователь вводит цифру от 1 до 4, и данные у меня в массиве MyMainObject [] array = { new First(), new Second }; и потом array[k].doSomething() ... но по сути мне надо вызывать 4 разные метода, которые делают разные действия ... как тут полиморфизм вписать я не пойму !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 17:33:07 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 17:43:48 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, первый раз такое чудо вижу ... наверно с годами такое приходит ... как я понимаю, это вы так заменили if и HM в такой способ, просто мне кажется, хотя не уверен на 100 % сейчас, что это можно и в IF or HM поместить ... сейчас буду пробовать ... а есть еще способы другие, просто интересно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 17:53:35 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
уже разобрался, все понятно, но я написал свой интерфейс, не трогал Runnable, хотя как я понимаю, без Thread от него пользы нету, обыкновенный по сути интерфейс. Вот пример, как я понял, из использованием HM, это так набросок, но как сюда IF просто как наглядный пример сделать не пойму ... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Но вот, что это такое, я точно не понимаю , Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 18:34:59 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
botasa111, это массив интерфейсов или как это понятьЭто массив классов, которые реализуют ваш интерфейс DoSomething ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 18:42:43 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
botasa111уже разобрался, все понятно, но я написал свой интерфейс Не, можно 100500 способов ещё придумать. Просто проиллюстрировал идею. botasa111, не трогал Runnable, хотя как я понимаю, без Thread от него пользы нету, Заблуждаетесь. Это просто некоторая задача спрятаная за интерфейс. Более современная версия Runnable это Callable. Да - часто используется для асинхронного исполнения. Но не обязательно. botasa111Вот пример, как я понял, из использованием HM, это так набросок, но как сюда IF просто как наглядный пример сделать не пойму ... Не понял вопроса. При чем тут if? botasa111 Код: java 1. Это массив ссылок на объекты, классы которых реализуют DoSomething. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 18:45:09 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторЗаблуждаетесь. Это просто некоторая задача спрятаная за интерфейс. Более современная версия Runnable это Callable. Да - часто используется для асинхронного исполнения. Но не обязательно. почему же ? Runnable интерфейс, он служит для создания нового потока, например имплментить интерфейс класом, переопределить метод РАН и в нем что то поместить для исполнения, или класс Thread, но с интерфейсом надо будет передавать в качестве аргумента классу Thread класс, который имплимнтит этот интерфес, и метод start запускает новый поток и выполняет, то, что в методе РАН было написано, а на счет КОЛЕЙБЛА интерфейса у меня практики такое нету, но на сколько я знаю, он кидает ексепшин и значение возвращает, наверно в том, что он возвращает значение его примущество над раннайблом. Тем более если я правильно понимаю, использовать РАННЕЙБЛ интерфейс, который в себе прячет задачу какую нибудь, не используя ПОТОКОВ есть наверно безсмысленно, так, как можно написать людей другой интерфейс, и например, те, кто не понимает, зачем РАННЕЙБ интерфес тут ипользовать - не вводить заблуждение, ну это я так понимаю этот подход, на сколько он правильный я не знаю авторНе понял вопроса. При чем тут if? точнее IF не именно туда засунуть в этот пример, а в другом каком нибудь примере ... я постоянно использую if else, короче говоря я не понимаю как этот пример можно и IF-ом проделать ... if(action == 1) else if (action == 2) и т.д. по другому я чет не представляю, но интерес мучает =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 19:01:09 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
botasa111Runnable интерфейс, он служит для создания нового потока Нет не служит. Часто используется для этого. Но никак не "служит". SwingUtilities.invokeLater(), например, никаких новых потоков не создаёт. botasa111Тем более если я правильно понимаю, использовать РАННЕЙБЛ интерфейс, который в себе прячет задачу какую нибудь, не используя ПОТОКОВ есть наверно безсмысленно botasa111, так, как можно написать людей другой интерфейс, и например, те, кто не понимает, зачем РАННЕЙБ интерфес тут ипользовать - не вводить заблуждение, ну это я так понимаю этот подход, на сколько он правильный я не знаю Не стоит писать свой интервейс, который от Runnable ничем не отличается. Стоит писать свой интерфейс, если он декларирует что-то более чем Runnable. Например как Callable и Action ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 19:11:00 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, значит я не правильно выразился, метод РАН интерфейса РАНЕЙБЛ инкапсулирует в себе задачу, но что бы создать еге и выполнить в отдельном потоке надо класс Thread. На, сколько я знаю, метод РАН не принимает ничего и не возвращает, только что то исполняет. На этом и заканчивается его работа. КАЛЕЙБЛ интерфейс имеет тоже метод 1 штуку, которая возвращает результат и кидает ексепшит, это на 2 действия больше чем в методе РАН, но его преймущество из за возврата значения, как я понимаю. авторСтоит писать свой интерфейс, если он декларирует что-то более чем Runnable. то есть, если у меня метод будет просто исполнят действие, мне достаточно простого метода РАН от РАНЕЙБЛА и всё ? правильно ? то есть если метод такой есть, мне безсмысленно создавать другой интерфейст, который яко бы будет инкапсулировать действие ?? Разницу между методами я вижу, но не совсем понимаю, что вы хотите сказать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2013, 19:25:06 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
botasa111а есть еще способы другие, просто интересно ... шаблон - Команда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 13:32:20 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
Petro123шаблон - Команда Стандартное заблуждение. Обсуждаемая тема это GoF "Стратегия". Паттерн "Команда" он о другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 13:38:45 |
|
||
|
Console menu in OOP-style, less IF and SWITCH
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123шаблон - Команда Стандартное заблуждение. Обсуждаемая тема это GoF "Стратегия". Паттерн "Команда" он о другом. ясен пень. Сабж не про меню...и в Java всё по другому авторШаблон Команда реализует популярную в современном программировании задачу. Он представляет некоторое сообщение в виде объекта, который затем может использоваться заранее неизвестными элементами программы. Такая парадигма широко используется в Delphi. Например, типичные события пользовательского интерфейса (выбор пункта меню, нажатие кнопки, щелчок мышью) в программах обрабатываются заранее не известными способами. http://src-code.net/delphi-2006-shablon-command-komanda/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2013, 13:51:21 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=197&tid=2128069]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 391ms |

| 0 / 0 |
