![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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, а в С++ класс может не иметь суперкласс. |
|||
|
||||
![]()
|
| Правила форума "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. |