Mon premier langage de programmation est C++. C++ est un langage de programmation multi-paradigmes. L'un des paradigmes pris en charge par C++ est la programmation orientée objet. Je veux dire que j'ai une idée générale et les avantages de OOP comme illustré en C++.
J'ai récemment commencé à créer un projet dans Android Studio. L'une des langues Android Studio prend en charge Java. Java is un langage de programmation orienté objet "pur". Pure est entre guillemets effrayants en raison de Java supportant les types de données primitifs.
Ma question est de savoir pourquoi Java go full OOP alors que C++ ne ressent pas le besoin d'aller dans cette mesure. L'approche de C++ semble plus "raisonnable" pour Cependant, je suis sûr qu'il y a des raisons spécifiques pour lesquelles Java le fait comme il le fait. Lorsque tout est un objet, tout doit être déclaré public, protégé, etc. Tout est utilisé librement.
Java est en effet plus orienté objet que C++:
Mais soyons provocateurs: Java n'est pas un langage orienté objet pur:
int
ne sont pas traités comme des objets et n'héritent pas de Object
. Vous devez utiliser un wrapper de classe Integer
pour y parvenir.L'orientation accrue de l'objet présente deux avantages:
Je ne sais pas s'il existe de nombreuses langues pures OO là-bas. Smalltalk serait un bon candidat. Cependant, cela nécessite un changement de paradigme, ce qui rend même certains simples code difficile à lire.
En fin de compte, OO est comme l'oxygène (O₂): à dose raisonnable, il fait de l'air frais et permet une vie complexe; en concentration pure, il prive l'air d'autres choses utiles. Cela contribue certainement à expliquer la dominance actuelle des langages multi-paradigmes.
L'avantage d'une langue "pure" de tout paradigme est que vous (idéalement) n'avez pas à vous rappeler de suivre le paradigme car la langue ne vous permettra pas de faire quoi que ce soit si vous ne le faites pas.
Par exemple, Java est un langage structurel "pur". Ce qui est juste une façon élégante de dire qu'il n'a pas de goto. Au lieu de cela, vous avez while, do while, for, break et continue. None dont vous avez besoin si vous avez obtenu. Ce sont les choses que vous ne pouvez pas faire dans une langue qui le rendent "pur".
Alors qu'est-ce que c'est pour les langages orientés objet? Primitives. Si vous voulez que votre langage soit purement orienté objet, tout doit être un objet. Pas de primitives.
Si vous trouvez cela insatisfaisant, je ne vous en veux pas. La plus grande caractéristique de la POO est le passage de messages polymorphes mais le manque de primitives est ce que les langues doivent être considérées OO 'pur' .
Malheureusement, cela signifie que même les langues `` pures '' OOP ne vous forcent pas à utiliser les meilleures fonctionnalités d'OO. Elles vous obligent uniquement à utiliser le OOP = fonctionnalités qui peuvent être forcées.
Une considération clé dans la conception du langage est la complexité. Combien de fonctionnalités possède la langue? Est-ce difficile à apprendre? En réduisant le nombre de fonctionnalités, vous rendez généralement la langue plus facile à apprendre.
En suivant un seul paradigme, vous pouvez supprimer des fonctionnalités.
Ensuite, il y a la conception du programme. En tant que programmeur, vous devez réfléchir à la façon de structurer votre programme. Si votre langage de programmation vous donne beaucoup de flexibilité dans la structure, vous pouvez arriver à une meilleure conception à la fin, mais vous devez également réfléchir à plus de possibilités. Travailler dans un langage plus contraint semble souvent plus productif (et pourrait même l'être), car même si votre conception n'est pas aussi optimale que celle que vous auriez pu obtenir dans un langage plus flexible, vous y êtes arrivé plus rapidement.
En suivant un seul paradigme, vous rationalisez le processus de conception d'application.
Par conséquent, s'il y a moins de possibilités de conception d'application, si vous rencontrez une base de code inconnue, il devrait être plus facile de comprendre sa conception, car il n'y a que peu de possibilités. Cela facilite l'introduction de nouveaux programmeurs dans l'équipe de développement.
En suivant un seul paradigme, vous réduisez l'espace de conception, facilitant ainsi l'intégration de nouveaux membres de l'équipe.
Dans le cas de Java et C++, C++ était basé sur C, donc tout le matériel non-OO était là gratuitement. Le supprimer aurait coûté du temps et de l'argent, et aurait fait beaucoup plus difficile de déplacer un logiciel de C vers C++.
Dans le cas de Java, ils auraient dû ajouter du travail supplémentaire dans le langage, le compilateur, la machine virtuelle, pour faire fonctionner le code non OO. JNI est une sorte de non-OO et cela n'a été ajouté que plus tard.