Passing a common struct into one or more procedures is absolutely not what is commonly understood as object-oriented programming.
This is what people did (and are still doing) long before OOP existed. I also do it all the time in Haskell.
Similarly that article is wrong to imply that all these techniques are unique to OOP.
Similarly that article is wrong to imply that all these techniques are unique to OOP.