Search code examples
javaswingoopumlsequence-diagram

Draw sequence diagrams for a Java Swing application


I have a simple ATM system implemented in Java using Swing (I know Swing isn't really used anymore but I wanted it to be simple). The way I implemented it is as follows:

  • I have a Customer class which holds information about a customer and has a login() method
  • I have an Account class which holds information about an account and has methods for withdrawing, depositing and transferring money
  • I have a Transaction class which holds information about a transaction and has a generateReceipt() method that creates and exports a PDF with transaction info
  • I have an ATM class which holds the logged in account and the corresponding customer and has static methods for getting transactions, such as the current account transactions
  • Finally, I have an Admin class with username and password as attributes and methods for getting all the customers and accounts, adding a customer or creating an account and deleting a customer or an account.

My application uses a MySQL database for storing information and making updates. Also, customers can have multiple accounts and one can log in the system using the account number and PIN.

I drew the use case diagrams, and the class diagram, not considering my UI in the class diagram.

I have a hard time creating sequence diagrams for this application, as all my classes and objects are used in classes made with Swing. My question is: how should I structure my sequence diagrams, considering the fact that it is a Swing application? Should I add the UI classes or should I make it more conceptual and only describe the process and relations between my other 5 classes? Any help is highly appreciated!

I tried separating as much logic from the actual UI, but I still can't figure out how should my sequence diagrams look, as a customer and the admin interacts with the Swing frames.


Solution

  • The class diagram without any of the app's internals is a "domain model". Its goal is not to document all possible classes used in your apps, but to focus on the domain knowledge, independently of how the app is implemented. The diagram would stay the same if you had a real ATM device, if you would implement a web service, or if you would use any other UI framework.

    So you made a clear choice on what you wanted the diagram to show. You could perfectly have chosen to have monstrous class diagram including in addition the classes required for the business logic, for database interaction and for the UI (e.g. using the famous Entity Boundary Control pattern). The diagram would then be more dependent on your implementation choices.

    For the sequence diagram, it's the same. There is no best way to draft this diagram. The question is only about what you want this diagram to focus on: do you want to model the domain logic ? In this case you would use your domain classes and show how they interact. Or do you want to model the detailed application design , in which case you could envisage to add also UI classes. But the diagrams would then quickly become very complex, and you'd better break them down into several simpler SDs, each focusing on some parts of your detailed technical design.