При закрытии подписчики были переданы в рассылку "Новости интернет-компаний" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Добрый день, уважаемые подписчики.
Идеи открытого образования, объединения информационных ресурсов институтов
витают в воздухе. В 1994 году правительством был издан указ "О создании
единого информационного пространства России", если правильно помню.
Говорят, что скоро будут проверять выполнение... А мы пока, средствами этого
самого пространства, рады предложить вам статью о двух
объектно-ориентированных языках.
Присылайте ваши пожелания на
indev@gmx.net,
посещайте сайт
Недавно я закончил читать замечательную книгу о различных профессиональных
приемах программирования с использованием C++. Книга называется "Библиотека
программиста. С++" Джефф Элджер. В конце книги, в качестве приложения есть
небольшая статья автора о Java и C++. Мне она показалась достаточно
интересной и я решил поделиться ею с вами. Возможно, кому-то она покажется
немного не актуальной или устаревшей, но на мой взгляд этот вопрос до сих
пор открыт и витает в воздухе. Единственное, что могло устареть в этой
статье, так это некоторые технические детали Java, но я не знаток этого
языка, поэтому не могу исправить возможные неточности (на самом деле я
сомневаюсь, что они там есть, но справедливости ради должен был сказать).
Статья приводится без сокращений. Естетственно все права остаются за
автором, я привожу ее здесь в чисто познавательных целях.
При виде ожиотажа, поднятого вокруг Java, невольно возникает вопрос: а не
является ли это обычной рекламной шумихой, единственная цель которой -
заставить вас купить очередной язык, обновить компьютер и приобрести кучу
книг? Вероятно, вам приходилось видеть, как обозреватели в вашем любимом
компьютерном журнале называют Java "новой версией" C++. Если это
действительно так, то стоит ли вам, знатоку C++, беспокоиться об этом
"новом" языке?
Java - это просто диалект C++. Кое-кто называет Java "вычищенным" вариантом
C++, из которого просто убраны некоторые редко используемые и нелогичные
возможности. Выходит, вы почти знаете Java, не открыв ни одной книги. Тем
не менее, у Java есть определенные аспекты, способные поколебать вашу
уверенность. Вэтом приложении рассматриваються некоторые отличия между
языками.
Забудьте о ручном управлении памятью, благодаря которому в C++ можно писать
приложения, превосходящие Java-аналоги по быстродействию и более эффективно
расходующие память. Разработчики Java ликвидировали ручное выделение и
освобожление памяти (пример 1), стремясь снизить вероятность ошибок при
кодировании.
// Пример 1 int* pt = new int; delete pt;
Арифметические операции с указателями в Java отсутствуют (см. Пример 2). Массивы Java представляют собой настоящие массивы, а не указатели, как в С++. Используемая в Java модель указателей фактически ликвидирует синтаксис указателей С++. Изменения были внесены для предотвращения случайных нарушений памяти и порчи данных из-зи ошибочных сещений в арифметических операциях с указателями.
// Пример 2 char* na = "Bob Smith"; na++;
Java предовращяет утечки памяти за счет ее автоматического освобождения -
свего рода автоматическая сборка мусора.
Кроме того, размер встроенных типов данных Java не зависит от кампилятора
или типа компьютера, как в С++. Типы данных имеют фиксированный размер -
скажем, int в Java всегда является 32-разрядным числом. Компилятор Java
генерирует инструкции байт-кода, которые эффективно преобразуются в набор
машинных комманд.
Кроме того, вы не встретите еще некоторых знакомых конструкций.
Разработчики Java ликвидировали еще две конструкции, связанные с
управлением памятью - структуры (см. Пример 3) и объединения. Java не
поддерживает этих синтаксических средств С++.
// Пример 3 struct name { char fname [20]; char lname [30]; }
Одна из задач Java заключалась в том, чтобы предотвратить динамические ошибки за счет ликвидации источника распространенных ошибок в С++. Среди таких ошибок - оператор присваивания (=), перепутанный с оператором равенства (==). В примере 4 показана распространенная ошибка С++, предотвращаемая компилятором Java.
// Пример 4 if (value = 10)
Вы провели бесчисленные часы за разработкой изощренной иерархии
множественного наследования и теперь желаете перенести ее в Java? Вас ждет
некоторое разочарование. Принципиальное различие между Java и С++
заключается в том, что Java не поддерживает множественного наследования
из-за сложности в управлении иерархиями. Тем не менее, в Java существуют
интерфейсы, которые обладают преимуществами множественного наследования без
тех затруднений, которые обычно с ним связаны.
Остерегайтесь коварства Java! Этот язык полон ловушек для программистов на
С++. Тем не менее, все функции в Java (в том числе и main) должны
принадлежать некоторому классу. В соответствии с требованиями Java для main
необходимо создать класс-оболочку (см. Пример 5). В Java нет функций
классов, а есть методы, поэтому main - метод, а не функция.
// Пример 5 public class ShellClass { public static void main (String[] args) { } }
Работа со строками в Java несколько запутана. В С++ строка представляет
собой массив символов, и вы можете модифицировать отдельные символы в
строке. В Java дело обстоит иначе. Строки Java больше напоминают указатель
char*. Строковые объекты Java удобны для программистов, поскольку они
автоматически выделяют и освобождают память. Это происходит в операторе
присваивания, конструкторе и деструкторе.
Методы Java похожи на функции классов С++, но все же не идентичны им.
Напимер, в Java нет глобальных функций и прототипов функций. Компилятор
Java работает в несколько проходов, что позволяет использовать методы до их
определения. Более того, функции нельзя передать адрес переменной,
поскольку аргументов-указателей и ссылок в Java не существует.
Некоторые части Java узнаются с первого взгляда. Нарпимер, объектные
переменные Java аналогичны объектным указателям С++ (см. Пример 6).
Объекты Java находятся в куче, объект, содержащий объектную переменную
другого объекта, на самом деле указывает на другой объект в куче.
// Пример 6 // Java MyObject Ob1; // C++ MyObject* Ob1;
Методы Java должны определяться внутри класса. Внешнее определение, как в С++, не допускается. Фрагмент, показанный в примере 7, работает в С++, но не в Java. Хотя методы определяются внутри класса, это не значит, что они автоматически становятся подставляемыми (inline) функциями.
// Пример 7 class person { } void person::Raise() { salary*=100; }
Стоит ли бросать С++ и переходить на Java? Трудно сказать, Java заслуживает
присталоного внимания при разработке приложений для Internet,
корпоративных или внешних сетей. Библиотека Java содержет все средства,
необходимые для работы с протоколами TCP/IP, HTTP и FTP. Благодаря этому
обратиться к сетеому объекту по URL также просто, как и в локальной
файловой системе.
Язык Java архитектурно нейтрален, поскольку компилятор генерирует объектный
код и делает Java приложение независимыми от реализации. Это особенно важно
для Internet-приложений. Однако в Java вам не удасться использовать
средства управления памятью С++, чтобы выжать все возможное быстродействие
для данной платформы. Так приходится расплачиваться за урпавление памятью,
переданное в распоряжение Java.
Как только речь заходит о многопоточности, архитектурная нейтральность Java
исчезает. Многопоточный код архитектурно нейтрален, но для реализации
многопоточности Java прибегает к услугам операционной системы, поскольку
реализация программных потоков существенно различается на разных
платформах.
Произведет ли Java революцию в языках программирования? Станет ли это коном
С++? Не спешите выбрасывать свой компилятор С++. При разработке приложений
для Internet, а также корпоративных и внешних сетей, Java оказывается более
простым и удобным языком, чем С++. И все же вопрос о том, удасться ли Java
стать действительно всесторонним языком и переманить на свою сторону
программистов, остается открытым.
-Pentagra
По причине подсознательного восприятия большинством следующих
сокращений привожу только их расшифровки, поскольку именно
они и забываются...
САПР - Системы Автоматизированного ПРоектирования
Системы автоматизированной подготовки роизводства
Системы моделирования и расчетов в проектировании
Разработка и сопровождение ПО
Проектирование жизненного цикла промышленных изделий
Система диспетчерского управления и сбора данных
Система распределения ресурсов
А на тему последних двух я обязательно с вами еще поговорю...
Оставайтесь с нами.
-KOYOT
Вы всегда можете найти все номера на нашем сайте в разделе
"Рассылка"
и в архиве службы рассылок
http://subscribe.ru/archive/comp.soft.prog.indev.
Кроме того привожу список на настоящий момент.
Ну вот вроде и все на сегодня. Напоследок предложу вам подписать на нашу
рассылку друзей и знакомых, что можно будет сделать формой внизу и если
есть желание, то присылать новости и замечания.
Авторские права охраняются. Перепечатка данного материала
или его части в любом виде разрешена только с указанием
авторства InDev и ссылки на сайт
Ресурсы сети InDev
http://subscribe.ru/
E-mail: ask@subscribe.ru | Отписаться | Relayed by Corbina
Рейтингуется SpyLog |
В избранное | ||