Java или C++?
Java доста прилича на C++ и естествено е да изглежда, че C++ ще бъде заместен от Java. Аз обаче се съмнявам в тази логика. От една страна C++ все още има някои черти, които Java няма и въпреки че имаше много обещания че Java някой ден ще бъде бърз колкото C++ или даже по-бърз, пробив още няма (много се е ускорил, но не се докосва до бързината на C++). Изглежда също че има наперен интерес към C++ в много области, така че не допускам, че C++ скоро ще отпадне. (Езиците изглежда са непредсказуеми. Говорейки на един “Intermediate/Advanced Java Seminars,” Allen Holub твърдеше, че двата най-повсеместно използвани езика са Rexx и COBOL, в този ред.)
Започвам да мисля, че силата на Java е в малко по-различна област от тази на C++. C++ е език, който не се опитва да запълни определен калъп. Той е приспособен по множество начини да решава конкретен клас проблеми. Някои пакети комбинират библиотеки, инструменти за генерация на код за да постигнат произвеждане на код с прозоречен интерфейс (за Microsoft Windows). И какво ползват повечето разработчици на програми за Windows? Visual Basic (VB) на Майкрософт. Това е напук на факта че VB така произвежда кода, че програмата става неудобна за поддържане вече при няколко страници дължина (и синтаксис който може да бъде обект на митове). Колкото и успешен и популярен да е, VB е от гледната точка на проектирането камара кирки. Би било хубаво да имаме простотата и мощта на VB без резултантния неуправляем код. И там мисля че Java ще блесне: като “следващ VB.” Може да трепвате или да не тръпнете като чувате това, но помислете си върху него: така много от Java е посветено на улесняването на програмиста в решаването на въпроси като мрежовото програмиране и UI, а все още той има структура която позволява да се продуцират големи количества добре управляем код. Добавете към това факта че Java има най-добрите проверки на типа и обработка на грешки които съм виждал в програмен език и и имате предпоставките за голяма крачка напред в продуктивността на програмирането.
Да използвате ли Java вместо C++ за вашия проект? Освен Web аплетите има две неща да се вземат под внимание. Първо, ако искате да използувате множество съществуващи билиотеки (и сигурно ще получите много полза за продуктивността така) или ако имате съществуваща C или C++ маса код, Java може да снижи скоростта на проектирането вместо да я повиши. Ако започвате от нулата, простотата на Java спрямо C++ ще намали времето за разработка.
Най-големия въпрос е скоростта. Интерпретирания Java е бавен, даже 20 до 50 пъти по-бавен от C в оригиналните интерпретатори на Java. Това е подобрено малко с времето, но все още си остава важно число. Компютрите са за скорост; ако не беше важно нещо да става бързо, щяхте да го правите на ръка, а не с компютър. (Даже съм чувал да съветват да се започне с Java, за да се постигне късо време за разработка, после да се използва енструмент и поддържащи библиотеки за да се мине на C++, ако е необходима по-голяма скорост на изпълнение.)
Ключът за направата на Java звероятен кандидат за повечето не-Web проекти е подобряване на скоростта чрез т.н. “just-in time” (JIT) компилатори и даже чрез компилатори на кода към машинен език (два вече съществуват към времето на написване на тази книга). Разбира се, компилаторите до естествен за машината код премахват желаната преносимост, но също и повишават скоростта до близка до тази на C и C++. И кроскомпилирането на Java трябва да е много по-лесно отколкото при C или C++. (На теория само прекомпилирате, но това обещание е давано по повод други езици.)
Може да намерите сравнения на Java и C++, обзори за Java реалностите и практичността и правила за кодиране в приложенията.
2: Всичко е обект
Макар да е основан на C++, Java е "по-чист" обектно-ориентиран език за програмиране.
И C++ и Java са хибридни езици, но в Java проектантите не са чувствали хибридизацията така важна както в C++. Хибридния език допуска няколко стила на програмиране; причината C++ да е хибриден е че поддържа обратна съвместимост с C. Понеже C++ е надмножество на C езика, той включва много от нежеланите свойства на този език, което го прави в много случаи C++ натрупано сложен.
В Java се предполага, че ще се правят само обектно ориентирани програми. Това значи че преди да започнете трябва да превключите начина си на мислене към ОО свят (освен ако не сте го вече превключили). Печалбата от това предварително усилие е, че получавате възможност да работите с език, който е по-лесен за научаване и използване отколкото много ОО езици. В тази глава ще видим основните компоненти на една програма на Java и ще научим че всичко в Java е обект, даже самата Java програма.
Обектите манипулираме с манипулатори
Във всеки език се разбира различно нещо под "манипулиране на данните". Понякога програмистът трябва непрекъснато да внимава каква манипулация протича в момента. Да ли го манипулирате директно или индиректно чрез нещо, (указател в C или C++) което изисква специален синтаксис?
Всичко това е опростено в Java. Всичко се третира като обекти, затова има единен, винаги смислен синтаксис, който се използува навсякъде. Въпреки че всичко се третира като обект, идентификаторът с който работите е “манипулатор” на обект. (Може да го срещнете като reference или даже указател на други места, където се обсъжда Java.) Може да си представим сцената като телевизор (обектът) с дистанционно (манипулаторът). Докато държите манипулатора, можете и да управлявате обекта и когато някой каже “смени канала” или “намали звука,” това, на което въздействате е манипулаторът, а той манипулира обекта. Ако искате да се разхождате из стаята, вземате със себе си дистанционното, а не телевизора.
Освен това дистанционното може да остане само, без телевизор. Тоест ако имате манипулатор това не значи, че непременно има обект, който той манипулира. Така ако искате да вместите дума или изречение създавате манипулатор на String:
String s;
Създали сте само манипулаторът, не обект. Ако решите да отправите съобщение към s сега, ще получите грешка (по време на изпълнение) понеже s не е прикрепено към нищо (няма телевизор). Една по-сигурна практика е винаги да инициализирате, когато създавате:
String s = "asdf";
Тук е използван специален случай: стринговете може да бъдат инициализирани с текст в кавички. Нормално се използуват по-обобщени начини за инициализация на обекти.
Сподели с приятели: |