开始时间: 04/22/2022 持续时间: 8 weeks
大学或机构: Vanderbilt University（范德堡大学）
授课老师： Douglas C. Schmidt
The advent of multi-core and distributed-core processors, coupled with ubiquitous wireless and wired connectivity, is driving the need for software engineers and programmers who understand how to develop concurrent and networked software. Despite many improvements in processors and networks, however, developing concurrent and networked software remains hard and developing high quality reusable concurrent and networked software is even harder. The principles, methods, and skills required to develop such software are best learned by understanding patterns, pattern languages, and frameworks.
A pattern is general reusable solution to a commonly occurring problem within a given context in software design. When related patterns are woven together they form a pattern language that provides a process for the orderly resolution of software development problems. Frameworks can be viewed as concrete realizations of pattern languages that facilitate direct reuse of design and code.
This course describes how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked software via the use of object-oriented design techniques and programming language features, distribution middleware, and advanced operating system mechanisms. Case studies from the domains of mobile apps, web servers, communication middleware, and avionics systems will be used to showcase pattern-oriented software architecture design and programming techniques for concurrent and networked software.
The course is organized as follows:
Section 1: Introduction to concurrency and networking (3.5 hours), which provides background info pertaining largely to the OS and middleware layers. We discuss key design dimensions of concurrent and networked software, as well as review common operating system programming mechanisms and Android programming mechanisms. This part focuses on concepts and is generally independent of programming language.
Section 2: Overview of patterns and frameworks (6 hours), which focuses on pattern-oriented software architecture, with an emphasis on concurrent and networked software. We explore key pattern and framework concepts, relationships, and examples, as well as evaluate the pros and cons of patterns and frameworks. Small code examples are shown throughout using C++ and Java, though this section concentrates more on design rather than programming.
Section 3: Applying patterns and frameworks to develop concurrent and networked software (6 hours), which examines lots of code. An open-source web server is used as a running example to illustrate patterns and frameworks pertaining to service access, communication, synchronous event handling, connection establishment, service initialization, service configuration and activation, concurrency and synchronization, and asynchronous event handling. The bulk of the examples are in C++, along with some Java examples to demonstrate the generality of patterns and frameworks.
Appendix: Presents a case study that applies many "Gang of Four" patterns (3.5 hours) that aren't directly related to concurrent and networked software. It evaluates the limitations with algorithm design and shows how pattern-oriented design alleviates these limitations. The examples are largely in C++, again with some Java examples to show how pattern-oriented design simplifies portability across programming languages.
The PDF and PowerPoint versions of all the slides used in the course will be available online as the videos become available on the course website. You can download this material from here.
In this course we will learn how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked software.