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

Поиск:

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


Опытный
**


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

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



Цитата(Void @  9.5.2006,  22:50 Найти цитируемый пост)
по поводу finally: в C++ есть RAII, который его с успехом заменяет.  


Правильно.  Речь идет о разнице между java и c++ - вот я и говорю - в жабе есть finally, который гораздо удобней. Потому что в C++ при использовании raii - надо инкапулировать ресурсы в обьекты, что требует дополнительной работы программиста (например если вы используете какие-то C функции, ну, скажем mysql api для доступа к базе данных) 


упс, пока писал - появилось грозное предупреждение модератора. все. умолкаю 

Это сообщение отредактировал(а) Бонифаций - 9.5.2006, 23:03


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
w1nd
Дата 9.5.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата
Вопрос звучал, в чем отличия, а не что лучше/хуже.

Так за это и война - что считать принципиальным отличием, а что нет. Ну да ладно, думаю, автор темы уже давно разобрался что к чему smile  


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
JUncle
Дата 9.5.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот в принципе, в ходе обсуждения и нашли еще одно отличие - в Java, в отличии от С++, есть контролируемые исключения, которые обязательно ловить или передавать на более "верхний" уровень. 
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
ALKS
Дата 10.5.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а кстати да! механизм исключений в Java существенно отличаеться и по моему личному мнению лучше того что есть в С++ (но к ООП это отношения прямого не имеет. smile )
Кстати если кому-то интересно: http://www.digitalmars.com/d/ очень очень люботный язык. smile к вопросу того что можно сделать из С если подойти с умом.

И еще господа, помните что С++ (не говоря о С) это достаточно старый язык. и все современные деалекты учитывали опыт разработки огромного количества софта на нем. Создатели Java это С/С++ гуру, естественно они учитывали недостатки С++ и стремились от них избавиться. так что Java и С++ сравнивать несколько не корректно...   

Это сообщение отредактировал(а) ALKS - 10.5.2006, 08:16
PM   Вверх
jimur
Дата 10.5.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 В Java есть Reflection 
PM MAIL   Вверх
ALKS
Дата 10.5.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(jimur @ 10.5.2006,  11:09)
В Java есть Reflection

это следствие того, что Java всё-таки имеет интерпретаторную природу smile 
PM   Вверх
jimur
Дата 10.5.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ALKS @  10.5.2006,  11:13 Найти цитируемый пост)
это следствие того, что Java всё-таки имеет интерпретаторную природу smile  

Согласен, но точки зрения плюсов важнее не причина, а следствия наличия Reflection.
Например, аналог Spring Framework на С++ сделать намного сложнее|невозможно. 
PM MAIL   Вверх
ALKS
Дата 10.5.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну Reflection это вещ довольно опасная. во-первых Reflection поощряет не объекто-ориентированное программирование особенно в связке с анатациями  (и мой любимый JUnit 4 яркий тому пример smile ). во-вторых Reflection, по понятным причинам, работает не быстро. так что увлекаться не стоит. вообщем, по моему мнению, применять надо осторожно и обдуманно smile  
PM   Вверх
jimur
Дата 10.5.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ALKS @  10.5.2006,  13:05 Найти цитируемый пост)
во-вторых Reflection, по понятным причинам, работает не быстро. так что увлекаться не стоит. вообщем, по моему мнению, применять надо осторожно и обдуманно smile 

Согласен, обдумывать применение технологий вообще полезно smile
Но для большинства приложений, где есть работа с базой стоимость вызова через Reflection ~1/1000 ms некритична. 
PM MAIL   Вверх
ALKS
Дата 10.5.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(jimur @ 10.5.2006,  13:27)
Цитата(ALKS @  10.5.2006,  13:05 Найти цитируемый пост)
во-вторых Reflection, по понятным причинам, работает не быстро. так что увлекаться не стоит. вообщем, по моему мнению, применять надо осторожно и обдуманно smile 

Согласен, обдумывать применение технологий вообще полезно smile
Но для большинства приложений, где есть работа с базой стоимость вызова через Reflection ~1/1000 ms некритична.

откуда такая цифра? 
PM   Вверх
jimur
Дата 10.5.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ALKS @  10.5.2006,  13:30 Найти цитируемый пост)
откуда такая цифра?  

Код

public class RefTest extends TestCase {
    public void testRefPerfomance() throws Exception {
        long st = System.currentTimeMillis();
        Clock clock = new Clock();
        for (int i = 0; i < 1000000; i++) {
            clock.getTime();
        }
        System.out.println("Processing time is " + (System.currentTimeMillis() -st) + " ms");

        st = System.currentTimeMillis();
        clock = new Clock();
        Method getTimeMethod = clock.getClass().getMethod("getTime");
        for (int i = 0; i < 1000000; i++) {
            getTimeMethod.invoke(clock);
        }
        System.out.println("Processing time is " + (System.currentTimeMillis() -st) + " ms");
    }
}

class Clock {
    public long getTime() {
        return System.currentTimeMillis();
    }
}
 
PM MAIL   Вверх
ALKS
Дата 10.5.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(w1nd @ 9.5.2006,  23:30)
Цитата
Вопрос звучал, в чем отличия, а не что лучше/хуже.

Так за это и война - что считать принципиальным отличием, а что нет. Ну да ладно, думаю, автор темы уже давно разобрался что к чему smile

А я вот напротив запутался. smile Предполагая, что никто не возражает, суммирую то к чему пришли:

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 принципиально отсутсвуют механизмы и синтаксис для прямой работы с указателями. т.е. указатели в недрах языка есть и даже есть примеры их неявного использования (объект переданный в метод), но нету типа "указатель" и нету никакой возможности работать со ссылками напрямую. в С++ - ради Бога  smile

6. "Java спроектирована под интенсивное использование Garbage Collection" © Бонифаций. Это существенное замечание. (Я бы сказал что Java спроектирована так что бы работать ТОЛЬКО и ИСКЛЮЧИТЛЬНО с Garbage Collection, но не суть). Как следствие в Java отсутсвует понятие метода-деструктора. В С++ использование Garbage Collection возможно, но "могу использовать, а могу и нет" и "не могу не использовать" это две большие разницы.


Ничего не забыл?   

Это сообщение отредактировал(а) ALKS - 11.5.2006, 08:41
PM   Вверх
Domestic Cat
Дата 10.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(ALKS @  10.5.2006,  07:23 Найти цитируемый пост)
2. С++ и Java имееют кординальные отличия в области OПП. С++  поддерживает Classes multiple Inheritance и Operator overloading, а Java - нет. В свою очередь Java поддерживает Inner (adaptor) classes, чего нету в С++. Есть и ряд других, менее заметных отличий, например: "ява-специфичные степени инкапсуляции, например package protected" © sergej.z

Нужно добавить также интерфейсы, их нет в С++.

Еще
1. В Java нет структур
2. Нет препроцессора 


--------------------

PM   Вверх
ALKS
Дата 10.5.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




1. интерфейсы - не согласен. полностью абстрактный и public класс без свойств суть интерфейс. то что в С++ нет специального ключевого слова (а кстати в поcледних стандартах деж есть уже, кажется) не принципиально. Кроме того(если мне не изменяет память) в С++ можно наследовтаь классы от структур и структуры могут иметь методы но в структурах всё public - вот вам и интерфейс. smile

2. Нет препроцессора. Ну механизм анотаций (уровня исходного кода) в связке с утилитой ant в Java 1.5 вообще-то позволяет вам создать препроцессор в каком-то виде. Кроме-того препросессор главныи образом используеться как раз для обеспечения кросс платформенности. так что его наличие для Java имеет довольно мало смысла в силу тотальной нативной переносимости.

3. ну а что такого ценного в структуре? структура может быть описана в ввиде класса. что тут существенно? некоторое удобство? - возможно. настолько ли это важное отличие? - не думаю. 
PM   Вверх
powerOn
Дата 10.5.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

3. ну а что такого ценного в структуре? структура может быть описана в ввиде класса. что тут существенно? некоторое удобство? - возможно. настолько ли это важное отличие? - не думаю. 


Структура - это конструкция языка, такая же как класс или интерфейс. С каждой конструкцией есть определенные правила работы. Отличие языков, в том что один обладает одними конструкциями, а другой другими... 
 Нужно смотреть на различия , а не подгонять возможности... 

В Java все классы наследуются от Object, а в С++ класс может не иметь  суперкласс. 


--------------------
user posted image нет времени думать - нужно писать КОД!

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

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

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


 




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


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

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