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