Oggetti in lingue non OOP

0

Possiamo usare la parola "oggetto" per dati / funzioni, ad es. C (o Pascal) che non ha realmente oggetti? In C, che cos'è un oggetto? Una struttura dati? Un'area di memoria con nome? Ho parlato con il mio collega di "oggetti" in C e ha detto che non ce n'erano altri, ma nel testo che studio su C la parola oggetto è usata come generalizzazione di una funzione o di un dato.

Ad esempio, se in C dichiari un union puoi dire che hai dichiarato il posto per un oggetto che può essere una funzione o dati.

L'ADT definito come "Oggetto" assomiglia a questo in C

typedef enum { Integral, Real } Kind;
typedef struct {
  Kind type;
  union {
    double rvalue;
    int ivalue;
  } data;
} Object;

Grazie per qualsiasi risposta

    
posta Niklas Rosencrantz 29.05.2012 - 00:18
fonte

3 risposte

13

Lo standard C definisce un "oggetto" come "regione di memorizzazione dei dati nell'ambiente di esecuzione, il cui contenuto può rappresentare valori" ( N1570 3.15).

Lo standard C ++ definisce similmente un "oggetto" come "una regione di memorizzazione" ( N3337 1.8p1).

Lo standard Pascal non sembra avere una definizione di "oggetto", ma usa la parola una volta, in un senso che sembra essere simile alle definizioni C e C ++.

Altre lingue potrebbero avere o meno le loro definizioni.

Nessuna delle definizioni che ho citato è correlata a concetti di programmazione "orientata agli oggetti"; C ++ ha funzionalità orientate agli oggetti, ma lo standard C ++ non usa la parola "oggetto" per descriverli. Ovviamente è molto comune usare la parola "oggetto" in un senso "orientato agli oggetti" - e non c'è niente di sbagliato in questo, purché tu sia chiaro sul significato che stai utilizzando.

"Oggetto" è una parola inglese comune; vedi, ad esempio, link . Alcuni campi tecnici hanno stabilito significati più specifici per esso, per convenienza nel discutere determinati argomenti. Questi significati non sono necessariamente coerenti tra loro.

    
risposta data 29.05.2012 - 01:24
fonte
4

Un oggetto consiste in una combinazione di codice e dati, che in C può essere rappresentato utilizzando una struct e aggiungere un puntatore a funzione per ogni metodo nell'oggetto (che a sua volta deve anche avere un riferimento all'oggetto stesso ( this ) passato come uno dei parametri).

La parte difficile è quindi l'impostazione della struttura in quanto la lingua non aiuta molto, quindi è necessario un qualche tipo di convenzione per farlo manualmente. Detto questo, quando impostato correttamente è possibile emulare tutte le cose di fantasia come l'ereditarietà e il polimorfismo in quanto alla fine si finisce con un insieme di puntatori di funzione in ogni struct e quindi in realtà hanno oggetti.

Per comunicare chiaramente agli altri che questa è una costruzione non presente nel linguaggio di base, suggerirei di chiamarla "oggetti emulati".

    
risposta data 29.05.2012 - 00:59
fonte
-5

Modifica

Quando vedo che nessuno ha capito la mia risposta, permettimi di chiarire. Non dico che non puoi avere oggetti in C, come ho spiegato in seguito, puoi avere oggetti anche in Assembly.

Ho detto "Non puoi chiamare structs o unions come oggetti.Ad esempio, structs e unions non supportano l'ereditarietà o il polimorfismo." per rispondere alla domanda originale.

Non c'è niente di sbagliato in questa risposta. Gli oggetti sono generalmente associati alla programmazione orientata agli oggetti, quindi un oggetto deve supportare i principi OOP. È così semplice.

Dire che "Sono abbastanza intelligente per creare oggetti anche in C" non aiuta come risposta.

    
risposta data 29.05.2012 - 00:26
fonte

Leggi altre domande sui tag