candaluar ha scritto:
+m+ ha scritto:
ritengo che la situazione sia opposta: C++ è proprio un "aggiustamento" di C con l' "appiccicaticcio" di uno strato di oggetti (man mano evoluti dalle primissime versioni, si fa presto a dire C++ ma dalla prima versione autografata da Stroustrup di acqua ne è passata sotto i ponti).
Cosa intendete per "aggiustamenti" del C?
Nella mia piccola esperienza molti dei progetti sono stati sviluppati in C, spesso perchè si trattava di firmware e in questo campo il C fornisce tutto il necessario: altre volte è stato scelto il C++ quando la complessità del progetto lo richiedeva (e la costruzione di oggetti poteva agevolare lo sviluppo e la manutenzione). Quindi per me, e per le persone con cui ho lavorato, il C++ viene scelto rispetto al C per l'OOP e basta, non capisco quali siano questi "aggiustamenti" del C e ve lo chiedo solo per poter capire
Sono abbastanza vecchio per "esserci" quando C++ non esisteva.
Farne la storia è lungo, e di sicuro troverai su internet tutto quello che vuoi senza che debba riscriverla io.
In supersintesi il buon Stroustrup, sull'onda dei vari OOP "veri" (es. Smalltalk) ha evoluto il C mettendoci sopra qualcuno dei concetti della programmazione ad oggetti.
Inizialmente era proprio una schifezza (i primi compilatori C++, tanto per dire, non facevano altro che prendere il codice C++ e trasformarlo... in C... per poi compilarlo come C), parlo dei tempi grosso modo prima che mi iscrivessi all'università, fine '80
Poi, mano a mano, ha iniziato a prendere piede (il C++) e da lì è stato evoluto con diverse versioni, che hanno introdotto tante belle cose, sempre "appiccicate" sulla fondazione C (per non perdere la retrocompatibilità).
Hanno fatto un sacco di commissioni e sottocommissioni per stabilire cosa mettere "dentro", cosa lasciare "fuori", e cosa TENERE dentro (cioè dettagli davvero pessimi che però, tolti, avrebbero impedito la retrocompatibilità di progetti importanti).
Gira che ti gira hanno avuto la brillante idea di aggiungere al linguaggio "base" (perchè abbiamo detto che NON si vuole/voleva cambiarlo troppo, per non "rompere" col passato) la mitica libreria standard (adesso sto banalizzando), spostando strutture dati non elementari, algoritmi, funzioni varie etc "fuori" dalla base.
In tal modo C++ è ancora per la maggior parte compatibile col C (e gli stramiliardi di codici che lo usano), pur avendo cose "belle" tipo le stringhe etc, col "trucchetto".
Poi man mano si son fatti prendere la mano introducendo aspetti del linguaggio cui, francamente, non interessa niente a praticamente nessuno (se non in qualche oscuro e del tutto inutile corso aaccademico), per arrivare a C++98 e C++11, che è da un lato molto simile al "vecchio" C++ anni '80, dall'altro ha tante belle cose e comode (e tante altre invece rimaste anche se deprecate).
Qui ci vorrebbe la "storia" dei linguaggi di programmazione dal 1950 a oggi, con le varie "ere geologiche", le varie "mode" etc.
Quindi, in supersintesi, C++ non aveva nulla di un "vero" linguaggio ad oggetti (quando è nato), ora ne ha un pochino in più (dopo una 20 ina di anni di evoluzione).
Ma poi ci si è resi conto che un linguaggio "puro" non frega in realtà a (quasi) nessuno, e che anche se è bello e fico e tutto quello che vuoi, se nessuno lo usa, rimarrà una nicchia pressochè morta o moribonda.
Mentre un "ibrido-bastardo" (come C++) fa il suo sporco lavoro, cioè funzionare ragionevolmente bene e ragionevolmente velocemente, con un'ottima retrocompatibilità (che in informatica è sacra, a parte per Apple)
Poi fermiamo subito i flammoni sul perchè e percome un linguaggio è a oggetti, puro, ibrido, bastardo, in parte etc: sono tutti argomenti che si fanno (facevano?) all'università.