Ocenite etot tekst:



Aleksandr Taranov,
Vladimir Cishevskij




1. Vvedenie

2. Internet, WWW i Intranet

3. Java, Joe, NEO

4. Java - yazyk i tehnologiya
4.1. YAzyk Java
4.1.1. Ob容ktnaya model' yazyka Java
4.1.2. Primitivnye tipy dannyh
4.1.3. Pakety
4.1.4. Upravlyayushchie konstrukcii
4.1.5. Isklyuchitel'nye situacii
4.1.6. Mehanizm potokov
4.2. Tehnologiya Java
4.2.1. Tehnologicheskij cikl obrabotki Java-programm
4.2.2. Java-mashina
4.2.3. Java i bezopasnost'
4.2.4. Java WorkShop
4.3. Svyaz' Java s okruzheniem: okonnyj instrumentarij
4.3.1. Obshchie polozheniya
4.3.2. Iz chego stroitsya graficheskij interfejs (komponenty i kontejnery)
4.3.3. Kak organizovat' interfejs
4.3.4. Sobytiya
4.3.5. Metody klassa Component, svyazannye s obrabotkoj sobytij

5. Joe - tehnologiya svyazyvaniya Java-programm s ob容ktnymi  biz-
nes-prilozheniyami

6. Zaklyuchenie




Kogda  govoryat i pishut o Java, samoj populyarnoj frazoj yavlyaetsya
"mir soshel s uma". Dejstvitel'no, i skorost', i harakter  rasp-
rostraneniya (tak i hochetsya vspomnit' leksikon nedavnego proshlo-
go i skazat' o "pobednom shestvii") ne imeyut analogov. Pri poyav-
lenii al'fa-versii produkta vystraivaetsya ochered' na ego licen-
zirovanie (ris. 1).

Ris.  1. Oni hotyat licenzirovat' tehnologiyu Java (snimok sdelan
na ostrove YAva).

Beta-versiya stanovitsya instrumentom  realizacii  informacionnyh
sistem  krupnyh kompanij. Akcii kompanij, imeyushchih prochnye pozi-
cii v Internet, rastut, kak na drozhzhah. Vse brosilis'  realizo-
vyvat'  WWW-navigatory s podderzhkoj Java i boryutsya za pravo pe-
redat' ih v besplatnoe ispol'zovanie kak mozhno  bol'shemu  chislu
klientov. Idet srazhenie za dolyu budushchego rynka, kontury kotoro-
go  poka tol'ko namechayutsya, srazhenie s primeneniem sredstv, ko-
torye s tochki zreniya "zdravogo biznesa" inache kak dikimi i naz-
vat' nel'zya.

V  chem  prichina  vseobshchego pomeshatel'stva i chto eto za produkt,
okoldovavshij mir? Popytaemsya sovsem korotko vyskazat' nekotorye
soobrazheniya po pervomu voprosu, posle chego  perejdem  na  chisto
tehnicheskie  rel'sy  i  sosredotochimsya na opisanii tehnologii i
yazyka Java i associirovannyh produktov.

Personal'nye  komp'yutery  sdelali   informacionnye   tehnologii
chast'yu  massovoj  kul'tury. Pri millionnyh tirazhah dazhe edinst-
vennyj "komp'yuternyj hit" sposoben prinesti ochen' bol'shie den'-
gi. Avtory mnogih podobnyh hitov,  pomimo  bogatstva,  poluchayut
kolossal'noe  vliyanie na lyudej, chto po sushchestvu yavlyaetsya istoch-
nikom ogromnogo dopolnitel'nogo obogashcheniya. I tem ne menee, uzhe
dovol'no dlitel'naya istoriya razvitiya  personal'nyh  komp'yuterov
ne znala nichego, podobnogo fenomenu Java. CHto izmenilos' v mire
v poslednie gody, pochemu etot fenomen stal vozmozhen?

Izmenilsya  Internet.  On stal dostupen millionam lyudej, dalekih
ot tehnicheskih problem. CHislo pol'zovatelej Internet po poryadku
velichiny uzhe ne otlichaetsya ot chisla pol'zovatelej  personal'nyh
komp'yuterov  i prodolzhaet vzryvoobrazno rasti. Odnovremenno In-
ternet obespechil takuyu skorost' rasprostraneniya novinok  infor-
macionnyh tehnologij, kotoruyu ne mogli i nikogda ne smogut dat'
tradicionnye  kanaly  sbyta.  Vremya spressovalos'. V Internete,
opozdav bukval'no na den', komp'yuternaya kompaniya, dazhe krupnaya,
riskuet ser'ezno oslabit' svoi pozicii srazu vo vsem mire.



Informacionnye peregruzki - harakternaya cherta  nashego  vremeni.
Sozdany moshchnye mehanizmy, obespechivayushchie proizvodstvo ogromnogo
kolichestva  informacii. Sushchestvenno men'she sdelano dlya oblegche-
niya ee polucheniya i ispol'zovaniya.

Tipichnoj yavlyaetsya situaciya, kogda iniciativa  prinadlezhit  pos-
tavshchiku, a ne potrebitelyu informacii. Postavshchik po opredelenno-
mu  povodu sozdaet informaciyu i napravlyaet ee vsem, kto, po ego
mneniyu, v nej nuzhdaetsya (ris. 2).

Ris. 2. Dostavka informacii po iniciative postavshchika

Tak rabotayut sredstva massovoj informacii,  izdatel'stva,  rek-
lamnye agentstva. Tak rabotaet elektronnaya pochta. V bol'shinstve
sluchaev  potrebitelyu eta informaciya, mozhet byt', i nuzhna, no ne
v dannyj moment, ne sejchas. Potrebitel'  vynuzhden  arhivirovat'
poluchennuyu  informaciyu. Pri etom v luchshem sluchae velika veroyat-
nost', chto k momentu, kogda informaciya dejstvitel'no ponadobit-
sya, ona poteryaet aktual'nost'. Obychno zhe u  potrebitelya  prosto
nakaplivayutsya gory musora, v kotorom otyskat' nechto nuzhnoe poch-
ti nevozmozhno.

CHtoby  informaciya  byla  aktual'noj dlya potrebitelya, ona dolzhna
dostavlyat'sya k nemu po zaprosu - v tochnosti togda, kogda v  nej
voznikla  neobhodimost'. Krome togo, postavshchik dolzhen sohranyat'
vozmozhnost' upravleniya informaciej, on dolzhen ne tol'ko  sozda-
vat' ee, no i vovremya obnovlyat' i unichtozhat'.

Centralizovannye  komp'yuternye  sistemy,  dominirovavshie eshche 10
let nazad, pozvolyali pol'zovatelyam sravnitel'no legko  nahodit'
informaciyu v operativnom rezhime, odnako oni zatrudnyali upravle-
nie informaciej, poskol'ku ee istochniki, kak pravilo, raznorod-
ny i territorial'no razneseny. Eshche odin vazhnyj nedostatok cent-
ralizovannyh sistem - ih slozhnost' i dorogovizna (ris. 3).

Ris. 3. Vzaimodejstvie s centralizovannoj komp'yuternoj sistemoj

Podavlyayushchemu  bol'shinstvu  rossijskih organizacij oni prosto ne
po karmanu.

Seti personal'nyh komp'yuterov sushchestvenno  deshevle  centralizo-
vannyh sistem, oni ostavlyayut za postavshchikom neobhodimuyu svobodu
upravleniya  informaciej,  odnako potrebitelyam prihoditsya iskat'
neobhodimye dannye na mnozhestve  mashin,  sredi  bol'shogo  chisla
prilozhenij (ris. 4).

Ris. 4. Poluchenie informacii iz seti personal'nyh komp'yuterov

Ryadovomu  pol'zovatelyu  rabotat' v takoj raznorodnoj prikladnoj
srede krajne neudobno.

Sposob razresheniya ukazannyh problem, k kotoromu pribegayut vedu-
shchie kompanii, sostoit v postroenii informacionnoj struktury or-
ganizacii po obrazu i podobiyu Internet, s  Web-servisom  v  ka-
chestve konceptual'noj osnovy (ris. 5).

Ris. 5. Universal'nyj klient Web-servisa

Vozmozhnost'  hraneniya  dannyh  razlichnyh tipov (tekst, grafika,
audio, video) v sochetanii s mehanizmami svyazyvaniya  informacii,
raspolozhennoj v raznyh uzlah komp'yuternoj seti, pozvolyayut rass-
redotachivat'  informaciyu v sootvetstvii s estestvennym poryadkom
ee sozdaniya i potrebleniya, osushchestvlyat'  edinoobraznyj  dostup,
otpravlyayas'  ot  nebol'shogo chisla izvestnyh "kornej". Tem samym
postavshchik mozhet effektivno gotovit' i  kontrolirovat'  informa-
ciyu, a potrebitel' v sostoyanii bez truda najti neobhodimye dan-
nye imenno togda, kogda oni stali nuzhny.

Sredstva  Web,  pomimo  svyazyvaniya  raspredelennyh dannyh, osu-
shchestvlyayut eshche odnu ochen' vazhnuyu funkciyu. Oni pozvolyayut rassmat-
rivat' informaciyu s nuzhnoj stepen'yu detalizacii, chto sushchestven-
no uproshchaet analiz bol'shih ob容mov dannyh. Mozhno  bystro  otob-
rat'  samoe  interesnoe,  a zatem izuchit' vybrannyj material vo
vseh podrobnostyah.

Takim obrazom, Web-servery i Web-navigatory mogut i dolzhny  is-
pol'zovat'sya ne tol'ko v "mirovom masshtabe". Web - eto infrast-
rukturnyj servis, neobhodimyj kazhdoj organizacii so skol'ko-ni-
bud' zametnymi informacionnymi potokami.

V  to  zhe vremya, Web-servisu prisushchi i opredelennye nedostatki,
vytekayushchie iz otsutstviya sostoyanij v HTTP-protokole. Vo-pervyh,
klient po sushchestvu lishen sredstv upravleniya vneshnim predstavle-
niem ob容ktov na  prosmatrivaemoj  WWW-stranice  (edinstvennoe,
chto on mozhet sdelat', eto smenit' WWW-navigator).

Vo-vtoryh,  Web-stranicy  statichny. Pri ispol'zovanii protokola
HTTP, na klientskuyu sistemu peredayutsya tol'ko passivnye dannye,
no ne metody ob容ktov. Iz obshchih soobrazhenij ochevidna ogranichen-
nost' podobnogo podhoda. Dannyj nedostatok, razumeetsya,  svyazan
s pervym. Ob容kt sam dolzhen znat', kak sebya pokazyvat' - tochnee
govorya,  on dolzhen eto vyyasnit', proanalizirovav klientskoe ok-
ruzhenie.

V-tret'ih, Web-servis obladaet ves'ma ogranichennymi interaktiv-
nymi vozmozhnostyami, kotorye svodyatsya k zapolneniyu pol'zovatelem
chisto tekstovyh form s posleduyushchej otpravkoj na  server.  Takaya
forma obshcheniya vpolne ustraivala pol'zovatelej terminalov ES |VM
let 15 nazad. Sejchas ee yavno nedostatochno.

Java-tehnologiya  pozvolyaet ustranit' vse otmechennye nedostatki.
Kak imenno - budet yasno iz posleduyushchego izlozheniya. V rezul'tate
Web-servis, i bez togo imevshij ogromnuyu  populyarnost',  poluchil
kak  by novyj impul's. |tot ekspress ponessya vpered s udvoennoj
skorost'yu, uvlekaya za soboj i Java.



V uzkom smysle slova Java - eto ob容ktno-orientirovannyj  yazyk,
napominayushchij  C++,  no bolee prostoj dlya osvoeniya i ispol'zova-
niya. V bolee shirokom smysle Java - eto celaya  tehnologiya  prog-
rammirovaniya,  iznachal'no rasschitannaya na integraciyu s Web-ser-
visom, to est' na ispol'zovanie v setevoj srede, Poskol'ku Web-
navigatory sushchestvuyut prakticheski dlya vseh  apparatno-programm-
nyh platform, Java-sreda dolzhna byt' kak mozhno bolee mobil'noj,
v ideale polnost'yu nezavisimoj ot platformy.

S  cel'yu resheniya perechislennyh problem byli prinyaty, pomimo in-
tegracii s Web-navigatorom, dva drugih vazhnejshih postulata.

- Byla  specificirovana  virtual'naya  Java-mashina,  na  kotoroj
dolzhny vypolnyat'sya (interpretirovat'sya) Java-programmy. Oprede-
leny  arhitektura, predstavlenie elementov dannyh i sistema ko-
mand Java-mashiny. Ishodnye  Java-teksty  transliruyutsya  v  kody
etoj mashiny. Tem samym, pri poyavlenii novoj apparatno-programm-
noj  platformy v portirovanii budet nuzhdat'sya tol'ko Java-mashi-
na; vse programmy, napisannye na Java, pojdut bez izmenenij.

- Opredeleno, chto pri redaktirovanii vneshnih svyazej  Java-prog-
rammy  i  pri rabote Web-navigatora prozrachnym dlya pol'zovatelya
obrazom mozhet  osushchestvlyat'sya  poisk  neobhodimyh  ob容ktov  ne
tol'ko na lokal'noj mashine, no i na drugih komp'yuterah, dostup-
nyh  po  seti  (v chastnosti, na WWW-servere). Najdennye ob容kty
zagruzhayutsya, a ih metody vypolnyayutsya zatem na mashine  pol'zova-
telya.

Nesomnenno, mezhdu dvumya sformulirovannymi polozheniyami sushchestvu-
et  tesnaya svyaz'. V kompiliruemoj srede trudno distancirovat'sya
ot apparatnyh osobennostej komp'yutera, kak trudno (hotya i  mozh-
no)  realizovat'  prozrachnuyu  dinamicheskuyu  zagruzku po seti. S
drugoj storony, priem ob容ktov izvne trebuet  povyshennoj  osto-
rozhnosti pri rabote s nimi, a, znachit, i so vsemi Java-program-
mami. Prinimat' neobhodimye mery bezopasnosti proshche vsego v in-
terpretiruemoj,  a ne kompiliruemoj srede. Voobshche, mobil'nost',
dinamizm i bezopasnost' - sputniki interpretatora, a ne  kompi-
lyatora.

Prinyatye  resheniya sdelali Java-sredu ideal'nym sredstvom razra-
botki klientskih komponentov Web-sistem. Osobo otmetim prozrach-
nuyu dlya pol'zovatelya dinamicheskuyu zagruzku ob容ktov po seti. Iz
etogo vytekaet takoe vazhnejshee dostoinstvo, kak  nulevaya  stoi-
most'  administrirovaniya klientskih sistem, napisannyh na Java.
Dostatochno obnovit' versiyu ob容kta na servere, posle chego  kli-
ent  avtomaticheski  poluchit imenno ee, a ne staryj variant. Bez
etogo real'naya rabota s razvitoj setevoj infrastrukturoj  prak-
ticheski  nevozmozhna. S drugoj storony, pri nalichii dinamicheskoj
zagruzki  dejstvitel'no  vozmozhno  poyavlenie  ustrojstv  klassa
Java-terminalov,  iznachal'no soderzhashchih tol'ko WWW-navigator, a
vse ostal'noe (i programmy, i dannye) poluchayushchih po seti.

Zdes' umestno otmetit' zamechatel'nuyu tochnost' v vybore osnovnyh
posylok proekta Java. Iz minimuma predpolozhenij vytekaet maksi-
mum novyh vozmozhnostej pri sohranenii praktichnosti realizacii.

V to zhe vremya, integraciya s WWW-navigatorom i  interpretiruemaya
priroda  Java-sredy stavyat vpolne opredelennye ramki dlya real'-
nogo ispol'zovaniya Java-programm (hotya, konechno zhe,  yazyk  Java
ne  menee  universalen,  chem, skazhem, C++). Naprimer, izvestno,
chto interpretaciya, po sravneniyu s pryamym vypolneniem,  primerno
na  poltora  poryadka medlennee. Trudno skazat', naskol'ko mogut
uluchshit' polozhenie kompilyaciya "na letu" i ispol'zovanie specia-
lizirovannyh Java-processorov, no poka  ispol'zovanie  Java  na
servernoj storone predstavlyaetsya problematichnym.

Dalee,  hotya  tehnologiya  Intranet, osnovannaya na ispol'zovanii
Web-servisa v kachestve informacionnoj osnovy organizacii, yavlya-
etsya ogromnym shagom vpered, sushchestvuyut i  drugie  servisy,  kak
unasledovannye, tak i sovremennye (naprimer, relyacionnye SUBD),
kotorye  obyazatel'no dolzhny vhodit' v sostav korporativnoj sis-
temy. Esli vsya svyaz' mezhdu klientami  i  upomyanutymi  serverami
budet  osushchestvlyat'sya  cherez server WWW, poslednij stanet uzkim
mestom, a resheniya Intranet riskuyut lishit'sya  takogo  vazhnejshego
dostoinstva,  kak  masshtabiruemost'.  Znachit, neobhodima pryamaya
svyaz' mezhdu klientskimi sistemami, napisannymi na yazyke Java, i
proizvol'nymi servisami (ris. 6).

Ris. 6. Pryamaya svyaz' mezhdu Java-klientami i korporativnymi ser-
verami.

Kak realizovat' takuyu svyaz'?

V obshchem vide otvet ocheviden - nuzhny  sredstva  dlya  polnocennoj
integracii  Java v raspredelennuyu ob容ktnuyu sredu. Na servernoj
storone kompaniya Sun Microsystems imeet sootvetstvuyushchuyu  tehno-
logiyu  -  NEO  (NEtworked Objects, setevye ob容kty). Tehnologiya
NEO udovletvoryaet specifikaciyam CORBA  (Common  Object  Request
Broker  Architecture),  yavlyayushchimsya promyshlennym standartom. Pri
realizacii korporativnyh informacionnyh sistem s ispol'zovaniem
NEO naibolee estestvennym predstavlyaetsya  ispol'zovanie  trehu-
rovnevoj  arhitektury  s  serverami prilozhenij, postroennymi na
ob容ktnyh principah, na vtorom urovne i s bazovymi i  unasledo-
vannymi serverami na tret'em urovne (ris. 7).

Ris.  7. Trehurovnevaya arhitektura korporativnoj informacionnoj
sistemy.

K sozheleniyu, stol' obshchij otvet nikak ne  pomogaet  osushchestvlyat'
pryamuyu svyaz' mezhdu Java-klientom i NEO-serverom. Konechno, mozhno
vospol'zovat'sya  standartnymi sredstvami programmirovaniya v se-
tevoj srede (a Java dopuskaet ispol'zovanie bibliotek, napisan-
nyh na C/C++, ravno kak i vstavku mashinnyh kodov), no esli  eto
bylo  by  edinstvennoj vozmozhnost'yu, Java riskovala ostat'sya na
urovne "ozhivlyalok" dlya MS-Windows. V konce marta 1996 goda kom-
paniya SunSoft ob座avila o poyavlenii  novogo  produkta  s  imenem
Joe,  kak  raz  i prednaznachennogo dlya sushchestvennogo oblegcheniya
vstraivaniya Java-klientov v  informacionnye  sistemy  Intranet,
postroennye  v trehurovnevoj arhitekture s ispol'zovaniem sredy
NEO (ris. 8).

Ris. 8. Raspredelenie rolej mezhdu Java, Joe i NEO.

Takim obrazom, slozhilas' polnaya i izumitel'no krasivaya  kartina
organizacii  sovremennyh  Intranet-sistem.  V  dannoj stat'e my
udelim osnovnoe vnimanie tehnologii Java.  Dalee  budet  kratko
rassmotreny vozmozhnosti, predostavlyaemye sistemoj Joe.






Pri opisanii yazyka Java budet predpolagat'sya, chto chitatel', ho-
tya by v obshchih chertah, znakom s yazykom C++.



Kogda  govoryat ob ob容ktno-orientirovannom yazyke programmirova-
niya, predpolagayut podderzhku treh mehanizmov:

- inkapsulyaciya

- nasledovanie

- polimorfizm.

Inkapsulyaciya i nasledovanie v yazyke Java realizuyutsya s  pomoshch'yu
ponyatiya klassa.



Ponyatie klassa v yazykah Java i C++ ochen' blizki. Klass yavlyaetsya
shablonom dlya sozdaniya ob容ktov; on mozhet soderzhat' dannye i me-
tody.  Privedem  primer  klassa, opisyvayushchego tochki v dvumernom
prostranstve (zdes' i dalee nomera strok ispol'zuyutsya dlya  pos-
leduyushchih poyasnenij i ne yavlyayutsya chast'yu Java-programm).

1     class Point extends Object {
2       private double x;
3       private double y;

4       Point (double x, double y) {
5         this.x = x;
6         this.y = y;
7       }

8       Point () {
9         this (0.0, 0.0);
10      }

11      public void setX (double x) {
12        this.x = x;
13      }

14      public void setY (double y) {
15        this.y = y;
16      }
        . . .
17    }

V  yazyke  Java  nel'zya otryvat' opredelenie metoda (funkcii) ot
opisaniya zagolovka. Sintaksicheskaya konstrukciya class  polnost'yu
vklyuchaet  v sebya vsyu informaciyu o klasse. V chastnosti, realiza-
cii metodov obyazany soderzhat'sya vnutri etoj konstrukcii.

Dlya  oboznacheniya  nasledovaniya  ispol'zuetsya   klyuchevoe   slovo
extends (stroka 1). Klass Object - eto koren' dereva nasledova-
niya.  V  Java  ne byvaet klassov-"sirot": u vseh klassov, krome
Object, est' predshestvennik. Podrobnee nasledovanie i predopre-
delennye klassy budut rassmotreny dalee.

Rezhimy dostupa k elementam klassa (private, protected,  public)
te  zhe,  chto  i  v C++, za odnim vazhnym isklyucheniem. Esli rezhim
dostupa opushchen,  predpolagaetsya,  chto  sootvetstvuyushchij  element
dostupen v predelah paketa (sm. dalee).

V stroke 9 priveden primer yavnogo vyzova odnogo konstruktora iz
drugogo.

Prochie  privedennye vyshe stroki ne nuzhdayutsya v poyasneniyah krome
odnoj - otsutstvuyushchej. V yazyke  Java  ne  byvaet  destruktorov.
Prichina v tom, chto upravlenie pamyat'yu avtomatizirovano (v fono-
vom  rezhime  rabotaet sborshchik musora). Dlya vysvobozhdeniya prochih
resursov, associirovannyh s ob容ktom, sluzhit special'nyj  metod
finalize.  |tot metod vyzyvaetsya sborshchikom musora v moment uti-
lizacii pamyati, zanimavshejsya ob容ktom.

Klyuchevoe slovo this (sm., naprimer, stroki 5 i 9)  ispol'zuetsya
dlya  ssylki na samogo sebya. Analogichnuyu rol' po otnosheniyu k ro-
ditel'skomu klassu igraet slovo super:

1     class ThreePoint extends Point {
2       protected double z;

3       ThreePoint () {
4         super ();
5         z = 0.0;
6       }

7       ThreePoint (double x, double y, double z) {
8         super (x, y);
9         this.z = z;
10      }
11    }

V strokah 4 i 8 vyzyvayutsya konstruktory roditel'skogo klassa.

Privedennye primery pokazyvayut, chto v yazyke Java,  kak  i  C++,
metody  mogut byt' peregruzhennymi, to est' pod odnim imenem mo-
gut figurirovat' raznye metody s raznym naborom parametrov.

Kak i C++, s pomshch'yu klyuchevogo  slova  static  mozhno  opredelit'
dannye  i  metody,  kotorye  yavlyayutsya  obshchimi dlya vseh ob容ktov
klassa. (Otmetim poputno, chto funkcij, ne prinadlezhashchih kakomu-
libo klassu, v yazyke Java ne byvaet.) Sleduyushchij primer soderzhit
fragmenty standartnogo paketa java.lang.

1 public final
2 class Character extends Object {

3     public static final int MAX_RADIX = 36;

4     static char downCase[];

5     static {
6         char down[] = new char[256];
7         for (int i = 0 ; i < 256 ; i++) {
8             down[i] = (char) i;
9       }
10        for (int lower = 'a' ; lower <= 'z' ; lower++) {
11            int upper = (lower + ('A' - 'a'));
12            down[upper] = (char)lower;
13      }

14        for (int lower = 0xE0; lower <= 0xFE; lower++) {
15            if (lower != 0xF7) { // multiply and divide
16                int upper = (lower + ('A' - 'a'));
17                down[upper] = (char)lower;
18            }
19        }
20      downCase = down;
21    }

22    public static boolean isLowerCase(char ch) {
23      return (upCase[ch] != ch);
24    }

25 }

Prokommentiruem etot primer s tochki zreniya otlichij Java ot C++.

Stroki s 5 po 21 predstavlyayut soboj  inicializaciyu  staticheskih
dannyh  klassa, kotoraya osushchestvlyaetsya v moment zagruzki klassa
v Java-mashinu. Po suti etot kod igraet rol' konstruktora klassa
Character.

V strokah 1 i 3 vstrechaetsya klyuchevoe slovo final.  V  stroke  1
eto   slovo   oboznachaet   zapret  na  nasledovanie  ot  klassa
Character. V stroke 3 ego smysl analogichen  opisatelyu  const  v
C++.

Esli slovo final ispol'zovano v zagolovke metoda, to dannyj me-
tod ne mozhet byt' pereopredelen v klassah-naslednikah.

Kak  i  v  C++, v yazyke Java klassy mogut byt' abstraktnymi, to
est' ne do konca konkretizirovannymi. |to oznachaet, chto v klas-
se opisany metody, opredeleniya kotoryh otsutstvuyut. Takie meto-
dy (kak i sam klass)  dolzhny  snabzhat'sya  opisatelem  abstract.
Abstraktnye  metody  dolzhny  konkretizirovat'sya  v  proizvodnyh
klassah.

V yazyke Java imeetsya predopredelennaya ierarhiya klassov,  soder-
zhashchihsya v pakete java.lang. Na ris. 9 eta ierarhiya predstavlena
graficheski.

Ris. 9. Ierarhiya predopredelennyh klassov yazyka Java.

V etoj ierarhii neskol'ko osobnyakom stoit klass Class. Program-
mist ne mozhet sozdat' ob容kt klassa Class (pravda, sushchestvuyut i
drugie  klassy  s etim svojstvom). Ssylki na ob峭t klassa Class
mozhno poluchit' s pomoshch'yu metoda getClass, opredelennogo dlya ob-
容ktov klassa Object.

Ob容kty klassa Class ispol'zuyutsya dlya polucheniya vo vremya vypol-
nenie informacii o "klassovyh" svojstvah  ob容kta.  K  ob容ktam
klassa Class, pomimo prochih, primenimy sleduyushchie metody:

1    public native String getName();
2    public native Class getSuperclass();
3    public static native Class forName(String className)
         throws ClassNotFoundException;

Metod forName pozvolyaet poluchit' ssylku na klass po ego imeni.
Opisatel'  native  svidetel'stvuet o tom, chto metod realizuetsya
sredstvami, vneshnimi po otnosheniyu k Java-sisteme (naprimer, pi-
shetsya na yazyke C).



Model' nasledovaniya v yazyke Java sushchestvenno otlichaetsya ot  mo-
deli  C++.  Vo-pervyh,  v Java net mnozhestvennogo nasledovaniya.
Vo-vtoryh, v yazyke predusmotreny sredstva dlya zapreta  dal'nej-
shego  nasledovaniya  (klyuchevoe  slovo  final  pered opredeleniem
klassa). V-tret'ih, v yazyke Java prisutstvuet novoe po  otnoshe-
niyu k C++ ponyatie interfejsa.

Interfejs predstavlyaet soboj nabor opisanij metodov. Primer:

public interface Verbose {
  public void drawOn (Graphics g);
  public void printOn (OutputStream os);
}

public class Star extends Polygon implements Verbose {
  public void drawOn (Graphics g) {
  // Konkretnaya realizaciya otrisovki
  }
  public void printOn (OutputStream os) {
  // Konkretnaya realizaciya pechati
  }
}

public class Text extends StringBuffer implements Verbose {
  public void drawOn (Graphics g) {
  // Konkretnaya realizaciya otrisovki
  }
  public void printOn (OutputStream os) {
  // Konkretnaya realizaciya pechati
  }
}

public class Blackboard extends Canvas {
  public void drawVerbose (Verbose d) {
    Graphics g = getGraphics ();
    d.drawOn (g);
  }
}

Interfejs Verbose soderzhit dva metoda. Pervyj prednaznachen  dlya
risovaniya  v  graficheskom  kontekste, vtoroj - dlya raspechatki v
vyhodnoj potok.

Klass   Star   predstvlyaet   soboj   podklass   mnogougol'nikov
(Polygon).  Pomimo  prochego,  my  hotim  risovat' ob容kty etogo
klassa na doske (Blackboard) i vyvodit' ih opisanie v fajl.

Dlya ob容ktov klassa Text my hotim imet'  vozmozhnost'  nachertat'
tekst na doske i vyvodit' ego v fajl.

Klass Blackboard - naslednik klassa Canvas, special'no prednaz-
nachennogo  dlya  risovaniya.  Kak  my vidim, etot klass s pomoshch'yu
edinstvennogo metoda spravlyaetsya s risovaniem ob容ktov, ne ime-
yushchih obshchego predka (krome klassa Object).

Takim obrazom, s pomoshch'yu interfejsov mozhno  kompensirovat'  ot-
sutstvie  mnozhestvennogo nasledovaniya. V kontekste nasledovaniya
interfejs mozhno rassmatrivat' kak abstraktnyj klass, ne  soder-
zhashchij dannyh.



Ob容kty sozdayutsya s pomoshch'yu operatora new. Inicializaciya ob容k-
ta  proizvoditsya  s  pomoshch'yu sootvetstvuyushchego konstruktora. |ti
operacii razdelit' nel'zya - za new sleduet konstruktor. Primer.

Point myPoint = new Point ();

Drugih sposobov sozdaniya ob容ktov (krome  operatora  new)  yazyk
Java ne predostavlyaet.

Ob容kt sushchestvuet do teh por, poka na nego est' ssylki (to est'
poka  on  pryamo ili kosvenno dostupen hotya by iz odnoj peremen-
noj). V yazyke otsutstvuyut  yavnye  sredstva  udaleniya  ob容ktov.
Posle togo, kak ob容kt stal nedostupen, on okazyvaetsya kandida-
tom dlya utilizacii sborshchikom musora.

Ob容kt  mozhet  stat' nedostupnym, esli hranivshej ego peremennoj
prisvoeno novoe znachenie ili esli eta peremennaya perestala byt'
dostupnoj (proizoshel vyhod iz bloka). Primer.

  Point p = new Point (100.0, 100.0);
  . . .
  p = new Point (1.0, 1.0);
  // Na tochku s koordinatami (100, 100) ssylok bol'she net

  {
     String s = new String ("Local string");
     System.out.println (s);
  }
  // Na stroku "Local string" ssylok bol'she net

V moment utilizacii ob容kta sborshchikom musora budet vyzvan metod
finalize. Iz-za togo, chto sborshchik musora rabotaet v fonovom re-
zhime, vyzov finalize yavlyaetsya asinhronnym.



V yazyke Java sushchestvuet nabor vstroennyh tipov dannyh,  kotorye
ne yavlyayutsya ob容ktami. Ih ne tak mnogo.

Predstavlenie  chisel  v yazyke Java fiksirovano i, tem samym, ne
zavisit ot apparatnoj platformy.

- celye chisla:
- - byte - 8 bit,
- - short - 16 bit,
- - int -  32 bita,
- - long - 64 bita.
Vse chisla so znakom, specifikator unsigned v yazyke otsutstvuet.

- chisla s plavayushchej tochkoj:
- - float - 32 bita,
- - double - 64 bita.
Predstavlenie dolzhno sootvetstvovat' standartu IEEE 754.

- char
Znachenie tipa char est' 16-razryadnoe chislo bez znaka  (diapazon
0-65535).  Kodirovka sootvetstvuet standartu Unicode. V rezul'-
tate s samogo nachala zakladyvaetsya zdorovaya osnova dlya  resheniya
problemy lokalizacii Java-programm.

- boolean
Soderzhit  znacheniya true i false, kotorye ne mogut byt' preobra-
zovany v drugoj tip.

V yazyke Java, razumeetsya, prisutstvuyut massivy. |ti massivy ti-
pizirovany. Deklaraciya

Point myPoints[];

opisyvaet peremennuyu myPoints kak massiv ob容ktov  tipa  Point.
Zavesti massiv opredelennogo razmera mozhno s pomoshch'yu instrukcii
vida

myPoints = new Point[10];

Znacheniya  elementov  massiva  pri  etom ustanavlivayutsya ravnymi
special'noj velichine null.

Razmer massiva mozhet byt' poluchen vo vremya vypolneniya  program-
my:

howMany = myPoints.length;

Drugih strukturnyh tipov (ne yavlyayushchihsya ob容ktami) v yazyke Java
net, to est' net struktur, ob容dinenij i t.p. Net v Java i uka-
zatelej.

Otmetim,  chto  stroki  simvolov  yavlyayutsya ob容ktami tipa String
(tekstovye konstanty)  ili  StringBuffer  (izmenyaemye  stroki).
Primer,

String hello = "Hello world!";



Klassy v yazyke Java ob容dinyayutsya v pakety. Vse klassy, vhodyashchie
v  odin paket, yavlyayutsya druzhestvennymi po otnosheniyu drug k dru-
gu, to est' imeyut vzaimnyj dostup k peremennym i metodam,  esli
protivnoe  ne ogovoreno yavno posredstvom specifikatorov private
ili protected.

Pakety razgranichivayut prostranstva  imen.  "Prosto  global'nyh"
imen v yazyke Java ne byvaet.

Paket oformlyaetsya s pomoshch'yu sintaksicheskoj konstrukcii vida

package my_packages.pack1:

Instrukciya  package  dolzhna  stoyat'  pervoj  v fajle s ishodnym
Java-tekstom. Ona dejstvuet do konca fajla.

Pakety mogut importirovat'sya drugimi paketami posredstvom inst-
rukcii import. Primery,

import java.util;
import java.util.HashTable;
import java.util.*;

Pervaya instrukciya import pozvolyaet obrashchat'sya k klassam  paketa
util sleduyushchim obrazom:

util.Vector
util.HashTable
. . .

Vtoraya  instrukciya importiruet lish' klass HashTable, pozvolyaya v
dal'nejshem obrashchat'sya k etomu klassu po  korotkomu  imeni,  bez
prefiksa util.

Tret'ya  instrukciya import pozvolyaet obrashchat'sya po korotkim ime-
nam ko vsem klassam paketa util.



Upravlyayushchie konstrukcii yazyka Java vpolne tradicionny, za  isk-
lyucheniem  sredstv  vyhoda  iz vlozhennyh blokov (v chastnosti, iz
vlozhennyh ciklov). Primer.

test:
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      if (i > 3) {
        break test;
      }
    }
  }

Dlya peredachi upravleniya mozhno primenyat' kak konstrukciyu  break,
tak i continue (perehod k sleduyushchej iteracii cikla).

Instrukciya goto v yazyke Java otsutstvuet.



Dlya obrabotki isklyuchitel'nyh situacij, voznikayushchih vo vremya vy-
polneniya  programmy, v yazyke Java ispol'zuetsya konstrukciya try/
catch/finally. Blok try soderzhit instrukcii,  vypolnenie  mozhet
privesti  k vozniknoveniyu isklyuchitel'nyh situacij. Sleduyushchie za
nim odin ili neskol'ko blokov catch prednaznacheny dlya obrabotki
isklyuchitel'nyh situacij. Nakonec, blok finally  soderzhit  inst-
rukcii,  kotorye  budut  vypolneny  nezavisimo ot vozniknoveniya
isklyuchitel'noj situacii v bloke try. Pri  vyhode  iz  try-chasti
posredstvom  instrukcij  peredachi  upravleniya  (break, return i
t.p.) blok finally takzhe budet vypolnen.

Dlya peredachi informacii ob isklyuchitel'noj situacii ispol'zuyutsya
ob容kty klassov - naslednikov klassa Throwable. Naprimer, klass
ArrayIndexOutOfBoundsException otvechaet za kontrol' vyhoda  in-
deksov za granicy massivov, klass OutOfMemoryException - za re-
akciyu  na ischerpanie svobodnoj pamyati, klass ClassCastException
- za     oshibki     pri     preobrazovanii     tipov,     klass
InterruptedException  - za obrabotku preryvaniya tekushchego potoka
i t.d. Komponentoj vseh etih klassov yavlyaetsya pole tipa String,
v  kotoroe  pomeshchaetsya  tekst  soobshcheniya   ob   oshibke.   Metod
getMessage vozvrashchaet etot tekst.

V podobnyh ob容ktah mozhet soderzhat'sya i dopolnitel'naya informa-
ciya.  Naprimer,  ob容kty klassa InterruptedIOException soderzhat
pole, v kotoroe zanositsya chislo bajt, peredannyh do vozniknove-
niya isklyuchitel'noj situacii.

Sleduyushchij fragment programmy raspechatyvaet soobshcheniya iz massiva
messages. Pri etom my ne pytaemsya vyyasnit' razmer etogo  massi-
va,  a  prosto  polagaemsya na mehanizm obrabotki isklyuchitel'nyh
situacij. (Konechno, my ne sovetuem  pisat'  programmy  v  takom
stile).

try {
  for (int i = 0; i < 100; i++) {
    System.out.println (messages[i]);
  }
}

catch (ArrayOutOfBoundException e) {
  System.out.println ("No more messages");
}
catch (Exception e) {
  System.out.println ("Unexpected exception");
  System.out.println (e.getMessage());
}

finally {
  System.out.println ("Work done");
}

Iskobchitel'nye situacii mogut vozbuzhdat'sya programmno pri pomo-
shchi instrukcij vida

throw new MyException ("Something's wrong");

Specifikacii yazyka Java podrazdelyayut isklyuchitel'nye situacii na
dve kategorii. K pervoj kategorii (klass Error) otnosyatsya situ-
acii, na kotorye programma ne obyazana reagirovat' (eto zavedomo
sdelaet Java-mashina). Ko vtoroj kategorii (klass Exception) ot-
nosyatsya  situacii, kotorye programma dolzhna obrabatyvat' obyaza-
tel'no. Esli pri vypolnenii metoda mozhet voznikat' isklyuchitel'-
naya situaciya vtorogo tipa, on dolzhen libo obrabatyvat' ee sam s
pomoshch'yu konstrukcii try/catch/finally, libo v  ego  opredelenii
dolzhna figurirovat' konstrukciya

throws Exception1, Exception2, ...

Primer.

class Foo extends Object {
  . . .
  public void readFromFile (String fn) throws InvalidFormatException {
    FileInputStream fis;
    try {
      fis = new FileInputStream (fn);
      // CHitaem dannye iz fajla.
      . . .
      // Esli fajl imeet nepravil'nyj format,
      // vozhbuzhdaem isklyuchitel'nuyu situaciyu:
      throw new InvalidFormatException ("Wrong format");
      . . .
    }
    catch (FileNotFoundException e) {
      // Predprinimaem sootvetstvuyushchie dejstviya
    }
    finaly {
      if (fis != null )
        fis.close(); // vsegda zakryvaem fajl, esli on byl otkryt
    }
  }
  . . .
}

V etom primere v metode readFromFile mogut vozniknut' dve iskl-
chitel'nye  situacii.  Pervaya svyazana s tem, chto nuzhnyj fajl ne-
dostupen.   |ta   situaciya   obrabotyvaetsya    vnutri    metoda
readFromFile.  Vtoraya  isklyuchitel'naya situaciya mozhet voznknut',
esli fajl imeet nepravil'nyj format.  |ta  situaciya  peredaetsya
dlya obrabotki naverh.



Mehanizm  potokov - obyazatel'naya cherta sovremennyh operacionnyh
sred. Za schet potokov obespechivaetsya masshtabiruemost' programm-
nyh sistem, optimal'noe ispol'zovanie apparatnyh resursov,  vy-
sokaya  skorost'  otklika  na zaprosy pol'zovatelej. Poetomu net
nichego udivitel'nogo v tom, chto v yazyke Java  mehanizm  potokov
predstavlen s samogo nachala i v polnom ob容me.

V yazyke Java potoki predstavleny posredstvom klassa Thread, in-
terfejsa  Runnable, specifikatora metoda synchronized i metodov
klassa Object wait i notify.

4.1.6.1. Klass Thread i interfejs Runnable

Potok (thread) predstavlyaet soboj otdel'nyj potok upravleniya  v
predelah processa. Takim obrazom, u kazhdogo potoka est' nachalo,
posledovatel'nost' dejstvij, tekushchee sostoyanie i konec.

Potok  zapuskaetsya  s  pomoshch'yu  vyzova  metoda  start()  klassa
Thread. Posledovatel'nost' dejstvij, vypolnyaemyh v ramkah poto-
ka, zadaetsya v metode run(). Podcherknem, chto  metod  run()  is-
pol'zuetsya tol'ko dlya zadaniya pomledovatel'nosti dejstvij; yavno
vyzyvat' ego ne tol'ko ne nuzhno, no i prosto vredno.

Potok  zakanchivaetsya  libo  pri  zavershenii  vypolneniya  metoda
run(), libo s  pomoshch'yu  yavnyh  vyzovov  metodov  klassa  Thread
stop()  ili  destroy().  Vozobnovit' rabotu zavershennogo potoka
nevozmozhno.

Dlya vremennoj priostanovki raboty potoka s  posleduyushchim  vozob-
novleniem sluzhat metody suspend(), sleep() i yeild().

Obychno potok, priostanovlennyj s pomoshch'yu metoda suspend, vozob-
novlyaet rabotu posredstvom metoda resume().

Vyzov metoda sleep() privodit k priostanovke potoka na zadannoe
chislo millisekund.

Vyzov  metoda  yeild() oznachaet dobrovol'nuyu ustupku processora
drugomu potoku; pervonachal'nyj potok ostaetsya gotovym k  vypol-
neniyu.

Java-potoki obladayut prioritetami. V specifikaciyah ogovarivaet-
sya, chto Java-mashina realizuet vytesnyayushchuyu mnogopotokovost'. |to
oznachaet, chto potok s bol'shim prioritetom mozhet prervat' vypol-
nenie  menee prioritetnogo potoka. Odnako, specifikacii ne tre-
buyut nalichiya razdeleniya vremeni. |to znachit, chto  dlya  peredachi
upravleniya potoku s tem zhe prioritetom, voobshche govorya, trebuyut-
sya yavnye dejstviya so storony pervonachal'nogo potoka - vyzov me-
todov suspend(), sleep() ili yeild().

Na ris. 10 predstavlena diagramma sostoyanij potokov.

Ris. 10. Diagramma sostoyanij potokov.

Sleduyushchij primer soderzhit fragment odnogo iz mnogochislennyh va-
riantov  resheniya zadachi "proizvoditel'/potrebitel'". On zaimst-
vovan iz pis'ma, kotoroe napisal Mark Tillotson v gruppu  sete-
vyh novostej comp.lang.java.

class my_producer extends Thread
{
  int items_to_do ;
  my_buffer the_buffer ;

  my_producer (my_buffer buf, int count)
    { super() ;
      the_buffer = buf ;
      items_to_do = count ;
    }

  public void run ()
    {
      while (items_to_do > 0)
        { System.out.println ("producer to_do = " + items_to_do) ;
          Integer item = new Integer (items_to_do*items_to_do) ;
          the_buffer.insert (item) ;
          items_to_do-- ;
        }
      System.out.println ("producer exiting") ;
    }
}

Dannyj proizvoditel' pomeshchaet v bufer kvadraty celyh chisel.

V  privedennom  prostom primere klass my_producer yavlyaetsya nas-
lednikom klassa Thread, chto delaet ego potokom s posledovatel'-
nost'yu dejstvij, zadannoj metodom run(). V real'nyh programmah,
kak pravilo, ob容kt dolzhen nasledovat' u kakogo-libo  predshest-
vennika  soderzhatel'nye  svojstva,  a vozmozhnost' paralell'nogo
vypolneniya emu predostavlyaetsya interfejsom Runnable.  |tot  in-
terfejs soderzhit edinstvennyj metod - run(). Primer.

1  class SomethingToRun extends BaseRunner implements Runnable {
2    private Thread aThread;
3    public void run () {
       // vypolnyaemye dejstviya
    . . .
4    }

5    SomethingToRun () {
6       aThread = new Thread (this);
7       aTread.start ();
8    }
9  }

V stroke 6 sozdaetsya novyj potok. Argumentom konstruktora yavlya-
etsya obekt klassa SomethingToRun, a, znachit, posledovatel'nost'
vypolnyaemyh  dejstvij  potoka  budet opredelyat'sya metodom run()
etogo klassa. Vyzov metoda start() v stroke 7  stavit  potok  v
ochered' gotovyh dlya vypolneniya.



Kak  i  vo  vsyakoj  mnogoprocessnoj ili mnogopotokovoj srede, v
Java sushchestvuet problema sinhronizacii  dostupa  k  razdelyaemym
resursam. Primerom takogo resursa yavlyaetsya bufer v zadache "pro-
izvoditel'/potrebitel'".

Dlya  opytnyh  programmistov  otmetim, chto model' sinhronizacii,
prinyataya v yazyke Java, opiraetsya na koncepciyu monitora, predlo-
zhennuyu v 70-e gody Brink-Hansenom.

V Java-programmah mozhno vydelyat' kriticheskie intervaly, kotorye
oboznachayutsya klyuchevym slovom synchronized. Esli kriticheskim in-
tervalom yavlyaetsya metod, specifikator synchronized pomeshchaetsya v
ego (metoda) zagolovok. Dlya prevrashcheniya proizvol'noj instrukcii
(obychno eto blok) v kriticheskij interval sluzhit konstrukciya

synchronized (vyrazhenie) instrukciya;

gde rezul'tatom vyrazheniya dolzhen byt' ob容kt ili massiv.

Vypolnenie kriticheskogo intervala nachinaetsya tol'ko posle polu-
cheniya potokom monopol'nogo dostupa k sootvetstvuyushchemu  ob容ktu.
Do nastupleniya etogo momenta potok blokiruetsya.

Vyzov wait() vnutri kriticheskogo intervala privodit k tomu, chto
tekushchij  potok ustupaet monopol'noe pravo na kriticheskij inter-
val i priostanavlivaetsya do teh por, poka iz kakogo-libo drugo-
go potoka ne budet sdelan vyzov notify() ili notifyAll(). Horo-
shej illyustraciej ispol'zovaniya  sredstv  sinhronizacii  potokov
yavlyaetsya upominavshayasya vyshe programma Marka Tillotsona.

class my_buffer
{
  Object [] vec = new Object [8] ;
  int ip = 0 ;
  int ep = 0 ;

  synchronized void insert (Object item)
    {
      do
        {
          if (ip-ep < 8)
            { vec [(ip++) & 7] = item ;
              if (ip-ep == 1) notify () ;  // Uvedomit', esli bufer byl pust
              return ;
            }
          try wait () ;  catch (InterruptedException e) ;
        } while (true) ;
    }

  synchronized Object extract ()
    {
      do
        {
          if (ip > ep)
            { Object result = vec [(ep++) & 7] ;
              if (ip-ep == 7) notify();  // Uvedomit', esli bufer byl polon
              return result ;
            }
          try wait () ; catch (InterruptedException e) ;
        } while (true) ;
    }
}

class my_producer extends Thread
{
  int items_to_do ;
  my_buffer the_buffer ;

  my_producer (my_buffer buf, int count)
    { super() ;
      the_buffer = buf ;
      items_to_do = count ;
    }

  public void run ()
    {
      while (items_to_do > 0)
        { System.out.println ("producer to_do = " + items_to_do) ;
          Integer item = new Integer (items_to_do*items_to_do) ;
          the_buffer.insert (item) ;
          items_to_do-- ;
        }
      System.out.println ("Proizvoditel' zakanchivaet rabotu") ;
    }
}

class my_consumer extends Thread
{
  int items_to_do ;
  my_buffer the_buffer ;

  my_consumer (my_buffer buf, int count)
    { super() ;
      the_buffer = buf ;
      items_to_do = count ;
    }

  public void run ()
    {
      while (items_to_do > 0)
        { System.out.println ("consumer to_do = " + items_to_do) ;
          Object item = the_buffer.extract () ;
          System.out.println ("consumer got " + item) ;
          items_to_do-- ;
        }
      System.out.println ("Potrebitel' zakanchivaet rabotu") ;
      synchronized (this){
        notify () ; // Posylaem uvedomlenie o zavershenii raboty
                    // (sm. con.wait() v main())
      }
    }
}

public class threaded3
{
  public static void main (String [] args) throws InterruptedException
    {
      my_buffer the_buffer = new my_buffer () ;
      my_producer prod = new my_producer (the_buffer, 40) ;
      my_consumer con  = new my_consumer (the_buffer, 40) ;

      Thread.currentThread().setPriority (5) ;
      prod.setPriority (4) ;  // Proizvoditel' poluchaet bolee vysokij prioritet
      con.setPriority  (3) ;  // po sravneniyu s potrebitelem

      prod.start() ;
      con.start() ;
      synchronized (con)
        {
          con.wait() ;  // ZHdem uvedomleniya ot proizvoditelya ob okonchanii
                        // ego raboty
        }
      System.out.println ("Proizvoditel' i potrebitel' zakonchili rabotu") ;
    }
}

Privedennaya programma napisana v ochen' horoshem, ponyatnom stile.
My  prokommentiruem  lish'  odin  moment.  V  metodah insert() i
extract() klassa my_buffer vyzov wait() soderzhitsya vnutri  bes-
konechnogo cikla. Delo v tom, chto vyzov notify() otnositsya k ob-
容ktu  v  celom.  "Razbuzhennyj"  ob容kt dolzhen proanalizirovat'
svoe sostoyanie i reshit', chto delat' dal'she. Tak, esli  "zasnul"
metod insert(), to posle vozobnovleniya raboty neobhodimo prove-
rit', chto bufer uzhe ne polon i dobavlenie novogo elementa stalo
vozmozhnym. Esli eto ne tak, metod insert() zasnet vnov'.





V principe, tehnologicheskij cikl podgotovki, translyacii, redak-
tirovaniya  vneshnih  svyazej,  testirovaniya, otladki i vypolneniya
Java-programm tot zhe, chto i dlya drugih interpretiruemyh  yazykov
programmirovaniya, no s odnim sushchestvennym otlichiem - pri redak-
tirovanii vneshnih svyazej trebuemye komponenty mogut dostavlyat'-
sya po seti (ris. xxx).

Ris. xxx. Tehnologicheskij cikl Java-programmy

Vazhno  otmetit',  odnako,  chto Java-programmy mogut predstavat'
kak by v dvuh ipostasyah - kak samostoyatel'noe prilozhenie i  kak
aplet,  to  est'  sovokupnost'  ob容ktov, vypolnyayushchihsya v srede
WWW-navigatora.

S tochki zreniya programmista, aplet i  prilozhenie  otlichayutsya  v
pervuyu ochered' tochkami vhoda i zhiznennym ciklom.

Prilozhenie v kachestve tochki vhoda imeet metod

public static void main (String args[]);

etot metod dolzhen byt' opredelen v tom public-klasse, kotoryj soderzhitsya v
fajle, vypolnyaemom virtual'noj Java-mashinoj.
V parametr args peredaetsya massiv strok - parametrov komandnoj stroki.

Primer: programma, pechatayushchaya svoi argumenty

public class myTop {
  public static void main (String args[]){
    int argc = args.length;

    for (int i = 0; i < argc; i++)
      System.out.println (argc[i]);
  }
}

Aplet  vypolnyaetsya  v kontekste navigatora i ego zhiznennyj cikl
opredelyaetsya sleduyushchimi metodami klassa Applet:

public void init () vyzyvaetsya navigatorom pri zagruzka apleta;
public void start (); vyzyvaetsya navigatorom pri pokaze stranicy;
public void stop (); vyzyvaetsya navigatorom, kogda tot uhodit s  Web-stranicy;
public void destroy (); etot metod prednaznachen dlya osvobozhdenya
          resursov; analog destruktora, no ne vyzyvaetsya avtomaticheski; vsegda
          vyzyvaet stop(); vsegda vyzyvaetsya pri vyhode iz navigatora i pri
          perezagruzke apleta.

Prostejshij aplet vyglyadit tak:

1     import java.awt.Graphics;
2     import java.applet.Applet;

3     class SimpleApplet extends Applet {
4       public void paint (Graphics g) {
5         g.drawString ("Hello world!", 10, 10);
6       }
7     }

Metod public void paint (Graphics g) (stroki  4-6)  opredelyaet,
kak  aplet  pererisovyvaet sebya v tot moment, kogda okonnyj me-
nedzher posylaet WWW-navigatoru zapros na pererisovku.

Vklyuchenie apleta v WWW-stranicu proizvoditsya sleduyushchim obrazom.
V yazyke HTML 2.0 predusmotreny special'nye konstrukcii 
i . Pervaya iz nih zadaet imya zagruzhaemogo klassa i  raz-
mery  oblasti v okne navigatora, vydelyaemoj apletu. Konstrukciya
 sluzhit dlya peredachi informacii s WWW-stranicy v tu sre-
du, v kotoroj budet vypolnyat'sya aplet.

Nizhe priveden prostoj primer vkllyucheniya apleta v WWW-stranicu.




Esli vy vidite etot tekst, to vash navigator ne podderzhivaet Java

Poskol'ku WWW-navigatory ignoriruyut neizvestnye konstrukcii, v navigatore, ne podderzhivayushchem Java, budet viden tekst -------------------------------------------------------------------------- Esli vy vidite etot tekst, to vash navigator ne podderzhivaet Java -------------------------------------------------------------------------- Oprosit' znacheniya, peredavaemye s pomoshch'yu konstrukcii , mozhno sleduyushchim obrazom: public void init () { String fontname = getParameter ("name"); String fontSizestring = getParameter ("size"); int theSize = Int.parseInt (fontSizeString); . . . }

    4.2.2. Java-mashina

Java-kompilyator perevodit transliruet ishodnye teksty Java- programm v kody Java-mashiny. Voobshche govorya, Java-mashina yavlyaet- sya virtual'noj v tom smysle, chto ona ne sushchestvuet v vide re- al'nyh mikroshem i drugih ustrojstv, a predstavlyaet soboj prog- rammnyj emulyator, vypolnyayushchijsya na kakoj-libo tradicionnoj ap- paratnoj platforme. Veroyatno, uzhe v blizhajshee vremya sleduet ozhidat' poyavleniya i vse bolee shirokogo rasprostraneniya i pryamyh apparatnyh realizacij Java-mashiny. Ideya yazykovyh processorov, razumeetsya, ne nova. Izvestny popyt- ki vnedrit' tak nazyvaemyj P-kod v kachestve standarta na re- zul'tat raboty Paskal'-kompilyatorov; v svoe vremya mnogo pisali o yazyke i mashine Fort; byla vypolnena apparatnaya realizaciya re- fal-mashiny, i spisok etot mozhno prodolzhat' i prodolzhat'. V kontekste proekta Java specifikaciya virtual'noj mashiny yavlya- etsya chast'yu kompleksa mer, napravlennyh na standartizaciyu Java- sredy i na obespechenie ee nezavisimosti ot apparatno-programm- noj platformy. Krome togo, sleduet uchityvat' tu specificheskuyu sredu, v kotoroj dolzhny gotovit'sya i rabotat' Java-programmy. Esli Web-stranica soderzhit Java-aplety, eti aplety budut pere- davat'sya po seti. Znachit, ves'ma zhelatel'no, chtoby Java-kod byl kak mozhno bolee kompaktnym; v protivnom sluchae vremya zagruzki stranicy riskuet stat' razdrazhayushche bol'shim. Sootvetstvenno, ar- hitektura i sistema komand Java-mashiny proektirovalis' takim obrazom, chtoby vsyacheski sposobstvovat' kompaktifikacii koda. S drugoj storony, format komand Java-mashiny dovol'no prost (obych- no komandy ne imeyut operandov i zanimayut odin bajt), poetomu vozmozhna ee (mashiny) effektivnaya emulyaciya. Po etoj prichine programmy, podgotovlennye dlya vypolneniya na Java-mashine, chasto nazyvayut bajt-kodami. My opishem arhitekturu Java-mashiny dovol'no kratko. Posleduyushchee izlozhenie opiraetsya na versiyu specifikacij 1.0.

    4.2.2.1. Tipy dannyh, podderzhivaemye Java-mashinoj

Java-mashina podderzhivaet sleduyushchie standartnye tipy dannyh: - byte - odnobajtnye celye cisla v dvoichnom dopolnitel'nom kode; - short - dvuhbajtnye celye chisla; - int - chetyrehbajtnye celye chisla; - long - vos'mibajtnye celye chisla; - float - chetyrehbajtnye veshchestvennye chisla v formate IEEE-754; - double - vos'mibajtnye veshchestvennye chisla; - char - dvuhbajtnye bezznakovye simvoly v kodirovke Unicode. Poskol'ku Java-kompilyator v sostoyanii proverit' tipy dannyh vo vremya translyacii, pri vypolnenii net nuzhdy associirovat' dopol- nitel'nuyu informaciyu so znacheniyami standartnyh tipov. Vmesto etogo generiruyutsya komandy, rasschitannye na obrabotku dannyh opredelennyh tipov. Naprimer, dlya slozheniya celyh chisel budet sgenerirovana komanda iadd, a dlya slozheniya veshchestvennyh chisel dvojnoj tochnosti - komanda dadd. Znacheniya tipa boolean predstavlyayutsya odnobajtnymi celymi chisla- mi i obrabatyvayutsya posredstvom sootvetstvuyushchih komand. Imeetsya eshche dva standartnyh tipa dannyh: - object - chetyrehbajtnaya ssylka na ob容kt (massivy traktuyutsya kak ob容kty); - returnAddress - chetyrehbajtnyj adres vozvrata iz metoda. Specifikacii Java-mashiny ne opisyvayut vnutrennej struktury ob- 容ktov. V realizacii Sun Microsystems znachenie tipa object uka- zyvaet na opisatel', hranyashchij dve ssylki - na tablicu metodov i na dannye ob容kta. Vozmozhny i drugie predstavleniya. Java-mashina yavlyaetsya 32-razryadnoj. Bolee dlinnye znacheniya (long, double) predstavlyayutsya kak para chetyrehbajtnyh velichin. Ne ogovorivaetsya, v kakom poryadke raspolagayutsya elementy pary; bolee togo, verifikator bajt-kodov obyazan vyyavlyat' i otvergat' programmy, pytayushchiesya "vruchnuyu" sostavlyat' dlinnye znacheniya.

    4.2.2.2. Registry

V Java-mashine dolzhny podderzhivat'sya sleduyushchie registry: - pc - schetchik komand; ukazyvaet na kod operacii dlya komandy, kotoraya budet vypolnyat'sya sleduyushchej. - vars - bazovyj registr dlya dostupa k lokal'nym peremennym te- kushchego metoda. - optop - ukazatel' na vershinu steka operandov. Java-mashina yav- lyaetsya stekovoj, poetomu osnovnaya chast' komand beret operandy iz steka i tuda zhe pomeshchaet rezul'tat. - frame - ukazatel' na strukturu, soderzhashchuyu okruzhenie vremeni vypolneniya. V svoyu ochered', okruzhenie vremeni vypolneniya ispol'zuetsya dlya realizacii treh celej: dinamicheskoj zagruzki, vozvrata iz meto- dov i obrabotki isklyuchitel'nyh situacij. Dlya obespecheniya dinamicheskoj zagruzki, okruzhenie vremeni vypol- neniya soderzhit ssylki na tablicu sivmolov tekushchego metoda i te- kushchego klassa. Pered nachalom vypolneniya metoda vypolnyaetsya re- daktirovanie ego vneshnih svyazej (nastrojka ssylok na vneshnie metody i vneshnie dannye). Podobnaya pozdnyaya nastrojka ssylok de- laet sgenerirovannyj kod ustojchivym po otnosheniyu k izmeneniyam vo vneshnih klassah. Dlya obespecheniya normal'nogo vozvrata iz metodov vypolnyaetsya vosstanovlenie registrovogo okruzheniya vyzyvayushchego metoda. Dlya obrabotki isklyuchitel'nyh situacij Java-mashina vypolnyaet prohod po steku vyzova metodov i otyskivaet samuyu vnutrennyuyu konstrukciyu catch, obrabatyvayushchuyu sluchivsheesya sobytie. V principe okruzhenie vremeni vypolneniya mozhet soderzhat' dopol- nitel'nuyu informaciyu, neobhodimuyu, naprimer, dlya otladki, no v specifikaciyah Java-mashiny eto ostavleno na usmotrenie avtorov realizacii.

    4.2.2.3. Sbor musora

Dlya sozdaniya ob容ktov vo vremya vypolneniya vydelyaetsya oblast' dinamicheskoj pamyati. YAzyk Java rasschitan na to, chto etu oblast' obsluzhivaet sborshchik musora, poskol'ku v yazyke net sredstv dlya osvobozhdeniya pamyati. Kak imenno rabotaet sborshchik musora, opre- delyaetsya realizaciej Java-mashiny.

    4.2.2.4. Sistema komand Java-mashiny

Komanda Java-mashiny sostoit iz odnobajtnogo koda operacii, za kotorym sleduyut operandy (esli takovye imeyutsya). Mozhno vydelit' sleduyushchie gruppy komand: - komandy zagruzki konstant i peremennyh v stek operandov. Dlya kazhdogo tipa dannyh imeyutsya svoi komandy zagruzki. Naprimer, komanda s kodom operacii dload i operandom, zadayushchim smeshchenie, zagruzhaet v stek iz lokal'noj peremennoj veshchestvennoe chislo dvojnoj tochnosti, a komanda aload delaet to zhe dlya ssylki na ob容kt. - komandy zapominaniya dannyh iz steka v lokal'nyh peremennyh. - komandy upravleniya massivami. Naprimer, komanda newarray s operandom, zadayushchim tip elementov, izvlekaet iz steka trebuemyj razmer massiva, sozdaet ego i pomeshchaet v stek ssylku na massiv. Otmetim, chto dlya sozdaniya massivov s elementami-ob容ktami slu- zhit drugaya komanda, anewarray. Za schet podobnoj specializacii dostigaetsya effektivnost' interpretacii Java-programm. - komandy raboty so stekom. K etoj gruppe otnosyatsya komandy, kotorye udalyayut, dubliruyut, menyayut mestami verhnie elementy steka operandov, a takzhe vypolnyayut drugie, bolee slozhnye mani- pulyacii so stekom. - arifmeticheskie komandy. Operandy izvlekayutsya iz steka; tuda zhe pomeshchaetsya rezul'tat. - logicheskie komandy (sdvig, i, ili, isklyuchayushchee ili). - komandy preobrazovaniya k drugomu tipu. - komandy peredachi upravleniya. Naprimer, v komande jsr (perehod na podprogrammu) operandom sluzhit otnositel'nyj adres perehoda; adres komandy, sleduyushchej za jsr, pomeshchaetsya na vershinu steka operandov. Imeyutsya komandy dlya realizacii pereklyuchatelej. - komandy vozvrata iz funkcii. Dlya vozvrata rezul'tatov raznyh tipov ispol'zuyutsya komandy s raznymi kodami operacii. Krome to- go, imeetsya komanda breakpoint, kotoraya ostanavlivaet normal'- nyj hod vypolneniya i peredaet upravlenie obrabotchiku etogo so- bytiya. - komandy manipulirovaniya s polyami ob容ktov (ustanovit'/prochi- tat' obychnoe/staticheskoe pole). - komandy vyzova metodov. Ih chetyre. Komanda invokevirtual vy- zyvaet (virtual'nyj) metod na osnove analiza informacii vremeni vypolneniya. Komanda invokenonvirtual osushchestvlyaet vyzov na os- nove informacii vremeni kompilyacii - naprimer, vyzov metoda ro- ditel'skogo klassa. Komanda invokestatic vyzyvaet staticheskij metod klassa. Nakonec, komanda invokeinterface vyzyvaet metod, predstavlennyj interfejsom. Vypolnenie vseh perechislennyh ko- mand svyazano ne tol'ko s peredachej upravleniya, no i s analizom raznogo roda tablic. - komanda vozbuzhdeniya isklyuchitel'noj situacii - athrow. - prochie ob容ktnye operacii (sozdat' ob容kt, proverit' tip ob- 容kta). - komandy sihronizacii (vojti v kriticheskij interval, vyjti iz nego). My vidim, chto ne sushchestvuet semanticheskogo razryva mezhdu yazykom Java i Java-mashinoj. Kak uzhe otmechalos', eto vazhno dlya kompakt- nosti skompilirovannyh Java-programm i dlya obespecheniya vysokoj skorosti translyacii.

    4.2.3. Java i bezopasnost'

Koncepciya zagruzki ob容ktov po seti prozrachnym dlya pol'zovatelya obrazom stol' zhe privlekatel'na, skol' i opasna. Esli ne predp- rinimat' nikakih mer i ne nakladyvat' nikakih ogranichenij na vozmozhnosti Java-apletov, vhod na lyubuyu Web-stranicu mozhet pri- vesti k nepredskazuemym posledstviyam. K schast'yu, razrabotchiki yazyka Java s samogo nachala udelyali samoe pristal'noe vnimanie voprosam informaciionnoj bezopasnosti. Iz yazyka udaleny mnogie potencial'no opasnye vozmozhnosti, takie kak operator goto ili tip dannyh "ukazatel'". Interpretiruemyj harakter vypolneniya pozvolyaet ne dopustit' vyhoda za granicy massiva, obrashcheniya po pustoj ssylke i t.p. V svoe vremya za po- dobnuyu ostorozhnost' vystupal avtor yazyka Paskal' Niklaus Virt, otmechavshij, chto pri tradicionnom podhode programmist napominaet moryaka, kotoryj nosit spasatel'nyj krug tol'ko na sushe. My, odnako, ne budem podrobno ostanavlivat'sya na "obychnoj" be- zopasnosti i udelim osnovnoe vnimanie vypolneniyu potencial'no vrazhdebnyh apletov. Smezhnyj vopros - proverka podlinnosti aple- tov, snabzhennyh elektronnoj podpis'yu, vidimo, budet reshen v posleduyushchih versiyah Java-sistem. Prezhde vsego, apletam, zagruzhennym po seti, zapreshcheny chteniya i zapis' fajlov iz lokal'noj fajlovoj sistemy, a takzhe vypolnenie setevyh soedinenij so vsemi hostami, krome togo, s kotorogo byl poluchen aplet. Krome togo, takim apletam ne razreshaetsya zapus- kat' programmy na klientskoj sisteme (govorya yazykom OS UNIX, dlya nih nedostupny sistemnye vyzovy fork i exec), im zapreshcheno zagruzhat' novye biblioteki i vyzyvat' programmy, vneshnie po ot- nosheniyu k Java-mashine. Na samom dele, perechislennye ogranicheniya ne yavlyayutsya chast'yu specifikacii Java-sistemy i mogut vypolnyat'sya s bol'shej ili men'shej akkuratnost'yu. Tak, v Netscape Navigator 2.0 chtenie i zapis' lokal'nyh fajlov dejstvitel'no polnost'yu zapreshcheny. V to zhe vremya, sreda razrabotki JDK 1.0 kompanii Sun Microsystems dopuskaet zadanie spiska katalogov, s kotorymi aplety mogut ra- botat'. Bolee tochno, vne razreshennogo spiska katalogov aplet ne mozhet: - proveryat' sushchestvovanie fajlov; - chitat'/pisat'/pereimenovyvat' fajly; - sozdavat' katalogi; - proveryat' atributy fajla - tip, vremya poslednej modifikacii, razmer. CHtoby v JDK sdelat' katalog dostupnym dlya apleta, sleduet po- mestit' v fajl ~/.hotjava/properties stroki vida acl.read=/home/welcome acl.write=/tmp Pered nachalom raboty apletov oni proveryayutsya verifikatorom baj- t-kodov. Verifikator ubezhdaetsya, chto zagruzhennyj aplet soot- vetstvuet specifikaciyam, zadannym pri kompilyacii vyzyvayushchej programmy, chto ne narushen format skompilirovannogo fajla, chto net perepolneniya ili ischerpaniya steka, net nekorrektnyh preob- razovanij tipov, nepravil'nyh dejstvij s registrami i t.p. Vse eti proverki verifikator osushchestvlyaet na osnove analiza potokov dannyh. Osobenno tshchatel'no proveryayutsya konstrukcii finally ob- rabotchikov isklyuchitel'nyh situacij. Sleduet otmetit', chto vernyj vybor balansa mezhdu vozmozhnostyami zagruzhaemyh apletov i bezopasnost'yu klientskoj sistemy yavlyaetsya ochen' tonkim voprosom. Ryad kompanij, naprimer, Argus System Group, predlagayut realizovat' na klientskoj sisteme usilennye mery bezopasnosti, chtoby uspeshno otrazhat' ugrozy so storony vrazhdebnyh apletov bez ogranicheniya svobody dejstvij dlya "blago- nadezhnyh" programm. K sozhaleniyu, predlagaemye resheniya zavisyat ot operacionnoj platformy, chto protivorechit trebovaniyu absolyut- noj perenosimosti Java-programm. Mozhno predpolozhit', chto infor- macionnaya bezopasnost' eshche dolgoe vremya budet ostavat'sya odnim iz samyh slozhnym i spornyh voprosov, kasayushchihsya proekta Java.

    4.2.4. Java WorkShop

V konce marta 1996 goda kompaniya Sun Microsystems ob座avila o vypuske versii 1.0 sredy razrabotki Java WorkShop. U etoj sredy est' dva zamechatel'nyh svojstva: ona polnost'yu napisana na yazy- ke Java i imeet interfejs, vyderzhannyj v Web-stile. Na ris. y1 pokazan vid ekrana pri rabote v Java WorkShop. Ris. y1. Tak vyglyadit ekran pri rabote v Java WorkShop. Sleduet otmetit', chto gipertekstovyj interfejs yavlyaetsya, pozha- luj, naibolee estestvennym dlya instrumental'nyh sred. Bolee to- go, neyavno on davno ispol'zuetsya, naprimer, pri perehode vo vklyuchaemyj fajl ili v mesto oshibki. Principial'no vazhno, chto teper' gipertekst stal yavnoj konceptual'noj osnovoj. Java WorkShop soderzhit polnyj nabor instrumentov, neobhodimyh dlya proektirovaniya, razrabotki, testirovaniya, otladki i sopro- vozhdeniya programm. V ego sostav vhodyat: - Menedzher proektov - instrument organizacii informacii, sos- tavlyayushchej proekt, a takzhe sredstvo specifikacii okruzheniya dlya proekta. - Postroitel' - instrument postroeniya rezul'tiruyushchih programm proekta. Postroitel' vedaet perekompilyaciej fajlov posle vnese- niya izmenenij, vydachej gipertekstovogo spiska soobshchenij ob oshibkah i t.p. - Publikator - instrument podderzhki kollektivnoj raboty nad proektami. Pozvolyaet organizovat' hranilishche proektov, predos- tavlyat' Web-stranicy proektov dlya ispol'zovaniya drugimi prog- rammistami, osushchestvlyat' dostup k proektam kolleg, zadavat' prava dostupa k proektam. - Prosmotrshchik apletov - sredstvo kontroliruemogo vypolneniya Java-programm. - Prosmotrshchik ishodnyh tekstov - instrument izucheniya programm s uchetom ih ob容ktnoj struktury. - Redaktor ishodnyh tekstov. Redaktor integrirovan s drugimi komponentami Java WorkShop, a takzhe s populyarnymi sistemami up- ravleniya versiyami. - Otladchik. Pomimo tradicionnyh vozmozhnostej, otladchik Java WorkShop pozvolyaet kontrolirovat' sostoyanie neskol'kih potokov vypolneniya, chto neobhodimo dlya razvityh Java-programm. Na ris y2 predstavlen obraz ekrana pri rabote v otladchike. Ris. y2. Tak vyglyadit ekran pri rabote s otladchikom Java WorkShop. - Spravochnaya podsistema. Java WorkShop mozhet rabotat' kak na platforme SPARC/Solaris i Intel/Solaris, tak i pod Microsoft Windows 95/NT. Kakih-to oso- byh trebovanij k apparature Java WorkShop ne pred座avlyaet. Dos- tatochno 45 Mb diskovogo prostranstva, 32 (dlya Solaris) ili 16 (dlya Windows) Mb operativnoj pamyati. Zamechatel'no, kak v pravil'no sproektirovannoj sisteme razlich- nye komponenty ne prosto ideal'no podhodyat drug k drugu no i usilivayut moshch' drug druga.

    * 4.3. Svyaz' Java s okruzheniem: okonnyj instrumentarij

    4.3.1. Obshchie polozheniya

Odno iz vazhnyh dostoinstv Java sostoit v tom, chto eto ne tol'ko yazyk, no i standartizovannaya ob容ktno-orientirovannaya sreda vy- polneniya. Lyubopytno prosledit', kak v ramkah Java reshayutsya tra- dicionnye programmistskie problemy. My ostanovimsya na okonnom graficheskom interfejse. Vmeste s razlichnymi priyatnymi (glavnym obrazom dlya pol'zovate- lya) svojstvami, okonnyj interfejs privnosit i dovol'no nepriyat- nye (dlya razrabotchika) problemy. Odna iz nih - eto perenosi- most' prilozhenij mezhdu raznymi platformami. Perenosimost' yavlya- etsya problemoj i bez graficheskogo interfejsa, odnako nalichie takovogo delaet ee mnogokratno slozhnee. Delo v tom, chto kazhdaya okonnaya sreda - eto slozhnyj mir, so svo- imi zakonami, naborom stroitel'nyh blokov i priemov programmi- rovaniya. Motif ne pohozh na MS-Windows i okonnuyu sistemu Macintosh. Po-raznomu predstavlyayutsya primitivnye elementy in- terfejsa, po-raznomu obrabatyvayutsya vneshnie sobytiya, po-raznomu proiszhodit risovanie na ekrane i t.d. Vmeste s tem, po svoej suti okonnaya sreda - prosto ideal'noe pole deyatel'nosti dlya ob容ktnogo programmirovaniya. Dazhe chelove- ku, neiskushennomu v ob容ktno-orientirovannyh metodah proektiro- vaniya, yasno, chto takie veshchi, kak knopki, tekstovye polya, menyu, vpolne zasluzhivayut nazvaniya ob容ktov, kak by eto slovo ni poni- malos'. Inache govorya, vpolne ponyatno, chto takoe "knopka voob- shche", "spisok voobshche" i t.d. Vse eto daet osnovaniya nadeyat'sya, chto s pomoshch'yu ob容ktno-orien- tirovannogo podhoda mozhno poluchit' po-nastoyashchemu vysokourovne- vuyu i perenosimuyu okonnuyu sredu, osnovannuyu na abstraktnyh ti- pah dannyh. Dannaya osobennost' okonnyh sred proyavilas', v chastnosti, v po- yavlenii dovol'no bol'shogo kolichestva razlichnyh klassovyh bibli- otek, "obertyvayushchih" original'nye okonnye sistemy. V kachestve primerov mozhno privesti MFC, OWL, Zink i mnogie drugie. Vot i sredi standartnyh Java-bibliotek prisutstvuet AWT ili Abstract Windowing Toolkit - abstraktnyj okonnyj instrumenta- rij. AWT yavlyaetsya sistemoj klassov dlya podderzhki programmirovaniya v okonnoj srede. Ego "abstraktnost'" proyavlyaetsya v tom, chto vse, zavisyashchee ot konkretnoj platformy, horosho lokalizovano i sprya- tano. V AWT realizovany takie prostye i ponyatnye veshchi, kak knopki, menyu, polya vvoda; prostye i ponyatnye sredstva organiza- cii interfejsa - kontejnery, paneli, menedzhery geometrii. |to horosho vidno na ris. x1. Ris. x1. Osnovnye elementy ierarhii klassov AWT. Vse zavisimosti ot platformy soderzhatsya v vetvi, oboznachennoj kak Peer. Dalee my rassmotrim nekotorye osobennosti AWT, ne pretenduya na polnotu izlozheniya. Nasha cel' - dat' obshchee ppredstavlenie o teh- nologii programmirovaniya graficheskogo okonnogo interfejsa v srede Java.

    4.3.2. Iz chego stroitsya graficheskij interfejs (komponenty i

kontejnery) Esli posmotret' na lyuboe okonnoe prilozhenie, to legko uvidet', chto interfejsnaya chast' sostoit iz ob容ktov, ob容dinennyh v gruppy. V AWT ob容kty nazyvayutsya komponentami (na samom dele oni vse yavlyayutsya naslednikami klassa Component), a gruppy ob- 容ktov realizovany s pomoshch'yu tak nazyvaemyh kontejnerov. Otme- tim, chto lyuboj kontejner - eto tozhe komponenta, poetomu gruppy ob容ktov mogut byt' vlozheny drug v druga. Kak obychno, menyu sto- yat osobnyakom. Ierarhiya komponent pokazana na ris. x2. (Avtorom etogo i dvuh sleduyushchih risunkov yavlyaetsya Charles L. Perkins, clp@home.HarvardSq.com.) Ris. x2. Ierarhiya komponent AWT Na ris. x3 poyasnyayutsya oboznacheniya, ispol'zovannye na ris. x2. K chislu primitivnyh komponent otnosyatsya: - Button - Checkbox - Label - List - ScrollBar - TextArea - TextField Osnovnye kontejnery: - Dialog - FileDialog - Frame - Panel - Window Vzaimodejstvie interfejsnyh komponent s pol'zovatelem realizo- vano s pomoshch'yu apparata sobytij, o kotorom budet rasskazano ni- zhe.

    4.3.3. Kak organizovat' interfejs

My uzhe otmechali, chto interfejs sostoit iz komponent, pomeshchennyh v kontejnery. Odnako, ostaetsya otkrytym vopros o tom, kak raz- meshchat' komponenty drug otnositel'no druga vnutri kontejnera. Naivnyj podhod (prinyatyj, tem ne menee, vo mnogih sistemah) zaklyuchaetsya v zadanii otnositel'nyh koordinat komponent v kon- tejnere. Variacii etogo podhoda sostoyat, kak pravilo, v vozmozh- nosti zadavat' razlichnye edinicy dliny (piksely, tysyachnye dyuj- ma, "dialogovye edinicy"). Nedostatkom podobnoj modeli razmeshche- niya komponent yavlyaetsya to, chto pri perevode prilozheniya na dru- guyu platformu i dazhe na drugoj komp'yuter, vneshnij vid prilozhe- niya menyaetsya ploho predskazuemo. AWT staraetsya reshit' dannuyu problemu sleduyushchim obrazom. Esli nel'zya izbezhat' izmenenij vneshnego vida prilozhenij pri zapuske ih na raznyh platformah, nado postarat'sya hotya by sdelat' eti izmeneniya predskazuemymi i v nekotorom smysle estestvennymi. Dlya provedeniya etoj programmy v zhizn' ispol'zuyutsya ob容kty pod obshchim nazvaniem Layout (raspolozhenie). Layout upravlyaet tem, kak komponenty budut raspolagat'sya vnutri kontejnera, sleduya opredelennym principam ili receptam. Vsego v AWT imeetsya 5 predopredelennyh raspolozhenij: - BorderLayout - CardLayout - FlowLayout - GridLayout - GridBagLayout Ih mestopolozhenie v ierarhii klassov pokazano na ris. x4. Ris. x4. Raspolozheniya i ierarhiya klassov AWT. Raspolozheniya yavlyayutsya pryamymi naslednikami klassa Object i vse realizuyut protokol LayoutManager. Ob容kt tipa LayoutManager soderzhitsya v klasse Container. V klasse Container opredeleny 3 metoda add, prednaznachennye dlya dobavleniya novyh komponent v kontejner. Kuda imenno budet do- bavlena komponenta s pomoshch'yu metoda add, zavisit ot konkretnogo tipa LayoutManager dannogo kontejnera. Dlya zadaniya LayoutManager est' metod setLayout. Rassmotrim kratko, kak rabotayut privedennye vyshe shemy razmeshche- niya.

    4.3.3.1. BorderLayout

BorderLayout delit pryamougol'nyj kontajner na 5 pryamougol'nyh oblastej: sever, yug, zapad, vostok i centr: [Image] Komponenta dobavlyaetsya v sootvetstvuyushchuyu oblast' s pomoshch'yu me- toda add (string, component); Primer. setLayout (new BorderLayout()); buttonN = new Button ("one"); add ("North", buttonN); // ... dobavlenie ostal'nyh knopok

    4.3.3.2. CardLayout

[Image] Kontejner sostoit iz neskol'kih ploskostej. V kazhdyj moment na- verhu tol'ko odna ploskost'. Takim obrazom, CardLayout preds- tavlyaet soboj kak by bloknot so mnogimi stranicami. Ctranicy pomechayutsya s pomoshch'yu strok. Metod dobavleniya komponent k kontejneru: add (string, component); gde string - imya "stranicy", a component - dobavlyaemaya kompo- nenta. Kak pravilo, eti komponenty sami budut kontejnerami (stranica bloknota vryadli budet sostoyat' iz odnoj bol'shoj knop- ki): setLayout (new CardLayout ()); add ("one", create (new FlowLayout ())); add ("two", create (new BorderLayout ())); add ("three", create (new GridLayout (2, 2))); add ("four", create (new BorderLayout (10, 10))); add ("five", create (new FlowLayout (FlowLayout.LEFT, 10, 10))); add ("six", create (new GridLayout (2, 2, 10, 10)));

    4.3.3.3. FlowLayout

FlowLayout realizuet model' postrochnogo zapolneniya kontejnera. Posle zapolneniya odnoj stroki nachinaetsya sleduyushchaya. Pri izmene- nii razmerov kontejnera proishodit pereraspredelenie komponent po strokam. [Image] setLayout (new FlowLayout ()); add (new Button ("OK")); add (new Button ("Cancel")); add (new Button ("Resume")); Novye komponenty dobavlyayutsya v kontejner s pomoshch'yu metoda add (component). Ryady komponent mogut byt' vyravneny vpravo, vlevo, ili centri- rovany.

    4.3.3.4. GridLayout

Kontejner razbivaetsya na kletki. Dlya etogo zadaetsya chislo strok i stolbcov. Pri dobavlenii novyh komponent, kletki zapolnyayutsya po strokam. Vozmozhnost' delat' propuski otsutstvuet. Novye komponenty dobavlyayutsya v kontejner s pomoshch'yu metoda add (component) [Image] Primer. setLayout (new GridLayout (2, 3)); // 2 stroki, 3 stolbca add (new Button ("1")); add (new Button ("2")); add (new Button ("3")); add (new Button ("I")); add (new Button ("II"));

    4.3.3.5. GridBagLayout

GridBagLayout pozvolyaet razdelit' kontejner na neravnye pryamou- gol'nye oblasti. |to dostigaetsya s pomoshch'yu ob容dineniya sosednih kletok v kletki bol'shego razmera. Krome togo, GridBagLayout pozvolyaet zapolnyat' reshetku s propuskami. Konkretnyj algoritm zapolneniya opredelyaetsya ob容ktom klassa GridBagConstraints. V ob容ktah etogo klassa imeetsya bolee 10 parametrov, opredelyayu- shchih razmeshchenie sleduyushchej komponenty. Programma, ispol'zuyushchaya GridBagConstraints, mozhet vyglyadet' sleduyushchim obrazom: GridBagLayout gridbag = new GridBagLayout (); GridBagConstraints c = new GridBagConstraints (); setLayout (gridbag); // Ustanavlivaem harakteristiki c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; . . . Button button1 = new Button ("1"); gridbag.setConstraints (button1, c); add (button1); . . . // zdes' mozhno izmenit' nekotorye ustanovki // ob容kte klassa GridBagConstraints, // naprimer // c.fill = GridBagConstraints.NONE; Button buttonX= new Button ("X"); gridbag.setConstraints (buttonX, c); add (buttonX);

    4.3.4. Sobytiya

V AWT, kak i v drugih okonnyh sredah, sobytiya kak programmnye ob容kty sootvetstvuyut vneshnim sobytiyam. Tipichnyj primer - nazha- tie na knopku, v rezul'tate chego v AWT proishodit sobytie ACTION_EVENT. Takim obrazom, interaktivnaya chast' programm v AWT sootvetstvuet modeli programmy, upravlyaemoj sobytiyami. Drugimi slovami, pri- lozheniya ili aplety dolzhny otslezhivat' sobytiya i obrabatyvat' ih. Rassmotrim podrobnee, kak eto proishodit v AWT. Kazhdyj okonnyj interfejs mozhno rassmatrivat' kak nabor (vozmozhno, vlozhennyh drug v druga) komponent. Kogda proishodit sobytie, svyazannoe s kakim-to elementom interfejsa (naprimer, knopkoj), to vyzyvaet- sya metod handleEvent. Po umolchaniyu etot metod nichego ne delaet, a prosto peredaet sobytie naverh, to est' tomu ob容ktu, v koto- rom soderzhitsya iniciator sobytiya (naprimer, ob容mlyushchemu oknu). Takim obrazom, esli sobytie nikto ne perehvatyvaet, ono dosti- gaet frejma (esli eto prilozhenie) ili apleta. |tot bazovaj mehanizm obrabotki sobytij pri naivnom primenenii navyazyvaet programmistu odnu iz dvuh modelej obrabotki sobytij. - Vo-pervyh, mozhno pozvolit' vsem sobytiyam vsplyvat' do samogo verha i uzhe na urovne frejma pisat' metod, kotoryj zanimaetsya razborom i obrabotkoj sobytij. - Vo-vtoryh, mozhno sozdat' mnozhestvo specializirovannyh klas- sov, v kazhdom iz kotoryh pereopredelen metod handleEvent. Oba etih krajnih podhoda nebezuprechny. Pervyj sposobstvuet na- pisaniyu monolitnyh programm, vtoroj privodit k ochen' bol'shomu chislu klassov. V real'noj zhizni ispol'zuetsya kompromissnaya ideologiya - handleEvent pereopredelyaetsya dlya sostavnyh ob容ktov, ob容dinyayu- shchih neskol'ko elementov interfejsa i otvechayushchih za yasno oprede- lennuyu chast' raboty prilozheniya (naprimer, raznogo roda dialo- gi). Krome togo, vozmozhny i drugie modeli obrabotki sobytij, naprav- lennye na luchshee otdelenin logiki programmy ot ee interfejsa. V kachestve odnogo iz primerov realizacii al'ternativnoj modeli mozhno ukazat' paket "The Command Class for AWT objects", koto- ryj napisal Jan Newmarch, jan@ise.canberra.edu.au.

    4.3.5. Metody klassa Component, svyazannye s obrabotkoj sobytij

Nizhe perechisleny metody klassa Component, svyazannye s obrabot- koj sobytij. - postEvent(). |tot metod, kak pravilo, vyzyvaetsya avtomatiches- ki pri nastuplenii sootvetstvuyushchego sobytiya. - Obrabatyvayutsya sobytiya pri pomoshchi metoda handleEvent(). Po umolchaniyu etot metod, v zavisimosti ot tipa sobytiya, vyzyvaet odin iz specializirovannyh obrabotchikov sobytij, takih kak - - action() - - keyUp() - - mouseDown() - - gotFocus() i t.d. Metod handleEvent() mozhet byt' pereopredelen. V etom sluchae, kak pravilo, vsya obrabotka sootvetstvuyushchego sobytiya budet pro- ishodit' imenno v etom metode, odnako, esli handleEvent() vozv- rashchaet false, to vyzyvaetsya handleEvent() dlya kontejnera, so- derzhashchego dannuyu komponentu. Sobytiya v AWT predstavlyayutsya s pomoshch'yu ob容ktov klassa Event, v kotorom opredeleny sleduyushchie peremennye: public Object target; // iniciator sobytiya public long when; // vremya, kogda sobytie proizoshlo public int id; // tip sobytiya(KEY_PRESS, MOUSE_DOWN...) public int x; // koordinaty public int y; // kursora public int key; // kod klavishi public int modifiers;// kod modifikatora (control, shift ...) public Object arg; // vspomogatel'nye dannye public Event evt; // pole dlya soedineniya sobytij v spiski Privedem tipichnyj primer obrabotki sobytij, kogda vse oni obra- batyvayutsya na verhnem urovne (v dannom sluchae na urovne aple- ta). class MyApplet extends Applet { . . . public boolean action( Event evt, Object arg) { . . . if ((ev.target instanceof Button) && arg.equals ("OK")) { // Vypolnit' sootvetstvuyushchie dejstviya . . . return true; } else { // Drugie sluchai . . . } . . . return false; } . . . } V etom primere, esli iniciator sobytiya imeet tip Button s ime- nem "OK", to vypolnyayutsya sootvetstvuyushchie dejstviya i vozvrashchaet- sya znachenie true, to est' sobytie dal'she ne peredaetsya. Drugoj sposob obrabotat' sobytie zaklyuchaetsya v sozdanii specia- lizirovannoj komponenty. Primer. class OKButton extends Button { . . . public boolean action (Event e, Object arg) { // Vypolnit' sootvetstvuyushchie dejstviya . . . return true; } } My vidim, naskol'ko gluboko produmana v proekte Java svyaz' s operacionnym okruzheniem. Udalos' dostich' udachnogo sochetaniya bo- gatstva vozmozhnostej s perenosimost'yu.

    5. Joe - tehnologiya svyazyvaniya Java-programm

s ob容ktnymi biznes-prilozheniyami Vyshe, v razdele "Java, Joe i NEO", my pisali o tom, chto novyj produkt kompanii SunSoft - Joe - prizvan osushchestvlyat' svyaz' mezhdu klientskimi komponentami, napisannymi na yazyke Java, i ob容ktnymi serverami prilozhenij, sozdannymi v srede NEO. Pri etom Joe beret na sebya vse (ili pochti vse) tehnicheskie proble- my, svyazannye s rabotoj v raspredelennoj ob容ktnoj srede, obes- pechivaya v to zhe vremya dlya Java-programm polnocennoe vzaimodej- stvie s proizvol'nymi ob容ktnymi servisami. V predydushchih vypuskah Jet Info byla opublikovana shutlivaya "|vo- lyuciya programmista". My dobavim k nej eshche dva razdela. Pervyj iz privodimyh nizhe primerov napisan na yazyke Java i mozhei is- pol'zovat'sya v sostave obychnyh, lokal'no rabotayushchih apletov. 1 import java.awt.Font; 2 import java.awt.Color; 3 public class JAVAhello extends java.applet.Applet { 4 Font f = new Font ("TimesRoman", Font.BOLD, 36); 5 public void init () { 6 resize (150, 25); 7 } 8 public void paint (Graphics g) { 9 g.setFont (f); 10 g.setColor (Color.blue); 11 g.drawString ("Hello, World!", 50, 25); 12 } 13 } Teper' modificiruem programmu dlya Joe, chtoby obespechit' vozmozh- nost' raboty v srede klient/server. 1 import sunw.services.*; 2 import java.awt.Graphics; 3 import java.awt.Font; 4 import java.awt.Color; 5 public class JOEhello extends sunw.services.JOEApplet { 6 sunw.corba.ObjectRef obj; 7 Hello.HelloWorldRef hiThere; 8 Font f = new Font("TimesRoman", Font.BOLD, 36); 9 public void init () { 10 super.init (); 11 resize (150, 25); 12 obj = find ("HelloWorldServer"); 13 hiThere = Hello.HelloWorldStub.narrow (obj); 14 } 15 public void paint (Graphics g) { 16 g.setFont (f); 17 g.setColor (Color.red); // Poluchim stroku iz udalennogo ob容kta, realizovannogo na C++, // i vyvedem ee. 18 g.drawString (hiThere.sayHello (), 50, 25); 19 } 20 } Poyasnim smysl novyh strok, poyavivshihsya vo vtorom variante prog- rammy. V stroke 1 importiruetsya opisanie predostavlyaemyh ob容ktnyh servisov. V stroke 5 ob座avlyaetsya, chto klass Hello budet naslednikom JOEApplet. V stroke 6 deklariruetsya obobshchennaya (ne tipizirovannaya) ssylka na NEO-ob容kt. Ona budet ispol'zovana dlya sohraneniya rezul'tata poiska ob容kta po imeni. V stroke 7 opisana tipizirovannaya ssylka na NEO-ob容kt, kotoraya budet ispol'zovat'sya dlya manipulirovaniya udalennym ob容ktom (v chastnosti, dlya vyzova metodov) sredstvami yazyka Java. V stroke 12 my poluchaem ot sluzhby imen NEO ssylku na nuzhnyj nam servernyj ob容kt. V stroke 13 vypolnyaetsya operaciya privedeniya obobshchennoj ssylki k tipizirovannomu vidu. Nakonec, v stroke 18 vypolnyaetsya vyzov metoda udalennogo ob容k- ta, napisannogo, voobshche govorya, ne na yazyke Java (naprimer, na C++). Vprochem, vid etogo operatora ne zavisit ni ot udalennos- ti, ni ot yazyka realizacii ob容kta. Process razrabotki programm v srede Joe dovol'no prost. On sos- toit iz sleduyushchih etapov: - Translyaciya interfejsa k NEO-ob容ktam, napisannogo na yazyke IDL (Interface Definition Language), v klass na yazyk Java. |tot etap podderzhan vhodyashchim v sostav Joe kompilyatorom IDL - Java. Rezul'tat translyacii soderzhit surrogatnye metody, kotorye vo vzaimodejstvii s brokerom ob容ktov obespechivayut vzaimodejstvie s udalennymi ob容ktami, ne otlichayushcheesya ot lokal'nogo sluchaya. V svoyu ochered', broker ob容ktov, vhodyashchij v sostav Joe, prozrach- nym dlya klientskoj storony obrazom zagruzhaetsya v WWW-navigator vmeste s Java-apletami. - Napisanie klientskogo koda na yazyke Java s ispol'zovaniem sgenerirovannogo interfejsa i sredstv Joe dlya vzaimodejstviya s udalennymi ob容ktami. Dal'she Java-programma kompiliruetsya i vypolnyaetsya obychnym obra- zom. Podcherknem, chto opisannaya ob容ktnaya sreda obespechivaet polno- cennoe, dvustoronnee vzaimodejstvie mezhdu klientom i serverom. V chastnosti, udalennye servernye ob容kty mogut vyzyvat' metody v ob容ktah-klientah. Dlya obespecheniya etoj vozmozhnosti v sostave Joe imeetsya translyator Java-klassov v IDL-interfejsy.

    6. Zaklyuchenie

Intranet i Java - vot dva klyuchevyh slova, simvoliziruyushchih sov- remennyj etap razvitiya informacionnyh tehnologij. Intranet poz- volyaet peresmotret' podhod k pol'zovaniyu informacionnymi resur- sami, chto v ogromnoj stepeni uvelichivaet proizvoditel'nost' truda otdel'nyh rabotnikov i kompanij v celom. Krome togo, teh- nologiya Intranet pozvolyaet dobit'sya nevidannoj ranee masshtabi- ruemosti - ot lokal'noj seti do Internet. Java snimaet ogranicheniya Web-servisa, delaya poslednij interak- tivnym i ob容ktno-orientirovannym. Java vvodit novyj - absolyut- nyj - standart na perenosimost' programmnogo obespecheniya. Pri- mechatel'no, chto besprecedentnye po svoej moshchi vozmozhnosti vvo- dyatsya pri polnom sohranenii informacionnoj bezopasnosti. V sochetanii s produktami Sun Microsystems - Joe i NEO - Java obespechivaet rasprostranenie koncepcii Intranet na proizvol'nye servisy, chto otkryvaet real'nuyu vozmozhnost' sozdaniya korpora- tivnyh informacionnyh sistem novogo pokoleniya. ------------------ Artur van Hoff poluchil obrazovanie v Gollandii, zatem rabotal v vedushchih evropejskih komp'yuternyh kompaniyah. V techenie treh let, nachinaya s 1993 goda, rabotal v Sun Microsystems. Artur van Hoff prinimal uchastie v razrabotke yazyka Java, v proektirovanii programmnogo interfejsa dlya prilozhenij na Java, im napisan per- vyj Java-kompilyator na yazyke Java. V 1996 godu on i ego kollegi Semi SHajo i Kim Poleze obrazovali nezavisimuyu kompaniyu s namereniem razrabatyvat' programmnoe obespechenie na Java. Artur van Hoff prinimaet aktivnoe uchastie v populyarizacii Java, on uchastvuet v naibolee izvestnyh konferenciyah i yavlyaetsya avto- rom ryada statej i gotovyashchejsya k izdaniyu vesnoj 1996 goda knigi "Hooked on Java". Vopros. Internet, Web i Java predstavlyayut soboj sdvig paradigmy v informacionnyh tehnologiyah. Obshchestvennaya reakciya na etot sdvig ne imeet precendenta v komp'yuternoj industrii - vedushchie kompanii ob座avili o podderzhke Java, na etu temu v komp'yuternoj i delovoj presse bylo opublikovano neveroyatnoe kolichestvo sta- tej, stoimost' akcij teh kompanij, kotorye svyazany s etimi teh- nologiyami, rezko podskochila, tehnicheskie rukovoditeli bankov i krupnyh korporacij podderzhivayut primenenie Java v pilotnyh pro- ektah. V to zhe vremya vse sushchestvuyushchie segodnya prilozheniya etih tehnolo- gij ogranicheny v osnovnom nebol'shimi zadachami, takimi kak mar- keting v Internet, rasprostranenie informacii, Java-igry i t.d. I dazhe predpolagaemye v budushchem prilozheniya ne otlichayutsya radi- kal'noj noviznoj. CHto zhe osobennogo v etih tehnologiyah, chem mozhno na samom dele ob座asnit' te reakciyu i interes, kotorye my mozhem nablyudat' se- godnya? Otvet. Sovreshenno ochevidno, chto Java i Internet predstavlyayut soboj celyj mir novyh vozmozhnostej dlya komp'yuternoj industrii, odnako sushchestvuyushchie segodnya prilozheniya poka ostayusya prostymi, potomu chto eshche net sootvetstvuyushchego opyta v reshenii nekotoryh vnutrennih problem. Tem ne menee, rynok ochen' bystro sdvigaetsya v napravlenii etogo novogo mira, ezhednevno ob座avlyayutsya novye produkty i tehnologii. Imenno eto i svidetel'stvuet o tom, chto Java i Internet predstavlyayut soboj ogromnyj sdvig paradigmy, sozdayushchij novye vozmozhnosti. |to sobytie sravnimo po masshtabu s poyavlenie perosnal'nyh komp'yuterov, no segodnya ono zahvatilo vseh gorazdo bystree. V chem zhe specifika Java i Internet? YA dumayu, chto oni v sostoya- nii obespechit' komp'yuternoj industrii i pol'zovatelyam imenno to, chego te vsegda ozhidali: prostoj dostup k neogranichennym ob- 容mam informacii i prilozhenij. Vopros. Kak lyubaya tehnologiya, Java imeet soyuznikov i opponen- tov. Kto, po Vashemu mneniyu, predstavlyaet naibol'shuyu opasnost' dlya budushchego Java (produkt, kompaniya ili kto-to lichno)? Kakovy mogut byt' otvetnye konkuriruyushchie nachinaniya opponetov Java? Otvet. Naibol'shaya opasnost' sostoit v tom, chto v blizhajshie gody my dolzhny prijti k novoj srede, celikom napisannoj na Java, no s bibliotekami ot raznyh postavshchikov. |to znachit, chto my polu- chim lish' novyj, uluchshennyj yazyk realizacii i nichego bolee. Za- dacha zhe sostoit v tom, chtoby sozdat' obshcheprinyatuyu sredu, ne za- visyashchuyu ot platformy. V to zhe vremya, bylo by glupo s moej storony, buduchi stronnikom Java, delit'sya s moimi opponentami ideyami o tom, kak stroit' ataku na Java, ne tak li? Vopros. Kakim budet vliyanie sdviga komp'yuternoj paradigmy, predstavlennoj Internet, Web i Java, na osnovnyh dejstvuyushchih lic tekushchej pradigmy (IBM, Sun, HP, DEC, Compaq, Oracle i dru- gih)? Otvet. V sovremennyh usloviyah pokupka komp'yutera privodit k po- zhiznennoj neobhodimosti dlya vladel'ca pokupat' programmnoe obespechenie u odnogo postavshchika. |to ne mozhet dlit'sya beskonech- no. Esli vse komp'yutery smogut vypolnyat' lyuboe programnoe obes- pechenie na Java, to zamok, v vide privyazannosti k opredelennoj platforme, budet snyat i takie monopolisty, kak Microsoft, budut vynuzhdeny srazhat'sya na ravnyh s bolee melkimi firmami. Takim obrazom budet vyrovneno igrovoe pole i vozniknet sreda s bol'- shimi vozmozhnostyami dlya konkurencii, a rezul'tatom, v konechnom itoge, budut produkty luchshego kachestva, v bol'shej stepeni ori- entirovannye na potrebitelya. Vopros. Rossiya, naryadu s Kitaem i Indiej, - odna iz stran, ho- rosho izvestnyh vysokim professinal'nym urovnem programmistov. K sozhalaeniyu, rossijskie programmisty opozdali k pervoj volne "garazhnyh komp'yuterov" v nachale 80-h godov. Zatem nastupila po- losa dominirovaniya na rynke bol'shih kompanij, popast' na rynok i dobit'sya kakih-to uspehov stalo prakticheski nevozmozhno. SHiro- ko rasprostraneno mnenie o tom, chto s prihodom Java vozniknet novaya volna "garazhnogo programmirovaniya", i v nej smogut priyat' uchastie i rossijskie programmisty. Kakoe, po vashemu mneniyu, napravlenie v programmnyh produktah i prilozheniyah na Java nai- bolee perspektivno dlya "garazhnyh programmistov"? Otvet. Imenno segodnya spros na Java-programmistov chudovishchen. Global'nost' Internet daet lyubomu programmistu vozmozhnost' pre- tendovat' na uchastie v lyubom proekte, v lyuboj chasti sveta na ravnyh. CHto nam real'no nuzhno, tak eto vsemirnye organizacii razrabotchikov, kotorye pomogali by otdel'nym programmistam uchastovat' v raznoobraznyh proektah. Vopros. Kakie novye tehnologii privneset s soboj Java? Otvet. Poyavlenie novogo yazyka daet vozmozhnost', priobretya novyj opyt, sproektirovat' zanovo sushchestvuyushchie prikladnye programmnye interfejsy, naprimer, dlya 3D-programmirovaniya. Ispol'zuya Java, mozhno postroit' ob容ktno-orientirovannye i mnogopotokovye 3D- biblioteki, kotorye na drugih yazyah realizovat' slozhno. Sushchest- vuyushchie biblioteki sostoyat iz soten vyzovov funkcij i poetomu imi slozhno upravlyat'. Esli perepisat' ih na Java, to 3D-prog- rammirovanie stanet namnogo dostupnee dlya ryadovyh programmis- tov. Vopros. Segodnya ob Internet, Web i Java pishut mnogie, i komp'yu- ternye professionaly, i zhurnalisty. Vy - odin iz osnovnyh uchastnikov proekta Java i obladaete unikal'noj vozmozhnost'yu uvidet' voznikayushchie pri etom problemy. Est' li nechto sushchestven- noe, chto drugie lyudi upuskayut ili nedoponimayut v etih tehnolo- giyah, v ih vliyanii na komp'yuternuyu industriyu i na nashu zhizn' voobshche? Otvet. Pozhalj glavnoe, chego ne hvataet, tak eto vostorzhennosti po otnosheniyu k Java. Poyavlenie novogo universal'no yazyka dlya Internet - gigantskij proryv vpered. Otkryvayushchiesya vozmozhnosti mozhno sravnit' tol'ko s poyavleniem personal'nyh komp'yuterov. Imenno poetomu my reshili ujti iz Sun dlya togo, chtoby sozdat' sobstvennuyu firmu i pisat' programmnoj obespecheniya na Java. Vopros. Netscape i Microsoft boryutsya za liderstvo na rynke Web- navigatorov. Netscape vladeet 70% etogo rynka, a Microsoft - glavnyj igrok na rynke programmnogo obespecheniya dlya personal'- nyh komp'yuterov. Sovershenno ochevidno, chto v etoj bitve dlya tret'ej kompanii mesta ne ostaetsya. V to zhe vremya Sun razraba- tyvaet HotJava - svoj sobstvennyj Web-navigator. Mozhet byt', sushchestvuet chto-to takoe, chego ni Netscape, ni Microsoft ne vi- dyat segodnya ili v budushchem, chto obespechit Sun pobedu? Otvet. Kak byvshij rukovoditel' proekta HotJava, ya chuvstvuyu, chto u HotJava est' horoshie shansy stat' znachitel'noj siloj v Internet. I Netscape Navigator, i Internet Explorer stanovyatsya ochen' slozhnymi, oni bolee ne sootvestvuyut prostym zaprosam srednih pol'zovatelej. S navigatorom HotJava Sun vozvrashchaet si- tuaciyu na zemlyu, predlagaya produkt, polnost'yu napisannyj na Java. Imenno blagodarya prostote i vozmozhnosti dlya rasshireniya, osnovannyh na ispol'zovanii Java, on priobretet znachitel'nye preimushchestva po sravneniyu s konkurentami. Vopros. CHto stanet sleduyushchej DESTVITELXNO VELIKOJ VESHCHXYU v in- formacionnyh tehnologiyah posle Internet, Web i Java? Otvet. Poka Internet - eto ustrojstvo dlya rasprostraneniya in- formacii. Sleduyushchaya revolyuciya proizojdet togda, kogda v Internet vojdut tehnologii dlya kommunkacij v real'nom vremeni, takie kak telefoniya, video i virtual'naya real'nost'. Razvitie idet ochen' bystro i zhdat' pridetsya ne tak uzh dolgo! Vopros. Vash lyubimyj sort kofe? Otvet. Uzh konechno ne OLE!

Last-modified: Tue, 21 May 1996 18:44:14 GMT
Ocenite etot tekst: