La programmazione orientata agli oggetti è efficace quando il programma può essere diviso in elementi con una ben definita e relativamente limitata interazione reciproca e quando gli algoritmi implementati siano intimamente legati alle relative strutture dati.
La programmazione orientata agli oggetti è efficace quando il programma può essere diviso in elementi con una ben definita e relativamente limitata interazione reciproca e quando gli algoritmi implementati siano intimamente legati alle relative strutture dati. Altri paradigmi di programmazione possono essere più appropriati in altri casi. Per esempio, la programmazione orientata agli aspetti (AOP, Aspect-oriented programming: ne sono esempi AspectJ e AspectC11, tra gli altri) gestisce meglio le funzionalità che interessano contemporaneamente tanti oggetti diversi, come il monitoraggio delle operazioni svolte ( logging) mentre la programmazione generica (C11, D, Beta, Eiffel, Clu, Ada, ML, Java 5.0 ecc.) permette di definire degli algoritmi applicabili a differenti strutture dati non correlate fra loro.