Java технологя. Основн риси та перспективи застосування. Походження Java. Мова програмування Java зародилася в 1991р. в лабораторях компан Sun Microsystems inc. Як не дивно, поштовхом для створення Java стала зовсм не Internet. Головним мотивом була потреба в мов програмування, яка не залежала б вд платформи тобто вд архтектури яку можна було б використовувати для створення програмного забезпечення,
яке вбудовуться в рзномантн побутов електронн прилади, так як мобльн засоби зв язку, пристро дистанцйного управлння тощо. Розробка першо робочо верс зайняла 18 мсяцв вона мала назву Oak, але 1995 р. проект був перйменований на Java. Перод становлення Java спвпав за часом з розквтом мжнародно нформацйно служби World Wide Web. Ця обставина вдграла виршальну роль в иайбутньому
Java, оскльки Web теж вимагала переносимих програм. Як наслдок, були змщен акценти в розробц Sun з побутово електронки на програмування для Internet. Безпечнсть. World Wide Web висунула Java на переднй край програмування, Java, в свою чергу, сильно вплинула навть змнила обличчя Internet, розширивши спектр об ктв, як можуть розповсюджуватись у кберпростор.
Програми ново форми - аплети - завантажуються з вддаленого сервера можуть запускатися динамчно, тобто без участ користувача. До появи Java такий пдхд був неприпустимий з мркувань безпеки та переносимост. В архтектур аплетв зроблено ряд штучних обмежень, як роблять х цлком безпечними. Перш за все, Java нтерпретованою мовою простр ресурсв Java-програми обмежений так званою вртуальною Java-машиною
VJM, яка може конторолювати поведнку програми захищати систему вд побчних ефектв, як можуть виникати з вини аплета. Крм того, в мов Java додатков обмеження, як не дозволять аплету стати троянським конем. Зокрема, Java-аплет не може отримати доступ до локального жорсткого диску. При такй спроб генеруться виключна ситуаця. Ефективнсть. Оскльки аплети Java нтерпретуються, а не комплюються, то х виконання на рзних платформах значно полегшуться.
В цьому випадку достатньо створити для кожно платформи виконуючу Java-систему. Якщо сну така система для дано операцйно системи, то будь-яка Java-програма може виконуватись в даному середовищ без додатково компляц на цй платформ. Проте Java не нтерпретованою мовою в чистому розумнн. Програма на Java комплються. Результатом роботи комплятора
Java байткод bytecode. Байткод - це оптимзований набр команд, призначений для виконання уявним пристром - вртуальною Java-машиною. В такий спосб витрати на нтерпретацю зводяться до мнмуму, оскльки байкод вже оптимзованим, досягаться досить висока продуктивнсть Java-програм. Наведен вище особливост дають пдставу розглядати Java не як ще одну мову програмування, а як окрему нформацйну технологю.
Таким чином, нтерпретаця - це найлегший шлях до перенесення програм, реалзований в Java технолог. Незважаючи на те, що мова Java була розроблена в розрахунку на нтерпретацю, технчно нема нчого такого, що б перешкоджало компляц байткоду в виконуваний код. До байткоду, який пересилаться по мереж, застосовуться динамчна компляця, але це няк не вплива на переносимсть та безпеку, оскльки роботу програми все ще контролю виконуюча система.
Такий пдхд застосовано в багатьох виконуючих системах Java, що забезпечу продуктивнсть на рвн оптимзованого коду С. Мова Java одню з наймолодших в смейств мов програмуваня була розроблена з розрахунку на те, щоб професйний програмст мг легко опанувати та ефективно використовувати. За основу Java взятий синтаксис С - безсумнвно одн з найбльш популярних мов програмування сучасност.
Проте, Java - це цлком самостйна мова програмування, при створенн не йшлося про будь-яку сумснсть з С. Тому деяк механзми реалзован в Java накше, а деяк зовсм вдсутн. деологчно ж Java побудована дещо накше нж С. Розробники Java грунтувалися на досвд розробки програм на С прагнули позбутися можливостей, як зарекомендували себе непевними. Так, в Java вдсутня перегрузка операторв а також автоматичне приведення несумсних типв - конструкц,
як при неуважному використанн джерелом важких для виявлення помилок. Взагал, нтерфейси Java бльш прост та прозор для розумння. Написати на Java програму з графчним нтерфейсом значно легше. Звичайно, простота нтерфейсв компенсуться меншою гнучкстю, бблотека Java не така багата, як стандартн бблотеки СС. Але згадаймо, що
Java задуманий для використання на рзних платформах тому реалзу в соб найбльш стандартн можливост задля легшо адаптац пд конкретне середовище. Об ктно-орнтована спрямовансть. Вд С Java успадкувала потужний механзм об ктно-орнтованого програмування. Оскльки Java розроблювався на пустому мсц, тобто не було потреби забезпечувати сумснсть з попереднми версями, розробники мали повну свободу мислення. В результат був сформований ясний прагматичний пдхд
до об ктв. Вльно переймаючи де, як реалзовувалися протягом останнх десятирчь, мов Java вдалося знайти рвновагу мж парадигмою все об ктом прагматичним пдходом. Об ктна модель Java проста легко розширються, в той час як прос типи, як цл, збергаються як дан, що не об ктами, що дозволя значно пдвищити швидксть при х обробц. Стйксть до помилок. Багатоплатформенсть середовища
Web висува надзвичайно висок вимоги до надйност програм. Як наслдок, при розробц Java приортет був вдданий можливост створення стйких до помилок програм. Java звльня програмста вд хвилювань з приводу багатьох поширених причин, як викликають помилки програмування. Як вже згадувалося, Java строго типованою мовою програмування. Ще виконуюча система Java бере на себе прибирання смття, тобто автоматично звльня пам ять, яка була
розподлена динамчно. Звичайно, це дещо знижу ефективнсть коду, але запобга типових помилок, коли програмст забува звльнити видлену пам ять, або, навпаки, звльня пам ять, яка ще використовуться. Java пдтриму об ктно-орнтовану обробку виключних ситуацй подбно до С. Але на вдмну вд С в Java обробка виключних ситуацй обов язкувою. Тобто неможливо скомплювати програму, яка вдкрива файл, не обробивши можлив помилки типу файл не знайдено,
як виникають при цьому. Добре написана Java-програма може сама обробляти вс помилки часу виконання. Пдтримка багатопоточност. Java розробляялася з орнтацю на вимоги до створення нтерактивних програм, як працюють з мережею. З цю метою Java пдтриму багатопоточне програмування, яке дозволя легко розробляти програми, що викинують багато процесв одночасно. Виконання Java-програми засновано на елгантному, але в той самий час високоорганзованому ршенн багатопроцесово
синхронзац, яке дозволя вам створювати високоефективн нтерактивн системи. Незалежнсть вд архтектури. Основним питанням для розробникв Java стало питання довготривалост та переносимост. Одна з головних проблем, з якою зустрлися програмсти, полягала в вдсутност гарантй того, що написана сьогодн програма завтра працюватиме з тим же успхом, причому на тй самй машин.
Оновлення операцйно системи, модернзаця процесора та змна об му оперативно пам ят можуть призвести до збою програми. Рощзробники Java, прагнули змнити цю ситуацю прийняли деклька важких ршень вдносно мови Java та процесу виконання Java-програми. х мета полягала в тому, щоб одного разу написане працювало всюди, в любий час завжди. Внаслдок цього Java системою, яка легко розширються за рахунок створення нових стандартних класв та бблотек. Переваги нтерпретованост в поднанн з високою продуктивнстю.
Як вже згадувалось, Java дозвля створювати незалежн вд платформи програми шляхом компляц в промжне представлення, яке називаться байткодом. Багато попереднх спроб зпроб знати розв язок проблеми незалежност вд платформи були зроблен за рахунок продуктивност. нтерпретуюч системи, подбн до BASIC, Perl, страждають на майже неподоланний дефцит продуктивност. Це було враховано при створенн Java Незважаючи на те, що
Java нтерпретованою мовою, генераця байткодв була ретельно оптимзована в такий спосб, щоб одержуваний байткод можна було легко перекладати в машинний код, який працю з дуже високою продуктивнстю. Виконуюч системи такого роду не втрачають жодних переваг переносимого коду. Розподленсть. Мова Java призначена для створення програм, як працюють в розподленому середовищ Internet на баз протоколв TCPIP. Насправд доступ до ресурсв за допомогою
URL вдрзняться вд доступу к файлу. Крм того в Java наявний засб передач повдомлень в межах внутршнього адресного простору. Це дозволя забеспечити вддалене виконання процедур. Ц нтерфкйси включен у пакет RMI remote metod invocation. Цей засб привносить високий рвень абстракц в програмування дл я середовища клнтсервер. Java-програми несуть у соб значний обсяг нформац про типи часу виконання run-time type information,
яка використовуться для дозволу доступу до об ктв пд час роботи програми. Це дозволя забезпечити безпечну та оптимальну динамчну компоновку. В такий спосб досягаться захищенсть середовища виконання аплетв. Доступнсть нструментарю та ефективнсть розробок. Зазначена вище простота програмування на Java причиною того, що розробки на Java коштуватимуть дешевше аналогчних на бльш потужнх мовах програмування.
Цьому ж сприя переносимсть програм на Java, оскльки лквдуються витрати пов язан з адаптацю програми на конкретнй платформ. До того ж нтегрован програми-оболонки для розробки Java програм коштують набагато дешевше 70-100 нж аналогчн продукти C, Delphi 1000. А набр нструментарю для пакетно компляц Java програм JDK Java Development Kit взагал freeware.
Тому платформу Java можна рекомендувати як деальну для створення некомерцйних програмних продуктв, зокрема для галуз освти. Перспективи застосування. Програми на Java можуть знайти рзне застосування в навчальному процес нтерактивн навчаюч програми HTML в поднанн з Java, програми-тести особливо длов гри. Додатков переваги можна отримати, якщо пистати ц програми у вигляд аплетв, як нцалзуються з
Web сервера внутршньо мереж Intranet. В такий спосб можна уникнути нсталяц програми на багатьох комп ютерах - користувач просто запуска Web-броузер загружа потрбну сторнку. Для тестових програм, написаних на Java з викориситанням архтектури клнтсервер можна пдвищити ступнь конфденцйност. База даних тестових запитань знаходиться на сервер в каталоз з обмеженим доступом. Коли користувач загружа аплет, вн автоматично пдключаться до програми-сервера, яка виконуться на сервер
може видавати запитання з бази даних у вдповдь на запит користувача. В такий спосб унеможливлються викрадення бази даних, за умови вдсутност фзичного доступу до серверу у користувачв. Окреме питання - навчальн длов гри. Пд такою грою розумтимем гру, за участю клькох користувачв, в якй маться на уваз динамчний обмн нформацю мж ними. Система безпеки Java наклада обмеження, внаслдок якого аплет може встановлювати з днання лише
з хостом, з якого вн був загружений н з яким бльше. Але це обмеження легко обходиться на сервер виконуться програма-сервер, з якою з днуються ус клнти через яку здйснються обмн нформацю. Таким чином така програма повинна мати архтектуру клнтсервер. В якост приклада наведу спрощену chat-програму. В нй реалзован базов засоби для створення длово гри. Серверна частина програми взята з книги Нотон П. Шилдт
Г. Полный справочник по Java-Киев, Диалектика, 1997 практично унверсальною для програм такого класу. Можливе легке доопрацювання ц програми в бк розширення клькост протокольних команд. Клнтська частина була написана мною. Програма працю наступним чином користувач запуска аплет з сервера, вводить свй дентифкатор бачить перелк дентифкаторв користувачв, як пд днан до сервера. Псля чого користувач ма змогу обмнюватись повдомленнями з ншими.
Користувач одержу повдомлення в раз пд днання або вд днання користувачв. Програма складаться з 4 класв Server, ClientConnection, Client та ServerConnection. Перш 2 класи вдносяться до серверно частини, друг 2 - до клнтсько. Клас Server import java.net. import java.io. import java.util. public class Server implements Runnable private int port 6564 private
Hashtable idcon new Hashtable private int id 0 static final String CRLF rn synchronized void addConnectionSocket s ClientConnection con new ClientConnectionthis, s, id id synchronized void setString theid, ClientConnection con idcon.removetheid con.setBusyfalse Enumeration e idcon.keys while e.hasMoreElements String id
Stringe.nextElement ClientConnection other ClientConnection idcon.getid if other.isBusy con.writeadd other CRLF idcon.puttheid, con broadcasttheid, add con synchronized void sendtoString dest, String body ClientConnection con ClientConnectionidcon.getdest if con null con.writebody CRLF synchronized void broadcastString exclude, String body Enumeration e idcon.keys while e.hasMoreElements String id
Stringe.nextElement if exclude.equalsid ClientConnection con ClientConnection idcon.getid con.writebody CRLF synchronized void deleteString theid broadcasttheid, delete theid synchronized void killClientConnection c if idcon.removec.getId c deletec.getId public void run try ServerSocket acceptSocket new ServerSocketport System.out.printlnServer listening on port port while true
Socket s acceptSocket.accept addConnections catch IOException e System.out.printlnaccept loop IOException e public static void mainString args new Threadnew Server.start try Thread.currentThread.join catch InterruptedException e Цей невеликий клас реалзу програму-сервер. Точка вхолу програми - функця main. В програм створються головний потк, в якому створються об кт стандартного
класу ServerSocket. Цей об кт приднуться до певного порта в цикл здйснються переврка на пдключення клнта до порта. В раз такого пдключення створються об кт типу ClientConnection, в якому реалзований потк по опитуванню сокета, до якого пдключений клнт, та обробка протокольних команд. Клас Server унверсальним нчого не зна про повдомлення, якими обмнюються гравц клнти. В ньому реалзоване лише приднаннявд днання клнтв, надсилання строки певному клнту та функця broadcast
яка, як зрозумло з назви, надсила повдомлення усм зарестрованим клнтам. Клас ClientConnection import java.net. import java.io. import java.util. class ClientConnection implements Runnable private Socket sock private DataInputStream in private OutputStream out private String host private Server server private static final int bufsize 8192 private byte buffer new bytebufsize
private static final String CRLF rn private String name null private String id private boolean busy false public ClientConnectionServer srv, Socket s, int i try server srv sock s in new DataInputStreams.getInputStream out s.getOutputStream host s.getInetAddress.getHostName id i tell the new one who it is writeid id CRLF new Threadthis.start catch IOException e System.out.printlnfailed
ClientConnection e public String toString return id host name public String getHost return host public String getId return id public boolean isBusy return busy public void setBusyboolean b busy b public void close server.killthis try sock.close closes in and out too. catch IOException e public void writeString s byte buf new bytes.length s.getBytes0, buf.length, buf, 0 try out.writebuf, 0, buf.length catch IOException e close private
String readline try return in.readLine catch IOException e return null static private final int NAME 1 static private final int QUIT 2 static private final int TO 3 static private final int DELETE 4 static private Hashtable keys new Hashtable static private String keystrings , name, quit, to, delete static for int i 0 i keystrings.length i keys.putkeystringsi, new
Integeri private int lookupString s Integer i Integer keys.gets return i null -1 i.intValue public void run String s StringTokenizer st out while s readline null st new StringTokenizers String keyword st.nextToken switch lookupkeyword default System.out.printlnbogus keyword keyword r break case NAME name st.nextToken st.hasMoreTokens st.nextTokenCRLF
System.out.println new Date this r server.setid, this break case QUIT break out case TO String dest st.nextToken String body st.nextTokenCRLF server.sendtodest, body break case DELETE busy true server.deleteid break close Клас ClientConnection реалзу обмн нформацю з конкретним клнтом. В ньому збергаться об кт класу Socket, до якого приднаний цей клнт, та створються потк, в якому здйснються
перодична спроба читати з сокета. Якщо ця спроба завершуться успхом, тобто надйшло повдомлення вд клнта, це повдомлення аналзуться здйснються вдповдна реакця. Для здснення ц реакц викликаються методи класу Server, об кт якого передаться класу ClientConnection в якост параметра конструктора. Крм того в цьому клас метод, який здйсню безпосередн надсилання нформац до клнта. Коли серверу потрбно надслати нформацю конкретному клнтов, вн виклика цей
метод. клас Client import java.util. import java.io. import java.net. import java.awt. import java.applet. public class Client extends Applet private ServerConnection server private String serverName private boolean single false private boolean seenpass false private boolean nameset false private String name private String othersname private Panel topPanel private Label prompt private TextField namefield private
Button done private TextField chatfield private List idList private TextArea dialogArea public void init setLayout new BorderLayout serverName getCodeBase.getHost if serverName.equals serverName localhost prompt new LabelEnter id namefield new TextField30 topPanel new Panel topPanel.setBackgroundnew Color255, 255, 200 topPanel.addprompt topPanel.addnamefield addNorth,
topPanel idList new List10, false addWest, idList dialogArea new TextArea dialogArea.setEditable false addCenter, dialogArea public void start try showStatusConnecting to serverName server new ServerConnectionthis,serverName server.start showStatusConnected serverName catch Exception e single true public void stop if single server.quit void addString id, String hostname, String name deleteid in case it is already there. idList.addItem id name hostname
void deleteString id for int i 0 i idList.countItems i String s idList.getItemi s s.substrings.indexOf 1, s.indexOf if s.equalsid idList.delItemi break if idList.countItems 0 showStatusWait for other players to arrive. private String getNameString id for int i 0 i idList.countItems i String s idList.getItemi String id1 s.substrings.indexOf 1, s.indexOf if id1.equalsid return s.substrings.
indexOf 3, s.indexOf return null void chatString id, String s dialogArea.appendTextid s nappend showStatusid s void quitString id showStatusid just quit. deleteid private void nameEnteredString s if s.equals return System.out.printlns name s if single server.setNamename showStatusWait for other players to arrive. prompt.setTextYou say nameset true public boolean actionEvent evt,
Object arg System.out.printlna ifevt.id Event.ACTIONEVENT if evt.target namefield if nameset dialogArea.appendTextname namefield.getTextn ifsingle server.sendToStringarg, idList.getSelectedItem else nameEnteredStringarg namefield.setText return true Цей клас розширенням класу Applet, отже аплетом. В цьому клас створються об кт класу ServerConnection, через якй здйснються обмн нформацю з сервером.
Графчний нтерфейс цього класу представля 3 област поле вводу, в яке спочатку вводиться м я користувача, а потм - повдомлення, адресован ншим клнтам, список клнтв, в якому треба обирати адресата, та текстова область в якй вдбиваться текст далога. Метод action реалзу обробку под вводу тексту в область вводу. Методи add, delete, chat, nameEntered, quit реакцю на наступн под пдключення нового клнта, зникнення клнта, надходження повдомлення вд клнта, дентифкаця та вихд.
Ц методи визиваються класом ServerConnection при надходженн вдповдних повдомлень, або ж всередин аплета, якщо джерелом под сам клнт. клас ServerConnection import java.io. import java.net. import java.util. class ServerConnection implements Runnable void sendToString s, String id if id null out.printlnto id s private static final int port 6564 private static final String CRLF rn private DataInputStream in private PrintStream out private
String id, toid null private Client client public ServerConnectionScrabblet sc, String site throws IOException Socket server new Socketsite, port in new DataInputStreamserver.getInputStream out new PrintStreamserver.getOutputStream, true public ServerConnection Client c,String site throws IOException client c Socket server new Socketsite, port in new DataInputStreamserver.getInputStream out new
PrintStreamserver.getOutputStream, true private String readline try return in.readLine catch IOException e return null void setNameString s out.printlnname s void delete out.printlndelete id void setToString to toid to void sendString s if toid null out.printlnto toid s void chatString s sendchat id s void quit sendquit id tell other player out.printlnquit stop private Thread t void start t new Threadthis t.start void stop t.stop private static final int
ID 1 private static final int ADD 2 private static final int DELETE 3 private static final int CHAT 4 private static final int QUIT 5 private static Hashtable keys new Hashtable private static String keystrings , id, add, delete,chat, quit static for int i 0 i keystrings.length i keys.putkeystringsi, new Integeri private int lookupString s Integer i
Integer keys.gets return i null -1 i.intValue public void run String s StringTokenizer st while s readline null st new StringTokenizers String keyword st.nextToken switch lookupkeyword default System.out.printlnbogus keyword keyword r break case ID id st.nextToken break case ADD String id st.nextToken
String hostname st.nextToken String name st.nextTokenCRLF client.addid, hostname, name break case CHAT String from st.nextToken client.chatfrom, st.nextTokenCRLF break case QUIT String from st.nextToken client.quitfrom break Цей клас дзеркальним вдображенням класу ClientConnection. Але вн бльш тсно переплетений з класом Client. В ньому реалзований потк, який опиту сокет, через який
клнт пд днано до сервера, здйсню аналз надходячих повдомлень та виклика потрбн методи класу Client. Крм того в ньому методи, як викликаються класом Client для вдсилання нформац на сервер. Ця програма легко може бути модифкована в напрямку розширення клькост протокольних команд та ускладнення клнта за рахунок додавання специфчних реакцй на нов команди. В клас ClientConnection може бути ускладнена реакця на пд днання клнта.
Наприклад, клнту може видаватися нформаця про початков умови гри. Таким чином наведена програма може служити скелетом для створення бльш складних. Можна дещо урзати класи Client та ServerConnection, залишивши в них лише базов функц з тим, щоб потм розширювати х шляхом механзму об ктного успадкування. Резюме. Таким чином Java технологя дуже перспективною для застосквання в розробках неокомерцйного спрямування.
Обмеженсть нструментарю Java не проявляться в проектах невеликого обсягу з лихвою компенсуться простотою програмування розподлених програм, як працюють з мережею InternetIntranet . Переносимсть Java програм спрощу обмн навчальними програмами мж рзними навчальними закладими, вдкриива можливсть сумсних розробок та створення стандартних навчальних програм, наприклад для шкл. Крм того, дуже привабливою з точки зору ефективност, залишаться дея втлення в навчальних закладах
мережевих комп ютерв Network Computers, як працюють на баз Java, замсть звичних персональних комп ютерв Personal Computers. На останок можна згадати про те що Java добре пдтриму нацональн абетки, оскльки розроблялася для нтернацонально мереж Internet. Ця обставина теж важливою рисою в умовах Украни.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |