ABSTRACT
Abstraction is a critical concept that underlies many topics in computing science. For example, in software engineering, the distinction between a component's behavior and its implementation is fundamental. Java provides two constructs that correspond to precisely this distinction: A Java interface is a client's abstract view of a component's behavior, while a class is a concrete implementation of that same component. We have developed a course that introduces Java while following a discipline of diligently decomposing every component into these two separate linguistic elements. In this course, interfaces are given the same prominence as classes since both are needed for a complete component. This approach is helpful to students by providing: (i) a clear manifestation of the role of abstraction in software systems, and (ii) a framework that naturally motivates many good coding practices adopted by professional programmers.
- D. J. Barnes and M. Kölling. Objects First with Java: A Practical Introduction Using BlueJ. Prentice Hall, 2002. Google ScholarDigital Library
- J. Bloch. Effective Java. Prentice Hall, 2nd edition, 2008.Google Scholar
- T. Colburn and G. Shute. Abstraction in computer science. Minds Mach., 17(2):169--184, 2007. Google ScholarDigital Library
- W. R. Cook, W. Hill, and P. S. Canning. Inheritance is not subtyping. In POPL '90: Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages 125--135, New York, NY, USA, 1990. ACM. Google ScholarDigital Library
- D. Gries. A principled approach to teaching OO first. In SIGCSE '08: Proceedings of the 39th SIGCSE technical symposium on Computer science education, pages 31--35, New York, NY, USA, 2008. ACM. Google ScholarDigital Library
- O. Hazzan and J. Kramer. The role of abstraction in software engineering. In ICSE Companion '08: Companion of the 30th international conference on Software engineering, pages 1045--1046, New York, NY, USA, 2008. ACM. Google ScholarDigital Library
- P. B. Henderson, D. Baldwin, V. Dasigi, M. Dupras, J. Fritz, D. Ginat, D. Goelman, J. Hamer, L. Hitchner, W. Lloyd, J. Bill Marion, C. Riedesel, and H. Walker. Striving for mathematical thinking. SIGCSE Bull., 33(4):114--124, 2001. Google ScholarDigital Library
- A. Holub. Why getter and setter methods are evil. http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html, September 2003.Google Scholar
- C. Horstmann. Big Java. John Wiley & Sons, 3rd edition, 2008.Google Scholar
- E. Howe, M. Thornton, and B. W. Weide. Components-first approaches to CS1/CS2: Principles and practice. In SIGCSE '04: Proceedings of the 35th SIGCSE technical symposium on Computer science education, pages 291--295, New York, NY, 2004. ACM. Google ScholarDigital Library
- A. Koenig and B. E. Moo. Accelerated C++: Practical Programming by Example. C++ In-Depth Series. Addison-Wesley, 2000. Google ScholarDigital Library
- M. Kölling, B. Quig, A. Patterson, and J. Rosenberg. The BlueJ system and its pedagogy. Journal of Computer Science Education, 13(4):249--268, December 2003.Google ScholarCross Ref
- G. T. Leavens, K. R. M. Leino, E. Poll, C. Ruby, and B. Jacobs. JML: notations and tools supporting detailed design in Java. Technical Report TR #00-15, Iowa State University, August 2000.Google Scholar
- B. Liskov and J. Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2000. Google ScholarDigital Library
- B. H. Liskov and J. M. Wing. A behavioral notion of subtyping. ACM Trans. Program. Lang. Syst., 16(6):1811--1841, 1994. Google ScholarDigital Library
- T. J. Long, B. W. Weide, P. Bucci, D. S. Gibson, J. Hollingsworth, M. Sitaraman, and S. Edwards. Providing intellectual focus to CS1/CS2. SIGCSE Bull., 30(1):252--256, 1998. Google ScholarDigital Library
- Massachusetts Institute of Technology. 6.170: Lab in software engineering. Course notes on web, Fall 2007. http://www.mit.edu/~6.170/.Google Scholar
- H. Roumani. Practice what you preach: Full separation of concerns in CS1/CS2. SIGCSE Bull., 38(1):491--494, 2006. Google ScholarDigital Library
- W. Savitch. Absolute Java. Pearson Education, 3rd edition, 2008.Google Scholar
- A. Schmolitzky. "Objects first, interfaces next" before inheritance. In OOPSLA '04: Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, pages 64--67, New York, NY, USA, 2004. ACM. Google ScholarDigital Library
- M. Sitaraman, B. W. Weide, and W. F. Ogden. On the practical need for abstraction relations to verify abstract data type representations. IEEE Trans. Softw. Eng., 23(3):157--170, 1997. Google ScholarDigital Library
- The Joint Task Force on Computing Curricula. Computing curricula 2001. Journal on Educational Resources in Computing (JERIC), 1(3es):1--240, 2001. Google ScholarDigital Library
Index Terms
- Interfaces first (and foremost) with Java
Comments