I actually think that students who study OOP should learn in easy language, so they struggle more with concepts than with language. I learned in both Java and C ++. The former was fine, but the latter was a nightmare. Python will be my suggestion
As for the Eiffel, I tried to make my PhD project in Eiffel and I was having serious problems. I would definitely not recommend using a graphical interface, since there is little documentation on it. Also, the compiler is very buggy. I constantly communicated with their support regarding completely strange behavior. For example, posting a print statement will solve a compile-time error!
Eiffel provides some of the best options for multiple inheritance, but even this can sometimes turn into a nightmare. I remember that I inherited from several classes that are all inherited from one main class, and then with SELECT one overridden function from them or to the RENAME function.
The contract design was a good addition, and the option helped to avoid endless cycles, but at other times you just looked like an idiot when you had such checks (my Eiffel is a little rusty)
foo (something) do x = x + 1 ensure updated: x == old x + 1
There are other minor issues. Often the Eiffel studio will be damaged, and you had to delete certain backup files in order to make them work.
source share