Post on 16-Jun-2020
FondamentidiInformaticaIntroduzioneal laProgrammazione
Prof. Chr i st ian Espos i toCorso d i Laurea in Ingegner ia Meccanica e Gest iona le (C lasse I )A .A . 2017/18
IntroduzioneallaProgrammazione
IProgrammi– 1/2• Negliultimiannil’Information&Communication Technology(ICT)èdiventatounelementostrategicoperilbusiness,oltrecheunostrumentoessenzialeintutteleattivitàlavorativeesociali• Haacquisitounvaloreirrinunciabilepertutteleistituzionipubblicheeprivate,perleimprese,masoprattuttopertuttinoi
• Ilprogrammarappresental’elementodibaseperilmondodell’ICT
IntroduzioneallaProgrammazione 01/46
IProgrammi– 2/2• Fannoormaipartediogninostraattività• SistemiOperativi• Virus,Troian,Malware• Videogiochi• ATM,semafori,ilmotorediricercaGoogle,sistemiperilsupportodeltrasporto
• 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,quindiunprogrammatoreinconsciamenteacquisiràcapacitàdiproblem solving
• Questaabilitànonèsoloutilenellaprogrammazione,maèancheessenzialenellavitareale
• Aggiungereunanuovalingua(linguaggio)edun’importanteabilitàallenostrecompetenze
IntroduzioneallaProgrammazione 03/46
Perchéimparareaprogrammare?– 2/7• Imparareunnuovolinguaggiopermettedi• Usarenuoveformeespressive• Creareoggetticheinrealtàsembranonontangibili,macheinrealtàlosono
• Losonoperchéinmolticasihannocambiatoilnostromododivivere,maancheperilloroimpattoeconomico
IntroduzioneallaProgrammazione 04/46
Perchéimparareaprogrammare?– 3/7• Utilizzandoideecreativeecompetenzediprogrammazioneèpossibilecrearetecnologierivoluzionariestandocomodamentesedutialpropriocomputer• Laprogrammazioneconsenteallenostreideediprendereformaematerializzarsi• Disolitoiltuttonascedallanecessitàdirisolvereproblemiconcreti
IntroduzioneallaProgrammazione 05/46
Perchéimparareaprogrammare?– 4/7• IlCERN(Conseil européen pourlarecherche nucléaire),ilpiùgrandelaboratorioalmondodifisicadelleparticelle,avevanecessitàdistrumentisoftware(programmi)chepermettesseroladiffusionediinformazionifraisuoidiversicentridiricerca• Perrisolverequestoproblema,SirTimothyJohnBerners-LeesviluppòiprogrammicherappresentanolabaseconcettualeperilWorldWideWeb(WWW)
IntroduzioneallaProgrammazione 06/46
Perchéimparareaprogrammare?– 5/7• DuranteisuoianniuniversitariMarkZuckerberg nonriuscivaatrovareunmodoefficaceperraccogliereinformazionisuglialtristudentidellasuauniversità(Harvard)• PerrisolverequestoproblemahacreatoFacebook• Originariamenteprogettatoperglistudentidell’UniversitàdiHarvard,fuprestoapertoancheaglistudentidialtreuniversitàescuole
• “Facebook”prendespuntodaunelencoconnomeefotografiadeglistudenti,chealcuneuniversitàstatunitensidistribuisconoall'iniziodell'annoaccademicoperaiutaregliiscrittiasocializzaretraloro
IntroduzioneallaProgrammazione 07/46
Perchéimparareaprogrammare?– 6/7• Finoalfebbraio2005nonerapossibilecondividereerenderepubblicisullareteInternetiproprivideo• Perrisolverequestoproblema,3ragazzichelavoravanoaPaypal (ChadHurley,SteveChen eJawed Karim)crearonoYouTube
IntroduzioneallaProgrammazione 08/46
Perchéimparareaprogrammare?– 7/7• LarryPageeSergey Brin immaginaronounluogochepermettesselorodiaccedere,inmanierasempliceerapida,atutteleinformazionipresentisullareteInternet• PerfarequestohannocreatoGoogle,unpotentemotorediricercachevieneutilizzatodadiversimiliardidipersoneintuttoilmondo
IntroduzioneallaProgrammazione 09/46
Cos’èunProgramma– 1/2• Definizione1: implementazionediunalgoritmoespressainunlinguaggiodiprogrammazionespecifico
• Definizione2: notazione(formaleenonambigua)concuièpossibiledescrivereglialgoritmi
Problema ModellazionedelProblema Algoritmo Programma
IntroduzioneallaProgrammazione 10/46
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 11/46
ChiCreaunProgramma?• Ilprogrammatore sioccupadi• Progettareunalgoritmoefficaceperlarisoluzionediunproblemadato• Tradurrequestoalgoritmoinistruzionieseguibilidauncomputermedianteunlinguaggiodiprogrammazione
IntroduzioneallaProgrammazione 12/46
ComevieneScrittounProgramma?– 1/8• Laprogrammazione consistenellascrittura diuntesto,dettoprogramma(ocodice)sorgente,chedescriveinterminidiistruzioninoteallamacchinalasoluzioneperundatoproblema• Esempio:ricercadelvalormassimoinunaseriedinumeri
• Ingeneralenonesisteunasolasoluzioneaduncertoproblema• Lesoluzionipotrebberoesserenumerose
• Laprogrammazioneconsisteneltrovarelastrada“migliore”checonduceallasoluzionedelproblemainoggetto1. Disolitosipartedaltrovareunaprimastrada,chenondeveessereper
forzalamigliore2. Successivamente,sicercanoeventualialtrestrademigliori
IntroduzioneallaProgrammazione 13/46
ComevieneScrittounProgramma?– 2/8• Programmare èun’operazionecreativa• Nonesisteunproblemaugualeaunaltroenonesistonosoluzioniuniversali
• Programmatoridiversiscrivonoprogrammidiversiperrisolverelostessoproblema• Lesoluzionipossonoessereugualmenteefficienti
• Programmareèun’operazioneorganizzataperstep successivi
• Ècompletamenteinefficienteunapproccio“diretto”• Scriveredirettamenteilprogrammadefinitivopartendodalproblema
IntroduzioneallaProgrammazione 14/46
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 15/46
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 16/46
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
17/46
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
18/46
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 19/46
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 20/46
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 21/46
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 22/46
LinguaggidiProgrammazione– 2/2
IntroduzioneallaProgrammazione 23/46
LinguaggidiProgrammazione:ElementiCostitutivi• Ognilinguaggiodiprogrammazione• Disponediuninsiemedi“parolechiave”• Keyword• Ècaratterizzatodaduecomponenti,complementaril’unaconl’altra• Sintassi: insiemedelleregolechespecificanocomecomporreistruzionibenformate
• Semantica: specificailsignificatodiogniistruzionebenformata,valeadirelasuccessionedelleoperazionichevengonocompiutequandol’istruzionevieneeseguita
IntroduzioneallaProgrammazione 24/46
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 25/46
LinguaggidiProgrammazionediPrimaGenerazione• Glielaboratoricomprendonoinmanieradirettasoloistruzioniinbinario• Ciascunelaboratorehailpropriosetdiistruzioni
• I primiprogrammieranofortementedipendentidallamacchina• Piùprecisamenteeranoscrittiinlinguaggiomacchina (ocodicemacchina)
• Pro• Moltoefficienteperlemacchine
• Contro• Difficiledaprogrammarepergliumani• Nonportabile
• Ancoramotoutilizzatoperlaprogrammazione difunzioni abassolivello• Driver,interfacceversofirmwareehardware,etc
IntroduzioneallaProgrammazione 26/46
LinguaggioMacchina• Illinguaggiomacchinaèdirettamente eseguibile dall’elaboratore• Senzanessunatraduzione
• Istruzioni edoperandi relativialprogrammainesecuzione sonocaricatiinmemoria equindisonomemorizzatiinformabinaria
• Vincolo: conoscenzadeimetodidirappresentazionedelleinformazioniutilizzati
• Esempio• Istruzione:carica nelregistro• 10010000 11001100
IntroduzioneallaProgrammazione 27/46
LinguaggidiProgrammazionediSecondaGenerazione– 1/2• Unlinguaggioassembly (oassemblativo)utilizzacodicimnemoniciperrappresentareleistruzioni• Ilcodicepuòesserelettoescrittodaprogrammatoriumani• Maèancorafortementedipendentedallamacchina
• Peressereeseguitodaunelaboratore,uncodiceassembly deveessereconvertito (daunassemblatore),inunaformacomprensibiledallamacchina• Medianteunprocessochiamatoassemblaggio
IntroduzioneallaProgrammazione 28/46
LinguaggidiProgrammazionediSecondaGenerazione– 2/2• Pro• Adattiadessereusatiinelaborazioniestremamenteintensive• Giochi,videoediting,manipolazionegrafica,rendering,etc
• Contro• Necessitàdiconoscereindettagliolecaratteristichedellamacchina(registri,dimensionedeidati,setdiistruzioni,etc)• Anchesemplicialgoritmirichiedonomolteistruzioni
IntroduzioneallaProgrammazione 29/46
LinguaggidiProgrammazionediTerzaGenerazione– 1/2• Ilinguaggidiprogrammazionedialtolivello usanoparole English-like,notazionematematica epunteggiatura perscrivereprogrammi• Sonopiùviciniailinguaggiumani• Ilprogrammatorepuòastrarredaidettaglilegatiall’architetturaedesprimereiproprialgoritmiinmodosemplice
• Leistruzioniesprimonounaseriediazioni
• Pro• Portabili,indipendentidallamacchina• Human-friendly
• Contro• Nonsempresonomoltoefficienti
IntroduzioneallaProgrammazione 30/46
LinguaggidiProgrammazionediTerzaGenerazione– 2/2
• Lemacchinecomprendonoedeseguonosoltantocodicimacchina
• Ilprogrammaprimadiessereeseguitodeveesseretradottoinlinguaggiomacchina
• Traduttore
• Latraduzionevieneeffettuatadauncompilatore,uninterprete,ounacombinazionedientrambi
IntroduzioneallaProgrammazione 31/46
Traduttore• Iltraduttoreèunprogrammacheconverte ilcodicediprogrammiscrittiinundatolinguaggiodiprogrammazione (sorgenti)nellacorrispondenterappresentazioneinlinguaggiomacchina (eseguibili)
IntroduzioneallaProgrammazione
Faciledacapireperil
programmatore
Contieneparoleininglese
Programmatraduttore
Illinguaggiodeicomputer
NumeriBinari
Linguaggiodialtolivello
Linguaggiomacchina
32/46
Assemblatorevs.Traduttore
Programma inlinguaggio diprogrammazione (Codicesorgente)
Programma inlinguaggiomacchina (Codice oggetto)
Traduttore
Programma inlinguaggioassemblativo (Codice sorgente)
Programma inlinguaggiomacchina (Codice oggetto)
Assemblatore
IntroduzioneallaProgrammazione 33/46
TipidiTraduttore:Compilatorevs.Interprete– 1/2• Compilatore• Accettainingressol’interoprogramma(istruzionichelocompongono)eproduceinuscitalarappresentazionedell’interoprogrammainlinguaggiomacchina
• Interprete• Traduceedeseguedirettamenteciascunaistruzionedelprogrammasorgente• Istruzioneperistruzione• Unaallavolta
IntroduzioneallaProgrammazione 34/46
TipidiTraduttore:Compilatorevs.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
Unità CentralediElaborazione Memoria
Busdisistema
ProgrammaP inunlinguaggioadaltolivelloLDatidelprogrammaP
Programmainterprete dellinguaggio adaltolivello L
Datidell’interprete
IntroduzioneallaProgrammazione 37/46
CPUcomeInterpretedelsuoLinguaggioMacchina
Unità CentralediElaborazione(CPU): interprete ed esecutore dellinguaggio macchina L
Memoria
Busdisistema
ProgrammaP inlinguaggiomacchinaL
DatidelprogrammaP
IntroduzioneallaProgrammazione 38/46
ParadigmidiProgrammazione– 1/2• Èpossibileaffrontareilproblemadelladescrizionedeiprogrammiinmodidifferenti
• Definizione: unparadigmadiprogrammazioneèunmodelloconcettualecheforniscela“struttura”diunprogramma
• Perparadigmidiprogrammazionesiintendonoi“modi”incuivengonospecificatiiprogrammi
• Nonsitrattadeltipodilinguaggiousato,madelcontestopiùampioalqualeuncertolinguaggioappartiene• Comevieneorganizzatalaprogrammazione econqualicaratteristiche• Stile,livellodidettaglio,“formamentis”delprogrammatore,etc
IntroduzioneallaProgrammazione 39/46
ParadigmidiProgrammazione– 2/2• Soluzionidifferenti costituisconoparadigmidiprogrammazionedifferenti
• Iparadigmi piùcomuni sono• Imperativo/Procedurale• AdOggetti• Funzionale
IntroduzioneallaProgrammazione 40/46
ProgrammazioneImperativa/Procedurale• Iprogrammisonosequenzedicomandicheagisconosuidatiosull’ordinediesecuzionedelleistruzioni
• Ilprogrammatoredevedefiniretuttelestrutturedatietuttiglialgoritmicheoperanosudiesse
• Chiamateasottoprogrammigestitecompletamentedalprogrammatore• Anchesenonsempre
• Costruttitipici: assegnamento,cicli,if-then-else,procedureconpassaggiodiparametri,etc
• Esempi: Assembly,FORTRAN,C,COBOL,Pascal,etc
IntroduzioneallaProgrammazione 41/46
ProgrammazioneadOggetti• Iprogrammidefinisconodelleastrazioni(classi)dielementideldominiodiapplicazionedelprogramma
• Leclassicontengonoinformazionisuidatimaancheilcodicepergestirli• Ingenereditipoimperativo
• Esempi: C++,Java,etc
IntroduzioneallaProgrammazione 42/46
ProgrammazioneFunzionale–1/2• Ilprogrammaèunadefinizionedifunzioninelsensopiùmatematicodeltermine
• Approcciodichiarativo: ilprogrammaèunadefinizionedifunzione,il“calcolo”èbuilt-in
• Ordinesuperiore: gliargomentidellefunzionidefinitepossonoesseresiavaloriditipiprimitivichealtrefunzioni
• L’interpretesioccupadivalutare,inbaseallefunzionidibaseeaquelledefinite,unaqualsiasiespressionebenformata
• L’algoritmodivalutazionenonèscrittodalprogrammatore,mavariaasecondadellinguaggio
IntroduzioneallaProgrammazione 43/46
ProgrammazioneFunzionale–2/2• Ilinguaggifunzionalipossonoessereusaticomemetalinguaggi perdefinirealtrilinguaggi
• Lemoderneimplementazionisonopiuttostoefficienti
• Esempi:Miranda,Haskell,LISP,etc
IntroduzioneallaProgrammazione 44/46
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 45/46
Riferimenti• Libroditesto• Capitolo4• Paragrafi1,2e3
IntroduzioneallaProgrammazione 46/46