In a cyber-physical system there will be a range of components with different digital processing and security needs. From a systems engineering perspective it is important to understand the consequences of choosing specific programming languages for individual components and how this affects the cyber security of both the component and the overall system.
In the course of a career, engineers may work with many different languages, separately or together. If specifying requirements or developing software-based solutions, they must understand the programming models underlying different languages and make informed design choices in languages supporting multiple complementary approaches. The engineer is likely to need to learn new languages and programming constructs. They therefore must understand the principles underlying how programming language features are defined, composed, and implemented. The effective use of programming languages, and appreciation of their limitations, also requires a basic knowledge of programming language translation and static program analysis, as well as run-time components such as memory management.
This module enables students to develop insight into the significant differences between different programming paradigms. Object oriented programming, functional programming and event driven programming are given special emphasis. Students develop solutions under these different paradigms to embed theoretical concepts into professional practice.