Я знаю как минимум 4 слабо совместимых друг с другом понятия ООП:
- С++: класс = неймспейc, вызов метода через точку,
 - CLOS: класс = идентификатор + наследование, тело метода определяется по классу всех параметров (а не только первого), методы доопределяются модификаторами :after :before :around.
 - Racket: класс = first-class object, как и функция, соответственно, может доопределяться по месту и не иметь имени.
 - Haskell: классы типов как наборы операций над типам (которые можно считать эквивалентными классам других языков)
 
Хотелось бы узнать, какой подход вам ближе и почему. А также, можно ли из упомянутых видов получить некую «идеальную реализацию» и какой синтаксис мог бы быть у такой реализации.




