Abstraction goes both ways
Abstraction is critical to programming. It is the core activity we use to make more interesting and complex programs. Most of us understand abstraction as finding commonalities between different concepts, and modeling these as an inheritance hierarchy. If you are a retail store, then toy cars, trash cans, and pillows are all sellable items. Thus, …