oggetti, classi, tipi

4

In che modo un programmatore orientato agli oggetti capisce la parola "tipo"? Non sono a conoscenza dell'esistenza di una teoria dei tipi per la programmazione orientata agli oggetti, perché quando qualcuno menziona la teoria dei tipi è sempre nel contesto di un qualche tipo di linguaggio di programmazione funzionale, quindi cosa significa "tipo" nel contesto orientato agli oggetti?

    
posta davidk01 06.01.2011 - 18:44
fonte

4 risposte

4

Tipo è fondamentalmente uguale a classe - definisce le caratteristiche e il comportamento di una famiglia di oggetti. Si istanziano i tipi per creare oggetti di questi tipi.

In pratica, tipi di solito si riferiscono a un insieme di classi predefinite fornite con la libreria di classi di un ambiente di programmazione: tipi e strutture di dati primitivi di base. Tuttavia, il più delle volte puoi usare i termini tipo e classe in modo intercambiabile.

    
risposta data 06.01.2011 - 18:47
fonte
2

Un tipo si riferisce all'identità di una variabile. Alcune variabili sono numeri interi, alcune stringhe, alcuni array, alcuni oggetti, ecc. Quando si hanno oggetti, il "tipo" di un oggetto è fondamentalmente lo stesso concetto della sua "classe" e alcuni tipi di teoria iniziano a essere introdotti lì perché devi affrontare l'ereditarietà e la sostituzione del tipo: se una classe variabile discende da un'altra classe, e una funzione si aspetta un'istanza della classe base come parametro, devi essere in grado di passare un'istanza di una classe discendente alla funzione e avere il compilatore in grado di trattarlo come se fosse la classe base dalla quale discende.

    
risposta data 06.01.2011 - 18:51
fonte
1

Nell'orientamento agli oggetti, i tipi sono esattamente la stessa cosa di qualsiasi altra parte. I sistemi di tipo mainstream di oggi sono solo estensioni di ciò che avevamo in C / C ++.

Il motivo per cui senti molto sui tipi e sulla programmazione funzionale è che queste persone (in particolare la comunità di haskell) stanno cercando di fare i tipi bene.

Anche i linguaggi mainstream hanno sistemi di tipi ragionevolmente avanzati, basta guardare i generici. I generici sono tutti su tipi. I cast sono sui tipi.

Alcuni esempi di tipi in Java:

  • Int i è di tipo Int
  • Un gatto è una sottoclasse e quindi un sottotipo di animale (questa ipotesi è infranta se si viola il principio di sostituzione di Liskov, ma questa è una questione per un altro rant)
  • Un gatto di classe Gatto è di tipo Gatto e di tipo Animale
  • Una schiera di gatti è anche una serie di animali, ma funziona solo se si prendono animali dalla schiera, mettendo un cane in questa serie non funzionerà, sebbene i cani siano anche animali. L'ipotesi di Java secondo cui gli array sono covarianti vale solo per le letture, le scritture sono controvarianti.
  • Un flyingCat che implementa l'interfaccia Flying è di tipo Flying
risposta data 06.01.2011 - 19:37
fonte
0

Una classe è un tipo di data avanzata. In genere, verranno visualizzati riferimenti al tipo di dati primitivi, che includono tipi di dati come int, float, char ... ect. Poi ci sono tipi di dati più avanzati come strutture e unioni di enumerazioni. Storicamente, i tipi di dati potevano solo rappresentare dati. Il concetto della classe ha speso questo per consentire un tipo di dati che può includere definizioni di funzioni e specificatori di accesso, che hanno posto restrizioni o diritti di accesso ai singoli "membri" della classe. Una classe è uno dei tipi di dati più avanzati disponibili. La differenza principale è che il linguaggio di programmazione orientato agli oggetti consente il polimorfismo, che consente di gestire i valori di diversi tipi di dati dalla stessa interfaccia. È possibile simulare una forma di polimorfismo in linguaggi strutturati come C, ma non è formalmente supportato dal linguaggio. Un oggetto è un'istanza di classe. Un oggetto non è un tipo.

In breve, significa esattamente la stessa cosa che ha sempre.

    
risposta data 06.01.2011 - 19:14
fonte

Leggi altre domande sui tag