QUANDO: Ottobre 2019 – Marzo 2020
DOVE: Palermo
COSA: Sviluppo Android (linguaggio Kotlin)
INSEGNANTE: Sasa Sekulic

PROGRAMMA DEL CORSO

Sistemi di controllo versione e come usarli (Git)

Anche lavorando su un’applicazione semplice, succede di sbagliare e introdurre dei bachi. Sarebbe comodo poter tornare indietro nel tempo e riprendere una versione più vecchia. I sistemi di controllo versione fanno proprio questo: assegnano versioni al nostro codice e ci lasciano la possibilità di aggiungere commenti. Lavorando su un sistema complesso, con più persone in team, è indispensabile avere delle versioni diverse su cui ogni membro del team possa lavorare senza calpestare i piedi agli altri e, nel momento opportuno, aggiungere il nuovo codice a quello degli altri.

Principi di sviluppo moderno: SOLID, Clean Architecture, Reactive programming, Functional programming

Per sviluppare sistemi complessi servono linee guide su come scrivere codice mantenibile ed estendibile. Il codice scritto oggi, anche se sempre Object Oriented Programming, è diverso da come si scriveva 5, 10, 20 anni fa – grazie ad alcuni principi come SOLID e Clean Architecture. Inoltre, di recente stanno diventando sempre più popolari altre filosofie di sviluppo, come reactive programming e functional programming. Queste nuove filosofie possono coesistere insieme a OOP, e sapere quando e come usarle diventa sempre più importante.

OOP Design pattern di base

Sono passati 25 anni dalla pubblicazione del cosiddetto Gang of Four, “Design Patterns: Elements of Reusable Object-Oriented Software”, che elenca alcune soluzioni per problemi incontrati durante lo sviluppo OOP. Alcuni sono usati di rado, altri invece- come Adapter, Singleton, Factory, Builder ecc. – stanno alla base di ogni framework odierno. Ce ne sono altri ancora, come Dependency Injection e Inversion of Control, che sono la base per rendere l’architettura di un’app estendibile.

Componenti base di Android: Application, Activity, Fragment, Service

Alcuni componenti sono più importanti degli altri, ma la cosa più importante (e più complicata) da sapere è quando usarli e com’è il loro ciclo di vita. Il ciclo di vita si riferisce agli eventi di sistema che ci arrivano e che decidono quale schermata l’utente sta guardando, e se la nostra app è effettivamente attiva e visibile oppure no.

Layout e widget

Disegnare una schermata non è molto complicato, ma dobbiamo conoscere i componenti più usati (widget): TextView, EditText, ImageView, Button, RecyclerView, Toolbar, Menu. Poi dobbiamo anche disporli sullo schermo usando vari tipi di layout come LinearLayout, RelativeLayout e ConstraintLayout. Si devono anche aggiungere i colori, lo sfondo, gli stili, i temi…

Pattern architetturali per le view: MVP, MVVM, Android ViewModels + LiveData

Una volta fatti i layout, si devono in qualche maniera collegare al codice. Per esempio, se abbiamo caricato i dati usando qualche chiamata di rete, adesso dobbiamo anche visualizzarli. Per aiutarci a lavorare su sistemi complessi, ci sono alcuni pattern architetturali per le viste che possiamo usare. Questo processo di caricamento dei dati deve essere collegato anche al lifecycle dell’app. Per esempio ricaricare i dati ogni minuto di una pagina con le notizie non ha senso se la nostra app non e’ visibibile perchè consumerebbe inutilmente dati e batteria.

Asynchronous functions

Quando chiamiamo una funzione per ottenere un risultato, non sempre i risultati arrivano subito. Per esempio, caricare dati tramite internet può richiedere alcuni secondi, e le nostre applicazioni non possono bloccarsi mentre aspettano che le risposte arrivino. Su Android, dopo 5 secondi appare il messaggio “Application not responding”. Come gestire le situazioni del genere? Usando funzioni con risultati asincroni. Su Kotlin la soluzione base si chiama coroutines, ma è anche molto utilizzata RxJava, una libreria di reactive programming.

Fare le chiamate di rete

Quasi ogni app deve fare delle chiamate di rete, di solito usando servizi RESTful (Representational State Transfer). La libreria più utilizzata è Retrofit, che si appoggia alla libreria OkHttp. Il formato di payload (dati nella risposta) ormai standard per le app è JSON (JavaScript Object Notation). Usare una API di un servizio non è complicato, ma deve essere collegata al meglio, se no l’app non funziona.

Le basi dati su Android

Ormai uno standard stabilito su Android è Room, la base dati di Google. Si può usare usando RxJava e coroutines, e si abbina bene ai ViewModel e LiveData. Si faranno anche le basi di base dati (primary key, normalizzazzione) e basi di SQL.

Testare un’app

Per avere un’app di qualità, si deve scrivere un codice di qualità. Come si fa? Oltre ad usare l’architettura giusta per quello che ci serve, e attenersi ai design pattern architetturali di base, occorre anche scrivere dei test automatizzati. Ci sono vari tipi di test (unit test, integration test, functional test, UI test) che possiamo utilizzare nei momenti opportuni. Inoltre c’è anche una modalità di sviluppo chiamata Test Driven Development in cui si scrivono prima i test e poi il codice necessario per farli passare, e niente di più. Insomma sapere come scrivere il codice testabile e quando effettivamente scrivere i test è di fondamentale importanza.

Il prossimo corso Android si terrà a Settembre 2020

Coding a Vision è una Talent School, il corso è gratuito. Iscriviti ora per effettuare il test d’ingresso!