Koti / Turvallisuus / Java-ohjelmointikieli luotiin. Johdatus Javaan. Java:n edut ohjelmointikielenä

Java-ohjelmointikieli luotiin. Johdatus Javaan. Java:n edut ohjelmointikielenä

Java kieli. Johdanto.

Pitkään oli vaikea kuvitella tietokonelehteä ilman Java-kieltä käsittelevää artikkelia. Jopa sellaiset suositut sanomalehdet ja aikakauslehdet kuin The New York Times, The Washington Post ja Business Week kirjoittivat hänestä.

On mahdotonta muistaa, että National Public Radio olisi koskaan omistanut kymmenen minuutin ohjelman jollekin ohjelmointikielelle. Se, onko tämä hyvä vai huono, riippuu näkökulmasta. 100 miljoonan dollarin investointi tuotantoon ohjelmisto luotu käyttämällä tiettyä ohjelmointikieltä?! CNN, CNBC ja muut tiedotusvälineet ovat puhuneet ja ovat edelleen puhuneet siitä, kuinka Java pystyy ja tulee tekemään sen.

Tämä kirja on kuitenkin tarkoitettu vakaville ohjelmoijille, ja koska Java on vakava ohjelmointikieli, meillä on paljon käsiteltävää. Emme siis sukeltaa mainoslupausten analysointiin ja yritämme selvittää, mikä niissä on totta ja mikä fiktiota. Sen sijaan kuvaillaan Java-kieltä riittävän yksityiskohtaisesti ohjelmointikielenä (mukaan lukien tietysti ne ominaisuudet, jotka mahdollistavat sen käytön Internetissä työskentelyssä, mikä itse asiassa aiheutti niin paljon mainoshypeä). Sen jälkeen yritämme erottaa todellisuuden fantasiasta selittämällä, mitä Java-kieli voi tehdä ja mitä ei.

Aluksi mainoslupausten ja Java-kielen todellisten mahdollisuuksien välillä oli kuilu. Kypsyessään teknologiasta tuli vakaampi ja luotettavampi, ja odotukset putosivat kohtuulliselle tasolle. Java-kieltä käytetään nyt yhä enemmän "väliohjelmistojen" luomiseen, jotka kommunikoivat asiakkaiden ja palvelinresurssien (kuten tietokantojen) välillä.

Vaikka nämä tärkeät sovellukset eivät ole hämmästyttäviä, Java-kieli on osoittautunut hyödyllisimmäksi tällä alueella koneriippumattomuutensa, monisäikeisyyden ja vansiosta. Lisäksi Java-kieli on ottanut johtoaseman sulautetuissa järjestelmissä, ja siitä on tullut de facto standardi kannettaville laitteille, virtuaalikioskille, autojen tietokoneille ja vastaaville. Kuitenkin ensimmäiset yritykset kirjoittaa uudelleen laajalti käytettyjä Java-ohjelmia henkilökohtaiset tietokoneet eivät onnistuneet - tuloksena saadut sovellukset osoittautuivat vähätehoisiksi ja hitaiksi. Uuden version myötä osa näistä ongelmista on ratkaistu, mutta on myönnettävä, että käyttäjiä ei yleensä kiinnosta ollenkaan, millä kielellä heidän ostamansa ohjelmat on kirjoitettu. Uskomme, että Java-kielen tärkeimmät edut tulevat uudentyyppisten laitteiden ja sovellusten luomisesta, ei olemassa olevien ohjelmien uudelleenkirjoittamisesta.

Java-kieli ohjelmointityökaluna

Kuinka Java-ohjelmointikieli on ylittänyt mainoslupauksensa. Epäilemättä se on yksi parhaista kielistä, joita vakavat ohjelmoijat voivat käyttää. Javalla on potentiaalia olla loistava ohjelmointikieli, mutta nyt on luultavasti liian myöhäistä. Kun uusi ohjelmointikieli ilmestyy, tulee välittömästi esiin kiusallinen ongelma sen yhteensopivuudesta aiemmin luotujen ohjelmistojen kanssa. Lisäksi, vaikka näihin ohjelmiin voidaan tehdä muutoksia ilman, että niiden tekstiä peukalotettaisiin, yleisön niin lämpimästi tervetulleeksi vastaanottaman kielen, kuten Java-kielen, tekijöiden on vaikea sanoa suoraan: "Kyllä, saatamme ovat tehneet virheen kehittäessään versiota X, mutta versio Y on parempi." Tästä johtuen lisäparannuksia odotellessa meidän on todettava, että Java-kielen rakenne ei muutu merkittävästi lähitulevaisuudessa.

Ilmeinen kysymys on: Miten Java-kieltä on parannettu?". Osoittautuu, että tätä ei tehty parantamalla itse ohjelmointikieltä, vaan muuttamalla perusteellisesti Java-kielellä kirjoitettujen ohjelmien kirjastoja. Sun Microsystems on muuttanut kaiken: yksittäisten kirjastotoimintojen nimistä (tekemällä niistä mielekkäämpiä) ja graafisten moduulien toimintatavat (muuttamalla tapahtumien käsittelyä ja osittain kirjoittamalla uudelleen työohjelmia) ja päätyen kielen uusien ominaisuuksien luomiseen, kuten tulostustoimintoihin, joita ei ollut Java 1.0:ssa. paljon hyödyllisempi ohjelmointialusta kuin kaikki aiemmat versiot Java kieli.

Microsoft on julkaissut oman tuotteensa nimeltä J++, joka liittyy Java-kieleen. J++-kieltä tulkitsee Java-virtuaalikoneen kanssa yhteensopiva virtuaalikone tavukoodia suoritettaessa, mutta rajapinnat ulkoisten koodien kanssa eroavat merkittävästi näiden kielten välillä. J++- ja Java-kielillä on lähes sama syntaksi. Microsoft on kuitenkin luonut lisää kielirakenteita. Kaikki ne ovat melko kyseenalaisia, lukuun ottamatta Windows käyttöliittymä API. Sen lisäksi, että näillä kielillä on sama syntaksi, niiden ydinkirjastot (merkkijonot, apuohjelmat, verkko-ohjelmointityökalut, monisäikeiset työkalut, matemaattiset kirjastot jne.) ovat olennaisesti samat.

Grafiikkakirjastot, käyttöliittymä ja pääsy etäobjekteihin ovat kuitenkin täysin erilaisia ​​näille kielille. Tällä hetkellä Microsoft ei enää tue J++-kieltä, koska se on kehittänyt uuden C#-kielen, jolla on monia yhtäläisyyksiä Javaan, mutta joka käyttää eri virtuaalikoneen. Tämä kirja ei kata J++ tai C#.

Java-kielen edut

1) Yksi Java-kielen tärkeimmistä eduista on riippumattomuus alustasta, jolla ohjelmat suoritetaan: Samaa koodia voidaan käyttää Windows-, Solaris-, Linux-, Machintosh- jne. käyttöjärjestelmissä.
Tämä on todella välttämätöntä, kun ohjelmia ladataan Internetin kautta myöhempää suorittamista varten eri käyttöjärjestelmissä.

2) Toinen etu on se Java-kielen syntaksi on samanlainen kuin C ++ -kielen syntaksi, ja ohjelmoijille, jotka osaavat C- ja C ++ -kieliä, sen oppiminen ei ole vaikeaa. Totta, ohjelmoijille, jotka tuntevat Visual Basic -kielen, tämä syntaksi voi olla epätavallinen.

Jos et ole koskaan ohjelmoinut C++:lla, jotkin tässä osiossa käytetyt termit eivät ehkä ole sinulle selviä. Tässä tapauksessa voit ohittaa sen. Kun pääset luvun 6 loppuun, nämä termit tulevat sinulle tutuiksi.

3) Myös Java - täysin oliosuuntautunut kieli, jopa enemmän kuin C++. Kaikki Java-kielen entiteetit ovat objekteja, lukuun ottamatta muutamia primitiivityyppejä, kuten numeroita. (Koska olioohjelmoinnin avulla on helppo kehittää monimutkaisia ​​projekteja, se on korvannut vanhemman strukturoidun ohjelmoinnin. Jos olio-ohjelmointi ei ole sinulle tuttua, luvuista 3-6 saat kaiken tarvitsemasi tiedon siitä.)

Toisen, hieman parannetun C++-kielen murteen kehittäminen ei kuitenkaan riitä. On erittäin tärkeää, että Javassa on helpompi kehittää bugittomia ohjelmia kuin C++:ssa. Miksi? Java-kielen suunnittelijat ovat pohtineet pitkään ja hartaasti, miksi C++:lla kirjoitetut ohjelmat ovat niin virhealttiita. He tarjosivat Java-kielelle työkaluja, jotka poistavat mahdollisuuden luoda ohjelmia, jotka piilottaisivat yleisimmät virheet. Tätä varten Java-kielellä tehdään seuraavat toimet.

4) Mahdollisuus nimenomaiseen muistin varaamiseen ja vapauttamiseen on poissuljettu.
Java-kielen muisti vapautetaan automaattisesti roskienkeräysmekanismilla. Ohjelmoijalle annetaan takuu virheellisen muistinkäytön aiheuttamilta virheiltä.

5) Todelliset taulukot otetaan käyttöön ja osoittimen aritmetiikka on kielletty.
Nyt ohjelmoijat periaatteessa eivät voi poistaa tietoja muistista johtuen väärinkäyttö osoittimia.

6) Mahdollisuus sekoittaa toimeksiantooperaattori tasa-arvovertailuoperaattoriin on poissuljettu.
Nyt et voi edes kääntää if(ntries = 3) . . . (Visual Basic -ohjelmoijat eivät välttämättä huomaa tässä mitään ongelmaa, koska tämä virhe aiheuttaa eniten sekaannusta C:ssä ja C++:ssa).

7) Moniperintö on poissuljettu. Se on korvattu uudella konseptilla - käyttöliittymällä, joka on lainattu Objective C -kielestä.
Käyttöliittymä antaa ohjelmoijalle melkein kaiken, mitä ohjelmoija voi saada useista perinnöistä, samalla kun vältetään luokkahierarkioiden hallinnan monimutkaisuus.

Java-kielen ominaispiirteet

Yksinkertainen
Tulkittu
Hajautettu
Luotettava
Turvallinen
koneesta riippumaton
Objektisuuntautunut
korkea suorituskyky
monisäikeinen
dynaaminen
Tietokonearkkitehtuurista riippumaton

Olemme jo käsitelleet joitain näistä kohdista viimeisessä osassa. Tässä osiossa me: tarjoamme lainauksia Java-kielioppaasta, paljastaen kielen ominaisuudet; Jaetaan lukijoiden kanssa ajatuksia tietyistä kielen ominaisuuksista, jotka perustuvat omiin kokemuksiimme sen uusimmasta versiosta.

Yksinkertainen

Halusimme luoda järjestelmän, joka on helppo ohjelmoida, ei vaadi lisäkoulutusta ja ottaa huomioon vallitsevan käytännön ja ohjelmointistandardit. Siksi, vaikka pidimme C++:aa tähän tarkoitukseen sopimattomana, Java suunniteltiin mahdollisimman samankaltaiseksi, jotta järjestelmästä tulisi helpompaa. Java-kieli ei sisällä monia alikäytettyjä, epäselviä ja epäselviä C++-ominaisuuksia, joiden uskomme tekevän enemmän haittaa kuin hyötyä.

Java-kielen syntaksi on pohjimmiltaan jalostettu versio C++-kielen syntaksista. Tällä kielellä ei ole otsikkotiedostoja, osoitinaritmetiikkaa (ja itse osoittimia), rakenteita, liitoksia, operaattorin ylikuormitusta, virtuaalisia perusluokkia ja niin edelleen. (Javan ja C++-kielten väliset erot on kuvattu C++-kieltä koskevissa huomautuksissa, jotka ovat hajallaan kirjassa.) Kehittäjät eivät kuitenkaan yrittäneet korjata kaikkia C++-kielen puutteita.

Esimerkiksi Java-kielen switch-käskyn syntaksi on säilynyt ennallaan. C++-kielen tunteminen on helppoa vaihtaa Java-kielen syntaksiin.
Jos käytät yleensä visuaalista ohjelmointiympäristöä (kuten Visual Basicia), Java-kieli on vaikeaa.
Sen syntaksi näyttää usein melko oudolta (vaikka ilmaisun merkityksen ymmärtäminen ei ole vaikeaa). Vielä tärkeämpää on, että kun työskentelet Java-kielellä, sinun on ohjelmoitava paljon enemmän. Visual Basic -kielen kauneus on, että sen visuaalinen ohjelmointiympäristö mahdollistaa sovellusinfrastruktuurin luomisen lähes automaattisesti. Saavuttaaksesi saman tuloksen Java-kielellä, sinun on ohjelmoitava käsin, mutta tämä johtaa paljon lyhyempiin ohjelmiin.

On kuitenkin olemassa kolmannen tyyppinen ohjelmointiympäristö, jonka avulla voit luoda ohjelmia "vedä ja pudota" -tekniikalla.

Toinen yksinkertaisuuden näkökohta on lyhyys. Yksi Java-kielen tavoitteista on mahdollistaa sellaisten ohjelmien kehittäminen, joita voidaan ajaa täysin itsenäisesti pienillä koneilla. Päätulkin ja luokkatuen koko on noin 40 kt; standardikirjastot ja ketjutustyökalut (etenkin itsenäinen mikroydin) vievät vielä 17: KB.
Tämä on valtava menestys. Huomaa kuitenkin, että GUI-tukikirjastot ovat paljon suurempia.

Objektisuuntautunut

Yksinkertaisesti sanottuna olio-ohjelmointi on ohjelmointitekniikka, joka keskittyy tietoihin (eli objekteihin) ja keinoihin käyttää niitä. Puusepän analogian piirtämällä esineorientoitunut käsityöläinen keskittyy ensisijaisesti valmistamaansa tuoliin ja vain toissijaisesti kiinnostunut siihen tarvittavista työkaluista; samaan aikaan ei-objekti-suuntautunut puuseppä ajattelee vain työkalujaan. Java:n ja C++:n olio-ominaisuudet ovat olennaisesti samat.

Olioorientaatio on jo osoittanut arvonsa viimeisen 30 vuoden aikana, ja ilman sitä on mahdotonta kuvitella modernia ohjelmointikieltä. Itse asiassa Java-kielen olio-ominaisuudet ovat verrattavissa C++:n ominaisuuksiin. Suurin ero niiden välillä on moniperinnön mekanismissa, johon Java-kieli löysi paremman ratkaisun, sekä Java-kielen metaluokkamallissa.

Heijastusmekanismien (luku 5) ja objektien serialisoinnin (luku 12) avulla voidaan toteuttaa pysyviä objekteja ja työkaluja valmiisiin komponentteihin perustuvien graafisten käyttöliittymien luomiseen.

Jos et ole koskaan ohjelmoinut olio-kielellä, katso tarkasti luvut 4-6. Nämä luvut esittelevät olio-ohjelmoinnin perusteet ja osoittavat, kuinka sitä voidaan käyttää monimutkaisten projektien kehittämiseen perinteisillä proseduurikielillä, kuten C tai Basic.

Hajautettu

Javalla on suuri kirjasto ohjelmia tietojen siirtämiseen TCP/IP (Transmission Control Protocol/Internet Protocol) protokolliin, kuten HTTP (Hypertext Transfer Protocol) tai FTP (File Transfer Protocol). tiedostonsiirtoprotokolla. Java-kielellä kirjoitetut sovellukset voivat avata ja käyttää objekteja verkon kautta käyttämällä jaURL-osoitteet (Uniform Resource Location - yleinen resurssiosoite) yhtä helposti kuin paikallinen verkko.

Java-kieli tarjoaa tehokkaita ja käteviä työkaluja verkossa työskentelyyn. Jokainen, joka on koskaan yrittänyt kirjoittaa ohjelmia Internetiin muilla kielillä, on iloisesti yllättynyt siitä, kuinka helposti vaikeimmat tehtävät, kuten verkkoyhteyksien avaaminen (socket-yhteys), ratkeavat Javalla. Tyylikäs mekanismi, joka koostuu niin sanotuista servleteistä (servletit), tekee työstä palvelimella erittäin tehokasta.

Servlettejä tukevat monet suositut web-palvelimia. (Verkotusta käsitellään toisessa osassa.) Java-kielellä hajautettujen objektien välinen kommunikaatio saadaan aikaan etämenetelmien kutsumismekanismilla (tätä aihetta käsitellään myös toisessa osassa).

Luotettava

Java-kieli on suunniteltu luomaan ohjelmia, joiden on toimittava luotettavasti kaikissa tilanteissa. Java-kielen painopiste on varhaisessa havaitsemisessa mahdollisia virheitä, dynaaminen tarkistus (ajon aikana) ja virhealttiiden tilanteiden välttäminen... Ainoa suuri ero Java:n ja C++:n välillä on Java-kielen osoitinmalli, joka eliminoi muistin päällekirjoituksen ja tietojen vioittumisen mahdollisuuden.

Tämä ominaisuus on myös erittäin hyödyllinen. Java-kielen kääntäjä havaitsee virheet, jotka muilla kielillä havaitaan vain ajon aikana. Lisäksi ohjelmoijat, jotka ovat viettäneet useita tunteja etsiessään muistikorruptiovirhettä huonon osoittimen takia, ovat erittäin iloisia siitä, että Java-kielessä tällaisia ​​ongelmia ei periaatteessa voi esiintyä.

Jos olet koskaan ohjelmoinut Visual Basic- tai COBOL-kielillä, jotka eivät käytä osoittimia, et ehkä ymmärrä, miksi tämä on niin tärkeää. C-ohjelmoijat ovat paljon vähemmän onnekkaita. He tarvitsevat osoittimia käyttääkseen merkkijonoja, taulukoita, objekteja ja jopa tiedostoja. Ohjelmoinnissa Visual Basicissa mitään näistä ei tarvita, eikä ohjelmoijan tarvitse huolehtia muistin varaamisesta näille entiteeteille. Toisaalta monet tietorakenteet kielessä, jossa ei ole osoittimia, ovat erittäin vaikeita toteuttaa. Tavalliset rakenteet, kuten merkkijonot ja taulukot, eivät tarvitse osoittimia. Osoittimien täysi voima ilmenee vain siellä, missä niistä ei voi luopua esimerkiksi luotaessa linkitetyt luettelot. Java-ohjelmoija on ikuisesti säästynyt huonoilta osoittimilta, virheellisiltä kohdistamiselta ja muistivuotoilta.

Turvallinen

Java-kieli on suunniteltu käytettäväksi verkko- tai hajautetussa ympäristössä. Tästä syystä turvallisuuteen on kiinnitetty paljon huomiota. Java-kielen avulla voit luoda järjestelmiä, jotka on suojattu viruksilta ja luvattomalta käytöltä.

Ensimmäisessä painoksessa kirjoitimme "älä koskaan sano ei koskaan", ja olimme oikeassa. Princetonin yliopiston turvallisuusasiantuntijoiden ryhmä löysi Java 1.0:n ensimmäiset tietoturvavirheet pian sen jälkeen, kun JDK:n ensimmäinen versio tuli myyntiin. Lisäksi sekä he että muut asiantuntijat löysivät yhä enemmän bugeja kaikkien myöhempien Java-versioiden suojausmekanismeista.

Tämän tilanteen positiivisena puolena on, että Java Language Development Group on julistanut nollatoleranssin kaikkiin tietoturvajärjestelmän virheisiin ja ryhtynyt välittömästi korjaamaan sovelman suojausmekanismissa havaitut ongelmat. Julkaisemalla Java-kielen tulkin sisäiset tekniset tiedot Sun on helpottanut piilotettujen tietoturvavirheiden löytämistä ja ulkoistanut ne riippumattomille asiantuntijoille.

Tämä lisäsi todennäköisyyttä, että kaikki tietoturva-aukkoja löydettäisiin pian. Joka tapauksessa Java-kielen turvajärjestelmän huijaaminen on erittäin vaikeaa. Tähän mennessä löydetyt viat ovat olleet lähes huomaamattomia, ja niiden määrä on (suhteellisen) pieni.

Sunin tietoturvasivulla on seuraava URL-osoite: http://java.sun.com/sfaq/.

Tässä on joitain tilanteita, joita Java-suojausjärjestelmä estää.

1) Suoritettavan ohjelman pinon ylivuoto, jonka aiheutti Internetissä levinnyt pahamaineinen "mato".

2) Muistialueiden vaurioituminen, jotka ovat prosessille varatun tilan ulkopuolella.

3) Paikallisten tiedostojen lukeminen ja kirjoittaminen käytettäessä suojattua luokan latausohjelmaa, kuten verkkoselainta, joka estää tällaisen tiedostojen käytön.

Kaikki nämä turvatoimenpiteet ovat asianmukaisia ​​ja toimivat yleensä virheettömästi, mutta harkintakyky ei ole koskaan haittaa. Vaikka tähän mennessä löydetyt bugit eivät ole olleet vähäpätöisiä, ja niiden löytämisen yksityiskohdat pidetään usein salassa, on myönnettävä, että Java-kielen turvallisuuden todistaminen ei todennäköisesti ole enää mahdollista.

Ajan myötä kieleen on lisätty uusia suojausominaisuuksia. Versiosta 1.1 alkaen Java-kieli esitteli digitaalisesti allekirjoitettujen luokkien käsitteen. Käyttämällä luokkaa digitaalisella allekirjoituksella voit olla varma sen tekijästä. Jos luotat siihen, voit myöntää tälle luokalle kaikki koneesi käytettävissä olevat oikeudet.

Microsoftin ehdottama vaihtoehtoinen koodin toimitusmekanismi perustuu ActiveX-tekniikkaan ja käyttää turvallisuuden vuoksi vain digitaalisia allekirjoituksia. Tämä ei tietenkään riitä - kuka tahansa Microsoft-ohjelmiston käyttäjä voi todistaa, että tunnettujen valmistajien ohjelmat kaatuvat usein, mikä aiheuttaa tietojen korruption riskin. Java-kielen suojausjärjestelmä on paljon vahvempi kuin ActiveX-tekniikka, koska se ohjaa sovellusta sen käynnistyshetkestä lähtien eikä anna sen aiheuttaa haittaa.

arkkitehtuurista riippumaton

Kääntäjä luo objektitiedoston, jonka muoto ei riipu tietokoneen arkkitehtuurista - käännetty ohjelma voidaan suorittaa millä tahansa Java-ohjelman suoritusjärjestelmän ohjaamisella prosessorilla. Tätä varten Java-kielen kääntäjä luo komentoja, tavukoodeja, jotka eivät riipu tietystä tietokonearkkitehtuurista. Tavukoodi on suunniteltu siten, että se voidaan helposti tulkita millä tahansa koneella tai kääntää koneriippuvaiseksi koodiksi lennossa.

Ei ole uusi idea. Yli 20 vuotta sitten sekä Niclaus Wirthin kehittämä Pascal-toteutusjärjestelmä että UCSD Pascal -järjestelmä käyttivät samaa tekniikkaa. Tavukoodien käyttö antaa suuren hyödyn ohjelman suorittamisessa (synkroninen kääntäminen kuitenkin kompensoi sen monissa tapauksissa). Java-kielen kehittäjät ovat tehneet hienoa työtä kehittääkseen joukon tavukoodiohjeita, jotka toimivat hyvin useimmilla nykyaikaiset tietokoneet, kääntää helposti todellisiksi koneohjeiksi.

koneesta riippumaton

Toisin kuin C- ja C++-kielissä, Java-spesifikaatiossa ei ole toteutusjärjestelmästä riippuvia puolia. Sekä perustietotyyppien koko että niillä tehtävät aritmeettiset operaatiot ovat hyvin määriteltyjä.

Esimerkiksi Java-kielen tyyppi int tarkoittaa aina 32-bittistä kokonaislukua. C:ssä ja C++:ssa tyyppi int voi tarkoittaa joko 16-bittistä kokonaislukua, 32-bittistä kokonaislukua tai mielivaltaisen kokoista kokonaislukua tietyn kääntäjän kehittäjän valitsemana. Ainoa rajoitus on, että int:n koko ei voi olla pienempi kuin lyhyen int:n koko ja suurempi kuin pitkän int:n koko. Numeeristen tyyppien kiinteä koko välttää monet ohjelmien käynnistämiseen liittyvät häiriöt erilaisia ​​tietokoneita. Binaaridata tallennetaan ja lähetetään kiinteässä muodossa, mikä myös välttää väärinkäsitykset, jotka liittyvät erilaisiin tavujärjestykseen eri alustoilla ("big endian/little endian" -konflikti). Linjat tallennetaan sisään vakiomuoto Unicode.

Järjestelmään kuuluvat kirjastot määrittävät koneista riippumattoman rajapinnan. Kieli tarjoaa esimerkiksi abstraktin Window-luokan ja sen toteutukset Unix-, Windows- ja Macintosh-käyttöjärjestelmille.

Jokainen, joka on koskaan yrittänyt kirjoittaa ohjelmaa, joka toimii yhtä hyvin Windowsissa, Macintoshissa ja kymmenessä Unix-versiossa, tietää, että tämä on erittäin vaikea tehtävä. Java-versio teki sankarillisen yrityksen ratkaista tämä ongelma tarjoamalla yksinkertaisen työkalupakin, joka mukauttaa yleiset käyttöliittymäelementit useisiin ohjelmistoalustoihin. Valitettavasti kirjasto, jonka parissa käytettiin paljon työtä, ei antanut meille mahdollisuutta saavuttaa hyväksyttäviä tuloksia eri alustoilla. (Samaan aikaan eri alustojen grafiikkaohjelmissa esiintyi erilaisia ​​bugeja.)

Tämä oli kuitenkin vasta alkua. Monissa sovelluksissa koneen riippumattomuus on paljon tärkeämpää kuin graafisen käyttöliittymän kehittyneisyys. Juuri nämä sovellukset ovat hyötyneet Java 1.0:n käyttöönotosta. GUI-työkalusarja on kuitenkin nyt suunniteltu kokonaan uudelleen, eikä se ole enää riippuvainen isäntätietokoneen käyttöliittymästä. Uusi versio merkityksellisempiä ja mielestämme käyttäjälle houkuttelevampia kuin aikaisemmat.

Tulkittu

Java-kielen tulkki voidaan lähettää mille tahansa koneelle ja suorittaa tavukoodin suoraan sillä. Koska linkkien muokkaaminen on helpompi prosessi, ohjelmoinnista voi tulla paljon nopeampaa ja tehokkaampaa.

Ehkä tämä on etu sovelluskehityksessä, mutta lainaus on selkeä liioittelua. Joka tapauksessa JSDK:n (Java Software Development Kit) mukana oleva Java-kielen kääntäjä on melko hidas. (Jotkut kolmannen tyyppiset kääntäjät, kuten IBM:n, ovat paljon nopeampia.) Uudelleenkääntämisnopeus on vain yksi tekijä ohjelmointiympäristön tehokkuudessa. Java- ja Visual Basic -ohjelmointiympäristöjen nopeutta verrattaessa saatat olla pettynyt.

korkea suorituskyky

Vaikka yleisesti tulkitetuilla tavukoodeilla on enemmän kuin tarpeeksi suorituskykyä, on tilanteita, joissa vaaditaan vielä parempaa suorituskykyä. Tavukoodit voidaan kääntää lennossa (ajon aikana) konekoodeiksi tietylle prosessorille, jossa sovellus on käynnissä.

Jos tulkkia käytetään tavukoodien suorittamiseen, älä käytä lausetta " korkea suorituskyky". Monilla alustoilla on kuitenkin mahdollista toisenlainen käännös, jonka tarjoavat synkroniset kääntäjät (just-in-time -kääntäjät-JIT). Ne kääntävät tavukoodin koneriippuvaiseksi koodiksi, tallentavat tuloksen muistiin ja kutsuvat sitä sitten Koska tämä tulkinta suoritetaan vain kerran, tämä lähestymistapa lisää nopeutta moninkertaisesti.

Vaikka synkroniset kääntäjät ovat edelleen hitaampia kuin konekohtaiset kääntäjät, ne ovat ainakin paljon nopeampia kuin tulkit ja tarjoavat 10- tai jopa 20-kertaisia ​​nopeuksia joillekin ohjelmille. Tätä tekniikkaa parannetaan jatkuvasti, ja se voi lopulta saavuttaa nopeuksia, joita perinteiset kääntäjät eivät koskaan ylitä. Synkroninen kääntäjä voi esimerkiksi määrittää, mikä koodinpätkä suoritetaan useammin, ja optimoida sen suoritusnopeuden mukaan.

MONIKIERTO

Tarjoaa paremman interaktiivisuuden ja ohjelman suorituskyvyn.

Jos olet koskaan kokeillut monisäikeistystä millä tahansa muulla ohjelmointikielellä, tulet iloisesti yllättymään siitä, kuinka helppoa se on tehdä Javalla. Java-kielen säikeet voivat hyödyntää moniprosessorijärjestelmiä, jos käyttöjärjestelmä sen sallii. Valitettavasti virtojen toteutukset useimmilla alustoilla vaihtelevat suuresti, eivätkä Java-kielen suunnittelijat yritä saavuttaa yhtenäisyyttä. Vain säikeiden kutsun koodi pysyy samana kaikille koneille; Java-kieli jättää monisäikeen toteutuksen taustalla olevalle käyttöjärjestelmälle tai säikeityskirjastolle. (Virtoja kuvataan osassa 2.) Tästä huolimatta se on organisoinnin helppous monisäikeinen laskenta tekee Java-kielestä niin houkuttelevan palvelinohjelmistojen kehittämiseen.

dynaaminen

Java on monella tapaa dynaamisempi kuin C tai C++. Se on suunniteltu sopeutumaan helposti jatkuvasti muuttuvaan ympäristöön. Voit vapaasti lisätä uusia menetelmiä ja objekteja kirjastoihin vahingoittamatta. Java-kielen avulla on helppo saada tietoa ohjelman edistymisestä.

Tämä on erittäin tärkeää, kun haluat lisätä koodia jo käynnissä olevaan ohjelmaan. Hyvä esimerkki tästä on koodi, joka ladataan Internetistä selaimen suorittamista varten. Java 1.0:ssa tiedon saaminen suoritettavan ohjelman etenemisestä ei ollut ollenkaan helppoa, mutta Java-kielen nykyinen versio paljastaa ohjelmoijalle sekä suoritusohjelman objektien rakenteen että käyttäytymisen.
Tämä on erittäin arvokasta järjestelmille, joiden on analysoitava objektit ohjelman suorittamisen aikana. Näihin järjestelmiin kuuluvat GUI-työkalut, älykkäät virheenkorjaajat, laajennukset ja objektitietokannat.

Java-kieli ja Internet

Idea on yksinkertainen - käyttäjät lataavat Java-tavukoodeja Internetistä ja käyttävät niitä koneillaan. Web-selaimissa toimivia Java-ohjelmia kutsutaan sovelmiksi. Sovelman käyttöä varten tarvitset Java-kieltä tukevan verkkoselaimen, joka pystyy tulkitsemaan tavukoodeja. Java-lähdekoodin lisensoi Sun, joka vaatii sekä kielen itsensä että sen ydinkirjastojen rakenteen muuttumattomuutta. Valitettavasti todellisuus ei ole sellainen. Netscape- ja Internet Explorer -selaimien eri versiot tukevat Java-kielen eri versioita, ja jotkin näistä versioista ovat huomattavasti vanhentuneita. Tämä valitettava tilanne luo yhä enemmän esteitä sellaisten sovelmien kehittämiselle, jotka hyödyntävät uusin versio Java kieli. Tämän ongelman ratkaisemiseksi Sun on kehittänyt Java-laajennuksen, joka tarjoaa edistyneimmän ympäristön Java-ohjelmien suorittamiseen Netscape- ja Internet Explorer -selaimiin perustuville.

Sovelman lataaminen on kuin kuvan upottaminen Web-sivulle. Sovelmasta tulee osa sivua, ja teksti kiertyy sen varaaman tilan ympärille. Erona on kuitenkin se, että kuva on nyt elossa. Se vastaa käyttäjän komentoihin, muuttaa sen ulkomuoto ja tarjoaa tiedonsiirron tietokoneen, jossa sovelmaa tarkastellaan, ja sovelmaa ohjaavan tietokoneen välillä.

Sovelman lataaminen on kuin kuvan lisäämistä Web-sivulle. Sovelmasta tulee osa sivua, ja teksti kiertyy sen varaaman tilan ympärille. Tosiasia on, että kuva on "elävä". Se vastaa käyttäjän komentoihin, muuttaa ulkonäköään ja siirtää tietoja sovelmaa käyttävän tietokoneen ja sovelmaa käyttävän tietokoneen välillä.

Kuvassa Kuva 1.1 näyttää hyvän esimerkin dynaamisesta Web-sivusta, joka suorittaa monimutkaisia ​​laskelmia ja käyttää sovelmaa molekyylien piirtämiseen. Ymmärtääksesi paremmin molekyylin rakennetta, voit kiertää sitä tai zoomata hiirellä. Tällaisia ​​manipulaatioita ei voida toteuttaa staattisilla Web-sivuilla, mutta sovelmat mahdollistavat sen. (Tämä sovelma löytyy osoitteesta http://jmol.sourceforge.net.)

Riisi. 1.1. Jmol-sovelma

Applettien avulla voidaan lisätä uusia painikkeita ja tekstikenttiä Web-sivulle. Tällaiset sovelmat latautuvat kuitenkin hitaasti puhelinlinjan kautta.

Sama voidaan tehdä dynaamisella HTML:llä, HTML-muodoilla (Hypertext Markup Language) tai komentosarjakielellä, kuten JavaScriptillä. Tietenkin ensimmäiset sovelmat suunniteltiin animaatioita varten: pyörivät maapallot, tanssivat sarjakuvahahmot, hieno teksti ja niin edelleen. Suurin osa yllä olevista voi kuitenkin tehdä myös animoituja GIF-tiedostoja, ja dynaaminen HTML yhdistettynä komentosarjaan tekee paljon enemmän kuin sovelmia.

Seurauksena selaimen yhteensopimattomuudesta ja epäjohdonmukaisuudesta latausprosessissa hitaalla verkkoyhteyksiä Web-sivuille suunnitellut sovelmat eivät ole olleet suuri saavutus. Paikallisissa verkoissa (intraneteissa) tilanne on täysin toinen. Niillä ei yleensä ole kaistanleveysongelmia, joten sovelmien latausaika ei ole merkittävä. Paikallisessa verkossa voit valita haluamasi selaimen tai käyttää Java-laajennusta. Työntekijät eivät voi siirtää verkon kautta toimitettua ohjelmaa väärään paikkaan tai asentaa sitä väärin, ja Järjestelmänvalvoja ei tarvitse ohittaa kaikkia asiakaskoneita ja päivittää niillä olevia ohjelmia. Monet yritykset ovat kehittäneet suuren määrän ohjelmia varastonhallintaan, lomasuunnitteluun, matkakorvauksiin ja vastaaviin selaimia käyttävien sovelmien muodossa.

Kun kirjoitimme tätä kirjaa, heiluri kääntyi takaisin asiakaspuolen ohjelmoinnista palvelinpuolen ohjelmointiin. Erityisesti sovelluspalvelimet voivat käyttää valvontaominaisuuksia virtuaalikone Java automaattiseen kuormituksen tasapainottamiseen, tietokantalinkkien yhdistämiseen, objektin synkronointiin, turvalliseen sammutukseen ja uudelleenlataukseen sekä muihin prosesseihin, joita tarvitaan skaalautuviin palvelinsovelluksiin, joita on lähes mahdotonta toteuttaa oikein. Siten ohjelmoijat, jotka luovat sovelluksia, voivat ostaa nämä monimutkaiset mekanismit sen sijaan, että kehittäisivät niitä itse. Tämä lisäsi ohjelmoijien tuottavuutta - he keskittyivät ohjelmiensa logiikkaan, eivätkä palvelinten toimintaan liittyvät yksityiskohdat häirinneet heitä.

Java on Sun microsystemsin ohjelmointikieli. Alunperin kehitetty ohjelmointikieleksi elektroniset laitteet, mutta sitä käytettiin myöhemmin palvelinohjelmistosovellusten kirjoittamiseen. Java-ohjelmat ovat monialustaisia, eli niitä voidaan käyttää missä tahansa käyttöjärjestelmässä.

Java-ohjelmoinnin perusteet

Java olio-kielenä noudattaa OOP:n perusperiaatteita:

  • perintö;
  • polymorfismi;
  • kapselointi.

"Javan" keskellä, kuten muissakin OOP:issa, on objekti ja luokka, jossa on rakentajia ja ominaisuuksia. On parempi aloittaa Java-ohjelmointikielen oppiminen ei virallisista resursseista, vaan aloittelijoille tarkoitetuista oppaista. Tällaisissa käsikirjoissa ominaisuudet on kuvattu yksityiskohtaisesti, koodiesimerkkejä tarjotaan. Kirjat, kuten Java-ohjelmointikieli aloittelijoille, selittävät yksityiskohtaisesti nimetyn kielen perusperiaatteet ja ominaisuudet.

Erikoisuudet

Java-ohjelmointikielen koodi käännetään tavukoodiksi ja suoritetaan sitten JVM-virtuaalikoneessa. Muunnos tavukoodiksi tehdään Javacissa, Jikesissä, Espressossa, GCJ:ssä. On kääntäjiä, jotka kääntävät C-kielen Java-tavukoodiksi. Näin ollen C-sovellus voi toimia millä tahansa alustalla.

"Java"-syntaksille on ominaista seuraavat:

  1. Luokkien nimen tulee alkaa isolla kirjaimella. Jos nimi koostuu useista sanoista, toisen tulee alkaa isoilla kirjaimilla.
  2. Jos menetelmän muodostamiseen käytetään useita sanoja, toisen on aloitettava isolla kirjaimella.
  3. Käsittely alkaa main()-menetelmällä - se on osa jokaista ohjelmaa.

Tyypit

Java-ohjelmointikielellä on 8 primitiivistä tyyppiä. Ne on esitetty alla.

  • Boolean on boolen tyyppi, joka saa vain kaksi arvoa tosi ja epätosi.
  • Tavu on pienin kokonaislukutyyppi, jonka koko on 1 tavu. Sitä käytetään työskennellessäsi tiedostojen tai raakabinääritietojen kanssa. Sen alue on -128 - 127.
  • Lyhyen väli on -32768 - 32767, ja sitä käytetään esittämään numeroita. Tämän tyyppisten muuttujien koko on 2 tavua.
  • Int tarkoittaa myös numeroita, mutta sen koko on 4 tavua. Sitä käytetään useimmiten kokonaislukutietojen kanssa työskentelyyn, ja tavu ja lyhyt ylennetään joskus int-muotoon.
  • Pitkiä käytetään suurille kokonaisluvuille. Mahdolliset arvot vaihtelevat -9223372036854775808 - 9223372036854775807.
  • Float ja double käytetään merkitsemään murtolukuja. Niiden ero on se, että kellunta on kätevä, kun suurta tarkkuutta luvun murto-osassa ei vaadita.
  • Double näyttää kaikki merkit erottimen "." jälkeen ja float - vain ensimmäisen.
  • Merkkijono on yleisimmin käytetty primitiivinen tyyppi, jolla merkkijonoja määritellään.

Luokat ja esineet

Luokat ja objektit ovat tärkeässä roolissa Java-ohjelmointikielen oppimisessa aloittelijoille.

Luokka määrittelee mallin objektille, sillä on oltava attribuutit ja menetelmät. Luo se käyttämällä Class-avainsanaa. Jos se luodaan erilliseen tiedostoon, luokan ja tiedoston nimen on oltava sama. Itse nimi koostuu kahdesta osasta: nimi ja laajennus.Java.

Javassa voit luoda aliluokan, joka perii ylätason menetelmät. Tätä varten käytetään sanaa laajenee:

  • luokka luokannimi laajentaa superluokannimi();

Konstruktori on minkä tahansa luokan jäsen, vaikka sitä ei ole erikseen asetettu. Tässä tapauksessa kääntäjä luo sen itse:

  • julkinen luokka Luokka( julkinen luokka()( ) julkinen luokka(merkkijonon nimi)( ))

Rakentajan nimi on sama kuin luokan nimi, oletusarvoisesti siinä on vain yksi parametri:

  • julkinen pentu (merkkijonon nimi)

Objekti luodaan luokasta käyttämällä new()-operaattoria:

  • Piste p = uusi piste()

Se vastaanottaa kaikki luokan menetelmät ja ominaisuudet, joiden avulla se on vuorovaikutuksessa muiden objektien kanssa. Yhtä objektia voidaan käyttää useita kertoja eri muuttujien alla.

    Piste p = uusi piste()

    luokka TwoPoints(

    julkinen staattinen void main(String args) (

    Piste p1 = uusi Piste();

    Piste p2 = uusi Piste();

    Objektimuuttujat ja objektit ovat täysin erilaisia ​​entiteettejä. Objektimuuttujat ovat linkkejä. Ne voivat osoittaa mitä tahansa ei-primitiivityyppistä muuttujaa. Toisin kuin C++, niiden tyyppimuunnos on tiukasti säännelty.

    Kentät ja menetelmät

    Kentät ovat kaikki luokkaan tai objektiin liittyviä muuttujia. Ne ovat oletuksena paikallisia, eikä niitä voi käyttää muissa luokissa. "."-operaattoria käytetään pääsyyn kenttiin:

    • luokkanimi muuttuja

    Voit määrittää staattisia kenttiä staattisella avainsanalla. Tällaiset kentät ovat ainoa tapa tallentaa globaaleja muuttujia. Tämä johtuu siitä, että Javassa ei yksinkertaisesti ole globaaleja muuttujia.

    Otettu käyttöön mahdollisuus tuoda muuttujia päästäkseen käsiksi muista paketeista:

    • tuoda staattinen luokkanimi;

    Metodi on aliohjelma niille luokille, joissa se on ilmoitettu. Kuvattu samalla tasolla muuttujien kanssa. Määritetty funktiona ja voi olla mitä tahansa tyyppiä, mukaan lukien mitätön:

    • luokka Piste ( int x, y;

      void init(int a, int b) (

    Yllä olevassa esimerkissä Point-luokassa on kokonaisluku x ja y, init()-metodi. Menetelmiin päästään, kuten muuttujiinkin, käyttämällä "."-operaattoria:

    • point.init();

    Init-ominaisuus ei palauta mitään, joten se on tyyppiä void.

    Muuttujat

    Java-ohjelmointikielen opetusohjelmassa muuttujat ovat erillisellä paikalla. Kaikilla muuttujilla on tietty tyyppi, se määrittää tarvittavan arvojen tallennuspaikan, mahdollisten arvojen alueen, operaatioluettelon. Ennen arvojen manipulointia muuttujat ilmoitetaan.

    Useita muuttujia voidaan ilmoittaa samanaikaisesti. Niiden luetteloimiseen käytetään pilkkua:

    • int a, b, c;

    Alustus tehdään ilmoituksen jälkeen tai sen aikana:

    int a = 10, b = 10;

    On olemassa useita tyyppejä:

    • paikalliset muuttujat (paikallinen);
    • ilmentymämuuttujat (instanssimuuttujat);
    • staattiset muuttujat (staattinen).

    Paikalliset muuttujat ilmoitetaan menetelmissä ja konstruktoreissa, ne luodaan jälkimmäisen käynnistyksen yhteydessä ja tuhotaan valmistumisen jälkeen. Heille on kiellettyä määrittää pääsyn muokkaajia ja hallita saavutettavuustasoa. Ne eivät näy ilmoitetun lohkon ulkopuolella. Javassa muuttujilla ei ole alkuarvoa, joten se on määritettävä ennen ensimmäistä käyttöä.

    Ilmentymämuuttujat on ilmoitettava luokan sisällä. Niitä käytetään menetelminä, mutta niihin pääsee käsiksi vasta objektin luomisen jälkeen. Muuttuja tuhoutuu, kun objekti tuhoutuu. Instanssimuuttujilla, toisin kuin paikallisilla muuttujilla, on oletusarvot:

    • numerot - 0;
    • logiikka - väärä;
    • viittaukset ovat mitättömiä.

    Staattisia muuttujia kutsutaan luokkamuuttujiksi. Niiden nimet alkavat isoilla kirjaimilla ja määritetään staattisella muokkaimella. Niitä käytetään vakioina, niihin lisätään yksi määrittäjä luettelosta:

    • lopullinen;
    • yksityinen;
    • julkinen.

    Suorita ohjelman alussa, tuhotaan suorituksen lopettamisen jälkeen. Aivan kuten ilmentymämuuttujilla, niillä on oletusarvot, jotka on määritetty tyhjille muuttujille. Numeroiden arvo on 0, boolean arvo on false, objektiviittaukset ovat aluksi nolla. Staattisia muuttujia kutsutaan seuraavassa muodossa:

    • ClassName.VariableName.

    Roskankerääjä

    Java-ohjelmointikieli aloittelijoille -opetusohjelmassa automaattinen roskatkeräysosa on mielenkiintoisin.

    Javassa, toisin kuin C-kielessä, se ei ole mahdollista manuaalinen poisto esine muistista. Tätä varten käytetään automaattista poistomenetelmää - roskienkerääjä. Perinteisessä null-poistossa vain viittaus objektiin poistetaan ja itse objekti poistetaan. Pakkojätteen keräämiseen on olemassa menetelmiä, vaikka niitä ei suositella normaaliin käyttöön.

    Käyttämättömien kohteiden automaattisen poiston moduuli toimii taustalla ja käynnistyy, kun ohjelma ei ole aktiivinen. Objektien tyhjentämiseksi muistista ohjelma pysähtyy, kun muisti on vapautettu, keskeytetty toiminta jatkuu.

    Muokkaimet

    Erottaa erilaisia ​​tyyppejä modifioijia. Niiden lisäksi, jotka määrittävät pääsytavan, menetelmille, muuttujille ja luokalle on modifioijia. Yksityisiksi ilmoitetut menetelmät ovat käytettävissä vain ilmoitetussa luokassa. Tällaisia ​​muuttujia ei voida käyttää muissa luokissa ja funktioissa. Julkinen antaa pääsyn mihin tahansa luokkaan. Jos sinun on hankittava julkinen luokka toisesta paketista, sinun on ensin tuotava se.

    Suojattu muokkaaja on toiminnaltaan samanlainen kuin julkinen - se avaa pääsyn luokkakenttiin. Molemmissa tapauksissa muuttujia voidaan käyttää muissa luokissa. Mutta julkinen muokkaus on täysin kaikkien saatavilla, ja suojattu muuntaja on saatavana vain perityille luokille.

    Metodeja luotaessa käytettävä muuntaja on staattinen. Tämä tarkoittaa, että luotu menetelmä on olemassa luokan esiintymistä riippumatta. Final-muunnin ei ohjaa pääsyä, mutta osoittaa, että objektin arvojen lisäkäsittely on mahdotonta. Se kieltää sen elementin muuttamisen, jolle se on määritetty.

    Kenttien lopullinen tekee mahdottomaksi muuttaa muuttujan ensimmäistä arvoa:

      julkinen static void mthod(String args) (

      lopullinen int Nimi = 1;

      int Nimi = 2;// antaa virheen

    Muuttujat, joissa on lopullinen muuntaja, ovat vakioita. Ne kirjoitetaan yleensä vain isoilla kirjaimilla. CamelStyle ja muut tavat eivät toimi.

    Metodin lopullinen tarkoittaa kieltoa muuttaa metodia perityssä luokassa:

      final void myMethod() (

      System.out.printIn("Hei maailma");

    Luokkien lopullinen tarkoittaa, että et voi luoda luokan jälkeläisiä:

      viimeinen julkinen luokka luokka(

    Abstract - muokkaaja abstraktien luokkien luomiseen. Mitä tahansa abstraktia luokkia ja abstrakteja menetelmiä on tarkoitus laajentaa edelleen muihin luokkiin ja lohkoihin. Muokkaus transient kertoo virtuaalikoneen olemaan käsittelemättä annettua muuttujaa. Tässä tapauksessa se ei yksinkertaisesti pelasta. Esimerkiksi transient int Nimi = 100 ei säily, mutta int b pysyy.

    Alustat ja versiot

    Olemassa olevat Java-ohjelmointikieliperheet:

    • tavallinen versio.
    • Yritysversio.
    • Micro Edition.
    • kortti.

    1. SE - on tärkein, jota käytetään laajasti räätälöityjen sovellusten luomiseen yksilölliseen käyttöön.
    2. EE on joukko eritelmiä yritysohjelmistojen kehittämiseen. Se sisältää enemmän ominaisuuksia kuin SE, joten sitä käytetään kaupallisessa mittakaavassa suurissa ja keskisuurissa yrityksissä.
    3. ME - suunniteltu laitteille, joilla on rajoitettu teho ja muisti, niissä on yleensä pieni näyttökoko. Tällaisia ​​laitteita ovat älypuhelimet ja PDA-laitteet, vastaanottimet digitaalinen televisio.
    4. Kortti - suunniteltu laitteille, joilla on erittäin rajalliset laskentaresurssit, kuten älykortit, SIM-kortit, pankkiautomaatit. Tätä tarkoitusta varten tavukoodia, alustan vaatimuksia ja kirjastojen komponentteja on muutettu.

    Sovellus

    Java-ohjelmointikielen ohjelmat ovat yleensä hitaampia ja vievät enemmän RAM-muisti. Java- ja C-kielten vertaileva analyysi osoitti, että C on hieman tuottavampi. Java-virtuaalikoneeseen tehtyjen lukuisten muutosten ja optimointien jälkeen se on parantanut suorituskykyään.

    Käytetään aktiivisesti Android-sovelluksissa. Ohjelma käännetään epästandardiksi tavukoodiksi ja suoritetaan ART-virtuaalikoneessa. Kääntämiseen käytetään Android Studiota. Tämä Googlen IDE on virallinen Android-kehitys-IDE.

    Microsoft on kehittänyt oman toteutuksensa Java Virtual Machine MSJVM:lle. Sillä oli sellaisia ​​eroja, jotka rikkoivat cross-platformin peruskäsitteen - joillekin teknologioille ja menetelmille ei ollut tukea, oli epätyypillisiä laajennuksia, jotka toimivat vain Windows-alustalla. Microsoft julkaisi J#-kielen, jonka syntaksi ja yleinen toiminta on hyvin samanlainen kuin Java. Se ei vastannut virallisia määrityksiä, ja se poistettiin lopulta Microsoft Visual Studion vakiokehittäjän työkalupakkista.

    Java-ohjelmointikieli ja -ympäristö

    Ohjelmistokehitys suoritetaan seuraavissa IDE:issä:

    1. NetBeans IDE.
    2. Eclipse IDE.
    3. IntelliJ IDEA.
    4. jDeveloper.
    5. Java iOS:lle.
    6. Geany.

    Oracle jakelee JDK:ta Java-kehityspakettina. Sisältää kääntäjän, vakiokirjastot, apuohjelmat, toimeenpanojärjestelmän. Nykyaikaiset integroidut kehitysympäristöt luottavat JDK:han.

    Netbeansissa ja Eclipse IDE:ssä on kätevää kirjoittaa koodia Java-ohjelmointikielellä. Nämä ovat ilmaisia ​​integroituja kehitysympäristöjä, jotka sopivat kaikille Java-alustoille. Käytetään myös ohjelmointiin Pythonissa, PHP:ssä, JavaScriptissä, C++:ssa.

    Jetbrainsin IntelliJ IDE on jaettu kahtena versiona: ilmainen ja kaupallinen. Tukee koodin kirjoittamista monilla ohjelmointikielillä, kehittäjiltä on saatavilla kolmannen osapuolen laajennuksia, jotka toteuttavat vielä enemmän PL:itä.

    JDeveloper on toinen Oraclen kehitys. Täysin kirjoitettu Java-kielellä, joten se toimii kaikissa käyttöjärjestelmissä.

Johdanto

Tämä työ on omistettu yhdelle tämän hetken lupaavimmista ohjelmointikielistä - Java-kielelle. Teknologiaa nimeltä "Java" voidaan liioittelematta kutsua vallankumoukselliseksi ohjelmistokehitysteollisuudessa.

Lajittelu voidaan toteuttaa muilla ohjelmointikielillä, kuten PHP, C++ jne. Se on vain paljon kannattavampaa Javalla. Yksityiskohdista keskustellaan alla. Uutta on siinä, että lajitteluohjelmaa ei ole aiemmin toteutettu tällä kielellä ja tässä tulkinnassa.

Tehtävän toteuttamiseksi ehdotettiin algoritmia ohjelman kirjoittamiseen. Lisäksi tämä algoritmi toteutettiin Javassa.

Java-ohjelmointikielen kuvaus

Javan yleiset ominaisuudet

Lajitteluohjelman kirjoittamiseen valittiin Java-kieli. Java on Sun Microsystemsin vuodesta 1991 lähtien kehittämä olio-ohjelmointikieli, joka julkaistiin virallisesti 23. toukokuuta 1995. Aluksi uusi ohjelmointikieli oli nimeltään Oak (James Gosling), ja se kehitettiin kulutuselektroniikkaan, mutta myöhemmin se nimettiin uudelleen Javaksi ja sitä alettiin käyttää sovelmien, sovellusten ja palvelinohjelmistojen kirjoittamiseen.

Java-ohjelmointikieli on erilainen kuin mikään muu olemassa oleva kieli. Se on suunniteltu helpottamaan työskentelyä WWW-tietokoneilla selaimen kautta. Nykyään jokaisessa tietokoneessa on selain. Jokainen selain puolestaan ​​tukee Javaa. Tämä tarkoittaa, että voit tarkastella kaikkialla maailmassa tallennettuja asiakirjoja ja linkkiä napsauttamalla aktivoida Java-ohjelman, joka siirretään verkon yli ja ajetaan tietokoneellasi.

Yksi Java-kielen tärkeimmistä eduista on sen riippumattomuus alustasta ja tietokonetyypistä, jolla ohjelmat ovat käynnissä. Näin ollen samaa koodia voidaan käyttää käyttöjärjestelmissä Windows, Linux, FreeBSD, Solaris, Apple Mac jne. Tämä tulee erittäin tärkeäksi, kun ohjelmia ladataan maailmanlaajuisen Internetin kautta ja niitä käytetään eri alustoilla. Java-ohjelmointikieli voi toimia staattisen tekstin ja grafiikan lisäksi myös erilaisten dynaamisten objektien kanssa.

Toinen yhtä tärkeä Java etu on sen suuri samankaltaisuus C++-ohjelmointikielen kanssa. Siksi niille ohjelmoijille, jotka tuntevat C- ja C ++ -syntaksin, Java on helppo oppia.

Lisäksi Java on täysin oliokieli, jopa enemmän kuin C++. Kaikki Java-kielen entiteetit ovat objekteja, lukuun ottamatta muutamia primitiivityyppejä, kuten numeroita.

Tärkeää on myös se, että Javassa on paljon helpompaa kehittää ohjelmia, jotka eivät sisällä virheitä kuin C++:ssa.

Asia on, että Sun-yhtiön Java-kielen kehittäjät suorittivat perusteellisen analyysin ohjelmista C ++ -kielellä. Lähdekoodin "pullonkauloja" analysoitiin, mikä johti vaikeasti havaittavien virheiden ilmaantumiseen. Siksi Java-kieli päätettiin suunnitella siten, että se pystyy luomaan ohjelmia, jotka piilottaisivat yleisimmät virheet.

Tätä varten tehtiin seuraavaa:

kehittäjät ovat poistaneet mahdollisuuden varata ja vapauttaa muistia.

Esimerkiksi Java-muisti vapautetaan automaattisesti roskien keräämisen kautta. Osoittautuu, että ohjelmoija on vakuutettu virheiltä, ​​​​jotka johtuvat muistin väärästä käytöstä.

tositaulukoiden käyttöönotto ja osoittimien kieltäminen.

Nyt ohjelmoijat eivät voi poistaa tietoja muistista osoittimien virheellisen käytön vuoksi.

Mahdollisuus sekoittaa toimeksiantooperaattori tasa-arvon vertailuoperaattoriin suljettiin pois. Yleensä "="-merkin ongelma johtaa hyvin usein loogisiin virheisiin C:ssä ja C ++:ssa, joita ei ole niin helppo havaita. Varsinkin suurissa ohjelmissa.

moninkertainen perintö on täysin poissuljettu. Se on korvattu uudella konseptilla - käyttöliittymällä, jonka idea on lainattu Objective C -kielestä.

Käyttöliittymä antaa ohjelmoijalle melkein kaiken, mitä ohjelmoija voi saada useista perinnöistä, samalla kun vältetään luokkahierarkioiden hallinnasta aiheutuvat monimutkaiset.

Uusin versio on versio 1.6, jossa on parannettu turvallisuutta, parannettu tuki Mozilla Rhino -skriptikielelle, parannettu työpöytäintegraatio ja lisätty joitain uusia ominaisuuksia graafisten käyttöliittymien luomiseen.

Java ja Microsoft

Seuraavat yritykset keskittyvät pääasiassa Java (J2EE) -teknologioihin .NETin sijaan, vaikka ne käsittelevät myös jälkimmäistä: IBM, Oracle. Erityisesti Oracle DBMS sisältää JVM:n komponenttinaan, joka tarjoaa mahdollisuuden ohjelmoida DBMS suoraan Java-kielellä, mukaan lukien esimerkiksi tallennetut proseduurit.

Avainominaisuudet

Esimerkki ohjelmasta

Ohjelma, joka tulostaa "Hei, maailma!":

Julkinen luokka HelloWorld ( julkinen staattinen void main(String args) ( System .out .println ("Hei, maailma!") ; ) )

Esimerkki mallien käytöstä:

Tuo java.util.*; public class Esimerkki ( julkinen static void main(String args) ( // Luo objekti mallista. Lista strings = uusi LinkedList () ; strings.add("Hei" ) ; strings.add("maailma" ) ; strings.add("!"); for (String s: strings) ( System .out .print (s) ; System .out .print (" " ) ; ) ) )

Keskeisiä ideoita

Primitiiviset tyypit

Java-kielessä on vain 8 skalaarityyppiä: boolean, byte, char, short, int, long, float, double.

Käärimisluokat primitiivisille tyypeille

Alkuperäisten tyyppien pituudet ja arvoalueet määritellään standardilla, eivät toteutusta, ja ne esitetään taulukossa. Char-tyyppi tehtiin kaksitavuiseksi lokalisoinnin helpottamiseksi (yksi Javan ideologisista periaatteista): kun standardi muodostettiin, Unicode-16 oli jo olemassa, mutta Unicode-32 ei. Koska tuloksessa ei ollut enää yksitavuista tyyppiä, lisättiin uusi tavutyyppi. Tyypeillä float ja double voivat olla erikoisarvoja eivätkä ne ole numeroita (

Tyyppi Pituus (tavuina) Arvoalue tai joukko
boolean määrittelemätön totta, valhetta
tavu 1 −128..127
hiiltyä 2 0..2 16 -1 tai 0..65535
lyhyt 2 −2 15 ..2 15 -1 tai −32768..32767
int 4 −2 31 ..2 31 -1 tai −2147483648..2147483647
pitkä 8 −2 63 ..2 63 -1 tai noin −9,2 10 18 ..9,2 10 18
kellua 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 eli noin -3,4 10 38 ..3,4 10 38 sekä , , NaN
kaksinkertainen 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 eli noin −1,8 10 308 ..1,8 10 308 ja myös , , NaN

Tällainen jäykkä standardointi oli tarpeen kielen alustasta riippumattomuuden tekemiseksi, mikä on yksi Javan ideologisista vaatimuksista ja yksi sen menestyksen syistä. Siitä huolimatta yksi pieni alustariippumattomuuteen liittyvä ongelma jäi silti. Jotkut prosessorit käyttävät 10-tavuisia rekistereitä tulosten välimuistiin tai parantavat laskelmien tarkkuutta muilla tavoilla. Jotta Java olisi mahdollisimman yhteentoimiva eri järjestelmien välillä, kaikki keinot laskennan tarkkuuden parantamiseksi kiellettiin varhaisissa versioissa. Tämä kuitenkin johti hitaampaan suorituskykyyn. Kävi ilmi, että harvat ihmiset tarvitsevat tarkkuuden heikkenemistä alustariippumattomuuden vuoksi, varsinkin jos he joutuvat maksamaan siitä hidastamalla ohjelmien toimintaa. Lukuisten protestien jälkeen tämä kielto poistettiin, mutta strictfp-avainsana lisättiin poistamaan tarkkuuden parantaminen.

Muunnokset matemaattisissa operaatioissa

Java-kielellä on seuraavat säännöt:

  1. Jos yksi operandi on tyyppiä double, myös toinen muunnetaan tyypiksi double.
  2. Muussa tapauksessa, jos yksi operandi on tyyppiä float, myös toinen muunnetaan float-tyyppiseksi.
  3. Muussa tapauksessa, jos yksi operandi on tyyppiä pitkä, myös toinen muunnetaan tyypiksi long.
  4. Muussa tapauksessa molemmat operandit muunnetaan tyypiksi int.

Viimeinen sääntö erottaa Javan vanhemmista toteutuksista ja C++:sta ja tekee koodista turvallisemman. Joten esimerkiksi Java-kielellä koodin suorittamisen jälkeen

Lyhyt x = 50, y = 1000; int z = x*y;

muuttujalle z annetaan arvo 50000, ei −15536, kuten useimmissa toivottoman vanhentuneissa C:n ja C++:n toteutuksissa. Ohjelmassa, joka on käännetty MS VC++:lla versiosta 7 lähtien, samoin kuin monien muiden nykyaikaisten kääntäjien (gcc , Intel C++, Borland C++, Comeau jne.) arvoksi tulee myös 50000.

Objektimuuttujat, objektit, viittaukset ja osoittimet

Java-kielessä on vain dynaamisesti luotuja objekteja. Lisäksi objektityyppien muuttujat ja objektit Javassa ovat täysin erilaisia ​​entiteettejä. Objektityyppiset muuttujat ovat viittauksia, eli implisiittisiä osoittimia dynaamisesti luotuihin objekteihin. Tätä korostaa muuttujien ilmoittamisen syntaksi. Esimerkiksi Javassa et voi kirjoittaa:

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

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

Tehtyjen, alirutiineille siirtymisen ja vertailujen aikana objektimuuttujat toimivat osoittimina, eli objektien osoitteita määrätään, kopioidaan ja verrataan. Ja käytettäessä kohteen tietokenttiä tai menetelmiä objektimuuttujan avulla, mitään erityisiä viittauksenpoistotoimintoja ei tarvita - tämä pääsy suoritetaan ikään kuin objektimuuttuja olisi itse objekti.

Objektimuuttujat ovat minkä tahansa tyyppisiä muuttujia yksinkertaisia ​​numeerisia tyyppejä lukuun ottamatta. Javassa ei ole erityisiä viitteitä. Toisin kuin C-, C++- ja muiden ohjelmointikielien osoittimet, Java-viitteet ovat erittäin turvallisia niiden käyttöä koskevien tiukkojen rajoitusten vuoksi, erityisesti:

  • Et voi muuntaa objektia, jonka tyyppi on int tai muu primitiivityyppinen osoittimeksi tai viittaukseksi, ja päinvastoin.
  • Operaatioiden ++, −−, +, − tai muiden aritmeettisten operaatioiden suorittaminen linkeillä on kielletty.
  • Tyyppimuunnos viitteiden välillä on tiukasti säännelty. Matriisiviittauksia lukuun ottamatta on sallittua vain muuntaa viitteitä perityn tyypin ja sen jälkeläisen välillä, ja muuntaminen peritystä tyypistä periytyvään tyyppiin on määriteltävä ja sen tarkoituksenmukaisuus tarkistettava suorituksen aikana. Taulukon viitemuunnokset ovat sallittuja vain, kun niiden perustyyppien muunnokset ovat sallittuja eikä ulottuvuusristiriitoja ole.
  • Javassa ei ole take-address (&)- tai take-at-address (*) -toimintoja. Javan tähti tarkoittaa kertolaskua, siinä kaikki. Et-merkki (&) tarkoittaa vain "bittikohtaisesti ja" (kaksois-et-merkki on "looginen ja").

Tällaisten erityisesti Javaan käyttöön otettujen rajoitusten vuoksi suora muistinkäsittely fyysisten osoitteiden tasolla on mahdotonta (vaikka on viittauksia, jotka eivät viittaa mihinkään: tällaisen viittauksen arvo on merkitty tyhjällä).

Päällekkäiset linkit ja kloonaus

Koska objektimuuttujat ovat viitemuuttujia, määritys ei kopioi objektia. Eli jos kirjoitat

Foo foo, baari; ... baari = foo;

sitten osoite kopioidaan foo:sta baariin. Eli foo ja bar osoittavat samaan muistialueeseen, eli samaan objektiin; jos yritetään muuttaa foo:n viittaaman objektin kenttiä, se muuttaa kohteen, johon bar viittaa, ja päinvastoin. Jos tarvitset vain yhden lisää kopio lähdeobjekti, käytä joko menetelmää (jäsenfunktio, C++-terminologiassa) clone() , joka luo objektin kopion, tai kopiokonstruktoria.

Clone()-menetelmä edellyttää, että luokka toteuttaa Cloneable-rajapinnan (katso liitännät alta). Jos luokka toteuttaa Cloneable-liittymän, oletusarvoisesti clone() kopioi kaikki kentät ( pieni kopio). Jos haluat kloonata kenttiä (sekä niiden kenttiä ja niin edelleen) kopioimisen sijaan, sinun on ohitettava clone()-menetelmä. Clone()-menetelmän määrittäminen ja käyttäminen ei useinkaan ole triviaali tehtävä.

Roskakokoelma

Java-kielessä objektia ei voi eksplisiittisesti poistaa muistista - sen sijaan toteutetaan roskienkeruu. Perinteinen temppu antaa roskankerääjälle "vihje" muistin purkamiseen on asettaa muuttuja arvoon null . Tämä ei kuitenkaan tarkoita, että esine olisi korvattu tyhjä, poistetaan varmasti ja välittömästi. Tämä tekniikka poistaa vain viittauksen objektiin, eli irrottaa osoittimen muistissa olevasta objektista. Tässä tapauksessa on syytä muistaa, että roskankerääjä ei poista objektia niin kauan kuin vähintään yksi viittaus käytetyistä muuttujista tai objekteista osoittaa siihen. On olemassa myös menetelmiä pakotetun roskankeräyksen aloittamiseen, mutta ajonaika ei välttämättä kutsu niitä, eikä niitä suositella normaaliin käyttöön.

Luokat ja toiminnot

Java ei ole proseduurikieli: mikä tahansa funktio voi olla olemassa vain luokassa. Tätä korostaa Java-kielen terminologia, jossa ei ole käsitteitä "funktio" tai "jäsentoiminto" (eng. jäsentoiminto), mutta vain menetelmä. Myös standardifunktioista on tullut menetelmiä. Esimerkiksi Javassa ei ole sin()-funktiota, mutta Math-luokan Math.sin()-metodi (joka sisältää sin() :n lisäksi cos() , exp() , sqrt() , abs() ja monet muut menetelmät).

Staattiset menetelmät ja kentät

Jotta Math-luokan (ja muiden vastaavien luokkien) objektia ei luoda aina, kun sinun täytyy kutsua sin () (ja muita vastaavia toimintoja), käsite staattiset menetelmät(Englanti) staattinen menetelmä; joskus venäjäksi niitä kutsutaan staattisiksi). Staattinen metodi (merkitty kuvauksessa staattisella avainsanalla) voidaan kutsua luomatta sen luokkaan kuuluvaa objektia. Siksi voi kirjoittaa

Double x = Math .sin(1) ;

Math m = uusi Math(); double x = m.sin(1) ;

Staattisten menetelmien rajoitus on, että ne voivat käyttää vain tämän objektin staattisia kenttiä ja menetelmiä.

Staattisilla kentillä on sama merkitys kuin C++:ssa: kutakin on vain yksi esiintymä.

Lopullisuus

Viimeinen avainsana tarkoittaa eri asioita, kun kuvataan muuttujaa, menetelmää tai luokkaa. Lopullinen muuttuja (nimeltään vakio) alustetaan, kun se on ilmoitettu, eikä sitä voi muuttaa enempää. Viimeistä menetelmää ei voi ohittaa periytymisellä. Viimeisellä luokalla ei voi olla perillisiä ollenkaan.

Abstraktio

Javalla menetelmät, joita ei ole nimenomaisesti ilmoitettu lopullisiksi tai yksityisiksi, ovat virtuaalisia C++-terminologiassa: perusluokissa eri tavalla määritellyn metodin kutsuminen ja periytyvä luokkiin kuuluvat aina ajonaikaiseen tarkistukseen.

Abstrakti menetelmä (abstrakti kuvaaja) Javassa on menetelmä, jolle määritetään parametrit ja palautustyyppi, mutta ei runkoa. Abstrakti menetelmä määritellään johdetuissa luokissa. C++:ssa samaa kutsutaan puhtaaksi virtuaalifunktioksi. Jotta luokka voisi kuvata abstrakteja menetelmiä, luokka itse on myös määritettävä abstraktiksi. Abstrakteja luokkaobjekteja ei voi luoda.

Liitännät

Javan korkein abstraktioaste on käyttöliittymä. Kaikki käyttöliittymämenetelmät ovat abstrakteja: abstraktia kuvaajaa ei edes vaadita. Käyttöliittymä ei ole luokka. Luokka voi periä tai laajentaa(laajentaa) toista luokkaa tai toteuttaa(toteuttaa) käyttöliittymä. Lisäksi rajapinta voi periytyä toiselta rajapinnalta tai laajentaa sitä.

Javassa luokka ei voi periä useampaa kuin yhtä luokkaa, mutta se voi toteuttaa minkä tahansa määrän rajapintoja.

Liitännät voidaan siirtää menetelmille parametreina, mutta niiden tyyppisiä objekteja ei voida luoda.

Merkin käyttöliittymät

Javassa on joitain rajapintoja, jotka eivät sisällä toteutettavia menetelmiä, mutta joita JVM käsittelee erityisellä tavalla. Nämä ovat käyttöliittymät:

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

Java-mallit (yleiset)

Java 5:stä alkaen kielellä on yleinen ohjelmointimekanismi - mallit, jotka ovat ulkoisesti lähellä C++-malleja. Käyttämällä erityistä syntaksia luokkien ja menetelmien kuvauksessa voit määrittää tyyppiparametreja, joita voidaan käyttää kuvauksen sisällä kenttätyypeinä, parametreina ja metodien palautusarvoina.

// Yleinen luokkailmoitus luokka GenericClass ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Yleisen luokan käyttäminen koodissa Generic Class var = uusi GenericClass () ; var.add("qwerty") ; Merkkijono p = var.getFirst();

Luokkien, rajapintojen ja menetelmien yleinen ilmoitus on sallittu. Lisäksi syntaksi tukee rajoitettuja parametrityyppien määrityksiä: ilmaisu lomakkeen rakenteesta vaatii tyyppiparametrin T toteuttamaan liitännät A, B, C ja niin edelleen sekä konstruktion edellyttää, että tyyppiparametri T on tyyppi C tai jokin sen esivanhemmista.

Toisin kuin C#-malleja, ajonaika ei tue Java-malleja - kääntäjä yksinkertaisesti luo tavukoodin, joka ei sisällä malleja. Mallien toteutus Javassa eroaa olennaisesti vastaavien mekanismien toteutuksesta C ++:ssa: kääntäjä ei luo erillistä varianttia luokka- tai mallimenetelmästä jokaiselle mallin käyttötapaukselle, vaan luo yksinkertaisesti yhden tavukoodin toteutuksen, joka sisältää tarvittavat tyyppitarkastukset ja muunnokset. Tämä johtaa useisiin rajoituksiin mallien käytölle Java-ohjelmissa.

Luokan jäsenten tarkistus

Javassa voit tarkastaa tarkasti, mihin luokkaan objekti kuuluu. Lause foo esiintymä Foo on tosi, jos objekti foo kuuluu luokkaan Foo tai sen jälkeläiseen tai toteuttaa Foo-rajapinnan (tai yleisemmin perii luokan, joka toteuttaa Foon perimän rajapinnan).

Seuraavaksi kaikille objekteille määritetty getClass()-funktio palauttaa Class-tyypin objektin. Näitä kohteita voidaan verrata keskenään. Joten esimerkiksi foo.getClass()==bar.getClass() on tosi, jos objektit foo ja bar kuuluvat täsmälleen samaan luokkaan (mutta tämä ei tarkoita, että ne olisivat kaksi identtistä objektia).

Lisäksi minkä tahansa tyyppinen Class-tyyppinen objekti voidaan saada seuraavasti: Integer.class , Object.class .

Luokkien suora vertailu ei kuitenkaan aina ole paras tapa tarkistaa luokkaan kuuluminen. Usein sen sijaan käytetään isAssignableFrom()-funktiota. Tämä funktio on määritetty Class-tyypin objektille ja ottaa parametriksi Class-tyypin objektin. Siten kutsu Foo.class.isAssignableFrom(Bar.class) palauttaa arvon tosi, jos Foo on Bar-luokan esi-isä. Koska kaikki objektit ovat Object-tyypin jälkeläisiä, Object.class.isAssignableFrom():n kutsuminen palauttaa aina true -arvon. Yhdessä mainittujen Class-tyypin objektin funktioiden kanssa käytetään myös toimintoja isInstance() (vastaa instanceofa) ja cast() (muuntaa parametrin valitun luokan objektiksi).

Luokkakirjastot

Ohjelmistokehitystyökalut

  • JDK - Java SE- ja Java EE -alustoille tarkoitettujen kirjastojen lisäksi se sisältää kääntäjän komentorivi javac ja joukko apuohjelmia, jotka toimivat myös komentorivitilassa.
  • NetBeans IDE on ilmainen IDE kaikille Java-alustoille - Java ME, Java SE ja Java EE. Java-kehittäjä Sun Microsystems on mainostanut ohjelmistokehityksen perustana Java- ja muilla kielillä (, C++, Fortran jne.).
  • Java SE ja Java EE. Eclipsen Java ME -alustan tukeminen on käynnissä. C, C++, Fortran jne. edistetään.)
  • IntelliJ IDEA on kaupallinen kehitysympäristö Java SE-, Java EE- ja Java ME -alustoille.

Huomautuksia

  1. java (englanniksi). Merriam-Webster online-sanakirja. Merriam Webster. - sanan "Java" englanninkielinen ääntäminen. Haettu 5. kesäkuuta 2009.
  2. Robert Tolksdorf. Ohjelmointikielet Java Virtual Machine JVM:lle. on research GmbH. - Online-luettelo vaihtoehtoisista kielistä ja kielilaajennuksista JVM:lle. Haettu 5. kesäkuuta 2009.
  3. Microsoft Java Virtual Machine -tuki. Microsoft (12.9.2003). - Microsoftin virallinen lausunto MSJVM-tukiohjelmasta. Haettu 5. kesäkuuta 2009.
  4. Todd Hoff Amazon Architecture (englanniksi) (2007-09-18). - Keskustelu Amazon-arkkitehtuurista Java-tekniikoiden avulla. Haettu 6. kesäkuuta 2009.
  5. Amazon Elastic Compute Cloud (Amazon EC2) . Amazon Web Services LLC. - Kuvaus Amazon EC2:n tekniikasta ja ominaisuuksista verkkopalveluna. Haettu 6. kesäkuuta 2009.
  6. Todd Hoff eBay Architecture (englanniksi) (2008-05-27). - Keskustelu eBayn arkkitehtuurista Java-alustalla. Haettu 6. kesäkuuta 2009.
  7. Randy Shoup, Dan Pritchett eBay-arkkitehtuuri (englanniksi) (PDF). SD Forum 2006(2006-11-29). - Esitys eBay-arkkitehtuurin kehityksen historiasta. Haettu 6. kesäkuuta 2009.
  8. Allen Stern Eksklusiivinen haastattelu Yandexin teknologiajohtajan Ilya Segalovichin kanssa (englanniksi). CenterNetworks (14.1.2008). - Haastattelu Yandexin teknologiajohtajan Ilja Segalovichin kanssa. Haettu 6. kesäkuuta 2009.
  9. Anatoli Orlov Yandex.Search-arkkitehtuuri (venäjä) (PowerPoint). Materiaalit JUG-kokouksesta Jekaterinburgissa(24.5.2008). Haettu 6. kesäkuuta 2009.
  10. Brian Guan LinkedIn-blogi. Blogiarkisto. Grails LinkedInissä. (Englanti) . LinkedIn.com (2008-06-11). - Grails Java -teknologiaan perustuvan LinkedIn-järjestelmän luomisen historia. Haettu 5. kesäkuuta 2009.
  11. OracleJVM ja Java tallennetut menettelyt. Oracle Inc. - Oracle-portaalin osa, joka on omistettu Java-tekniikoille osana Oracle DBMS -palvelinta. Haettu 5. kesäkuuta 2009.
  12. Linkki Object.clone()-menetelmän dokumentaatioon

Kirjallisuus

  • Monakhov Vadim Java-ohjelmointikieli ja NetBeans-ympäristö, 2. painos. - Pietari .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Joshua Bloch. Java. Tehokas ohjelmointi = Tehokas Java. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Professional's Library, osa 1. Fundamentals = Core Java™ 2, Volume I -- Fundamentals. - 7. painos - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Kay S. Horstmann, Gary Cornell. Java 2. Ammattilaisten kirjasto, osa 2. Ohjelmointivinkkejä = Core Java™ 2, Volume II - Lisäominaisuudet. - 7. painos - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Bruce Eckel. Java-filosofia = Thinking in Java. - 3. painos - Pietari: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herbert Schildt, James Holmes. Java-ohjelmoinnin taito = The Art of Java. - M .: "Dialektiikka", 2005. - S. 336. - ISBN 0-07-222971-3
  • Lubos Bruga. Nopea Java: Käytännön pikakurssi = Luboš Brůha. Java Hotová řešení.. - M .: Tiede ja teknologia, 2006. - S. 369. - ISBN 5-94387-282-5

Java on SunMicrosystemsin kehittämä ohjelmointikieli. Java-sovellukset on yleensä käännetty erityiseen tavukoodiin, joten ne voivat toimia missä tahansa Java-virtuaalikoneessa (JVM) tietokoneen arkkitehtuurista riippumatta. Virallinen julkaisupäivä on 23. toukokuuta 1995. Nykyään Java-teknologia tarjoaa keinot muuttaa staattiset Web-sivut interaktiivisiksi, dynaamisiksi asiakirjoiksi ja luoda hajautettuja, alustasta riippumattomia sovelluksia.

Java-ohjelmat käännetään tavukoodiksi, jonka suorittaa Java Virtual Machine (JVM), ohjelma, joka käsittelee tavukoodin ja välittää ohjeita laitteistolle tulkkina.

Tämän ohjelmien suoritustavan etuna on tavukoodin täydellinen riippumattomuus käyttöjärjestelmä ja laitteisto, jonka avulla voit ajaa Java-sovelluksia millä tahansa laitteella, jolle on olemassa vastaava virtuaalikone. Toinen tärkeä ominaisuus Java-tekniikka on joustava turvajärjestelmä, koska ohjelman suoritus on täysin virtuaalikoneen hallinnassa. Kaikki toiminnot, jotka ylittävät ohjelman asetetut käyttöoikeudet (kuten tietojen luvaton käyttö tai yhteyden muodostaminen toiseen tietokoneeseen), aiheuttavat välittömän keskeytyksen.

Usein virtuaalikoneen konseptin haittoja ovat se, että virtuaalikoneen suorittama tavukoodi voi heikentää Java-kielellä toteutettujen algoritmien ohjelman suorituskykyä. Viime aikoina on tehty useita parannuksia, jotka hieman lisäävät Java-ohjelmien suoritusnopeutta:

Tavukoodin konekoodiksi muuntamisen tekniikan soveltaminen suoraan ohjelman käytön aikana (JIT-tekniikka) ja mahdollisuus tallentaa luokkaversiot konekoodiin,

Alustasuuntautuneen koodin (natiivikoodin) laaja käyttö standardikirjastoissa,

Laitteisto, joka tarjoaa nopeutetun tavukoodinkäsittelyn (esimerkiksi Jazelle-tekniikka, jota jotkut ARM-prosessorit tukevat).



Kielen tärkeimmät ominaisuudet:

Automaattinen muistin hallinta;

Laajennetut valmiudet käsitellä poikkeuksellisia tilanteita;

Runsas joukko tulo-/lähtösuodatustyökaluja;

Joukko vakiokokoelmia, kuten taulukko, luettelo, pino jne.;

Yksinkertaisten työkalujen saatavuus verkkosovellusten luomiseen (mukaan lukien RMI-protokollan käyttö);

Luokkien läsnäolo, joiden avulla voit tehdä HTTP-pyyntöjä ja käsitellä vastauksia;

Sisäänrakennetut kielityökalut monisäikeisten sovellusten luomiseen;

Yhtenäinen pääsy tietokantaan:

Yksittäisten SQL-kyselyiden tasolla - perustuen JDBC:hen, SQLJ:hen;

Objektien käsitteen tasolla, jolla on mahdollisuus tallentaa tietokantaan - perustuu Java Data Objectsiin ja Java Persistence API:hin;

Tuki malleille (versiosta 1.5 alkaen);

Ohjelmien rinnakkainen suoritus.

1.4.3 C#-ohjelmointikieli

Kesäkuussa 2000 tuli tunnetuksi uudesta ohjelmointikielestä, joka syntyi Microsoftin suolistossa. Hänestä tuli osa uusi teknologia Microsoft kutsui .NET:tä (lausutaan "Dot Net"). Tämän tekniikan puitteissa tarjotaan yksi suoritusympäristö eri ohjelmointikielillä kirjoitetuille ohjelmille (Common Language Runtime, CLR). Yksi näistä kielistä, tärkein tässä ympäristössä, on C # (C #, lue "C Sharp", "C Sharp"). Kielen nimellä haluttiin tietysti korostaa sen suhdetta C++:aan, koska # on kaksi leikkaavaa plussaa. Mutta ennen kaikkea uusi kieli on samanlainen kuin Java. Ja ei ole epäilystäkään siitä, että yksi syy sen ilmestymiseen oli Microsoftin halu vastata Sunin haasteeseen.

Vaikka C#:n tekijöitä ei ole virallisesti nimetty, yhden kielioppaan alustavan painoksen otsikkosivulla mainitaan Turbo Pascalin ja Delphin luoja Anders Hejlsberg, joka siirtyi Microsoftille vuonna 1996, ja Scott Wiltamuth.

Yhtenäinen ohjelman suoritusympäristö perustuu välikielen IL (Intermediate Language - intermediate language) käyttöön, jolla on lähes sama rooli kuin Java-virtuaalikoneen tavukoodilla. Kääntäjät eri kielistä, joita käytetään .NET-tekniikassa, kääntävät ohjelmat IL-koodiksi. Kuten Java-tavukoodi, IL-koodi edustaa hypoteettisen pinotietokoneen ohjeita. Mutta myös IL:n suunnittelussa ja käytössä on eroja.

Ensinnäkin, toisin kuin JVM, IL ei ole sidottu yhteen ohjelmointikieleen. Microsoft.NET:n alustavat versiot sisältävät kääntäjät C++:lle, C#:lle ja Visual Basicille. Riippumattomat kehittäjät voivat lisätä muita kieliä luomalla kääntäjiä näistä kielistä IL-koodiin.

Toiseksi, IL ei ole tarkoitettu ohjelmalliseen tulkintaan, vaan myöhempään konekoodiksi kääntämiseen. Näin voit saavuttaa huomattavasti tehokkaampia ohjelmia. IL-koodia sisältävät tiedostot sisältävät riittävästi tietoa optimoivan kääntäjän toimimiseksi.

"C# on yksinkertainen, moderni, tyyppiturvallinen oliokieli, joka on johdettu C:stä ja C++:sta. C# on kätevä ja ymmärrettävä ohjelmoijille, jotka osaavat C ja C++. C# yhdistää Visual Basicin tuottavuuden C++:n tehoon." Nämä sanat aloittavat C#:n kuvauksen.

Harkitse tekniset ominaisuudet Kieli:

Käännösyksikkö on tiedosto (kuten C, C++, Java). Tiedosto voi sisältää yhden tai useamman tyyppikuvauksen: luokat (luokka), rajapinnat (rajapinta), rakenteet (struct), luettelot (enum), delegaattityypit (delegate) joko ilmoittamalla niiden jakautumisesta nimiavaruuksiin tai ilman niitä;

Nimiavaruudet (nimiavaruudet) säätelevät ohjelmaobjektien näkyvyyttä (kuten C++:ssa). Nimiavaruudet voivat olla sisäkkäisiä. Ohjelmaobjekteja saa käyttää määrittelemättä nimenomaisesti nimiavaruutta, johon tämä objekti kuuluu. Pelkkä yleinen maininta tämän nimiavaruuden käytöstä use-direktiivissä (kuten Turbo Pascalissa) riittää. Use-direktiivissä on nimiavaruuden nimille aliaksia (kuten Oberon-kielessä);

Perustietotyypit: 8-bittinen (sbyte, tavu), 16-bittinen (lyhyt, ushort), 32-bittinen (int, uint) ja 64-bittinen (pitkä, ulong) etumerkityt ja etumerkitmättömät kokonaisluvut, yksittäiset realit (float ) ja kaksinkertainen (double) tarkkuus, Unicode-merkit (char), boolen tyyppi (bool, ei yhteensopiva kokonaislukujen kanssa), desimaalityyppi, joka tarjoaa 28 merkitsevän numeron tarkkuuden (desimaali);

Strukturoidut tyypit: luokat ja rajapinnat (kuten Javassa), yksiulotteiset ja moniulotteiset (toisin kuin Java) taulukot, merkkijonot (merkkijono), rakenteet (melkein samat kuin luokat, mutta eivät kasaan ja ilman perintöä), luettelot, yhteensopimattomat kokonaisluvuilla (kuten Pascalissa);

Delegaattityypit tai yksinkertaisesti "delegaatit" (kuten prosessityypit Module-2:ssa ja Oberonissa, toimintoosoittimet C:ssä ja C++:ssa);

Tyypit on jaettu viitetyyppeihin (luokat, rajapinnat, taulukot, delegaatit) ja arvotyyppeihin (alkeistyypit, luettelot, rakenteet). Viitetyyppien objektit allokoidaan dynaamiseen muistiin (keon), ja viitetyyppien muuttujat ovat itse asiassa osoittimia näihin objekteihin. Arvotyyppien tapauksessa muuttujat eivät ole osoittimia, vaan arvoja itse. Implisiittiset tyyppimuunnokset ovat sallittuja vain, jos ne eivät riko tyyppiturvallisuutta tai aiheuta tietojen menetystä. Kaikki tyypit, mukaan lukien perustyypit, ovat yhteensopivia objektityypin kanssa, joka on kaikkien muiden tyyppien perusluokka. On olemassa implisiittinen arvotyyppien muunnos objektityypille, jota kutsutaan boxingiksi, ja eksplisiittinen käänteinen muunnos - unboxing;

Automaattinen roskatkeräys (kuten Oberonissa ja Javassa);

Laaja valikoima toimintoja 14 prioriteettitasolla. Operaatioiden uudelleenmäärittely (kuten Algol-68, Ada, C++). Valituilla ja valitsemattomilla operaattoreilla voit hallita ylivuodon hallintaa suoritettaessa operaatioita kokonaisluvuille;

Menetelmät arvoparametreilla, referenssiparametreilla (viite) ja lähtöparametreilla (out). Sanat ref ja out tulee kirjoittaa ennen parametria, ei vain menetelmän kuvauksessa, vaan myös kutsuttaessa. Lähtöparametrien läsnäolon avulla voit ohjata määrittelytehtävien suorittamista. Kielen sääntöjen mukaan jokaisella muuttujalla on oltava arvo ennen kuin sitä yritetään käyttää;

Ohjauskäskyt: if, switch, while, do, for, break, jatka (kuten C, C++ ja Java). Foreach-lause, joka kiertää "kokoelman" jokaisen elementin läpi, useita goto jump -lauseen muotoja;

Poikkeuskäsittely (kuten Javassa);

Ominaisuudet - luokkien (objektien) elementit, joihin pääsy tapahtuu samalla tavalla kuin kentät (voit määrittää tai saada arvon), mutta ne toteutetaan implisiittisesti kutsutuilla get and set -alirutiinilla (kuten Object Pascalissa - syöttökieli Delphi-järjestelmästä);

Indeksoijat ovat luokkien (objektien) elementtejä, joiden avulla voit käyttää objekteja samalla tavalla kuin taulukoita (määrittämällä hakemiston hakasulkeet). Toteutettu implisiittisesti kutsuttujen get and set -rutiinien avulla. Esimerkiksi pääsy (lukemista varten) merkkijonon merkkeihin voidaan suorittaa taulukon elementteinä johtuen siitä, että vakiomerkkijonoluokassa on toteutettu indeksointi;

Tapahtumat ovat proseduurityyppisiä luokkien (kenttien tai ominaisuuksien) elementtejä (delegaatit), joille sen luokan ulkopuolella, jossa ne on määritetty, voidaan soveltaa vain += ja -= -operaatioita, joiden avulla voit lisätä tai poistaa tapahtumien käsittelymenetelmiä objekteille. tästä luokasta;

Epäturvallinen (safe) koodi, jossa käytetään osoittimia ja osoitearitmetiikkaa, lokalisoidaan ohjelman osiin, jotka on merkitty vaarallisella muokkaimella;

Esiprosessori, joka toisin kuin C ja C++ tarjoaa vain ehdolliset käännöstoiminnot.

Tietenkin, C #:n käsitellyt puutteet eivät estä kieltä lainkaan näkymistä. Se on monella tapaa parempi kuin C++. Yleinen tyytymättömyys C++-kieleen, joka tunnistetaan jo uuden kielen ilmestymisestä, on yksi C#:n menestymisen tärkeimmistä edellytyksistä.

Vertaamalla C#:a Javaan, voit nähdä monia yhtäläisyyksiä. Totta, jos Java-järjestelmät ovat monikäyttöisiä, C # -toteutus on olemassa vain käyttöjärjestelmälle. Windows-järjestelmät ja vain yksi. Mutta raskaudesta huolimatta voidaan olettaa, että kieli toteutetaan muihin järjestelmiin. Lisäksi itse Microsoft .NET -alusta, jossa on yksi ohjelman suoritusympäristö, voidaan nostaa vaihtoehtoisiin arkkitehtuureihin, ensisijaisesti UNIX-järjestelmiin.

C# näyttää olevan realistisempi kieli kuin Java. Toisin kuin Java, se on omavarainen. Eli voit kirjoittaa minkä tahansa ohjelman C#-kielellä turvautumatta muihin kieliin. Tämä on mahdollista "vaarallisten" koodilohkojen vuoksi, jotka avaavat pääsyn suoraan laitteistoon. Javassa pääsyn matalan tason palveluihin on käytettävä "natiivimenetelmiä" (natiivimenetelmiä), jotka on ohjelmoitava muilla kielillä.

Ja tietysti C #:n näkymät liittyvät ensisijaisesti ponnisteluihin, joita Microsoft tietysti tekee edistääkseen sitä.