differences between object-oriented programming languages and generations?