Подтвердить что ты не робот

Основное различие между объектно-ориентированным и объектно-ориентированным языком

Я хочу знать, в чем основное отличие между

Объектно-ориентированные и основанные на объектах языки

Я прочитал много сообщений, все из них говорят две вещи

  • Объектно-ориентированный язык поддерживает все функции ООП и объектно-ориентированного языка, не поддерживает все функции ООП, такие как Полиморфизм и Наследование.

  • Они приводят пример javascript как объектно-ориентированного и java как объектно-ориентированного

Подобно этому сообщению stackoverflow

Разница между объектно-ориентированным и объектно-ориентированным языком

Но я хочу знать, что является основным различием между концепцией независимо от любого языка.

Получил ответ

Наконец-то появилась вещь

благодаря Matías Fidemraizer

Ответ, который не зависит от какого-либо языка, не зависящего от какой-либо функции, основной отличительной чертой, для которой я новичок, является

Язык, который сам содержит объекты, называется объектно-ориентированным языком, а язык с последующими объектно-ориентированными понятиями называется объектно-ориентированным языком

4b9b3361

Ответ 1

JavaScript - это прототип-ориентированный язык.

Он может создавать фактические объекты из функции-конструктора и имеет почти любую функцию, которая может иметь любой объект:

  • Конструктор.
  • Методы (т.е. функции в JavaScript).
  • Свойства (поскольку ECMA- Script 5, "getters/setters" ).
  • Инстансы.

В JavaScript любой объект имеет прототип, включая функции. Сам прототип является рудиментарным способом добавления членов объекта в любой вновь созданный экземпляр всего объекта.

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

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

Почему JavaScript не является языком объектно-ориентированного программирования (скриптинга)? Поскольку он не имеет функции, которая соответствует требованиям определения объектно-ориентированного программирования:

  • Полиморфизм: Нет. Вы можете изменить поведение элемента-прототипа, но это просто повторное использование идентификатора. Вы не можете получить доступ к предыдущей реализации элемента в псевдо-производном объекте.
  • Наследование: совсем нет. Возможно, прототипная цепочка может быть сопоставима с наследованием, но JavaScript (ECMA- Script 5.x или более ранние версии) не имеет наследования на основе синтаксиса, как другие языки на основе ООП (например, Java, С#, Ruby, Python, VisualBasic.NET...).
  • Инкапсуляция. Да, конечно, но нет способа создать реальных частных или внутренних членов объекта.

Возможно, я забыл упомянуть некоторые другие подробности, но я честно считаю, что это хорошее резюме.

Обновление и сводка

Основное отличие - объектно-ориентированный язык программирования имеет функции, которые должна иметь объектно-ориентированная парадигма, чтобы считаться объектно-ориентированным языком программирования. Таким образом, JavaScript на данный момент не является реальным объектно-ориентированным языком программирования, поскольку ему не хватает фактического полиморфизма и наследования.

Обновление: изменилось ли положение ES2015 и выше?

Эстически говоря, да, ES2015 и выше имеют значительное улучшение, позволяющее рассмотреть не совсем, а ближе к объектно-ориентированному программированию: синтаксический сахар для вызова суперкласса.

Например:

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

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

Это полиморфизм. Более специализированный класс может переопределить свой базовый класс, чтобы как полностью изменить поведение функции, так и сделать то, что уже делала база, добавив новый код в функцию.

BTW, ES2015 и выше по-прежнему не хватает истинной инкапсуляции: где есть модификаторы доступа, такие как private или public здесь? Нигде.

И в конце дня ES2015 и выше реализуют ООП на основе классов, но он по-прежнему является синтаксическим слоем сахара поверх ECMAScript 5.x... Приведенный выше код по-прежнему работает с прототипами под капотами, и он работает так же, как если бы вы его кодировали в 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!");
};

Надеюсь, мне нужно будет снова обновить этот ответ, потому что ES2020 уже предложил модификаторы доступа, и мы сможем рассмотреть JavaScript на другом языке, который полностью поддерживает объектно-ориентированное программирование!

Ответ 2

Объектно-ориентированные языки включают в себя в основном любой язык, который предлагает встроенную возможность легко создавать и использовать объекты. Существует один главный критерий:

  • Инкапсуляция. У объектов есть API, прикрепленный к ним, как правило, таким образом, что вы больше работаете с объектом, сообщая ему, что делать, чем запускать на нем некоторую функцию.

    Большинство объектно-ориентированных языков определяют объекты в терминах "классов", которые являются в основном чертежами для объекта. Класс определяет внутреннюю структуру объекта и определяет API.

    Это не единственный способ. В JavaScript, например, объекты действительно не имеют "классов". Любой объект может иметь любые свойства, которые он хочет. И поскольку функции являются первоклассными значениями в JavaScript, они могут быть установлены как свойства объекта и служить в качестве API-интерфейса объекта.

Что касается объектно-ориентированных, но не-объектно-ориентированных языков, хорошим примером может служить Visual Basic (а не .NET-материал, я говорю о VB6 и VBA). Классы существуют, но не могут наследовать друг от друга.

Объектно-ориентированные языки - это объектно-ориентированные языки, которые делают шаг вперед. Они имеют встроенную поддержку двух других опор ООП:

  • Наследование. Объекты должны иметь возможность быть (и рассматриваться как) специализации какого-либо другого объекта. Это означает, например, возможность определить "Собака" как "Животное, которое может лаять и извлекать палочки".

    В современных языках он обычно принимает форму одного класса объектов, наследуемого от другого класса объекта. Это не требование; вопреки тому, что некоторые люди будут пытаться вам сказать, определение ООП вообще не требует классов.

  • Полиморфизм. Код должен иметь возможность использовать объект, не зная и не заботясь о том, какой тип он имеет.

    Большинство языков (особенно статически типизированных) определяют полиморфизм в терминах классов и наследования. Если у вас есть класс B, который наследуется от A, код, который требует ссылки на A, обычно может взять B вместо этого, но не некоторый класс C, который не связан с A. Java также имеет ключевое слово interface, которое позволяет вы определяете набор действий, которые должен реализовать класс. Любой объект, чей класс явно implements X и, следовательно, реализует функции, определенные на интерфейсе X, квалифицируется как экземпляр типа X.

    Другие языки, такие как JavaScript, позволяют передавать любой понравившийся вам объект. Пока объект представляет правильный интерфейс, не имеет значения, какой именно объект он имеет. Это называется "утиная печать", и это почти самая чистая форма полиморфизма.

Ответ 3

Просто использование объектов не означает, что вы выполняете ООП даже в полностью OO-языке, если вы не используете методы OO, это просто объектно-ориентированное программирование.

Ответ 4

Существует 4 основных элемента, которым должен соответствовать язык программирования, чтобы быть истинным объектно-ориентированным языком. Это: абстракция, инкапсуляция, модульность и иерархия.

Однако мы можем вызвать объект Language Based, если он поддерживает первые элементы. Как только язык программирования поддерживает концепцию Object, по сути он поддерживает первые три элемента, поскольку они являются неотъемлемой особенностью Object.

JavaScript как язык нельзя назвать объектно-ориентированным, но объектно-ориентированным языком, поскольку он не поддерживает иерархию (особенно наследование).

Ответ 5

OOP и OBP - это типы языков программирования, которые следуют различным принципам.

ООП: следует за полиморфизмом, наследованием и инкапсулированием (PIE).

  • Примеры: Java,.Net и так далее. OOP является новым по сравнению с OBP

OBP: следует за полиморфизмом и инкапсулированием.

  • Примеры: Ada, Visual Basic (VB) и Fortran 90. OBP устарел

Ответ 6

Объектно-ориентированные языки программирования следуют всем понятиям, принадлежащим ООП.

Язык программирования на основе объектов имеет объекты ibuilt, поэтому нет необходимости создавать объекты, а также следует за концепциями ООП, кроме наследования,

Ответ 7

Язык ориентированного языка

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

Язык, основанный на объектах

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.

Надеюсь, это прояснит ваши сомнения.