Sunday Full-Day Tutorials (9:00am - 5:30pm)
SF1: Introduction to Ada
Michael B. Feldman
Level — Beginner, but attendees should have some experience with a
high-level programming language.
This tutorial is designed for those who have some familiarity with a programming language,
but who are new to Ada. In the morning, we will discuss the basics of programming in Ada,
including types, packages, syntax rules, and other Ada programming constructs. In the
afternoon, we will cover Ada’s object-oriented programming and concurrent-programming
features. Many examples will be shown; freely downloadable Ada programming environments
and tools will be demonstrated.
Sunday Morning Tutorials (9:00am - 12:30pm)
SA1: How Ada Object Orientation Works
Jeanne Murtagh, Drew Hamilton
Level — Intermediate.
Recommended Prerequisites: Familiarity with Object Oriented Programming
principles in a language such as Ada, Java, or C++ is recommended.
Previous experience with C or Ada 83 is strongly recommended.
This tutorial will briefly describe the Object-Oriented (OO) features
provided by Ada 95, and then discuss in detail how some of these
features are implemented “under the hood.” The bulk of the tutorial
will show, via code examples and discussion, how dynamic dispatching is
implemented in Ada 95, issues associated with the class tag, and the
effort required to add a sibling class and a child class to an existing
We will briefly discuss several Ada 2005 features, and the value these
features add over an Ada 95 implementation of a program.
We will conclude with a brief discussion of the “overloaded vocabulary”
issues encountered by Java and C++ programmers as they transition to an
Ada 95 or Ada 2005 project “on the fly.”
Sunday Afternoon Tutorials (2:00 - 5:30pm)
SP1: Embedded Systems Engineering with the AADL: Modeling & Analysis
Level — Intermediate.
The SAE Architecture Analysis & Design Language (AADL) is an architecture description
language for real-time, fault-tolerant, scalable, embedded, modular multiprocessor systems.
It enables the development of highly evolvable systems, early and quantitative analyses of
a system’s architecture, and evolution of an architecture model for continued analysis
throughout the lifecycle. In this tutorial, we provide an overview of the AADL; demonstrate
the AADL’s capabilities in creating and analyzing component-based models of the task and task
interaction architectures of embedded software; discuss interfacing to physical devices;
highlight AADL capabilities for predictive analyses of operational characteristics such
as meeting deadline, response time, and throughput requirements; and describe how the
AADL can discover system integration problems early in a development effort.
Monday Full-Day Tutorials (9:00am - 5:30pm)
MF1: SPARK - The Libre Language and Toolset for High-Assurance Software
Level — Intermediate
SPARK is an annotated sub-language of Ada which is unambiguous and suitable for rigorous static
analysis. It has been extensively used in industrial applications where safety and security are
paramount, such as miltary aerospace, rail signaling, and high-grade cryptographic systems.
The design of SPARK aligns closely with rigorous engineering approaches such as PSP/TSP, Six-
Sigma, and the principles of the Lean Engineering movement in taking a “zero tolerance” approach to
In this light, SPARK is far more than “just a programming language” - it offers a distinct engineering
mindset and discipline for the development of high-assurance systems.
The tutorial, which is extracted from the four-day “Software Engineering with SPARK” course will
cover: The rationale and design goals of SPARK, the core SPARK language, and SPARK analyses
including information flow, exception freedom, and formal verification, and the impact of SPARK on
software process. The tutorial will also cover the “Libre” release of the SPARK technology and the
research topics that this opens, such as more advanced forms of analysis and proof, model-checking,
and language extensions.
Monday Morning Tutorials (9:00am - 12:30pm)
MA1: Unmanned Systems and Ada
Cynthia Cicalese, Joel Sherrill, Ricky E. Sward, Richard Weatherly
Level — Intermediate
This tutorial provides an introduction to the growing field of Unmanned Systems
and the role that Ada plays in solving the challenges presented when designing,
building, and operating Unmanned Systems. The tutorial begins with an
introduction to the fundamentals of ground, air, and maritime Unmanned Systems
and the specific challenges of these systems. The authors will demonstrate how
they are using Ada over RTEMS in developing Large Unmanned Ground Vehicles.
RTEMS is an open source, real-time operating system that provides a high
performance environment for embedded applications on a range of processors and
embedded hardware. The attendee will gain hands-on experience in developing an
Ada application over RTEMS using an environment that provides a complete GNAT
Ada installation with all sources and scripts as well as the prebuilt toolset
and simulators. The attendee will gain from this tutorial an understanding of
Unmanned Systems and a practical application of how Ada can be used in the
development of these systems.
MA2: Ada for Real-Time and Parallel Processing
John W. McCormick
Level — Intermediate. This tutorial assumes basic knowledge or
experience with the Ada programming language.
This tutorial covers two of the major problems with parallel and
real-time programming - time management and storage management.
Parallel processing, whether on single-processor machines or
multiple processors, has many pitfalls. We will examine these
potential pitfalls, and discuss ways to avoid common problems,
such as deadlocks and race conditions. We will also discuss how to
write code that efficiently passes data with other parallel
processes. The basics of parallel processing are covered, leading
to a discussion and examples using Ada tasking. In addition, the
Ada Real-Time Systems Annex is also covered.
Monday Afternoon Tutorials (2:00 - 5:30pm)
MP1: Service Oriented Architecture (SOA) Concepts and Implementations for Ada
Ricky E. Sward
Level — Intermediate
This tutorial covers the principles of Service-Oriented Architectures
(SOA) including loose coupling, encapsulation, reusability,
composibility, etc. The attendee will learn about the Ada Web Server
(AWS) and how SOA interfaces, session management, etc. are implemented
using AWS. The tutorial will also cover the fundamentals of the
Enterprise Service Bus (ESB), a key enabling component of the SOA.
Attendees will learn about ESB endpoints, data routing, automatic
translations, etc. They will also learn how to connect Ada web services
to an ESB, how to expose the web services, and how to use AWS with the
ESB through in-class exercises and demonstrations.
MP2: Embedded, Hard, Real-Time Systems with Ada
Level — Intermediate/Advanced.
Development of real-time systems is expensive and difficult, in part
because of low-level languages that force developers to use facilities
that are ad hoc, incomplete, and not portable. The Real-Time Systems
Annex of Ada 2005 (along with the language core) represents the
state-of-the-art in real-time programming languages and offers an
extensive set of standardized packages and facilities for this domain.
In addition, the language-defined Ravenscar profile describes a tasking
subset that is analyzable for both high-integrity and hard real-time
applications, and is small enough for very tightly resource-constrained
applications as well. This tutorial examines the packages and pragmas
defined by the annex for direct application use, examines the Ravenscar
profile, and provides detailed examples of how they both are meant to be
MP3: Multi-Language Programming with Ada
Level — Intermediate.
Building complex applications often requires putting together pieces of software or
requirements that have not been made to work together in the first place. Thinking of
a project with a high integrity kernel written in Ada, using a set of low level libraries
and drivers written in C or C++, with a graphical interface done in Java and unit tests
driven by python is not thinking of science-fiction anymore. It?s actual concrete and
day-to-day work. Unfortunately, having all of these technologies talking one to
another is not straightforward, and often requires a deep knowledge of both sides of the
technology and extensive manual work.
In this tutorial, we’ll first study how to interface directly Ada with native languages,
such as C or C++. We’ll then have a deep look at communications with languages
running on virtual machines, such as Java, Python and the .NET framework. Finally,
we’ll see how Ada can be interfaced with an arbitrary language using a middleware
solution, such as SOAP or CORBA We?ll see how the communication can be
manually done using low level features and APIs, and how a substantial part of this
process can be automated using high level binding generators.