...tak čtverec najednou bude mít taky dvě proměnné, což je špatně, protože redundance, neelegance atd. A tento problém žádné přímočaré řešení nemá (aspoň v současných jazycích), ledaže člověk funkce rozčlení do rozhraní, což se právě čím dál více rozmáhá. Pak dědičnost jako taková zmizí, ale zůstane sdílený kód a stejná množina relevantních proměnných, byť implementovaných různě...
Na redundanci sere pes, ta se objevuje i jinde, to podstatné je, aby třída čtverce zajistila shodnou délku stran, což je triviální. Rozhodující je, zda chcete čtverec modelovat pomocí obdélníku, nebo ne. Není důvod, aby to nešlo.
Jedním řešením vámi uvedeným je rozhraní. U jazyků bez podtypového polymorfismu se nepoužívá.
Jak "rozdělení funkcí do rozhraní" vede ke sdílenému kódu??? Rozhraní z podstaty věci žádný kód neobsahuje.