Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems

Douglas C. Schmidt, Vanderbilt University

In this course--the second in a trans-institution sequence of MOOCs on Mobile Cloud Computing with Android--we will learn how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked services on mobile devices running Android that connect to popular cloud computing platforms.

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, Javaprogramming 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 run from January 21st - April 28th. 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 run from May 12th - July 6th. 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 run from July 21st - September 29th. 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.
  • The final Capstone project MOOC in the sequence will run from October 1st - November 3rd. For this first offering of the Mobile Cloud Computing with Android (MoCCA) Specialization only students in the Signature Track who receive a "Verified Certificate with Distinction" are eligible to enroll in the Capstone project course.

Some of the programming assignments and the iRemember integrative 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.


The course is organized into the following sections:

  • Section 0: Course Introduction
    • Part 1: Overview of Mobile Cloud Computing with Android
    • Part 2:Course Structure and Topics
    • Part 3: Course Prerequisites and Learning Strategies
    • Part 4: Overview of Patterns and Frameworks
  • Section 1: Android Concurrency
    • Module 1: Concurrency Motivations and Challenges
      • Part 1: Concurrency Motivations
      • Part 2: Concurrency Challenges
    • Module 2: Java Concurrency Mechanisms
      • Part 1: Overview of Java Threads (Part 1)
      • Part 2: Overview of Java Threads (Part 2)
      • Part 3: Motivating Java Synchronization & Scheduling Mechanisms
      • Part 4: Java Synchronization and Scheduling Classes
      • Part 5: Java ReentrantLock
      • Part 6: Java ReentrantReadWriteLock
      • Part 7: Java Semaphore
      • Part 8: Java ConditionObject
      • Part 9: Java CountDownLatch
      • Part 10: Java Synchronization and Scheduling Example
      • Part 11: Java Built-in Monitor Objects
    • Module 3: Android Concurrency Frameworks
      • Part 1: Overview of Android Concurrency Frameworks and Idioms
      • Part 2: Android Looper
      • Part 3: Overview of Android Handler
      • Part 4: Posting and Processing Runnables to Android Handler
      • Part 5: Sending and Handling Messages to Android Handler
      • Part 6: The AsyncTask Framework (Part 1)
      • Part 7: The AsyncTask Framework (Part 2)
      • Part 8: Programming with Android Concurrency Frameworks (Part 1)
      • Part 9: Programming with Android Concurrency Frameworks (Part 2)
  • Section 2: Android Services and Security
    • Module 1: Android Services and IPC
      • Part 1: Overview of Started and Bound Services
      • Part 2: Programming Started Services (Part 1)
      • Part 3: Programming Started Services (Part 2)
      • Part 4: Android IntentService
      • Part 5: Activity and Service Communication
      • Part 6: Service to Activity Communication Using Android Messenger
      • Part 7: Programming Bound Services with Messengers (Part 1)
      • Part 8: Programming Bound Services with Messengers (Part 2)
      • Part 9: Programming Bound Services with AIDL
    • Module 2: Android App Security and Risks
      • Part 1: Traditional App Accounts
      • Part 2: Mobile vs. Traditional App Accounts
      • Part 3: App Account Mapping to Linux Users
      • Part 4: Apps Lie & Steal
      • Part 5: How Android Protects Apps
      • Part 6: What Android Doesn't Protect
      • Part 7: Avoid Storing Sensitive Data in Public Locations
      • Part 8: Risks of Insecure File Permissions
    • Module 3: Building More Secure Android Apps
      • Part 0: The Challenge of Secure Coding
      • Part 1: Security Vulnerability Walkthrough
      • Part 2: Principles of Secure Abstractions
      • Part 3: Avoid Coupling Data & Security State
      • Part 4: Build Abstractions that are Hard to Use Insecurely
      • Part 5: Bound & Strongly Type Security State
      • Part 6: Avoid Conditional Logic in Secure Pathways
      • Part 7: Prevent Secure Pathways from Being Broken at Runtime
      • Part 8: Privilege Escalation Concepts
      • Part 9: Privilege Escalation Scenario
      • Part 10: Privilege Escalation Code Walkthrough
      • Part 11: Privilege Escalation Fixes
      • Part 12: User Interface Attacks
      • Part 13: Cross-platform User Interface Attacks
  • Section 3: Concurrency and Communication Patterns in Android
    • Module 1: Coordinating Concurrent Access to Shared Data
      • Part 1: The Monitor Object Pattern (Part 1)
      • Part 2: The Monitor Object Pattern (Part 2)
    • Module 2: Activating Services on Demand
      • Part 1: The Activator Pattern (Part 1)
      • Part 2: The Activator Pattern (Part 2)
    • Module 3: Passing Commands to Services
      • Part 1: The Command Processor Pattern (Part 1)
      • Part 2: The Command Processor Pattern (Part 2)
    • Module 4: Automating Marshaling and Demarshaling of Data
      • Part 1: The Proxy Pattern (Part 1)
      • Part 2: The Proxy Pattern (Part 2)
    • Module 5: Supporting Object-Oriented Remote Method Calls
      • Part 1: The Broker Pattern (Part 1)
      • Part 2: The Broker Pattern (Part 2)
    • Module 6: Decoupling Producers from Consumers
      • Part 1: The Publisher-Subscriber Pattern (Part 1)
      • Part 2: The Publisher-Subscriber Pattern (Part 2)
    • Module 7: Ensuring Only One Looper Per Thread
      • Part 1: The Thread-Specific Storage Pattern
    • Module 8: Passing Message Requests Between Threads
      • Part 1: The Active Object Pattern
    • Module 9: Decoupling Synchronous & Synchronous Processing
      • Part 1: the Half-Sync/Half-Async Pattern

Throughout the MOOC we'll focus 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 versions of all the slides used in the course will be available online as the videos become available on the course website.

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.

Suggested Readings

Although the lectures are designed to be largely self-contained, it's recommended (but not required) that students refer to the following books:
Much of this material is available online.

Course Format

The POSA MOOC is the second course in the Mobile Cloud Computing with Android (MoCCA) Specialization. It consists of lecture videos with integrated quiz questions designed to ensure students understand the material covered in the videos.  In recognition that not all students have the same learning objectives or available time, the POSA MOOC is offered at the following two levels of engagement: 
  • Normal Track – Estimated Time Commitment:  3 – 4 Hours Per Week. Students at this level will be assessed by weekly auto-graded standalone quizzes.  This track is designed for those who wish to engage the material by taking the auto-graded quizzes, as well as participating in the online discussion forums, but who may not have the time/interest to complete the auto-/peer-graded programming assignments.  
  • Distinction Track – Estimated Time Commitment: 8 – 12 Hours Per Week. In addition to completing the auto-graded weekly quizzes from the Normal Track, students in this track will also complete auto-/peer-graded programming assignments. These programming assignments will involve writing concurrent Android Services and Applications using its pattern-oriented frameworks written in Java, This track is designed for those students wishing to achieve mastery of the POSA MOOC material and to understand its application in realistic project context. 
Students need not explicitly choose which of these two Tracks to take since Statement of Accomplishment will automatically be generated corresponding to the work students successfully perform in the POSA MOOC. In particular, the grading system will first assume the students are doing Distinction Track. If the students don't qualify for Distinction Track, the system will fallback to Normal Track grading, which grade only based on the quizzes, as discussed below. The final grade for the course will be calculated as follows:
  1. Weekly quizzes (Weighting: 100% for "Normal Track" and 30% for "Distinction Track")

    Each quiz will contain a number of equally-weighted questions. You will have until noon central time on the last day of the class (July 6th) to submit the quiz.  There will be roughly eight quizzes.

  2. Programming assignments (Weighting: 70% for "Distinction Track" and not applicable for "Normal Track")

    You will have N programming assignments (where N == 8) by the end of the course. You will have roughly 14 days to submit your solution. The total weekly assignment score will be 70% of the final course score for students taking the "Distinction Track". Each assignment will account for 1/Nth of the total programming assignment points, so it's possible to miss an assignment or two and still pass the class as long as you do well on the other assignments.  

Statements of Accomplishment

Students who earn a final grade greater than or equal to 70% on the quizzes will receive a Statement of Accomplishment for the "Normal Track". 

Students who wish to receive a Statement of Accomplishment with Distinction, however, must complete the programming assignments for the "Distinction Track", as described above. 

Signature Track

Coursera also offers the Signature Track, which is orthogonal to the Normal Track and Distinction Track described above. The main purpose of Signature Track is to verify the identity of students. Students in the Signature Track can either receive a Verified Certificate (which involves meeting the criteria from the "Normal Track" described above) or a Verified Certificate with Distinction (which involves meeting the criteria rom the "Distinction Track" described above).  It's  mandatory for students in the Signature Track to successfully achieve a Verified Certificate with Distinction to take the Capstone project at the end of the MoCCA Specialization.


The 2014 POSA FAQ is located here
  • 12 May 2014, 8 weeks
Course properties:
  • Free:
  • Paid:
  • Certificate:
  • MOOC:
  • Video:
  • Audio:
  • Email-course:
  • Language: English Gb


No reviews yet. Want to be the first?

Register to leave a review

Included in selections:
More on this topic:
6-092iap10 Introduction to Programming in Java
This course is an introduction to software engineering, using the Java&trade...
91074_a2bf_5 Learn Android Programming Step By Step
With over 10 hours of content, this Android training course will teach you...
Extensionflag Software Design: Principles, Models, and Patterns
This course approaches object-oriented software design from three perspectives...
47806_ba82_5 Learn Android Programming From Scratch - Basics
A Fun Course For Learning Android Programming.
22062_18b2_5 Break Into The Programming Business
The world of programming for entrepreneurs and startups
More from 'Engineering & Technology':
Regular_1800ce45-0511-4bf2-b353-6b3bab9a9b60 Exploring Everyday Chemistry
Explore the organic chemistry behind perfume, medicine, brewing and sport from...
Regular_d22081d0-28bc-4122-b492-f3dcef8f6c27 Introduction to Psychology: The Psychology of Personality
Explore the complex factors and influences that help shape our personality and...
Regular_56cb2a32-9702-4b78-b8af-43bdf0a0a21a Beneath the Blue: The Importance of Marine Sediments
Understand the importance of our planet's seafloor and get an introduction to...
Regular_29f57fb2-9098-4f9b-91f4-9c3504a2ac33 Engineering the Future: Creating the Amazing
Learn more about the fascinating world of engineering, and discover where an...
Regular_a010978b-2f41-4422-a3d9-d1c8b34f5c13 Antimicrobial Stewardship for the Gulf, Middle East and North Africa
Improve your knowledge of the spread of antimicrobial resistance in the Gulf...
More from 'Coursera':
Success-from-the-start-2 First Year Teaching (Secondary Grades) - Success from the Start
Success with your students starts on Day 1. Learn from NTC's 25 years developing...
New-york-city-78181 Understanding 9/11: Why Did al Qai’da Attack America?
This course will explore the forces that led to the 9/11 attacks and the policies...
Small-icon.hover Aboriginal Worldviews and Education
This course will explore indigenous ways of knowing and how this knowledge can...
Ac-logo Analytic Combinatorics
Analytic Combinatorics teaches a calculus that enables precise quantitative...
Talk_bubble_fin2 Accountable Talk®: Conversation that Works
Designed for teachers and learners in every setting - in school and out, in...

© 2013-2019