Prof. Arcangelo Castiglione A.A. 2016/17 - di-srv.unisa.itarccas/materiale/lezioni/Lezione_6.pdf ·...

42
Fondamenti di Informatica Introduzione alla Programmazione Prof. Arcangelo Castiglione A.A. 2016/17

Transcript of Prof. Arcangelo Castiglione A.A. 2016/17 - di-srv.unisa.itarccas/materiale/lezioni/Lezione_6.pdf ·...

FondamentidiInformaticaIntroduzioneallaProgrammazione

Prof. ArcangeloCastigl ioneA.A.2016/17

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– 2/2

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

Compilatore

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

Riferimenti• Libroditesto• Capitolo4• Paragrafi1,2e3

IntroduzioneallaProgrammazione