Maison >interface Web >js tutoriel >JavaScript est-il un véritable langage POO ?

JavaScript est-il un véritable langage POO ?

韦小宝
韦小宝original
2017-11-30 10:22:261850parcourir

JavaScriptOrienté objet Ou non orienté objet, certaines personnes disent que le travail JavaScript est un gâchis, il n'y a pas de types, la structure est déraisonnable, certains bizarres, le support des objets n'est pas fort, ce n'est absolument pas un langage POO. JavaScript n'est-il vraiment pas un langage oop ? Jetons un coup d'oeil !

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 vous exprimer, 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 aucune 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, puisque l'orientation objet repose sur deux exigences :

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

Prend en charge les 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 : un objet fait référence aux capacités d'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 : la possibilité de se concentrer sur une seule entité de données et de code de manipulation, et 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 de données ou de leur structure.

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; //Associationvar company = {
 name: "ACME Inc.",
 employees: []
};//Aggregationcompany.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é. Si vous ne faites pas attention, toutes les propriétés et méthodes sont accessibles publiquement. 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 ne fonctionne pas Classes."

De nombreux développeurs pensent que JavaScript n'a pas le concept de classes et ne considèrent pas JavaScript comme 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 le fait de permettre aux développeurs la liberté d'utiliser ou non des fonctionnalités qui prennent en charge les principes de la POO ne sont pas le véritable obstacle à l'identification de JavaScript en tant que langage POO.


Après avoir lu cet article, vous avez de nouvelles compréhensions et de nouveaux gains. S'il vous plaît, aidez vos camarades de classe !


Recommandations associées :

Syntaxe de base des notes d'étude JavaScript

Comment utiliser JavaScript pour modifier les styles de pseudo-classe

Explication détaillée de l'utilisation de évaluer en JavaScript

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