Рассмотрим следующие классы Java:Как схематически представляют переопределены методы
public class GenericActionService {
public void runAction(int actionNo) {
.... (some stuff)
runActionCode(actionNo);
.... (some more stuff)
}
protected void runActionCode(int actionNo) {
switch (actionNo) {
case 100:
doSomeGenericAction();
break;
....
default:
throw new IllegalArgumentException("Invalid Action!");
}
}
}
и унаследовал суб-класс:
public class SpecificActionService extends GenericActionService {
protected void runActionCode(int actionNo) {
switch (actionNo) {
case 1000:
doSomeSpecificAction();
break;
....
default:
super.runActionCode(actionNo);
break;
}
}
}
Теперь я не озабоченный ли это особенно хороший дизайн или нет , и эти классы очень вымышлены.
Что я хотел бы знать, как вы представляете этот дизайн с какой-то диаграммой? Может ли это быть представлено с использованием диаграммы последовательности UML? Если нет, какой тип диаграммы следует использовать?
В частности, я хотел бы схематизировать поток/последовательность, когда что-то вызывает метод runAction()
для экземпляра SpecificActionService
.
Например, рассмотрите ход выполнения, когда runAction(1000)
вызывается на SpecificActionService
. Я хотел бы диаграмму, чтобы показать следующее:
- вызовов
SpecificActionService.runAction(1000)
- Который работает код в
GenericActionService.runAction()
- перед вызовом
SpecificActionService.runActionCode(1000)
- Который называет
GenericActionService.runActionCode(1000)
- , выполняющих действие
- Перед возвратом в
SpecificActionService.runActionCode(1000)
- Который возвращается к
GenericActionService.runAction(1000)
- Где больше кода выполняется, прежде чем он возвращается к исходному вызывающему
Проблема в том, некоторые люди считают, что это «современный спагетти-код», особенно менеджеров, которые, кажется, не «получить «когда дело доходит до такого типа структуры наследования, поэтому я хочу документировать этот поток, чтобы они поняли.
Дополнительные очки для тех, кто рисует красивую картинку для меня. :-)
Да, это довольно близко к тому, что я хочу показать. Но он не показывает, как оба вызова 'runAction()' выполняют некоторый код в «GenericActionService» перед вызовом метода (run) «runActionCode».На самом деле, похоже, что вызов 'runAction (1000)' никогда не приближается к 'GenericActionService'. См. Редактирование моего вопроса для более конкретного примера того, что я пытаюсь показать. – DuncanKinnear
Кроме того, ваша диаграмма показывает вызовы 'runActionCode()' (который является 'protected'), а не' runAction() '. – DuncanKinnear
Поскольку вы лучше понимаете свой код и поток последовательности, я предлагаю вам попытаться нарисовать такую диаграмму, и я могу попытаться дать советы, если что-то вас беспокоит в результате. Его легко получить некоторые первые диаграммы с помощью инструмента, который я использовал (конечно, вы можете использовать что-то еще, способное UML) – mszalbach