I metodi statici di una parte di classe del suo tipo?

0

Per quanto ho capito, le classi, come sono supportate in linguaggi OOP come C ++, Java e Scala, definiscono scrivi di ogni oggetto che posso creare con quella classe.

Non tutte le funzionalità di una classe sono rilevanti per il tipo delle sue istanze: metodi privati, il costruttore, il distruttore (in C ++) e le implementazioni dei metodi.

La mia domanda: i metodi statici di una parte di classe del tipo di istanze?

Correlato: Esiste un tipo distinto di una classe (che chiama new per ottenere un'istanza, che chiama i suoi metodi statici) e il tipo della classe ' istanze (chiamando i metodi pubblici).

Sono felice per tutti i suggerimenti e le correzioni di eventuali ipotesi non valide che ho fatto.

    
posta Matthias Braun 16.05.2015 - 14:21
fonte

2 risposte

1

Qualsiasi campo / metodo a cui un utente della classe può accedere fa parte del tipo, perché tutto il codice che utilizza quel tipo deve sapere che esiste, se è statico, quanti argomenti richiede e così via in modo che il codice usi per compilare correttamente. Ad esempio, non avresti modo di sapere se Foo::field era un codice valido a meno che static int field (o qualcosa di simile) fosse parte della definizione di classe di Foo . Quindi la risposta breve alla tua domanda è sì, i metodi statici fanno parte del tipo (almeno in C ++).

Sembra che la tua confusione derivi dal fatto che un campo / metodo statico non è contenuto all'interno o trasportato da ogni singola istanza di una classe. Naturalmente, il codice che implementa i metodi della classe non viene portato in giro da ogni singola istanza di una classe, quindi questa proprietà non è univoca per la statica.

In generale, una classe può e di solito ti dice molto di più sui suoi oggetti / istanze oltre ai dati che ogni istanza contiene. Questa è una parte importante di ciò che rende OOP così potente.

Non sono sicuro di aver compreso la tua domanda correlata, ma credo che la risposta sia: la classe è il tipo delle istanze. Il tipo di una classe sarebbe un tipo di un tipo, che è il tipo di cosa di cui normalmente non si parla in C ++ poiché non ha alcun significato reale nella lingua (con l'eccezione molto discutibile delle classi derivate / di base).

    
risposta data 16.05.2015 - 14:52
fonte
2

Not all features of a class are relevant to the type of its instances: Private methods, the constructor, the destructor (in C++), and the methods' implementations.

Questo di solito non è vero. In un sistema di tipo nominativo, niente sul tipo conta ma il nome (e dove esiste nella gerarchia se si ha sottotipizzazione). Mentre il compilatore passa attraverso il codice, corrisponde al nome del tipo al nome del tipo di parametri per assicurarsi che il codice sia ben formato. Il controllore del tipo non si preoccupa di quali funzioni sono presenti nel tipo. Al controllo del tipo non interessa quali sono i campi sul tipo.

Parti precedenti del compilatore, dove usa la tabella dei simboli per risolvere gli identificatori. Nell'analisi semantica, in cui il compilatore si accerta che si stia facendo invocazione di funzione su una funzione anziché su int . Ma quelle parti non si occupano di tipi oltre "è A uguale a, o un sottotipo di B?".

I sistemi di tipo strutturale, invece, fanno si preoccupano del coraggio di una classe. Poiché la loro definizione di sottotipizzazione è "i campi / le funzioni di A sono compatibili con i campi / le funzioni di B?", I campi e le funzioni fanno parte della definizione del tipo. Ma qui, le statistiche non contano poiché non fanno parte del tipo di istanza. Immagino che una lingua possa avere un tipo per l'istanza singleton della statica, ma non ne conosco nessuno che lo faccia realmente.

    
risposta data 16.05.2015 - 15:06
fonte

Leggi altre domande sui tag