c vs java top 30 differences between c
Questo tutorial approfondito spiega alcune delle principali differenze tra due linguaggi di programmazione orientati agli oggetti C ++ vs Java:
C ++ e Java sono entrambi linguaggi di programmazione orientati agli oggetti. Tuttavia, entrambe le lingue differiscono l'una dall'altra in molti modi.
C ++ è derivato da C e ha le caratteristiche dei linguaggi di programmazione procedurali e orientati agli oggetti. C ++ è stato progettato per lo sviluppo di applicazioni e sistemi.
Java è costruito su una macchina virtuale che è molto sicura e di natura altamente portabile. È raggruppato con una libreria completa per fornire supporto per l'astrazione della piattaforma esistente.
Java è stato progettato principalmente per la programmazione di applicazioni e ha una funzionalità di interprete per i sistemi di stampa che è stata successivamente sviluppata nel calcolo di rete.
Lettura suggerita => Guida di formazione C ++ per tutti
Cosa imparerai:
- Differenze chiave tra C ++ e Java
- Formato tabulare: C ++ vs Java
- Domande frequenti in C ++ e Java
- Conclusione
- Lettura consigliata
Differenze chiave tra C ++ e Java
Ora discutiamo alcune delle differenze chiave tra C ++ e Java, mentre procediamo in questo
tutorial.
# 1) Piattaforma Indipendenza
C ++ | Giava | ||
---|---|---|---|
7 | Interfaccia della libreria | Consente chiamate dirette a librerie di sistema native. | Chiamate solo tramite l'interfaccia Java Native e Java Native Access. |
C ++ è un linguaggio dipendente dalla piattaforma. Il codice sorgente scritto in C ++ deve essere compilato su ogni piattaforma. | Java è indipendente dalla piattaforma. Una volta compilato in byte code, può essere eseguito su qualsiasi piattaforma. |
# 2) Compilatore e interprete
C ++ | Giava |
---|---|
C ++ è un linguaggio compilato. Il programma sorgente scritto in C ++ viene compilato in un codice oggetto che può quindi essere eseguito per produrre un output. | Java è un linguaggio compilato e interpretato. L'output compilato di un codice sorgente Java è un codice byte che è indipendente dalla piattaforma. |
# 3) Portabilità
C ++ | Giava |
---|---|
Il codice C ++ non è portabile. Deve essere compilato per ogni piattaforma. | Java, tuttavia, traduce il codice in codice byte. Questo codice byte è portabile e può essere eseguito su qualsiasi piattaforma. |
# 4) Gestione della memoria
C ++ | Giava |
---|---|
La gestione della memoria in C ++ è manuale. Abbiamo bisogno di allocare / deallocare la memoria manualmente utilizzando gli operatori new / delete. | In Java la gestione della memoria è controllata dal sistema. |
# 5) Ereditarietà multipla
C ++ | Giava |
---|---|
C ++ supporta vari tipi di eredità, incluse eredità singole e multiple. Sebbene esistano problemi derivanti da più eredità, C ++ utilizza la parola chiave virtuale per risolvere i problemi. | Java, supporta solo l'ereditarietà singola. Gli effetti dell'ereditarietà multipla possono essere ottenuti utilizzando le interfacce in Java. |
# 6) Sovraccarico
C ++ | Giava |
---|---|
In C ++, metodi e operatori possono essere sovraccaricati. Questo è polimorfismo statico. | In Java, è consentito solo il sovraccarico del metodo. Non consente il sovraccarico dell'operatore. |
# 7) Parola chiave virtuale
C ++ | Giava |
---|---|
Come parte del polimorfismo dinamico, in C ++, la parola chiave virtual viene utilizzata con una funzione per indicare la funzione che può essere sovrascritta nella classe derivata. In questo modo possiamo ottenere il polimorfismo. | In Java, la parola chiave virtuale è assente. Tuttavia, in Java, tutti i metodi non statici per impostazione predefinita possono essere sovrascritti. O in termini semplici, tutti i metodi non statici in Java sono virtuali per impostazione predefinita. |
# 8) Puntatori
C ++ | Giava |
---|---|
C ++ è tutto sui puntatori. Come visto nei tutorial precedenti, C ++ ha un forte supporto per i puntatori e possiamo fare molta programmazione utile usando i puntatori. | Java ha un supporto limitato per i puntatori. Inizialmente, Java era completamente privo di puntatori, ma le versioni successive hanno iniziato a fornire un supporto limitato per i puntatori. Non possiamo usare i puntatori in Java così facilmente come possiamo usare in C ++. |
# 9) Commento alla documentazione
C ++ | Giava |
---|---|
C ++ non supporta i commenti sulla documentazione. | Java ha un supporto integrato per i commenti sulla documentazione (/ **… * /). In questo modo i file sorgente Java possono avere la propria documentazione. |
# 10) Supporto thread
C ++ | Giava |
---|---|
C ++ non ha il supporto per i thread integrato. Si basa principalmente su librerie di thread di terze parti. | Java è un supporto thread integrato con un 'thread' di classe. Possiamo ereditare la classe thread e quindi sovrascrivere il metodo run. |
Altre differenze ...
# 11) Gerarchia di root
C ++ è un linguaggio di programmazione procedurale e orientato agli oggetti. Quindi non segue alcuna gerarchia radice specifica.
Java è un puro linguaggio di programmazione orientato agli oggetti e ha un'unica gerarchia radice.
# 12) Codice sorgente e relazione di classe
In C ++, sia il codice sorgente che il nome del file non hanno alcuna relazione. Ciò significa che possiamo avere molte classi nel programma C ++ e il nome del file può essere qualsiasi cosa. Non deve necessariamente essere lo stesso dei nomi delle classi.
In Java, esiste una stretta relazione tra la classe del codice sorgente e il nome del file. La classe contenente il codice sorgente e il nome del file dovrebbe essere la stessa.
Per esempio , se abbiamo una classe in Java chiamata salary, il nome del file che contiene questo codice di classe dovrebbe essere 'salary.java'.
# 13) Concetto
Il concetto alla base dei programmi C ++ viene scritto una volta e viene compilato ovunque poiché C ++ non è indipendente dalla piattaforma.
Al contrario, per i programmi Java è scritto una volta, eseguito ovunque e ovunque poiché il codice byte generato dal compilatore Java è indipendente dalla piattaforma e può essere eseguito su qualsiasi macchina.
# 14) Compatibilità con altre lingue
C ++ è basato su C. Il linguaggio C ++ è compatibile con la maggior parte degli altri linguaggi di alto livello.
Java non è compatibile con altre lingue. Poiché Java è stato ispirato da C e C ++, la sua sintassi è simile a questi linguaggi.
#quindici) Tipo di linguaggio di programmazione
C ++ è sia un linguaggio di programmazione procedurale che orientato agli oggetti. Quindi, C ++ ha caratteristiche specifiche dei linguaggi procedurali così come caratteristiche del linguaggio di programmazione orientato agli oggetti.
Java è un linguaggio di programmazione completamente orientato agli oggetti.
# 16) Interfaccia della libreria
C ++ consente chiamate dirette alle librerie di sistema native. Quindi è più adatto per la programmazione a livello di sistema.
Java non ha supporto per chiamate dirette alle sue librerie native. Possiamo chiamare le librerie tramite Java Native Interface o Java Native Access.
# 17) Caratteristiche distintive
Le caratteristiche relative ai linguaggi procedurali e al linguaggio orientato agli oggetti sono le caratteristiche distintive del C ++.
miglior sito per guardare anime online
La garbage collection automatica è la caratteristica distintiva di Java. Nel frattempo, Java non supporta i distruttori.
# 18) Digitare Semantics
Per quanto riguarda la semantica dei tipi per C ++, i tipi primitivi e quelli degli oggetti sono coerenti.
Ma per Java, non c'è coerenza tra i tipi primitivi e quelli dell'oggetto.
# 19) Meccanismo di input
C ++ utilizza cin e cout insieme a '>>' e '<<’ operators respectively to read in and write the data.
In java, la classe System viene utilizzata per input-output. Per leggere l'input, viene utilizzato System.in che legge un byte alla volta. Il costrutto System.out viene utilizzato per scrivere l'output.
#venti) Controllo degli accessi e protezione degli oggetti
C ++ ha un modello flessibile per oggetti con specificatori di accesso che controllano l'accesso e un forte incapsulamento che garantisce la protezione.
Java ha un modello a oggetti relativamente ingombrante con un incapsulamento debole.
#ventuno) Istruzione Goto
Il C ++ supporta l'istruzione goto, ma il suo utilizzo dovrebbe essere ridotto al minimo per evitare le conseguenze dell'uso in un programma.
Java non fornisce supporto per l'istruzione goto.
# 22) Operatore di risoluzione dell'ambito
L'operatore di risoluzione dell'ambito viene utilizzato per accedere alle variabili globali e definire metodi al di fuori della classe.
C ++ supporta l'operatore di risoluzione dell'ambito poiché lo utilizza per accedere alle variabili globali. Ci consente inoltre di definire funzioni al di fuori della classe e accedervi utilizzando l'operatore di risoluzione dell'ambito.
Al contrario, Java non supporta l'operatore di risoluzione dell'ambito. Java inoltre non consente di definire le funzioni all'esterno. Tutto ciò che riguarda il programma, inclusa la funzione principale, deve essere all'interno di una classe.
# 2. 3) Prova / cattura blocco
In C ++, possiamo escludere il blocco try / catch anche se sappiamo che il codice potrebbe generare un'eccezione.
Tuttavia, in Java, se siamo sicuri che il codice genererà un'eccezione, dobbiamo includere questo codice nel blocco try / catch. Le eccezioni sono diverse in Java in quanto non supporta i distruttori.
# 24) Rilevamento degli errori di runtime
In C ++ il rilevamento degli errori di runtime è responsabilità del programmatore.
In Java, il rilevamento degli errori di runtime è controllato dal sistema.
# 25) Supporto linguistico
A causa della sua vicinanza all'hardware e alle librerie che consentono l'accesso alle risorse di sistema, il C ++ è più adatto per la programmazione di sistema sebbene disponiamo di un'ampia gamma di applicazioni, inclusi database, impresa, giochi, ecc. Sviluppate in C ++.
# 26) Dati e funzioni
C ++ ha un ambito globale e uno spazio dei nomi. Pertanto i dati e le funzioni possono esistere anche al di fuori della classe.
In Java, tutti i dati e le funzioni devono essere nella classe. Non esiste un ambito globale, tuttavia, può esserci un ambito del pacchetto.
# 27) Strutture e sindacati
Le strutture e le unioni sono strutture di dati che possono avere membri con diversi tipi di dati. C ++ supporta sia le strutture che le unioni.
Java, tuttavia, non supporta strutture o unioni.
# 28) Gestione degli oggetti
In C ++ gli oggetti vengono gestiti manualmente. La creazione e la distruzione degli oggetti vengono eseguite manualmente utilizzando rispettivamente gli operatori new e delete. Usiamo anche costruttori e distruttori per oggetti di classe.
Java non supporta i distruttori sebbene supporti i costruttori. Java è anche fortemente dipendente dalla garbage collection automatica per la raccolta e la distruzione di oggetti.
# 29) Passaggio dei parametri
Passa per valore e passa per riferimento sono le due importanti tecniche di passaggio dei parametri utilizzate nella programmazione. Il C ++ supporta entrambe queste tecniche.
Tuttavia, Java supporta solo la tecnica di passaggio del valore del parametro.
# 30) Hardware
Il C ++ è vicino all'hardware e ha molte librerie che possono manipolare le risorse hardware. A causa della sua vicinanza all'hardware, il C ++ viene spesso utilizzato per la programmazione di sistema, applicazioni di gioco, sistema operativo e compilatori.
Java è principalmente un linguaggio di sviluppo di applicazioni e non è vicino all'hardware.
Formato tabulare: C ++ vs Java
Di seguito è riportata la rappresentazione tabellare del confronto tra C ++ e Java di cui abbiamo già discusso.
Non. | Parametro di confronto | C ++ | Giava |
---|---|---|---|
1 | Indipendenza dalla piattaforma | Il C ++ dipende dalla piattaforma. | Java è indipendente dalla piattaforma. |
Due | Compilatore e interprete | C ++ è un linguaggio compilato. | Java è un linguaggio compilato e interpretato. |
3 | Codice sorgente e relazione di classe | Nessuna relazione stretta con nomi di classi e nomi di file. | Impone una stretta relazione tra il nome della classe e il nome del file. |
4 | Concetto | Scrivi una volta compila ovunque. | Scrivi una volta, corri ovunque e ovunque. |
5 | Compatibilità con altre lingue | Compatibile con C eccetto per le funzionalità orientate agli oggetti. | La sintassi è presa da C / C ++. Nessuna compatibilità con le versioni precedenti con qualsiasi altra lingua. |
6 | Tipo di linguaggio di programmazione | Procedurale e orientato agli oggetti. | Orientato agli oggetti. |
8 | Gerarchia radice | Nessuna gerarchia di root. | Segue la gerarchia a radice singola. |
9 | Caratteristiche distintive | Supporta funzionalità procedurali e orientate agli oggetti. | Nessun distruttore. Raccolta automatica dei rifiuti. |
10 | Portabilità | Il codice C ++ non è portabile. | Java è portatile. |
undici | Digitare Semantics | Coerente tra tipi primitivi e oggetti. | Incoerente. |
12 | Meccanismo di input | Cin e Cout sono usati per I / O. | System.in e System.out.println |
13 | Controllo degli accessi e protezione degli oggetti | Un modello a oggetti flessibile e una protezione coerente. | Il modello a oggetti è ingombrante e l'incapsulamento è debole. |
14 | Gestione della memoria | Manuale | Controllato dal sistema. |
quindici | Ereditarietà multipla | Presente | Assente |
16 | Istruzione Goto | Supporta l'istruzione Goto. | Non supporta l'istruzione goto. |
17 | Operatore di risoluzione dell'ambito | Presente | Assente |
18 | Prova / cattura blocco | Può escludere il blocco try / catch. | Impossibile escludere se il codice dovrebbe generare un'eccezione. |
19 | Sovraccarico | Supporta l'overloading di operatori e metodi. | Non supporta il sovraccarico dell'operatore. |
venti | Parola chiave virtuale | Supporta la parola chiave virtuale che facilita l'override. | Nessuna parola chiave virtuale, tutti i metodi non statici sono virtuali di default e possono essere sovrascritti. |
ventuno | Rilevamento degli errori di runtime | Lasciato al programmatore. | Responsabilità del sistema |
22 | Supporto linguistico | Utilizzato principalmente per la programmazione del sistema. | Utilizzato principalmente per la programmazione dell'applicazione. |
2. 3 | Dati e funzioni | Dati e funzioni esistono al di fuori della classe. Gli ambiti globali e dello spazio dei nomi sono supportati. | Dati e funzioni sono presenti solo all'interno della classe, l'ambito del pacchetto è disponibile. |
24 | Puntatori | Supporta i puntatori. | Solo supporto limitato per i puntatori. |
25 | Strutture e sindacati | Supportato | Non supportato |
26 | Gestione degli oggetti | Gestione manuale degli oggetti con nuovo ed elimina. | Gestione automatica degli oggetti tramite Garbage Collection. |
27 | Passaggio dei parametri | Supporta la chiamata per valore e la chiamata per riferimento. | Supporta solo la chiamata in base al valore. |
28 | Supporto thread | Il supporto thread non è molto forte, si basa su terze parti. | Supporto del filo molto forte. |
29 | Hardware | Più vicino all'hardware. | Non molto interattivo con l'hardware. |
30 | Commento alla documentazione | Non supporta i commenti sulla documentazione. | Supporta il commento sulla documentazione (/ **… * /) che crea la documentazione per il codice sorgente Java. |
Finora abbiamo visto in dettaglio le principali differenze tra C ++ e Java. La prossima sezione risponderà ad alcune delle domande più frequenti relative a C ++ e Java nel mondo della programmazione.
Domande frequenti in C ++ e Java
Q # 1) Quale è meglio C ++ o Java?
Risposta: Bene, non possiamo dire con certezza quale sia il migliore. Sia C ++ che Java hanno i loro meriti e demeriti. Sebbene il C ++ sia principalmente utile per la programmazione di sistema, non possiamo farlo con Java. Ma Java eccelle in applicazioni come web, desktop, ecc.
In effetti, il C ++ può fare qualsiasi cosa, dalla programmazione di sistema all'impresa, al gioco. Java può fare più di un web o di un'azienda. Ci sono alcune applicazioni come certe applicazioni di programmazione di basso livello o giochi, ecc. Che non possono essere lasciate allo sviluppo di Java.
Quindi dipende totalmente dall'applicazione che stiamo sviluppando. Il modo migliore è valutare in anticipo i pro ei contro di entrambe le lingue e verificare la loro unicità per l'applicazione che stiamo sviluppando e quindi concludere qual è la migliore.
D # 2) C ++ è più potente di Java?
Risposta: Anche questa è una domanda complicata! Quando si tratta di quanto sia più facile la sintassi o l'apprendimento della lingua, Java ottiene punteggi. Quando si tratta di programmazione di sistema e / o altre applicazioni di basso livello, il C ++ è più potente.
Alcune persone potrebbero obiettare che avere raccolte GC automatiche, nessun puntatore, nessuna eredità multipla rende Java più potente.
Ma quando si tratta di velocità, il C ++ è potente. Anche in applicazioni come i giochi in cui è necessario memorizzare lo stato, la raccolta automatica dei rifiuti può rovinare le attività. Quindi C ++ è ovviamente potente qui.
D # 3) Possiamo imparare Java senza conoscere C o C ++?
Risposta: Sì, sicuramente!
Una volta che conosciamo i fondamenti della programmazione e dei concetti di programmazione orientata agli oggetti, possiamo iniziare ad imparare Java.
D # 4) C ++ è come Java?
Risposta: In un certo senso sì, ma in un certo senso no.
Come per esempio, sia C ++ che Java sono linguaggi di programmazione orientati agli oggetti. Possono essere utilizzati per lo sviluppo di applicazioni. Hanno una sintassi simile.
Ma in altri casi come la gestione della memoria, l'ereditarietà, il polimorfismo, ecc., C ++ e Java sono completamente diversi. Allo stesso modo, quando si tratta di tipi di dati primitivi, gestione degli oggetti, puntatori, ecc. Entrambi i linguaggi sono diversi.
D # 5) Java è scritto in C ++?
Risposta: Java nel senso che Java Virtual Machine (JVM) di Sun e IBM sono scritti in C ++. Le librerie Java sono in Java. Alcune altre JVM sono scritte in C.
Conclusione
C ++ e Java sono entrambi linguaggi di programmazione orientati agli oggetti. Inoltre, anche C ++ è un linguaggio procedurale. Ci sono alcune caratteristiche come l'ereditarietà, il polimorfismo, i puntatori, la gestione della memoria, ecc. In cui entrambe le lingue differiscono completamente tra loro.
Ci sono alcune caratteristiche del C ++ come la vicinanza all'hardware, una migliore gestione degli oggetti, velocità, prestazioni, ecc. Che lo rendono più potente di Java e quindi motiva gli sviluppatori a utilizzare C ++ per la programmazione a basso livello, applicazioni di gioco ad alta velocità, programmazione di sistema , eccetera.
In modo simile, la sintassi più semplice di Java, la raccolta automatica dei rifiuti, la mancanza di puntatori, modelli, ecc. Rendono Java uno dei preferiti per le applicazioni basate sul web.
=> Visita qui per l'elenco completo dei tutorial C ++ .
Lettura consigliata
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Tutorial sull'interfaccia Java e sulla classe astratta con esempi
- Java OOP: Introduzione alla programmazione orientata agli oggetti in Java
- Modificatori di accesso in Java - Tutorial con esempi
- Distribuzione Java: creazione ed esecuzione di file JAR Java
- Introduzione al linguaggio di programmazione Java - Tutorial video
- Java Virtual Machine: come JVM aiuta nell'esecuzione di applicazioni Java
- Tutorial Java Reflection con esempi