I think it's hard to give answers that are both accurate and concise to some of these questions, without appending "in language ______" to them. In some languages, access control is a compiler feature and is actually strictly enforced. Objective-C has access control for instance variables, but not for messages, and the ivar access control can be circumvented via the runtime (to say nothing of -valueForKey:). "Private" messages are typically declared in the implementation file or a second header. Python sort of has private methods through name mangling, but they aren't really private, since we're all adults. In Ruby, those words mean something fairly different.