Prof. Arcangelo Castiglione A.A. 2016/17 - di-srv.unisa.itarccas/materiale/lezioni/Lezione_6.pdf ·...
Transcript of Prof. Arcangelo Castiglione A.A. 2016/17 - di-srv.unisa.itarccas/materiale/lezioni/Lezione_6.pdf ·...
IProgrammi– 1/2• Negliultimiannil’Information&Communication Technology(ICT)èdiventatounelementostrategicoperilbusiness,oltrecheunostrumentoessenzialeintutteleattivitàlavorativeesociali• Haacquisitounvaloreirrinunciabilepertutteleistituzionipubblicheeprivate,perleimprese,masoprattuttopertuttinoi
• Ilprogrammarappresental’elementodibaseperilmondodell’ICT
IntroduzioneallaProgrammazione
IProgrammi– 2/2• Fannoormaipartediogninostraattività• SistemiOperativi• Virus,Troian,Malware• Videogiochi• ATM,semafori,ilmotorediricercaGoogle,sistemiperilsupportodeltrasporto
• Emoltoaltroancora…
• Differisconosottovariaspetti• Obiettivi• Funzionalità• Algoritmi• Risorse• Etc
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 1/7• Automatizzareazionieprocessi• Risparmiaretempo• Risparmiarerisorse
• Imparareunnuovomododipensare(Computational Thinking)• Utilizzodell'informaticaedellacomputazioneperrisolvereproblemi
• Usarel’informaticainareeacuilepersonenonhannoancorapensato
• Programmarerichiedespessodifarfronteanuovesfide,quindiunprogrammatoreinconsciamenteacquisiràcapacitàdiproblem solving
• Questaabilitànonèsoloutilenellaprogrammazione,maèancheessenzialenellavitareale
• Aggiungereunanuovalingua(linguaggio)edun’importanteabilitàallenostrecompetenze
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 2/7• Imparareunnuovolinguaggiopermettedi• Usarenuoveformeespressive• Creareoggetticheinrealtàsembranonontangibili,macheinrealtàlosono
• Losonoperchéinmolticasihannocambiatoilnostromododivivere,maancheperilloroimpattoeconomico
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 3/7• Utilizzandoideecreativeecompetenzediprogrammazioneèpossibilecrearetecnologierivoluzionariestandocomodamentesedutialpropriocomputer• Laprogrammazioneconsenteallenostreideediprendereformaematerializzarsi• Disolitoiltuttonascedallanecessitàdirisolvereproblemiconcreti
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 4/7• IlCERN(Conseil européen pourlarecherche nucléaire),ilpiùgrandelaboratorioalmondodifisicadelleparticelle,avevanecessitàdistrumentisoftware(programmi)chepermettesseroladiffusionediinformazionifraisuoidiversicentridiricerca• Perrisolverequestoproblema,SirTimothyJohnBerners-LeesviluppòiprogrammicherappresentanolabaseconcettualeperilWorldWideWeb(WWW)
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 5/7• DuranteisuoianniuniversitariMarkZuckerberg nonriuscivaatrovareunmodoefficaceperraccogliereinformazionisuglialtristudentidellasuauniversità(Harvard)• PerrisolverequestoproblemahacreatoFacebook• Originariamenteprogettatoperglistudentidell’UniversitàdiHarvard,fuprestoapertoancheaglistudentidialtreuniversitàescuole
• “Facebook”prendespuntodaunelencoconnomeefotografiadeglistudenti,chealcuneuniversitàstatunitensidistribuisconoall'iniziodell'annoaccademicoperaiutaregliiscrittiasocializzaretraloro
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 6/7• Finoalfebbraio2005nonerapossibilecondividereerenderepubblicisullareteInternetiproprivideo• Perrisolverequestoproblema,3ragazzichelavoravanoaPaypal (ChadHurley,SteveChen eJawed Karim)crearonoYouTube
IntroduzioneallaProgrammazione
Perchéimparareaprogrammare?– 7/7• LarryPageeSergey Brin immaginaronounluogochepermettesselorodiaccedere,inmanierasempliceerapida,atutteleinformazionipresentisullareteInternet• PerfarequestohannocreatoGoogle,unpotentemotorediricercachevieneutilizzatodadiversimiliardidipersoneintuttoilmondo
IntroduzioneallaProgrammazione
Cos’èunProgramma– 1/2• Definizione1: implementazionediunalgoritmoespressainunlinguaggiodiprogrammazionespecifico
• Definizione2: notazione(formaleenonambigua)concuièpossibiledescrivereglialgoritmi
Problema ModellazionedelProblema Algoritmo Programma
IntroduzioneallaProgrammazione
Cos’èunProgramma– 2/2• Osservazione: “ilcalcolatoredevecapirequellocheglivienedettoedevesaperfareciò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• Tradurrequestoalgoritmoinistruzionieseguibilidauncomputermedianteunlinguaggiodiprogrammazione
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 1/8• Laprogrammazione consistenellascrittura diuntesto,dettoprogramma(ocodice)sorgente,chedescriveinterminidiistruzioninoteallamacchinalasoluzioneperundatoproblema• Esempio:ricercadelvalormassimoinunaseriedinumeri
• Ingeneralenonesisteunasolasoluzioneaduncertoproblema• Lesoluzionipotrebberoesserenumerose
• Laprogrammazioneconsisteneltrovarelastrada“migliore”checonduceallasoluzionedelproblemainoggetto1. Disolitosipartedaltrovareunaprimastrada,chenondeveessereper
forzalamigliore2. Successivamente,sicercanoeventualialtrestrademigliori
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 2/8• Programmare èun’operazionecreativa• Nonesisteunproblemaugualeaunaltroenonesistonosoluzioniuniversali
• Programmatoridiversiscrivonoprogrammidiversiperrisolverelostessoproblema• Lesoluzionipossonoessereugualmenteefficienti
• Programmareèun’operazioneorganizzataperstep successivi
• Ècompletamenteinefficienteunapproccio“diretto”• Scriveredirettamenteilprogrammadefinitivopartendodalproblema
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 3/8• Obiettivo: risolvereunproblema• Fasidelprocessodiprogrammazione
1. Modellazionedelproblema2. Ricercadellasoluzionemigliore(idea)3. Conversionedell’ideainunasoluzioneformale (algoritmo)4. Traduzionedell’algoritmoinunasequenzadiistruzioni
comprensibiliall’esecutore(inquestocasol’elaboratoreelettronico)• Programma
5. Valutazionedelprogrammaconuninsiemesignificativodidatipergarantirechefunzioneràinognioccasione(qualsiasisianoidatidiinput)
6. Opportunadocumentazionedelprogrammaabeneficiodichilouseràedeventualmentelomodificherà
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 4/8• Iprogrammi sonointesiperessereeseguitidaicomputer maancheperesserelettidallepersone• Chepossonoessereanchediversedaquellechehannoscrittoilprogramma
• Ènecessarioquindimigliorare ilpiùpossibilelaleggibilitàe lachiarezzadeiprogrammi• Ilcodice relativoadunprogramma presentaunastrutturagerarchica:leistruzioni possonoessereannidateall’internodialtre istruzioni• Quindibisognausarel’indentazione (rientro)inmodoopportuno
• Aggiungere commenti significativi (icommentisonoistruzioninoneseguitedall’elaboratore)• Primadiunadichiarazionedifunzione/proceduraspiegareacosaessaserveequalisonoisuoiparametri
• Dopoimportantidichiarazionidivariabili• Primaodopoistruzioniimportanti
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 5/8
INIZIOALGORITMOtrovaMax% La funzione A(1) restituisce il valore dell’elemento in posizione 1max = 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 iSe A(i) > max
max = A(i) % Istruzione eseguita se A(i) > maxIncrementa i
restituisci maxFINEALGORITMOtrovaMax
IntroduzioneallaProgrammazione
Comm
enti
ComevieneScrittounProgramma?– 5/8
IntroduzioneallaProgrammazione
INIZIOALGORITMOtrovaMaxmax = A(1) For i = 2 to 10 %Inizio ciclo a condizione iniziale
If A(i) > max %Inizio blocco di selezione semplicemax = A(i) %Unica istruzione appartenente al
blocco di selezione sempliceEndIf %Fine blocco di selezione sempliceIncrementa i
EndFor %Fine ciclo a condizione inizialerestituisci maxFINEALGORITMOtrovaMax
Istruzioniappartenentialbloccodelcicloacondizioneiniziale
Istruzioniappartenentialbloccoprincipaledell’algoritmotrovaMax
ComevieneScrittounProgramma?– 6/8• Alcunefunzionalitàrichiedonopocherighedicodice• Èbuonaprassiilraggruppare/mantenere questefunzionalitàall'internodiblocchiseparatidicodice• Ades.,raggruppandoilcodiceinfunzioni
• Consistent Naming Scheme• I nomidivariabiliefunzionidevonoaveredelimitatoridiparola.Sonodueleopzionipiùcomuni• camelCase: Primaletteradiogniparolaèinmaiuscolo(disolitotrannelaprimaparola)
• 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ùdifficiledaleggereeseguire
• Evitare discrivere inorizzontale lungherighe dicodice
IntroduzioneallaProgrammazione
ComevieneScrittounProgramma?– 8/8• Usarenomisignificativiecoerentiperlevariabili• Levariabili devonoesseredescrittive• Usarenomicoerentiperlevariabilichehannolostessotipodiruolo
• Refactoring delcodice• Quandosifa“refactoring”,siapportanomodifichealcodicesenzacambiarenessunadellesuefunzionalità
• Nonincludecorrezionidierrori
• Sipuòpensareal“refactoring”comeadun’operazionedipulizia,fattaalloscopodimigliorarelaleggibilitàelaqualitàdelcodice,soprattuttoinchiavefutura
• Èpossibilemigliorarelaleggibilitàdelcodiceduranteilprocessodirefactoring utilizzandoiconcettivistipoc’anzi
IntroduzioneallaProgrammazione
LinguaggidiProgrammazione– 1/2• Definizione: unlinguaggiodiprogrammazioneèunlinguaggioartificiale percomunicareconlemacchine
• Piùprecisamente,ilinguaggidiprogrammazionesonodisolitousatiper• Esprimerealgoritmi• Controllareilcomportamentodellemacchine
• Quantisonoilinguaggidiprogrammazionepresentialmondo?• Piùdi1000• Ipiùdiffusisonoelencatiqui:http://www.tiobe.com/tiobe-index/
• Sinoticheognilinguaggiodiprogrammazionehaavutooriginedamotivazionispecifiche
IntroduzioneallaProgrammazione
LinguaggidiProgrammazione:ElementiCostitutivi• Ognilinguaggiodiprogrammazione• Disponediuninsiemedi“parolechiave”• Keyword• Ècaratterizzatodaduecomponenti,complementaril’unaconl’altra• Sintassi: insiemedelleregolechespecificanocomecomporreistruzionibenformate
• Semantica: specificailsignificatodiogniistruzionebenformata,valeadirelasuccessionedelleoperazionichevengonocompiutequandol’istruzionevieneeseguita
IntroduzioneallaProgrammazione
LinguaggidiProgrammazione:Classificazione
• Linguaggidialtolivello(viciniall’utente)• Vgenerazione: linguaggididescrizionedeiproblemiorientatiallarisoluzioneautomatica
• IVgenerazione: linguaggiperspecificiambitiapplicativi(ades.MATLAB)• IIIgenerazione: linguaggiimperativieproceduralidiusogenerale
• Linguaggidibassolivello (viciniall’hardware)• IIgenerazione: linguaggiassemblativi(usodicodicimnemoniciperleistruzioni)
• Igenerazione: linguaggimacchina(sequenzedibit)
Utente
Hardware
IntroduzioneallaProgrammazione
LinguaggidiProgrammazionediPrimaGenerazione• Glielaboratoricomprendonoinmanieradirettasoloistruzioniinbinario• Ciascunelaboratorehailpropriosetdiistruzioni
• I primiprogrammieranofortementedipendentidallamacchina• Piùprecisamenteeranoscrittiinlinguaggiomacchina (ocodicemacchina)
• Pro• Moltoefficienteperlemacchine
• Contro• Difficiledaprogrammarepergliumani• Nonportabile
• Ancoramotoutilizzatoperlaprogrammazione difunzioni abassolivello• Driver,interfacceversofirmwareehardware,etc
IntroduzioneallaProgrammazione
LinguaggioMacchina• Illinguaggiomacchinaèdirettamente eseguibile dall’elaboratore• Senzanessunatraduzione
• Istruzioni edoperandi relativialprogrammainesecuzione sonocaricatiinmemoria equindisonomemorizzatiinformabinaria
• Vincolo: conoscenzadeimetodidirappresentazionedelleinformazioniutilizzati
• Esempio• Istruzione:carica nelregistro• 10010000 11001100
IntroduzioneallaProgrammazione
LinguaggidiProgrammazionediSecondaGenerazione– 1/2• Unlinguaggioassembly (oassemblativo)utilizzacodicimnemoniciperrappresentareleistruzioni• Ilcodicepuòesserelettoescrittodaprogrammatoriumani• Maèancorafortementedipendentedallamacchina
• Peressereeseguitodaunelaboratore,uncodiceassembly deveessereconvertito (daunassemblatore),inunaformacomprensibiledallamacchina• Medianteunprocessochiamatoassemblaggio
IntroduzioneallaProgrammazione
LinguaggidiProgrammazionediSecondaGenerazione– 2/2• Pro• Adattiadessereusatiinelaborazioniestremamenteintensive• Giochi,videoediting,manipolazionegrafica,rendering,etc
• Contro• Necessitàdiconoscereindettagliolecaratteristichedellamacchina(registri,dimensionedeidati,setdiistruzioni,etc)• Anchesemplicialgoritmirichiedonomolteistruzioni
IntroduzioneallaProgrammazione
LinguaggidiProgrammazionediTerzaGenerazione– 1/2• Ilinguaggidiprogrammazionedialtolivello usanoparole English-like,notazionematematica epunteggiatura perscrivereprogrammi• Sonopiùviciniailinguaggiumani• Ilprogrammatorepuòastrarredaidettaglilegatiall’architetturaedesprimereiproprialgoritmiinmodosemplice
• Leistruzioniesprimonounaseriediazioni
• Pro• Portabili,indipendentidallamacchina• Human-friendly
• Contro• Nonsempresonomoltoefficienti
IntroduzioneallaProgrammazione
LinguaggidiProgrammazionediTerzaGenerazione– 2/2
• Lemacchinecomprendonoedeseguonosoltantocodicimacchina
• Ilprogrammaprimadiessereeseguitodeveesseretradottoinlinguaggiomacchina
• Traduttore
• Latraduzionevieneeffettuatadauncompilatore,uninterprete,ounacombinazionedientrambi
IntroduzioneallaProgrammazione
Traduttore• Iltraduttoreèunprogrammacheconverte ilcodicediprogrammiscrittiinundatolinguaggiodiprogrammazione (sorgenti)nellacorrispondenterappresentazioneinlinguaggiomacchina (eseguibili)
IntroduzioneallaProgrammazione
Faciledacapireperil
programmatore
Contieneparoleininglese
Programmatraduttore
Illinguaggiodeicomputer
NumeriBinari
Linguaggiodialtolivello
Linguaggiomacchina
Assemblatorevs.Traduttore
Programma inlinguaggio diprogrammazione (Codicesorgente)
Programma inlinguaggiomacchina (Codice oggetto)
Traduttore
Programma inlinguaggioassemblativo (Codice sorgente)
Programma inlinguaggiomacchina (Codice oggetto)
Assemblatore
IntroduzioneallaProgrammazione
TipidiTraduttore:Compilatorevs.Interprete– 1/2• Compilatore• Accettainingressol’interoprogramma(istruzionichelocompongono)eproduceinuscitalarappresentazionedell’interoprogrammainlinguaggiomacchina
• Interprete• Traduceedeseguedirettamenteciascunaistruzionedelprogrammasorgente• Istruzioneperistruzione• Unaallavolta
IntroduzioneallaProgrammazione
TipidiTraduttore:Compilatorevs.Interprete– 2/2• Qualedelleduesoluzionièlamigliore?• Compilazione• Pro: applicazionipiùveloci• Contro:maggiorlavoronelprocessodimessaapuntoemanutenzione• Interpretazione• Pro: consentetempidisviluppopiùcontenuti• Contro: produceprogrammimenoefficienti
IntroduzioneallaProgrammazione
Interprete
Unità CentralediElaborazione Memoria
Busdisistema
ProgrammaP inunlinguaggioadaltolivelloLDatidelprogrammaP
Programmainterprete dellinguaggio adaltolivello L
Datidell’interprete
IntroduzioneallaProgrammazione
CPUcomeInterpretedelsuoLinguaggioMacchina
Unità CentralediElaborazione(CPU): interprete ed esecutore dellinguaggio macchina L
Memoria
Busdisistema
ProgrammaP inlinguaggiomacchinaL
DatidelprogrammaP
IntroduzioneallaProgrammazione
ParadigmidiProgrammazione• Èpossibileaffrontareilproblemadelladescrizionedeiprogrammiinmodidifferenti
• Definizione: unparadigmadiprogrammazioneèunmodelloconcettualecheforniscela“struttura”diunprogramma
• Perparadigmidiprogrammazionesiintendonoi“modi”incuivengonospecificatiiprogrammi
• Nonsitrattadeltipodilinguaggiousato,madelcontestopiùampioalqualeuncertolinguaggioappartiene• Comevieneorganizzatalaprogrammazione econqualicaratteristiche• Stile,livellodidettaglio,“formamentis”delprogrammatore,etc
IntroduzioneallaProgrammazione
Riassumendo• Algoritmo: descrizionedicomesirisolveunproblema
• Programma: algoritmoscrittoinmodochepossaessereeseguitodauncalcolatore(linguaggiodiprogrammazione)
• Linguaggiomacchina: linguaggioeffettivamente“compreso”dauncalcolatore,caratterizzatoda• Istruzioniprimitivesemplici (ades.max 2operandi)• Attenzioneall’efficienza (costi,complessità,velocità)• Difficileenoiosodautilizzareperunprogrammatore
• Dueaspettirilevanti• Produrrealgoritmi: capirelasequenzadipassicheportanoallasoluzionediunproblema
• Codificarliinprogrammi: renderlicomprensibilialcalcolatore
IntroduzioneallaProgrammazione