![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
5 основных отличий между Java и C++
нашла по этой теме довольно много материала, но там слишком подробно, слишком длинно и для проффи. я же только начинаю изучать и мне нужны именно главные отличия. Например, я нашла, что в Java в отличии от С++ есть встроенная (автоматическая) функция "сбора мусора", или, например , что Java не позволяет "многонаследования". Это правильно? Можете подсказать еще? ![]() Спасибо |
|||
|
||||
powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
правильно. В Java нет указателей в отлиичии от C++ B Java нет глобальных переменных. .........
Все отличия хороши, выбирай на вкус! ![]() Добавлено @ 14:57 Java - это чистый ОО язык, С++ - гибридный. |
||||
|
|||||
Sherst |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: нет Всего: 2 |
"Многонаследование" существует только для интерфейсов
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вообщем все верно.
Основное отличие Java от С++ состоит в том, что Java это в первую очередь платформа:
Есть и языковые отличия, в основном касаются работы с указателями. В частности вообще нет поинтерной арифметики, указателей на функции и т.п. А какова собственно цель вопроса? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
"многонаследование"
![]() существенных отличий гораздо больше чем 5. даже если сравнивать строго языки, а не стандартные библиотеки. Проше сказать чем они похожи - С без плюсов подобный синтаксис у обеих и на этом сходство заканчиваеться. |
|||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
Извиняюсь за "многонаследование", конечно "множественное наследование". Это я просто читаю на англ., финском и русском, пытаясь найти инфу, вот в голове и каша
![]() Цель вопроса - хочу попасть на курсы по программир-ю, попала в 30 чел. отобранных на собеседование, теперь дали задание на дом: 20 вопросов, отберут 16 чел. Хочу очень, нет - просто надо! ![]() Спасибо всем отозвавшимся, теперь буду формулировать это по фински. ![]() |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Открываете Google и пишете запрос: "java and c++ differences". На первой же странице куча ссылок. Это во-первых. А во-вторых, как верно заметил LSD, Java - это платформа, а C++ - это язык (или язык плюс некоторое количество стандартных библиотек, если рассматривать стандартный ANSI C++). Вообще некорректный вопрос, короче.
Это сообщение отредактировал(а) w1nd - 8.5.2006, 21:53 -------------------- ![]() ![]() |
|||
|
||||
jxr |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 31.7.2005 Репутация: нет Всего: нет |
a)
C++ code - ANSI code. Java code - Unicode code. b) C++, int x; if( x ) block1; else block2; Java, boolean con; if( con ) block1; else block2; |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Первый пункт - неверно, второй - явно далекое от основных отличие. -------------------- ![]() ![]() |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 1 Всего: 173 |
В принципе, это следствие из весьма важного отличия Java — типобезопасности, как статической, так и в рантайме. Java позволяет гораздо меньше «тихих» приведений типов, а некорректная интерпретация типа объекта ведет, в отличие от C++, не к неопределенному поведению (читай, непредсказуемым граблям), а к выбросу исключения. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
|
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Не совсем так. Просто в C++ нет булевского типа. Это сообщение отредактировал(а) w1nd - 9.5.2006, 01:33 -------------------- ![]() ![]() |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 1 Всего: 173 |
Это вы мне говорите? ![]()
Вы не правы. Есть стандарт C++, в котором четко прописаны конструкции и положения, делающие обязательную проверку типов в рантайме невозможной. Добавлено @ 01:36 В C++ присутствует. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Это сообщение отредактировал(а) w1nd - 9.5.2006, 05:37 -------------------- ![]() ![]() |
||||
|
|||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Ни C++ ни Java не являются полностью объектными языками. Полностью объектный язык, это язык, у которого все является объектами, т.е. нет примитивных типов вообще. Кроме того, еще можно смело спорить какой из двух языков предоставляет большие возможности объектно ориентированного программирования. Попробуйте на Java самостоятельно написать класс java.lang.String ![]() Остальные перечисленные пункты тоже верны не доконца и спорны ![]() Это сообщение отредактировал(а) ALKS - 9.5.2006, 08:44 |
|||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
Куча ссылок это хорошо, но там же еще и отличий куча. Вопрос стоит какие из них действительно принципиальные, а какие - просто детали. Мне надо выбрать всего 5. ![]() Пока зто в списке: C++ - машинный код / Java - интерпретируемый код Java- ОО язык, а С++ - гибридный Java не позволяет множ. наследования Java: нет указателей Java: автоматический сборщик мусора Java- типобезопасность Java - стандартные библиотеки, Java -отсутствие глобальных переменных ![]() |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
хы.
java интерпретируемый код? ну да. правда современная java машина на лету компелирует байт код в нативный для среды где она запущена. так что от классического интерпретатора это довольно далеко лежало. Java не докoнца OO язык. и что самое не приятно Java это язык со злым "неравеством типов" Java не позволяет множественное наследование ДЛЯ КЛАССОВ. а в принцепе - позволяет ![]() В Java есть указатели. ![]() автоматический сборщик мусора... ндя. я бы сказал иначе - в Java отсутсвуют деструкторы. ![]() типобезопасность? ну.... смотря что вы под этим понимаете. поясните пожалуйста. стандартные библиотеки? а это что: http://en.wikipedia.org/wiki/ISO/IEC_14882 ? Стандартная библиотека C++ стандартна в прямом смысле ибо есть соответсвующий стандарт ISO! Java может пускать слюни ![]() отсутсвие глобальных переменных? ну... да пожалуй соглашусь, хотя статические классы еще никто не отменял но признаю это не совсем "то" |
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Тьфу блин! "package protected" конечно имелся ввиду ![]() В Java есть они ![]() По крайней мере в Java - приложении присутствует как минимум один обьект. В с++ коде может не быть ни одного ![]()
На Java можно прогить и не пользуясь прим. типами. Впрочем как и на С++. Здесь разницы большой нет между ними. Дык напиши пару тройку своих, тоже поспорим ![]() Лучше не надо этот пункт брать. В Си++ типобезопастность тоже на высоте. И это лучше не брать. В Java есть модификатор static. Лучше написать. В Java у программиста нет выбора между работой с указателями, ссылками, или самими обьектами как в С++. В Java определено, что обьекты передаются по ссылке, а данные прим. типа копируются. |
||||
|
|||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
sergej.z
генерикс + автобоксинг это НЕ темплейты. далеко НЕ. хотя формально механизм темплейтов в С++ это уже не объекто ориентированое програмирование это абстрактное программирование - следующий шаг. есть в Java объект всегда. ок. но это не далает Java полноcтью OO языком. Да, я придераюсь к этому слову: полноcтью. В отношении Java его употреблять нельзя. и не только в простых типах дело. есть и ещё нюансы. И нельзя говорить что С++ менее OO чем Java это не правда. он как раз "более". Единственное что можно сказать: на С++ можно писать полностью НЕ объектный код, а на Java - нет. Вопрос терминологии это опасный вопрос. нужно четко понимать что вы хотите сказать и точно это говорить, иначе - порвут ![]() Это сообщение отредактировал(а) ALKS - 9.5.2006, 10:38 |
|||
|
||||
JUncle |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Если быть точным, в Java все передается по значению. Да, в случае передачи объекта, параметр метода - это ссылка, но сама ссылка то передается по значению. То есть, выполнив этот код, вы получите NullPointerException:
А все потому что, ссылка, передаваемая как аргумент в someMethod, передана по значению, и если изменять ее значение внутри метода, ссылка на "верхнем" уровне не изменится. Как она была null, так и останется. Другое дело, если изменить объект, на который указывает эта ссылка. Таким образом, формально в Java ВСЕ передается по значению. Это сообщение отредактировал(а) JUncle - 9.5.2006, 11:43 --------------------
class JUncle extends Man // singleton{/*...*/} |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
JUncle, не надо утрировать
![]() ![]() Ссылка (или указатель) это абстрактная величина. Обьект передаётся именно по ссылке (которая в свою очередь ессно по значению). |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Часть перечисленных отличий относится к Java как к языку, а часть как к среде выполнения. К тому же есть пара неточностей: в Java указатели есть, но они защищенные, т.е. нельзя присвоить значение неверного типа, не разрешены арифметические операции с ним. И стандартные библиотеки есть и в С++. Добавлено @ 12:03 И еще, товарищи давайте не будем увлекаться религиозными войнами на тему Java vs C++. Для этого есть специальный раздел. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
LSD это не религиозные войны, потому что вообщем-то никто не спорит что лучше а что хуже
![]() Просто патаемся разобраться в различиях, не сваливаясь в диспут какие различия - зло, а какие - благо ![]() и вообще дискусия интерсна. вот. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Вообще, как основное отличие надо добавить кроссплатформенность.
|
|||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
А-а-а-а!!! Это что за зверь? ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Программа написанная на Java может быть без переделок, запущена на любой платформе где есть JVM. На самом деле конечно есть проблемы с переносом, но они не сильно большие если заранее учитывать что программа будет работать на разных платформах. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Программа написанная на яве будет работать и на линуксе и под виндой, короче везде, где JVM есть. даже на мобильмике ![]() |
|||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
Вот это про кроссплатформенность?
"The output of a Java compiler is not executable code. Rather it is bytecode. Using bytecode to represent programs is the easiest way to create truly portable programs." |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это объяснение, как она реализована. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ALKS |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
ууу ![]() С другой стороны, не ошибусь если скажу что плактичиски любая платформа имеет компилятор С, но далеко не любая - JVM... |
||||
|
|||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
В таком случае можно ли сказать, что кроссплатформенность это следствие пункта: C++ - машинный код / Java - интерпретируемый код |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Кроссплатформенность Java, (уж какая есть
![]() Это сообщение отредактировал(а) MoonCat - 9.5.2006, 13:53 |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
||||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
спасибо, понятно!
|
|||
|
||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
to Sergej.z
И это лучше не брать. В Java есть модификатор static. запуталась! А как же вот это: " All the code in a Java program is encapsulated within one or more classes. Therefore, Java does not have global variables or global functions." http://www.csupomona.edu/~dlbell/cppexplanationsfa99/23.html ![]() Добавлено @ 14:25 [QUOTE=sergej.z,9.5.2006, 10:19] "Perhaps the single biggest difference between Java and C++ is that Java does not support pointers. Pointers are inherently insecure and troublesome. Since pointers do not exist in Java, neither does the -> operator. Some other C++ features are not found in Java." и это оттуда же! Вполне однозначно написано:"Java не поддерживает указатели" Вот поди разберись! |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
![]() ![]() да ничего подобного в Java нету. но это операции с указателями а не сами указатели. т.е. указатели то в Java есть и они неявно испозуються. но вот явного синтаксиса для работы с ними, как в C/C++ - нету. но это всё - большие тонкости... |
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
raiskaa, это же просто люди писали. Всё зависит от абстрактной позиции, которую занимаешь.
Естественно программист не найдёт в Ява указателей при программинге. Но всё же они там есть, просто скрыты от нас. Поэтому сказать "Ява не поддерживает указатели" - слишком мало. Не хватает ", но ..." ![]()
Нет, но есть статические члены/мемберы класса.
Вот у нас и аналог глобальной переменной и глобальной функции. |
||||
|
|||||
raiskaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.5.2006 Репутация: нет Всего: нет |
Еще раз спасибо, теперь проясняется
![]() |
|||
|
||||
JUncle |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Ну - J2EE это не pure java. Это просто набор спецификаций.
Это не совсем то - т.к. в общем понимании кроссплатформенность присуща программе, когда ее бинарник не нужно формировать заново для новой платформы (как в случае с С \ С++).
Следуя хорошему тону, static поля вообще то должны быть финальными (final), и аналогом в С будут уже скорее макросы, а не глобальные переменные (которые, как правило, есть знак плохой архитектуры). Это сообщение отредактировал(а) sergej.z - 9.5.2006, 17:56 --------------------
class JUncle extends Man // singleton{/*...*/} |
||||||||
|
|||||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Вообще-то Ява не запрещает их делать не final. Для этого есть хорошие причины, например private static абсолютно не противоречит "хорошему" тону (взять хотя бы тот же синглтон из Вашей подписи ![]() Кстати насчёт "хорошего" тона или "плохой" архитектуры ![]() |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Если бы Java запрещала что-то, то об этом не было бы и речи ![]() А в случае private полей, действительно, разговор другой, но и о глобальных переменных тогда тоже речи не идет. А насчет отношения Java и C++ к ООП - С++ не может быть "более-ООП" языком, т.к. на нем все-таки можно написать действующую не-ООП программу. С другой стороны, на Java можно тоже написать программу, с точки здравого смысла абсолютно не ООП. Однако формально она все-таки будет ООП программой (если не принимать во внимание примитивы). Кстати, читал, что назвать Java ООП языком не позволяет, кроме примитивов и еще один факт. Объекты должны общаться посредством сообщений, а методы Java это несколько другое. Ну что ж, кроме цифры 99, вообще согласен ![]() Это сообщение отредактировал(а) JUncle - 9.5.2006, 18:06 --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
ALKS |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Согласен J2EE - плохой пример. я не сталкивался с J2ME вообще, к сожалению. Но разве J2SE программа написанная, для простоты, в рамках любых классов из трех основных пакетов - lang, io и util пойдет без всяких ограничений в рамках J2ME?
с определением кросплотформенности не соглашусь. мне намного более правильным кажется примерно следующее: "Кросс-платформенным следует называть проект, перенос которого на новые платформы может быть выполнен с минимальными затратами. принебрежительно малыми, по сравнению с затратами на собственно разработку самого проекта." © не я |
||||
|
|||||
JUncle |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Да, я это забыл отметить, действительно, есть некоторые ограничения. В т.ч и обратные - т.е. в случае J2ME программы на J2SE JVM,
Ну может быть... Однако один из самых широких классов - GUI программы - в случае с С++ кросплатформенными никак назвать нельзя. И если допустить, что С++ программы кроссплатформенны, получается, что Java программы более кроссплатформенны, т.к. для их переноса на другую платформу в общем случае требуется меньше затрат* - мб ввести такую величину как коэффициент кроссплатформенности? ![]() * - при условии что на платформе етсь JVM Однако в случаее с С++ для платформы так же должен существовать компилятор. Так что тут они в равных условиях. Это сообщение отредактировал(а) JUncle - 9.5.2006, 18:21 --------------------
class JUncle extends Man // singleton{/*...*/} |
||||
|
|||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
С++ безусловно "более-ООП" язык, так как на нем в отличие от Java можно не извращаясь создать полностью ООП-программу.
Это не так, не следует воспринимать буквально слова о сообщениях. -------------------- ![]() ![]() |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Хм.. Только это к языку и философии программинга мало относится. Можно проект на асме написать, который без проблем скомпилится на любой платформе. Но Асм назвать кроссплатформенным думаю ни у кого язык не повернётся ![]() А на Яве кроссплатформенный именно бинарник, а не "проект". Что само по себе, кроме этого удобстава несёт ещё и удобства контроля и управления проектом (который не надо пичкать if else #ifdef _WIN32 итд.) Один исходник, один бинарник. Это в рамках большого проекта экономит тысячи долларов (говорю для того чтобы немного расшевелить вышеприведённое определение). Каждый, кто несколько лет занимался разработкой кроссплатформенных проектов на Си и Си++ меня поймут ![]() ![]() |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
А можно подробнее? За что купил, за то и продал. ![]() --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
||||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Не вижу ничего, что указывало бы на объектно-ориентированность. Конструкция языка "класс" имеет к ОО весьма опосредованное отношение. Добавлено @ 18:48 Я вообще не понимаю разговоров о "некроссплатформенности" Java. Один из аргументов - разница в наборе классов RT; другой - разные JVM, на которых один и тот же код может выполняться по-разному; третий - не везде есть JVM. Все эти утверждения несостоятельны: байт-код исполняется одинаково везде. Если в в JVM для утюга отсутствуют классы для работы с дисплеем или в какой-то реализации JVM попросту наделано ошибок, то это никак не относится к вопросу о кроссплатформенности. Если для платформы X нет JVM - никто не мешает её написать. -------------------- ![]() ![]() |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
В таком случае напишите пожалуйста полностью ООПрограмму на С++ (Ну или "более" ООПрограмму)
![]() Добавлю, что кроссплатформенность заканчивается там, где заканчиваются платтформы, на которые разработчику следует ориентироваться. А нормальные JVM есть для линя, винды, соляриса. Это наверняка покрывает бОльшую часть необходимых. |
|||
|
||||
S.A.P. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Java - кодеры, дайте пожалуйста точное определение кроссплатформенности, чтобы знать с какой точки начать обсуждение.
|
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Для java: перенос с платформы на платформу без изменений. -------------------- ![]() ![]() |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Перенос чего? Кода? Бинарника? Проекта? |
|||
|
||||
cromm3 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
Не честно ![]() Это множественное наследование… в Java оно реализуется(частично) через implements… а вообще по Эккелю Java более чистокровный ОО язык. И еще, на Java можно реализовать аспектно-орентированный подход в программировании, в C++ это сделать трудней… |
|||
|
||||
w1nd |
|
||||||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Разумеется, конечного программного продукта. Бинарника, то бишь. Добавлено @ 20:20
Почему не честно? А реализовывать один и тот же метод на страницу текста в пяти-десяти-сотне классов вместо одного это честно и удобно? Или то, что класс, обладающий координатами к координатам откастить нельзя - это апогей ООП?
Чистокровный? Ну уж ерунды-то не говорите. Да и кто такой Эккель? Это что за авторитет такой?
Да, в C++ это делать несколько трудней, но ничто не мешает. -------------------- ![]() ![]() |
||||||||
|
|||||||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
[QUOTE=sergej.z,9.5.2006, 18:23]
Про ASM это ты ляпнул! ![]() ![]() ![]() ![]() Ну а про Java никто не спорит, да сравнительно очень просто, да экономит массу денег.Нo не то чтобы совсем без усилий и проблем. Для меня "более" объектен тот язык который предоставляет мне больше эээ... ОО-возможностей. С++ есть множесетвенное наследование классов, перегрузка операций, шаблоны. да можно спорить о том хороший ли скажем стиль - активно применять множественное наследование в глубоких иерархиях и т.д и т.п. но эта возможность в С++ есть, а в java - нет. Есть масса примеров когда грамотное применение множественного наследования действительно порождает изящество и помогает избежать маштабного дублировнаия кода. множественное наследование интерфейсов и внутринние классы зглаживают, но не заменяют. перегрузка операций это что-то отсутсвие чегов Java меня злит постоянно.... я искренне не понимаю почему её не возможно реализовать хотябы на уровне компилятора. ээххх каждый раз когда я работаю с JDBC вспоминаеться объектно орриентированная С++ библиотека для работы с сервером SQLBase... они перегрузили только 2 операции а 10-ки строк кода тупых сэтов и гетов просто ушли... |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
На мой взгляд самое принципиальное различие - java требует чтобы программист обрабатывал ошибки.
То есть если вы к примеру из программы открываете файл, java на стадии компиляции будет проверять налилче обработчика IOException. Если ее нет - класс просто не скомпилируется. другое принципиальное отличие - совершенно другая работа с памятью. Наличие в языке (а не отдельной бибкой) сборщика мусора И наконец третье важное отличие явы - конструкция finally {} после try, которая гарантированно выполняется независимо от того, были exceptions или нет. Этот finally очень облегчает работу с ресурсами и уменьшает количество ошибок. Это сообщение отредактировал(а) Бонифаций - 9.5.2006, 21:48 -------------------- Бонифаций. |
|||
|
||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Что вы говорите? А как же быть с тем, что когда исключения появились в C++, Java была только в проекте?
Ничто не мешает реализовать GC в программе на C++. GC - это мимо кассы однозначно. Это сообщение отредактировал(а) w1nd - 9.5.2006, 21:48 -------------------- ![]() ![]() |
||||
|
|||||
cromm3 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
Хм… ну в таком случаи нужно сравнивать С++ с С# там тоже убрали множественное наследование в чистом виде… C# это ж не отход от принципов ООП а, как предполагается, их развитие… |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
ключевые слова "требует" и "позволяет" - тут есть разница. -------------------- Бонифаций. |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Если время дорого, имеет смысл подумать о применении фреймворков. И почему геты и сеты тупые? Это же часть технологии JavaBeans, играющей не последнюю роль в вышеупомянутых фреймворках (сериализация объектов в РБД и пр...) Это сообщение отредактировал(а) JUncle - 9.5.2006, 21:52 --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
... и его будут испрользовать только те части программы на С, которые о нем знают . А все остальные сишные бибки - так и будут работать с памятью по старому. И в чем тут радость? проходили - знаем, пробовали boehm GC -------------------- Бонифаций. |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Нет уж позвольте. В Java работа с иключениями приниципиально ничем не отличается от того, что есть в C++. Компилятор C++ точно так же будет требовать кода обработки. -------------------- ![]() ![]() |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
В С++ есть контролируемые исключения, простите?!
--------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
ANSI-шные - все. А как вам работа с системными библиотеками из Java? Они ведь тоже не знают про GC и не могут его использовать. Добавлено @ 22:02
Так вот вы о чем ![]() Это сообщение отредактировал(а) w1nd - 9.5.2006, 22:07 -------------------- ![]() ![]() |
||||
|
|||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Какого именно? javac или сишного?
--------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Сишного. -------------------- ![]() ![]() |
|||
|
||||
Бонифаций |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Ох! Вот вам простой пример:
Компилируется без проблем
Выдает Ax.java:6: unreachable statement System.out.println ("мы тут"); ^ Ax.java:5: unreported exception java.lang.Exception; must be caught or declared to be thrown throw new Exception("Эй!"); ^ 2 errors Чувствуете разницу? Это сообщение отредактировал(а) Бонифаций - 9.5.2006, 22:11 -------------------- Бонифаций. |
||||||
|
|||||||
jxr |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 31.7.2005 Репутация: нет Всего: нет |
слово "Компьютер" - может быть идентификатором в JAVA. в С/C++ не может быть.[традиционно ![]() Это сообщение отредактировал(а) jxr - 9.5.2006, 22:14 |
||||
|
|||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
А зачем, как вы думаете, сишный метод может быть дополнен конструкцией throw(...)? Кроме того, любой может также написать компилятор java, который не будет ругаться на необработанные исключения. Это сообщение отредактировал(а) w1nd - 9.5.2006, 22:22 -------------------- ![]() ![]() |
|||
|
||||
Бонифаций |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
давайте реально, - какой процент Ваших C/C++ проектов используют Garbage Collecting для памяти? - какой процент C/C++ проектов ваших друзей или других вам известных программистов используют Garbage Collecting? то что в яве это сделали - это большой шаг вперед относительно C++ Добавлено @ 22:27
вы это серьезно? ![]() -------------------- Бонифаций. |
||||
|
|||||
w1nd |
|
||||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Один. Написан восемь лет назад в целях закрепления знаний ![]() Речь не об этом. GC - это специфицированная фича JVM, а не особенность языка. И считать это различием, на мой взгляд, не стоит. А то так мы доберемся до стравнения IDE для Java и C++. Также, думаю, не стоит принципиальным различием считать поведение компиляторов, разные названия одних и тех же языковых конструкций и прочая, и прочая.
А как же? Байт код известен, тулзами вроде "компиляторов компиляторов" хоть пруд пруди. Это сообщение отредактировал(а) w1nd - 9.5.2006, 22:34 -------------------- ![]() ![]() |
||||||
|
|||||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
для того чтобы сказать компилеру какие именно exceptions может выбрасывать эта функция. Однако это не значит, что компилер будет требовать обработки этого exceptions. Вы можете ничего вообще не ловить ни в этой функции, ни выше ее. Просто все остальные exceptions внутри этой функции вызовут abort программы. И вы узнаете во время выполнения. А в яве - на стадии компиляции. Добавлено @ 22:44 неправда. жаба спроектирована под интенсивное использование gc -------------------- Бонифаций. |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 1 Всего: 173 |
Бонифаций, по поводу finally: в C++ есть RAII, который его с успехом заменяет.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Бонифаций |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Нет не о том речь. То что эти проверки будут выполняться во время компиляции - записано в spec жабы. ( 11.2 Compile-Time Checking of Exceptions) Так что если кто-то это не реализует в своем трансляторе - это будет его ошибка. -------------------- Бонифаций. |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: 1 Всего: 40 |
Правильно. Речь идет о разнице между java и c++ - вот я и говорю - в жабе есть finally, который гораздо удобней. Потому что в C++ при использовании raii - надо инкапулировать ресурсы в обьекты, что требует дополнительной работы программиста (например если вы используете какие-то C функции, ну, скажем mysql api для доступа к базе данных) упс, пока писал - появилось грозное предупреждение модератора. все. умолкаю Это сообщение отредактировал(а) Бонифаций - 9.5.2006, 23:03 -------------------- Бонифаций. |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Так за это и война - что считать принципиальным отличием, а что нет. Ну да ладно, думаю, автор темы уже давно разобрался что к чему ![]() -------------------- ![]() ![]() |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Вот в принципе, в ходе обсуждения и нашли еще одно отличие - в Java, в отличии от С++, есть контролируемые исключения, которые обязательно ловить или передавать на более "верхний" уровень.
--------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
а кстати да! механизм исключений в Java существенно отличаеться и по моему личному мнению лучше того что есть в С++ (но к ООП это отношения прямого не имеет.
![]() Кстати если кому-то интересно: http://www.digitalmars.com/d/ очень очень люботный язык. ![]() И еще господа, помните что С++ (не говоря о С) это достаточно старый язык. и все современные деалекты учитывали опыт разработки огромного количества софта на нем. Создатели Java это С/С++ гуру, естественно они учитывали недостатки С++ и стремились от них избавиться. так что Java и С++ сравнивать несколько не корректно... Это сообщение отредактировал(а) ALKS - 10.5.2006, 08:16 |
|||
|
||||
jimur |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 21.4.2006 Репутация: 2 Всего: 3 |
В Java есть Reflection
|
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
это следствие того, что Java всё-таки имеет интерпретаторную природу ![]() |
|||
|
||||
jimur |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 21.4.2006 Репутация: 2 Всего: 3 |
||||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
ну Reflection это вещ довольно опасная. во-первых Reflection поощряет не объекто-ориентированное программирование особенно в связке с анатациями (и мой любимый JUnit 4 яркий тому пример
![]() ![]() |
|||
|
||||
jimur |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 21.4.2006 Репутация: 2 Всего: 3 |
Согласен, обдумывать применение технологий вообще полезно ![]() Но для большинства приложений, где есть работа с базой стоимость вызова через Reflection ~1/1000 ms некритична. |
|||
|
||||
ALKS |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
откуда такая цифра? |
||||
|
|||||
jimur |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 21.4.2006 Репутация: 2 Всего: 3 |
|
|||
|
||||
ALKS |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
А я вот напротив запутался. ![]() 1. Java, суть интерпретатор. Как следствие в наличии имеется мехазм Dynamic class loading & method invocation ака Reflection, в С++ этого нет, а это очень мощная и крайне полезная вещ. Так же интерпретируемая сущность обеспечивает очень легкую переносимоть(чтобы под этим не понималось) программ на Java между различными платформами. 2. С++ и Java имееют кординальные отличия в области OПП. 2.1.С++ поддерживает Classes multiple Inheritance и Operator overloading, а Java - нет. 2.2.В свою очередь Java поддерживает Inner (adaptor) classes, чего нету в С++. 2.3. Есть ряд других, менее заметных отличий, например: "ява-специфичные степени инкапсуляции, например package protected" © sergej.z "В Java все классы наследуются от Object, а в С++ класс может не иметь суперкласс. " © MoonCat Добавлено по яростному требованию общественности: 2.4. Явный синтаксис для интерфейсов в Java: "Интерфейсы - одно из главных достижений Java, тк представляют собой иной ООП концепт - отделение набора операций (интерфейса) от имплементации, "чистый" полиморфизм. Наследование класса же - это еще и наследование имплементации и инкапсуляция." © Domestic Cat 3. Cущественные отличия в механизме отлова исключений: 3.1. "в Java, в отличии от С++, есть контролируемые исключения, которые обязательно ловить или передавать на более "верхний" уровень. " © JUncle 3.2. "RAII cannot generally be used with languages that clean up objects using an unpredictable garbage collection, such as Java" © http://www.hackcraft.net/raii/ 4. Generic Programming ака Generics. В Java в каком-то виде это появилось только в последней версии 1.5 . В С++ это развито намного сильнее. (Кому интересно: http://www.digitalmars.com/d/comparison.html есть там и табличка сравнивающая Generic Programming ) 5. В Java принципиально отсутсвуют механизмы и синтаксис для прямой работы с указателями. т.е. указатели в недрах языка есть и даже есть примеры их неявного использования (объект переданный в метод), но нету типа "указатель" и нету никакой возможности работать со ссылками напрямую. в С++ - ради Бога ![]() 6. "Java спроектирована под интенсивное использование Garbage Collection" © Бонифаций. Это существенное замечание. (Я бы сказал что Java спроектирована так что бы работать ТОЛЬКО и ИСКЛЮЧИТЛЬНО с Garbage Collection, но не суть). Как следствие в Java отсутсвует понятие метода-деструктора. В С++ использование Garbage Collection возможно, но "могу использовать, а могу и нет" и "не могу не использовать" это две большие разницы. Ничего не забыл? Это сообщение отредактировал(а) ALKS - 11.5.2006, 08:41 |
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Нужно добавить также интерфейсы, их нет в С++. Еще 1. В Java нет структур 2. Нет препроцессора -------------------- |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
1. интерфейсы - не согласен. полностью абстрактный и public класс без свойств суть интерфейс. то что в С++ нет специального ключевого слова (а кстати в поcледних стандартах деж есть уже, кажется) не принципиально. Кроме того(если мне не изменяет память) в С++ можно наследовтаь классы от структур и структуры могут иметь методы но в структурах всё public - вот вам и интерфейс. ![]() 2. Нет препроцессора. Ну механизм анотаций (уровня исходного кода) в связке с утилитой ant в Java 1.5 вообще-то позволяет вам создать препроцессор в каком-то виде. Кроме-того препросессор главныи образом используеться как раз для обеспечения кросс платформенности. так что его наличие для Java имеет довольно мало смысла в силу тотальной нативной переносимости. 3. ну а что такого ценного в структуре? структура может быть описана в ввиде класса. что тут существенно? некоторое удобство? - возможно. настолько ли это важное отличие? - не думаю. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Структура - это конструкция языка, такая же как класс или интерфейс. С каждой конструкцией есть определенные правила работы. Отличие языков, в том что один обладает одними конструкциями, а другой другими... Нужно смотреть на различия , а не подгонять возможности... В Java все классы наследуются от Object, а в С++ класс может не иметь суперкласс. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
||||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
MoonCat, по-поводу Object, как и говорилось - относим в существенные отличия ООП. их много, самые глобальные я упомянул, перечеслять всё... долго и не очень принципиально.
![]() Структуры в С++ это уже давно классы. я все равно искренне не понимаю что в них особенного чтобы заострять на них внимание. привидите мне пример их прелести и язящества, если можно ![]() Ребят, интерфейсы введены в язык Java галвным образом для того, чтобы явно поддержать их множественное наследование на уровне специального синтаксиса. нету в них ничего существенного. немного более удобно и проще абстрактного класса. но отсутсвие этого ключевого слова не являеться существенным отличием - относим в "в существенные отличия ООП" ![]() чуть позже внезу в оригинальный пост чтоб общественность не сгрызла ))) Это сообщение отредактировал(а) ALKS - 10.5.2006, 17:26 |
|||
|
||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Pure abstract класс не есть интерфейс, тк может содержать и неабстрактные методы.
Интерфейсы - одно из главных достижений Java, тк представляют собой иной ООП концепт - отделение набора операций (интерфейса) от имплементации, "чистый" полиморфизм. Наследование класса же - это еще и наследование имплементации и инкапсуляция. -------------------- |
||||
|
|||||
ALKS |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Под Pure abstract класс я понимаю класс все методы которого - абстракты. на то он и pure. ![]()
Я считаю что это больше особенности проектирования а не программирования. вы можете описать Pure abstract класс в Java. Но вы не сможете множественно относледовтаься от него. по-этому у вас нету выбора. в С++ вы можеет относледовтаься множественно от чего угодно поэтому вам не нужен специальный синтаксис. но ОК ОК я не хочу спорить. Domestic Cat - прав. все внесено в оригинальный пост. |
||||||||
|
|||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Никто не запрещает дописать туда неабстрактные методы, язык это позволяет. -------------------- |
|||
|
||||
ALKS |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
не придерайся. если в него допишут код он уже не будет pure т.е. не будет интерфейсом. то что язык это позволят - это уже вопрос другой. я же просто привел пример как получить интерфейс в С++ вот и всё. |
||||
|
|||||
Kars |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.4.2006 Репутация: нет Всего: нет |
Java платформонезависима , надо только виртуальную машину поставить и всё
![]() |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
1.это обсуждалось выше, хочеш пример java-программы, которая будет правильно работать в Windows и не хрена не правильно в Unix? ![]() 2. а если нету JVM под платформу? под MS DOS - нету! ![]() |
|||
|
||||
w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Так это java платформонезависима, а не чьи-то программки.
Напишите, если нужна. Это сообщение отредактировал(а) w1nd - 11.5.2006, 18:43 -------------------- ![]() ![]() |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
я хочу. Выкладывай, или пришли мне на ящик. |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
А если под платформу нет компилятора для другого языка? Под MS-DOS - и не будет! Это технически невозможно. --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Почему? -------------------- ![]() ![]() |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ох, давно это было... 1) Ограниченность адресуемой оперативной памяти. Вроде свего 1 мегабайт. Хотя... для Java ME хватит. ![]() 2) Отсутствие многозадачности. Тут даже мобильная Java не потянет... ну, там еще есть разного рода проблемы... |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
сразу скажу, человек я - о Java знающий издалека но интересно: если у нас есть интерпретатор неважно какого кода (если я не ошибаюсь, это является одним из способов построения JVM), то разве нельзя там обойти все эти отличия? грубые прикидки: многозадачность - после каждых N исполненных команд байт кода делать переключение потоков (т.е. просто сохранять контекст одного и переводить программный счётчик на другой кусок кода) ограничения по памяти - так мы же (в данном случае с точки зрения создателей интерпретатора) и обрабатываем эти запросы, кто мешает сделать свой алгоритм подгрузки/выгрузки страниц на винт? да, несомненно, такая реализация будет медленной, но всё же не невозможной... ? Добавлено @ 00:58 P.S. машину Тьюринга ведь можно сделать мод DOS ![]() -------------------- qqq |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Вытесняющая многозадачность в реальном режиме (DOS) реализуется довольно просто. При чем почти точно так же, как и в современных ОС защищенного режима. -------------------- ![]() ![]() |
|||
|
||||
JUncle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
Не забывайте что все это не влезет в 1 МБ (теоритический максимум - на деле все гораздо хуже) --------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Игрушки спокойно это обходили, если помнишь DOOM требовал себе не менее 4Мб памяти, и делал он это не из жадости, а реально эту память использовал. Во-первых есть такая программа DOS4GW которая предназначена для перевода машины в защищенный режим, с возможностью адресовать все 4 Гб памяти. Во-вторых можно самому перевести процессор в защищенный режим, и я даже писал на ассемблере программу которая это делает. 2. Никто не мешает JVM взять на себя задачи ядра по разделению процессорного времени. И кстати в спецификации JVM записано, что JVM вольна использовать потоки ОС для реализации многозадачности, или взять на себя разделение времени между потоками. Как вариант взять за основу готовое микроядро, тот же MACH, и на базе его реализовать это дело. Принципиальных ограничений нет, просто многие вещи которые в современных ОС уже реализованы, тут придется брать на себя. Задача весьма трудоемкая, но выполнимая. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ну здрасти! Перейти в защищенный режим, реализовать управление процессами, еще можно файловую систему за одно доработать, поддержку длинных имен файлов включить, Еще пару батиков, и все это хозяйство можно обозвать, ну, например "Джавиндоус"... ![]() Согласен, LSD, конечно же с технической точки зрения это реализуемо, но какой ценой... |
|||
|
||||
ALKS |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
Ребят, а вы думаете мало других экзотических OS под которые JVM трудно писать?
с MSDOS все просто, нету под нее JVM, не потому что ее сложно сделать (да ничего там сложного принципиально нету, да и с памятью нету проблеммы в защещенном режиме достигаеться вполне 32bit адресация http://ru.wikipedia.org/wiki/386DOS, да и кто вам сказал что надо все разрабатыватьс нуля? качественно написанные библиотеки для защещенного режима, длинных имен файлов, мнопоточности и т.п. 1000% существуют - купил и вперед.), а потому что она там никому не нужна. не пишут сейчас под DOS софт. тем более серверный софт, в чём Java особенно сильна ![]() смысла вкладывать деньги в разработку этой JVM - нету, но технически - нуль проблеммо. ![]() Это сообщение отредактировал(а) ALKS - 13.5.2006, 13:06 |
|||
|
||||
Амортизатор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 17.4.2005 Где: в Караганде Репутация: нет Всего: 8 |
Кто нибудь слышал интересную новость? На работе коллега сказал, что в новом стандарте АНСИ С++, который появится через несколько лет, предусмотрен сборщик мусора. Мне вообще непонятно, как это можно организовать, не меняя среду исполнения. Впрочем, может речь идет просто об очередных "умных" указателях...
-------------------- Поехали! |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 1 Всего: 173 |
Амортизатор, такая возможность обсуждается в Комитете (вот proposal). Но включат это в окончательную версию стандарта или нет — большой вопрос.
Речь идет именно о консервативном GC. Умные указатели давно утверждены в новом составе стандартной библиотеки. Добавлено @ 22:45
Работает же Boehm GC. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
DuDDits |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Пишут и еще как пишут сейчас под MS-DOS. Многие промышленные компьютеры предназначеные для работы на станках с ЧПУ используют именно эту OS причем как в Росси так и за рубежом , а также многие программные комплексы для работы с оборудованием (например для АЗС - авто запр. станция), использующие специализированные промышленные компьютеры, также написаны для OS MS-DOS. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |