Notes on
Abstraction and Modularity:
Chapter Index
H. Conrad Cunningham
13 July 2022
Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. A good choice as of July 2022 is a recent version of Firefox from Mozilla.
This chapter discusses the primary imperative and declarative programming paradigms and various subparadigms. It presents the imperative examples in Java and Scala, the declarative/functional examples in Haskell and Scala, the declarative/relational examples in Prolog, the imperative/procedural examples in Python and Scala, and the imperative/modular examples in Python and Scala,
This chapter discusses the object model and the object-based, object-oriented, and prototype-based programming paradigms. It presents the object-based and object-oriented examples in Python and Scala and the prototype-based example in Lua.
This chapter discusses procedural abstraction and modular design in Haskell.
This chapter discusses data abstraction and modular design in Haskell.
This chapter presents the Digraph ADT case study in Haskell.
This chapter presents the Digraph ADT case study in Scala. It is similar to ELLIFF chapter 22, but also includes some general concepts on data abstraction and modular design.
This possible future chapter presents Scala, Python, and Ruby implementations of a CookieJar ADT.
The oldest notes in this pile are the Notes on Data Abstraction that I wrote originally when I was learning and teaching object-oriented programming and the relatively new Java language in 1996. I wrote the other notes as my understanding evolved and I learned and taught other languages over the subsequent 23 years. See the acknowledgements sections for the various documents for more specific information.
I retired from the full-time faculty in May 2019. As one of my post-retirement projects, I am continuing work on possible textbooks based on the course materials I had developed during my three decades as a faculty member. In January 2022, I began refining the existing content, integrating separately developed materials together, reformatting the documents, constructing a unified bibliography (e.g., using citeproc), and improving my build workflow and use of Pandoc.
I maintain this document as text in Pandoc’s dialect of Markdown using embedded LaTeX markup for the mathematical formulas and then translate the document to HTML, PDF , and other forms as needed