Not sure why object inheritance is being singled out. But truly the biggest source of upgrade problems for any software component are dependencies on undefined behaviour in client applications.The people using or inheriting OOP code become wholly unaware of how it works, and so wholly unaware of how their adaptation can screw thing a few levels of inheritance up the treeI think that is mostly when someone uses an object based on how it actually works rather than how it is supposed to work then gets caught out when the object behaviour is "corrected". Default behaviours are a popular sources of disasters in waiting.
For example an API call formally takes a value between 1 and 10 with all other values producing undefined results. Now some broken app comes along and passes 11 to the API. In v1.0 this might work just fine because the implementation of the API call caps values that are too large. Then v2.0 comes along, the defined API does not change, but an optimisation has been implemented to make the function faster. Now passing 11 to it causes a crash. The bug is in the app not the upgraded component. But naturally users are going to blame the component vendor, e.g. Microsoft, for breaking their apps.
Microsoft do go out of their way to minimise these kind of problems. It's in their financial interest to ensure upgrades go as smooth as possible. If a popular apps stop working it's a big problem for them not just the app vendor. There are literally thousands of workarounds built into Windows to enable broken apps to continue to function but they can't catch them all.



Pages in this thread:
Print Thread
deleted