Maison  >  Article  >  interface Web  >  JavaScript est-il un langage POO ?

JavaScript est-il un langage POO ?

黄舟
黄舟original
2017-10-21 10:06:401233parcourir

Je sais, ce sujet a été abordé trop de fois. Pourtant, cela est évoqué à maintes reprises. Chaque fois que les développeurs de Java ou C# ou de tout autre langage POO entrent en contact avec JavaScript, ces développeurs se plaignent beaucoup. Ils disent que travailler avec JavaScript est un véritable gâchis. Il n'a pas de types, n'est pas bien structuré, est un peu bizarre, a une mauvaise prise en charge des objets et n'est certainement pas un langage POO.

Certaines de ces plaintes peuvent être acceptables, mais d'autres sont biaisées, comme l'affirmation selon laquelle JavaScript n'a pas de types et n'est donc pas un langage POO. Concernant ce dernier point, avant de tirer des conclusions hâtives, vous devez vous demander : qu'est-ce qui fait d'un langage de programmation un langage de programmation orienté objet ?

Qu'est-ce que la POO ?

Il n'existe pas de spécification standard formelle pour le modèle POO. Il n'existe aucun document technique définissant ce qu'est la POO et ce qui ne l'est pas. La définition de la POO est principalement basée sur le bon sens dans les articles publiés par les premiers chercheurs tels que Kristen Nygaard, Alan Kays, William Cook et d'autres. Il y a eu de nombreuses tentatives pour définir la POO et une définition largement acceptée pour classer les langages de programmation, car l'orientation objet repose sur deux exigences :

  • La capacité de modéliser des problèmes à travers des objets.

  • Prend en charge un certain nombre de principes qui permettent la modularisation et la réutilisation du code.

Pour répondre à la première exigence, le langage doit permettre aux développeurs d'utiliser des objets pour décrire la réalité et définir des relations entre les objets, comme suit :

  • Association : Capacité d'un objet à faire référence à un autre objet indépendant.

  • Agrégation : Capacité d'un objet à être intégré dans un ou plusieurs objets indépendants.

  • Composition : La capacité d'un objet à embarquer un ou plusieurs objets dépendants.

Généralement, la deuxième exigence est remplie si le langage prend en charge les principes suivants :

  • Encapsulation : un focus unique sur les données et l'entité de code de manipulation et la possibilité de masquer ses détails internes.

  • Héritage : mécanisme par lequel un objet obtient tout ou partie des éléments d'un ou plusieurs autres objets.

  • Polymorphisme : la capacité de gérer les objets différemment en fonction de leur type ou de leur structure de données.

Les langages qui répondent à ces exigences sont généralement classés comme orientés objet.

JavaScript et POO

Nous savons maintenant à quoi devrait ressembler un langage POO. Alors, pouvons-nous prouver que JavaScript est un langage POO ? Essayons.

Nous savons que la capacité des objets JavaScript à prendre en charge l'association, l'agrégation et la combinaison n'est pas forte. Veuillez regarder le code suivant :

var johnSmith = {
 firstName: "John",
 lastName: "Smith",
 address: { //Composition
 street: "123 Duncannon Street",
 city: "London",
 country: "United Kingdom"
 }
};
var nickSmith = {
 firstName: "Nick",
 lastName: "Smith",
 address: { //Composition
 street: "321 Oxford Street",
 city: "London",
 country: "United Kingdom"
 }
};
johnSmith.parent = nickSmith; //Association
var company = {
 name: "ACME Inc.",
 employees: []
};
//Aggregation
company.employees.push(johnSmith);
company.employees.push(nickSmith);

Dans le code ci-dessus, vous pouvez trouver un exemple de combinaison (attribut adresse), un exemple d'association (attribut parent) et un exemple d'agrégation (attribut employés ).

En ce qui concerne l'encapsulation, les objets JavaScript sont des entités qui prennent en charge les données et les fonctions, mais ils ne disposent pas d'un support natif de haut niveau pour masquer les détails internes. Les objets JavaScript ne se soucient pas de la confidentialité. Toutes les propriétés et méthodes sont accessibles publiquement si vous n’y faites pas attention. Cependant, nous pouvons appliquer plusieurs techniques pour définir l'état interne d'un objet et le protéger des accès externes : exploiter les fermetures à l'aide de getters et de setters.

JavaScript prend en charge l'héritage à un niveau de base via ce que l'on appelle l'héritage prototypique. Même si certains développeurs pensent que c'est un peu simpliste, le mécanisme d'héritage de JavaScript est tout à fait valide et permet d'obtenir les mêmes résultats que la plupart des langages POO reconnus. Quoi que vous en pensiez, JavaScript dispose d'un mécanisme par lequel "un objet obtient tout ou partie des fonctionnalités d'un ou plusieurs autres objets", et c'est l'héritage.

Le défi du polymorphisme semble plus difficile car de nombreuses personnes associent ce concept aux types de données. En fait, le polymorphisme touche de nombreux aspects des langages de programmation et n’est pas uniquement lié aux langages POO. Cela implique généralement des éléments tels que les génériques, la surcharge et les sous-types structurels. Tout cela semble écrasant pour un langage « simple » et faiblement typé : JavaScript. Mais ce n’est pas le cas : en JavaScript, nous pouvons réaliser différents types de polymorphisme de plusieurs manières, et nous l’avons peut-être fait plusieurs fois sans même nous en rendre compte.

POO sans classes

"D'accord, mais là encore, JavaScript n'a pas de classes."

De nombreux développeurs pensent que JavaScript n'a pas le concept de classes et n'en ont pas. traitez JavaScript comme s'il s'agissait d'un véritable langage orienté objet car il n'applique pas les principes de la POO.

Cependant, nous pouvons voir que dans la définition informelle, il n'y a aucune mention explicite des classes. Il est vrai que les objets nécessitent des propriétés et des principes. Mais les classes ne sont pas vraiment une exigence, elles constituent simplement parfois un moyen pratique d'abstraire un ensemble d'objets ayant des propriétés communes. Par conséquent, même si les objets de support d'un langage n'ont pas de classes, il peut s'agir d'un langage orienté objet, tel que JavaScript.

De plus, l'objectif des principes de la POO est conçu pour être pris en charge. Pour programmer dans un langage, les principes de la POO ne doivent pas être obligatoires. Un développeur peut choisir d'utiliser des constructions qui lui permettent de créer du code orienté objet, ou il peut choisir de ne pas les utiliser. De nombreuses personnes critiquent JavaScript car les développeurs peuvent écrire du code qui viole les principes de la POO. Mais ce n'est qu'un choix du programmeur, pas une limitation du langage. Cela se produit également avec d'autres langages de programmation, comme le C++.

Nous pouvons donc conclure que le manque de classes abstraites et la liberté accordée aux développeurs d'utiliser ou non des fonctionnalités prenant en charge les principes de la POO ne sont pas le véritable obstacle à l'identification de JavaScript en tant que langage POO

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn