Книга е още в много ранна фаза на написване



страница16/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   ...   12   13   14   15   16   17   18   19   ...   73

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";

Тук е използван специален случай: стринговете може да бъдат инициализирани с текст в кавички. Нормално се използуват по-обобщени начини за ини­циа­ли­за­ция на обекти.




Сподели с приятели:
1   ...   12   13   14   15   16   17   18   19   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница