POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
On the Practical Need for Abstraction Relations to Verify Abstract Data Type Representations
IEEE Transactions on Software Engineering
Providing intellectual focus to CS1/CS2
SIGCSE '98 Proceedings of the twenty-ninth SIGCSE technical symposium on Computer science education
Accelerated C++: practical programming by example
Accelerated C++: practical programming by example
Journal on Educational Resources in Computing (JERIC)
Program Development in Java: Abstraction, Specification, and Object-Oriented Design
Program Development in Java: Abstraction, Specification, and Object-Oriented Design
Striving for mathematical thinking
ACM SIGCSE Bulletin
Components-first approaches to CS1/CS2: principles and practice
Proceedings of the 35th SIGCSE technical symposium on Computer science education
"Objects first, interfaces next" or interfaces before inheritance
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Practice what you preach: full separation of concerns in CS1/CS2
Proceedings of the 37th SIGCSE technical symposium on Computer science education
Abstraction in Computer Science
Minds and Machines
A principled approach to teaching OO first
Proceedings of the 39th SIGCSE technical symposium on Computer science education
The role of abstraction in software engineering
Companion of the 30th international conference on Software engineering
Objects First with Java: A Practical Introduction Using BlueJ
Objects First with Java: A Practical Introduction Using BlueJ
Hi-index | 0.01 |
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.