FondamentidiInformatica IntroduzioneallaProgrammazione P ro f. C h r i st i a n E s p o s i to C o rs o d i L a u re a i n I n g e g n e r i a M e c ca n i ca e G e st i o n a l e ( C l a s s e I ) A.A.2016/17 IntroduzioneallaProgrammazione IProgrammi– 1/2 • Negliultimiannil’Information&Communication Technology(ICT)è diventatounelementostrategicoperilbusiness,oltrecheuno strumentoessenzialeintutteleattivitàlavorativeesociali • Haacquisitounvaloreirrinunciabilepertutteleistituzionipubblichee private,perleimprese,masoprattuttopertuttinoi • Ilprogrammarappresental’elementodibaseperilmondodell’ICT IntroduzioneallaProgrammazione 02/46 IProgrammi– 2/2 • Fannoormaipartediogninostraattività SistemiOperativi Virus,Troian,Malware Videogiochi ATM,semafori,ilmotorediricercaGoogle,sistemiperilsupportodel trasporto • Emoltoaltroancora… • • • • • Differisconosottovariaspetti • • • • • Obiettivi Funzionalità Algoritmi Risorse Etc IntroduzioneallaProgrammazione 02/46 Perchéimparareaprogrammare?– 1/7 • Automatizzareazionieprocessi • Risparmiaretempo • Risparmiarerisorse • Imparareunnuovomododipensare(Computational Thinking) • Utilizzodell'informaticaedellacomputazioneperrisolvereproblemi • Usarel’informaticainareeacuilepersonenonhannoancorapensato • Programmarerichiedespessodifarfronteanuovesfide,quindiun programmatoreinconsciamenteacquisiràcapacitàdiproblem solving • Questaabilitànonèsoloutilenellaprogrammazione,maèancheessenziale nellavitareale • Aggiungereunanuovalingua(linguaggio)edun’importanteabilitàalle nostrecompetenze IntroduzioneallaProgrammazione 03/46 Perchéimparareaprogrammare?– 2/7 • Imparareunnuovolinguaggiopermettedi • Usarenuoveformeespressive • Creareoggetticheinrealtàsembranonontangibili,macheinrealtàlosono • Losonoperchéinmolticasihannocambiatoilnostromododivivere, maancheperilloroimpattoeconomico IntroduzioneallaProgrammazione 04/46 Perchéimparareaprogrammare?– 3/7 • Utilizzandoideecreativeecompetenzediprogrammazioneèpossibilecreare tecnologierivoluzionariestandocomodamentesedutialpropriocomputer • Laprogrammazioneconsenteallenostreideediprendereformaematerializzarsi • Disolitoiltuttonascedallanecessitàdirisolvereproblemiconcreti IntroduzioneallaProgrammazione 05/46 Perchéimparareaprogrammare?– 4/7 • IlCERN(Conseil européen pourlarecherche nucléaire),ilpiùgrande laboratorioalmondodifisicadelleparticelle,avevanecessitàdi strumentisoftware(programmi)chepermettesseroladiffusionedi informazionifraisuoidiversicentridiricerca • Perrisolverequestoproblema,SirTimothyJohnBerners-Leesviluppòi programmicherappresentanolabaseconcettualeperilWorldWideWeb (WWW) IntroduzioneallaProgrammazione 06/46 Perchéimparareaprogrammare?– 5/7 • DuranteisuoianniuniversitariMarkZuckerberg nonriuscivaatrovare unmodoefficaceperraccogliereinformazionisuglialtristudentidella suauniversità(Harvard) • PerrisolverequestoproblemahacreatoFacebook • Originariamenteprogettatoperglistudentidell’UniversitàdiHarvard,fu prestoapertoancheaglistudentidialtreuniversitàescuole • “Facebook”prendespuntodaunelencoconnomeefotografiadegli studenti,chealcuneuniversitàstatunitensidistribuisconoall'iniziodell'anno accademicoperaiutaregliiscrittiasocializzaretraloro IntroduzioneallaProgrammazione 07/46 Perchéimparareaprogrammare?– 6/7 • Finoalfebbraio2005nonerapossibilecondividereerenderepubblici sullareteInternetiproprivideo • Perrisolverequestoproblema,3ragazzichelavoravanoaPaypal (Chad Hurley,SteveChen eJawed Karim)crearonoYouTube IntroduzioneallaProgrammazione 08/46 Perchéimparareaprogrammare?– 7/7 • LarryPageeSergey Brin immaginaronounluogochepermettesseloro diaccedere,inmanierasempliceerapida,atutteleinformazioni presentisullareteInternet • PerfarequestohannocreatoGoogle,unpotentemotorediricercacheviene utilizzatodadiversimiliardidipersoneintuttoilmondo IntroduzioneallaProgrammazione 09/46 Cos’èunProgramma– 1/2 • Definizione1: implementazionediunalgoritmoespressainun linguaggiodiprogrammazionespecifico • Definizione2: notazione(formaleenonambigua)concuièpossibile descrivereglialgoritmi Problema Modellazione delProblema Algoritmo IntroduzioneallaProgrammazione Programma 10/46 Cos’èunProgramma– 2/2 • Osservazione: “ilcalcolatoredevecapirequellocheglivienedettoe devesaperfareciòcheglivienechiesto” • Risolvereproblemicomplessimedianteazionielementari • Leistruzioni corrispondonoadazionielementari • Somma,differenza,prodotto,divisione(epocopiù) • Istruzioni edati sononumeribinari • Problemiconnessi • Interagireconlamacchinamedianteunlinguaggiopiùvicinoagliumani • Soluzione • Linguaggidialtolivello(MATLABedaltri) • Traduttori/Compilatori/Interpreti IntroduzioneallaProgrammazione 11/46 ChiCreaunProgramma? • Ilprogrammatore sioccupadi • Progettareunalgoritmoefficaceperlarisoluzionediunproblemadato • Tradurrequestoalgoritmoinistruzionieseguibilidauncomputermediante unlinguaggiodiprogrammazione IntroduzioneallaProgrammazione 12/46 ComevieneScrittounProgramma?– 1/8 • Laprogrammazione consistenellascrittura diuntesto,detto programma(ocodice)sorgente,chedescriveinterminidiistruzioni noteallamacchinalasoluzioneperundatoproblema • Esempio:ricercadelvalormassimoinunaseriedinumeri • Ingeneralenonesisteunasolasoluzioneaduncertoproblema • Lesoluzionipotrebberoesserenumerose • Laprogrammazioneconsisteneltrovarelastrada“migliore”che conduceallasoluzionedelproblemainoggetto 1. Disolitosipartedaltrovareunaprimastrada,chenondeveessereper forzalamigliore 2. Successivamente,sicercanoeventualialtrestrademigliori IntroduzioneallaProgrammazione 13/46 ComevieneScrittounProgramma?– 2/8 • Programmare èun’operazionecreativa • Nonesisteunproblemaugualeaunaltroenonesistonosoluzioniuniversali • Programmatoridiversiscrivonoprogrammidiversiperrisolverelo stessoproblema • Lesoluzionipossonoessereugualmenteefficienti • Programmareèun’operazioneorganizzataperstep successivi • Ècompletamenteinefficienteunapproccio“diretto” • Scriveredirettamenteilprogrammadefinitivopartendodalproblema IntroduzioneallaProgrammazione 14/46 ComevieneScrittounProgramma?– 3/8 • Obiettivo: risolvereunproblema • Fasidelprocessodiprogrammazione 1. 2. 3. 4. Modellazionedelproblema Ricercadellasoluzionemigliore(idea) Conversionedell’ideainunasoluzioneformale (algoritmo) Traduzionedell’algoritmoinunasequenzadiistruzioni comprensibiliall’esecutore(inquestocasol’elaboratore elettronico) • Programma 5. 6. Valutazionedelprogrammaconuninsiemesignificativodidati pergarantirechefunzioneràinognioccasione(qualsiasisianoi datidiinput) Opportunadocumentazionedelprogrammaabeneficiodichilo useràedeventualmentelomodificherà IntroduzioneallaProgrammazione 15/46 ComevieneScrittounProgramma?– 4/8 • Iprogrammi sonointesiperessereeseguitidaicomputer maancheper esserelettidallepersone • Chepossonoessereanchediversedaquellechehannoscrittoilprogramma • Ènecessarioquindimigliorare ilpiùpossibilelaleggibilitàe lachiarezza deiprogrammi • Ilcodice relativoadunprogramma presentaunastrutturagerarchica:le istruzioni possonoessereannidateall’internodialtre istruzioni • Quindibisognausarel’indentazione (rientro)inmodoopportuno • Aggiungere commenti significativi (icommentisonoistruzioninoneseguite dall’elaboratore) • Primadiunadichiarazionedifunzione/proceduraspiegareacosaessaserveequali sonoisuoiparametri • Dopoimportantidichiarazionidivariabili • Primaodopoistruzioniimportanti IntroduzioneallaProgrammazione 16/46 ComevieneScrittounProgramma?– 5/8 IntroduzioneallaProgrammazione Commenti INIZIOALGORITMOtrovaMax % La funzione A(1) restituisce il valore dell’elemento in posizione 1 max = A(1) % La variabile max memorizza il massimo valore corrente in A Per i che va da 2 a 10 %La funzione A(i) restituisce il valore dell’elemento in posizione i Se A(i) > max max = A(i) % Istruzione eseguita se A(i) > max Incrementa i restituisci max FINEALGORITMOtrovaMax 17/46 ComevieneScrittounProgramma?– 5/8 Istruzioni appartenential bloccodelciclo acondizione iniziale INIZIOALGORITMOtrovaMax max = A(1) For i = 2 to 10 %Inizio ciclo a condizione iniziale If A(i) > max %Inizio blocco di selezione semplice max = A(i) %Unica istruzione appartenente al blocco di selezione semplice EndIf %Fine blocco di selezione semplice Incrementa i EndFor %Fine ciclo a condizione iniziale restituisci max FINEALGORITMOtrovaMax IntroduzioneallaProgrammazione Istruzioni appartenential bloccoprincipale dell’algoritmo trovaMax 18/46 ComevieneScrittounProgramma?– 6/8 • Alcunefunzionalitàrichiedonopocherighedicodice • Èbuonaprassiilraggruppare/mantenere questefunzionalità all'internodiblocchiseparatidicodice • Ades.,raggruppandoilcodiceinfunzioni • Consistent Naming Scheme • I nomidivariabiliefunzionidevonoaveredelimitatoridiparola.Sono dueleopzionipiùcomuni • camelCase: Primaletteradiogniparolaèinmaiuscolo(disolitotrannela primaparola) • underscore: Underscoretraleparole(_),comeadesempio: trova_max_nella_lista(A) • Ledueopzionipossonoancheesserecombinate IntroduzioneallaProgrammazione 19/46 ComevieneScrittounProgramma?– 7/8 • PrincipiodelDon’t Repeat Yourself • Loscopo perlamaggiorpartedeiprogrammi (edeicomputeringenerale)è quellodiautomatizzare leoperazioniripetitive • Questoprincipiodovrebbeesseremantenutointuttoilcodice • Lostessopezzodicodicenondeveessereripetuto • Evitaretroppilivellidiannidamento/indentazione • Troppilivellidiindentazione possonorendereilcodice piùdifficiledaleggere eseguire • Evitare discrivere inorizzontale lungherighe dicodice IntroduzioneallaProgrammazione 20/46 ComevieneScrittounProgramma?– 8/8 • Usarenomisignificativiecoerentiperlevariabili • Levariabili devonoesseredescrittive • Usarenomicoerentiperlevariabilichehannolostessotipodiruolo • Refactoring delcodice • Quandosifa“refactoring”,siapportanomodifichealcodicesenzacambiare nessunadellesuefunzionalità • Nonincludecorrezionidierrori • Sipuòpensareal“refactoring”comeadun’operazionedipulizia,fattaallo scopodimigliorarelaleggibilitàelaqualitàdelcodice,soprattuttoinchiave futura • Èpossibilemigliorarelaleggibilitàdelcodiceduranteilprocessodi refactoring utilizzandoiconcettivistipoc’anzi IntroduzioneallaProgrammazione 21/46 LinguaggidiProgrammazione– 1/2 • Definizione: unlinguaggiodiprogrammazioneèunlinguaggio artificiale percomunicareconlemacchine • Piùprecisamente,ilinguaggidiprogrammazionesonodisolitousati per • Esprimerealgoritmi • Controllareilcomportamentodellemacchine • Quantisonoilinguaggidiprogrammazionepresentialmondo? • Piùdi1000 • Ipiùdiffusisonoelencatiqui:http://www.tiobe.com/tiobe-index/ • Sinoticheognilinguaggiodiprogrammazionehaavutoorigineda motivazionispecifiche IntroduzioneallaProgrammazione 22/46 LinguaggidiProgrammazione– 2/2 IntroduzioneallaProgrammazione 23/46 LinguaggidiProgrammazione: ElementiCostitutivi • Ognilinguaggiodiprogrammazione • Disponediuninsiemedi“parolechiave” • Keyword • Ècaratterizzatodaduecomponenti,complementaril’unaconl’altra • Sintassi: insiemedelleregolechespecificanocomecomporreistruzioni benformate • Semantica: specificailsignificatodiogniistruzionebenformata,valeadire lasuccessionedelleoperazionichevengonocompiutequandol’istruzione vieneeseguita IntroduzioneallaProgrammazione 24/46 LinguaggidiProgrammazione: Classificazione Utente • Linguaggidialtolivello(viciniall’utente) • Vgenerazione: linguaggididescrizionedeiproblemiorientatiallarisoluzione automatica • IVgenerazione: linguaggiperspecificiambitiapplicativi(ades.MATLAB) • IIIgenerazione: linguaggiimperativieproceduralidiusogenerale • Linguaggidibassolivello (viciniall’hardware) • IIgenerazione: linguaggiassemblativi(usodicodicimnemoniciperle istruzioni) • Igenerazione: linguaggimacchina(sequenzedibit) Hardware IntroduzioneallaProgrammazione 25/46 LinguaggidiProgrammazione diPrimaGenerazione • Glielaboratoricomprendonoinmanieradirettasoloistruzioniin binario • Ciascunelaboratorehailpropriosetdiistruzioni • I primiprogrammieranofortementedipendentidallamacchina • Piùprecisamenteeranoscrittiinlinguaggiomacchina (ocodicemacchina) • Pro • Moltoefficienteperlemacchine • Contro • Difficiledaprogrammarepergliumani • Nonportabile • Ancoramotoutilizzatoperlaprogrammazione difunzioni abasso livello • Driver,interfacceversofirmwareehardware,etc IntroduzioneallaProgrammazione 26/46 LinguaggioMacchina • Illinguaggiomacchinaèdirettamente eseguibile dall’elaboratore • Senzanessunatraduzione • Istruzioni edoperandi relativialprogrammainesecuzione sono caricatiinmemoria equindisonomemorizzatiinformabinaria • Vincolo: conoscenzadeimetodidirappresentazionedelleinformazioni utilizzati • Esempio • Istruzione:carica nelregistro • 10010000 11001100 IntroduzioneallaProgrammazione 27/46 LinguaggidiProgrammazione diSecondaGenerazione– 1/2 • Unlinguaggioassembly (oassemblativo)utilizzacodicimnemoniciper rappresentareleistruzioni • Ilcodicepuòesserelettoescrittodaprogrammatoriumani • Maèancorafortementedipendentedallamacchina • Peressereeseguitodaunelaboratore,uncodiceassembly deveessere convertito (daunassemblatore),inunaformacomprensibiledalla macchina • Medianteunprocessochiamatoassemblaggio IntroduzioneallaProgrammazione 28/46 LinguaggidiProgrammazione diSecondaGenerazione– 2/2 • Pro • Adattiadessereusatiinelaborazioniestremamenteintensive • Giochi,videoediting,manipolazionegrafica,rendering,etc • Contro • Necessitàdiconoscereindettagliolecaratteristichedellamacchina (registri,dimensionedeidati,setdiistruzioni,etc) • Anchesemplicialgoritmirichiedonomolteistruzioni IntroduzioneallaProgrammazione 29/46 LinguaggidiProgrammazione diTerzaGenerazione– 1/2 • Ilinguaggidiprogrammazionedialtolivello usanoparole English-like, notazionematematica epunteggiatura perscrivereprogrammi • Sonopiùviciniailinguaggiumani • Ilprogrammatorepuòastrarredaidettaglilegatiall’architetturaedesprimere iproprialgoritmiinmodosemplice • Leistruzioniesprimonounaseriediazioni • Pro • Portabili,indipendentidallamacchina • Human-friendly • Contro • Nonsempresonomoltoefficienti IntroduzioneallaProgrammazione 30/46 LinguaggidiProgrammazione diTerzaGenerazione– 2/2 • Lemacchinecomprendonoedeseguonosoltantocodicimacchina • Ilprogrammaprimadiessereeseguitodeveesseretradottoin linguaggiomacchina • Traduttore • Latraduzionevieneeffettuatadauncompilatore,uninterprete,o unacombinazionedientrambi IntroduzioneallaProgrammazione 31/46 Traduttore • Iltraduttoreèunprogrammacheconverte ilcodicediprogrammi scrittiinundatolinguaggiodiprogrammazione (sorgenti)nella corrispondenterappresentazioneinlinguaggiomacchina (eseguibili) Linguaggiodi altolivello Faciledacapire peril programmatore Linguaggiomacchina Illinguaggiodei computer Programma traduttore Contieneparole ininglese NumeriBinari IntroduzioneallaProgrammazione 32/46 Assemblatorevs.Traduttore Programma inlinguaggio di programmazione (Codice sorgente) Traduttore Assemblatore Programma inlinguaggio assemblativo (Codice sorgente) Programma inlinguaggio macchina (Codice oggetto) Programma inlinguaggio macchina (Codice oggetto) IntroduzioneallaProgrammazione 33/46 TipidiTraduttore:Compilatore vs.Interprete– 1/2 • Compilatore • Accettainingressol’interoprogramma(istruzionichelo compongono)eproduceinuscitalarappresentazionedell’intero programmainlinguaggiomacchina • Interprete • Traduceedeseguedirettamenteciascunaistruzionedelprogramma sorgente • Istruzioneperistruzione • Unaallavolta IntroduzioneallaProgrammazione 34/46 TipidiTraduttore:Compilatore vs.Interprete– 2/2 • Qualedelleduesoluzionièlamigliore? • Compilazione • Pro: applicazionipiùveloci • Contro: maggiorlavoronelprocessodimessaapuntoemanutenzione • Interpretazione • Pro: consentetempidisviluppopiùcontenuti • Contro: produceprogrammimenoefficienti IntroduzioneallaProgrammazione 35/46 Compilatore IntroduzioneallaProgrammazione 36/46 Interprete Datidell’interprete Unità Centraledi Elaborazione Programma interprete del linguaggio ad altolivello L ProgrammaP inun linguaggioadaltolivelloL DatidelprogrammaP Memoria Busdi sistema IntroduzioneallaProgrammazione 37/46 CPUcomeInterpretedelsuo LinguaggioMacchina Unità CentralediElaborazione (CPU): interprete ed esecutore del linguaggio macchina L ProgrammaP inlinguaggio macchinaL DatidelprogrammaP Memoria Busdi sistema IntroduzioneallaProgrammazione 38/46 ParadigmidiProgrammazione – 1/2 • Èpossibileaffrontareilproblemadelladescrizionedeiprogrammiin modidifferenti • Definizione: unparadigmadiprogrammazioneèunmodello concettualecheforniscela“struttura”diunprogramma • Perparadigmidiprogrammazionesiintendonoi“modi”incuivengono specificatiiprogrammi • Nonsitrattadeltipodilinguaggiousato,madelcontestopiùampioal qualeuncertolinguaggioappartiene • Comevieneorganizzatalaprogrammazione econqualicaratteristiche • Stile,livellodidettaglio,“formamentis”delprogrammatore,etc IntroduzioneallaProgrammazione 39/46 ParadigmidiProgrammazione – 2/2 • Soluzionidifferenti costituisconoparadigmidiprogrammazione differenti • Iparadigmi piùcomuni sono • Imperativo/Procedurale • AdOggetti • Funzionale IntroduzioneallaProgrammazione 40/46 Programmazione Imperativa/Procedurale • Iprogrammisonosequenzedicomandicheagisconosuidatio sull’ordinediesecuzionedelleistruzioni • Ilprogrammatoredevedefiniretuttelestrutturedatietuttigli algoritmicheoperanosudiesse • Chiamateasottoprogrammigestitecompletamentedal programmatore • Anchesenonsempre • Costruttitipici: assegnamento,cicli,if-then-else,procedurecon passaggiodiparametri,etc • Esempi: Assembly,FORTRAN,C,COBOL,Pascal,etc IntroduzioneallaProgrammazione 41/46 ProgrammazioneadOggetti • Iprogrammidefinisconodelleastrazioni(classi)dielementidel dominiodiapplicazionedelprogramma • Leclassicontengonoinformazionisuidatimaancheilcodiceper gestirli • Ingenereditipoimperativo • Esempi: C++,Java,etc IntroduzioneallaProgrammazione 42/46 ProgrammazioneFunzionale– 1/2 • Ilprogrammaèunadefinizionedifunzioninelsensopiùmatematico deltermine • Approcciodichiarativo: ilprogrammaèunadefinizionedifunzione,il “calcolo”èbuilt-in • Ordinesuperiore: gliargomentidellefunzionidefinitepossonoessere siavaloriditipiprimitivichealtrefunzioni • L’interpretesioccupadivalutare,inbaseallefunzionidibaseeaquelle definite,unaqualsiasiespressionebenformata • L’algoritmodivalutazionenonèscrittodalprogrammatore,mavariaa secondadellinguaggio IntroduzioneallaProgrammazione 43/46 ProgrammazioneFunzionale– 2/2 • Ilinguaggifunzionalipossonoessereusaticomemetalinguaggi per definirealtrilinguaggi • Lemoderneimplementazionisonopiuttostoefficienti • Esempi: Miranda,Haskell,LISP,etc IntroduzioneallaProgrammazione 44/46 Riassumendo • Algoritmo: descrizionedicomesirisolveunproblema • Programma: algoritmoscrittoinmodochepossaessereeseguitodaun calcolatore(linguaggiodiprogrammazione) • Linguaggiomacchina: linguaggioeffettivamente“compreso”daun calcolatore,caratterizzatoda • Istruzioniprimitivesemplici (ades.max 2operandi) • Attenzioneall’efficienza (costi,complessità,velocità) • Difficileenoiosodautilizzareperunprogrammatore • Dueaspettirilevanti • Produrrealgoritmi: capirelasequenzadipassicheportanoallasoluzionedi unproblema • Codificarliinprogrammi: renderlicomprensibilialcalcolatore IntroduzioneallaProgrammazione 45/46 Riferimenti • Libroditesto • Capitolo4 • Paragrafi1,2e3 IntroduzioneallaProgrammazione 46/46