Crea sito

Home » 2019 » Gennaio

Monthly Archives: Gennaio 2019

La programmazione orientata agli oggetti

Object Oriented Programming

La programmazione orientata agli oggetti (OOP, Object Oriented Programming) è un paradigma di programmazione che prevede di raggruppare in un’unica entità (la classe descrizione astratta di un tipo di dato) sia le strutture dati che le procedure che operano su di esse, creando un oggetto (istanza della classe) software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell’oggetto stesso.
Nel linguaggio C++ è possibile scrivere programmi secondo uno stile di programmazione che può essere orientato agli oggetti.

La differenza tra classe e oggetto è la stessa che c’è tra tipo di dato e dato.

Si è detto che un oggetto è definito da:

  • attributi che rappresentano le sue caratteristiche e proprietà fisiche utili a definire il suo stato (variabili e costanti);

  • metodi che rappresentano i comportamenti ammissibili o le azioni, le proprietà dinamiche, cioè le funzionalità dell’oggetto stesso e chi usa l’oggetto può attivarli. I metodi vengono realizzati con le funzioni contenenti le istruzioni che implementano le azioni dell’oggetto e possono avere parametri e fornire valori di ritorno (funzioni e procedure).

Esempio

Prima di implementare un’applicazione occorre innanzitutto individuare il contesto nel quale si deve operare, per formalizzare il dominio applicativo. Si supponga di gestire i prodotti di un grande magazzino che vende elettrodomestici e che elenchi le caratteristiche e funzionalità di essi.  Formalizzando gli oggetti del dominio applicativo si ha un diagramma di classe (Class Diagram) che fornisce una notazione grafica per la formalizzazione delle classi e le relazioni che intercorrono tra di esse. Ad esempio:

Esempi vari:

Un linguaggio ad oggetti, per essere definito tale, deve supportare le proprietà di incapsulamento, information hiding, ereditarietà e polimorfismo.

Guida Scratch

Con Scratch puoi programmare storie interattive, giochi e animazioni — e puoi condividere le tue creazioni con gli altri membri della comunità.
Scratch insegna ai giovani a pensare in maniera creativa, a ragionare in modo sistematico e a lavorare in maniera collaborativa — queste sono tutte capacità essenziali per chi vive nel 21mo secolo.
Scratch è un progetto del Lifelong Kindergarten Group dei Media Lab del MIT. È reso disponibile in maniera completamente gratuita.

Il 2 gennaio del 2019 è stata rilasciata la versione 3.0!
(rif. Università di Salerno)
Guida Scratch 2.0

eBook_scratch
Titolo: eBook_scratch (0 click)
Etichetta:
Filename: ebook_scratch.pdf
Dimensione: 5 MB

Esame di Stato 2016/2017

Simulazione

Ministero dell’Istruzione dell’’Università e della Ricerca

ESAME DI STATO DI ISTRUZIONE SECONDARIA SUPERIORE

Indirizzo: ITSI – AMMINISTRAZIONE FINANZA E MARKETING

ARTICOLAZIONE SISTEMI INFORMATIVI AZIENDALI

  Tema di: INFORMATICA

Tipologia b

ESEMPIO PROVA

 Il candidato (che potrà eventualmente avvalersi delle conoscenze e competenze maturate attraverso esperienze di alternanza scuola-lavoro, stage o formazione in azienda) svolga la prima parte della prova e risponda a due tra i quesiti proposti nella seconda parte.

PRIMA PARTE

Il mercato dell’abbigliamento ha conosciuto negli ultimi anni profonde modificazioni su scala globale a causa dei nuovi comportamenti dei consumatori. L’azienda “Gamma” è una società multinazionale di produzione e commercializzazione di prodotti di abbigliamento. Essa ha intuito l’opportunità di indagare i nuovi “modelli individuali” di comportamento dei consumatori e ha adeguato le proprie strategie manageriali, utilizzando metodologie di raccolta dati che consentano un rapido feedback tra l’analisi delle vendite e le strategie di produzione.

Ciò le ha consentito di offrire sul mercato modelli di abbigliamento di tendenza, con un processo di progettazione, produzione e distribuzione di poche settimane (time to market breve), e a prezzi accessibili al grande pubblico. L’offerta di modelli è differenziata in base all’analisi dei comportamenti dei consumatori e pertanto, per identificarne rapidamente le tendenze, Gamma traccia ogni singolo capo disponibile nei suoi punti vendita.

La struttura produttiva dell’azienda Gamma è basata su stabilimenti dislocati in diverse nazioni europee, che si approvvigionano da vari fornitori. La sua rete commerciale è composta di punti vendita che presentano caratteristiche e offerte differenziate, distribuiti prevalentemente nelle città di medie e grandi dimensioni. Il personale di vendita può essere impiegato presso i vari punti vendita della società, in periodi diversi.

L’azienda attua strategie di fidelizzazione e di raccolta delle opinioni dei clienti anche tramite Web.

Il candidato, fatte le opportune ipotesi aggiuntive:

  1. identifichi le principali aree del sistema informativo dell’azienda Gamma e le soluzioni tecnologiche necessarie alla sua implementazione;
  2. concentrandosi poi sulla porzione del sistema informativo che gestisce l’attività di vendita, sviluppi uno schema concettuale della relativa base di dati, che dovrà prevedere:
    • i punti vendita, identificati mediante un opportuno codice, dei quali si registra anche l’indirizzo, il telefono, la data di inizio attività
    • i dipendenti, dei quali interessano i dati anagrafici, la qualifica, il punto vendita in cui operano
    • i modelli, specificando per ciascuno il codice, il nome, la descrizione, il prezzo di listino, il genere (uomo/donna), la collezione a cui appartiene
    • i singoli capi, di cui interessano il modello, la taglia, il colore (scelto tra un insieme codificato) ed il punto vendita dove si trova. Al momento della vendita si deve inoltre memorizzare la data di vendita, il prezzo effettivo di vendita (che può differire dal prezzo di listino in caso di promozioni) e il dipendente che ha curato la vendita;
  3. derivi il corrispondente schema logico relazionale;
  4. sviluppi in linguaggio SQL le query per ottenere le seguenti informazioni:
  • il volume totale di vendite di un determinato punto vendita in un dato periodo di tempo
  • l’elenco dei capi presenti in un punto vendita ad una precisa data (a scopo di inventario) con la descrizione dei modelli a cui appartengono.

 
SECONDA PARTE
Il candidato risponda a due quesiti a scelta tra quelli sotto riportati.

  • In relazione al tema proposto nella prima parte, si immagini che un cliente, in un punto vendita della catena, non trovi un capo della sua taglia di un determinato modello, e che chieda al commesso di verificare se esso è presente in un altro punto vendita. Il candidato sviluppi in un linguaggio a sua scelta le pagine web che consentono all’addetto alle vendite di visualizzare, per ciascun punto vendita, il numero di capi disponibili del tipo richiesto dal cliente, specificando modello e taglia.
  • La recente disponibilità di sistemi ERP con prestazioni buone e a costi accettabili o anche opensource, dà la possibilità anche alle aziende di medio-piccole dimensioni di evolvere da sistemi gestionali tradizionali e legacy, basati su banche dati non integrate, a sistemi ERP. Il candidato illustri quali sono i punti di forza e di debolezza di un sistema ERP e le possibili problematiche relative al processo di transizione.
  • È noto che di recente la Pubblica Amministrazione ha avviato un nuovo sistema di identificazione dei cittadini per l’accesso ai servizi telematici da essa forniti. In particolare, tale nuovo sistema prevede che si possa utilizzare un unico identificativo per i rapporti con vari enti e amministrazioni centrali e periferiche dello Stato, anche noto come SPID (Sistema Pubblico per la gestione dell’Identità Digitale). A partire anche da questa esemplificazione, il candidato illustri strumenti e tecnologie utilizzati per attuare quanto previsto dal Codice dell’Amministrazione Digitale e le tecniche adottate per garantire l’Identità digitale e la riservatezza nei processi di comunicazione formali.
  • Il candidato esponga i principali tipi di rischi, legati a eventi accidentali o intenzionali, che possono dar luogo a violazioni della sicurezza di un sistema informatico aziendale connesso in rete. Dopo aver ipotizzato una possibile architettura di rete utilizzata da un’organizzazione, approfondisca uno di tali rischi e discuta anche le possibili contromisure.

_________________

Durata massima della prova: 6 ore.
È consentito soltanto l’uso di manuali tecnici (references riportanti solo la sintassi, non guide) dei linguaggi utilizzati.

È consentito l’uso del dizionario bilingue (italiano-lingua del paese di provenienza) per i candidati di madrelingua non italiana.

Non è consentito lasciare l’Istituto prima che siano trascorse 3 ore dalla dettatura del tema.

Soluzione
Titolo: Soluzione (0 click)
Etichetta:
Filename: soluzione.pdf
Dimensione: 2 MB

Le liste dinamiche

È possibile realizzare strutture dati in grado di allocare memoria solo quando è necessaria, per ogni singola informazione da memorizzare. Un esempio sono le liste dinamiche, in cui ogni elemento è associato a un puntatore contenente l’indirizzo dell’elemento successivo. Nella figura seguente, è rappresentata una lista concatenata avente quattro elementi detti anche nodi; la variabile dato contiene l’informazione, mentre la variabile puntatore punta al nodo successivo. L’ultimo nodo contiene un indirizzo speciale per il puntatore, detto NULL che non punta a nulla.

Il dato può essere una variabile elementare o un insieme di variabili elementari che, insieme al puntatore, rappresenteranno la struttura record. Particolare importanza sono alcuni tipi di liste come la pila e la coda.

In alcuni casi è utile disporre di strutture dati che hanno un solo punto di accesso per inserire e reperire i dati. Ad esempio, una pila di libri.

In una struttura di questo tipo i dati (i libri) vengono inseriti solo in cima (Push) e possono essere estratti solo dalla cima (Pop). Le strutture di questo tipo prendono il nome di Stack o LIFO (Last-In-First-Out).

Vediamo in dettaglio le procedure in C++ per la gestione di una pila (push, pop e visualizza):

pila
Titolo: pila (0 click)
Etichetta:
Filename: pila.pdf
Dimensione: 36 KB

La coda è una lista dinamica in cui l’inserimento di nuovi elementi (push) viene effettuato ad un estremo (fondo o rear) e l’estrazione degli elementi (pop) all’altro estremo (testa o front). La coda detta anche queue  realizza il principio FIFO (First-In-First-Out) perché gli elementi possono essere estratti solo nell’ordine in cui sono stati inseriti, così come avviene in una coda di auto in un garage dotato di un solo ingresso e una sola uscita.

Vediamo in dettaglio le procedure in C++ per la gestione di una coda (push, pop e visualizza): 

coda
Titolo: coda (0 click)
Etichetta:
Filename: coda.pdf
Dimensione: 36 KB

Terminiamo con una procedura che utlizza una lista e l’inserimento degli elementi avviente in modo ordinato crescente:

lista_ordinata
Titolo: lista_ordinata (0 click)
Etichetta:
Filename: lista_ordinata.pdf
Dimensione: 34 KB

La funzione ricorsiva

La ricorsione è una tecnica di programmazione, che sfrutta l’idea di suddividere un problema da risolvere in sottoproblemi simili a quello originale, ma più semplici. Un esempio è l’elevamento a potenza, infatti si avrà:
xn = x * xn-1. Ma se n = 0 allora x0 = 1. Pertanto avremo la seguente funzione ricorsiva all’interno del programma:

Altri esempi sono dati dai seguenti esercizi

1.Scrivere una funzione che calcoli il fattoriale di un numero
2.Scrivere una funzione ricorsiva che calcoli, ricorsivamente, la somma di tutti i numeri compresi tra 0 ed x
3.Si scrivano le versioni ricorsiva di una funzione: f(a,n); che calcoli il seguente valore

4.Scrivere una funzione ricorsiva (in C) che calcoli la somma degli elementi di un array a[1..n] di n ≥ 1 interi

Soluzione 1.
int fatt(int n)
{
if (n>1) return n*fatt(n-1);
else return 1;
}
Soluzione 2.
int somma(int x)
{
if (x == 0) return 0;
else return x + somma(x-1);
Soluzione 3.
float f(float a, int n)
{
if (n==1) return a – 1/a;
else return a – n/a + f(a, n-1);
}
Soluzione 4.
int somma(int a[]; int n)
{
if (n==0) return 0;
else return a[n] + somma(a, n-1);
}

La gestione delle stringhe

I comandi essenziali

#include <string> è la libreria per il riconoscimento delle stringhe e dei comandi per la gestione.
Esempio di dichiarazione di una stringa:
string nome, cognome, sesso, anni;
const char eta=12;
nome =’’Mario’’;
cognome = nome;
sesso = ’f’;
anni=eta;
è possibile inizializzare una variabile stringa all’inizializzazione
string saluto=”Salve”, saluto2=saluto;
non é possibile inizializzazione con caratteri o interi
string s=’c’;  oppure saluto1=3;
non é possibile andare a capo in un’assegnazione a costante stringa
string sbagliata=> “stringa veramente troppo,
                                lunga “;
cosí peró va bene…
string corretta=> “stringa veramente troppo, \n “
”lunga “;
\n –> si puó inserire il carattere ritorno carrello (o il tab).

OUTPUT DI STRINGHE
Una stringa si puó visualizzare inserendolo su uno stream di output
string saluto=”salve mondo!!”;
cout«saluto«endl;
Attenzione a inserire gli spazi….
string saluto=”salve”;
cout«saluto«”mondo”«endl;
pertanto la visualizzazione sarà ==>  “salvemondo”

INPUT DI STRINGHE
Si può usare l’operatore di estrazione da stream
string indirizzo;
cin » indirizzo;

la lettura ignora gli spazi iniziali e poi estrae tutti i caratteri fino ad uno spazio bianco. La quantità di memoria allocata viene automaticamente adattata.

La funzione getline fornisce un maggiore controllo (ad es. carattere terminatore della stringa)
L’istruzione cin, usata nell’esempio precedente per acquisire una stringa, presenta il problema che non acquisisce stringhe contenenti al proprio interno degli spazi. Per esempio volendo acquisire la stringa “Viale Ofanto 150” con cin>>indirizzo;
alla fine indirizzo conterrebbe solo “Viale” poiché l’acquisizione termina automaticamente in corrispondenza del primo spazio. Il problema può essere risolto in C++ usando la funzione getline nel seguente modo: getline(cin, indirizzo);

La sintassi è abbastanza semplice: getline(cin, nome_stringa_da_acquisire)
E’ importante non confondere la funzione getline con la cin.getline usata per acquisire stringhe rappresentate come vettori di char (cioè nel modo “tradizionale” del linguaggio C).

Nota: Potrebbero vericarsi anomalie nell’acquisizione di stringhe contestalizzate in variabili strutturate (array e/o matrici di stringhe), pertanto prima di acquisire la stringa con il comando di getline, si scrive la funzione fflush(stdin).

Metodi
Titolo: Metodi (0 click)
Etichetta:
Filename: metodi.pdf
Dimensione: 257 KB

Funzioni
Titolo: Funzioni (0 click)
Etichetta:
Filename: funzioni.pdf
Dimensione: 172 KB

Il passaggio dei parametri

Il passaggio dei parametri in C++

Per valore

Quando il passaggio dei parametri avviene per valore, alla funzione viene in effetti passata solo una copia dell’argomento. Grazie a questo meccanismo il valore della variabile nel programma chiamante non viene modificato.
Esempio: supponiamo di voler caricare un vettore vet di dimensione dim e successivamente vogliamo visualizzarne il contenuto, lo script sarà il seguente

Mentre, nel passaggio di parametri per indirizzo, alla funzione viene passato l’indirizzo e non il valore dell’argomento. Nel nostro esempio la variabile dim cambierebbe il suo valore qualora essa venisse letta all’interno della procedura carica. Pertanto la variabile dim (parametro) dovrà essere passata per indirizzo e non per valore.
Lo script sarà il seguente:

Creiamo ora la procedura visualizza:

Aggiungiamo una funzione che effettui la somma degli elementi con l’introduzione del parametro s che memorizzerà il valore della somma

E infine sostituiamo la funzione somma con una ricorsiva

Il grassetto evidenziato nel prototipo della funzione è dovuto al fatto che gli elementi del vettore occupano le posizioni da 0 a n-1 e pertanto la posizione dim-1 è uguale all’ultima posizione all’interno del vettore.
N.B. Se avessimo scritto la funzione nel seguente modo:

Il C++ consente un nuovo passaggio dei parametri per riferimento: il reference.
Un reference è sempre un contenitore di indirizzi, ma si può adoperare come una normale variabile. Il nuovo costrutto richiede l’uso dell’operatore & (e commerciale) che non ha più il significato di “indirizzo di” ma quello di “riferimento a”. Il reference non è una copia della variabile, ma la stessa variabile sotto un  altro nome (alias) ovvero un sinonimo.

Supponiamo di voler creare una funzione di nome minimo in grado di determinare il valore più piccolo tra due interi.

Vediamo il codice:

#include<iostream>
#include<cstdlib>
using namespace std;
void minimo (int a,int b,int& c)
{
if (a<=b) c=a;
else        c=b;
}
main()
{
int x,y,m;
cout<<“Primo numero: “;
cin>>x;
cout<<“Secondo numero: “;
cin>>y;
//passaggio per reference
minimo(x,y,m);
cout<<“Il minimo tra “<<x<<” e “<<y<<” risulta “<<m<<endl;
system(“pause”);
}

Archivi

Gennaio: 2019
L M M G V S D
« Dic    
 123456
78910111213
14151617181920
21222324252627
28293031