I'm not sure about teaching OO in terms of shape hierarchies or animal species hierarchies. It might help intuition, but doesn't reflect typical usage IME.
If you did model animals in an OO style, you'd be more likely to have base classes or interfaces like IFarmable, IHuntable.
Related Posts
`init` feels like an unhelpful name in OO. It doesn't give you an initial value, it initialises the instance that has already been created. Developers are often surprised that init doesn't return the instance, because they have a strong association with `new Foo()`.
Perhaps `finish` would have been a less confusing name?
Bril is a cute intermediate language for teaching (think simplified LLVM IR): https://www.cs.cornell.edu/~asampson/blog/bril.html
The idea of providing a standard JSON format to help students write basic passes is really elegant.
It's always seemed odd to me that the Rust stdlib is so lean (no random numbers, regex, HTTP) yet clippy is so big (correctness, performance, style preferences, even 'too many arguments').
Maybe it's because cargo is mature but clippy doesn't have an extension ecosystem?