When I apply best practices (SOLID principle for example) to my OOP project, I find myself doing functional programming. All those OOP patterns are really trying to help OOP programmers write functional programming code. So is OOP a failure? I'd say yes.