It is very important to note that concepts which exist in the real world often do not translate into useful software objects. Abstraction are created to help us express what we need to express to meet the requirements, and to do so in a maintainable way — that’s it. Therefore, inheritance is a tool we use upon finding opportunities for reuse, not to express real-world hierarchical similarities.
At the heart of object-oriented software development there is a violation of real-world physics. We have a license to reinvent the world, because modeling the real world in our machinery is not our goal. — Rebecca Wirfs-Brock via [Object Design]