Programma - Dipartimento di Informatica

FondamentidiInformatica
IntroduzioneallaProgrammazione
P ro f. C h r i st i a n E s p o s i to
C o rs o d i L a u re a i n I n g e g n e r i a M e c ca n i ca e G e st i o n a l e ( C l a s s e I )
A.A.2016/17
IntroduzioneallaProgrammazione
IProgrammi– 1/2
• Negliultimiannil’Information&Communication Technology(ICT)è
diventatounelementostrategicoperilbusiness,oltrecheuno
strumentoessenzialeintutteleattivitàlavorativeesociali
• Haacquisitounvaloreirrinunciabilepertutteleistituzionipubblichee
private,perleimprese,masoprattuttopertuttinoi
• Ilprogrammarappresental’elementodibaseperilmondodell’ICT
IntroduzioneallaProgrammazione
02/46
IProgrammi– 2/2
• Fannoormaipartediogninostraattività
SistemiOperativi
Virus,Troian,Malware
Videogiochi
ATM,semafori,ilmotorediricercaGoogle,sistemiperilsupportodel
trasporto
• 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,quindiun
programmatoreinconsciamenteacquisiràcapacitàdiproblem solving
• Questaabilitànonèsoloutilenellaprogrammazione,maèancheessenziale
nellavitareale
• Aggiungereunanuovalingua(linguaggio)edun’importanteabilitàalle
nostrecompetenze
IntroduzioneallaProgrammazione
03/46
Perchéimparareaprogrammare?– 2/7
• Imparareunnuovolinguaggiopermettedi
• Usarenuoveformeespressive
• Creareoggetticheinrealtàsembranonontangibili,macheinrealtàlosono
• Losonoperchéinmolticasihannocambiatoilnostromododivivere,
maancheperilloroimpattoeconomico
IntroduzioneallaProgrammazione
04/46
Perchéimparareaprogrammare?– 3/7
• Utilizzandoideecreativeecompetenzediprogrammazioneèpossibilecreare
tecnologierivoluzionariestandocomodamentesedutialpropriocomputer
• Laprogrammazioneconsenteallenostreideediprendereformaematerializzarsi
• Disolitoiltuttonascedallanecessitàdirisolvereproblemiconcreti
IntroduzioneallaProgrammazione
05/46
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
06/46
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
07/46
Perchéimparareaprogrammare?– 6/7
• Finoalfebbraio2005nonerapossibilecondividereerenderepubblici
sullareteInternetiproprivideo
• Perrisolverequestoproblema,3ragazzichelavoravanoaPaypal (Chad
Hurley,SteveChen eJawed Karim)crearonoYouTube
IntroduzioneallaProgrammazione
08/46
Perchéimparareaprogrammare?– 7/7
• LarryPageeSergey Brin immaginaronounluogochepermettesseloro
diaccedere,inmanierasempliceerapida,atutteleinformazioni
presentisullareteInternet
• PerfarequestohannocreatoGoogle,unpotentemotorediricercacheviene
utilizzatodadiversimiliardidipersoneintuttoilmondo
IntroduzioneallaProgrammazione
09/46
Cos’èunProgramma– 1/2
• Definizione1: implementazionediunalgoritmoespressainun
linguaggiodiprogrammazionespecifico
• Definizione2: notazione(formaleenonambigua)concuièpossibile
descrivereglialgoritmi
Problema
Modellazione
delProblema
Algoritmo
IntroduzioneallaProgrammazione
Programma
10/46
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
11/46
ChiCreaunProgramma?
• Ilprogrammatore sioccupadi
• Progettareunalgoritmoefficaceperlarisoluzionediunproblemadato
• Tradurrequestoalgoritmoinistruzionieseguibilidauncomputermediante
unlinguaggiodiprogrammazione
IntroduzioneallaProgrammazione
12/46
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
13/46
ComevieneScrittounProgramma?– 2/8
• Programmare èun’operazionecreativa
• Nonesisteunproblemaugualeaunaltroenonesistonosoluzioniuniversali
• Programmatoridiversiscrivonoprogrammidiversiperrisolverelo
stessoproblema
• Lesoluzionipossonoessereugualmenteefficienti
• Programmareèun’operazioneorganizzataperstep successivi
• Ècompletamenteinefficienteunapproccio“diretto”
• Scriveredirettamenteilprogrammadefinitivopartendodalproblema
IntroduzioneallaProgrammazione
14/46
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
15/46
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
16/46
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
17/46
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
18/46
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
19/46
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
20/46
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
21/46
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
22/46
LinguaggidiProgrammazione– 2/2
IntroduzioneallaProgrammazione
23/46
LinguaggidiProgrammazione:
ElementiCostitutivi
• Ognilinguaggiodiprogrammazione
• Disponediuninsiemedi“parolechiave”
• Keyword
• Ècaratterizzatodaduecomponenti,complementaril’unaconl’altra
• Sintassi: insiemedelleregolechespecificanocomecomporreistruzioni
benformate
• Semantica: specificailsignificatodiogniistruzionebenformata,valeadire
lasuccessionedelleoperazionichevengonocompiutequandol’istruzione
vieneeseguita
IntroduzioneallaProgrammazione
24/46
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
25/46
LinguaggidiProgrammazione
diPrimaGenerazione
• Glielaboratoricomprendonoinmanieradirettasoloistruzioniin
binario
• Ciascunelaboratorehailpropriosetdiistruzioni
• I primiprogrammieranofortementedipendentidallamacchina
• Piùprecisamenteeranoscrittiinlinguaggiomacchina (ocodicemacchina)
• Pro
• Moltoefficienteperlemacchine
• Contro
• Difficiledaprogrammarepergliumani
• Nonportabile
• Ancoramotoutilizzatoperlaprogrammazione difunzioni abasso
livello
• Driver,interfacceversofirmwareehardware,etc
IntroduzioneallaProgrammazione
26/46
LinguaggioMacchina
• Illinguaggiomacchinaèdirettamente eseguibile dall’elaboratore
• Senzanessunatraduzione
• Istruzioni edoperandi relativialprogrammainesecuzione sono
caricatiinmemoria equindisonomemorizzatiinformabinaria
• Vincolo: conoscenzadeimetodidirappresentazionedelleinformazioni
utilizzati
• Esempio
• Istruzione:carica nelregistro
• 10010000 11001100
IntroduzioneallaProgrammazione
27/46
LinguaggidiProgrammazione
diSecondaGenerazione– 1/2
• Unlinguaggioassembly (oassemblativo)utilizzacodicimnemoniciper
rappresentareleistruzioni
• Ilcodicepuòesserelettoescrittodaprogrammatoriumani
• Maèancorafortementedipendentedallamacchina
• Peressereeseguitodaunelaboratore,uncodiceassembly deveessere
convertito (daunassemblatore),inunaformacomprensibiledalla
macchina
• Medianteunprocessochiamatoassemblaggio
IntroduzioneallaProgrammazione
28/46
LinguaggidiProgrammazione
diSecondaGenerazione– 2/2
• Pro
• Adattiadessereusatiinelaborazioniestremamenteintensive
• Giochi,videoediting,manipolazionegrafica,rendering,etc
• Contro
• Necessitàdiconoscereindettagliolecaratteristichedellamacchina
(registri,dimensionedeidati,setdiistruzioni,etc)
• Anchesemplicialgoritmirichiedonomolteistruzioni
IntroduzioneallaProgrammazione
29/46
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
30/46
LinguaggidiProgrammazione
diTerzaGenerazione– 2/2
• Lemacchinecomprendonoedeseguonosoltantocodicimacchina
• Ilprogrammaprimadiessereeseguitodeveesseretradottoin
linguaggiomacchina
• Traduttore
• Latraduzionevieneeffettuatadauncompilatore,uninterprete,o
unacombinazionedientrambi
IntroduzioneallaProgrammazione
31/46
Traduttore
• Iltraduttoreèunprogrammacheconverte ilcodicediprogrammi
scrittiinundatolinguaggiodiprogrammazione (sorgenti)nella
corrispondenterappresentazioneinlinguaggiomacchina (eseguibili)
Linguaggiodi
altolivello
Faciledacapire
peril
programmatore
Linguaggiomacchina
Illinguaggiodei
computer
Programma
traduttore
Contieneparole
ininglese
NumeriBinari
IntroduzioneallaProgrammazione
32/46
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
33/46
TipidiTraduttore:Compilatore
vs.Interprete– 1/2
• Compilatore
• Accettainingressol’interoprogramma(istruzionichelo
compongono)eproduceinuscitalarappresentazionedell’intero
programmainlinguaggiomacchina
• Interprete
• Traduceedeseguedirettamenteciascunaistruzionedelprogramma
sorgente
• Istruzioneperistruzione
• Unaallavolta
IntroduzioneallaProgrammazione
34/46
TipidiTraduttore:Compilatore
vs.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
Datidell’interprete
Unità Centraledi
Elaborazione
Programma
interprete del
linguaggio ad
altolivello L
ProgrammaP inun
linguaggioadaltolivelloL
DatidelprogrammaP
Memoria
Busdi
sistema
IntroduzioneallaProgrammazione
37/46
CPUcomeInterpretedelsuo
LinguaggioMacchina
Unità CentralediElaborazione
(CPU): interprete ed esecutore del
linguaggio macchina L
ProgrammaP inlinguaggio
macchinaL
DatidelprogrammaP
Memoria
Busdi
sistema
IntroduzioneallaProgrammazione
38/46
ParadigmidiProgrammazione
– 1/2
• Èpossibileaffrontareilproblemadelladescrizionedeiprogrammiin
modidifferenti
• Definizione: unparadigmadiprogrammazioneèunmodello
concettualecheforniscela“struttura”diunprogramma
• Perparadigmidiprogrammazionesiintendonoi“modi”incuivengono
specificatiiprogrammi
• Nonsitrattadeltipodilinguaggiousato,madelcontestopiùampioal
qualeuncertolinguaggioappartiene
• Comevieneorganizzatalaprogrammazione econqualicaratteristiche
• Stile,livellodidettaglio,“formamentis”delprogrammatore,etc
IntroduzioneallaProgrammazione
39/46
ParadigmidiProgrammazione
– 2/2
• Soluzionidifferenti costituisconoparadigmidiprogrammazione
differenti
• Iparadigmi piùcomuni sono
• Imperativo/Procedurale
• AdOggetti
• Funzionale
IntroduzioneallaProgrammazione
40/46
Programmazione
Imperativa/Procedurale
• Iprogrammisonosequenzedicomandicheagisconosuidatio
sull’ordinediesecuzionedelleistruzioni
• Ilprogrammatoredevedefiniretuttelestrutturedatietuttigli
algoritmicheoperanosudiesse
• Chiamateasottoprogrammigestitecompletamentedal
programmatore
• Anchesenonsempre
• Costruttitipici: assegnamento,cicli,if-then-else,procedurecon
passaggiodiparametri,etc
• Esempi: Assembly,FORTRAN,C,COBOL,Pascal,etc
IntroduzioneallaProgrammazione
41/46
ProgrammazioneadOggetti
• Iprogrammidefinisconodelleastrazioni(classi)dielementidel
dominiodiapplicazionedelprogramma
• Leclassicontengonoinformazionisuidatimaancheilcodiceper
gestirli
• Ingenereditipoimperativo
• Esempi: C++,Java,etc
IntroduzioneallaProgrammazione
42/46
ProgrammazioneFunzionale–
1/2
• Ilprogrammaèunadefinizionedifunzioninelsensopiùmatematico
deltermine
• Approcciodichiarativo: ilprogrammaèunadefinizionedifunzione,il
“calcolo”èbuilt-in
• Ordinesuperiore: gliargomentidellefunzionidefinitepossonoessere
siavaloriditipiprimitivichealtrefunzioni
• L’interpretesioccupadivalutare,inbaseallefunzionidibaseeaquelle
definite,unaqualsiasiespressionebenformata
• L’algoritmodivalutazionenonèscrittodalprogrammatore,mavariaa
secondadellinguaggio
IntroduzioneallaProgrammazione
43/46
ProgrammazioneFunzionale–
2/2
• Ilinguaggifunzionalipossonoessereusaticomemetalinguaggi per
definirealtrilinguaggi
• Lemoderneimplementazionisonopiuttostoefficienti
• Esempi: Miranda,Haskell,LISP,etc
IntroduzioneallaProgrammazione
44/46
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
45/46
Riferimenti
• Libroditesto
• Capitolo4
• Paragrafi1,2e3
IntroduzioneallaProgrammazione
46/46