Reflection - BSc-Hons-Computing-Bolton-Uni/swe4305-portfolio-001-MuhammadImtiaz63 GitHub Wiki

In this project, I completed all weekly exercises from Week 1 to Week 5, these tasks helped me build up my skills in Java by practising input/output, conditions, loops, classes, and collections. While these were useful for improving my understanding, my main focus was on the two main projects.

For both Project A and Project B, I created class diagrams to show class structures, attributes, methods, and relationships. I also developed use case diagrams and tables to show user interactions, actors, preconditions, and outcomes, this provided a clear implementation framework.

Project A, the Playlist Application, I developed a console based Java application to manage a collection of songs. Each song stored details like title, artist name, and play count. The system allowed users to add new songs, remove songs, display the full list, and filter songs by play count. I used an ArrayList to handle the song collection and created separate methods for each feature. In a video presentation, I explained the code and demonstrated the application’s features in action. To ensure reliability, I did unit testing to verify core functionalities and black box testing with different inputs, such as invalid data, which helped identify and fix logical errors.

Project B, the Student Grades System, was more difficult. I built a console based Java application to manage students, modules, and marks. The system included classes for students and modules, enabling users to add, edit, and delete records, input and update marks, calculate grades based on specific criteria, and display statistics like minimum, maximum, and average marks per module. It also generated grade profiles showing the percentage of students in each grade category. The video presentation showcased these features and explained the code implementation. I also did unit testing to validate key operations and black box testing with incorrect inputs, ensuring robust error handling.

One challenge I faced during Project A and Project B was poor time management. Balancing coding, documentation, and testing within short deadlines led to mistakes requiring later fixes. In the future, I’ll prioritise tasks and allocate time for planning, coding, and testing.

Other than the projects I wrote a 1000 word research report on the core principles of object oriented programming and design. This improved my understanding of abstraction, encapsulation, inheritance, and polymorphism, and their role in creating maintainable, flexible software. For example, encapsulation protected data in Song and Student classes, while polymorphism in Module.calculateGrade() supported varied grade calculations. Applying these principles made my code modular and extensible.

To improve both programs i identified five limitations/extensions:

  1. Graphical user interface (GUI): console based interfaces limit accessibility. A JavaFX GUI would improve usability, enabling intuitive interactions like drag and drop playlists or visual grade dashboards.

  2. Data persistence: data is lost on program termination. Adding file storage or a database like SQLite would save song collections or student records, essential for real world use.

  3. Advanced search/sorting (Playlist): supporting searches by artist or title and multi criteria sorting would improve efficiency for large playlists.

  4. Batch processing (Grades): manual mark entry is time consuming. CSV uploads would streamline data entry for large classes, reducing errors.

  5. User authentication: adding login and role based access would improve security, making sure that only authorized users modify grades or access playlists.

Overall, these projects and the report really improved my Java skills.