Үй / Қауіпсіздік / Java бағдарламалау тілі жасалған жылы. Java тіліне кіріспе. Java тілінің бағдарламалау тілі ретіндегі артықшылықтары

Java бағдарламалау тілі жасалған жылы. Java тіліне кіріспе. Java тілінің бағдарламалау тілі ретіндегі артықшылықтары

Java тілі. Кіріспе.

Ұзақ уақыт бойы компьютерлік журналды Java тіліне арналған мақаласыз елестету қиын болды. Ол туралы тіпті The New York Times, The Washington Post және Business Week сияқты танымал газеттер мен журналдар да жазды.

Ұлттық қоғамдық радионың он минуттық бағдарламаны бағдарламалау тіліне арнағанын есте сақтау мүмкін емес. Мұның жақсы немесе жаман болуы сіздің көзқарасыңызға байланысты. Өндіріске 100 миллион доллар инвестиция бағдарламалық қамтамасыз етуарнайы бағдарламалау тілі арқылы жасалған?! CNN, CNBC және басқа БАҚ телекомпаниялары Java тілінің мұны қалай жасай алатыны және жасай алатыны туралы сөйлесті және әлі де айтып жатыр.

Дегенмен, бұл кітап байыпты бағдарламашыларға арналған және Java маңызды бағдарламалау тілі болғандықтан, бізде көп нәрсе бар. Сонымен, біз жарнамалық уәделерді талдауға кіріспейміз және ненің шындық, ненің фантастика екенін анықтауға тырысамыз. Оның орнына, біз Java тілін бағдарламалау тілі ретінде егжей-тегжейлі сипаттайтын боламыз (соның ішінде, әрине, Интернетте жұмыс істеу үшін пайдалануға мүмкіндік беретін мүмкіндіктер, бұл, шын мәнінде, соншалықты көп жарнамалық шу шығарды). Осыдан кейін біз Java тілі іс жүзінде не істей алатынын және не істей алмайтынын түсіндіру арқылы шындықты қиялдан ажыратуға тырысамыз.

Алдымен жарнамалық уәделер мен Java тілінің нақты мүмкіндіктері арасында алшақтық болды. Ол жетілген сайын технология тұрақты және сенімді бола бастады және күтулер ақылға қонымды деңгейге дейін төмендеді. Клиенттер мен сервер ресурстары (мысалы, дерекқорлар) арасындағы байланысты қолдайтын «орта бағдарламалық құралды» жасау үшін Java тілі жиі қолданылуда.

Бұл маңызды қолданбалар таңқаларлық болмаса да, Java өзінің машиналық тәуелсіздігі, көп ағынды және желілік бағдарламалау мүмкіндіктерінің арқасында ең пайдалы екенін дәлелдеді. Сонымен қатар, Java тілі портативті құрылғылар, виртуалды дүңгіршектер, борттық автомобиль компьютерлері және т.б. үшін де-факто стандартына айналып, ендірілген жүйелер саласында жетекші орын алды. Дегенмен, Java-да кеңінен қолданылатын бағдарламалық бағдарламаларды қайта жазудың алғашқы әрекеттері дербес компьютерлерсәтті болмады - нәтижесінде алынған қолданбалар төмен қуатты және баяу болып шықты. Жаңа нұсқаның пайда болуымен осы мәселелердің кейбірі шешілді, бірақ пайдаланушылар сатып алған бағдарламаларының қай тілде жазылғанына мүлдем мән бермейтінін мойындау керек. Біз Java тілінің негізгі артықшылықтары бар бағдарламаларды қайта жазудан гөрі, құрылғылар мен қолданбалардың жаңа түрлерін жасаудан келеді деп сенеміз.

Java тілі программалау құралы ретінде

Бағдарламалау тілі ретінде Java өзінің жарнамалық уәделерін орындады. Сөзсіз, бұл байыпты бағдарламашылар үшін қол жетімді ең жақсы тілдердің бірі. Java керемет бағдарламалау тіліне айналу мүмкіндігіне ие, бірақ қазір тым кеш. Жаңа бағдарламалау тілі пайда болған кезде, оның бұрын жасалған бағдарламалық жасақтамамен үйлесімділігі туралы күрделі мәселе бірден пайда болады. Оның үстіне, бұл бағдарламаларға мәтініне араласпай өзгертулер енгізу мүмкін болса да, Java сияқты жұртшылықтың ыстық ықыласына бөленген тілді жасаушыларға: «Иә, біз жасаған болар едік» деуі қиын. X нұсқасын әзірлеуде қате, бірақ Y нұсқасы жақсырақ болады». Нәтижесінде, біз одан әрі жақсартуларды күте отырып, Java тілінің құрылымы жақын болашақта айтарлықтай өзгермейтінін айтуымыз керек.

Ашық сұрақ: « Java тілін қалай жетілдірдіңіз?«Бұл бағдарламалау тілінің өзін жетілдіру арқылы емес, Java тілінде жазылған бағдарламалардың кітапханаларын түбегейлі өзгерту арқылы жасалған болып шықты. Компания Sun Microsystemsбарлығын өзгертті: жеке кітапхана функцияларының атауларынан (оларды мағыналы ету) және графикалық модульдердің жұмыс істеу әдістерінен (оқиғаларды өңдеу әдісін өзгерту және жұмыс бағдарламаларын ішінара қайта жазу) және жаңа тіл қасиеттерін құрумен аяқталатын, мысалы. , Java 1.0 нұсқасында болмаған ақпаратты басып шығару құралдары. Нәтиже - барлығына қарағанда әлдеқайда пайдалы бағдарламалық платформа алдыңғы нұсқалар Java тілі.

Microsoft корпорациясы Java тіліне қатысты J++ деп аталатын өзінің өнімін шығарды. J++ тілі байт-кодты орындау кезінде Java виртуалды машинасымен үйлесімді виртуалды машина арқылы түсіндіріледі, бірақ сыртқы коды бар интерфейстер бұл тілдер арасында айтарлықтай ерекшеленеді. J++ және Java тілдерінің синтаксисі бірдей дерлік. Дегенмен, Microsoft қосымша тіл конструкцияларын жасады. Олардың барлығы өте күмәнді құндылыққа ие, қоспағанда Windows интерфейсі API. Бұл тілдердің синтаксисі бірдей болғандықтан, олардың негізгі кітапханалары (жолдар, утилиталар, желілік бағдарламалау құралдары, көп ағынды құралдар, математикалық кітапханалар және т.б.) бірдей.

Дегенмен, графикалық кітапханалар, пайдаланушы интерфейсі және қашықтағы объектілерге қол жеткізу бұл тілдер арасында мүлдем басқаша. Қазіргі уақытта Microsoft Java тіліне көптеген ұқсастықтары бар, бірақ басқа виртуалды машинаны пайдаланатын жаңа C# тілін әзірлеген J++ тілін енді қолдамайды. Бұл кітап J++ тілін де, C# тілін де қамтымайды.

Java тілінің артықшылықтары

1) Java тілінің негізгі артықшылықтарының бірі бағдарламалар орындалатын платформадан тәуелсіздік: сол кодты Windows, Solaris, Linux, Machintosh және т.б. операциялық жүйелерде іске қосуға болады.
Бұл бағдарламаларды кейінірек әртүрлі операциялық жүйелерде орындау үшін Интернет арқылы жүктеп алған кезде өте қажет.

2) Тағы бір артықшылығы - бұл Java тілінің синтаксисі C++ тілінің синтаксисіне ұқсас және C және C++ тілдерін білетін бағдарламашылар оны оңай үйрене алады.. Рас, Visual Basic тілінде сөйлейтін бағдарламашылар үшін бұл синтаксис әдеттен тыс болуы мүмкін.

Егер сіз ешқашан C++ тілінде бағдарлама жасамаған болсаңыз, осы бөлімде қолданылатын кейбір терминдер сізге түсініксіз болады. Бұл жағдайда оны өткізіп жіберуге болады. 6-тараудың соңына жеткенде бұл терминдер сізге таныс болады.

3) Сонымен қатар, Java - толығымен объектіге бағытталған тіл, тіпті C++ тілінен де артық. Сандар сияқты бірнеше қарабайыр типтерді қоспағанда, Java тіліндегі барлық нысандар объектілер болып табылады. (Объектіге бағытталған бағдарламалау күрделі жобаларды жасауды жеңілдететіндіктен, ол ескі құрылымдық бағдарламалауды ауыстырды. Егер сіз объектілі-бағытталған бағдарламалаумен таныс болмасаңыз, 3-6 тараулар сізге бұл туралы білуіңіз керек барлық нәрсені береді.)

Дегенмен, С++ тілінің басқа, сәл жақсартылған диалектісін дамыту жеткіліксіз. Ең бастысы, Java тілінде қатесіз бағдарламаларды жасау C++ тіліне қарағанда оңайырақ. Неліктен? Java тілін әзірлеушілер ұзақ уақыт бойы C++ тілінде жазылған бағдарламалар неге сонша қателіктер жіберетініне таң қалды. Олар Java тілін ең жиі кездесетін қателерді жасыратын бағдарламаларды жасау мүмкіндігін жоюға арналған құралдармен қамтамасыз етті. Ол үшін Java тілінде келесі әрекеттер орындалады.

4) Жадты нақты бөлу және босату мүмкіндігі алынып тасталады.
Java тіліндегі жад қоқыс жинау механизмі арқылы автоматты түрде босатылады. Бағдарламалаушыға жадты дұрыс пайдаланбаумен байланысты қателерден кепілдік беріледі.

5) Шынайы массивтер енгізілді және көрсеткіш арифметикасына тыйым салынды.
Енді бағдарламашылар, негізінен, байланысты жадтан деректерді өшіре алмайды теріс пайдаланукөрсеткіштер.

6) Тағайындау операторын теңдік салыстыру операторымен шатастыру мүмкіндігі жойылды.
Енді if(ntries = 3) операторын құрастыра алмайсыз. . . (Visual Basic бағдарламашылары мұнда мүлде проблеманы байқамауы мүмкін, себебі бұл қате C және C++ тіліндегі шатасулардың көзі болып табылады).

7) Көп мұрагерлік алынып тасталды. Оның орнына жаңа концепция – Objective C тілінен алынған интерфейс келді.
Интерфейс бағдарламашыға класс иерархияларын басқару кезінде туындайтын қиындықтарды болдырмай, бірнеше мұрадан ала алатын барлық дерлік береді.

Java тілінің мүмкіндіктері

Қарапайым
Түсіндірме
Таратылды
Сенімді
Қауіпсіз
Машинаға тәуелсіз
Объектіге бағытталған
Жоғары өнімділік
Көп ағынды
Динамикалық
Компьютер архитектурасына тәуелсіз

Біз осы тармақтардың кейбіріне соңғы бөлімде тоқталған болатынбыз. Бұл бөлімде біз: тілдің мүмкіндіктерін ашатын Java тіл нұсқаулығынан дәйексөздерді береміз; Біз оның соңғы нұсқасымен жұмыс істеу тәжірибесіне сүйене отырып, тілдің жеке қасиеттері туралы ойларымызды оқырмандармен бөлісетін боламыз.

Қарапайым

Біз бағдарламалау оңай, қосымша оқытуды қажет етпейтін және белгіленген бағдарламалау тәжірибесі мен стандарттарын ескеретін жүйені жасағымыз келді. Сондықтан, біз C++-ті осы мақсаттарға жарамсыз деп санағанымызбен, Java жүйені қолжетімді ету үшін мүмкіндігінше ұқсас етіп жасалған. Java-да С++ тілінің аз қолданылатын, түсініксіз және түсініксіз мүмкіндіктерінің көпшілігі жоқ, олар жақсыдан гөрі зияны көп.

Java синтаксисі негізінен C++ синтаксисінің тазартылған нұсқасы болып табылады. Бұл тілде тақырып файлдары, көрсеткіш арифметикасы (және көрсеткіштердің өздері), құрылымдар, бірлестіктер, оператордың шамадан тыс жүктелуі, виртуалды базалық класстар және т.б. жоқ. (Java мен C++ тілінің арасындағы айырмашылықтар кітапта шашыраңқы C++ тілі туралы ескертпелерде сипатталған.) Дегенмен әзірлеушілер C++ тілінің барлық кемшіліктерін түзетуге тырыспады.

Мысалы, Java тіліндегі switch операторының синтаксисі өзгеріссіз қалады. C++ тілін біле отырып, Java синтаксисіне өту оңай болады.
Егер сіз әдетте визуалды бағдарламалау ортасын (мысалы, Visual Basic) пайдалансаңыз, сізге Java қиын болуы мүмкін.
Оның синтаксисі жиі біртүрлі болып көрінеді (бірақ өрнектің мағынасын түсіну қиын емес). Ең бастысы, Java тілінде жұмыс істегенде көп бағдарламалау бар. Visual Basic бағдарламасының сұлулығы оның визуалды бағдарламалау ортасы қолданбалы инфрақұрылымды дерлік автоматты түрде жасауға мүмкіндік береді. Java көмегімен бірдей нәтижеге жету үшін қолмен бағдарламалау қажет, бірақ әлдеқайда қысқа бағдарламалар жасайды.

Дегенмен апарып тастау технологиясын пайдаланып бағдарламалар жасауға мүмкіндік беретін бағдарламалау ортасының үшінші түрі бар.

Қарапайымдылықтың тағы бір қыры - қысқалық. Java тілінің мақсаттарының бірі - шағын машиналарда толығымен дербес орындалатын бағдарламаларды әзірлеуге мүмкіндік беру. Негізгі аудармашы мен сыныпты қолдаудың өлшемі шамамен 40 КБ құрайды; стандартты кітапханалар мен ағынды қолдау (әсіресе дербес микроядро) тағы 17:КБ алады.
Бұл үлкен жетістік. Дегенмен, GUI қолдау кітапханалары әлдеқайда үлкен екенін ескеріңіз.

Объектіге бағытталған

Қарапайым тілмен айтқанда, объектілі-бағытталған бағдарламалау деректерге (яғни объектілерге) және оларға қол жеткізу құралдарына бағытталған бағдарламалау әдісі болып табылады. Ұсталық ұқсастықты қолдану үшін, объектіге бағытталған шебер ең алдымен өзі жасап жатқан орындыққа назар аударады және оны жасауға қажетті құралдармен ғана айналысады; бұл ретте объектіге бағдарланбаған ұста тек өз құралдары туралы ойлайды. Java және C++ тілінің объектіге бағытталған қасиеттері негізінен бірдей.

Объектілік бағдарлау соңғы 30 жыл ішінде өзінің құндылығын дәлелдеп үлгерді және қазіргі заманғы бағдарламалау тілін онсыз елестету мүмкін емес. Шынында да, Java тілінің объектіге бағытталған мүмкіндіктерін C++ тілімен салыстыруға болады. Олардың арасындағы негізгі айырмашылық Java тілінде, сондай-ақ Java тілінің метасынып үлгісінде ең жақсы шешім табылған бірнеше тұқым қуалау механизмінде жатыр.

Рефлексия (5-тарау) және объектілерді сериялау (12-тарау) дайын құрамдас бөліктерден графикалық пайдаланушы интерфейстерін құруға арналған ұзақ мерзімді нысандар мен құралдарды қамтамасыз етеді.

Егер сіз ешқашан объектіге бағытталған тілде бағдарлама жасамаған болсаңыз, 4-6 тарауларды мұқият оқып шығыңыз. Бұл тараулар объектілі-бағытталған бағдарламалау негіздерімен таныстырады және күрделі жобаларды әзірлеу кезінде C немесе Basic сияқты дәстүрлі, процедураға бағытталған тілдерден артықшылығын көрсетеді.

Таратылды

Java-да HTTP (Hypertext Transfer Protocol) немесе FTP (Файл тасымалдау протоколы) сияқты TCP/IP (Transmission Control Protocol/Internet Protocol) негізінде деректерді тасымалдауға арналған бағдарламалардың үлкен кітапханасы бар. Java тілінде жазылған қолданбалар және көмегімен желі арқылы нысандарды ашып, оларға қол жеткізе аладыURL мекенжайлары (Бірыңғай ресурс орны) оңай жергілікті желі.

Java тілі желіге қосылу үшін қуатты және ыңғайлы құралдармен қамтамасыз етеді. Интернетке басқа тілдерде бағдарламалар жазуға тырысқан кез келген адам Java-да ең қиын тапсырмалардың, мысалы, желілік қосылымдарды (розеткалар) ашудың қаншалықты оңай шешілетініне таң қалады. Сервлеттер деп аталатын талғампаз механизм сервердегі жұмысты өте тиімді етеді.

Сервлеттерге көптеген танымал адамдар қолдау көрсетеді Веб-серверлер. (Желі 2-томда қарастырылады.) Java тіліндегі бөлінген нысандар арасындағы байланыс шақыру механизмі арқылы қамтамасыз етіледі. қашықтағы әдістер(бұл тақырып екінші томда да қарастырылған).

Сенімді

Java тілі кез келген жағдайда сенімді жұмыс істейтін бағдарламаларды жасауға арналған. Java ерте анықтауға бағытталған мүмкін қателер, динамикалық тексеру (бағдарламаны орындау кезінде), сондай-ақ қатеге бейім жағдайларды жою... Java тілі мен C++ тілінің арасындағы бірден-бір елеулі айырмашылық Java тілінде қабылданған көрсеткіш үлгісі болып табылады, ол қайта жазу мүмкіндігін болдырмайды. жад бөлігі және зақымдайтын деректер.

Бұл қасиет де өте пайдалы. Java тілінің компиляторы басқа тілдерде тек бағдарламаны орындау кезінде анықталатын қателерді анықтайды. Сонымен қатар, жарамсыз көрсеткішке байланысты жадтың бұзылуын тудырған қатені іздеуге көп сағат жұмсаған бағдарламашылар Java тілінде мұндай проблемалар негізінен туындамайтынын білуге ​​өте қуанышты болады.

Көрсеткіштерді нақты пайдаланбайтын Visual Basic немесе COBOL бағдарламаларында бұрын бағдарламалаған болсаңыз, мұның неге соншалықты маңызды екенін түсінбеуіңіз мүмкін. C бағдарламашыларының жолы әлдеқайда аз. Оларға жолдарға, массивтерге, нысандарға және тіпті файлдарға қол жеткізу үшін көрсеткіштер қажет. Visual Basic-те бағдарламалау кезінде бұлардың ешқайсысы талап етілмейді және бағдарламашы бұл нысандар үшін жадты бөлуге алаңдамайды. Екінші жағынан, көптеген деректер құрылымдарын көрсеткіштерсіз тілде енгізу өте қиын. Жолдар мен массивтер сияқты тұрақты құрылымдар үшін көрсеткіштер қажет емес. Көрсеткіштердің толық күші оларсыз істеу мүмкін болмаған жерде ғана көрінеді, мысалы, жасау кезінде қатысты тізімдер. Java программисті жаман көрсеткіштерден, қате бөлулерден және жадтың ағып кетуінен мәңгілікке таза болады.

Қауіпсіз

Java тілі желілік немесе таратылған ортада пайдалануға арналған. Осы себепті қауіпсіздікке көп көңіл бөлінді. Java тілі вирустардан және сыртқы кедергілерден қорғалған жүйелерді жасауға мүмкіндік береді.

Бірінші басылымда біз: «Ешқашан ешқашан деме» деп жазғанбыз және біз дұрыс болдық. Принстон университетінің қауіпсіздік сарапшылары тобы JDK бірінші нұсқасы шыққаннан кейін көп ұзамай Java 1.0 жүйесіндегі бірінші қауіпсіздік кемшіліктерін анықтады. Сонымен қатар, олар және басқа мамандар кейіннен Java тілінің барлық кейінгі нұсқаларының қауіпсіздік механизмдеріндегі жаңа қателерді табуды жалғастырды.

Бұл жағдайдың оң жағы Java тілінің командасы қауіпсіздік қателеріне мүлдем төзбеушілік танытып, апплет қауіпсіздік механизмінде табылған ақауларды дереу түзете бастады. Атап айтқанда, Java тілінің аудармашысының ішкі сипаттамаларын жариялау арқылы Sun жасырын қауіпсіздік қателерін табуды әлдеқайда жеңілдетті және оларды табу үшін тәуелсіз сарапшыларды тартты.

Бұл қауіпсіздік жүйесіндегі кез келген қателердің жақын арада табылу ықтималдығын арттырды. Қалай болғанда да, Java тілінің қауіпсіздік жүйесін жеңу өте қиын. Осы уақытқа дейін табылған қателер дерлік нәзік болды және олардың саны (салыстырмалы түрде) аз.

Sun қауіпсіздік веб-бетінде келесі URL бар: http://java.sun.com/sfaq/.

Java тілінің қауіпсіздік жүйесі алдын алатын кейбір жағдайларды тізіп көрейік.

1) Интернетте тараған атышулы «құрт» тудырған орындалатын бағдарламаның стек толып кетуі.

2) Процесске бөлінген кеңістіктен тыс орналасқан жады аймақтарының зақымдануы.

3) Файлға кіруге тыйым салатын веб-шолғыш сияқты қауіпсіз класс жүктеушісін пайдалану кезінде жергілікті файлдарды оқу және жазу.

Осы қауіпсіздік шараларының барлығы орынды және әдетте мінсіз жұмыс істейді, бірақ абай болу ешқашан зиян тигізбейді. ашқанымен осы сәттеҚателер ұсақ-түйек болғанымен және олардың ашылуының егжей-тегжейлері жиі құпия сақталатынымен, Java тілінің қауіпсіздігін дәлелдеу әлі де мүмкін емес екенін мойындау керек.

Уақыт өте келе тілге жаңа қорғаныстар қосылды. 1.1 нұсқасынан бастап Java тілі цифрлық қолтаңбасы бар сыныптар түсінігін енгізді. Сандық қолтаңбасы бар сыныпты пайдалану арқылы оның авторына сенімді бола аласыз. Егер сіз оған сенсеңіз, бұл сыныпқа құрылғыңызда қол жетімді барлық артықшылықтарды бере аласыз.

Microsoft ұсынған баламалы кодты жеткізу механизмі ActiveX технологиясына негізделген және тек пайдаланады цифрлық қолтаңбалар. Әлбетте, бұл жеткіліксіз - Microsoft бағдарламалық жасақтамасының кез келген пайдаланушысы белгілі өндірушілердің бағдарламалары жиі бұзылатынын растай алады, осылайша деректердің бүліну қаупін тудырады. Java қауіпсіздігі ActiveX технологиясына қарағанда әлдеқайда күшті, себебі ол қолданбаны іске қосқан сәттен бастап басқарады және оның зақымдануын болдырмайды.

Сәулет тәуелсіз

Компилятор нысандық файлды жасайды, оның форматы компьютердің архитектурасына байланысты емес, компиляцияланған бағдарлама Java бағдарламасын орындау жүйесінің басқаруымен кез келген процессорда орындалуы мүмкін; Ол үшін Java тілінің компиляторы арнайы компьютер архитектурасына тәуелсіз байт-код командаларын жасайды. Байтекод кез келген машинада оңай түсіндірілетін немесе машинаға тәуелді кодқа жылдам аударылатындай етіп жасалған.

Емес жаңа идея. 20 жылдан астам бұрын Никлаус Вирттің Паскаль енгізуі де, UCSD Паскаль да бірдей технологияны пайдаланды. Байт-кодтарды пайдалану бағдарламаны орындауда үлкен пайда әкеледі (бірақ синхронды компиляция көп жағдайда мұны өтейді). Java тілін әзірлеушілер көптеген компьютерлерде жақсы жұмыс істейтін байт-код пәрмендерінің жиынтығын жасауда тамаша жұмыс жасады. заманауи компьютерлер, нақты машина командаларына оңай аудару.

Машинаға тәуелсіз

C және C++ тілдерінен айырмашылығы, Java спецификациясында іске асыруға тән аспектілер жоқ. Негізгі деректер түрлерінің өлшемі де, олармен арифметикалық амалдар да дәл анықталған.

Мысалы, Java тіліндегі int түрі әрқашан 32 биттік бүтін санды білдіреді. C және C++ тілдерінде int түрі белгілі бір компиляторды әзірлеушінің таңдауы бойынша 16 биттік немесе 32 биттік бүтін санды, сондай-ақ еркін өлшемді бүтін санды білдіруі мүмкін. Жалғыз шектеу - int түрінің өлшемі short int түрінің өлшемінен кіші және long int түрінің өлшемінен үлкен болмауы. Сандық түрлердің бекітілген өлшемі іске қосылған бағдарламалармен байланысты көптеген қиындықтарды болдырмайды әртүрлі компьютерлер. Екілік деректер бекітілген пішімде сақталады және жіберіледі, бұл сонымен қатар әртүрлі платформалардағы әртүрлі байт ретімен байланысты түсінбеушіліктерді болдырмайды («büyük endian/little endian» қақтығысы). Жолдар ішінде сақталады стандартты форматЮникод.

Жүйенің бөлігі болып табылатын кітапханалар машинадан тәуелсіз интерфейсті анықтайды. Мысалы, тіл дерексіз Window сыныбын және оның Unix, Windows және Macintosh операциялық жүйелері үшін іске асыруларын қамтамасыз етеді.

Windows, Macintosh және Unix-тің он нұсқасымен бірдей жақсы жұмыс істейтін бағдарламаны жазуға тырысқан кез келген адам бұл өте қиын тапсырма екенін біледі. Java нұсқасы қарапайым пайдаланушы интерфейсінің элементтерін бағдарламалық платформалардың кең ауқымына бейімдейтін қарапайым құралдар жинағын ұсыну арқылы осы мәселені шешуге батыл әрекет жасады. Өкінішке орай, көп еңбекті қажет еткен кітапхана әртүрлі платформаларда қолайлы нәтижелерге қол жеткізе алмады. (Сонымен бірге әртүрлі платформалардағы графикалық бағдарламаларда әртүрлі қателер пайда болды.)

Алайда бұл бастамасы ғана еді. Көптеген қолданбаларда машинаның тәуелсіздігі графикалық пайдаланушы интерфейсінің күрделілігінен әлдеқайда маңызды. Бұл Java 1.0 шығарылымының пайдасын көрген қолданбалар. Дегенмен, GUI құралдар жинағы енді толығымен қайта жасалды және енді басты компьютердегі пайдаланушы интерфейсіне тәуелді емес. Жаңа нұсқабұрынғыларға қарағанда мағыналы және біздің ойымызша, пайдаланушы үшін тартымдырақ.

Түсіндірме

Java тілінің интерпретаторын кез келген машинаға жіберуге және оған тікелей байт кодты орындауға болады. Сілтемелерді өңдеу оңай процесс болғандықтан, бағдарламаны әзірлеу әлдеқайда жылдам және тиімдірек болуы мүмкін.

Бұл қосымшаларды әзірлеу кезінде артықшылық болуы мүмкін, бірақ жоғарыда келтірілген дәйексөз анық асыра сілтеу болып табылады. Кез келген жағдайда, JSDK (Java Software Development Kit) құрамына кіретін Java компиляторы өте баяу. (Кейбір үшінші класты компиляторлар, мысалы, IBM компаниясының компиляторлары әлдеқайда жылдам.) Қайта құрастыру жылдамдығы бағдарламалау ортасының тиімділігінің бір ғана факторы болып табылады. Java және Visual Basic бағдарламалау орталарының жылдамдығын салыстырған кезде көңіліңіз қалуы мүмкін.

Жоғары өнімділік

Жалпы түсіндірілетін байт-кодтардың жеткілікті өнімділігінен жоғары болғанымен, одан да жоғары тиімділікті талап ететін жағдайлар бар. Байткодтарды жылдам (орындалу уақытында) қолданба жұмыс істеп тұрған нақты процессорға арналған машина кодтарына аударуға болады.

Егер сіз байт кодтарын орындау үшін аудармашыны пайдалансаңыз, «сөзін қолданбауыңыз керек. жоғары өнімділік"Алайда, көптеген платформаларда дәл уақытында компиляторлар (JIT) қамтамасыз ететін компиляцияның басқа түрі мүмкін. Олар байт-кодты машинаға тәуелді кодқа аударады, нәтижені жадта сақтайды, содан кейін қажет болғанда шақырады. Өйткені бұл интерпретация бір рет орындалса, бұл тәсіл жылдамдықты бірнеше есе арттырады.

Синхронды компиляторлар әлі де машинаға тәуелді компиляторларға қарағанда баяу болса да, олар кез келген жағдайда интерпретаторларға қарағанда әлдеқайда жылдам, кейбір бағдарламалар үшін 10 және тіпті 20 есе жылдамдықты қамтамасыз етеді. Бұл технология үнемі жетілдіріліп отырады және ақырында дәстүрлі компиляторлар ешқашан асып түспейтін жылдамдыққа жетуі мүмкін. Мысалы, синхронды компилятор кодтың қай бөлігі жиі орындалатынын анықтай алады және оны орындау жылдамдығы үшін оңтайландырады.

КӨП ЖІГІМДІ

Жақсырақ интерактивтілік пен бағдарламаның орындалуын қамтамасыз етеді.

Егер сіз көп ағынды есептеулерді кез келген басқа бағдарламалау тілінде енгізуге тырысқан болсаңыз, оны Java тілінде орындау қаншалықты оңай екеніне таң қаласыз. Операциялық жүйе рұқсат етсе, Java тіліндегі ағындар көппроцессорлық жүйелердің артықшылығын пайдалана алады. Өкінішке орай, көптеген платформалардағы ағынды енгізулер айтарлықтай өзгереді және Java тілінің дизайнерлері біркелкілікке қол жеткізуге тырыспайды. Тек ағындарды шақыру коды барлық машиналар үшін бірдей болып қалады; Java тілі негізгі операциялық жүйеге немесе ағындық кітапханаға көп ағынды енгізуді кейінге қалдырады. (Ағындар 2-томда қамтылған.) Осыған қарамастан, бұл ұйымдастырудың қарапайымдылығы көп ағынды есептеулер Java серверлік бағдарламалық жасақтаманы әзірлеу үшін соншалықты тартымды етеді.

Динамикалық

Көптеген жолдармен Java C немесе C++ қарағанда динамикалық. Ол үнемі өзгеріп отыратын ортаға оңай бейімделу үшін жасалған. Жаңа әдістер мен объектілерді кітапханаларға ешбір зиян келтірместен еркін қосуға болады. Java тілі бағдарламаның орындалу барысы туралы ақпаратты алуды жеңілдетеді.

Бұл іске қосылған бағдарламаға код қосу қажет болған жағдайда өте маңызды. Мұның басты мысалы - браузер орындау үшін Интернеттен жүктеп алынған код. Java 1.0-де жұмыс істеп тұрған бағдарламаның орындалу барысы туралы ақпаратты алу оңай болған жоқ, бірақ Java тілінің қазіргі нұсқасы бағдарламашыға жұмыс істеп тұрған бағдарлама объектілерінің құрылымын да, әрекетін де ашады.
Бұл бағдарламаны орындау кезінде объектілерді талдауы қажет жүйелер үшін өте құнды. Бұл жүйелерге графикалық пайдаланушы интерфейсі құралдары, интеллектуалды отладчиктер, қосылатын модульдер құрамдастары және объектінің дерекқорлары кіреді.

Java және Интернет

Идея қарапайым - пайдаланушыларИнтернеттен Java байт кодтарын жүктеп алыңыз және оларды өз машиналарында орындаңыз. Веб-браузерлердің астында жұмыс істейтін Java бағдарламалары апплет деп аталады. Апплетті пайдалану үшін сізге Java тілін қолдайтын және байт кодтарын түсіндіре алатын веб-шолғыш қажет. Java тілінің бастапқы коды Sun компаниясына лицензияланған, ол тілдің өзі де, оның негізгі кітапханаларының құрылымы да өзгеріссіз қалуын талап етеді. Өкінішке орай, іс жүзінде бәрі олай емес. Netscape-тің әртүрлі нұсқалары және Internet Explorer Java тілінің әртүрлі нұсқаларын қолдайды және бұл нұсқалардың кейбірі айтарлықтай ескірген. Бұл өкінішті жағдай артықшылықтарды пайдаланатын апплеттердің дамуына кедергілерді тудырады соңғы нұсқасы Java тілі. Бұл мәселені шешу үшін Sun Netscape және Internet Explorer браузерлерінде Java бағдарламаларын іске қосу үшін ең озық ортаны қамтамасыз ететін Java Plug-in әзірледі.

Апплетті жүктеу суретті веб-бетке енгізу сияқты. Апплет беттің бір бөлігіне айналады, ал мәтін ол алатын кеңістіктің айналасында қозғалады. Алайда, айырмашылығы сол, бұл бейне қазір тірі. Ол пайдаланушы командаларына жауап береді, оны өзгертеді сыртқы түріжәне апплет қаралатын компьютер мен осы апплетті басқаратын компьютер арасында деректердің тасымалдануын қамтамасыз етеді.

Апплетті жүктеу веб-бетке суретті кірістіру сияқты. Апплет беттің бір бөлігіне айналады, ал мәтін ол алатын кеңістіктің айналасында қозғалады. Мәселе мынада, бұл сурет «тірі». Ол пайдаланушы командаларына жауап береді, оның сыртқы түрін өзгертеді және апплетті басқаратын компьютер мен апплетті басқаратын компьютер арасында деректерді тасымалдайды.

Суретте. 1.1-суретте күрделі есептеулерді орындайтын және молекулаларды көрсету үшін апплетті пайдаланатын динамикалық веб-беттің жақсы үлгісі көрсетілген. Молекуланың құрылымын жақсырақ түсіну үшін оны айналдыруға немесе тінтуірдің көмегімен үлкейтуге болады. Мұндай манипуляцияларды статикалық режимде орындау мүмкін емес Web беттері, дегенмен апплеттер мұны мүмкін етеді. (Бұл апплетті http://jmol.sourceforge.net сайтынан табуға болады.)

Күріш. 1.1. Апплет Джмол

Апплеттерді пайдалану арқылы веб-бетке жаңа түймелер мен мәтін өрістерін қосуға болады. Дегенмен, мұндай апплеттер телефон желісі арқылы баяу жүктеледі.

Дәл осындай әрекетті Dynamic HTML, HTML пішіндері (Hypertext Markup Language) немесе JavaScript сияқты сценарий тілі арқылы жасауға болады. Әрине, алғашқы апплеттер анимацияға арналған: глобустарды айналдыру, би мультфильм кейіпкерлері, сәнді мәтін және т.б. Дегенмен, анимацияланған GIF файлдарының көпшілігі бірдей орындай алады, ал Динамикалық HTML сценарийлермен біріктірілгенде апплеттерге қарағанда әлдеқайда көп жұмыс істейді.

Браузердің үйлесімсіздігі және баяу жүктеу процесіндегі сәйкессіздік нәтижесінде желілік қосылымдар Web-парақтарға арналған апплеттер үлкен прогресс емес еді. Жергілікті желілерде (интранеттерде) жағдай мүлдем басқаша. Оларда әдетте байланысты проблемалар болмайды өткізу қабілетіарна, сондықтан апплеттерді жүктеу уақыты шамалы. Жергілікті желіде қалаған браузерді таңдауға немесе Java Plug-In бағдарламасын пайдалануға болады. Қызметкерлер желі арқылы жеткізілетін бағдарламалық құралды дұрыс емес орынға жылжыта алмайды немесе оны қате орната алмайды және жүйелік әкімшібарлық клиенттік машиналарға барудың және олардағы бағдарламаларды жаңартудың қажеті жоқ. Түгендеу есебіне, демалысты жоспарлауға, саяхат шығындарын өтеуге және т.б. арналған көптеген бағдарламаларды көптеген корпорациялар браузерлерді пайдаланып апплет түрінде әзірледі.

Біз кітапты жазып жатқан кезде маятник қайтадан клиенттік бағдарламалардан серверлік бағдарламалауға ауысты. Атап айтқанда, қолданба серверлері бақылау мүмкіндіктерін пайдалана алады виртуалды машинаЖүктемені автоматты түрде теңестіруге, дерекқор сілтемесін біріктіруге, нысанды синхрондауға, қауіпсіз өшіруге және қайта жүктеуге және масштабталатын серверлік қолданбаларға қажет басқа процестерге арналған Java. Осылайша, қосымшаларды жасайтын бағдарламашылар бұл күрделі механизмдерді өздері әзірлемей, сатып ала алды. Бұл программалаушылардың өнімділігін арттырды – олар серверлердің жұмысына қатысты бөлшектерге алаңдамай, өз бағдарламаларының логикасына назар аударды.

Java - Sun микрожүйелерінің тілі. Алғашында бағдарламалау тілі ретінде жасалған электрондық құрылғылар, бірақ кейінірек серверлік бағдарламалық қосымшаларды жазу үшін қолданыла бастады. Java бағдарламалары кросс-платформалық болып табылады, яғни олар кез келген операциялық жүйеде жұмыс істей алады.

Java бағдарламалау негіздері

Java объектіге бағытталған тіл ретінде OOP негізгі принциптерін ұстанады:

  • мұрагерлік;
  • полиморфизм;
  • инкапсуляция.

Java ортасында, басқа OYA-лар сияқты, конструкторлары мен қасиеттері бар объект және класс орналасқан. Java бағдарламалау тілін үйренуді ресми ресурстардан емес, жаңадан бастаушыларға арналған нұсқаулықтардан бастаған дұрыс. Мұндай нұсқаулықтар мүмкіндіктерді егжей-тегжейлі сипаттайды және код мысалдарын береді. «Жаңадан бастаушыларға арналған Java бағдарламалау тілі» сияқты кітаптар аталған тілдің негізгі принциптері мен мүмкіндіктерін егжей-тегжейлі түсіндіреді.

Ерекшеліктер

Java бағдарламалау тілінің коды байт кодқа аударылады, содан кейін JVM-де орындалады. Байтекодқа түрлендіру Javac, Jikes, Espresso, GCJ тілдерінде жүзеге асырылады. Си тілін Java байт кодына аударатын компиляторлар бар. Осылайша, Си қосымшасы кез келген платформада жұмыс істей алады.

Java синтаксисі келесі белгілермен сипатталады:

  1. Сынып атаулары бас әріптен басталуы керек. Егер атау бірнеше сөзден тұрса, екіншісі бас әріппен басталуы керек.
  2. Егер әдісті құру үшін бірнеше сөз қолданылса, олардың екіншісі бас әріптен басталуы керек.
  3. Өңдеу main() әдісінен басталады – ол әрбір бағдарламаның бөлігі болып табылады.

Түрлері

Java программалау тілінде 8 қарабайыр тип бар. Олар төменде берілген.

  • Логикалық – ақиқат және жалған екі мәнді ғана қабылдайтын логикалық тип.
  • Байт – 1 байтты өлшейтін ең кіші бүтін сан түрі. Ол файлдармен немесе шикі екілік деректермен жұмыс істегенде қолданылады. -128-ден 127-ге дейінгі диапазон бар.
  • Short -32768-ден 32767-ге дейінгі диапазонға ие және сандарды көрсету үшін пайдаланылады. Бұл түрдегі айнымалылардың өлшемі 2 байт.
  • Int сонымен қатар сандарды білдіреді, бірақ оның өлшемі 4 байт. Ол көбінесе бүтін деректермен жұмыс істеу үшін пайдаланылады, ал байт пен қысқа кейде int-ге көтеріледі.
  • Long үлкен бүтін сандар үшін пайдаланылады. Мүмкін мәндер -9223372036854775808 мен 9223372036854775807 аралығында.
  • Бөлшек мәндерді белгілеу үшін float және double қолданылады. Олардың айырмашылығы санның бөлшек бөлігінде жоғары дәлдік талап етілмейтін жағдайда флоат ыңғайлы.
  • Double "." бөлгішінен кейінгі барлық таңбаларды көрсетеді, ал float тек біріншілерін көрсетеді.
  • Жол – жолдарды анықтау үшін қолданылатын ең жиі қолданылатын қарабайыр тип.

Кластар мен объектілер

Жаңадан бастаушыларға арналған Java бағдарламалау тілін үйренуде сыныптар мен нысандар маңызды рөл атқарады.

Класс нысан үшін үлгіні анықтайды, оның міндетті түрде атрибуттары мен әдістері болады; Оны жасау үшін Class кілт сөзін пайдаланыңыз. Егер ол бөлек файлда құрылса, онда сынып пен файлдың аты бірдей болуы керек. Атаудың өзі екі бөліктен тұрады: атау және кеңейтім.Java.

Java-да сіз ата-ана әдістерін мұраға алатын қосалқы класс жасай аласыз. Бұл үшін ұзарту сөзі қолданылады:

  • сыныптың_атауы суперсынып_атын кеңейтеді();

Конструктор кез келген класстың құрамдас бөлігі болып табылады, тіпті егер ол нақты көрсетілмесе де. Бұл жағдайда компилятор оны дербес жасайды:

  • public class Class( public Class())( ) public Class(String name)( ))

Конструктордың аты әдепкі бойынша класс атымен бірдей, оның бір ғана параметрі бар:

  • жалпы күшік (жол атауы)

Нысан new() операторы арқылы сыныптан жасалады:

  • p нүктесі = жаңа нүкте()

Ол класстың барлық әдістері мен қасиеттерін алады, оның көмегімен басқа объектілермен әрекеттеседі. Бір нысанды әртүрлі айнымалылар астында бірнеше рет пайдалануға болады.

    p нүктесі = жаңа нүкте()

    сынып екі ұпай (

    public static void main(String args) (

    p1 нүктесі = new Point();

    p2 нүктесі = new Point();

    Нысан айнымалылары мен объектілері мүлдем басқа нысандар. Нысан айнымалылары сілтемелер болып табылады. Олар қарабайыр емес түрдегі кез келген айнымалыны көрсете алады. C++ тілінен айырмашылығы олардың түр түрлендіруі қатаң түрде реттеледі.

    Өрістер мен әдістер

    Өрістер - бұл сыныппен немесе нысанмен байланыстырылған барлық айнымалылар. Әдепкі бойынша олар жергілікті және басқа сыныптарда қолданыла алмайды. Өрістерге қол жеткізу үшін «.» операторын пайдаланыңыз:

    • сынып атауы.айнымалы

    static кілт сөзі арқылы статикалық өрістерді анықтауға болады. Мұндай өрістер жаһандық айнымалыларды сақтаудың жалғыз жолы болып табылады. Бұл Java-да жай ғана ғаламдық айнымалылардың жоқтығына байланысты.

    Басқа пакеттерден қол жеткізу үшін айнымалыларды импорттау мүмкіндігін іске асырды:

    • статикалық класс атауын импорттау;

    Әдіс – ол жарияланған сыныптарға арналған ішкі бағдарлама. Айнымалылармен бірдей деңгейде сипатталған. Ол функция ретінде көрсетілген және кез келген түрі болуы мүмкін, соның ішінде void:

    • сынып нүктесі(int x, y;

      void init(int a, int b) (

    Жоғарыдағы мысалда Point класында x және y бүтін сандары, init() әдісі бар. Айнымалылар сияқты әдістерге «.» операторы арқылы қол жеткізіледі:

    • Point.init();

    init қасиеті ештеңені қайтармайды, сондықтан ол void түріне жатады.

    Айнымалылар

    Java бағдарламалау тілінің оқулығында айнымалылар ерекше орын алады. Барлық айнымалылардың белгілі бір түрі бар, ол мәндерді сақтау үшін қажетті орынды, мүмкін мәндер ауқымын және операциялар тізімін анықтайды. Мәндерді өңдеуден бұрын айнымалылар жарияланады.

    Бір уақытта бірнеше айнымалылар жариялануы мүмкін. Оларды тізімдеу үшін үтір қолданылады:

    • int a, b, c;

    Инициализация декларациядан кейін немесе кезінде орын алады:

    int a = 10, b = 10;

    Бірнеше түрлері бар:

    • жергілікті айнымалылар (жергілікті);
    • даналық айнымалылар
    • статикалық айнымалылар (статикалық).

    Жергілікті айнымалылар әдістерде және конструкторларда жарияланады, олар соңғысы іске қосылғанда және аяқталғаннан кейін жойылады; Олар үшін рұқсат модификаторларын көрсетуге және қолжетімділік деңгейін бақылауға тыйым салынады. Олар жарияланған блоктан тыс жерде көрінбейді. Java тілінде айнымалылардың бастапқы мәні болмайды, сондықтан оны бірінші рет пайдаланбас бұрын тағайындау қажет.

    Дана айнымалылары сынып ішінде жариялануы керек. Олар әдістер ретінде пайдаланылады, бірақ объект жасалғаннан кейін ғана қол жеткізуге болады. Нысан жойылған кезде айнымалы жойылады. Дана айнымалыларының жергілікті мәндерден айырмашылығы, әдепкі мәндері бар:

    • сандар - 0;
    • логика – жалған;
    • сілтемелер нөл.

    Статикалық айнымалылар класс айнымалылары деп аталады. Олардың аттары бас әріптен басталып, статикалық модификатор арқылы көрсетіледі. Олар сәйкесінше тұрақтылар ретінде пайдаланылады, оларға тізімнен бір спецификатор қосылады:

    • қорытынды;
    • жеке;
    • қоғамдық.

    Олар бағдарламаның басында іске қосылады және орындау тоқтағаннан кейін жойылады. Дана айнымалылары сияқты, оларда бар стандартты мәндер, олар бос айнымалыларға тағайындалады. Сандардың мәні 0, логикалық айнымалылардың мәні жалған, ал нысан сілтемелері бастапқыда нөлге тең. Статикалық айнымалылар келесідей аталады:

    • ClassName.VariableName.

    Қоқыс жинағыш

    «Жаңадан бастаушыларға арналған Java бағдарламалау тілі» оқулығында қоқыстарды автоматты түрде жинау бөлімі ең қызықты болып табылады.

    Java тілінде Си тілінен айырмашылығы бұл мүмкін емес қолмен жоюжадтан алынған объект. Осы мақсатта әдістеме енгізілді автоматты жою- қоқыс жинағыш. Null арқылы дәстүрлі жою кезінде тек нысанға сілтеме жойылады, ал нысанның өзі жойылады. Қалыпты жұмыста пайдалану ұсынылмағанымен, қоқыс жинауға мәжбүрлеу әдістері бар.

    Пайдаланылмаған объектілерді автоматты түрде жою модулі фондық режимде жұмыс істейді және бағдарлама белсенді емес кезде іске қосылады. Объектілерді жадтан тазарту үшін жадты босатқаннан кейін бағдарлама тоқтайды, үзілген әрекет қайта жалғасады;

    Модификаторлар

    Айыру әртүрлі түрлерімодификаторлар. Қол жеткізу әдісін анықтайтындардан басқа әдістердің, айнымалылардың және сыныптардың модификаторлары бар. Жеке деп жарияланған әдістер тек жарияланған сыныпта қол жетімді. Мұндай айнымалыларды басқа сыныптар мен функцияларда қолдануға болмайды. Public кез келген сыныпқа кіруге мүмкіндік береді. Басқа бумадан жалпы сыныпты алу қажет болса, алдымен оны импорттау керек.

    Қорғалған модификатордың әсері жалпыға ұқсас - ол класс өрістеріне қол жеткізуді ашады. Екі жағдайда да айнымалылар басқа сыныптарда қолданылуы мүмкін. Бірақ жалпыға ортақ модификатор барлығына қол жетімді, ал қорғалған модификатор тек мұраланған сыныптар үшін қол жетімді.

    Әдістерді құру кезінде қолданылатын модификатор статикалық болып табылады. Бұл жасалған әдіс сынып даналарынан тәуелсіз өмір сүретінін білдіреді. Қорытынды модификатор қол жеткізуді басқармайды, керісінше объект мәндерін одан әрі өңдеудің мүмкін еместігін көрсетеді. Ол көрсетілген элементті өзгертуге тыйым салады.

    Өрістерге арналған финал айнымалының бірінші мәнін өзгертуге мүмкіндік бермейді:

      public static void әдісі(String args) (

      соңғы int атауы = 1;

      int Name = 2;// қате жібереді

    Соңғы модификаторы бар айнымалылар тұрақтылар болып табылады. Олар әдетте тек бас әріптермен жазылады. CamelStyle және басқа әдістер жұмыс істемейді.

    Әдістерге арналған қорытынды мұраланған сыныптағы әдісті өзгертуге тыйым салуды көрсетеді:

      соңғы жарамсыз myMethod() (

      System.out.printIn («Сәлем әлем»);

    Сыныптар үшін қорытынды сіз сынып ұрпақтарын жасай алмайтыныңызды білдіреді:

      қорытынды қоғамдық сынып Сынып (

    Abstract – абстрактілі класстарды құруға арналған модификатор. Кез келген дерексіз класс және дерексіз әдістер басқа сыныптар мен блоктарда одан әрі кеңейтілуге ​​арналған. Модификатор transient виртуалды машинаға берілген айнымалыны өңдемеу керектігін айтады. Бұл жағдайда ол жай ғана сақталмайды. Мысалы, transient int Name = 100 сақталмайды, бірақ int b сақталады.

    Платформалар мен нұсқалар

    Java бағдарламалау тілінің бар отбасылары:

    • Стандартты басылым.
    • Enterprise Edition.
    • Micro Edition.
    • Карта.

    1. SE жеке пайдалануға арналған қолданбаларды жасау үшін кеңінен қолданылатын негізгі болып табылады.
    2. EE – кәсіпорынның бағдарламалық жасақтамасын әзірлеуге арналған спецификациялар жиынтығы. SE-ге қарағанда көбірек мүмкіндіктерді қамтиды, сондықтан ол ірі және орта кәсіпорындарда коммерциялық ауқымда қолданылады.
    3. ME - қуаты мен жады шектеулі құрылғыларға арналған, олар әдетте шағын дисплей өлшеміне ие. Мұндай құрылғылар смартфондар мен PDA, ресиверлер сандық теледидар.
    4. Карта - смарт-карталар, SIM карталары, банкоматтар сияқты өте шектеулі есептеу ресурстары бар құрылғыларға арналған. Осы мақсаттар үшін байт коды, платформа талаптары және кітапхана құрамдастары өзгертілді.

    Қолдану

    Java бағдарламалау тілінде жазылған бағдарламалар, әдетте, баяу және аяқталуы ұзағырақ болады жедел жады. Java және C тілдерінің салыстырмалы талдауы Си сәл өнімдірек екенін көрсетті. Java виртуалды машинасының көптеген өзгерістері мен оңтайландыруларынан кейін оның өнімділігі жақсарды.

    Android қолданбалары үшін белсенді қолданылады. Бағдарлама стандартты емес байт кодқа жинақталған және ART виртуалды машинасында орындалады. Android Studio компиляция үшін пайдаланылады. Google ұсынған бұл IDE Android әзірлеуге арналған ресми нұсқа болып табылады.

    Microsoft корпорациясы MSJVM Java виртуалды машинасының жеке іске асыруын әзірледі. Оның кросс-платформаның іргелі тұжырымдамасын бұзатын айырмашылықтары болды - кейбір технологиялар мен әдістерге қолдау болмады, тек Windows платформасында жұмыс істейтін стандартты емес кеңейтімдер болды. Microsoft J# тілін шығарды, оның синтаксисі және жалпы жұмысы Java тіліне өте ұқсас. Ол ресми сипаттамаға сәйкес келмеді және сайып келгенде стандартты Microsoft Visual Studio әзірлеуші ​​құралдар жинағынан жойылды.

    Java бағдарламалау тілі және ортасы

    Бағдарламалық қамтамасыз етуді әзірлеу келесі IDE-де жүзеге асырылады:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. JDeveloper.
    5. iOS үшін Java.
    6. Джини.

    JDK Java әзірлеу жинағы ретінде Oracle арқылы таратылады. Құрастырушы, стандартты кітапханалар, утилиталар және атқарушы жүйені қамтиды. Қазіргі интеграцияланған әзірлеу орталары JDK-ге сүйенеді.

    Netbeans және Eclipse IDE-де Java бағдарламалау тілінде код жазу ыңғайлы. Бұл тегін интеграцияланған әзірлеу орталары, олар барлық Java платформаларына жарамды. Python, PHP, JavaScript, C++ тілдерінде бағдарламалау үшін де қолданылады.

    Jetbrains ұсынған IntelliJ IDE екі нұсқада таратылады: тегін және коммерциялық. Көптеген бағдарламалау тілдерінде код жазуды қолдайды, одан да көп тілдерді жүзеге асыратын әзірлеушілердің үшінші тарап плагиндері бар.

    JDeveloper - Oracle ұсынған тағы бір әзірлеме. Толығымен Java тілінде жазылған, сондықтан ол барлық операциялық жүйелерде жұмыс істейді.

Кіріспе

Бұл жұмыс бүгінгі таңдағы ең перспективалы бағдарламалау тілдерінің бірі - Java тіліне арналған. «Java» деп аталатын технологияны бағдарламалық жасақтама жасау индустриясында революциялық деп атауға болады.

Сұрыптау PHP, C++ және т.б. сияқты басқа бағдарламалау тілдерінде жүзеге асырылуы мүмкін. Бұл Java тілінде әлдеқайда тиімдірек. Мәліметтер төменде талқыланады. Жаңалық сұрыптау бағдарламасының болуы берілген тілжәне бұл түсіндіруде.

Тапсырманы орындау үшін бағдарлама жазу алгоритмі ұсынылды. Бұл алгоритм кейін Java тілінде жүзеге асырылды.

Java программалау тілінің сипаттамасы

Жалпы Java мүмкіндіктері

Сұрыптау бағдарламасын жазу үшін Java тілі таңдалды. Java — 1991 жылдан бастап Sun Microsystems компаниясы әзірлеген және 1995 жылы 23 мамырда ресми түрде шығарылған объектіге бағытталған бағдарламалау тілі. Бастапқыда жаңа бағдарламалау тілі Oak (Джеймс Гослинг) деп аталды және тұрмыстық электроника үшін әзірленді, бірақ кейін Java деп өзгертілді және апплеттерді, қолданбаларды және серверлік бағдарламалық жасақтаманы жазу үшін қолданыла бастады.

Java бағдарламалау тілі басқа тілдерге ұқсамайды. Ол браузерлер арқылы WWW жүйесіндегі компьютерлерде жұмыс істеуді жеңілдету үшін жасалған. Қазіргі уақытта әрбір компьютерде браузер бар. Өз кезегінде әрбір браузер Java тілін қолдайды. Бұл бүкіл әлем бойынша сақталған құжаттарды көруге және сілтемені басу арқылы желі арқылы тасымалданатын және компьютерде іске қосылатын Java бағдарламасын белсендіруге болатындығын білдіреді.

Java тілінің негізгі артықшылықтарының бірі оның платформадан және бағдарламалар орындалатын компьютер түрінен тәуелсіздігі болып табылады. Осылайша, бірдей кодты Windows, Linux, FreeBSD, Solaris, Apple Mac және т.б. операциялық жүйелерде іске қосуға болады. Бұл бағдарламалар Интернет арқылы жүктеліп, әртүрлі платформаларда пайдаланылғанда өте маңызды болады. Java программалау тілі статикалық мәтіндермен және графикамен ғана емес, сонымен қатар әртүрлі динамикалық объектілермен де жұмыс істей алады.

Java тілінің тағы бір маңызды артықшылығы оның C++ бағдарламалау тілімен үлкен ұқсастығы болып табылады. Сондықтан C және C++ синтаксисін жақсы білетін бағдарламашылар Java тілін оңай меңгереді.

Сонымен қатар, Java толығымен объектіге бағытталған тіл болып табылады, тіпті C++-ке қарағанда. Сандар сияқты бірнеше қарабайыр типтерді қоспағанда, Java тіліндегі барлық нысандар объектілер болып табылады.

Java тілінде қатесіз бағдарламаларды жасау C++ тіліне қарағанда әлдеқайда оңай екені де маңызды.

Ең бастысы, Java тілін Sun әзірлеушілері C++ тіліндегі бағдарламаларға іргелі талдау жүргізді. Бастапқы кодтың «тар жолдары» талданды, бұл анықтау қиын қателердің пайда болуына әкеледі. Сондықтан Java тілін ең жиі кездесетін қателерді жасыратын бағдарламалар жасау мүмкіндігімен жобалау туралы шешім қабылданды.

Ол үшін келесі әрекеттер орындалды:

Әзірлеушілер жадты нақты бөлу және босату мүмкіндігін жойды.

Мысалы, Java тіліндегі жад қоқыс жинау арқылы автоматты түрде босатылады. Бағдарламашы жадты дұрыс пайдаланбаудан туындайтын қателерден сақтандырылған екен.

шынайы массивтерді енгізу және көрсеткіштерге тыйым салу.

Енді бағдарламашылар көрсеткіштерді дұрыс пайдаланбағандықтан деректерді жадтан өшіре алмайды.

тағайындау операторын теңдік салыстыру операторымен шатастыру мүмкіндігі жойылды. Әдетте, «=» белгісіне қатысты мәселе C және C++ тіліндегі логикалық қателерге әкеледі, оларды анықтау оңай емес. Әсіресе үлкен бағдарламаларда.

Бірнеше мұра толығымен алынып тасталды. Оның орнына жаңа тұжырымдама келді - интерфейс, оның идеясы Objective C тілінен алынған.

Интерфейс бағдарламашыға класс иерархияларын басқару кезінде туындайтын қиындықтарды болдырмай, бірнеше мұрадан ала алатын барлық дерлік береді.

Соңғы шығарылым 1.6 нұсқасы болып табылады, ол қауіпсіздік жүйесін жақсартты, Mozilla Rhino сценарий тілін қолдауды жақсартты, жұмыс үстелі интеграциясын жақсартты және графикалық интерфейстерді жасауда кейбір жаңа мүмкіндіктерді қосқан.

Java және Microsoft

Келесі компаниялар негізінен .NET емес, Java (J2EE) технологияларына назар аударады, бірақ олар соңғысымен де айналысады: IBM, Oracle. Атап айтқанда, Oracle ДҚБЖ оның құрамдас бөлігі ретінде JVM қамтиды, ол ДҚБЖ-ны Java тілінде, соның ішінде, мысалы, сақталатын процедураларды тікелей бағдарламалау мүмкіндігін береді.

Басты ерекшеліктер

Мысал бағдарлама

«Сәлем, әлем!» деп басып шығаратын бағдарлама:

Қоғамдық класс HelloWorld ( public static void main(String args) ( System .out .println ("Hello, World!" ); ) )

Үлгілерді пайдалану мысалы:

java.util.* импорттау; public class Үлгі ( public static void main(String args) ( // Үлгіні пайдаланып нысанды жасаңыз.Тізім жолдар = жаңа LinkedList (); strings.add("Сәлеметсіз бе"); strings.add("әлем"); strings.add("!"); үшін (String s: strings) ( System .out .print(s) ; System .out .print (" " ) ; ) ) )

Негізгі идеялар

Қарапайым типтер

Java тілінде тек 8 скаляр түрі бар: логикалық, байт, char, қысқа, int, ұзын, float, double.

Қарапайым типтердің орауыш кластары

Қарапайым түрлердің ұзындығы мен мән диапазоны стандартпен анықталады, іске асырылмайды және кестеде көрсетілген. Локализацияны жеңілдету үшін char түрі екі байттан жасалған (Java-ның идеологиялық принциптерінің бірі): стандарт әзірленіп жатқанда Юникод-16 бұрыннан бар еді, бірақ Юникод-32 емес. Нәтижесінде бір байт түрі қалмағандықтан, жаңа байт түрі қосылды. float және double түрлерінің арнайы мәндері болуы мүмкін және «сан емес» (

Түр Ұзындығы (байтпен) Ауқым немесе мәндер жиыны
логикалық белгісіз шын, жалған
байт 1 −128..127
таңба 2 0..2 16 -1, немесе 0..65535
қысқа 2 −2 15 ..2 15 -1, немесе −32768..32767
int 4 −2 31 ..2 31 -1, немесе −2147483648..2147483647
ұзақ 8 −2 63 ..2 63 -1, немесе шамамен −9,2 10 18 ..9.2 10 18
жүзу 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127, немесе шамамен −3,4 10 38 ..3,4 10 38, сонымен қатар , , NaN
қос 8 -(2-2 -52)·2 1023 ..(2-2 -52)·2 1023 , немесе шамамен -1,8·10 308 ..1,8·10 308 , сонымен қатар , , NaN

Мұндай қатаң стандарттау тілдік платформаны тәуелсіз ету үшін қажет болды, бұл Java-ға қойылатын идеологиялық талаптардың бірі және оның табысты болуының себептерінің бірі. Дегенмен, платформаның тәуелсіздігіне қатысты бір кішкентай мәселе әлі де бар. Кейбір процессорлар нәтижелерді аралық сақтау немесе есептеулердің дәлдігін жақсарту үшін 10 байт регистрлерді пайдаланады. Java арасында мүмкіндігінше үйлесімді ету үшін әртүрлі жүйелер, В бұрынғы нұсқаларесептеулердің дәлдігін арттырудың кез келген құралына тыйым салынды. Алайда бұл өнімділіктің төмендеуіне әкелді. Платформаның тәуелсіздігі үшін, әсіресе бағдарламаларды баяулату арқылы төлеуге тура келсе, дәлдіктің нашарлауын қажет ететін адамдар аз болды. Көп наразылықтан кейін бұл тыйым алынып тасталды, бірақ дәлдіктің жоғарылауына жол бермеу үшін strictfp кілт сөзі қосылды.

Математикалық операцияларға арналған түрлендірулер

Java тілінде келесі ережелер қолданылады:

  1. Бір операнд double типті болса, екіншісі де double түріне түрлендіріледі.
  2. Әйтпесе, бір операнд float типінде болса, екіншісі де float түріне түрлендіріледі.
  3. Әйтпесе, егер бір операнд long типті болса, екіншісі де long түріне түрлендіріледі.
  4. Әйтпесе, екі операнд да int түріне түрлендіріледі.

Соңғы ереже Java-ны ескі іске асырулардан және C++-тен ажыратады және кодты қауіпсіз етеді. Мәселен, мысалы, Java тілінде, кодты орындағаннан кейін

Қысқа х = 50 , у = 1000 ; int z = x*y;

z айнымалысына −15536 ​​емес, 50000 мәні тағайындалады, өйткені үмітсіз ескірген C және C++ іске асыруларындағыдай. 7-нұсқадан бастап, MS VC++ құрастырған бағдарламада, сондай-ақ көптеген басқа заманауи компиляторлар (gcc, Intel C++, Borland C++, Comeau және т.б.) мән де 50000 болады.

Нысан айнымалылары, объектілер, сілтемелер және көрсеткіштер

Java-да тек динамикалық түрде жасалған нысандар бар. Сонымен қатар, Java тіліндегі объект түрінің айнымалылары мен нысандары мүлдем басқа нысандар. Нысан түрінің айнымалылары сілтемелер болып табылады, яғни динамикалық түрде жасалған объектілерге жасырын көрсеткіштер. Бұл айнымалыларды сипаттауға арналған синтаксиспен ерекшеленеді. Сонымен, Java-да сіз жаза алмайсыз:

Double a[ 10 ] [ 20 ] ; Foo b(30) ;

Double a = new double [10] [20]; Foo b = new Foo(30 ) ;

Тағайындау, ішкі бағдарламаларға өту және салыстыру кезінде объектінің айнымалылары көрсеткіштер сияқты әрекет етеді, яғни объект мекенжайлары тағайындалады, көшіріледі және салыстырылады. Ал нысанның айнымалы мәнін пайдаланып нысанның деректер өрістеріне немесе әдістеріне қатынасу кезінде арнайы сілтемені жою операциялары қажет емес — қатынас нысанның айнымалы мәні объектінің өзі сияқты орындалады.

Нысан айнымалылары қарапайым сандық типтерден басқа кез келген түр болып табылады. Java тілінде нақты көрсеткіштер жоқ. C, C++ және басқа бағдарламалау тілдеріндегі көрсеткіштерден айырмашылығы, Java тіліндегі сілтемелер жоғары дәрежеоларды пайдаланудағы қатаң шектеулерге байланысты қауіпсіз, атап айтқанда:

  • int түріндегі нысанды немесе кез келген басқа қарабайыр типті көрсеткішке немесе сілтемеге және керісінше түрлендіру мүмкін емес.
  • Сілтемелерде ++, −−, +, − немесе кез келген басқа арифметикалық амалдарды орындауға тыйым салынады.
  • Сілтемелер арасындағы типті түрлендіру қатаң түрде реттеледі. Жиым сілтемелерін қоспағанда, мұраланған түр мен оның ұрпағы арасындағы сілтемелерді түрлендіруге ғана рұқсат етіледі және мұраланған түрден мұраланған түрге түрлендіру мағынасы болуы үшін нақты көрсетіліп, орындалу уақытында тексерілуі керек. Жиым сілтемелерін түрлендіруге олардың негізгі түрлерін түрлендіруге рұқсат етілген және өлшем қайшылықтары болмаса ғана рұқсат етіледі.
  • Java тілінде адресті (&) алу немесе (*) мекенжайындағы нысанды алу үшін оператор жоқ. Java тіліндегі жұлдызша көбейтуді білдіреді, басқа ештеңе емес. Амперсанд (&) жай ғана «биттік және» дегенді білдіреді (қос амперсанд «логикалық және» дегенді білдіреді).

Java-да осындай арнайы енгізілген шектеулердің арқасында физикалық мекенжайлар деңгейінде жадты тікелей басқару мүмкін емес (бірақ ештеңені көрсетпейтін сілтемелер бар: мұндай сілтеменің мәні нөлмен белгіленеді).

Көшірме сілтемелер және клондау

Нысан айнымалылары анықтамалық айнымалылар болғандықтан, тағайындау нысанды көшірмейді. Сонымен, егер сіз жазсаңыз

Фу фу, бар; ... bar = foo;

онда foo айнымалысының мекенжайы жолақ айнымалысына көшіріледі. Яғни, foo және bar бір жады аймағын, яғни бір объектіні көрсетеді; foo арқылы сілтеме жасалған нысанның өрістерін өзгерту әрекеті bar арқылы сілтеме жасалған нысанды өзгертеді және керісінше. Егер сізге тағы біреуін алу керек болса көшірубастапқы нысан үшін нысанның көшірмесін жасайтын әдісті (мүше функциясы, C++ терминологиясында) clone() немесе көшіру конструкторын пайдаланыңыз.

Clone() әдісі сыныптың Cloneable интерфейсін енгізуін талап етеді (төмендегі интерфейстерді қараңыз). Егер сынып Cloneable интерфейсін іске асырса, әдепкі бойынша clone() барлық өрістерді көшіреді ( шағын көшірме). Өрістерді көшірудің орнына (сонымен қатар олардың өрістерін және т.б.) клондағыңыз келсе, clone() әдісін қайта анықтауыңыз керек. Clone() әдісін анықтау және пайдалану көбінесе тривиальды емес тапсырма болып табылады.

Қоқыс жинау

Java тілінде объектіні жадтан анық жою мүмкін емес - оның орнына қоқыс жинау жүзеге асырылады. Қоқыс жинаушыға жадты босатуға «кеңес» беретін дәстүрлі трюк айнымалыға бос мәнді тағайындау болып табылады null . Дегенмен, бұл нөлге ауыстырылған нысан міндетті түрде дереу жойылады дегенді білдірмейді. Бұл әдіс жай ғана нысанға сілтемені жояды, яғни жадтағы нысаннан көрсеткішті ажыратады. Қолданылатын айнымалы мәндерден немесе нысандардан кем дегенде бір сілтеме көрсеткенде, нысан қоқыс жинаушымен жойылмайтынын ескеру қажет. Сондай-ақ қоқыс жинауға мәжбүрлеу әдістері бар, бірақ олардың орындалу уақыты бойынша шақырылуына кепілдік берілмейді және қалыпты пайдалану үшін ұсынылмайды.

Класстар мен функциялар

Java процедуралық тіл емес: кез келген функция тек сынып ішінде болуы мүмкін. Бұған «функция» немесе «мүше функциясы» ұғымы жоқ Java тілінің терминологиясы баса назар аударылады. мүше функциясы), бірақ тек әдіс. Стандартты функциялар да әдістерге айналды. Мысалы, Java-да sin() функциясы жоқ, бірақ Math сыныбының Math.sin() әдісі бар (оның ішінде sin(-дан басқа) cos(), exp(), sqrt( әдістері бар. ), abs() және басқалары).

Статикалық әдістер мен өрістер

Math сыныбының (және басқа ұқсас сыныптардың) объектісін жасау қажеттілігін болдырмау үшін sin() (және басқа ұқсас функцияларды) шақыру қажет болған сайын, тұжырымдама статикалық әдістер(ағылшын) статикалық әдіс; кейде орыс тілінде олар статикалық деп аталады). Статикалық әдісті (оның сипаттамасында static кілт сөзімен белгіленген) оның класының объектісін жасамай-ақ шақыруға болады. Сондықтан сіз жаза аласыз

Double x = Math.sin(1);

Math m = new Math(); қос x = m.sin(1);

Статикалық әдістердің шектеуі олар тек осы нысандағы статикалық өрістер мен әдістерге қол жеткізе алады.

Статикалық өрістер C++ тіліндегідей мағынаға ие: әрқайсысы тек бір көшірмеде бар.

Түпкілікті

Соңғы кілт сөз айнымалыны, әдісті немесе сыныпты жариялау кезінде әртүрлі нәрселерді білдіреді. Соңғы айнымалы (тұрақты деп аталады) сипаттау кезінде инициализацияланады және одан әрі өзгерту мүмкін емес. Ақырғы әдіс мұра арқылы қайта анықталмайды. Соңғы сыныптың мұрагерлері мүлде болмайды.

Абстрактілілік

Java тілінде соңғы немесе жеке деп нақты жарияланбаған әдістер C++ терминологиясында виртуалды болып табылады: негізгі сыныпта және ішкі сыныпта басқаша анықталған әдісті шақыру әрқашан орындау уақытын тексеруді қамтиды.

Java тіліндегі абстрактілі әдіс (абстрактілі дескриптор) негізгі емес, параметрлері мен қайтару түрі көрсетілген әдіс. Дерексіз әдіс ұрпақ кластарында анықталады. C++ тілінде дәл сол нәрсе таза виртуалды функция деп аталады. Класста дерексіз әдістерді сипаттау үшін сыныптың өзі де дерексіз ретінде сипатталуы керек. Абстрактілі сыныптың объектілерін жасау мүмкін емес.

Интерфейстер

Java тіліндегі абстракцияның ең жоғары деңгейі интерфейс болып табылады. Барлық интерфейс әдістері дерексіз: абстрактілі декларатор тіпті қажет емес. Интерфейс класс емес. Класс мұраға алады немесе кеңейту(кеңейтеді) басқа сынып немесе іске асыру(іске асырады) интерфейс. Сонымен қатар, интерфейс басқа интерфейсті иемденуі немесе кеңейтуі мүмкін.

Java тілінде класс бір кластан артық мұра ете алмайды, бірақ қалауыңызша көптеген интерфейстерді іске асыра алады.

Интерфейстерді әдістерге параметрлер ретінде беруге болады, бірақ олардың түрлерінің объектілерін құру мүмкін емес.

Маркер интерфейстері

Java-да іске асыру әдістері жоқ кейбір интерфейстер бар, бірақ JVM арнайы жолмен өңделеді. Бұл интерфейстер:

  • java.lang.Cloneable
  • java.io.Serializable
  • java.rmi.Remote

Java тіліндегі үлгілер (жалпы)

Java 5 нұсқасынан бастап тілде жалпылама бағдарламалау механизмі – C++ үлгілеріне сырттай жақын шаблондар енгізілді. Сыныптар мен әдістерді сипаттауда арнайы синтаксисті қолдана отырып, өрістердің түрлері, параметрлер және әдістердің қайтару мәндері ретінде сипаттамада пайдалануға болатын тип параметрлерін көрсетуге болады.

// Жалпы класс декларациясы GenericClass класы ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Кодта жалпы классты пайдалану GenericClass var = жаңа GenericClass (); var.add("qwerty"); Жол p = var.getFirst();

Класстардың, интерфейстердің және әдістердің жалпылама декларациясына рұқсат етіледі. Сонымен қатар, синтаксис параметр түрлерінің шектеулі мәлімдемелерін қолдайды: декларацияда пішіннің құрылымын көрсету T параметр типі A, B, C және т.б. интерфейстерді және құрылысты жүзеге асыруды талап етеді T параметр типінің C типі немесе оның ата-бабаларының бірі болуын талап етеді.

C# үлгілерінен айырмашылығы, Java үлгілеріне орындалу уақыты қолдау көрсетпейді - компилятор бұдан былай ешқандай үлгілерді қамтымайтын байт кодты жасайды. Java тіліндегі шаблондарды іске асыру C++ тіліндегі ұқсас механизмдерді жүзеге асырудан түбегейлі ерекшеленеді: компилятор үлгінің әрбір пайдалану жағдайы үшін үлгі класының немесе әдісінің жеке нұсқасын жасамайды, тек қажетті тексерулерді қамтитын бір байт-кодты іске асыруды жасайды. және түрлендірулер. Бұл Java бағдарламаларында үлгілерді пайдалануға бірқатар шектеулерге әкеледі.

Сынып мүшелігін тексеру

Java тілінде нысанның қай классқа жататынын анық тексеруге болады. Foo instanceof foo өрнегі, егер foo нысаны Foo класына немесе оның мұрагеріне жататын болса немесе Foo интерфейсін жүзеге асырса (немесе, жалпы алғанда, Foo мұрагерін иеленетін интерфейсті жүзеге асыратын сыныпты мұраға алса) дұрыс болады.

Әрі қарай, барлық нысандар үшін анықталған getClass() функциясы Class түріндегі нысанды қайтарады. Бұл объектілерді салыстыруға болады. Мәселен, мысалы, foo және bar нысандары дәл бір сыныпқа жататын болса, foo.getClass()==bar.getClass() ақиқат болады (бірақ бұл олардың екі бірдей нысан екенін білдірмейді).

Сонымен қатар, кез келген типтегі Class түріндегі нысанды келесідей алуға болады: Integer.class, Object.class.

Дегенмен, сыныптарды тікелей салыстыру әрқашан сынып мүшелігін тексерудің оңтайлы құралы бола бермейді. Оның орнына жиі isAssignableFrom() функциясы қолданылады. Бұл функция Class түріндегі нысанда анықталған және параметр ретінде Class түріндегі нысанды қабылдайды. Осылайша, Foo.class.isAssignableFrom(Bar.class) шақыру, егер Foo Bar класының атасы болса, шындықты қайтарады. Барлық нысандар Object түрінің ұрпақтары болғандықтан, Object.class.isAssignableFrom() шақыру әрқашан true мәнін қайтарады. Class түріндегі нысанның аталған функцияларымен бірге isInstance() (instanceof эквивалентіне) және cast() (параметрді таңдалған класс нысанына түрлендіреді) функциялары да қолданылады.

Сынып кітапханалары

Бағдарламалық қамтамасыз етуді әзірлеу құралдары

  • JDK - Java SE және Java EE платформаларына арналған кітапханалар жинағына қосымша, оның құрамында компилятор бар. пәрмен жолы javac және пәрмен жолы режимінде де жұмыс істейтін утилиталар жиынтығы.
  • NetBeans IDE – Java ME, Java SE және Java EE – барлық Java платформаларына арналған тегін интеграцияланған әзірлеу ортасы. Java және басқа тілдерде (C++, Fortran және т.
  • Java SE және Java EE. Eclipse-те Java ME платформасын қолдау бойынша жұмыс жүргізілуде. C, C++, Fortran және т.б. алға жылжытылады)
  • IntelliJ IDEA — Java SE, Java EE және Java ME платформаларына арналған коммерциялық әзірлеу ортасы.

Ескертпелер

  1. java (ағылшынша). Merriam-Webster онлайн сөздігі. Мерриам-Вебстер. - «Java» сөзінің ағылшынша айтылу нормасы. 2009 жылдың 5 маусымында алынды.
  2. Роберт Толксдорф. Java Virtual Machine JVM (ағылшын тілі) үшін бағдарламалау тілдері. is-research GmbH. - JVM үшін балама тілдер мен тіл кеңейтімдерінің онлайн каталогы. 2009 жылдың 5 маусымында алынды.
  3. Microsoft Java виртуалды машинасын қолдау. Microsoft (12.09.2003). - Microsoft корпорациясының MSJVM қолдау бағдарламасы туралы ресми мәлімдемесі. 2009 жылдың 5 маусымында алынды.
  4. Тодд Хофф Amazon Architecture (ағылшын) (2007-09-18). - Java технологияларын қолдану арқылы Amazon архитектурасын талқылау. 2009 жылдың 6 маусымында алынды.
  5. Amazon Elastic Compute Cloud (Amazon EC2) (ағылшынша). Amazon Web Services LLC. - веб-қызмет ретінде Amazon EC2 технологиясы мен мүмкіндіктерінің сипаттамасы. 2009 жылдың 6 маусымында алынды.
  6. Тодд Хофф eBay Architecture (ағылшын тілі) (27.05.2008). - Java платформасында eBay архитектурасын талқылау. 2009 жылдың 6 маусымында алынды.
  7. Рэнди Шоуп, Дэн Притчетт eBay архитектурасы (ағылшынша) (PDF). SD форумы 2006(2006-11-29). - eBay архитектурасының даму тарихы туралы презентация. 2009 жылдың 6 маусымында алынды.
  8. Аллен СтернЯндекс директоры Илья Сегаловичпен эксклюзивті сұхбат (ағылшын тілі). CenterNetworks (14.01.2008). - Яндекстің техникалық директоры Илья Сегаловичпен сұхбат. 2009 жылдың 6 маусымында алынды.
  9. Анатолий Орлов Yandex.Search архитектурасы (орысша) (PowerPoint). Екатеринбургтегі ЮГ отырысының материалдары(24.05.2008). 2009 жылдың 6 маусымында алынды.
  10. Брайан Гуан LinkedIn блогы. Блог мұрағаты. LinkedIn-дегі Grails. (ағылшынша). LinkedIn.com (11.06.2008). - Grails Java технологиясы негізінде LinkedIn жүйесінің құрылу тарихы. 2009 жылдың 5 маусымында алынды.
  11. OracleJVM және Java сақталған процедуралары. Oracle Inc.. - Oracle ДҚБЖ серверінің бөлігі ретінде Java технологияларына арналған Oracle порталының бөлімі. 2009 жылдың 5 маусымында алынды.
  12. Object.clone() әдісіне арналған құжаттамаға сілтеме (ағылшынша)

Әдебиет

  • Монахов Вадим Java бағдарламалау тілі және NetBeans ортасы, 2-ші басылым. - Санкт-Петербург: «БХВ-Петербург», 2009. - Б. 720. - ISBN 978-5-9775-0424-9
  • Джошуа Блох. Java. Тиімді бағдарламалау = тиімді Java. - М.: «Лори», 2002. - 224-б. - ISBN 5-85582-169-2
  • Java 2. Кәсіпқойлар кітапханасы, 1-том. Негіздер = Core Java™ 2, I том--Негіздер. - 7-ші басылым. - М.: «Уильямс», 2007. - 896-б. - ISBN 0-13-148202-5
  • Кей С. Хорстман, Гари Корнелл. Java 2. Кәсіпқойлар кітапханасы, 2-том. Бағдарламалау күрделілігі = Core Java™ 2, II том – Кеңейтілген мүмкіндіктер. - 7-ші басылым. - М.: «Уильямс», 2007. - 1168-б. - ISBN 0-13-111826-9
  • Брюс Эккел. Java философиясы = Java тілінде ойлау. - 3-бас. - Санкт-Петербург: «Петр», 2003. - Б. 976. - ISBN 5-88782-105-1
  • Герберт Шилдт, Джеймс Холмс. Java бағдарламалау өнері = Java өнері. - М.: «Диалектика», 2005. - 336-б. - ISBN 0-07-222971-3
  • Лубос Бруга. Java қысқаша: практикалық экспресс курс = Luboš Brůha. Java Hotová řešení.. - М.: Ғылым және технология, 2006. - Б. 369. - ISBN 5-94387-282-5

Java — SunMicrosystems әзірлеген бағдарламалау тілі. Java қолданбалары әдетте пайдаланушы байт кодына құрастырылады, сондықтан олар компьютер архитектурасына қарамастан кез келген Java виртуалды машинасында (JVM) жұмыс істей алады. Ресми шығу күні: 1995 жылдың 23 мамыры. Бүгінгі таңда Java технологиясы статикалық веб-беттерді интерактивті, динамикалық құжаттарға айналдыруға және бөлінген, платформаға тәуелсіз қосымшаларды жасауға арналған құралдарды ұсынады.

Java бағдарламалары байт кодқа аударылады, ол Java Virtual Machine (JVM) арқылы орындалады, бұл байт кодты өңдейтін және аудармашы ретінде нұсқауларды аппараттық құралға жіберетін бағдарлама.

Бағдарламаларды орындаудың бұл әдісінің артықшылығы - байт кодтың толық тәуелсіздігі операциялық жүйежәне сәйкес виртуалды машинасы бар кез келген құрылғыда Java қолданбаларын іске қосуға мүмкіндік беретін аппараттық құрал. Басқа маңызды қасиеті Java технологиясы бағдарламаның орындалуы толығымен виртуалды машинамен басқарылатындықтан икемді қауіпсіздік жүйесі болып табылады. Бағдарламаның белгіленген рұқсаттарынан асатын кез келген әрекет (мысалы, деректерге рұқсатсыз кіру немесе басқа компьютерге қосылу әрекеті) дереу үзіліс тудырады.

Көбінесе виртуалды машина концепциясының кемшіліктеріне виртуалды машинамен байт кодты орындау Java тілінде жүзеге асырылатын алгоритмдер бағдарламасының өнімділігін төмендетуі мүмкін. Жақында Java бағдарламаларының орындалу жылдамдығын біршама арттыратын бірқатар жақсартулар жасалды:

Машиналық кодта класс нұсқаларын сақтау мүмкіндігімен бағдарлама жұмыс істеп тұрған кезде байт кодты тікелей машиналық кодқа аудару технологиясын қолдану (JIT технологиясы),

Стандартты кітапханаларда платформаға бағытталған кодты (негізгі код) кеңінен қолдану,

Жеделдетілген байт-кодты өңдеуді қамтамасыз ететін жабдық (мысалы, кейбір ARM процессорлары қолдайтын Jazelle технологиясы).



Негізгі тіл ерекшеліктері:

Жадты автоматты басқару;

Ерекше жағдайларды өңдеудің кеңейтілген мүмкіндіктері;

Енгізу/шығару сүзу құралдарының бай жиынтығы;

Массив, тізім, стек және т.б. сияқты стандартты жинақтардың жиынтығы;

Желілік қосымшаларды құрудың қарапайым құралдарының болуы (соның ішінде RMI хаттамасын пайдалану);

HTTP сұрауларын жасауға және жауаптарды өңдеуге мүмкіндік беретін сыныптардың болуы;

Көп ағынды қосымшаларды құруға арналған кіріктірілген тіл құралдары;

Деректер базасына бірыңғай қолжетімділік:

Жеке SQL сұраныстары деңгейінде – JDBC, SQLJ негізінде;

Мәліметтер базасында сақтау мүмкіндігі бар объектілер тұжырымдамасы деңгейінде – Java Data Objects және Java Persistence API негізінде;

Үлгіні қолдау (1.5 нұсқасынан бастап);

Программалардың параллель орындалуы.

1.4.3 C# бағдарламалау тілі

2000 жылдың маусымында Microsoft корпорациясының тереңдігінде дүниеге келген жаңа бағдарламалау тілі туралы белгілі болды. Ол бөлігі болды жаңа технология.NET деп аталатын Microsoft («Dot Net» оқыңыз). Бұл технология әртүрлі бағдарламалау тілдерінде жазылған бағдарламалардың (Common Language Runtime, CLR) бірыңғай орындау ортасын қамтамасыз етеді. Осы тілдердің бірі, осы ортадағы негізгісі - C# (C#, «C sharp» оқыңыз). Тілдің атауы, әрине, оның C++ тілімен қарым-қатынасын атап өткісі келді, өйткені # - қиылысатын екі плюс. Бірақ ең жаңа тіл Java тіліне ұқсас. Оның пайда болу себептерінің бірі Microsoft корпорациясының Sun шақыруына жауап беруге ұмтылуы екені даусыз.

C# авторларының аты ресми түрде аталмағанымен, тіл анықтамалығының алдын ала басылымдарының бірінің титулдық бетінде 1996 жылы Microsoft корпорациясына көшкен Турбо Паскаль мен Delphi құрушы Андерс Хейлсберг пен Скотт Вилтамуттың тізімі берілген.

Бағдарламаны орындаудың біртұтас ортасы Java виртуалды машинасының байт кодымен дерлік бірдей рөл атқаратын IL (Intermediate Language) аралық тілін пайдалануға негізделген. Әртүрлі тілдердегі .NET технологиясында қолданылатын компиляторлар бағдарламаларды IL кодына аударады. Java байт коды сияқты, IL коды гипотетикалық стек негізіндегі компьютердегі нұсқауларды білдіреді. Бірақ IL дизайны мен пайдалануында да айырмашылық бар.

Біріншіден, JVM-ден айырмашылығы, IL бір бағдарламалау тіліне байланысты емес. Microsoft.NET-тің шығарылым алдындағы нұсқалары C++, C# және Visual Basic үшін компиляторларды қамтиды. Тәуелсіз әзірлеушілер сол тілдерден IL кодына компиляторлар жасау арқылы басқа тілдерді қоса алады.

Екіншіден, IL бағдарламаны интерпретациялауға емес, кейіннен машиналық кодқа компиляциялауға арналған. Бұл бағдарламаның айтарлықтай жоғары өнімділігіне қол жеткізуге мүмкіндік береді. IL кодын қамтитын файлдар оңтайландырушы компилятордың жұмыс істеуі үшін жеткілікті ақпаратты қамтиды.

«C# - бұл қарапайым, заманауи, объектіге бағытталған тіл қауіпсіз жүйе C және C++ тілінен алынған типтер. C# C және C++ тілдерін білетін бағдарламашылар үшін ыңғайлы және түсінікті болады. C# Visual Basic өнімділігін C++ қуатымен біріктіреді." Бұл сөздер C# тілінің сипаттамасын бастайды.

қарастырайық техникалық ерекшеліктерітіл:

Компиляция бірлігі файл (C, C++, Java тілдеріндегідей). Файлда бір немесе бірнеше типтердің сипаттамасы болуы мүмкін: сыныптар (сынып), интерфейстер (интерфейс), құрылымдар (құрылым), тізімдер (енум), аттар кеңістігі бойынша таралуын көрсететін (немесе онсыз) делегат түрлері (делегат);

Атау кеңістігі бағдарлама объектілерінің көрінуін реттейді (С++ тіліндегідей). Атау кеңістігі кірістірілуі мүмкін. Бағдарлама объектілерін осы объект жататын аттар кеңістігін нақты көрсетпей пайдалануға рұқсат етіледі. Пайдалану директивасында (Турбо Паскальдағы сияқты) осы аттар кеңістігін пайдалану туралы жалпы ескерту жеткілікті. Бүркеншік аттар қолдану директивасында аттар кеңістігі атаулары үшін берілген (Оберон тіліндегідей);

Элементар деректер түрлері: 8 биттік (сбайт, байт), 16 биттік (қысқа, ushort), 32 биттік (int, uint) және 64 биттік (ұзын, ulong) таңбалы және таңбасыз бүтін сандар, float ) және қос дәлдік, Юникод таңбалары(char), логикалық тип (bool, бүтін сандармен үйлесімді емес), 28 маңызды цифрдың (ондық) дәлдігін қамтамасыз ететін ондық түрі;

Құрылымдық типтер: сыныптар мен интерфейстер (Java-дағы сияқты), бір өлшемді және көп өлшемді (Java-дан айырмашылығы) массивтер, жолдар, құрылымдар (сыныптармен дерлік бірдей, бірақ үйіндіде және мұрагерліксіз бөлінбеген), бүтін сандармен үйлеспейтін санаулар ( Паскаль тіліндегідей);

Делегат түрлері немесе жай ғана «делегаттар» (Modula-2 және Oberon бағдарламаларындағы процедуралық түрлерге ұқсас, C және C++ тілдеріндегі функция көрсеткіштері);

Түрлер анықтамалық типтерге (сыныптар, интерфейстер, массивтер, делегаттар) және мән типтеріне (элементар типтер, тізімдер, құрылымдар) бөлінеді. Анықтамалық типтердің объектілері динамикалық жадта (үймеде) орналасады, ал сілтеме типтерінің айнымалылары шын мәнінде осы объектілерге көрсеткіш болып табылады. Мән түрлерімен айнымалылар көрсеткіш емес, мәндердің өздері. Жасырын түр түрлендіруге олар түр қауіпсіздігін бұзбаған немесе ақпараттың жоғалуына әкелмегенде ғана рұқсат етіледі. Қарапайым типтерді қоса алғанда, барлық типтер барлық басқа типтердің негізгі класы болып табылатын объект типімен үйлесімді. Құнды типтерді объект түріне жасырын түрлендіру бар, ол boxing деп аталады және айқын кері түрлендіру – unboxing;

Автоматты қоқыс жинау (Oberon және Java сияқты);

14 басымдық деңгейі бар кең ауқымды операциялар кешені. Операцияларды қайта анықтау (ALGOL-68, Ada, C++ сияқты). Тексерілген және белгіленбеген операторлар бүтін сандармен операцияларды орындау кезінде толып кетуді басқаруды басқару үшін пайдаланылуы мүмкін;

Мәндік параметрлері, анықтамалық параметрлері (ref) және шығыс параметрлері (шығыс) бар әдістер. Ref және out сөздері параметрдің алдында әдіс сипаттамасында ғана емес, шақыру кезінде де жазылуы керек. Шығару параметрлерінің болуы анықтау тапсырмаларының орындалуын бақылауға мүмкіндік береді. Тілдің ережелеріне сәйкес, кез келген айнымалыны қолдануға әрекет жасамас бұрын оның мәні бар екеніне кепілдік беру керек;

Басқару операторлары: if, switch, while, do, for, break, continue (C, C++ және Java тілдеріндегідей). «Жинаудың» әрбір элементі арқылы өтетін foreach операторы, goto операторының бірнеше нұсқалары;

Ерекше жағдайларды өңдеу (Java тіліндегідей);

Қасиеттер – өрістер сияқты қол жеткізілетін (мән тағайындауға немесе алуға болады) класстардың (нысандардың) элементтері, бірақ жанама түрде алу және орнату процедуралары арқылы жүзеге асырылады (Object Pascal, Delphi-дің енгізу тілі сияқты). жүйе);

Индексерлер - массивтер сияқты объектілерге қол жеткізуге мүмкіндік беретін сыныптардың (нысандардың) элементтері (индексті көрсету арқылы шаршы жақшалар). Жанама түрде шақырылатын алу және орнату процедуралары арқылы жүзеге асырылады. Мысалы, жолдағы таңбаларға стандартты жол сыныбында индекстеуіш енгізілгендіктен, олар массив элементтері сияқты қол жеткізуге (оқуға) болады;

Оқиғалар процедуралық түрдегі (делегаттар) сыныптардың (өрістердің немесе сипаттардың) элементтері болып табылады, олар анықталған сыныптан тыс жерде тек += және –= амалдары қолданылады, бұл сізге оқиғаларды өңдеу әдістерін қосуға немесе жоюға мүмкіндік береді. осы сыныптың объектілері;

Көрсеткіштер мен мекенжай арифметикасын пайдаланатын қауіпті код бағдарламаның қауіпті модификатормен белгіленген бөліктерінде локализацияланған;

C және C++-тен айырмашылығы тек шартты компиляция құралдарын қамтамасыз ететін препроцессор.

Әрине, C# тілінің талқыланған кемшіліктері тілді оның болашағынан мүлде айыра алмайды. Ол көп жағдайда C++ тіліне жақсырақ. С++ тіліне жалпы қанағаттанбау, оны тану жаңа тілдің сыртқы көрінісі болып табылады, C# табысының негізгі алғышарттарының бірі болып табылады.

C# тілін Java тілімен салыстыра отырып, көптеген ұқсастықтарды көруге болады. Рас, егер Java жүйелері көп платформалы болса, онда C# іске асыру операциялық жүйе үшін ғана бар. Windows жүйелеріжәне тек біреуі. Бірақ, ауырлығына қарамастан, тілдің басқа жүйелер үшін жүзеге асырылатынын күтуге болады. Сонымен қатар, бағдарламаны орындаудың бірыңғай ортасы бар Microsoft .NET платформасының өзі балама архитектураға, ең алдымен UNIX жүйелеріне дейін кеңейтілуі мүмкін.

C# тілі Java-ға қарағанда шынайырақ болып көрінеді. Java-дан айырмашылығы, ол өзін-өзі қамтамасыз етеді. Яғни C# тілінде кез келген бағдарламаны басқа тілдерге жүгінбей жазуға болады. Бұл жабдыққа тікелей қол жеткізуді қамтамасыз ететін «қауіпті» код блоктарының болуына байланысты мүмкін. Java тілінде төмен деңгейлі мүмкіндіктерге қол жеткізу үшін басқа тілдерде бағдарламаланатын жергілікті әдістерді пайдалану керек.

Және, әрине, C# болашағы, ең алдымен, Microsoft корпорациясының оны жылжыту үшін жасайтын күш-жігерімен байланысты.