2015-08-19 2 views
3

Рассмотрим следующие классы 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)
  • Где больше кода выполняется, прежде чем он возвращается к исходному вызывающему

Проблема в том, некоторые люди считают, что это «современный спагетти-код», особенно менеджеров, которые, кажется, не «получить «когда дело доходит до такого типа структуры наследования, поэтому я хочу документировать этот поток, чтобы они поняли.

Дополнительные очки для тех, кто рисует красивую картинку для меня. :-)

ответ

3

В частности, я хотел бы диаграмму потока/последовательность

Так что я хотел бы использовать схему последовательности. Это может показать, как объекты работают вместе. Он не показал структуру наследования и как писать классы, но для этого вы также можете добавить диаграмму классов позже.

А вот фантазии простой образ, как это может выглядеть: Sequence Diagram

И plantuml исходный код, если это не достаточно хорошо, и вы хотите поэкспериментировать с этим :).

otherObject->SpecificActionService:runActionCode(1000) 
SpecificActionService->SpecificActionService:doSomeSpecificAction() 

otherObject->SpecificActionService:runActionCode(100) 
SpecificActionService->GenericActionService :runActionCode(100) 
GenericActionService->GenericActionService:doSomeGenericAction() 
+0

Да, это довольно близко к тому, что я хочу показать. Но он не показывает, как оба вызова 'runAction()' выполняют некоторый код в «GenericActionService» перед вызовом метода (run) «runActionCode».На самом деле, похоже, что вызов 'runAction (1000)' никогда не приближается к 'GenericActionService'. См. Редактирование моего вопроса для более конкретного примера того, что я пытаюсь показать. – DuncanKinnear

+0

Кроме того, ваша диаграмма показывает вызовы 'runActionCode()' (который является 'protected'), а не' runAction() '. – DuncanKinnear

+0

Поскольку вы лучше понимаете свой код и поток последовательности, я предлагаю вам попытаться нарисовать такую ​​диаграмму, и я могу попытаться дать советы, если что-то вас беспокоит в результате. Его легко получить некоторые первые диаграммы с помощью инструмента, который я использовал (конечно, вы можете использовать что-то еще, способное UML) – mszalbach

Смежные вопросы