Ada 95 -the revised definition of the Ada programming language- provides support for object-oriented programming. This course offers a comprehensive view of object-oriented programming with Ada; it is divided in four parts. First, we examine the object-oriented features of the language, their use, and how they fit into Ada's strong type system and genericity mechanisms. Basic object-oriented mechanisms are covered: extension, inheritance, and polymorphism. Second, we show how to integrate these mechanisms into good programming practices; topics include incremental programming, heterogeneous data structures, mixin and sibling inheritance. We then demonstrate the proper use of these features in order to design for reuse, and to transition smoothly from Ada 83 to Ada 95. Finally, we compare standard object-oriented idioms in Ada vs. major object-oriented languages (e.g. C++, Smalltalk, Eiffel).