This might have been answered somewhere else, but I couldn't find a 100% satisfying answer. I have the following contracts:
Contract One {}
Contract Two is One{}
Contract Three is Two {}
All the contracts are in separate files, being imported. I fail to understand the concept of upgrades in this case, since when I compile the contract Three in Truffle, everything else is imported and compiled at that point.
Assuming I have functions in contract Three that set the new addresses of contracts One and Two, what is the procedure of upgrading? I fail to understand the complete logic, and would appreciate a detailed description of this process. Basically, what I want is to be able to change contracts One and Two later (adding more functions, changing stuff) without affecting data structs that are on contract Three.