"OO-like" is a phrase that is often overlooked when it comes to CFML and CFCs. A lot of developers like to glance over the "like" part of that expression and make the assertion that CFML, via CFCs, is an OO language. Well, it's not, but that is an easy leap to make. After all, there are a lot of OO-like patterns emerging for use in ColdFusion.
When you try to do things with CFML like implementing complex data models with many circular references, ColdFusion, as an engine, has a hard time keeping up. This is no fault of ColdFusion's. It's just people are falling into the trap of expecting all OO practices and methodologies to work perfectly in a non-OO system.
Before you get all bent out of shape, even Adobe has said that,
"...CFML is not an object-oriented language, and CFCs don't provide all the features and functionality typically provided by OOP languages." This is not necessarily a bad thing. CFCs have accelerated the emergence of the MVC pattern in ColdFusion (Fusebox, Mach-II, ModelGlue, etc). Those MVC frameworks can still be leveraged to build powerful applications that are "OO-like" in their patterns, but at the end of the day, not truly OO applications.
Sure, there are ORM and AOP/IOC frameworks available for ColdFusion that have their roots in an OO language. Aren't these really just a stepping stone on the way to learning Java though? If you are an advanced enough developer to understand how to properly use frameworks like Transfer, Reactor, ColdSpring, and other frameworks that, like these, have their roots in Java, shouldn't you be looking at developing parts (services, gateways, daos, vo's) of your application in Java anyway?
Adobe has made great strides, though, in accomodating more OO features (interfaces, etc) with the latest release of ColdFusion 8. At the end of the day, in my mind, what holds CF back from becoming a truly OO language is also what makes it so appealing. Ever since the introduction of CFCs, there has been the option to use them or not use them. Meaning that you can still code in a CF5 style, if you wish. This, in my opinion, has always been simultaneously, CFML's greatest strength and greatest weakness.
I am not saying that you can't use OO patterns within CFML. Just don't expect it to perform 100% like a OO language will. After all, CFML is OO-like, not purely OO. Besides, to quote Adobe again...
"CFCs allow, and even encourage, the creation of structured applications." That, after all, is a good starting point for your applications, isn't it?