Отправляет email-рассылки с помощью сервиса Sendsay

Ресурсы сети InDev

  Все выпуски  

Ресурсы сети InDev


Служба Рассылок Subscribe.Ru проекта Citycat.Ru


Ресурсы сети lnDev No. 6

Добрый день, уважаемые подписчики. Идеи открытого образования, объединения информационных ресурсов институтов витают в воздухе. В 1994 году правительством был издан указ "О создании единого информационного пространства России", если правильно помню. Говорят, что скоро будут проверять выполнение... А мы пока, средствами этого самого пространства, рады предложить вам статью о двух объектно-ориентированных языках. Присылайте ваши пожелания на indev@gmx.net, посещайте сайт http://indev.virtualave.net/cgi-bin/use.pl. А в этом выпуске вы найдете:

  • Java против C++
  • Сокращения без комментариев
  • Предыдущие выпуски

Java против C++
Недавно я закончил читать замечательную книгу о различных профессиональных приемах программирования с использованием 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

Сокращения без комментариев
По причине подсознательного восприятия большинством следующих сокращений привожу только их расшифровки, поскольку именно они и забываются...

CAD - Computer Aided Design
САПР - Системы Автоматизированного ПРоектирования

CAM - Computer Aided Manufacturing
Системы автоматизированной подготовки роизводства

CAE - Computer Aided Engineering
Системы моделирования и расчетов в проектировании

CASE - Computer Aided Software Engineering
Разработка и сопровождение ПО

CALS - Computer Acquision and Life-cycle Support
Проектирование жизненного цикла промышленных изделий

SCADA - Supervisory Control And Data Acquision
Система диспетчерского управления и сбора данных

ERP - Enterprise Resource Planing
Система распределения ресурсов

А на тему последних двух я обязательно с вами еще поговорю...

Другие сокращения в следующем выпуске.
Оставайтесь с нами.


-KOYOT

Предыдущие выпуски
Вы всегда можете найти все номера на нашем сайте в разделе "Рассылка" и в архиве службы рассылок http://subscribe.ru/archive/comp.soft.prog.indev. Кроме того привожу список на настоящий момент.

P.S.
Ну вот вроде и все на сегодня. Напоследок предложу вам подписать на нашу рассылку друзей и знакомых, что можно будет сделать формой внизу и если есть желание, то присылать новости и замечания.

 Subscribe.Ru


Авторские права охраняются. Перепечатка данного материала
или его части в любом виде разрешена только с указанием
авторства InDev и ссылки на сайт Ресурсы сети InDev




 

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Relayed by Corbina
Рейтингуется SpyLog

В избранное