In Java
, c'è ciò che viene chiamato package
. library
in C++
rappresenta lo stesso significato, in particolare in termini, ad esempio, di utilizzo di classi relative e utilizzo di membri protetti?Pacchetti Java e librerie C++
Grazie.
In Java
, c'è ciò che viene chiamato package
. library
in C++
rappresenta lo stesso significato, in particolare in termini, ad esempio, di utilizzo di classi relative e utilizzo di membri protetti?Pacchetti Java e librerie C++
Grazie.
Ci sono diverse dimensioni di ciò che significa un package
in Java. Come contenitore che differenzia i nomi delle classi all'interno dai nomi delle classi in altri pacchetti, il suo equivalente sarebbe C++ namespaces
.
Come unità che garantisce l'accesso a membri non privati a classi nello stesso blocco, non esiste un equivalente in C++. Il livello di accesso concesso a una classe è indipendente dallo spazio dei nomi in cui è definita la classe.
Come metodo per ordinare le sorgenti nel disco, non esiste un equivalente, il linguaggio C++ non ha requisiti su come il codice viene archiviato nei file.
Per quanto riguarda le librerie C++, è più vicino ai file jar
in Java. Raggruppano classi diverse che condividono qualche relazione. Un jar può contenere più di un pacchetto e più di un jar può contenere classi dello stesso pacchetto. Analogamente alle librerie, possono contenere classi di diversi spazi dei nomi e/o librerie diverse possono contenere classi dello stesso spazio dei nomi.
Strettamente parlando, penso che gli spazi dei nomi in C++ forniscano la stessa semantica.
I pacchetti Java più vicini sono namespaces in C++.
Possono essere annidati l'uno nell'altro e devi dichiarare espressamente che sei using
o parte del loro contenuto. Tuttavia, non impongono alcuna gerarchia di file fisici come fanno i pacchetti Java.
Suppongo che sia più correlato agli spazi dei nomi in C++. Java e C++ utilizzano entrambe le librerie. La libreria può essere un qualsiasi insieme indipendente di classi [probabilmente un framework] a cui è possibile accedere nel nostro codice.
Le librerie esterne sono presenti sia in Java che in C++. Solo i formati variano, .jar in Java e .dll/.so in C++.
Lo scopo dei pacchetti e degli spazi dei nomi è diverso da quello delle librerie. Evitano di esaurire i nomi consentendo all'utente di raggruppare la sorgente in modo logico.
A package
in Java è uno spazio dei nomi per classi, interfacce ed enumerazioni. Nome del pacchetto, un punto e il nome di classe formano il nome di classe pienamente qualificato di una classe:
com.example.hello.HelloWorldApplication
^--packagename--^ ^-----classname-----^
I puntini nel nome del pacchetto hanno un significato diverso, allora il punto tra i nomi: i primi due punti di questo esempio sono parte del nome del pacchetto, l'ultimo è un separatore.
Questo dovrebbe essere tenuto a mente, perché c'è un malinteso comune riguardo i nomi dei pacchetti: solo perché i nomi possono essere mappati su una struttura gerarchica di cartelle, alcuni pensano che anche i nomi dei pacchetti abbiano una gerarchia - il che non è il caso: hello
non è un "subpackage" di example
!
Ma, per creare un semplice mappatura di cartelle e file, un classloader può semplicemente prendere il nome della classe completo, sostituire tutti i punti con una barra e aggiungere .class
per ottenere un percorso relativo ad un file di classe.
Ma nota ancora una volta che una mappatura di cartelle/file non è richiesta t caricare le classi - possiamo inventare un programma di caricamento classe che ottiene le classi da un database o un servizio remoto - una mappatura di cartelle/file non avrebbe senso questo caso.
Purtroppo non so come funzionano le librerie C#, ma i membri protetti sono effettivamente visibili all'interno del pacchetto e ogni pacchetto definisce uno spazio dei nomi separato per i nomi delle classi, se questo è ciò che intendevi. – biziclop
@biziclop. In realtà sto chiedendo di C++ non C#. – Simplicity
@ user588855 Si scopre che non riesco nemmeno a leggere. :) – biziclop