ECE 3574 Applied Software Design

B.S. Computer Engineering and B.S. Electrical Engineering, SEITZ 300, 2024

An introduction to applied software design methods for writing efficient, reusable, and modular C++ programs. Pre: 2574 with a C- or better. (3H, 3C)

ECE 3574 Applied Software Design

Sr.NoTopics
 Syllabus
1CMake and Catch2: Managing projects without CMake using multiple header and source files; Building projects with CMake and Make; CMakeLists.txt; Unit Testing using Catch2; Writing Test Cases
2C++ Introduction: data types; initialization; formatting floating point numbers; fallthrough; initializer with if and switch; yoda condition; gsl::narrow_cast; digit separator and locale; enum (scoped and unscoped); inline functions; pass by value/reference; dangling reference; default arguments in functions; vector; auto; const and constexpr
3C++ introduction to OOP: Scaling-up programs; this; reference and pointer: similarities and differences; when to use reference and pointer
4Object Oriented Programming: structs; class vs. struct; access control; encapsulation; abstraction; constructors; scope resolution; namespace; static members; static methods; const
5Inheritance: definition; extending base class; access specifiers for inheritance; multilevel inheritance; multiple inheritance (next lesson); composition; friend class
6Polymorphism: introduction; overloading and overriding; virtual function and pure virtual function; runtime polymorphism; function Hiding; multiple inheritance
7Generic Programming: introduction; generic function; template; deduction; generic class
8Memory Model: static, dynamic, and automatic memory allocation; malloc; calloc; free
9Memory Model: new; delete; overloading new and delete; memory management problems
10Copy Semantics: Resource Acquisition is Initialization (RAII); copy-ownership policies; rule of three
11Move Semantics: lvalue; rvalue; rvalue reference; rule of five
12Resource Acquisition is Initialization: problems in memory management; creating RAII Class; introduction to smart pointers
13Smart Pointers: unique pointer; shared pointers; weak pointers
14Smart Pointers: Using raw pointers vs smart pointers
15Lambda; for_each; Functor
16Concurrency: Process and Process states; Thread and Thread states; Creating thread with function, functor, lambda, member function; Running multiple threads; Concurrency bug
17Thread Communication: promise and future; async; creating tasks; introduction to data race
18Thread Communication: mutex and lock; deadlock; lock_guard and lock
19Thread Communication: condition variables, producer-consumer
20Process and Inter-process Communication: fork; wait; interprocess communication; creating pipe; exec; system call; output redirection; unix signals
21Idioms: RAII and copy-on-write
22Design Patterns: factory method; abstract factory; builder; singlton
23Software Engineering: software development process; requirements; Software design for embedded systems
24Testing: unit and integration testing
25Qt Framework: introduction, creating hello world application using Qt 6
26Qt Framework: Adding Class with Signals and Slots using code and GUI; event handling; QPushButton; QComboBox; QLineEdit; QSlider
27Qt Framework: Network Request for Content from a URL
28Qt Framework: Qt Widget Application; QThread