Define encapsulation and data hiding and explain why both are necessary for proper ADT implementation.
Identify the two problems with C-style ADTs (interface bypass and unauthorized operations) and explain how encapsulation mechanisms solve them.
Distinguish between the two encapsulation mechanisms — modules/packages and classes — including their trade-offs (module: time-efficiency and performance; class: flexibility, reusability, and maintenance).
Read and interpret Ada package specifications and bodies, including the role of the private section.
Explain the difference between using a package as an ADT container vs. using it as an “object,” and identify the limitation of the latter (only one instance at a time).
Read and interpret Ada generic packages and explain how generic instantiation overcomes the single-instance limitation.
Trace the historical evolution from Simula → Smalltalk → C++ → Java, identifying what each language contributed to encapsulation.
Compare generic mechanisms across languages: Ada generic packages, C++ templates, and Java generics, noting the relative elegance of each.