Tipologie di applicazioni software

Questo è il post #3 di 12 nella serie “Fondamenti di Programmazione 101

Tipi di Applicazioni

I programmi software possono essere classificati in categorie sulla base del tipo di applicazione. In questo articolo analizzeremo in dettaglio le varie tipologie all’interno delle quali la maggior parte dei programmi software ricade.

Applicazioni standalone

Fondamentalmente un applicazione standalone è un applicazione che può funzionare offline, quindi che non richieda una connessione a Internet per funzionare. La conseguenza principale è che, con un applicazione di questo tipo, dovremo fornire tutte le risorse che la nostra applicazione richiede. Queste risorse possono spaziare da immagini, come le icone, a files per salvare dati o configurazioni specifiche per l’applicazione.

Applicazione basate su architettura client-server

Client-Server è un modello che possiamo usare per creare applicazione distribuite, il che vuol dire che le applicazione sono eseguite su computers diversi.

L’idea dietro questo modello è che abbiamo almeno due computers coinvolti. Uno dei quali ha il ruolo del server e tutti gli altri avranno il ruolo del client. Clients e server hanno la necessità di comunicare fra loro ed è sempre il client che inizia la comunicazione.

Applicazione Web

In questa categoria rientrano la maggior parte dei software prodotti oggigiorno.

Un applicazione Web è una forma particolare del modello client-server, in questo caso il client interagisce con l’utente attraverso una pagina Web. Il server è responsabile per produrre i risultati che l’utente vedrà ed accetta e processa i dati che l’utente inserirà.

Vediamo un esempio di come questo modello funziona:

  • Supponiamo di essere su un sito e ci viene richiesto d’inserire la nostra email. Inseriamo i dati richiesto e quando premiamo il tasto Invia, le informazioni che abbiamo digitato vengono inviate al server:
    Esempio di chiamata in una Web application - Parte 1
  • Il server richiede le informazioni salvate sul database riguardo lo specifico utente:
    Esempio di chiamata in una Web application - Parte 2
  • Il database restituisce le informazioni riguardo l’utente:
    Esempio di chiamata in una Web application - Parte 3
  • L’applicazione server verifica l’indirizzo email fornito e se viene verificato, viene prodotta una pagina Web per l’utente e inviata al computer client così che il browser può visualizzare la pagina:
    Esempio di chiamata in una Web application - Parte 4

Applicazioni Mobile

Quando parliamo di applicazioni mobile, di solito si fa riferimento a un programma che è stato progettato per essere eseguito su un dispositivo mobile come per esempio uno smartphone.

Questi dispositivi hanno delle caratteristiche di cui dobbiamo tenere in considerazione quando scriviamo un applicazione.

Per esempio:

  • La dimensione dello schermo è normalmente inferiore a quella di un computer
  • Lo schermo può essere rotato secondo un orientamento o landscape o portrait
  • L’interazione con il dispositivo è touch nella maggior parte dei devices mobile

Inoltre, l’applicazione può utilizzare altre funzionalità che di solito non sono presenti su classici computers quali per esempio, il GPS, inviare SMS, avere informazioni legate all’accelerometro, etc.

Applicazioni Distribuite

Un applicazione distribuita è un applicazione che non viene eseguita su un singolo computer, ma invece consente di eseguire diversi parti di un applicazione su macchine differenti che comunicano fra loro attraverso una rete.

Questo modello è simile a quello client/server ma non vi è una distinzione fra i ruoli.

Una delle ragioni per utilizzare questo modello è quando un applicazione richiede un alto utilizzo di risorse e un singolo computer non sarebbe sufficiente. In questo caso, l’idea è quella di utilizzare la potenza di calcolo di più computers e distribuire il carico di calcolo su tutte le macchine coinvolte. Ogni computer si occupa del calcolo di una parte e comunica con gli altri computers in modo da comunicare i risultati della computazione.

Un esempio di questo modello è dato dall’applicazione SETI@home per trovare intelligenza extraterrestre nello spazio.

Progetto Seti@Home

Reti peer-to-peer

Una rete peer-to-peer, meglio conosciuta come P2P, è una rete di computers che sono tutti uguali partecipanti alla rete.

Ogni computer nella rete è chiamato un nodo o un peer e il computer mette a disposizione una porzione delle proprie risorse, a tutti i partecipanti nella rete.

Rappresentazione di una rete peer-to-peer

Applicazioni Cloud-based

L’idea dietro le applicazioni basate sul cloud è quello di allontanarsi dalla pratica di hostare i propri servers e le risorse necessarie per eseguire l’applicazione e invece acquistare servers e risorse da fornitori con grandi data centers in modo da usare la loro potenza computazionale. Alcune fra le soluzioni più conosciute sono Awazon Web Services, Google Cloud, Heroku, ecc.

Vediamo alcuni dei vantaggi nell’adottare un approccio cloud-based:

  • Riduzione dei costi Considerato che quando le nostre applicazioni sono deployate su cloud-based servers, non avremo bisogno di acquistare alcun computer che funga da server e non dovremmo spendere soldi ne tempo per mantenere questo computer. Se la nostra applicazione salva dei dati (cosa molto probabile :D), possiamo delegare al provider la responsabilità di creare backups in modo da non rischiare di perdere dati.
  • Scalabilità Con il termine scalabilità si fa riferimento alla capacità di adattarsi al carico di lavoro a cui un applicazione è sottoposta. Quando usiamo una soluzione cloud-based, possiamo, semplicemente con qualche click, pagare per aggiungere più potenza di calcolo ai nostri servers e se la domanda diminuisce, possiamo invece ridurla in modo da pagare solo per quello che in effetti usiamo. Il processo descritto può anche essere automatizzato in modo da adattarsi automaticamente sulla base delle esigenze del momento.

Modelli di servizi cloud

All’interno della categoria delle applicazioni cloud-based abbiamo delle sottocategorie ci cui è importante essere a conoscenza.

Analizziamo brevemente le varie categorie che fanno parte delle applicazioni cloud-based:

  • INFRASTRUCTURE AS A SERVICE (IAAS) Questo è il layer che gestisce risorse hardware come servers, storage, firewalls e così via. Investire in servizi di questo layer significa non avere la necessità di comprare hardware, di spendere tempo sulla configurazione e spazio per lo storage di dati verrà gestito per noi.

  • PLATFORM AS A SERVICE (PAAS) In questo layer possiamo trovare, fra le altre cose, applicazioni che funzionano come servers o anche ambienti già configurati specifici per un linguaggio di programmazione.
    Benefici dei PAAS

    • “Time to market” più veloce
      Usare PAAS ridurrà drammaticamente il tempo per acquisire hardware, installare e configurare il software.
    • Costi ridotti Senza il bisogno d’investire tempo e denaro per acquisire hardware, configurarlo, installare software e assicurare che tutti i software sono aggiornati, i costi che dovremmo affrontare saranno notevolmente ridotti.
  • SOFTWARE AS A SERVICE (SAAS) Questo layer fornirà ogni cosa, l’hardware, il software del server così come le applicazioni. La sola cosa che avremo bisogno di fare sarà quella di configurare tutto nella maniera che noi vogliamo. Google Apps è uno dei più famosi esempi di SAAS. Benefici dei SAAS

    • Una minore manutenzione dei software
    • Possibilità di avere informazioni condivise fra più applicazioni

Modelli di Servizi Cloud