Estratto del documento

Basi informatica

Per risolvere un problema connesso con l’elaborazione delle informazioni, occorre creare un algoritmo.

Algoritmo

Intuitivamente, si può definire un algoritmo come un procedimento che a partire da uno stato iniziale, consente di ottenere in un tempo finito un risultato atteso eseguendo un insieme di operazioni descritte in maniera completa e non ambigua.

L’algoritmo può essere eseguito da un elaboratore poiché:

  • È una descrizione completa e non ambigua di un procedimento
  • Produce un risultato in un tempo finito

L’informatica è lo studio sistematico degli algoritmi che descrivono e trasformano l’informazione.

Due proprietà fondamentali dell’algoritmo

  • Correttezza: un algoritmo corretto perviene alla soluzione senza difettare di alcun passo fondamentale
  • Capacità di risolvere il problema senza difettare di alcun passaggio fondamentale
  • Capacità di risolvere il problema per ogni caso possibile o per ognuna delle situazioni iniziali previste
  • Efficienza: l’algoritmo perviene alla risoluzione del problema nel modo più veloce possibile e/o usando la minima quantità di risorse, compatibilmente con la sua correttezza

Risorse consumate per l’esecuzione di un algoritmo

  • Tempo di esecuzione
  • Memoria RAM
  • Memoria di massa, ...

Per produrre un algoritmo, occorre identificare chiaramente:

  • Il problema da risolvere
  • Input
  • Output
  • La sequenza di passi da compiere (logica)

Come si arriva a far eseguire un algoritmo ad un calcolatore?

Scomponiamo il problema in 2 sotto-problemi:

1. Come rappresentare/descrivere un algoritmo?

Utilizzando i linguaggi di programmazione:

  • Un linguaggio di programmazione è un linguaggio artificiale che può essere usato per descrivere algoritmi
  • Un programma è una sequenza di istruzioni (scritte in uno specifico linguaggio) che codifica un algoritmo

2. Come fa un computer ad eseguire la “descrizione di un algoritmo” (un programma)?

Un computer esegue soltanto programmi scritti in “linguaggio macchina”.

Come si passa da un algoritmo descritto con un linguaggio di programmazione al linguaggio macchina?

Terminologia

  • Programma sorgente: sequenza di istruzioni espresse attraverso un linguaggio di programmazione
    • Non è direttamente eseguibile da un computer
    • (Abbastanza) semplice da interpretare per una persona umana
  • Eseguibile (chiamato anche “programma in linguaggio macchina”): sequenza di istruzioni in linguaggio macchina
    • Direttamente eseguibili dal calcolatore
    • Difficilmente interpretabile da una persona umana

Strumenti per passare da programma sorgente ad un programma eseguibile

  • Compilatore
    • Riceve in ingresso un programma sorgente
    • Genera un eseguibile
    • Traduce tutte le istruzioni in un unico passaggio (detto processo di compilazione)
    • L’eseguibile, una volta generato, può essere eseguito senza richiedere di effettuare un’altra compilazione
  • Interprete
    • Riceve in ingresso un programma sorgente
    • Interpreta ed esegue le istruzioni una alla volta
    • Non genera un eseguibile vero e proprio, ma permette di eseguire il programma sorgente

Sottolineatura:

  • Una volta generato l’eseguibile, il compilatore non è più necessario per eseguire il programma
  • L’interprete, poiché non genera alcun eseguibile, è sempre necessario per eseguire un programma

Sintassi e semantica dei linguaggi

Sintassi: insieme di regole formali che dettano le modalità per costruire frasi corrette nel linguaggio stesso.

Semantica: insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio.

Una frase può essere sintatticamente corretta e tuttavia non avere significato.

Processi

Processo: un’istanza di un programma in esecuzione

Nei computer moderni possono esserci diversi processi in esecuzione:

  • Dovuti a più istanze dello stesso programma
  • Dovuti a istanze di diversi programmi
  • O una combinazione delle precedenti

Processore: la componente hardware che si occupa di eseguire le istruzioni

Hardware e software in un elaboratore

  • Software applicativo: dedicato a soddisfare specifiche esigenze dell’utente
  • Software di sistema (o sw di base): focus sulla gestione delle risorse dell’elaboratore
    • Sistema operativo: si occupa della gestione dell’hardware e delle risorse condivise del computer
    • Applicazioni di sistema: programmi (simili ai programmi applicativi) che contribuiscono allo svolgimento delle attività del sistema operativo
  • Infrastruttura Hardware: l’hardware utilizzato per elaborare le informazioni

Un po’ di storia

Epoca dei software monolitici (primi anni dell’informatica)

  • Si sviluppavano programmi che governavano tutti gli aspetti del computer, dalla gestione delle periferiche alla logica applicativa.
  • Non c’era separazione tra software applicativo e software per gestire i dettagli hardware
  • Problemi: ogni software doveva essere sviluppato da zero
  • Cambiare un componente hardware richiede la modifica del software

Separazione tra sistema operativo e software applicativo (anni successivi)

  • Il sistema operativo fornisce un’interfaccia che permette ai programmi applicativi di astrarre dall’hardware
  • Software applicativo, sviluppato a partire dall’astrazione fornita dal sistema operativo
  • In questo modo chi sviluppa sistemi operativi può concentrarsi sulla gestione dell’hardware e delle applicazioni, mentre chi sviluppa applicazioni può focalizzarsi sulle esigenze degli utenti

Interfaccia

Interfaccia: un punto di contatto e scambio di informazioni tra due componenti (hardware o software) diversi.

Es. (hardware): la porta USB

Es. (software): l’interfaccia tra un driver di periferica e il sistema operativo

Il sistema operativo per interagire con un componente hardware utilizza un Driver

  • Driver: software per gestire un componente hardware (es. scheda grafica, mouse, ha il suo driver specifico)
  • Driver di hardware simili (ma produttori diversi) hanno un’interfaccia comune, ma implementazioni diverse
  • Il meccanismo dei driver permette al Sistema Operativo di astrarre dalle caratteristiche di un componente (tastiera)

Il sistema operativo fornisce ai programmi applicativi un’interfaccia con un alto livello di astrazione sull’hardware. Es., la print di python usa un servizio offerto dal sistema operativo.

Compiti del sistema operativo

  • Gestire avviamento e spegnimento del computer
  • Gestire le risorse condivise (periferiche, memorie di archiviazione, ... )
    • Disciplinare l’accesso alle risorse
    • Allocare le risorse ai diversi utilizzatori
  • Gestire la memoria di lavoro del computer
  • Gestire i processi in esecuzione
  • Gestire il File System
  • Gestire l’interconnessione con altri computer (per realizzare sistemi distribuiti)
  • Fornire una user interface (interfaccia utente) per l’interazione tra l’uomo e il computer

File system

File System: metodi e strutture dati che il sistema operativo usa per gestire i dati memorizzati su dischi o in generale su unità di archiviazione

Due concetti fondamentali:

  • File: un insieme di dati. Memorizzati tipicamente attraverso una sequenza di bit (i primi file sono stati memorizzati su nastri magnetici)
  • Directory: una struttura che raccoglie un insieme di file ed eventualmente (sotto) directory

L’insieme dei file e directory è organizzato ad albero.

Terminologia

Dato il file L01.pdf nel file system a dx,

  • L01.pdf è il nome del file (base name, o file name)
  • pdf è l’estensione del file
  • /home/cesarini/lex/L01.pdf è il percorso completo (fully qualified name/full path)
  • /home/cesarini/lex è la directory che contiene il file
  • Percorso relativo:
    • Supponiamo che /home/cesarini sia la directory di lavoro corrente
    • lex/L01.pdf è il percorso relativo di L01.pdf rispetto alla directory di lavoro (relative path)

Dato il percorso /home/cesarini/lex/L01.pdf

  • / è la root, la directory che contiene tutte le altre directory e gli altri file di un system. È l’inizio di ogni percorso
  • I rimanenti / sono dei separatori, si tratta di un espediente per separare i nomi di file e directory tra loro
  • Il simbolo / in entrambi i casi è chiamato slash

File system in Unix e Windows

Vediamo come la terminologia sui file system appena introdotta è declinata in due famiglie di sistemi operativi

  • / è chiamato slash
  • \ è chiamato back-slash
  • Le [ ] attorno a drive letter: significano che l’indicazione del drive (disco) in Windows è opzionale
  • Unix comprende Linux, Mac OS, ...
  • Sia in Win sia in Unix sono definiti i percorsi sia assoluti sia relativi

Windows: I file system di Windows in realtà è una foresta di alberi. Ogni drive (disco) è la radice di un albero separato dagli altri

Unix: Anche quando in un computer sono presenti più dischi, nel file system Unix apparentemente non c’è traccia dei diversi dischi. In realtà i dischi sono montati sull’unico albero esistente. Ciò rende possibile spostare gruppi di directory da un disco all’altro senza che l’utente se ne accorga.

File, directory e metadati

Ad un file, oltre al contenuto, sono associate delle informazioni (chiamate metadati):

  • Data e orario di creazione o ultima modifica
  • Il proprietario e/o il creatore del file
  • Permessi di accesso al file

Le stesse informazioni possono essere associate anche alle directory. Ecco un esempio di metadati in un file system Unix.

Metadati in Windows

Informazioni ottenibili a riga di comando. Informazioni ottenibili tramite GUI. Nei sistemi Windows l’estensione del file (es. .pdf, .tex) dà informazioni su quale applicazione può aprire il file. Cambiando l’estensione, si modifica l’applicazione associata al file. Se sul vostro PC Windows non vedete le estensioni ... il vostro sistema operativo le sta mascherando (è l’impostazione di default).

User interface

Paradigmi a confronto: GUI vs CLI

  • GUI (Graphic User Interface): Interfaccia utente grafica.
    • Interazione basata su Finestre, Pulsanti, ...
    • Più recente (inventata negli anni 1980 nei laboratori PARC della Xerox)
  • CLI (Command Line Interface): Interfaccia a riga di comando.
    • Interazione basata su comandi digitati a tastiera (comandi singoli, script complessi)
    • Output attraverso: schermo, file, stampante
    • Utile per svolgere operazioni complesse e ripetitive

Shell CLI e file system

Shell: strumento di interazione con il computer e il sistema operativo basato su un paradigma CLI (Command Line Interface). È utile per svolgere attività ripetitive o complesse.

Es. per cancellare tutti i file che terminano con .txt (100 file, sparsi tra altri):

  • GUI: devo trascinare nel cestino 100 file
  • CLI: basta un comando (ora non ve lo spiego)

La gestione di grossi dataset può essere effettuata su macchine (server) molto grandi, alle quali ci si connette via Shell in remoto.

I linguaggi di programmazione:

  • Il processo di compilazione può essere svolto tramite comandi dati a Shell
  • In questo corso vedremo l’interpretazione ed esecuzione del codice python, sia tramite Shell, sia tramite GUI

Directory corrente (concetto molto importante): la directory nella quale si sta lavorando, in un certo istante. Qualsiasi riferimento a file (senza specificare un percorso) fa implicitamente riferimento a file della directory corrente. Se voglio utilizzare un file in una posizione diversa dalla directory corrente, dobbiamo fornire il percorso (assoluto o relativo). I percorsi relativi, sono sempre calcolati a partire dalla directory corrente.

Alcuni comandi di Shell

Eseguire un comando da Shell:

  • Il prompt della Shell attende un comando.
  • Al prompt è possibile digitare il comando seguito da eventuali parametri. Premendo invio (il tasto return) il comando viene eseguito.
  • Il prompt di Win e Unix sarà rappresentato rispettivamente da > e $ qua di seguito:

Un comando ha questo pattern: comando [parametro_1 ] [parametro_2 ] ... [parametro N ]

Tutto ciò che è compreso tra [ e ] è opzionale.

Eseguire uno script python da Shell:

Con un editor di testi, salvate il file primo.py in una directory scelta. Nel file scrivete print("Hello Word"). Eseguite i comandi seguenti (> e $ non vanno digitati).

Al posto di \users\cesarini o /home/cesarini digitate il percorso della directory in cui avete salvato il file.

Nell’usare la Shell, occorre spesso ripetere l’esecuzione dei comandi: Utilizzate i tasti freccia, " e #, per recuperare i comandi dati in precedenza questa funzionalità si chiama history.

Scrivere i percorsi dei file può essere noioso, soprattutto se i percorsi sono lunghi, come nell’esempio seguente:

/Users/cesarini/documenti/didattica/corsi_laurea/informatica/info16/slide_python/

Appena scritte le prime lettere del nome di una directory ... provate a premere (il tasto) tab, anche diverse volte ... e osservate cosa succede. Questa funzionalità si chiama autocompletamento.

Python

Un linguaggio interpretato creato da Guido van Rossum. Prende il nome dalla serie televisiva “Monty Python’s Flying Circus” (e non dal nome di un serpente).

Vantaggi di Python

  • È adatto per risolvere velocemente problemi
  • Facilita l’evoluzione da soluzioni “quick and dirty” verso progetti strutturati di maggiore complessità
  • L’uso di Python si sta diffondendo notevolmente in ambito accademico, economico, finanziario, ... Provate a fare una verifica (usando un motore di ricerca)

Compromesso:

  • La documentazione di Python a volte usa una terminologia non standard rispetto ad altri linguaggi del mondo dell’informatica
  • Dato che per voi Python è un punto di passaggio per altri mondi, per quanto possibile sarà usata una terminologia comune ad altri linguaggi di programmazione

Componenti principali di un linguaggio di programmazione

  • Variabili
  • Istruzioni
    • Istruzioni di input e output
    • Istruzioni di assegnamento (per eseguire elaborazioni)
    • Istruzioni condizionali
    • Istruzioni di iterazione
  • Librerie

Due modalità di lavoro:

  • Script
    • File contenente un insieme di istruzioni
    • Programma sorgente e script sono sinonimi
    • L’esecuzione di uno script implica l’esecuzione ordinata di tutte le istruzioni contenute all’interno
  • La “riga di comando” (chiamata anche “prompt” o “interactive window”)
    • Esegue un’istruzione per volta
    • Permette di valutare velocemente l’effetto di un’istruzione

I programmi complessi sono composti da molte istruzioni conviene utilizzare gli script.

Programmazione in Python: dal prompt al file sorgente

Come si programma in Python? Esistono tre forme di interazione con l’interprete:

  • Da linea di comando utile per testare porzioni di codice o come calcolatrice avanzata
  • Avvio dell’interprete
Anteprima
Vedrai una selezione di 7 pagine su 30
Appunti Informatica Pag. 1 Appunti Informatica Pag. 2
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 6
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 11
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 16
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 21
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 26
1 su 30
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher aina.belloni di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano - Bicocca o del prof Cesarini Mirko.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community