Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Informatica, programmazione procedurale teoria, Dispense di Informatica

Informatica, programmazione procedurale teoria

Tipologia: Dispense

2020/2021

Caricato il 05/02/2023

marta-santamaria-2
marta-santamaria-2 🇮🇹

5

(1)

4 documenti

1 / 6

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFO PROGRAMMAZIONE PROCEDURALE
In questo modo è possibile ridurre la complessità, insita nel realizzare un algoritmo complesso, in una serie
di algoritmi più semplici che risolveranno il problema originario.
Top-down: La metodologia che, partendo dal problema generale (top), chiamato problema principale, lo
scompone in sottoproblemi più semplici. In proc sfruttata per l’analisi e la comprensione del problema.
La Bottom-up si focalizza e privilegia invece l’aspetto esecutivo (“come devo operare”) su il funzionale
(“cosa devo fare”), procedendo dal particolare verso il generale secondo una strategia induttiva che si
concentra sui punti cardine del problema. Usata per la ricerca di sfruttare codice già esistente ad alcuni
livelli.
Il sottoalgoritmo: una parte dell’algoritmo che risolve un particolare sottoproblema. Tecnicamente un
sottoalgoritmo è una parte dell’algoritmo risolutivo che non può essere eseguito autonomamente, ma solo
su invocazione e controllo dell’algoritmo (o del sottoalgoritmo) che lo invoca, che è denominato
‘chiamante’.
Algoritmo principale (main) programma principale, che descrive e gestisce globalmente il problema,
implementandone le funzionalità . Un insieme di sottoalgoritmi sottoprogr. che risolvono i singoli
problemi. Un sottoprogramma può essere richiamato anche più volte Dal programma principale, Da altri
sottoprogrammi nello stesso programma, Da altri programmi.
Conviene descrivere e implementare un’attività per
mezzo di un sottoalgoritmo quando
Non conviene
È di interesse generale
Non è di interesse generale ma si presenta
più volte all’interno del programma
Pur essendo di scarso interesse generale,
permette una maggiore leggibilità
È di scarso interesse generale
Non migliora la leggibilità del programma
o, addirittura, la peggiora
L’utilizzo della programmazione procedurale permette quindi di ottenere i seguenti benefici:
- Migliora la leggibilità dei programmi -Permette al programmatore di concentrarsi su ‘cosa’ deve essere
fatto, delegando al sottoprogramma ‘come’ viene fatto, realizzando quella che viene chiamata: astrazione
funzionale. - Consente di scrivere meno codice all’interno del programma, occupando pertanto meno
memoria. - Consente di riutilizzare il codice in altri programmi: è importante che il sottoprogramma, per
essere più facilmente riutilizzabile, abbia una forte coesione interna e pochi collegamenti con l’esterno.
due tipi di sottoprogrammi:
Procedure: sottoprogrammi che non restituiscono alcun valore (e quindi non possono far parte di
una espressione) (void)
Funzioni: sottoprogrammi che restituiscono al chiamante un valore, e possono quindi essere usate
in istruzioni di assegnazione e all’interno di espressioni
VARIABILI GLOBALI E LOCALI (AMBIENTE)
L’ambiente di un sottoprogramma è l’insieme delle risorse (variabili, costanti, parametri, sottoprogrammi)
alle quali esso può accedere. Possiamo quindi distinguere fra:
Ambiente globale: risorse utilizzabili da tutti i sottoprogrammi (risorse globali)
Ambiente locale: risorse dichiarate e utilizzabili solo all’interno del sottoprogramma (risorse locali)
L’utilizzo delle variabili locali permette di -Agevolare la lettura del programma, riconoscendo in quale
ambito (scope) hanno significato le risorse. -Individuare facilmente eventuali errori commessi, in quanto ci
si sofferma solo sulle risorse locali nell’ambito di quel sottoprogramma
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Informatica, programmazione procedurale teoria e più Dispense in PDF di Informatica solo su Docsity!

INFO PROGRAMMAZIONE PROCEDURALE

In questo modo è possibile ridurre la complessità, insita nel realizzare un algoritmo complesso, in una serie di algoritmi più semplici che risolveranno il problema originario. Top-down: La metodologia che, partendo dal problema generale (top), chiamato problema principale, lo scompone in sottoproblemi più semplici. In proc sfruttata per l’analisi e la comprensione del problema. La Bottom-up si focalizza e privilegia invece l’aspetto esecutivo (“come devo operare”) su il funzionale (“cosa devo fare”), procedendo dal particolare verso il generale secondo una strategia induttiva che si concentra sui punti cardine del problema. Usata per la ricerca di sfruttare codice già esistente ad alcuni livelli. Il sottoalgoritmo : una parte dell’algoritmo che risolve un particolare sottoproblema. Tecnicamente un sottoalgoritmo è una parte dell’algoritmo risolutivo che non può essere eseguito autonomamente, ma solo su invocazione e controllo dell’algoritmo (o del sottoalgoritmo) che lo invoca, che è denominato ‘chiamante’. Algoritmo principale (main)  programma principale, che descrive e gestisce globalmente il problema, implementandone le funzionalità. Un insieme di sottoalgoritmi  sottoprogr. che risolvono i singoli problemi. Un sottoprogramma può essere richiamato anche più volte Dal programma principale, Da altri sottoprogrammi nello stesso programma, Da altri programmi. Conviene descrivere e implementare un’attività per mezzo di un sottoalgoritmo quando Non conviene  È di interesse generale  Non è di interesse generale ma si presenta più volte all’interno del programma  Pur essendo di scarso interesse generale, permette una maggiore leggibilità  È di scarso interesse generale  Non migliora la leggibilità del programma o, addirittura, la peggiora L’utilizzo della programmazione procedurale permette quindi di ottenere i seguenti benefici:

  • Migliora la leggibilità dei programmi -Permette al programmatore di concentrarsi su ‘cosa’ deve essere fatto, delegando al sottoprogramma ‘come’ viene fatto, realizzando quella che viene chiamata: astrazione funzionale. - Consente di scrivere meno codice all’interno del programma, occupando pertanto meno memoria. - Consente di riutilizzare il codice in altri programmi: è importante che il sottoprogramma, per essere più facilmente riutilizzabile, abbia una forte coesione interna e pochi collegamenti con l’esterno. due tipi di sottoprogrammi:  Procedure : sottoprogrammi che non restituiscono alcun valore (e quindi non possono far parte di una espressione) (void)  Funzioni : sottoprogrammi che restituiscono al chiamante un valore, e possono quindi essere usate in istruzioni di assegnazione e all’interno di espressioni VARIABILI GLOBALI E LOCALI (AMBIENTE) L’ambiente di un sottoprogramma è l’insieme delle risorse (variabili, costanti, parametri, sottoprogrammi) alle quali esso può accedere. Possiamo quindi distinguere fra: Ambiente globale : risorse utilizzabili da tutti i sottoprogrammi (risorse globali) Ambiente locale: risorse dichiarate e utilizzabili solo all’interno del sottoprogramma (risorse locali) L’utilizzo delle variabili locali permette di -Agevolare la lettura del programma, riconoscendo in quale ambito (scope) hanno significato le risorse. -Individuare facilmente eventuali errori commessi, in quanto ci si sofferma solo sulle risorse locali nell’ambito di quel sottoprogramma

L’uso di variabili globali deve essere attentamente valutato e ridotto al minimo. Le variabili globali rischiano infatti di generare interazioni tra diverse parti del programma, perdendone il controllo e rendendo difficile individuare, isolare e correggere eventuali errori (bug). Un eccessivo uso di variabili globali è indice del fatto che il programma non è stato attentamente analizzato e scomposto globali locali  Sono allocate (e inizializzate) in ogni caso  Rimangono allocate per tutta la durata del programma  Vengono inizializzate solo una volta  Sono allocate (e inizializzate) ogni volta che si entra nel sottoprogramma  Rimangono allocate solo per la durata del sottoprogramma  Vengono inizializzate tutte le volte che viene chiamato il sottoprogramma SCOPE All’interno di un programma, ogni oggetto ha il suo campo di validità (scope) , cioè l’ambito in cui è ‘visibile’ e può essere usato e riconosciuto. I principi che regolano il campo di visibilità degli oggetti globali e locali di un programma sono i seguenti: 1.Gli oggetti globali sono accessibili a (e visibili in) tutto il programma

  1. Un oggetto dichiarato in un sottoprogramma (oggetto locale) ha significato solo in quel sottoprogramma e in tutti quelli dichiarati al suo interno.
  2. Un oggetto non può essere usato se non è stato prima dichiarato. Nella costruzione di un algoritmo possiamo dichiarare con lo stesso nome due variabili diverse (anche di tipo diverso) a livello globale e a livello locale all’interno di un sottoprogramma. È necessario però fare attenzione a non confondere le due variabili (che sono due variabili diverse e occupano diversi spazi in memoria), e considerare il comportamento della variabile locale, che opera secondo il concetto di shadowing, secondo il quale la variabile locale, durante l’esecuzione del sottoprogramma, ‘oscura’ (maschera) l’omonima variabile più esterna impedendone la visibilità. PARAMETRI I parametri permettono lo scambio di informazioni in input e/o output tra programma chiamante e procedura. Per essere riutilizzato più volte all’interno dello stesso programma e/o per essere usato in altri programmi, un sottoprogramma deve essere funzionalmente indipendente dal programma principale. Per permettere di rendere un sottoprogramma autonomo e indipendente dal programma principale i linguaggi di programmazione mettono a disposizione i parametri, che permettono di gestire la comunicazione del sottoprogramma con il (sotto)programma chiamante. sono oggetti caratterizzati da: Un identificatore, Un tipo, Un valore, Una posizione, Una direzione (input/output), che dipende dalla modalità di passaggio dei parametri PASSAGGIO DEI PARAMETRI Quando un (sotto)programma (chiamante) invoca un sottoprogramma, gli passa i parametri attuali, cioè le informazioni ‘reali’ (che sono i valori che in quel momento hanno le variabili). I valori dei parametri attuali vengono passati e accolti dal sottoprogramma nei parametri formali , dichiarati nella intestazione del sottoprogramma stesso. Il passaggio dei parametri può avvenire secondo due modalità: Passaggio per valore (o per copia) (by value) o Passaggio per indirizzo (by reference).

int : è il tipo del risultato calcolato dal metodo  somma10: è il nome del metodo (identificatore per il quale valgono le stesse regole sintattiche delle variabili)  () : all’interno delle parentesi è possibile indicare eventuali parametri: vedremo degli esempi più avanti  return : è il comando che termina l’esecuzione del metodo, e fornisce il risultato (dato da una espressione), il tipo di una funzione deve essere compatibile con il return, deve essere raggiungibile (se lo metto in un if il compilatore dice che potrebbe non essere mai raggiunto e da errore). Un modificatore è una parola chiave di Java che può essere usata per modificare in qualche modo le funzionalità e le caraReris5che di un metodo o una variabile: e.g. public, static, final, …. Un modificatore sta ad un componente di un’applicazione Java come un aggettivo sta ad un sostantivo nel linguaggio umano. INVOCAZIONE DI UN METODO quando adiamo a invocare un metodo in java utilizza una particolare area di memoria (stack) in cui vengono memorizzati tutte quelle informazioni che servono per gestire le chiamate alle funzioni, questi blocchi di memoria vengono chiamati record di attivazione. Record di attivazione : blocco di memoria (dello stack) che contiene i parametri attuali della funzione, le varibili locali di quella funzione, l’indirizzo di ritorno cioè il punto del metodo chiamante cui bisogna cedere il controllo (e restituire il risultato) alla fine dell’esecuzione del metodo invocato. Lo stack è un’area di memoria in cui la JVM alloca le variabili locali. Gli oggetti (le variabili d’istanza) vengono invece allocati nello Heap, che è invece quel sito della memoria nella quale vengono allocati gli oggetti appena creati: nello heap “vivono” i componenti (classi e oggetti). In una sequenza di chiamate di metodi (uno dentro l’altro) l’ultimo metodo chiamato è il primo a terminare l’esecuzione. I record di attivazione formano quindi una pila (o stack). Quando un metodo termina l’esecuzione: l il controllo passa all’istruzione del metodo chiamante riferita dall’indirizzo di ritorno, eventualmente con il passaggio del risultato. Il frame del metodo corrente viene disallocato (chiusi e quindi persi) , mentre il metodo chiamante riprende l’esecuzione. JAVA Un programma Java e' costituito da un insieme di classi (almeno una) public significa che questa classe e' pubblica: puo' essere utilizzata da qualunque altra classe del programma. Un metodo e' una funzionalita' della classe messa disposizione del resto del programma o di altre parti (altri metodi) della stessa classe. Questo metodo e' chiamato main (principale) ed e' un metodo speciale. Viene subito eseguito all'inizio del programma. public significa che questo metodo puo' essere usato da altre classi System.out e' un oggetto che rappresenta il canale di output standard del sistema (la console...) println e' un metodo dell'oggetto System.out che stampa un messaggio e va a capo Un oggetto e' un'entita attiva che corrisponde a una determinata classe (vedremo...) Ogni variabile deve essere dichiarata UNA SOLA VOLTA (la prima volta che compare nel programma) Prima di poter essere usata (letta) in un'espressione una variabile deve: essere stata dichiarata, essere stata assegnata almeno una volta (inizializzata)

IMPUT:

Nella libreria (package) java.util (di cui è necessario farne l'import, in quanto non è importata automaticamente come la libreria java.lang) è presente la Classe Scanner , che permette di leggere dati da un dispositivo di input. Se ne nostro programma vogliamo leggere dallo standard input (il monitor), possiamo sfruttare i metodi della Classe Scanner che ci facilita l'operazione di lettura: Per ricevere valori in input dall'utente si usa in Java la classe Scanner, che fa parte della Libreria Standard di Java (detta Java API). La classe Scanner deve essere richiamata usando la direttiva import prima dell'inizio della classe: import java.util.Scanner; // richiama la classe Scanner Scanner input = new Scanner (System.in); predispone il programma per la lettura dell'input. L'oggetto input (che puo essere chiamato anche differentemente) deve essere predisposto (creato) prima di Iniziare a chiedere i valori all'utente. Istanziamo un oggetto della Classe Scanner, richiamandone il costruttore e passandogli come l'oggetto System.in1) (creiamo cioè un oggetto che potrà leggermi dati dallo standard input): input.nextInt() ; attende l'inserimento di due numeri e li assegna. Richiamiamo i metodi dell'oggetto (input) appena creato (definiti nella Classe Scanner) per leggere i valori in input a seconda del tipo dei valori attesi:La lettura vera e propria dei valori in input si fa tramite metodi diversi a seconda del tipo dei valori attesi: x = input.nextInt(); y = input.nextDouble(); OUTPUT: Nella libreria (package) java.lang (la più importante di Java, che racchiude le Classi fondamentali del linguaggio e che non è necessario farne l'import, in quanto importata automaticamente) è presente una particolare classe, System, che contiene: System.out: è un oggetto definito nella Classe System (di tipo: Static PrintStream out), che rappresenta lo standard output. La Classe PrintStream (statica) contiene i metodi print() e println(), che permettono la stampa di caratteri, stringhe, numeri, etc. Questo ci permette di richiamare il metodo: System.out.print() per stampare sullo standard output (il monitor) qualsiasi cosa. TRADUZIONE: Occorre sempre tradurre il programma dal programma utilizzato (codice sorgente) in LM (Linguaggio Macchina) (codice oggetto). I traduttori sono di due tipologie : compilatori e interpreti. Compilatori: prende in input il codice sorgente e lo traduce completamente in codice oggetto. L’esecuzione del file oggetto è possibile solo a traduzione ultimata. Interpreti : traduce ed esegue immediatamente ogni singola istruzione del codice sorgente, e la manda in esecuzione Un programma scritto in linguaggio Java viene tradotto, all’atto della compilazione, in un insieme di istruzioni definite dalla Macchina Virtuale Java (Java Virtual Machine - JVM) Il codice binario (detto bytecode ) prodotto dalla compilazione Java viene poi eseguito dalla Java Virtual Machine (che è pertanto l’interprete che esegue il programma , avendo anche il compito di caricare ‘run-time’ quanto serve per l’esecuzione (ad ex. le Classi delle librerie standard Java usate dal programma) L'interprete del byte-code Java è detto Java Virtual Machine (JVM)