FondamentidiInformatica IntroduzioneallaProgrammazione Prof.ArcangeloCastiglione A.A.2016/17 IProgrammi– 1/2 • Negliultimiannil’Information&Communication Technology(ICT)è diventatounelementostrategicoperilbusiness,oltrecheuno strumentoessenzialeintutteleattivitàlavorativeesociali • Haacquisitounvaloreirrinunciabilepertutteleistituzionipubblichee private,perleimprese,masoprattuttopertuttinoi • Ilprogrammarappresental’elementodibaseperilmondodell’ICT IntroduzioneallaProgrammazione IProgrammi– 2/2 • Fannoormaipartediogninostraattività SistemiOperativi Virus,Troian,Malware Videogiochi ATM,semafori,ilmotorediricercaGoogle,sistemiperilsupportodel trasporto • Emoltoaltroancora… • • • • • Differisconosottovariaspetti • • • • • Obiettivi Funzionalità Algoritmi Risorse Etc IntroduzioneallaProgrammazione 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 Perchéimparareaprogrammare?– 2/7 • Imparareunnuovolinguaggiopermettedi • Usarenuoveformeespressive • Creareoggetticheinrealtàsembranonontangibili,macheinrealtàlosono • Losonoperchéinmolticasihannocambiatoilnostromododivivere, maancheperilloroimpattoeconomico IntroduzioneallaProgrammazione Perchéimparareaprogrammare?– 3/7 • Utilizzandoideecreativeecompetenzediprogrammazioneèpossibilecreare tecnologierivoluzionariestandocomodamentesedutialpropriocomputer • Laprogrammazioneconsenteallenostreideediprendereformaematerializzarsi • Disolitoiltuttonascedallanecessitàdirisolvereproblemiconcreti IntroduzioneallaProgrammazione 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 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 Perchéimparareaprogrammare?– 6/7 • Finoalfebbraio2005nonerapossibilecondividereerenderepubblici sullareteInternetiproprivideo • Perrisolverequestoproblema,3ragazzichelavoravanoaPaypal (Chad Hurley,SteveChen eJawed Karim)crearonoYouTube IntroduzioneallaProgrammazione Perchéimparareaprogrammare?– 7/7 • LarryPageeSergey Brin immaginaronounluogochepermettesseloro diaccedere,inmanierasempliceerapida,atutteleinformazioni presentisullareteInternet • PerfarequestohannocreatoGoogle,unpotentemotorediricercacheviene utilizzatodadiversimiliardidipersoneintuttoilmondo IntroduzioneallaProgrammazione Cos’èunProgramma– 1/2 • Definizione1: implementazionediunalgoritmoespressainun linguaggiodiprogrammazionespecifico • Definizione2: notazione(formaleenonambigua)concuièpossibile descrivereglialgoritmi Problema Modellazione delProblema Algoritmo IntroduzioneallaProgrammazione Programma 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 ChiCreaunProgramma? • Ilprogrammatore sioccupadi • Progettareunalgoritmoefficaceperlarisoluzionediunproblemadato • Tradurrequestoalgoritmoinistruzionieseguibilidauncomputermediante unlinguaggiodiprogrammazione IntroduzioneallaProgrammazione 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 ComevieneScrittounProgramma?– 2/8 • Programmare èun’operazionecreativa • Nonesisteunproblemaugualeaunaltroenonesistonosoluzioniuniversali • Programmatoridiversiscrivonoprogrammidiversiperrisolverelo stessoproblema • Lesoluzionipossonoessereugualmenteefficienti • Programmareèun’operazioneorganizzataperstep successivi • Ècompletamenteinefficienteunapproccio“diretto” • Scriveredirettamenteilprogrammadefinitivopartendodalproblema IntroduzioneallaProgrammazione 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 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 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 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 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 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 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 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 LinguaggidiProgrammazione– 2/2 IntroduzioneallaProgrammazione LinguaggidiProgrammazione: ElementiCostitutivi • Ognilinguaggiodiprogrammazione • Disponediuninsiemedi“parolechiave” • Keyword • Ècaratterizzatodaduecomponenti,complementaril’unaconl’altra • Sintassi: insiemedelleregolechespecificanocomecomporreistruzioni benformate • Semantica: specificailsignificatodiogniistruzionebenformata,valeadire lasuccessionedelleoperazionichevengonocompiutequandol’istruzione vieneeseguita IntroduzioneallaProgrammazione 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 LinguaggidiProgrammazione diPrimaGenerazione • Glielaboratoricomprendonoinmanieradirettasoloistruzioniin binario • Ciascunelaboratorehailpropriosetdiistruzioni • I primiprogrammieranofortementedipendentidallamacchina • Piùprecisamenteeranoscrittiinlinguaggiomacchina (ocodicemacchina) • Pro • Moltoefficienteperlemacchine • Contro • Difficiledaprogrammarepergliumani • Nonportabile • Ancoramotoutilizzatoperlaprogrammazione difunzioni abasso livello • Driver,interfacceversofirmwareehardware,etc IntroduzioneallaProgrammazione LinguaggioMacchina • Illinguaggiomacchinaèdirettamente eseguibile dall’elaboratore • Senzanessunatraduzione • Istruzioni edoperandi relativialprogrammainesecuzione sono caricatiinmemoria equindisonomemorizzatiinformabinaria • Vincolo: conoscenzadeimetodidirappresentazionedelleinformazioni utilizzati • Esempio • Istruzione:carica nelregistro • 10010000 11001100 IntroduzioneallaProgrammazione LinguaggidiProgrammazione diSecondaGenerazione– 1/2 • Unlinguaggioassembly (oassemblativo)utilizzacodicimnemoniciper rappresentareleistruzioni • Ilcodicepuòesserelettoescrittodaprogrammatoriumani • Maèancorafortementedipendentedallamacchina • Peressereeseguitodaunelaboratore,uncodiceassembly deveessere convertito (daunassemblatore),inunaformacomprensibiledalla macchina • Medianteunprocessochiamatoassemblaggio IntroduzioneallaProgrammazione LinguaggidiProgrammazione diSecondaGenerazione– 2/2 • Pro • Adattiadessereusatiinelaborazioniestremamenteintensive • Giochi,videoediting,manipolazionegrafica,rendering,etc • Contro • Necessitàdiconoscereindettagliolecaratteristichedellamacchina (registri,dimensionedeidati,setdiistruzioni,etc) • Anchesemplicialgoritmirichiedonomolteistruzioni IntroduzioneallaProgrammazione 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 LinguaggidiProgrammazione diTerzaGenerazione– 2/2 • Lemacchinecomprendonoedeseguonosoltantocodicimacchina • Ilprogrammaprimadiessereeseguitodeveesseretradottoin linguaggiomacchina • Traduttore • Latraduzionevieneeffettuatadauncompilatore,uninterprete,o unacombinazionedientrambi IntroduzioneallaProgrammazione Traduttore • Iltraduttoreèunprogrammacheconverte ilcodicediprogrammi scrittiinundatolinguaggiodiprogrammazione (sorgenti)nella corrispondenterappresentazioneinlinguaggiomacchina (eseguibili) Linguaggiodi altolivello Linguaggiomacchina Faciledacapire peril programmatore Illinguaggiodei computer Programma traduttore Contieneparole ininglese NumeriBinari IntroduzioneallaProgrammazione 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 TipidiTraduttore:Compilatore vs.Interprete– 1/2 • Compilatore • Accettainingressol’interoprogramma(istruzionichelo compongono)eproduceinuscitalarappresentazionedell’intero programmainlinguaggiomacchina • Interprete • Traduceedeseguedirettamenteciascunaistruzionedelprogramma sorgente • Istruzioneperistruzione • Unaallavolta IntroduzioneallaProgrammazione TipidiTraduttore:Compilatore vs.Interprete– 2/2 • Qualedelleduesoluzionièlamigliore? • Compilazione • Pro: applicazionipiùveloci • Contro: maggiorlavoronelprocessodimessaapuntoemanutenzione • Interpretazione • Pro: consentetempidisviluppopiùcontenuti • Contro: produceprogrammimenoefficienti IntroduzioneallaProgrammazione Compilatore IntroduzioneallaProgrammazione Interprete Datidell’interprete Unità Centraledi Elaborazione Programma interprete del linguaggio ad altolivello L ProgrammaP inun linguaggioadaltolivelloL DatidelprogrammaP Memoria Busdi sistema IntroduzioneallaProgrammazione CPUcomeInterpretedelsuo LinguaggioMacchina Unità CentralediElaborazione (CPU): interprete ed esecutore del linguaggio macchina L ProgrammaP inlinguaggio macchinaL DatidelprogrammaP Memoria Busdi sistema IntroduzioneallaProgrammazione ParadigmidiProgrammazione • Èpossibileaffrontareilproblemadelladescrizionedeiprogrammiin modidifferenti • Definizione: unparadigmadiprogrammazioneèunmodello concettualecheforniscela“struttura”diunprogramma • Perparadigmidiprogrammazionesiintendonoi“modi”incuivengono specificatiiprogrammi • Nonsitrattadeltipodilinguaggiousato,madelcontestopiùampioal qualeuncertolinguaggioappartiene • Comevieneorganizzatalaprogrammazione econqualicaratteristiche • Stile,livellodidettaglio,“formamentis”delprogrammatore,etc IntroduzioneallaProgrammazione 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 Riferimenti • Libroditesto • Capitolo4 • Paragrafi1,2e3 IntroduzioneallaProgrammazione