"Why Java is not fully object-oriented"
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
"Why Java is not fully object-oriented"
Навеяно сайтом с вопросами с программ. интервью, приведенным в "Карьера в IT".
Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.
А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.
Сабина
Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.
А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.
Сабина
-
- Уже с Приветом
- Posts: 14006
- Joined: 17 Jun 2003 04:41
Re: "Why Java is not fully object-oriented"
Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.
Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...
ЖУТКО неудобно, зато - полностью объектно-ориентированный язык!
Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.
Не гоните, и не гонимы будете...
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
-
- Уже с Приветом
- Posts: 1224
- Joined: 24 Feb 2003 07:40
-
- Уже с Приветом
- Posts: 1476
- Joined: 05 Dec 2000 10:01
- Location: Vilnius -> Bonn
-
- Уже с Приветом
- Posts: 956
- Joined: 04 Mar 2002 10:01
JustMax wrote:wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?
В Java 1.5 есть и Boxing,Uboxing,Enums,Generics
Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"?
Или я пропустил, и ее уже зарелизили?
-
- Уже с Приветом
- Posts: 956
- Joined: 04 Mar 2002 10:01
Re: "Why Java is not fully object-oriented"
Sabina wrote:Оказывается вопрос "Why Java is not fully object-oriented?" вошел в анналы коллекции вопросов программерских интервью.
А кто собственно определил OO таким образом что там нет места primitives?
Идиоты, которые задают такие вопросы на интервью. Перечитавшиеся умных книжек.
-
- Уже с Приветом
- Posts: 1224
- Joined: 24 Feb 2003 07:40
IA72 wrote:JustMax wrote:wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?
В Java 1.5 есть и Boxing,Uboxing,Enums,Generics
Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"?
Или я пропустил, и ее уже зарелизили?
Вроде, как бета только что вышла.
-
- Уже с Приветом
- Posts: 15311
- Joined: 30 Apr 2003 16:43
Re: "Why Java is not fully object-oriented"
SBolgov wrote:Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.
Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...
ЖУТКО неудобно, зато - полностью объектно-ориентированный язык!
Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.
Другой пример - SmallTalk. В нем тоже все объекты.
Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".
-
- Уже с Приветом
- Posts: 956
- Joined: 04 Mar 2002 10:01
wolfboy wrote:IA72 wrote:JustMax wrote:wolfboy wrote:Ну, вообще то C# можно считать в какой то степени полностью ОО. В том смысле, что есть boxing-unboxing - автоматическое преобразование примитивов в объекты и обратно...Может это имеется в виду?
В Java 1.5 есть и Boxing,Uboxing,Enums,Generics
Вы хотели сказать "В Java 1.5 будут и Boxing,Uboxing,Enums,Generics"?
Или я пропустил, и ее уже зарелизили?
Вроде, как бета только что вышла.
Про бету я знаю, разумеется. То есть не пропустил. Бета - это не релиз. C# вот тоже бета есть, но ни кто же не говорит "в C# есть generics".
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: "Why Java is not fully object-oriented"
zVlad wrote:Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".
Объекты - определенный уровень абстракции, необходимый для решения соответствующих задач. Когда задача проще, чем этот уровень предполагает, то соответственно решаться она должна на более низком уровне.
Возвращаясь к аналогии с химией, без знания относительной атомной массы, молкулярное уравнение химической реакции решить невозможно. А теперь представьте, что атом при этом бы рассматривался как аттрибут молекулы со всем вытекающим геморроем в расчетах.
Сабина
-
- Уже с Приветом
- Posts: 1300
- Joined: 30 Jun 2002 17:50
- Location: IA -> CT -> NJ
-
- Уже с Приветом
- Posts: 14006
- Joined: 17 Jun 2003 04:41
Re: "Why Java is not fully object-oriented"
zVlad wrote:SBolgov wrote:Sabina wrote:А кто собственно определил OO таким образом что там нет места primitives?
Мы же говорим например, что все вокруг состоит из молекул и при этом никого не смущает существование атомов. И потом явно, что использовать только wrapper classes вместо primitives - это нонсенс.
Нонсенс-то нонсенс, но вот в языке Eiffel так и было. Там ВСЁ - объекты. В том числе и числа типа 1, 2, 3, ...
ЖУТКО неудобно, зато - полностью объектно-ориентированный язык!
Disclaimer: Я с Eiffel последний раз работал в 1993 году. Если с тех пор что-то изменилось, и кто-то может об этом рассказать - с удовольствием послушаю.
Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".
Оххх...
Извините, но за давностью лет уже не помню, почему именно. "Но осадок остался..." (с)
Не гоните, и не гонимы будете...
-
- Уже с Приветом
- Posts: 672
- Joined: 11 Apr 2001 09:01
- Location: Russia, NN
Re: "Why Java is not fully object-oriented"
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.
-
- Уже с Приветом
- Posts: 1071
- Joined: 18 Nov 2003 22:53
- Location: MA
Re: "Why Java is not fully object-oriented"
Sabina wrote:Объекты - определенный уровень абстракции, необходимый для решения соответствующих задач. Когда задача проще, чем этот уровень предполагает, то соответственно решаться она должна на более низком уровне.
Возвращаясь к аналогии с химией, без знания относительной атомной массы, молкулярное уравнение химической реакции решить невозможно. А теперь представьте, что атом при этом бы рассматривался как аттрибут молекулы со всем вытекающим геморроем в расчетах.
Сабина
Атом может быть атрибутом молекулы, но может быть и самостоятельным объектом. Так что в этом сложности я не вижу и геморроя тоже.
Наоборот удобно - молекулярную массу легко считать
Насчет того почему джава не полностью ОО язык - так сделали из соображений эфеективности и быстродействия. Создавать объект для каждого числа слишком дорого. Правда это не очень часто нужно (когда нужно, можно пользоваться оберточными классами, что не всегда удобно). Основное неудобство - числа нельзя в коллекцию напрямую засовывать и второе - в методе нельзя изменить, нужно передавать оберточный класс.
В С# это дело побороли автоматическим боксингом-анбоксингом, скоро и в джаве будет.
А кроме как быстродействия я не вижу других причин не сделать и примитивы объектами.
-
- Уже с Приветом
- Posts: 1316
- Joined: 03 Jul 2003 06:02
- Location: USA
Re: "Why Java is not fully object-oriented"
testuser wrote: Основное неудобство - числа нельзя в коллекцию напрямую засовывать и второе - в методе нельзя изменить, нужно передавать оберточный класс.
Разве оберточные классы не immutable?
-
- Уже с Приветом
- Posts: 1316
- Joined: 03 Jul 2003 06:02
- Location: USA
Re: "Why Java is not fully object-oriented"
Sabina wrote:Возвращаясь к аналогии с химией, без знания относительной атомной массы, молкулярное уравнение химической реакции решить невозможно. А теперь представьте, что атом при этом бы рассматривался как аттрибут молекулы со всем вытекающим геморроем в расчетах.
Вы будете смеяться, но у нас так оно и есть - тем не менее, софт один из самых быстрых в индустрии
-
- Уже с Приветом
- 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"
Sam Adams wrote:Вы будете смеяться, но у нас так оно и есть - тем не менее, софт один из самых быстрых в индустрии
Потому, как единственный в своем роде
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.
-
- Уже с Приветом
- Posts: 15311
- Joined: 30 Apr 2003 16:43
Re: "Why Java is not fully object-oriented"
Sabina wrote:zVlad wrote:Не понял, почему то что числа - объекты это "...ЖУТКО неудобно,". Полностью ОО - это должно бы означить "ЖУТКО удобно".
Объекты - определенный уровень абстракции, необходимый для решения соответствующих задач. Когда задача проще, чем этот уровень предполагает, то соответственно решаться она должна на более низком уровне.
...................
Сабина
"Объекты - определенный уровень абстракции" того из чего состоит реальная действительность. На сегодня это видимо самый высокой уровень абстрагирования достигнутый в программировании.
Создатели например SmallTalk-a совершенно справедливо решили что программирование, языки программирования, такая же реальность как и, скажем, молекулы. Поэтому элементы программирования могут быть также представленны как объекты (классы, на самом деле). Что в этом хорошего? Аппарат манипулирования как элементами моделируемой реальной действительности так и собственно программными элементами оказывается одним и тем же. Программеру не надо всякий раз перестраивать свой мыслительный аппарат, говоря "ага, сейчас я работаю с объектов значит надо делать так, а теперь с примитивом - значит иначе". Программирование становится more consistent (или как там правильно).
Что касается эффективности - давно известно что эффективность (в смысле производительности) не есть функция от логической модели - наоборот это целиком и полностью зависит от реализации логической модели. Одна и таже логическая модель может быть реализованна хорошо и плохо. Что то незаметно, что от того что Java не полностью ОО в ней достигается хорошая производительность. Думаю не лучше чем в SmallTalk.
-
- Уже с Приветом
- Posts: 1316
- Joined: 03 Jul 2003 06:02
- Location: USA
Re: "Why Java is not fully object-oriented"
Nervous wrote:Потому, как единственный в своем роде
Нет, не единственный, конечно. Просто самый лучший
-
- Уже с Приветом
- Posts: 1071
- Joined: 18 Nov 2003 22:53
- Location: MA
Re: "Why Java is not fully object-oriented"
Sam Adams wrote:testuser wrote: Основное неудобство - числа нельзя в коллекцию напрямую засовывать и второе - в методе нельзя изменить, нужно передавать оберточный класс.
Разве оберточные классы не immutable?
Cмотря какие. Если свой сделать - тогда как захочется так и будет. Я говорил, что неудобно, что нельзя поменять, приходится писать свой оберточный класс. Кстати, тот же StringBuffer mutable ...
-
- Уже с Приветом
- 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"
Sam Adams wrote:Nervous wrote:Потому, как единственный в своем роде
Нет, не единственный, конечно. Просто самый лучший
От скромности ты не умрешь!
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.