Pattern-Oriented Software Architecture: Programming Mobile Services for Android Handheld Systems
This ten week Coursera massive
open online course (MOOC) entitled Pattern-Oriented Software
Architecture: Programming Mobile Services for Android Handheld
Systems will teach students how to apply patterns and frameworks
to alleviate the complexity of developing concurrent and networked
software for mobile devices using the Android platform. Students will
write concurrent and networked software programs in Java using Android open-source
pattern-oriented software architecture frameworks. The course will
begin on April 2nd, 2014 and run through the middle of June, 2014.
About this Course
The confluence of multi-core and distributed-core processors, inexpensive mass storage, ubiquitous wireless connectivity, and commodity software platforms is driving the need for software engineers and programmers who understand how to develop
concurrent and networked software for mobile devices that connect to cloud computing platforms. Despite many improvements in processors, storage, and networks, however, developing quality software on-time and on-budget remains hard. Moreover,
developing high quality reusable
concurrent and networked software apps and services is even harder. The principles, methods, and skills required to develop such software are best learned by attaining mastery of patterns, pattern languages,
and frameworks.
A pattern describes a reusable solution to a common problem that arises within a particular context. When related patterns are woven together they form a pattern language that
defines a vocabulary and a process for the orderly resolution of software development problems. A framework is an integrated set of components that collaborate to provide a reusable
architecture for a family of related apps or services. Frameworks can also be viewed as concrete realizations of pattern languages that facilitate direct reuse of detailed design and source code.
This MOOC describes by example how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked software for mobile devices via the use of object-oriented design techniques,
Java programming language features, and Android middleware. An extended case study project
will be used throughout the MOOC to showcase pattern-oriented software design and programming techniques for concurrent and networked mobile devices and clouds.
Note: This course is part of a trans-institution sequence of MOOCs entitled Mobile Cloud Computing with Android
This MOOC and two others, taught by Dr. Adam Porter from the University of Maryland and Dr. Jules White from Vanderbilt University, have been designed to complement each other as part of the first trans-institution sequence of MOOCs taught on the Coursera
platform, structured as follows:
- The University of Maryland MOOC, Programming Mobile Applications for Android Handheld Systems, will start on January 21st, 2014. It focuses on the design and programming of user-facing
applications.
- The first Vanderbilt MOOC in the sequence, Programming Mobile Services for Android Handheld Systems, will start on April 2nd. It focuses on middleware systems programming topics, such as synchronous
and asynchronous concurrency models, background service processing, structured data management, local inter-process communication and networking, and integration with cloud-based services.
- The second Vanderbilt MOOC in the sequence, Programming Cloud Services for Android Handheld Systems, will be start on June 15th, 2014. It focuses on how to connect Android mobile devices to cloud
computing and data storage resources, essentially turning a device into an extension of powerful cloud-based services on popular cloud computing platforms, such as Google App Engine and Amazon EC2.
Some of the programming assignments and the course project for these MOOCs will be coordinated.
If you just want to take some of the MOOCs in this sequence or take them all in different order you.re certainly welcome to do so, and you'll still learn a lot. However, if you take all the MOOCs in this sequence in the order presented you'll gain a deeper,
end-to-end understanding of handheld systems, their applications and services, as well as their integration into the cloud.
Course Objectives
Upon completing this course, students will be able to:
- Recognize the inherent and accidental complexities involved with
developing concurrent and networked software for Android
devices.
- Understand how pattern-oriented software architecture techniques
can and cannot help to alleviate this complexity.
- Apply key pattern-oriented software architecture techniques to
develop reusable concurrent and networked Android software using
the Java object-oriented programming language and Android
middleware platform.
- Understand Android systems programming mechanisms and use them
effectively to develop concurrent and networked software apps and
services.
- Know where to find additional sources of information on how to
successfully apply pattern-oriented software architecture techniques
to concurrent and networked software on Android and other mobile
platforms.
Course Format
The class will consist of lecture videos with integrated quiz
questions designed to ensure that you're understanding material
covered in the videos. There will also be weekly auto-graded
standalone quizzes, as well as peer-graded short essays and
programming assignments that are not part of the videos and optional
reading material. The programming assignments will involve writing
concurrent and networked software in Java using the pattern-oriented
software architecture frameworks in Android. There will also be a
final exam.
Recommended Background
Ideally, students who take this course will be familiar with general
object-oriented design and programming concepts (such as
encapsulation, abstraction, polymorphism, extensibility, and the
Unified Modeling Language (UML) ), fundamental object-oriented
programming language features (such as classes, inheritance, dynamic
binding, and generics available in Java, basic systems programming
concepts (such as event handling, processes/threads, synchronization,
interprocess communication, and dynamic linking), and networking
terminology (such as client/server and peer-to-peer architectures,
TCP/IP, and layering). We will review object-oriented design, systems
programming, and networking concepts and techniques, so students who
understand how to read/write Java code examples should be fine.
Course Structure
The course is organized as follows:
The course is organized into two parts, as follows:
-
Section 0: Overview of all the topics covered in
this part of the course, which helps you visualize the motivations for--and challenges of--concurrent and networked software for mobile devices running Android. We also describe what patterns
and frameworks are and explain by example how they help address key challenges of concurrent and networked software in mobile devices.
- Section 1: Applying patterns and frameworks for Android middleware systems programming, which focuses on pattern-oriented software architecture, with an emphasis on concurrent and networked programming in the context of Android middleware
systems programming mechanisms, such as synchronous and asynchronous concurrency models, background service processing, storage and retrieval of structured data, and local inter-process communication (IPC) and networking. We illustrate by example how
key pattern and framework concepts and relationships are applied in Android Services, Content Providers, Broadcast Receivers, and various secure local and remote IPC mechanisms from both an application and infrastructure perspective. Many code
examples are shown throughout using Java, with a case study project used to reify the key points throughout all the modules in this section.
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.