It's a tool, like all other programming tools. There is a time and a place for it, and there is a time and place to avoid it. It's a useful abstraction when most or all of your datastructures can be abstracted into nouns, or when you need distinct datatypes to use a lot of common functionality while overriding or changing specific behaviors.
Exceptions and OOP aren't the same thing. OOP doesn't require factories (even in Java, it's just most-commonly abused there). It's as easy to make terrible dependency graphs and spaghetti code with OOP as it is without it.
OOP evangelists are faggots. OOP haters are faggots. It's a tool; use it when appropriate and avoid it otherwise. There's really little else to discuss. When people think they are shitting on OOP, more often than not they're actually just shitting on Java.
Yeah, I know I'm a centrist fence-sitting faggot. This is programming, not politics, so you can go eat a dick if you've got a problem with moderation in this field.