This course is an introduction to applied software design methods for use in the writing of efficient, reusable, and modulator C++ programs. These methods include the use of the following: classes, inheritance, and polymorphism; design patterns; high-level programming techniques using libraries, generics, and containers; widgets, models, and views; software frameworks for embedded systems; and advanced techniques ranging from multi-threading to reflective programming.
Why take this course?
Large-scale software systems are widely used in the design, analysis and testing of current computing systems. In addition, modern embedded systems run programs developed in high-level languages based on extensive software libraries. The ability to design and implement such software systems is an essential skill for computer engineers pursuing careers in industry and academia.
C- or better in 2574
This course requires students to design and develop software in C++ using class-based libraries and interface documentation. It is assumed that students have a level of programming experience commensurate with having successfully passed ECE 2574, an introduction to data structures and software engineering in C++.
Major Measurable Learning Objectives
Use software design patterns and application programming interface (API) specifications to implement efficient and portable software
Design and implement multi-threaded and multi-process applications that rely on standardized inter-process communication and synchronization mechanisms
Design and implement complex software applications based on portable software frameworks and event-driven programming
Design, implement, and peform testing strategies including unit and integration testing
Percentage of Course
Introduction to class-based software libraries
Inheritance and polymorphism
Introduction to design patterns
Generics and containers
Introduction to processes, threads
Inter-process communication and synchronization
Models and Views
Software life cycle models, unit and integration testing