I understand a contract being described as a top level abstraction, but what are some architectural and design advantages (and disadvantages) for developers in isolating their design classes into separate contracts? What are the general gas expense implications of separating functionality among contracts (for libraries, data/logic division) or spawning new contracts from existing contracts?
Personally I view contracts as an even higher level of abstraction than a class in a given oop (lower than a file, but higher than other general object types) What is the driving motivation to treat contracts as classes in Solidity?