Uh, we do both at my school. In class, you do theory and you are tested on said theory with quizes and exams. Practical programming projects are assigned as homework. For my AI class, we did lots of theory in class, but we also had Prolog assignments to do on an irregular basis and a semester project (I wrote a Scrabble game that I still can't beat). In my Object Oriented Design class, we studied designs patterns and the methods of structuring software into classes, while at home we had to code an object oriented interpreter for a language the professor made up. In Compiler Design, we studied loads of theory in class, but were given homework on lex, yacc, and other compiler related programming as well. Even in my algorithms course, which is pretty much all theory, we had a project where we solved SAT using various algorithms such as Davis-Putnam and WalkSAT. Everyone is also required to take Senior Project, where you have to come up with some sort of software, practical or not. None of these classes had labs, but that's no excuse to not have homework that requires coding.
[This message has been edited. Deal with it.]