- Peamised erinevused C++ ja Java vahel
- Tabeliformaat: C++ vs Java
- Sageli esitatud küsimused C++ ja Java keeles
- Kokkuvõte
See põhjalik õpetus selgitab mõningaid peamisi erinevusi kahe objektorienteeritud programmeerimiskeele C++ ja Java vahel:
C++ ja Java on mõlemad objektorienteeritud programmeerimiskeeled, kuid mõlemad keeled erinevad üksteisest mitmel viisil.
C++ on tuletatud C-st ja sellel on nii protseduurilise kui ka objektorienteeritud programmeerimiskeele omadused. C++ on loodud rakenduste ja süsteemide arendamiseks.
Java on üles ehitatud virtuaalmasinale, mis on oma olemuselt väga turvaline ja väga kaasaskantav. See on rühmitatud ulatusliku raamatukoguga, et toetada olemasoleva platvormi abstraktsiooni.
Java on mõeldud peamiselt rakenduste programmeerimiseks ja sellel on trükisüsteemide interpretaatori funktsioon, mis hiljem arendati edasi võrguarvutiteks.
Soovitatav lugemine => C++ koolitusjuhend kõigile
Peamised erinevused C++ ja Java vahel
Nüüd arutame mõningaid peamisi erinevusi C++ Vs Java, kui me jätkame seda
õpetus.
#1) Platvorm Sõltumatus
C++ | Java |
---|---|
C++ on platvormi sõltuv keel. C++ keeles kirjutatud lähtekood tuleb kompileerida igal platvormil. | Java on platvormi sõltumatu. Kui see on kompileeritud baitkoodiks, saab seda täita mis tahes platvormil. |
#2) Kompilaator ja interpretaator
C++ | Java |
---|---|
C++ on kompileeritud keel. Kirjutatud lähtekoodiga programm C++ keeles kompileeritakse objektkoodiks, mida saab seejärel käivitada, et toota väljundit. | Java on nii kompileeritud kui ka interpreteeritud keel. Java lähtekoodi kompileeritud väljund on baitkood, mis on platvormi sõltumatu. |
#3) Kaasaskantavus
C++ | Java |
---|---|
C++ kood ei ole kaasaskantav. See tuleb koostada iga platvormi jaoks. | Java aga tõlgib koodi baitkoodiks. See baitkood on kaasaskantav ja seda saab täita mis tahes platvormil. |
#4) Mälu haldamine
C++ | Java |
---|---|
Mälu haldamine C++ keeles on käsitsi. Me peame eraldama/eemaldama mälu käsitsi, kasutades operaatoreid new/delete. | Java's on mäluhaldus süsteemikontrollitud. |
#5) Mitmekordne pärandamine
C++ | Java |
---|---|
C++ toetab erinevaid pärimise tüüpe, sealhulgas ühekordset ja mitmekordset pärimist. Ehkki mitmest pärimisest tulenevad probleemid, kasutab C++ nende lahendamiseks virtuaalset võtmesõna. | Java, toetab ainult ühekordset pärimist. Mitmekordse pärimise mõju saab saavutada Java liideste abil. |
#6) Ülekoormus
C++ | Java |
---|---|
C++ keeles saab meetodeid ja operaatoreid üle laadida. See on staatiline polümorfism. | Javas on lubatud ainult meetodite ülekoormamine. See ei võimalda operaatori ülekoormamist. |
#7) Virtuaalne märksõna
C++ | Java |
---|---|
Dünaamilise polümorfismi osana kasutatakse C++-s koos funktsiooniga virtuaalset võtmesõna, et näidata funktsiooni, mida saab tuletatud klassis üle sõita. Nii saavutame polümorfismi. | Java's puudub virtuaalne võtmesõna. Java's on aga vaikimisi kõik mittestaatilised meetodid üle muudetavad. Lihtsamalt öeldes on kõik mittestaatilised meetodid Javas vaikimisi virtuaalsed. |
#8) Osutajad
C++ | Java |
---|---|
C++ on kõik näitajad. Nagu varem õpikutes nähtud, on C++ programmil tugev toetus osutajatele ja me saame teha palju kasulikku programmeerimist, kasutades osutajaid. | Java on piiratud toetusega osutajatele. Algselt oli Java täielikult ilma osutajateta, kuid hilisemad versioonid hakkasid osutajatele piiratud tuge pakkuma. Me ei saa Java's kasutada osutajaid nii vabalt kui C++'s. |
#9) Dokumentatsiooni kommentaar
C++ | Java |
---|---|
C++ ei toeta dokumentatsiooni kommentaare. | Java'l on sisseehitatud tugi dokumentatsiooni kommentaaridele (/**...*/). Nii saab Java lähtekoodifailidel olla oma dokumentatsioon. |
#10) Niiditugi
C++ | Java |
---|---|
C++-l ei ole sisseehitatud niidituge, see sõltub enamasti kolmandate osapoolte niiditöötlusraamatukogudest. | Java on sisseehitatud niiditugi klassiga "thread". Me võime pärida niidiklassi ja seejärel üle kirjutada meetodi run. |
Veel mõned erinevused...
#11) Juurhierarhia
C++ on nii protseduuriline kui ka objektorienteeritud programmeerimiskeel. Seega ei järgi see mingit konkreetset juurte hierarhiat.
Java on puhtalt objektorienteeritud programmeerimiskeel ja sellel on üks juurhierarhia.
#12 ) Allikakood & klassi suhe
C++ keeles ei ole nii lähtekoodil kui ka failinimel mingit seost. See tähendab, et meil võib olla C++ programmis palju klasse ja failinimi võib olla mis tahes. See ei pea olema sama, mis klasside nimed.
Javas on lähtekoodi klassi ja failinime vahel tihe seos. Klass, mis sisaldab lähtekoodi ja failinime, peaks olema sama.
Näiteks , kui meil on Java's klass nimega palk, siis selle klassi koodi sisaldav failinimi peaks olema "salary.java".
#13 ) Kontseptsioon
C++ programmide kontseptsioon on kirjutada üks kord ja kompileerida ükskõik kus, kuna C++ ei ole platvormi sõltumatu.
Vastupidi, Java-programmide puhul kirjutatakse üks kord, käivitatakse kõikjal ja igal pool, kuna Java-kompilaatori poolt genereeritud baatkood on platvormi sõltumatu ja võib töötada igal masinal.
#14 ) Ühilduvus teiste keeltega
C++ on ehitatud C-le. C++ keel ühildub enamiku teiste kõrgetasemeliste keeltega.
Java ei ühildu teiste keeltega. Kuna Java on inspireeritud C ja C++ keeltest, on selle süntaks sarnane nende keeltega.
#15 ) Programmeerimiskeele tüüp
C++ on nii protseduuriline kui ka objektorienteeritud programmeerimiskeel. Seega on C++ keelel nii protseduurilistele keeltele iseloomulikud omadused kui ka objektorienteeritud programmeerimiskeele omadused.
Java on täielikult objektorienteeritud programmeerimiskeel.
#16 ) Raamatukogu liides
C++ võimaldab otsekõnesid emakeelsetele süsteemiraamatukogudele. Seega sobib see paremini süsteemitasemel programmeerimiseks.
Java ei toeta otse oma emakeelseid raamatukogusid. Me saame raamatukogusid kutsuda Java Native Interface'i või Java Native Access'i kaudu.
#17 ) Eristavad tunnused
Protseduuriliste keelte ja objektorienteeritud keelega seotud omadused on C++ keelele iseloomulikud.
Automaatne prügikoristus on Java eripära. Vahepeal ei toeta Java destruktoreid.
#18 ) Tüübi semantika
Mis puutub C++ tüübisemantikasse, siis primitiivsed ja objektitüübid on järjepidevad.
Kuid Java puhul puudub kooskõla primitiivsete ja objektitüüpide vahel.
#19 ) Sisendmehhanism
C++ kasutab andmete lugemiseks ja kirjutamiseks cin ja cout koos operaatoritega '>>' ja '<<'.
Java's kasutatakse sisend-väljundiks klassi System. Sisendi lugemiseks kasutatakse System.in, mis loeb ühe baidi kaupa. Väljundi kirjutamiseks kasutatakse konstruktsiooni System.out.
#20) Juurdepääsu kontroll ja objektide kaitse
C++ on paindlik objektide mudel, mille puhul on juurdepääsumäärangud kontrollivad juurdepääsu ja tugev kapseldamine tagab kaitse.
Javal on suhteliselt kohmakas ja nõrgalt kapseldatud objektimudel.
#21) Goto avaldus
C++ toetab goto-avaldust, kuid selle kasutamist tuleks minimeerida, et vältida selle kasutamise tagajärgi programmis.
Java ei paku tuge goto-avaldusele.
#22 ) Reguleerimisala resolutsioon Operaator
Scope resolution operaatorit kasutatakse globaalsetele muutujatele ligipääsemiseks ja meetodite defineerimiseks väljaspool klassi.
C++ toetab scope resolution operaatorit, kuna kasutab seda globaalsetele muutujatele ligipääsemiseks. Samuti võimaldab see meil defineerida funktsioone väljaspool klassi ja pääseda neile ligi kasutades scope resolution operaatorit.
Seevastu Java ei toeta scope resolution operaatorit. Java ei võimalda ka funktsioonide defineerimist väljaspool. Kõik programmiga seonduv, kaasa arvatud põhifunktsioon, peab olema klassi sees.
#23 ) Try/Catch plokk
C++ keeles saame try/catch-bloki välja jätta isegi siis, kui teame, et kood võib tekitada erandi.
Kui aga Java's oleme kindlad, et kood viskab erandi, siis peame selle koodi lisama try/catch-bloki alla. Erandid on Java's teistsugused, kuna see ei toeta destruktoreid.
#24 ) Veaegne vea tuvastamine
C++ keeles on vigade tuvastamine jooksva aja jooksul programmeerija vastutusalas.
Javas kontrollib vea tuvastamist jooksva aja jooksul süsteem.
#25 ) Keeletugi
Riistvara läheduse ja süsteemiressurssidele juurdepääsu võimaldavate raamatukogude tõttu on C++ sobivam süsteemiprogrammeerimiseks, kuigi meil on palju erinevaid rakendusi, sealhulgas andmebaasid, ettevõtted, mängud jne, mis on arendatud C++ keeles.
#26 ) Andmed ja funktsioonid
C++ keelel on nii globaalne ulatus kui ka nimeruumi ulatus. Seega võivad andmed ja funktsioonid eksisteerida ka väljaspool klassi.
Java's peavad kõik andmed ja funktsioonid olema klassis. Globaalset ulatust ei ole, kuid võib olla paketi ulatus.
#27 ) Struktuurid ja liidud
Struktuurid ja liidud on andmestruktuurid, millel võivad olla erinevate andmetüüpidega liikmed. C++ toetab nii struktuure kui ka liidusid.
Java ei toeta aga struktuure ega liideseid.
#28 ) Objektide haldamine
C++-s hallatakse objekte käsitsi. Objektide loomine ja hävitamine toimub käsitsi, kasutades vastavalt operaatoreid new ja delete. Samuti kasutame klassi objektide konstruktoreid ja destruktoreid.
Java ei toeta destruktoreid, kuigi toetab konstruktoreid. Java sõltub suuresti automaatsest prügikoristusest objektide kogumiseks ja hävitamiseks.
#29 ) Parameetrite edastamine
Pass by Value ja pass by reference on kaks olulist programmeerimises kasutatavat parameetrite edastamise tehnikat. Nii Java kui ka C++ toetavad mõlemat tehnikat.
#3 0) Riistvara
C++ on riistvarale lähedane ja sellel on palju raamatukogusid, mis suudavad riistvararessursse manipuleerida. Riistvarale läheduse tõttu kasutatakse C++ keelt sageli süsteemi programmeerimiseks, mängurakenduste, operatsioonisüsteemi ja kompilaatorite jaoks.
Java on peamiselt rakenduste arendamise keel ja ei ole riistvarale lähedane.
Tabeliformaat: C++ vs Java
Allpool on esitatud tabelina C++ ja Java võrdlus, mida me juba arutasime.
Ei. | Võrdlus Parameeter | C++ | Java |
---|---|---|---|
1 | Platvormi sõltumatus | C++ on platvormi sõltuv. | Java on platvormi sõltumatu. |
2 | Kompilaator &; Tõlkija | C++ on kompileeritud keel. | Java on nii kompileeritud kui ka interpreteeritud keel. |
3 | Allikakood & klassi suhe | Klassinimede ja failinimede vahel puudub range seos. | Kehtestab range seose klassi nime ja failinime vahel. |
4 | Kontseptsioon | Kirjutage üks kord, kompileerige kõikjal. | Kirjutage üks kord, käivitage kõikjal & kõikjal. |
5 | Ühilduvus teiste keeltega | Ühildub C-ga, välja arvatud objektorienteeritud funktsioonid. | Süntaks on võetud C/C++ keelest. Puudub ühilduvus ühegi teise keelega. |
6 | Programmeerimiskeele tüüp | Protseduuriline ja objektorienteeritud. | Objektipõhine. |
7 | Raamatukogu liides | Võimaldab otsekõnesid emakeelsetele süsteemiraamatukogudele. | Väljakutsed ainult Java Native-liidese ja Java Native Accessi kaudu. |
8 | Juurte hierarhia | Puudub juurhierarhia. | Järgib ühe juurega hierarhiat. |
9 | Eristavad tunnused | Toetab nii protseduurilisi kui ka objektorienteeritud funktsioone. | Ei ole destruktoreid. Automaatne prügikoristus. |
10 | Kaasaskantavus | C++ kood ei ole kaasaskantav. | Java on kaasaskantav. |
11 | Tüübi semantika | Ühtsed primitiivsete ja objektitüüpide vahel. | Ei ole järjepidev. |
12 | Sisendmehhanism | Cin ja Cout kasutatakse I/O jaoks. | System.in ja System.out.println |
13 | Juurdepääsukontroll ja objektide kaitse | Paindlik objektimudel ja järjepidev kaitse. | Objektimudel on kohmakas ja kapseldamine on nõrk. |
14 | Mälu haldamine | Käsitsi | Süsteemi juhitav. |
15 | Mitmekordne pärandamine | Praegune | Puudub |
16 | Goto avaldus | Toetab Goto avaldust. | Ei toeta goto avaldust. |
17 | Reguleerimisala resolutsioon Operaator | Praegune | Puudub |
18 | Try/Catch plokk | Saab välistada try/catch bloki. | Ei saa välistada, kui kood peaks tekitama erandi. |
19 | Ülekoormus | Toetab operaatorite ja meetodite ülekoormamist. | Ei toeta operaatori ülekoormamist. |
20 | Virtuaalne märksõna | Toetab virtuaalset võtmesõna, mis hõlbustab ületamist. | Virtuaalne võtmesõna puudub, kõik mittestaatilised meetodid on vaikimisi virtuaalsed ja neid saab üle sõita. |
21 | Veaegne vea tuvastamine | Vasakpoolne programmeerija. | Süsteemi vastutus |
22 | Keeletugi | Kasutatakse peamiselt süsteemi programmeerimiseks. | Kasutatakse peamiselt rakenduste programmeerimiseks. |
23 | Andmed ja funktsioonid | Andmed ja funktsioonid eksisteerivad väljaspool klassi. Toetatakse globaalseid ja nimeruumi ulatusi. | Andmed ja funktsioonid on olemas ainult klassi sees, paketi ulatus on saadaval. |
24 | Osutajad | Toetab pointereid. | Ainult piiratud toetus osutajatele. |
25 | Struktuurid ja liidud | Toetatud | Ei toetata |
26 | Objektide haldamine | Käsitsi objektide haldamine uue ja kustutamise abil. | Automaatne objektide haldamine prügikogumise abil. |
27 | Parameetrite edastamine | Toetab kutsumist väärtuse ja viite abil. | Toetab ainult väärtuse järgi helistamist. |
28 | Niiditugi | Niiditugi ei ole väga tugev, see sõltub kolmandast osapoolest. | Väga tugev niiditugi. |
29 | Riistvara | Lähemal riistvara. | Ei ole väga interaktiivne riistvaraga. |
30 | Dokumentatsioon Kommentaar | Ei toeta dokumentatsiooni märkust. | Toetab dokumentatsiooni kommentaar(/**...*/), mis loob dokumentatsiooni Java lähtekoodile. |
Siiani oleme üksikasjalikult tutvunud C++ ja Java peamiste erinevustega. Järgnevas osas vastame mõnele programmeerimismaailmas sageli esitatavale küsimusele, mis puudutab C++ ja Javat.
Sageli esitatud küsimused C++ ja Java keeles
K #1) Kumb on parem C++ või Java?
Vastus: Noh, me ei saa kindlalt öelda, kumb on parem. Nii C++ kui ka Java on oma eelised ja puudused. Kui C++ on enamasti hea süsteemiprogrammeerimiseks, siis Java puhul ei saa me seda teha. Aga Java paistab silma rakendustes nagu veeb, töölaud jne.
Tegelikult saab C++ teha kõike alates süsteemiprogrammeerimisest kuni ettevõtete ja mängude arendamiseni. Java saab teha rohkem veebi või ettevõtteid. On mõned rakendused nagu teatud madala taseme programmeerimisrakendused või mängud jne, mida ei saa jätta Java arendamiseks.
Seega sõltub see täielikult sellest, millist rakendust me arendame. Parim viis on eelnevalt hinnata mõlema keele plusse ja miinuseid ning kontrollida nende ainulaadsust arendatava rakenduse jaoks ja seejärel teha järeldus, milline neist on parim.
K #2) Kas C++ on võimsam kui Java?
Vastus: See on jällegi keeruline küsimus! Kui asi puudutab seda, kui lihtne on süntaks või keele õppimine, siis Java võidab. Kui asi puudutab süsteemiprogrammeerimist ja/või muid madala taseme rakendusi, siis C++ on võimsam.
Mõned inimesed võivad väita, et automaatne GC-kollektsioon, puuduvad osutajad ja mitmekordne pärimine muudavad Java võimsamaks.
Aga kui tegemist on kiirusega, siis on C++ võimas. Ka sellistes rakendustes nagu mängimine, kus on vaja salvestada olekut, võib automaatne prügikoristus ülesandeid rikkuda. Seega on C++ siin ilmselgelt võimas.
K #3) Kas me saame õppida Java keelt ilma C või C++ keelt tundmata?
Vastus: Jah, kindlasti!
Kui me teame programmeerimise põhialuseid ja objektorienteeritud programmeerimise mõisteid, saame alustada Java õppimist.
K #4) Kas C++ on nagu Java?
Vastus: Mõnes mõttes jah, aga mõnes mõttes ei.
Näiteks nii C++ kui ka Java on objektorienteeritud programmeerimiskeeled. Neid saab kasutada rakenduste arendamiseks. Neil on sarnane süntaks.
Kuid muudel juhtudel, nagu mäluhaldus, pärimine, polümorfism jne, on C++ ja Java täiesti erinevad. Samamoodi on mõlemad keeled erinevad, kui tegemist on primitiivsete andmetüüpide, objektikäsitluse, osutajate jne. osas.
K #5) Kas Java on kirjutatud C++ keeles?
Vastus: Java selles mõttes, et Sun ja IBMi Java Virtual Machine (JVM) on kirjutatud C++ keeles. Java raamatukogud on Java keeles. Mõned teised JVMid on kirjutatud C keeles.
Kokkuvõte
C++ ja Java on mõlemad objektorienteeritud programmeerimiskeeled. Lisaks sellele on C++ ka protseduuriline keel. On mõned omadused nagu pärimine, polümorfism, osutajad, mäluhaldus jne, mille poolest mõlemad keeled üksteisest täielikult erinevad.
C++-l on mõned omadused, nagu lähedus riistvarale, parem objektide haldamine, kiirus, jõudlus jne, mis teevad selle võimsamaks kui Java ja seega motiveerivad arendajaid kasutama C++-d madala taseme programmeerimiseks, kiirete mängurakenduste, süsteemiprogrammeerimise jne.
Samamoodi teevad Java lihtsama süntaksi, automaatse prügikogumise, osutajate ja mallide puudumise jms tõttu Java veebipõhiste rakenduste jaoks lemmikuks.