Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 5 основных отличий между Java и C++ 
:(
    Опции темы
raiskaa
Дата 9.5.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Цитата(w1nd @ 8.5.2006,  21:48)
Открываете Google и пишете запрос: "java and c++ differences". На первой же странице куча ссылок.  

Куча ссылок это хорошо, но там же еще и отличий куча.
 Вопрос стоит какие из них действительно принципиальные, а какие - просто детали.
Мне надо выбрать всего 5.  smile 
Пока зто в списке: 
C++ - машинный код / Java - интерпретируемый код 
 Java- ОО язык, а С++ - гибридный
 Java не позволяет множ. наследования
 Java:  нет указателей
 Java: автоматический сборщик мусора
 Java- типобезопасность
 Java - стандартные библиотеки, 
Java -отсутствие глобальных переменных

 smile  
PM MAIL   Вверх
ALKS
Дата 9.5.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



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

Java не докoнца OO язык. и что самое не приятно Java это язык со злым "неравеством типов"

Java не позволяет множественное наследование ДЛЯ КЛАССОВ. а в принцепе - позволяет smile. это довольно существенное замечание.

В Java есть указатели. smile В java нету синтаксиса для прямой работы с ними. нет арифметики указателей. но указатели сами по себе есть. В метод передаётся ссылка на объект, а не сам объект. вот почитайте милую статью: http://www.javable.com/columns/robinson/letters/01/

автоматический сборщик мусора... ндя. я бы сказал иначе - в Java отсутсвуют деструкторы. smile сборщик мусора это не особенность языка это особенность среды выполнения.

типобезопасность? ну.... смотря что вы под этим понимаете. поясните пожалуйста.

стандартные библиотеки? а это что: http://en.wikipedia.org/wiki/ISO/IEC_14882 ? Стандартная библиотека C++  стандартна в прямом смысле ибо есть соответсвующий стандарт ISO! Java может пускать слюни smile

отсутсвие глобальных переменных? ну... да пожалуй соглашусь, хотя статические классы еще никто не отменял но признаю это не совсем "то" 
PM   Вверх
sergejzr
Дата 9.5.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Цитата(Void @  8.5.2006,  23:35 Найти цитируемый пост)
Добавлено @ 23:36 
Цитата(sergej.z @  9.5.2006,  03:24 Найти цитируемый пост)
ява-специфичные степени инкапсуляции ("protected"

В C++ присутствует. 


Тьфу блин! "package protected" конечно имелся ввиду smile

Цитата(ALKS @  9.5.2006,  06:31 Найти цитируемый пост)
С++ ые templates это конечно предмет вечной зависти... 

В Java есть они smile

Цитата(ALKS @  9.5.2006,  06:31 Найти цитируемый пост)
Ни C++ ни Java не являются  полностью объектными языками.

По крайней мере в Java - приложении присутствует как минимум один обьект. В с++ коде может не быть ни одного smile
Цитата(ALKS @  9.5.2006,  06:31 Найти цитируемый пост)
Полностью объектный язык, это язык, у которого все является объектами, т.е. нет примитивных типов вообще.

На Java можно прогить и не пользуясь прим. типами. Впрочем как и на С++. Здесь разницы большой нет между ними.

Цитата(ALKS @  9.5.2006,  06:31 Найти цитируемый пост)
Остальные перечисленные пункты тоже верны не доконца и спорны

Дык напиши пару тройку своих, тоже поспорим smile

Цитата(raiskaa @  9.5.2006,  07:26 Найти цитируемый пост)
 Java- типобезопасность

Лучше не надо этот пункт брать. В Си++ типобезопастность тоже на высоте.

Цитата(raiskaa @  9.5.2006,  07:26 Найти цитируемый пост)
Java -отсутствие глобальных переменных

И это лучше не брать. В Java есть модификатор static.

Цитата(raiskaa @  9.5.2006,  07:26 Найти цитируемый пост)
Java:  нет указателей

Лучше написать. В Java у программиста нет выбора между работой с указателями, ссылками, или самими обьектами как в С++. В Java определено, что обьекты передаются по ссылке, а данные прим. типа копируются.  


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ALKS
Дата 9.5.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



sergej.z

 генерикс + автобоксинг это НЕ темплейты. далеко НЕ. хотя формально механизм темплейтов в С++ это уже не объекто ориентированое програмирование это абстрактное программирование - следующий шаг.

есть в Java объект всегда. ок. но это не далает Java полноcтью OO языком. Да, я придераюсь к этому слову: полноcтью. В отношении Java его употреблять нельзя. и не только в простых типах дело. есть и ещё нюансы. И нельзя говорить что С++ менее OO чем Java это не правда. он как раз "более". Единственное что можно сказать: на С++ можно писать полностью НЕ объектный код, а на Java - нет. 

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

Это сообщение отредактировал(а) ALKS - 9.5.2006, 10:38
PM   Вверх
JUncle
Дата 9.5.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(sergej.z @  9.5.2006,  10:19 Найти цитируемый пост)
В Java определено, что обьекты передаются по ссылке, а данные прим. типа копируются.   

Если быть точным, в Java все передается по значению. Да, в случае передачи объекта, параметр метода - это ссылка, но сама ссылка то передается по значению.
То есть, выполнив этот код, вы получите NullPointerException:

Код

    ...
    public void someMethod(String aString) {
        aString = "HelloWorld";
    }
    ...
    public void anotherOneMethod() {
        String ourString = null;
        this.someMethod(ourString);
        System.out.println(ourString.charAt(0));
    }
    ...

А все потому что, ссылка, передаваемая как аргумент в someMethod, передана по значению, и если изменять ее значение внутри метода, ссылка на "верхнем" уровне не изменится. Как она была null, так и останется. Другое дело, если изменить объект, на который указывает эта ссылка.
Таким образом, формально в Java ВСЕ передается по значению.   

Это сообщение отредактировал(а) JUncle - 9.5.2006, 11:43
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
sergejzr
Дата 9.5.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



JUncle, не надо утрировать smile Естесственно в компьютерном мире всё так или иначе передаётся по значению (Спускаясь до машинных инструкций). Таким образом дойдём до того, Что различий между любыми языками не существует, так как всё в конце концов превращается в 0 (включая 1, которая - инвертированный 0). Так можно что угодно упростить smile

Ссылка (или указатель) это абстрактная величина. Обьект передаётся именно по ссылке (которая в свою очередь ессно по значению).  


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
LSD
Дата 9.5.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(raiskaa @  9.5.2006,  10:26 Найти цитируемый пост)
Вопрос стоит какие из них действительно принципиальные, а какие - просто детали.
Мне надо выбрать всего 5.   
Пока зто в списке: 
C++ - машинный код / Java - интерпретируемый код 
 Java- ОО язык, а С++ - гибридный
 Java не позволяет множ. наследования
 Java:  нет указателей
 Java: автоматический сборщик мусора
 Java- типобезопасность
 Java - стандартные библиотеки, 
Java -отсутствие глобальных переменных

Часть перечисленных отличий относится к 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.
PM MAIL WWW   Вверх
ALKS
Дата 9.5.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



LSD это не религиозные войны, потому что вообщем-то никто не спорит что лучше а что хуже smile
Просто патаемся разобраться в различиях, не сваливаясь в диспут какие различия - зло, а какие - благо smile

и вообще дискусия интерсна. вот. 
PM   Вверх
sergejzr
Дата 9.5.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Вообще, как основное отличие надо добавить кроссплатформенность. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
raiskaa
Дата 9.5.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.5.2006

Репутация: нет
Всего: нет



Цитата(sergej.z @ 9.5.2006,  12:14)
Вообще, как основное отличие надо добавить кроссплатформенность.

А-а-а-а!!! Это что за зверь? smile  
PM MAIL   Вверх
LSD
Дата 9.5.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(raiskaa @  9.5.2006,  13:36 Найти цитируемый пост)
А-а-а-а!!! Это что за зверь?

Программа написанная на 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.
PM MAIL WWW   Вверх
sergejzr
Дата 9.5.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 6
Всего: 360



Цитата

 smile 


Программа написанная на яве будет работать и на линуксе и под виндой, короче везде, где JVM есть. даже на мобильмике smile 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
raiskaa
Дата 9.5.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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." 
PM MAIL   Вверх
LSD
Дата 9.5.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(raiskaa @  9.5.2006,  13:54 Найти цитируемый пост)
Вот это про кроссплатформенность?

"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."

Это объяснение, как она реализована. 


--------------------
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.
PM MAIL WWW   Вверх
ALKS
Дата 9.5.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



Цитата(sergej.z @ 9.5.2006,  12:49)
Цитата

 smile 


Программа написанная на яве будет работать и на линуксе и под виндой, короче везде, где JVM есть. даже на мобильмике smile

ууу smile ну уж нет. не все так просто. вэб приложение на J2EE вы на мобильнике не запустите. кроме того криво написанное Java приложение не заработает где попало. тут LSD прав. типичный пример - не использование System.getProperty("file.separator") при формировании имен файлов. есть и иные нюансы. кроме того Java приложение вы сможете запустить только на платформе для которой существует JVM и тут встают вопросы о совместимости конкретной JVM со спецификацией и её версией. Но в общем случае обеспечить переносимость приложения на Java на порядок проще, чем приложение на С++.

С другой стороны, не ошибусь если скажу что плактичиски любая платформа имеет компилятор С, но далеко не любая - JVM... 
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.