Java- ja C++-ohjelmointikielten vertailu

Java ja C++ ovat kaksi merkittävää olio-ohjelmointikieltä. Monien kielten suosion mittareiden mukaan nämä kaksi kieltä ovat dominoineet olio- ja korkean suorituskyvyn ohjelmistokehitystä suuren osan 2000-luvulta, ja niitä verrataan ja verrataan usein suoraan. Java ilmestyi noin 10 vuotta myöhemmin ja sen syntaksi perustui C/C++:aan.

Suunnittelun tavoitteet 
Ohjelmointikielten C++ ja Java erot voidaan jäljittää niiden perintöön, sillä niillä on erilaiset suunnittelutavoitteet.

C++ on suunniteltu järjestelmien ja sovellusten ohjelmointiin (eli infrastruktuuriohjelmointiin) laajentaen proseduuriohjelmointikieltä C, joka oli suunniteltu tehokkaaseen suorittamiseen. C++ lisäsi tuen oliopohjaiselle ohjelmointille, poikkeusten käsittelylle, elinikäiseen resurssien hallintaan (RAII), yleiseen ohjelmointiin, mallin metaohjelmointiin ja C++ Standard Libraryyn, joka sisältää yleisiä säilöjä ja algoritmeja (Standard Template Library tai STL), ja monia muita yleiskäyttöisiä tiloja.

Java on yleiskäyttöinen, samanaikainen, luokkapohjainen, olio-ohjelmointikieli, joka on suunniteltu minimoimaan toteutusriippuvuudet. Se luottaa siihen, että Java-virtuaalikone on turvallinen ja erittäin kannettava. Se on niputettu laajan kirjaston kanssa, joka on suunniteltu tarjoamaan täydellinen abstraktio taustalla olevasta alustasta. Java on staattisesti kirjoitettu oliokieli, joka käyttää samanlaista syntaksia kuin C++ (mutta ei yhteensopiva sen kanssa). Se sisältää dokumentaatiojärjestelmän nimeltä Javadoc.

Erilaiset tavoitteet C++ ja Javan kehittämisessä johtivat erilaisiin periaatetteisiin ja suunnittelun kompromisseihin kielten välillä. Erot ovat seuraavat:

Kielen ominaisuudet

Syntaksi 

 Javassa on kontekstivapaa kielioppi, jonka jäsentäminen voidaan suorittaa yksinkertaisella LALR-parserilla. C++ jäsentäminen on monimutkaisempaa, esimerkiksi, Foo<1>(3); on sarja vertailuja, jos Foo on muuttuja, mutta se luo olion, jos Foo on luokkamallin nimi.
 C++ mahdollistaa nimiavaruus-tason vakiot, muuttujat ja funktiot. Vastaavasti Javassa vastaavien olioiden on kuuluttava johonkin tiettyyn tyyppiin ja ne on määriteltävä tyypin määrityksen sisällä, joko luokassa tai rajapinnassa.
 C++:ssa oliot ovat arvoja, kun taas Javassa ne eivät ole. C++ käyttää arvo semantiikkaa oletuksena, kun taas Java käyttää viittaussemantiikkaa. Osoitinta tai viittausta voidaan käyttää viittaussemantiikan valitsemiseen C++:ssa.

Lähteet 

Java
C++
Olio-ohjelmointi