"Why Java is not fully object-oriented"

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

"Why Java is not fully object-oriented"

Post by Sabina »

Навеяно сайтом с вопросами с программ. интервью, приведенным в "Карьера в IT".

Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.

А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.

Сабина
SBolgov
Уже с Приветом
Posts: 14006
Joined: 17 Jun 2003 04:41

Re: "Why Java is not fully object-oriented"

Post by SBolgov »

Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.

Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...

ЖУТКО неудобно, зато - полностью объектно-ориентированный язык! :umnik1:

Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.
Не гоните, и не гонимы будете...
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Post by Vovka »

Sabina,
этот ваш пример - хорошая иллюстрация того, что программирование - это инженерная дисциплина, где сильно помогает здравый смысл и чувство меры.
User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Post by wolfboy »

Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?


В Java 1.5 есть и Boxing,Uboxing,Enums,Generics :wink:
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

JustMax wrote:
wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?


В Java 1.5 есть и Boxing,Uboxing,Enums,Generics :wink:


Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"? :)
Или я пропустил, и ее уже зарелизили?
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Re: "Why Java is not fully object-oriented"

Post by IA72 »

Sabina wrote:Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.

А кто собственно определил OO таким образом что там нет места primitives?


Идиоты, которые задают такие вопросы на интервью. Перечитавшиеся умных книжек.
User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Post by wolfboy »

IA72 wrote:
JustMax wrote:
wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?


В Java 1.5 есть и Boxing,Uboxing,Enums,Generics :wink:


Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"? :)
Или я пропустил, и ее уже зарелизили?

Вроде, как бета только что вышла.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Re: "Why Java is not fully object-oriented"

Post by zVlad »

SBolgov wrote:
Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.

Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...

ЖУТКО неудобно, зато - полностью объектно-ориентированный язык! :umnik1:

Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.



Другой пример - SmallTalk. В нем тоже все объекты.
Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

wolfboy wrote:
IA72 wrote:
JustMax wrote:
wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?


В Java 1.5 есть и Boxing,Uboxing,Enums,Generics :wink:


Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"? :)
Или я пропустил, и ее уже зарелизили?

Вроде, как бета только что вышла.


Про бету я знаю, разумеется. То есть не пропустил. Бета - это не релиз. C# вот тоже бета есть, но ни кто же не говорит "в C# есть generics".
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: "Why Java is not fully object-oriented"

Post by Sabina »

zVlad wrote:Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".


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

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

Сабина
Brat
Уже с Приветом
Posts: 1300
Joined: 30 Jun 2002 17:50
Location: IA -> CT -> NJ

Post by Brat »

Говорят Ruby - pure OO. Пипл пищит от него (от восторга). :)
SBolgov
Уже с Приветом
Posts: 14006
Joined: 17 Jun 2003 04:41

Re: "Why Java is not fully object-oriented"

Post by SBolgov »

zVlad wrote:
SBolgov wrote:
Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.

Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...

ЖУТКО неудобно, зато - полностью объектно-ориентированный язык! :umnik1:

Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.

Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".

Оххх...

Извините, но за давностью лет уже не помню, почему именно. :pain1: "Но осадок остался..." (с) :mrgreen: :mrgreen: :mrgreen:
Не гоните, и не гонимы будете...
chip700
Уже с Приветом
Posts: 672
Joined: 11 Apr 2001 09:01
Location: Russia, NN

Re: "Why Java is not fully object-oriented"

Post by chip700 »

Sabina wrote:
Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.

А кто собственно определил OO таким образом что там нет места primitives?

Я впервые это утверждение встретил в книгах по C#, а во всех книгах по Java всегда говорилось, что он полностью ОО, и в качестве доказательства как правило приводилось, что даже метод main должен принадлежать какому-л. классу.
По-моему это все происки создателей C#, которым нужно было простое объяснение, почему он лучше Java, понятное для менеджеров, sales-persons, и т.п. не имеющих отношение к программированию. Вот они и придумали лозунг - что java не полностью оо, и формально это так, а практически встроенный boxing/unboxing в C# это просто syntactic sugar небольшое удобство, все то же самое мы делаем в java с помощью классов java.lang.Integer, java.lang.Float и т.д. Конечно вручную это менее удобно.
И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.

Ну почему же.
Простые типы, например в C# выглядят как классы только когда нужно, а в остальное время и хранятся и ведут себя как простые. Соответственно wrapper classes используются только при необходимости и за преобразованием из классов в простой тип и обратно следит компилятор и все происходит автоматически и совершенно прозрачно для программиста, это и есть boxing/unboxing.
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Re: "Why Java is not fully object-oriented"

Post by testuser »

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

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

Сабина


Атом может быть атрибутом молекулы, но может быть и самостоятельным объектом. Так что в этом сложности я не вижу и геморроя тоже.
Наоборот удобно - молекулярную массу легко считать :)
Насчет того почему джава не полностью ОО язык - так сделали из соображений эфеективности и быстродействия. Создавать объект для каждого числа слишком дорого. Правда это не очень часто нужно (когда нужно, можно пользоваться оберточными классами, что не всегда удобно). Основное неудобство - числа нельзя в коллекцию напрямую засовывать и второе - в методе нельзя изменить, нужно передавать оберточный класс.

В С# это дело побороли автоматическим боксингом-анбоксингом, скоро и в джаве будет.
А кроме как быстродействия я не вижу других причин не сделать и примитивы объектами.
Sam Adams
Уже с Приветом
Posts: 1316
Joined: 03 Jul 2003 06:02
Location: USA

Re: "Why Java is not fully object-oriented"

Post by Sam Adams »

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


Разве оберточные классы не immutable? 8O
Sam Adams
Уже с Приветом
Posts: 1316
Joined: 03 Jul 2003 06:02
Location: USA

Re: "Why Java is not fully object-oriented"

Post by Sam Adams »

Sabina wrote:Возвращаясь к аналогии с химией, без знания относительной атомной массы, молкулярное уравнение химической реакции решить невозможно. А теперь представьте, что атом при этом бы рассматривался как аттрибут молекулы со всем вытекающим геморроем в расчетах.


Вы будете смеяться, но у нас так оно и есть - тем не менее, софт один из самых быстрых в индустрии 8)
User avatar
Nervous
Уже с Приветом
Posts: 7759
Joined: 18 Sep 2001 09:01
Location: RUS.76 -> KOR -> RUS.53 -> US.PA -> US.MD

Re: "Why Java is not fully object-oriented"

Post by Nervous »

Sam Adams wrote:Вы будете смеяться, но у нас так оно и есть - тем не менее, софт один из самых быстрых в индустрии 8)


Потому, как единственный в своем роде :lol:
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Re: "Why Java is not fully object-oriented"

Post by zVlad »

Sabina wrote:
zVlad wrote:Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".


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

...................

Сабина


"Объекты - определенный уровень абстракции" того из чего состоит реальная действительность. На сегодня это видимо самый высокой уровень абстрагирования достигнутый в программировании.
Создатели например SmallTalk-a совершенно справедливо решили что программирование, языки программирования, такая же реальность как и, скажем, молекулы. Поэтому элементы программирования могут быть также представленны как объекты (классы, на самом деле). Что в этом хорошего? Аппарат манипулирования как элементами моделируемой реальной действительности так и собственно программными элементами оказывается одним и тем же. Программеру не надо всякий раз перестраивать свой мыслительный аппарат, говоря "ага, сейчас я работаю с объектов значит надо делать так, а теперь с примитивом - значит иначе". Программирование становится more consistent (или как там правильно).

Что касается эффективности - давно известно что эффективность (в смысле производительности) не есть функция от логической модели - наоборот это целиком и полностью зависит от реализации логической модели. Одна и таже логическая модель может быть реализованна хорошо и плохо. Что то незаметно, что от того что Java не полностью ОО в ней достигается хорошая производительность. Думаю не лучше чем в SmallTalk.
Sam Adams
Уже с Приветом
Posts: 1316
Joined: 03 Jul 2003 06:02
Location: USA

Re: "Why Java is not fully object-oriented"

Post by Sam Adams »

Nervous wrote:Потому, как единственный в своем роде :lol:


Нет, не единственный, конечно. Просто самый лучший :mrgreen: :oops:
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Re: "Why Java is not fully object-oriented"

Post by testuser »

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


Разве оберточные классы не immutable? 8O


Cмотря какие. Если свой сделать - тогда как захочется так и будет. Я говорил, что неудобно, что нельзя поменять, приходится писать свой оберточный класс. Кстати, тот же StringBuffer mutable ...
User avatar
Nervous
Уже с Приветом
Posts: 7759
Joined: 18 Sep 2001 09:01
Location: RUS.76 -> KOR -> RUS.53 -> US.PA -> US.MD

Re: "Why Java is not fully object-oriented"

Post by Nervous »

Sam Adams wrote:
Nervous wrote:Потому, как единственный в своем роде :lol:


Нет, не единственный, конечно. Просто самый лучший :mrgreen: :oops:


От скромности ты не умрешь! :lol:
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.

Return to “Вопросы и новости IT”