Origine di strutture e classi

8

Quali problemi di progettazione e implementazione hanno dovuto risolvere i programmatori quando hanno deciso prima di utilizzare strutture e classi?

Quando è successo questo e chi erano i pionieri dietro queste idee?

Nota, questa è una doppia domanda, perché le strutture e le classi sono correlate. Mi rendo conto che le strutture sono più vecchie delle classi. Sarebbe bello se la risposta parlasse separatamente di entrambi e citi alcune fonti.

    
posta xralf 18.05.2012 - 17:33
fonte

4 risposte

5

L'idea di una struttura è quella di raggruppare una raccolta di variabili in un singolo contenitore. Per esempio. se hai tre coordinate

int x;
int y;
int z;

potresti volerli vedere come un'unità di dati e raggrupparli insieme:

struct point
{
    int x;
    int y;
    int z;
};

Puoi vedere questo come un modo per modulare i tuoi dati. Ora puoi definire le variabili che contengono tutti e tre i valori in una unità:

struct point p1, p2;

Nella programmazione procedurale, hai procedure o funzioni che manipolano i dati e, in particolare, le strutture, ad es.

void shiftX(struct point *p, int offset);

Puoi chiamare la funzione su una struttura passandola come argomento:

shiftX(&p1, -10);

Il passaggio dalle strutture alle classi consiste nel dire che le procedure / funzioni devono essere raggruppate insieme ai dati in unità: come le strutture classificano le entità che hanno la stessa struttura, le classi classificano le entità che hanno la stessa struttura e le stesse operazioni.

Quindi ora puoi scrivere:

class Point
{
  public:
    void shiftX(int offset);

    int x;
    int y;
    int z;
 };

e poi:

 Point p;

 ...

 p.shiftX(-10);

In questo modo è più facile raggruppare le operazioni che funzionano sullo stesso tipo di dati. Per esempio. puoi raggruppare tutte le operazioni che agiscono sui punti nella definizione della classe, invece di averli sparsi sul tuo codice come funzioni che hanno uno o più parametri di tipo punto.

Inoltre, puoi perfezionare sia la struttura che il comportamento usando l'ereditarietà.

Riassumere: le strutture sono un concetto che consente di organizzare / modulare i dati. Le classi consentono di organizzare / modulare sia i dati che le operazioni.

    
risposta data 18.05.2012 - 21:07
fonte
5

Le strutture sono gruppi di dati, tipicamente digitati. COBOL ha visto il primo utilizzo diffuso di loro. Sebbene gli analoghi a quello esistessero in anticipo. Il problema di progettazione qui raggruppa più serie di dati come un nome, un'occupazione e un numero di telefono. L'idea di un "disco" è qualcosa di molto più vecchio del computer e si presenta in matematica e in altre discipline.

La programmazione orientata agli oggetti è stata originariamente progettata per gestire la simulazione in cui si avrebbe un sacco di oggetti in esecuzione per simulare un sistema. Simula 67 è stata la prima a implementare quello stile di programmazione. Smalltalk è stato il primo linguaggio completamente orientato agli oggetti in cui tutto è un oggetto che include i primitivi. Il problema originale da risolvere era la simulazione di sistemi complessi. Simula 67 è stata progettata da Ole-Johan Dahl e Kristen Nygaard. Alan Kay (che una volta ha risposto a una domanda su Stack Overflow ) progettato Smalltalk che è ancora usato.

Le strutture e le Classi sono strettamente correlate ai tipi in quanto entrambi definiscono determinati parametri per un insieme di dati. Le classi definiscono ulteriormente le autorizzazioni e le operazioni di accesso, consentendo in tal modo l'utilizzo di tipi di dati astratti completamente implementati. Le strutture possono essere pensate per un sottoinsieme di Classi in un linguaggio orientato agli oggetti. Sarebbero una classe wrapper che ha tutti i campi impostati su public e nessun metodo al di fuori di getter e setter per quei campi.

    
risposta data 18.05.2012 - 18:54
fonte
4

Puoi trovare informazioni sulle strutture in questo articolo di Wikipedia . In breve, sembrano essere così profondamente ancorati nell'informatica, che sono stati supportati prima dall'hardware (istruzioni speciali in IBM 1620, schede perforate fondamentalmente come un'istanza di record e Babbage's Analytical Engine (almeno secondo wikipedia). il primo linguaggio ampiamente utilizzato per supportare il costrutto.

    
risposta data 18.05.2012 - 18:50
fonte
3

"strutture" sono in realtà completamente diverse da "classi". Pensa al vecchio stile "struct" come un record. In QBASIC erano persino chiamati così. La necessità di questo è abbastanza ovvia e anche se non posso dire chi l'ha inventato ... Immagino che sia venuto fuori quasi immediatamente. Le "classi" di OOP sembrano essere iniziate abbastanza bene con Simula: link

    
risposta data 18.05.2012 - 18:38
fonte

Leggi altre domande sui tag