2011-01-25 21 views
6

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.

+0

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

+0

@biziclop. In realtà sto chiedendo di C++ non C#. – Simplicity

+0

@ user588855 Si scopre che non riesco nemmeno a leggere. :) – biziclop

risposta

10

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.

2

Strettamente parlando, penso che gli spazi dei nomi in C++ forniscano la stessa semantica.

7

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.

1

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.

0

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.

0

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.