Programma - Dipartimento di Informatica

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