Roman Maeder wrote several books on Mathematica programming techniques, in particular "The Mathematica Programmer". That book includes chapters on OOP in Mathematica.
You should also study the documentation for UpValues, UpSet, UpSetDelayed, and so on. These constructs can be put to use to create an OO flavor.
But OO has different meanings to different people, so you might add some specific questions about how to achieve your OO goals in Mathematica. Is it identity your after? Statefulness? Polymorphism? Dispatch? Scoping? Encapsulation?
Be prepared, however, for some pushback. Whatever you want to achieve with OO might also be achievable with just Mathematica's "natural" constructs. Instead of shoe-horning Mathematica into a style you're already familiar with, take the opportunity to expand your knowledge and expertise by embracing Mathematica's inherent strengths.