Dědičnost by se měla primárně používat k modelování vazby "něco je něco-obecnějšího".
Např. z třídy Animal může dědit třída Mammal a z ní třída Cat a Dog. Kočky i psi jsou savci a savci jsou zvířata.
Nicméně u adresy a regionu je použití dědičnosti nevhodné - tady spíš adresa patří do regionu, nikoliv adresa je region.
Vazbu "patří do" je lepší modelovat kompozicí:
class Region {
}
class Adress {
private Region _region;
function __construct(Region region) {
_region = region;
}
function getRegion() {
return _region;
}
}
Udělat správně objektový návrh dat není úplně sranda. To, že je chyba v logice programu, nevadí zas až tolik - snadno se opraví (byť samozřejmě je tu riziko, že před zákazníkem bude člověk vypadat jako kkt). Ale pokud jsou špatně namodelovaná data, tak se to může později projevit tím, že celý softwarový produkt (a je jedno, jestli malý web nebo velký systém) bude ve stavu FUBAR* .
*
http://en.wikipedia.org/wiki/Military_slang#FUBAR