Abstraction-oriented programming¶ Strong typing Type-based security Example: Table access Typical implementation Using stronger typing Example: Multiple indices Typical implementation Using stronger typing Discriminants Object-Oriented Programming Primitives Overriding indicators Abstract types and subprograms Interfaces Null records vs. interfaces Example: Extending Interfaces Using new interfaces Using null procedures Calling inherited subprograms Dynamic Polymorphism Controlled types Ada.Tags package User-defined indexing Generics Mapping of Definite and Indefinite Subtypes Formal incomplete types Formal packages Abstracting definitions into packages Formal package parametrization Abstracting procedures into packages Abstracting the test application Cascading generic packages Signature Packages Formal objects Input-output formal objects Formal definite and indefinite types Formal incomplete type Default subtype mark Formal private and derived types Formal interfaces Generating subprogram specifications Facilitating arrays of interfaces Discussion: formal interfaces vs. other approaches Formal synchronized interfaces Formal numeric types Formal floating-point types Formal fixed-point types Generic Renaming