Différence fondamentale entre le langage orienté objet et le langage basé sur Objet

Je veux savoir quelle est la différence fondamentale entre

Langages orientés objet et basés sur objet

J'ai lu beaucoup de post tous disent deux choses

  1. Le langage orienté objet prend en charge toutes les fonctionnalités D'OOPs et le langage basé sur L'objet ne prend pas en charge toutes les fonctionnalités D'OOPs comme le polymorphisme et L'héritage.

  2. Ils donnent un exemple de javascript en tant qu'objet et java en tant qu'objet orienté

Comme ce post de stackoverflow

Différence entre le langage orienté objet et le langage basé sur objet

Mais je veux savoir quelle est la différence fondamentale entre le concept indépendamment de n'importe quelle langue.

Vous avez la réponse

Enfin obtenu la chose

Merci à Matías Fidemraizer

Réponse qui ne dépend d'aucune langue, ne dépend d'aucune fonctionnalité, la differnce de base pour laquelle je suis loooking cela est

le langage qui contient lui-même des objets est appelé langage basé sur des objets et le langage avec des concepts orientés objet est connu sous le nom de langage orienté objet

26
demandé sur Community 2013-03-15 14:30:38

7 réponses

JavaScript est un langage orienté prototype.

Il peut construire des objets réels à partir d'une fonction constructeur et il a presque toutes les fonctionnalités que tout objet pourrait avoir:

  • constructeur.
  • méthodes (c'est-à-dire fonctions en JavaScript).
  • propriétés (Depuis ECMA-Script 5, "getters/setters").
  • Instances.

En JavaScript, tout objet a une prototype, y compris les fonctions de. Le prototype lui même est un moyen rudimentaire d'ajouter membres d'objet à toute instance nouvellement créée de l'objet entier.

var constructor = function() { };
constructor.prototype.text = "hello world";

alert(new constructor().text); // This alerts hello world

Pourquoi JavaScript N'est pas un langage de programmation orienté objet (script) ? Parce qu'il n'a pas de fonctionnalité qui répond aux exigences de la définition de la programmation orientée objet:

  • Polymorphisme: Pas De. Vous pouvez modifier le comportement d'un membre prototype, mais il s'agit simplement de réutiliser l'identifiant. Vous n'êtes pas en mesure d'accéder à la précédente implémentation du membre dans un objet pseudo-dérivé .
  • Héritage: Pas à tous les. Peut-être que la chaîne prototype pourrait être comparable à l'héritage mais JavaScript (ECMA-Script 5.x ou versions antérieures) n'a pas d'héritage basé sur la syntaxe comme les autres langages basés sur la POO (C'est-à-dire Java, C#, Ruby, Python, VisualBasic.NET, ...).
  • Encapsulation. Oui, bien sûr, mais il n'y a aucun moyen de créer un objet privé ou interne réel membre.

Peut-être que j'ai oublié de mentionner d'autres détails, mais je crois honnêtement que c'est un bon résumé.

Mise à jour et résumé

La principale différence est un langage de programmation orienté objet a les caractéristiques d'un paradigme orienté objet doit avoir pour être considéré comme un langage de programmation orienté objet. ainsi, JavaScript, pour l'instant, n'est pas un langage de programmation orienté objet réel car il manque de polymorphisme réel et l'héritage.

Mise à jour: ES2015 et au-dessus ont-ils changé la situation?

Esthétiquement parlant Oui, ES2015 et ci-dessus a une amélioration majeure qui laisse envisager une programmation pas complètement mais plus proche d'une programmation orientée objet: sucre syntaxique à appeler à la super classe.

Par exemple:

class A {
     doStuff() {
         console.log("hello world");
     }
}

class B extends A {
     doStuff() {
         super.doStuff();
         console.log("...and goodbye!");
     }
}

C'est polymorphisme. Une classe plus spécialisée peut remplacer sa classe de base pour à la fois changer complètement un comportement de fonction ou faire ce que le base faisait déjà, en ajoutant du nouveau code à la fonction.

BTW, ES2015 et au-dessus manque encore d'encapsulation vraie: où sont les modificateurs d'accès comme private ou public ici? Nulle part.

Et, à la fin de la journée, ES2015 et au-dessus implémentent la POO basée sur la classe, mais c'est toujours une couche de sucre syntaxique au-dessus D'ECMAScript 5.x... Le code ci dessus fonctionne toujours avec des prototypes sous les hottes et cela fonctionne de la même manière que si vous le coder dans ECMAScript 5.x:

function A() {
}

A.prototype.doStuff = function() {
    console.log("hello world");
};

function B() {
}

B.prototype = Object.create(A.prototype);
B.prototype.doStuff = function() {
    A.prototype.doStuff.call(this);
    console.log("...and goodbye!");
};

Espérons que je devrai à nouveau mettre à jour cette réponse car ES2020 a déjà proposé des modificateurs d'accès et nous serons en mesure D'envisager JavaScript un autre langage qui supporte pleinement la programmation orientée objet!

19
répondu Matías Fidemraizer 2016-01-26 09:00:49

Les langages basés sur des objets incluent essentiellement n'importe quel langage qui offre la possibilité intégrée de créer et d'utiliser facilement des objets. Il y a un critère majeur:

  • Encapsulation.Les objets ont une API qui leur est attachée, généralement de telle sorte que vous travaillez plus avec l'objet en lui disant quoi faire qu'en exécutant une fonction dessus.

    La plupart des langages basés sur des objets définissent des objets en termes de "classes", qui sont essentiellement des blueprints pour un objet. La classe définit la structure interne de l'objet et définit l'API.

    Ce n'est pas le seul moyen, cependant. En JavaScript, par exemple, les objets n'ont pas vraiment de "classes". Tout objet peut avoir toutes les propriétés qu'il veut. Et puisque les fonctions sont des valeurs de première classe en JavaScript, elles peuvent être définies en tant que Propriétés sur l'objet et servir D'API de l'objet.

En ce qui concerne les langages orientés objet, un bon exemple serait Visual Basic (pas les trucs. net; je parle de VB6 et VBA). Les Classes existent, mais ne peuvent pas hériter les unes des autres.

Les langages orientés objet sont des langages basés sur des objets qui vont plus loin. Ils ont un support intégré pour les deux autres piliers de la POO:

  • Héritage. Les objets doivent avoir la capacité d'être (et d'être considérés comme) des spécialisations d'un autre objet. Cela signifie, par exemple, être capable de définir "Chien" comme " Animal qui peut de l'écorce et de chercher des bâtons".

    En langues modernes, il prend généralement la forme d'un objet classe hériter d'un autre objet de l' classe. Ce n'est pas une exigence, cependant; contrairement à ce que certaines personnes vont essayer de vous dire, la définition de la POO ne nécessite pas de classes du tout.

  • Le Polymorphisme. le Code doit être capable d'utiliser un objet sans savoir ou se soucier exactement de quel type il s'agit.

    La plupart des langues (en particulier statiquement typés) définissent le polymorphisme en termes de classes et d'héritage. Si vous avez une classe B qui hérite de A, le code qui nécessite une référence à A peut généralement prendre A B à la place, mais pas une Classe C qui n'est pas liée à A. Java a également le mot-clé interface, qui vous permet de définir un ensemble de comportements qu'une classe doit implémenter. Tout objet dont la classe explicitement implements X, et implémente ainsi les fonctions définies sur l'interface X, se qualifie comme une instance de type X.

    Autres langues, comme JavaScript, vous permet de passer n'importe quel objet que vous aimez. Tant que l'objet présente la bonne interface,peu importe le type d'objet. C'est ce qu'on appelle le "typage du canard", et c'est presque la forme la plus pure du polymorphisme.

14
répondu cHao 2016-01-14 13:22:25

L'utilisation D'objets ne signifie pas que vous faites de la POO, même dans un langage entièrement OO si vous n'implémentez pas de techniques OO, c'est simplement de la programmation basée sur des objets.

4
répondu LarrySTS 2013-07-12 18:32:09

Il y a 4 éléments majeurs auxquels un langage de programmation doit se conformer pour être un véritable langage orienté objet. Ce sont: Abstraction, Encapsulation, modularité et hiérarchie.

Cependant, nous pouvons appeler un objet de langage basé si cela prend en charge les premiers éléments. Dès qu'un langage de programmation prend en charge le concept D'objet, il prend en charge intrinsèquement les trois premiers éléments car ils sont caractéristiques inhérentes à un objet.

JavaScript en tant que langue ne peut pas être dit un langage orienté objet mais basé sur un objet car il ne supporte pas la hiérarchie (en particulier L'héritage).

0
répondu Arnab 2014-10-09 10:00:44

OOP et OBP sont des types de langages de programmation suivant des principes différents.

OOP : suit le polymorphisme, L'héritage et L'Encapsulation(PIE).

  • Exemples : Java,. net ainsi de suite. La POO est nouvelle en comparaison avec OBP

OBP : suit le Polymorphisme et l'Encapsulation.

  • Exemples : Ada, Visual Basic (VB) et Fortran 90. OBP est vieux
0
répondu Premraj 2015-07-24 03:49:18

Les langages de programmation orientés objet suivent tous les concepts appartenant à la POO.

Le langage de programmation basé sur des objets a des objets ibuilt, donc il n'est pas nécessaire de créer des objets et il suit également les concepts OOP sauf l'héritage,

-3
répondu prasanthi 2015-10-12 16:32:55

Objet orientd langage

Object-orientd language supports all the features of OOPs

Object-orientd language does not has in-built object

Object-orientd languages are C++, C#, Java etc

Langage basé sur L'objet

Object-based language doesn't support all the features of OOPs like Polymorphism and Inheritance

Object-based language has in-built object like JavaScript has window object.

Object-based languages are JavaScript, VB etc.

J'espère que cela clarifiera votre doute.

-3
répondu Prince Gupta 2017-08-03 08:52:27