{"id":203,"date":"2009-10-13T17:11:06","date_gmt":"2009-10-13T16:11:06","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=203"},"modified":"2010-09-06T19:31:15","modified_gmt":"2010-09-06T17:31:15","slug":"l003-tecniche-di-programmazione","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/l003-tecniche-di-programmazione\/","title":{"rendered":"L#003 &#8211; Tecniche di programmazione"},"content":{"rendered":"<p>Come abbiamo accennato con il primo articolo di questo sito, &#8220;<a href=\"http:\/\/www.devapp.it\/wordpress\/da-dove-cominciare.html\" target=\"blank\">Da dove cominciare?<\/a>&#8220;, \u00e8 importante per chiunque voglia avvicinarsi al mondo della programmazione innanzitutto capire quali sono le diverse tecniche di programmazione, o se vogliamo i diversi paradigmi di programmazione. In parole povere i diversi stili di programmazione con cui i programmatori concepiscono e percepiscono un programma.<!--more--><\/p>\n<p>Di queste tecniche ne esistono diverse, ma concentreremo la nostra attenzione solo su tre di queste:<\/p>\n<ul>\n<li>Programmazione non strutturata<\/li>\n<li>Programmazione strutturata (procedurale)<\/li>\n<li>Programmazione orientata agli oggetti<\/li>\n<\/ul>\n<p><strong>PROGRAMMAZIONE NON STRUTTURATA<\/strong><br \/>\nQuesto paradigma di programmazione, in pratica il primo, concepiva un programma come un unico blocco di codice, detto &#8220;main&#8221;, dove era possibile saltare da un punto ad un altro del programma tramite la famosissima istruzione &#8220;GOTO&#8221;. Non esistevano porzioni di codice riutilizzabili e quell&#8217;unico blocco di codice doveva essere completo di tutto. Questo portava alla creazione di codice spesso troppo lungo, incomprensibile e difficile da mantenere. Altro aspetto negativo \u00e8 che questo tipo di tecnica portava spesso ad uno spreco di risorse hardware che come conseguenza diventava uno spreco inutile di denaro.<\/p>\n<p>Il Basic (non strutturato) \u00e8 forse il pi\u00f9 famoso esempio di linguaggio di programmazione non strutturata. Ecco una porzione di codice:<\/p>\n<blockquote><p>10 INPUT &#8220;What is your name: &#8220;, U$<br \/>\n20 PRINT &#8220;Hello &#8220;; U$<br \/>\n30 INPUT &#8220;How many stars do you want: &#8220;, N<br \/>\n40 S$ = &#8220;&#8221;<br \/>\n50 FOR I = 1 TO N<br \/>\n60 S$ = S$ + &#8220;*&#8221;<br \/>\n70 NEXT I<br \/>\n80 PRINT S$<br \/>\n90 INPUT &#8220;Do you want more stars? &#8220;, A$<br \/>\n100 IF LEN(A$) = 0 THEN GOTO 90<br \/>\n110 A$ = LEFT$(A$, 1)<br \/>\n120 IF A$ = &#8220;Y&#8221; OR A$ = &#8220;y&#8221; THEN <strong>GOTO 30<\/strong><br \/>\n130 PRINT &#8220;Goodbye &#8220;; U$<br \/>\n140 END<\/p><\/blockquote>\n<p>Come potete vedere da questo esempio, ogni riga inizia con un numero che identifica ogni istruzione del programma. In questo tipo di software vengono eseguite tutte le istruzioni in sequenza, una dopo l&#8217;altra, fino al raggiungimento dell&#8217;istruzione GOTO che rimanda istantaneamente l&#8217;esecuzione ad un altro punto indicato dall&#8217;indice numerico. E&#8217; facile intuire come sia facile che un programma diventi sempre meno leggibile man mano che questo cresce di funzionalit\u00e0, fino a diventare completamente ingestibile.<br \/>\nPer questa ragione sono nate successivamente altre tecniche di programmazione strutturate.<\/p>\n<p><strong>PROGRAMMAZIONE STRUTTURATA (PROCEDURALE)<\/strong><br \/>\nQuesta tecnica di programmazione introduce un nuovo concetto molto importante, ovvero la divisione e riusabilit\u00e0 del codice. Il programma non \u00e8 pi\u00f9 quindi tutto in un unico blocco di codice ma diviso in pi\u00f9 parti, chiamate procedure o funzioni, in base al linguaggio, ben distinte e riutilizzabili. Sparisce inoltre l&#8217;uso dell&#8217;istruzione GOTO. Si capisce facilmente come il programma in questo modo risulti pi\u00f9 semplice da progettare, gestire e mantenere, infatti se una funzione o procedura che sia, funziona correttamente, questa si comporter\u00e0 allo stesso modo in ogni punto in cui viene chiamata. Linguaggi strutturati sono ad esempio il C, come anche il Visual Basic e molti altri.<\/p>\n<p>Di seguito uno spezzone di un programma in C che calcola il quadrato di un numero tramite una funzione:<\/p>\n<blockquote><p>#include &lt; stdio.h &gt;<br \/>\n\/* Questo \u00e8 il prototipo della funzione, ovvero una dichiarazione *\/<br \/>\nint square(int x);<\/p>\n<p>\/* Codice del programma *\/<br \/>\nint main() {<br \/>\nprintf (&#8220;Quadrato di 4: %d\\n&#8221;,<strong>square(4)<\/strong>);<br \/>\nreturn 0;<br \/>\n}<\/p>\n<p>\/* Questa \u00e8 la nostra funzione utilizzata nel programma principale *\/<br \/>\nint square(int x) {<br \/>\nreturn x*x;<br \/>\n}<\/p><\/blockquote>\n<p>Senza entrare nel dettaglio di ogni istruzione, potete notare come anche in questo caso il programma principale sia all&#8217;interno di un &#8220;main&#8221; (una funziona particolare) e che le funzioni siano una porzioni di codice riutilizzabile e separato dal corpo del programma stesso. Le varie funzioni possono inoltre essere salvate in file esterni, poi inclusi in quello principale grazie ad alcuni semplici comandi.<\/p>\n<p>Nonostante i grossi vantaggi portati con questa tecnica di programmazione, utilizzata per molti anni e usata ancora oggi in molti campi, sono diversi gli aspetti negativi che si incontrano nella stesura di programmi di enormi dimensioni e che coinvolgono grandi team di sviluppo. Per questo nasce una nuova concezione, quella della programmazione orientata agli oggetti che illustrer\u00f2 qui di seguito.<\/p>\n<p><strong>PROGRAMMAZIONE ORIENTATA AGLI OGGETTI<\/strong><br \/>\nUltimo paradigma di programmazione che illustreremo \u00e8 quello della Programmazione Orientata agli Oggetti, anche conosciuto come OOP (Object Oriented Programming). Questo \u00e8 il metodo che pi\u00f9 fa avvicinare la programmazione alla realt\u00e0 in cui viviamo. Tutto si basa sugli oggetti, componenti completi che comprendono dati, metodi e procedure i quali comunicano e condividono informazioni tra loro. Iniziamo a capire cos&#8217;\u00e8 un oggetto con un esempio pratico.<\/p>\n<p>Immaginate un&#8217;automobile. Ebbene l&#8217;automobile \u00e8 un oggetto che ha delle sue propriet\u00e0 (tipo il colore, la cilindrata o la potenza) e delle azioni che puo&#8217; compiere, (come andare avanti, girare, fermarsi, accendersi o spegnersi). Non \u00e8 importante conoscere tutti i meccanismi interni ad un&#8217;automobile per poterne scegliere una e utilizzarla, ma basta conoscere le sue caratteristiche e le azioni che puo&#8217; compiere. Nella programmazione ad oggetti, le caratteristiche di un oggetto vengono denominate propriet\u00e0 e le azioni sono dette metodi.<\/p>\n<p>Immaginate la potenza che possono avere quindi questi oggetti se combinati secondo particolari schemi tipici della programmaizone OOP (incapsulamento, polimorfismo, ereditariet\u00e0).<\/p>\n<p>Torniamo alla macchina e prediamo in esame il cambio. Anche questo puo&#8217; essere considerato un oggetto in tutto e per tutto, con le sue propriet\u00e0 e i suoi metodi. Esistono diversi tipi di cambio, manuale, sequenziale, automatico ma fanno tutti parte della stessa categoria, sono lo stesso oggetto, differenziano l&#8217;uno dall&#8217;altro solo per le alcune propriet\u00e0 ed azioni che li contraddistinguono. Inoltre avrete notato come un oggetto puo&#8217; essere combinato con un altro senza alterare le caratteristiche dei due presi singolarmente. Le possibilit\u00e0 e la potenza di questo nuovo schema di programmazione sono praticamente infinite. Linguaggi come il C++, Java, ma soprattutto Objective-C che andremo ad approfondire durante questo corso sono basati su questo paradigma.<\/p>\n<p>Non poster\u00f2, in quanto al momento non sarebbe di facile comprensione, un esempio di codice OOP, semplicemente consiglio un eventuale approfondimento tramite questa ottima <a href=\"http:\/\/programmazione.html.it\/guide\/leggi\/38\/guida-programmazione-orientata-agli-oggetti\/\" target=\"blank\">guida<\/a> pubblicata da Html.it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come abbiamo accennato con il primo articolo di questo sito, &#8220;Da dove cominciare?&#8220;, \u00e8 importante per chiunque&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[18,4,17],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-guide-teoriche","tag-oop","tag-programmazione","tag-teoria"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=203"}],"version-history":[{"count":29,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":4323,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/203\/revisions\/4323"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}