In the instance you've descibed, I'd create a new (abstract) type called TDialogBasicYesNo, and have the existing TDialogYesNo extend that. Then have TDialogAdvancedYesNo ( or whatever the new one will be called ) also extends TDialogBasicYesNo. Now you have some breathing room in what TDialogAdvancedYesNo and TDialogYesNo do because their manage methods are not related. Anything they still have in commmon can be shifted up to TDialogBasicYesNo and you haven't made any changes to TDialogYesNo, so your users can continue to use it as they are, completely unaware of any changes you've made.
It's an extra level of abstraction which I would normally try to avoid, but if you have to keep things unchanged for people who are already using the module, there has to be a price to pay somewhere.
It's an extra level of abstraction which I would normally try to avoid, but if you have to keep things unchanged for people who are already using the module, there has to be a price to pay somewhere.