c vs java top 30 differences between c
Aquest tutorial en profunditat explica algunes de les diferències clau entre dos llenguatges de programació orientats a objectes C ++ vs Java:
C ++ i Java són llenguatges de programació orientats a objectes. Tot i això, ambdues llengües difereixen entre elles de moltes maneres.
C ++ es deriva de C i té les característiques dels llenguatges de programació tant procedimentals com orientats a objectes. C ++ va ser dissenyat per al desenvolupament d'aplicacions i sistemes.
Java es basa en una màquina virtual molt segura i de gran portabilitat. S'agrupa amb una biblioteca completa per proporcionar suport a l'abstracció de la plataforma existent.
Java es va dissenyar principalment per a la programació d'aplicacions i té la funcionalitat d'un intèrpret per a sistemes d'impressió que posteriorment es va desenvolupar en informàtica de xarxa.
Lectura suggerida => Guia de formació C ++ per a tothom
Què aprendreu:
- Diferències clau entre C ++ i Java
- Format tabular: C ++ contra Java
- Preguntes més freqüents a C ++ i Java
- Conclusió
- Lectura recomanada
Diferències clau entre C ++ i Java
Ara anem a discutir algunes de les principals diferències entre C ++ i Java, mentre procedim en això
tutorial.
# 1) Plataforma Independència
C ++ | Java | ||
---|---|---|---|
7 | Interfície de biblioteca | Permet trucades directes a biblioteques de sistemes natius. | Trucades només mitjançant la interfície Java Native i Java Native Access. |
C ++ és un llenguatge dependent de la plataforma. El codi font escrit en C ++ s’ha de compilar a totes les plataformes. | Java és independent de la plataforma. Un cop compilat en codi de bytes, es pot executar en qualsevol plataforma. |
# 2) Compilador i intèrpret
C ++ | Java |
---|---|
C ++ és un llenguatge compilat. El programa d'origen escrit en C ++ es compila en un codi objecte que es pot executar per produir una sortida. | Java és un llenguatge compilat i també interpretat. La sortida compilada d’un codi font Java és un codi de bytes que és independent de la plataforma. |
# 3) Portabilitat
C ++ | Java |
---|---|
El codi C ++ no és portàtil. S'ha de compilar per a cada plataforma. | Java, però, tradueix el codi en codi de bytes. Aquest codi de bytes és portàtil i es pot executar en qualsevol plataforma. |
# 4) Gestió de la memòria
C ++ | Java |
---|---|
La gestió de la memòria en C ++ és manual. Hem d’assignar / repartir la memòria manualment mitjançant els operadors de nova eliminació. | A Java, la gestió de la memòria està controlada pel sistema. |
# 5) Herència múltiple
C ++ | Java |
---|---|
C ++ admet diversos tipus d’herències, incloses les herències individuals i múltiples. Tot i que hi ha problemes derivats de múltiples herències, C ++ utilitza la paraula clau virtual per resoldre els problemes. | Java, només admet herència única. Es poden aconseguir efectes de l'herència múltiple mitjançant les interfícies de Java. |
# 6) Sobrecàrrega
C ++ | Java |
---|---|
A C ++, es poden sobrecarregar mètodes i operadors. Es tracta d’un polimorfisme estàtic. | A Java, només es permet la sobrecàrrega de mètodes. No permet la sobrecàrrega de l'operador. |
# 7) Paraula clau virtual
C ++ | Java |
---|---|
Com a part del polimorfisme dinàmic, en C ++, la paraula clau virtual s'utilitza amb una funció per indicar la funció que es pot anul·lar a la classe derivada. D’aquesta manera podem aconseguir polimorfisme. | A Java, la paraula clau virtual està absent. Tanmateix, a Java, es poden anul·lar tots els mètodes no estàtics per defecte. O, en termes senzills, tots els mètodes no estàtics de Java són virtuals per defecte. |
# 8) Punters
C ++ | Java |
---|---|
C ++ tracta d’assenyalaments. Com es va veure als tutorials anteriorment, C ++ té un fort suport per als punteros i podem fer una gran quantitat de programació útil mitjançant punteres. | Java té un suport limitat per als indicadors. Inicialment, Java estava completament sense indicadors, però les versions posteriors van començar a proporcionar suport limitat per als indicadors. No podem fer servir punteres a Java tan fàcilment com podem fer servir a C ++. |
# 9) Comentari de documentació
C ++ | Java |
---|---|
C ++ no admet comentaris de documentació. | Java té un suport integrat per a comentaris de documentació (/ ** ... * /). D'aquesta manera, els fitxers font Java poden tenir la seva pròpia documentació. |
# 10) Suport de fils
C ++ | Java |
---|---|
C ++ no és compatible amb el fil integrat. La majoria depèn de biblioteques de subprocessos de tercers. | Java és compatible amb el thread integrat amb una classe 'thread'. Podem heretar la classe de fil i després substituir el mètode d'execució. |
Algunes diferències més ...
# 11) Jerarquia d'arrels
C ++ és procedimental i també un llenguatge de programació orientat a objectes. Per tant, no segueix cap jerarquia específica d'arrels.
Java és un llenguatge de programació pur orientat a objectes i té una jerarquia única.
# 12) Codi font i relació de classe
A C ++, tant el codi font com el nom de fitxer no tenen cap relació. Això significa que podem tenir moltes classes al programa C ++ i que el nom del fitxer pot ser qualsevol. No ha de ser el mateix que els noms de les classes.
A Java, hi ha una estreta relació entre la classe del codi font i el nom del fitxer. La classe que conté el codi font i el nom del fitxer haurien de ser els mateixos.
Per exemple , si tenim una classe a Java anomenada salari, el nom del fitxer que conté aquest codi de classe hauria de ser 'salari.java'.
# 13) Concepte
El concepte darrere dels programes C ++ s’escriu una vegada i es compila en qualsevol lloc, ja que C ++ no és independent de la plataforma.
Per contra, per als programes Java s’escriu una vegada, s’executa a tot arreu i a qualsevol lloc, ja que el codi de bytes generat pel compilador Java és independent de la plataforma i es pot executar en qualsevol màquina.
# 14) Compatibilitat amb altres idiomes
C ++ es basa en C. El llenguatge C ++ és compatible amb la majoria dels altres llenguatges d'alt nivell.
Java no és compatible amb altres llenguatges. Com que Java es va inspirar en C i C ++, la seva sintaxi és similar a aquests llenguatges.
# 15) Tipus de llenguatge de programació
C ++ és un llenguatge de programació procedimental i orientat a objectes. Per tant, C ++ té característiques específiques dels llenguatges de procediment, així com funcions del llenguatge de programació orientat a objectes.
Java és un llenguatge de programació completament orientat a objectes.
# 16) Interfície de biblioteca
C ++ permet trucades directes a les biblioteques natives del sistema. Per tant, és més adequat per a la programació a nivell de sistema.
Java no té suport directe per a les seves biblioteques natives. Podem trucar a les biblioteques mitjançant Java Native Interface o Java Native Access.
# 17) Característiques distintives
Les característiques relacionades amb els llenguatges de procediment i el llenguatge orientat a objectes són els trets distintius de C ++.
quin programa obre un fitxer eps
La recollida automàtica d’escombraries és la característica distintiva de Java. Mentrestant, Java no admet destructors.
# 18) Tipus de semàntica
Pel que fa a la semàntica de tipus per a C ++, els tipus d’objectes i primitius són consistents.
Però per a Java, no hi ha coherència entre els tipus d’objectes i primitius.
# 19) Mecanisme d’entrada
C ++ utilitza cin i cout juntament amb '>>' i '<<’ operators respectively to read in and write the data.
A Java, la classe System s’utilitza per a entrada-sortida. Per llegir l'entrada, s'utilitza System.in que llegeix un byte a la vegada. La construcció System.out s’utilitza per escriure la sortida.
# 20) Control d'accés i protecció d'objectes
C ++ té un model flexible per a objectes amb especificadors d'accés que controlen l'accés i una encapsulació forta que garanteix la protecció.
Java té un model d'objectes comparativament pesat amb una encapsulació feble.
# 21) Vés a la declaració
C ++ admet la declaració goto, però s'hauria de minimitzar el seu ús per evitar les conseqüències d'utilitzar-la en un programa.
Java no proporciona suport per a la sentència goto.
# 22) Operador de resolució d'abast
L'operador de resolució d'abast s'utilitza per accedir a les variables globals i definir mètodes fora de la classe.
C ++ admet l'operador de resolució d'abast ja que el fa servir per accedir a variables globals. També ens permet definir funcions fora de la classe i accedir-hi mitjançant l'operador de resolució d'abast.
En canvi, Java no admet l'operador de resolució d'abast. Java tampoc no permet definir les funcions fora. Tot el relacionat amb el programa, inclosa la funció principal, ha de ser dins d’una classe.
# 23) Prova / Captura el bloc
A C ++, podem excloure el bloc try / catch encara que sabem que el codi pot generar una excepció.
Tanmateix, a Java, si estem segurs que el codi generarà una excepció, haurem d’incloure aquest codi al bloc try / catch. Les excepcions són diferents a Java, ja que no admet destructors.
# 24) Detecció d'errors en temps d'execució
A C ++, la detecció d’errors en temps d’execució és responsabilitat del programador.
A Java, el sistema controla la detecció d’errors d’execució.
# 25) Suport lingüístic
A causa de la seva proximitat amb el maquinari i les biblioteques que permeten accedir als recursos del sistema, C ++ és més adequat per a la programació del sistema, tot i que tenim una àmplia gamma d'aplicacions, incloses les bases de dades, empreses, jocs, etc. desenvolupades a C ++.
# 26) Dades i funcions
C ++ té un abast global així com un àmbit d’espai de noms. Així, les dades i les funcions també poden existir fora de la classe.
A Java, totes les dades i funcions han de pertànyer a la classe. No hi ha un abast global, però, sí que hi pot haver un paquet.
# 27) Estructures i sindicats
Les estructures i sindicats són estructures de dades que poden tenir membres amb diferents tipus de dades. C ++ admet estructures i unions.
Java, però, no admet estructures ni sindicats.
# 28) Gestió d'objectes
A C ++ els objectes es gestionen manualment. La creació i destrucció d’objectes es realitzen manualment mitjançant els operadors new i delete, respectivament. També fem servir constructors i destructors per a objectes de classe.
Java no admet destructors, tot i que admet constructors. Java també depèn en gran mesura de la recollida automàtica d’escombraries per recollir i destruir objectes.
# 29) Pas de paràmetres
Passar per valor i passar per referència són les dues tècniques importants de pas de paràmetres utilitzades en la programació. C ++ admet aquestes dues tècniques.
Tanmateix, Java només admet la tècnica de passatge de paràmetres Value.
# 30) Maquinari
C ++ és proper al maquinari i té moltes biblioteques que poden manipular els recursos del maquinari. A causa de la seva proximitat amb el maquinari, C ++ s'utilitza sovint per a la programació de sistemes, aplicacions de jocs, sistema operatiu i compiladors.
Java és principalment un llenguatge de desenvolupament d’aplicacions i no s’acosta al maquinari.
Format tabular: C ++ contra Java
A continuació es mostra la representació tabular de la comparació entre C ++ i Java que ja hem comentat.
No. | Paràmetre de comparació | C ++ | Java |
---|---|---|---|
1 | Plataforma Independència | C ++ depèn de la plataforma. | Java és independent de la plataforma. |
2 | Compilador i intèrpret | C ++ és un llenguatge compilat. | Java és un llenguatge compilat i també interpretat. |
3 | Codi font i relació de classe | No hi ha una relació estricta amb els noms de classe i els noms de fitxer. | Aplica una relació estricta entre el nom de la classe i el nom del fitxer. |
4 | Concepte | Escriu una vegada compila en qualsevol lloc. | Escriu un cop executat a qualsevol lloc i arreu. |
5 | Compatibilitat amb altres idiomes | Compatible amb C, excepte les funcions orientades a objectes. | La sintaxi es pren de C / C ++. No hi ha compatibilitat amb cap altre idioma. |
6 | Tipus de llenguatge de programació | Procedimental i orientat a objectes. | Orientat a objectes. |
8 | Jerarquia d'arrels | No hi ha jerarquia d’arrels. | Segueix la jerarquia d'una arrel única. |
9 | Característiques distintives | Admet funcions procedimentals i orientades a objectes. | Sense destructors. Recollida automàtica d’escombraries. |
10 | Portabilitat | El codi C ++ no és portàtil. | Java és portàtil. |
11 | Tipus de semàntica | Coherent entre els tipus d’objectes i primitius. | No és coherent. |
12 | Mecanisme d’entrada | Cin i Cout s’utilitzen per a E / S. | System.in i System.out.println |
13 | Control d'accés i protecció d'objectes | Un model d’objectes flexible i una protecció consistent. | El model d’objectes és feixuc i l’encapsulació és feble. |
14 | Gestió de la memòria | manual | Controlat pel sistema. |
15 | Herència múltiple | Present | Absent |
16 | Vés a la declaració | Admet la declaració Goto. | No admet la declaració goto. |
17 | Operador de resolució d'abast | Present | Absent |
18 | Prova / Captura el bloc | Es pot excloure el bloc try / catch. | No es pot excloure si se suposa que el codi genera una excepció. |
19 | Sobrecàrrega | Admet la sobrecàrrega de l'operador i del mètode. | No admet la sobrecàrrega de l'operador. |
20 | Paraula clau virtual | Admet paraules clau virtuals que faciliten la substitució. | No hi ha cap paraula clau virtual, tots els mètodes no estàtics són virtuals per defecte i es poden anul·lar. |
21 | Detecció d'errors en temps d'execució | Es deixa al programador. | Responsabilitat del sistema |
22 | Suport lingüístic | S'utilitza principalment per a la programació de sistemes. | S'utilitza principalment per a la programació d'aplicacions. |
23 | Dades i funcions | Les dades i la funció existeixen fora de la classe. S'admeten àmbits globals i d'espai de noms. | Les dades i les funcions només estan presents dins de la classe, l’abast del paquet està disponible. |
24 | Punters | Admet punters. | Només suport limitat per als indicadors. |
25 | Estructures i sindicats | Compatible | No compatible |
26 | Gestió d'objectes | Gestió d'objectes manual amb new i delete. | Gestió automàtica d’objectes mitjançant recollida d’escombraries. |
27 | Pas de paràmetres | Admet trucades per valor i trucades per referència. | Només admet trucades per valor. |
28 | Suport de fils | El suport de fils no és molt fort, es basa en un tercer. | Suport de fil molt fort. |
29 | Maquinari | Més a prop del maquinari. | Poc interactiu amb el maquinari. |
30 | Comentari de documentació | No admet comentaris de documentació. | Admet el comentari de documentació (/ ** ... * /) que crea documentació per al codi font de Java. |
Fins ara hem vist detalladament les diferències clau entre C ++ i Java. La propera secció respondrà a algunes de les preguntes més freqüents relacionades amb C ++ i Java al món de la programació.
Preguntes més freqüents a C ++ i Java
P # 1) Quin és millor C ++ o Java?
Resposta: Bé, definitivament no podem dir quin és millor. Tant C ++ com Java tenen els seus propis mèrits i desavantatges. Tot i que C ++ és sobretot bo per a la programació del sistema, no ho podem fer amb Java. Però Java destaca en aplicacions com ara web, escriptori, etc.
De fet, C ++ pot fer qualsevol cosa, des de la programació del sistema fins a l’empresa fins als jocs. Java pot fer més que un lloc web o una empresa. Hi ha algunes aplicacions com ara algunes aplicacions de programació de baix nivell o jocs, etc. que no es poden deixar perquè desenvolupi Java.
Per tant, depèn totalment de quina aplicació estem desenvolupant. La millor manera és avaluar prèviament els pros i els contres de tots dos idiomes i verificar la seva singularitat per a l’aplicació que estem desenvolupant i després concloure quina és la millor.
P2: C ++ és més potent que Java?
Resposta: Una vegada més, aquesta és una pregunta complicada. Quan es tracta de la facilitat que té la sintaxi o l’aprenentatge del llenguatge, Java puntuarà. Quan es tracta de programació de sistemes i / o altres aplicacions de baix nivell, C ++ és més potent.
Algunes persones podrien argumentar que el fet de tenir col·leccions automàtiques de GC, sense indicadors ni herències múltiples, fa que Java sigui més poderós.
Però pel que fa a la velocitat, C ++ és potent. També en aplicacions com els jocs on hem d’emmagatzemar l’estat, la recollida automàtica d’escombraries pot arruïnar les tasques. Per tant, C ++ és òbviament potent aquí.
P # 3) Podem aprendre Java sense conèixer C o C ++?
Resposta: Sí, definitivament!
Un cop coneixem els fonaments de la programació i els conceptes de programació orientada a objectes, podem començar a aprendre Java.
Q # 4) C ++ és com Java?
Resposta: D'alguna manera, sí, però d'alguna manera, no.
Com per exemple, tant C ++ com Java són llenguatges de programació orientats a objectes. Es poden utilitzar per al desenvolupament d'aplicacions. Tenen una sintaxi similar.
Però en altres casos, com ara la gestió de la memòria, l’herència, el polimorfisme, etc., C ++ i Java són completament diferents. De la mateixa manera, quan es tracta de tipus de dades primitius, maneig d'objectes, indicadors, etc., tots dos idiomes són diferents.
Q # 5) Java està escrit en C ++?
Resposta: Java en el sentit que la màquina virtual Java (JVM) de Sun i IBM estan escrits en C ++. Les biblioteques Java es troben en Java. Algunes altres JVM s’escriuen en C.
Conclusió
C ++ i Java són llenguatges de programació orientats a objectes. A més, C ++ també és un llenguatge de procediment. Hi ha algunes característiques com l'herència, el polimorfisme, els indicadors, la gestió de memòria, etc. en què tots dos llenguatges es diferencien completament entre si.
Hi ha algunes característiques de C ++ com la proximitat al maquinari, una millor gestió d’objectes, velocitat, rendiment, etc., cosa que el fa més potent que Java i, per tant, motiva els desenvolupadors a utilitzar C ++ per a programacions de baix nivell, aplicacions de jocs d’alta velocitat, programació del sistema , etc.
De manera similar, la sintaxi més fàcil de Java, la recollida automàtica d’escombraries, la manca d’indicadors, plantilles, etc. converteixen Java en un dels favorits de les aplicacions basades en web.
=> Visiteu aquí la llista completa de tutorials de C ++ .
Lectura recomanada
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java
- Interfície Java i tutoria de classes abstractes amb exemples
- OOP Java: Introducció a la programació orientada a objectes a Java
- Modificadors d'accés a Java: tutorial amb exemples
- Desplegament de Java: creació i execució del fitxer JAR de Java
- Introducció al llenguatge de programació Java: vídeo tutorial
- Màquina virtual Java: com ajuda JVM a executar aplicacions Java
- Tutorial de reflexió de Java amb exemples