Education guidelines for this Elective:
Advanced Software Construction
Content:
The general intention of the course is provide you with a deeper knowledge on several key topics in modern Software Development. The focus will be on obtaining practical, applicable skills rather than theoretical knowledge. Also, the focus will primarily be on methodologies, programming techniques and language features rather than on specific dish-of-the-day technologies.
Advanced C# language features relevant and other features for building Frameworks
- Reflection (dissecting types at run-time)
- A closer look at iteration (indexers, iterators and collection interfaces)
- Operator Overloading (giving meaning to operators like ‘+’ and ‘-‘ on object level)
- Anonymous Types (creating new types at run-time)
- A closer look at LINQ
- A deeper dive into Design Patterns
- A deeper dive into the SOLID principles
- Refactoring techniques
Concurrency
- How to use state machine for multiple asynchronous input
- Advanced use of synchronous mechanism in C#
- How to use parallelism in C#
Educational goals
Knowledge:
After completing the course, you should have obtained knowledge about:
- Several important advanced C# language features
- The purpose and usefulness of the SOLID principles
- The diversity of Design Patterns
- Refactoring techniques and tools
- The problems and solutions of concurrency
Skills:
After completing the course, you should have acquired the skills to:
- Actively use a larger part of the C# language features when developing software e.g. Frameworks.
- Develop software that adheres to the SOLID principles deviations from the principles.
- Discover more scenarios where use of Design Patterns will be beneficial, and be able to apply specific Design Patterns correctly.
- Discover opportunities for refactoring in software, and be able to apply specific refactoring techniques correctly, possibly aided by available tools and technologies
- Proper use of concurrency control mechanism.
Competences:
After completing the course, you should have acquired the competences to:
- Participate in development of larger, modern software systems, involving a broad range of the above methodologies and practices.
- Develop Object-Oriented code of high quality, but also being able to identify code of dubious quality, and know how to convert such code into high-quality code in a systematic way.