Final reflections on the module
What
Having already a degree in Systems Engineering, this module provided an excellent opportunity to revisit some of the concepts in Object-oriented programming (OOP) and go more in-depth with others I did not cover before in my previous degree.
The Object-oriented programming module covers designing, implementing, testing and debugging, fundamentally using the Python programming language (University of Essex, N.D.). As I aim to refresh my knowledge and get up to date with new trends in IT, following this module's content allowed me to gain new knowledge and structure the existing one.
So What?
The concept of reusability was present throughout the module. In one of the collaborative discussions on the article by Padhy et al. (2018), State-of-the-Art Object-Oriented Metrics and Its Reusability: A Decade Review, we discussed the importance of prioritising the different assets that contribute to reusability. Most of my fellow students agreed that the subjectivity and conditions to every problem were crucial factors when giving more or less importance to one or another asset. I realised that the approach to building a list of assets in order of importance had to be based, of course, on reusability but also the assets present across the Software development life cycle (SDLC). Moreover on, how much will these assets affect each stage of the SDLC.
UML provides simplicity but simultaneously offers the capacity to model a full range of practical systems (Rumbaugh et al., 1999). Studying UML as a methodology to support Object-oriented development brought to my attention details that were forgotten due to the lack of use of this language in some of my previous roles. It also allowed me to explore the additions to version 2.5, which only existed after undertaking my previous degree. It became clear to me that the different types of views or diagrams (structural and behavioural) cover all the SDLC consistently.
Considering the UML Use case diagram as one of the most important ones due to its use in different stages of the SDLC, I used the theory to create a diagram for the design assessment. However, according to the feedback received, I needed to avoid the creation of cascade effects due to the excessive use of extend and include relationships. The feedback received was essential, as specifying mandatory and optional use cases was something I previously considered a priority.
Before starting the course, I had no experience whatsoever developing with Python. Using this language to explore Object-oriented concepts and study its characteristics in terms of objects proved complicated when working on the coding assignment. Although my design deliverable was solid (judging by the feedback received), the new ways of implementing Object-oriented concepts in Python were something I had to learn, separating knowledge from my experience of OOP with other languages. I underestimated the work involved in emulating one of the chosen functions (path planning) and ended up changing it for a function that required less development time (lane centring).
Packaging and testing were other essential concepts addressed towards the end of the module. Using tools for testing (pylint) speeded up the syntax testing process, and the Unit Test approach consolidated my existing knowledge in testing. Test-driven development (TDD) starts with creating basic failing tests and then writing the necessary code to pass the test (IBM, N.D.). This approach is essential to achieve efficiency and efficacy when developing software.
At the end of the module, the concept of Design patterns was interesting to study as it represents a crucial part of the Object-oriented development approach. This becomes even more important because the main aim of developing software is to provide a solution to a problem, and the Design patterns provide ways to reuse a generic solution to solve many types of problems by adapting them to their context, making possible the reusability. With this idea, it was beneficial to study which Design patterns are used most and their associated advantages and issues when applying them.
Overall it was exciting and enjoyable to complete the artefacts for each unit. However, it was a demanding module. Having a full-time job, I found it challenging to keep the portfolio production up to date and synchronised every week.
Now what?
The module's content put in front of me the fundamental concepts of OOP and provided structure to existing knowledge. This will allow me to cover the gaps in my knowledge of Object-oriented development.
I will be focusing on the application of design patterns as a team practice rather than a personal commitment at work. However, I am aware that the pressure of completing projects can make companies prescind this process that is largely beneficial in the long term.
After studying this module, an effort has to be made to integrate in practice the understanding of OOP concepts, the use of UML to support the development process, the use of design patterns, and the use of test-driven development to benefit efficient software production.
Finally, as researchers in Software Engineering, we aim to find principles to manage the software development process adequately and obtain a high-quality software product (Brookshear & Brylow, 2015). This module has increased my interest in doing further research in Object-oriented programming.
References
Brookshear, J. & Brylow, D. (2015) Computer Science: An Overview, 12th ed. London: Pearson
Education
Limited.
IBM (N.D.) Test-driven development. Available from:
https://www.ibm.com/garage/method/practices/code/practice_test_driven_development/ [Accessed 16
April 2023]
Rumbaugh, J., Jacobson, I. & Booch, G. (2005) The Unified Modelling Language Reference.
2nd ed.
Massachusetts: Addison Wesley Longman Inc.
The University of Essex (N.D.) MSc Computer Science. Available from:
https://online.essex.ac.uk/courses/msc-computer-science/ [Accessed 15 April 2023]