90 likes | 100 Views
Explore the main paradigms in C++, including procedural, functional, object-oriented, and generic programming. Study software engineering, architectural patterns, design patterns, and C++ idioms. Gain hands-on experience through studio exercises and team projects.
E N D
E81 CSE 532S: Advanced Multi-Paradigm Software Development Course Introduction Chris Gill Department of Computer Science and Engineering Washington University in St. Louis cdgill@cse.wustl.edu
We’ll Use all 4 Main Paradigms in C++ • Procedural • Iterators, algorithms • Functional • Binders, functions • Object oriented • Classes, inheritance • Generic • Templates, concepts and models, type inference, interface polymorphism C++
We’ll Also Study Software Engineering • Architectural Patterns • For concurrent (and later networked) software • Design Patterns • For well structured code • C++ Idioms • For well behaved software C++
Exploration Through Studio Exercises • Hands-on experience within each individual topic covered • Reinforce assigned readings and classroom discussions • Completion of required exercises (including posting your answers) is a baseline for the participation grade C++
We’ll Develop 4 Team Projects • One basic, one intermediate, two more advanced • Explore interactions between paradigms, patterns, idioms • Hands on experience building concurrent system software • Reinforce assigned readings, examples, and exercises C++
Course Resources • Required Text • [Williams] Williams: C++ Concurrency in Action • Readings will be assigned throughout the semester • Exams will cover all material in the course • Assigned readings as well as posted slides, studio exercises, and labs • Optional Texts (for reference and/or additional reading) • [Stroustrup] Stroustrup: The C++ Programming Language • [LLM] Lippman, Lajoie, and Moo: C++ Primer • Course Web Page • www.cse.wustl.edu/~cdgill/courses/cse532/ • classes.cec.wustl.edu/~cse532/ • Reading assignments, studios, labs, course syllabus and info • Course account: cse532@seas.wustl.edu (submit labs there)
Course Prerequisites • CSE 332S, “Object-Oriented Software Development Laboratory” (or graduate standing and proficiency with C++) • C++ language features and idioms for memory management, aliasing (pointers and references), classes and inheritance polymorphism, templates and interface polymorphism, function and operator overloading, etc. • Grad students assumed able to self-study rapidly on this if needed • CSE 422S (Operating Systems) • Conceptual foundations: threads, deadlocks, race conditions, etc. • Practical hands-on experience with threads, debuggers, etc.
Course Objective: Mastery • Mastery is a path, not a destination • George Leonard • “…if you only walk long enough.” • Lewis Carroll
First Reading Assignment • Please read before the next lecture • Required: [Williams] Chapter 1 • Optional: [Stroustrup] Chapter 42.1-42.2 • Questions to consider: • What is concurrency? • How do C++11 threads abstract independent computations? • Why and when should you use multi-threading?