Unit 12

OBJECT ORIENTED REFLECTION

Object oriented programming was a completely new concept to me. During my time in the previous modules I had heard a little about object-oriented programming, specifically about the popularity and wide spread usage of the paradigm in modern software development. I had also read beforehand that object oriented can be difficult for beginner due to the complexity of the central concepts involved such as polymorphism or abstraction, this did create some level doubt in my own python programming abilities, as at the time of starting I was still been relatively new to the language. As this module was the second I’ve taken so far in the field of computer science I was therefore expecting and looking forward to making progress as an OO programmer.

Expectations:

Before the module had officially begun, due to my restlessness. I made the conscious effort to review all the units presented as well as understanding all the different learning outcomes to better prepare myself. This created some personal expectations for the OOP module. It became very clear to me in my early review that object-oriented programming will prove be incredibly useful for my improvement of skills as a software developer, that being if I was properly able to master the concepts of modular design and design patterns as well as the other key concepts of OOP. I generated an action plan for myself to best gain the most I can from this module. This ultimately consisted background research and to consistently complete all the various assignments, tasks and artefacts of the module.

OO System Design:

The first major concept of module was system design. I personally have always felt that this is the most crucial stage for any type of software development however, until starting this module I did not realise the lack of tools I had at my disposal to properly display and showcase the features of a system. Therefore, the first four units of the module which taught me how to properly develop thorough planning practices, as well as implement UML for proper requirement analysis. For the purpose of use for developing guidelines and for professional use to show to stakeholders. Planning plays an integral role specifically in the development of an object-oriented systems. This is primarily due to object-oriented programming involving the breaking down of system elements into smaller sections to better understand the implementation. This is where UML design can be used to visually show the different components involved in a system. The relationships shown in the UML is ultimately determined by the type of diagram used and what the overarching goal of the system is. The task of designing my own system for an automated car involved applying the newly learned skills of system design and UML in the creation of a design document. I found this task to be quite difficult when making the numerous UML diagrams as I did not have a clear idea of the scope my system when starting. This task gave me the opportunity to develop upon the diagrams I had previously made in units 1 to 5, which had taught me the purpose of each type of model. The class diagram I believe is the most important due to the value it brings to developers. It helped the planning of classes, attributes and the relationship between them. The use case which help in the formation of a class diagram shows the interactions between actors and the system. The use case diagram in particular proved to be the most difficult for myself as I wanted to show the full scope of the system in a single diagram however it may have been improved by making two use cases to remove any clutter or confusion from my original diagram.

Implementation of OOP:

The formation of the other three UML diagram being that of the state, activity and sequence diagram all proved to be useful elements of the system design that together helped to present all view points and aspects, to help myself in the task of implementation OOP.

The task of using OOP in Python involves understanding the principles and concepts of object-oriented programming and then applying them to develop solutions. This includes defining classes to represent objects, using inheritance to inherit properties and methods from existing ones using polymorphism to create flexible and adaptable code and using encapsulation to hide implementation details.

For my automated car program, the formation of classes and the use of inheritance were my most used object-oriented concepts. This has led me gain much confidence in applying these again in future projects. I found that applying the concept of polymorphism to be the most difficult of the components of object-oriented design. It took me a lot of practice and the creation of a program for the navigation module for my automated car to properly understand how to implement polymorphism.

The testing and debugging stages are something that I had rarely made full use of in the past, I primarily focus on the overall functionality rather than inspecting if each component. This has changed now due to my work on the automated car system where I continuously had to test each class and component as each section was vital for the function of the system, this was often accomplished with the use of python built in assert testing statements. It is critical in OOP to ensure that the codes are reusable this ultimately depends on the reliable and if it works correctly in different contexts. Testing helps ensure that code can be reused with confidence.

Personal Developments:

My personal development through the module spans further than just improvements to my coding and software development abilities that are discussed above. At the end of the module I feel more confident about programming overall, especially using an object-oriented approach. My development processes to coding have now changed as I now fully realise the importance of planning beforehand and having a clear idea of what each aspect of the system needs to accomplish, via the breaking down of the system into smaller sections. Allowing myself to add more functionality and perform more effective testing.

Finally, although I feel I have reached my expectations and goals set at the start of the module. I have also identified some areas of the object-oriented programming module that I still need further improvement upon. These are my application of data structures and creation of corresponding search algorithms.