Course Synopsis
CS *253 will provide students with a deep understanding of conceptual
and practical aspects of designing, implementing, and debugging
parallel software apps using patterns and frameworks related to Java
and Android. Key topics
covered in this course include:
- Developing, documenting, and testing apps using the functional programming features associated with
Java on the Android platform.
- Reuse of patterns and software architectures
- Developing parallel software using Java and Android.
Design and implementation based on patterns and frameworks are central
themes to enable the construction of reusable, extensible, efficient,
and maintainable parallel software. In addition, abstraction based on
patterns and functional programming techniques will be the central
concepts and principles throughout the course. These concepts and
principles will enable you to construct reusable, extensible,
efficient, and maintainable parallel software.
Patterns will be taught so that you will have good role models for
structuring their own designs, as well as to clearly articulate the
tradeoffs of alternative methods for designing systems.
Object-oriented and functional techniques will be taught so that you
will learn by example how to build highly decentralized parallel
software architectures that decouple inter-dependencies between
components and map domain intent clearly onto computational elements.
You are expected to be familiar with Java and basic Android.
Course Contents
The following is a representative sample of the course contents, which
may change as the course progresses.
- Week 1
- CS *253 Overview and Logistics
- Overview of Java 8 Foundations
- Week 2
- Overview of Java 8 Lambda Expressions and Method References
- Overview of Java 8 Functional Interfaces
- Background of Java Concurrency and Parallelism
- Week 3
- Applying Java 8 Functional Programming Features to a Parallel Program
- Introduction to Java 8 Parallelism Frameworks
- Week 4
- The Java Fork-Join Pool Framework
- Week 5
- Overview of Java 8 Streams
- Week 6
- Java 8 Sequential SearchStreamGang Example
- Week 7
- Java 8 Stream Factory Methods
- External vs. Internal Iteration in Java 8
- Contrasting Java 8 Streams with Other Technologies & Java Libraries
- Week 8
- Overview of Java 8 Parallel Streams
- Java 8 SearchWithParallelStreams Example
- Week 9
- Java 8 Parallel Streams Internals
- Week 10
- Java 8 SearchWithParallelSpliterator Example
- Java 8 Parallel ImageStreamGang Example
- When to Use (and Not Use) Java 8 Parallel Streams
- Week 11
- The Pros and Cons of Java 8 Parallel Streams
- Reactive Programming and Java 8 Completable Futures
- Motivating the Need for Java 8 Completable Futures
- Overview of Java 8 Completable Futures
- Week 12
- Overview of Basic Java 8 CompletableFuture Features
- Week 13
- Overview of Advanced Java 8 CompletableFuture Features
- Java 8 CompletableFutures ImageStreamGang Example
- Pros and Cons of Java 8 CompletableFutures
- Week 14
- Android App Components: Introduction
- Overview of Android (Part 1): Hardware and OS Layers
- Overview of Android (Part 2): Middleware Infrastructure Layers
- Overview of Android (Part 3): Application Framework and Apps Layers
- Overview of Layered Architectures
- Week 15
Back to CS *253 home page.