polymorphism and abstratcion generates better code