I think there is no reason both sides should not be taught.  The theory of good solid abstract OO design is a must, but should also be reflected in a real world scenario and why it’s good and works over just 'well this is the way you do it'.
 
I used to work as a Technical Architect in a FE College in the UK and the lecturers were so bad at teaching software development it was unbelievable.  They presented theory which was right out of a text book with no understanding themselves of what it was they were talking about and then got all students to build a boilerplate web site with a database back end and that was the course year after year.  In some cases the students were the teachers the year after they finished the course!
I am not saying it’s like that in all IT education in the UK, just this was my experience when working at once college.