Если вы спрашиваете, есть ли языки, которые не могут взаимодействовать с примитивными типами, вы можете посмотреть что-то вроде Scala. С этой страницы:
Scala — чисто объектно-ориентированный язык в том смысле, что каждое значение является объектом.
Однако, как вы указываете (для Котлина):
компилятор сопоставляет их с примитивами JVM, когда это возможно для экономии памяти
Если ваше определение того, какими могут быть объектно-ориентированные языки, требует, чтобы все всегда представлялось как объект, то чисто объектно-ориентированный язык невозможен. Вы не можете создать язык, работающий на реальном компьютере, на котором есть только объекты. Это связано с тем, что компьютер должен иметь способ представления данных изначально. По сути, это то, чем являются примитивы в объектно-ориентированных языках: собственные формы данных, которые может представлять базовый компьютер (или виртуальная машина). Что бы вы ни делали, вам всегда потребуется какое-то необъектное представление данных, чтобы компьютер мог выполнять с ним операции. Даже если вы создали интерпретатор JavaScript, который действительно представлял примитивы как объекты, для добавления двух целых чисел интерпретатору пришлось бы загружать целые числа в регистры ЦП и использовать некоторую форму инструкции add
.
Но такое объяснение как бы упускает суть объектно-ориентированного программирования. Язык программирования — это не то же самое, что программа. Языки — это всего лишь инструмент, с помощью которого мы заставляем компьютеры делать то, что нам нужно — они на самом деле не существуют во время выполнения. Вы, вероятно, скажете, что программа, написанная на Kotlin или Scala, более объектно-ориентирована, чем программа, написанная на C, несмотря на то, что оба языка компилируются в одни и те же ассемблерные инструкции во время выполнения.
Итак, если вы смягчите свое определение чистого объектно-ориентированного программирования, чтобы больше не заботиться о представлении данных во время выполнения, вы обнаружите, что чисто объектно-ориентированные языки возможны. При программировании на Scala вы никогда не взаимодействуете ни с чем, что не является объектом. Даже если ваш Int
становится "примитивным" во время выполнения, это не имеет большого значения, потому что вам, как программисту, никогда не приходится об этом думать (по крайней мере, в идеальном мире, где производительность и память не имеют значения). Определение языка Scala вообще не включает понятие примитивов — они являются частью реализации языка, а не самого языка.
Что касается вашего примера Java, Java, вероятно, не является чисто объектно-ориентированным языком по большинству определений. Однако он в основном объектно-ориентированный. Java часто упоминается как объектно-ориентированный язык де-факто, потому что он был гораздо более объектно-ориентированным, чем то, что было до него.
Более того, термин объектно-ориентированный на самом деле не имеет определенного значения. Для некоторых людей это может означать, что все должно быть объектом, а для других это может просто означать, что должны быть объекты, некоторые определения требуют концепции классов, некоторые нет и т. д.
person
Spaceman1701
schedule
23.10.2017
let a = 4; tyeof a;
(число)a.toFixed(2)
(4.00). toFixed — это метод экземпляра типа/класса Number. Даже литералы завернуты в свой класс типов:(42).toFixed(2)
(42.00) или"test string".toUpperCase()
(ТЕСТ СТРОКА) - person marekful   schedule 19.10.2017