Teaching C#, Java, etc. to students who are bad at OOP Last semester, I was assigned two classes of C# and assuming them to be well-versed in Programming Fundamentals (PF) and Object Oriented Programming (OOP), I started the course at normal pace. After a few weeks, I took an introductory lab test (it was pretty easy one actually, summation of n Fibonacci terms) and some of the astonishing "discoveries" after my round of the class (about 30 mins after assigning the task) were:


Around 1/3rd didn't have Visual Studio installed
One guy was coding it in SQL Server (genius?)
Those who didn't have VS installed were given option of online IDEs (like this one) and it "dawned" upon me that they were coding in Java (didn't even care to change Language in options)


Then, during lecture, I discovered some more facts, like:


In a class of 50, less than 10 knew the concept of basic OOP like Inheritance or static members.
Non has implemented Polymorphism before.
Function Pointers was a thing unknown to them (even they had studied OS and I think PThreads are pretty much part of it)


It not only left me heart-broken, but also prompted me to teach them OOP's concepts from scratch, which meant that I had to compromise over some advanced topics of .Net

Question

Now my question is that, what should be the correct approach to teach an advanced language like C#, Java to a class given:


Majority of them are bad at OOP (lets assume they are ok at PF)
There are some students which are/were good at OOP and eager to learn new technology (and should not be punished for others mistakes/negligence)
There is no Lab to complement your class (even the lab test I took was by my own efforts)


Update

As per @Jay and @Buffy's points, here is further explanation:


It is a recurring process as although I have taught C# only once but observed such a weak links (in Programming Fundamentals and especially OOP) when teaching other courses as well.
I don't have enough power to arrange Bootcamps (I used to have them in earlier institute but here limited class rooms means we can't arrange Bootcamps unfortunately) 
I don't have enough power to affect the overall process either. 


Looking forward to your interesting inputs. Thanks.
I know exactly what you are talking about. Back when I was still ( I am glad I am no longer doing that) working as a faculty in a university, I ran into situations like this. In fact, with my usual style, I got confrontational with the faculty who was supposed to teach OOP in the previous semester and stuff happened.

Here is what I did. 


First up, the logistics. I had a detailed discussion with the HOD and also with the students, and convinced all of them to come for additional classes (I called them Bootcamps)
The Bootcamp was a 2 day affair ( 6 hours each ) and was held on a holiday. No attendance or anything like that. Students who are serious can come (and 80 % of the class showed up)
Taught the basics of OOPS. I essentially summarised the entire semester worth of contents into 12 hours. 


Did this work? For me, it did. I was able to carry on with my usual syllabus with confidence that they are at least, not as blind as before. sure, I had to spend 2 of my personal days, but it was worth it. 

Here are the things I crunched on those 2 days.


Classes and Objects (and the interconnection between, and compared them favourably with structs)
Encapsulation (especially private and public and why this is important)
Inheritance (the big boss of OOP, and by far the most important thing about any OOP language)
Polymorphism (although this was pretty straightforward and did not drive people crazy like inheritance or the initial discussion of classes and objects)


So, talking from first experience, the situation you described is the norm rather than the exception. If you want to get them up to speed, I suggest a bootcamp or a similar variation.