User Tools

Site Tools


appunti3s:programmazione_orientata_agli_oggetti

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
appunti3s:programmazione_orientata_agli_oggetti [2018/04/25 07:55] – external edit 127.0.0.1appunti3s:programmazione_orientata_agli_oggetti [2020/06/08 22:19] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +< < indice degli [[appunti3s:linguaggio_c|appunti sulla programmazione in C++]]
 +
 +====== Programmazione orientata agli oggetti ======
 +
 +===== Introduzione =====
 +Anche gli oggetti, come le funzioni, sono pezzi di programma che possono essere riutilizzati, ma a differenza delle tradizionali funzioni, questi trattano i dati in modo più "responsabile".
 +Immaginando che il programma sia un insegnante che interroga gli studenti, e che come prima cosa debba conoscere il nome dello studente: 
 +  * Un insegnante //orientato alle funzioni//, prenderebbe in mano il documento dello studente, per poter leggere il nome dal suo documento.
 +    * {{ :appunti3s:orientato_funzione.png?156 |}}
 +  * Un insegnante //orientato agli oggetti//, chiederebbe gentilmente allo studente di fornirgli il proprio nome.
 +    * {{ :appunti3s:orientato_oggetti.png?199 |}}
 +
 +Il primo insegnante, rispetto al secondo, agisce utilizzando un eccesso di forza e si comporta in modo sgarbato. Questo è il modo con cui si comporta una //tradizionale funzione// con tutti i dati. Infatti il programmatore può creare una funzione così forte che può modificare i parametri che gli vengono passati, questo perché non esiste nessun controllo che limita la volontà del programmatore.
 + Questo permette di scrivere rapidamente le funzioni nel programma, ma rende difficile scoprire eventuali errori presenti nel codice di una funzione, perché non esiste una sola funzione responsabile delle modifiche fatte su un certo dato.
 +
 +Il secondo insegnante pensa che gli studenti abbiano diritto alla loro privacy e che inoltre sia più sicuro chiedere il nome invece che sperare di trovare, chissà in quale tasca, un documento. Anche il programmatore, usando gli oggetti, assegna a loro delle responsabilità, e se c'è un errore nel funzionamento del programma, sa immediatamente dove trovare il responsabile. Perché, di solito, per ogni dato esiste un solo responsabile.
 +
 +Ci sono anche altri vantaggi nell'uso della programmazione orientata agli oggetti, come:
 +  * la ficilità dello //sviluppo//: programmi procedurali di 3000 righr, devono essere letti completamente per comprenderne il funzionamento e per modificare anche una sola riga. Il mio cervello non riesce nemmeno a comprendere tutte le 3000 righe contemporaneamente, perchè la mente umana ha dei limiti. Nei linguaggi orientati agli oggetti c'è solo un tipo di oggetto che si occupa di una certa operazione;
 +  * la facilità della //manutenzione//;
 +  * la facilità del del //riutilizzo// del codice;
 +
 +e altri vantaggi che saranno compresi attraverso successivi esempi. (A volte un esempio è più chiaro di mille parole).
 +Per alcuni tipi di problemi la programmazione orientata agli oggetti invece non è la soluzione ideale....
 +Di solito l'approccio migliore per descrivere la soluzione di un problema dipende anche dal problema. Un po' come quando alcuni problemi si risolvono meglio usando la ricorsione e altri usando l'iterazione.
 +====Gli oggetti sono strumenti di lavoro====
 +Gli oggetti sono strumenti che realizzano o forniscono qualcosa sui dati.
 +In questo modo si evita di occuparsi direttamente dei dati e si lascia che sia l'oggetto ad occuparsene.
 +====Gli oggetti hanno una privacy====
 +Gli oggetti sono responsabili dei propri dati, ma pretendono riservatezza. (vedere [[appunti3s:data_hiding]]) Non si deve pretendere di sapere come un oggetto esegue il proprio lavoro, ma chiedere solo che produca il risultato aspettato. Non c'è bisogno di capire qualcosa quando non siamo noi ad occuparcene.
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +=====Confronto tra linguaggio C e C++=====
 +Il linguaggio C è stato creato avendo in mente lo stile di programmazione procedurale, per questo motivo tale linguaggio contiene gli strumenti utili al programmatore per scrivere un programma con lo stile procedurale.
 +
 +Il linguaggio C++ è stato creato avendo in mente lo stile di programmazione orientato ad oggetti, per questo motivo tale linguaggio contiene gli strumenti utili al programmatore per scrivere un programma con lo stile orientato ad oggetti. Questo stile ha aggiunto delle regole che lo stile procedurale non conteneva. Quando si aggiungono delle regole, le cose sembrano diventare più difficili, ma queste regole aiutano a scrivere i programmi senza commettere errori. 
 +
 +Chi ha creato il linguaggio C++ ha voluto dare il tempo ai programmatori, che conoscevano solo il C, di apprendere i nuovi strumenti del C++, perciò il C++ permette di scrivere programmi anche con il vecchio stile di programmazione del linguaggio C. In pratica il linguaggio C++ consente, ma non costringe ad utilizzare le buone pratiche della programmazione ad oggetti. Un aspetto che ha sia lati negativi che lati positivi...
 +
 +È vero che esistono programmi scritti combinando insieme i due tipi di stili e i due linguaggi, ma chi studia il linguaggio C++ e vuole ottenere i migliori risultati, deve abbandonare il vecchio stile di programmazione puramente procedurale. Deve svolgere una //progettazione //orientata ad oggetti per poi ottenere un //programma// che segua lo stile orientato ad oggetti. 
 +
 +Dopo aver visto cosa si intende per linguaggio C e linguaggio C++, e le relative differenze, qualcuno potrebbe chiedersi che cosa sia "linguaggio C/C++" di cui si parla spesso? Effettivamente è un termine che fa un po' confusione e forse sarebbe meglio evitarlo... 
 +
 +  * esempio funzione membro ispettore (accessor) non usare get
 +  * esempio funzione membro modificatore (manipulator) usare setNome
 +  * esempio di costruttore (costruttore dentro costruttore)
 +
  
appunti3s/programmazione_orientata_agli_oggetti.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1