Почему многие дизайны языков программирования предпочитают первый вариант. Ведь операция сложения определена на множестве объектов и интуитивно обладает коммутативностью. Т.е.
"a"+3 == 3+"a"
но с точки зрения убогого ООп это будет
"a".+(3) == 3.+("a")
т.е. нужно либо везде реализовывать оператор сложения с учетом объектов которых еще нет (мало ли что пользователь наваяет сущность кою можно прибавить), либо нарушить единообразие сего оператора, т.е. породить кучу ошибок, либо что делают чаще сделать его нерасширяемым в принципе.