@coolbean yeah polymorphism is not unique to OOP, it's probably the most used thing in functional languages. like passing a function into another function is polymorphism. a lot of OOP design patterns don't need to exist if you just had closures, which c++ and java didn't for the longest time lol
encapsulation, too, is really good but also not unique to OOP. technically, defining a public header file in c that's only a subset of the functions you implement is a form of encapsulation