S1 PROGRAMMATION MOBILE
Miloud LAHMAIM
RSSP2
2023-2024
Avant propos
Objectifs : Ce module vise à faire acquérir à l’ingénieur
RSSP, les technologies de développement mobile tel que
Android et connaître les spécificités du développement mobile.
Pré-requis : POO & SQL
Modes d’évaluation :
2 Contrôles continus : 65%
Travaux & Activités pratiques : 30%
Présence, Participation…. : 5%
N.B : La programmation et un métier, alors il faut :
S’auto-former
Pratiquer
Prendre des notes
2
Plan
Introduction
Kotlin
Application mobile
3
Plan
Introduction
KOTLIN
Application mobile
4
Les appareils mobiles
5
Définition du SE mobile.
Un appareil mobile (smartphone, tablette, tv, …) nécessite un
système d’exploitation mobile et ce pour piloter tous les
dispositifs matériels et logiciels qui le composent.
Un système d'exploitation, ou OS pour Operating System,
définit un ensemble de programmes chargé d'établir une
relation entre les différentes ressources matérielles, les
applications et l'utilisateur.
Ce type de système d'exploitation se concentre sur la gestion
de la connectivité sans fil et celle des différents types
d'interface.
Il contrôle toutes les opérations de base du téléphone mobile
comme:
Option d’écran tactile, cellulaires, Bluetooth, Wifi, Appareil photo,
Lecteur de musique, D’autres fonctionnalités.
6
Les principaux SEs mobiles.
Android de Google
• Développé en 2007
• Il est devenu plateforme ouverte en 2008
• OS gratuit et complètement ouvert.
• Utilisé par des grands fabricants (Sumsung, Oppo, Xiaomi, …)
iOS d’Apple
• Dérivé de Mac OS
• Développé par Apple en 2007
• Utilisé seulement par le fabriquant Apple
• Dernière version : IOS 13 (2022)
Windows Phone de Microsoft
• Windows Phone est apparu en 2010.
• Successeur de Windows Mobile.
• Dernière version : Windows Phone 10 (2017)
• Des grands fabricants utilisent Windows il ne trouve pas beaucoup de place sur le
marché (Alcatel, Acer, …)
7
Statistiques utilisation SE mobile.
https://www.youtube.com/watch?v=3GzB_ED9CSU
8
Le SE choisi
Vu que le SE Android est :
Le plus utilisé actuellement
Complètement ouvert
alors dans ce cours on opte pour :
9
Architecture Android
10
Architecture Android : Linux Kernel
Au bas des couches se trouve Linux - Linux 3.6 avec environ
115 correctifs. Cela fournit un niveau d'abstraction entre le
matériel de l'appareil et il contient tous les pilotes matériels
essentiels comme la caméra, le clavier, l'affichage, etc.
De plus, le noyau gère toutes les choses pour lesquelles Linux
est vraiment bon, comme la mise en réseau et une vaste
gamme de pilotes de périphériques , qui simplifient
l'interfaçage avec le matériel périphérique.
11
Architecture Android : Libraries
En plus du noyau Linux, il existe un ensemble de
bibliothèques écrites en C/C++, y compris le moteur de
navigateur Web open source WebKit, la bibliothèque bien
connue libc, la base de données SQLite qui est un
référentiel utile pour le stockage et le partage des
données d'application, des bibliothèques pour lire et
enregistrer de l'audio et de la vidéo, SSL bibliothèques
responsables de la sécurité Internet, etc.
12
Architecture Android : Android Runtime (1)
Libraries Core : englobe les bibliothèques basées sur Java
qui sont spécifiques au développement Android. Des
exemples de bibliothèques dans cette catégorie incluent les
bibliothèques d'infrastructure d'application en plus de
celles qui facilitent la création d'interface utilisateur, le
dessin graphique et l'accès à la base de données. Un
résumé de certaines bibliothèques Android principales
disponibles pour le développeur Android est le suivant :
android.app : Fournit l'accès au modèle d'application et constitue la pierre angulaire de toutes les applications Android.
android.content : Facilite l'accès au contenu, la publication et la messagerie entre les applications et les composants
d'application.
android.database : Utilisé pour accéder aux données publiées par les fournisseurs de contenu et inclut des classes de
gestion de base de données SQLite.
android.opengl : Une interface Java pour l'API de rendu graphique 3D OpenGL ES.
android.os : Fournit aux applications un accès aux services standard du système d'exploitation, notamment les messages,
les services système et la communication inter-processus.
android.text : Utilisé pour afficher et manipuler du texte sur l'affichage d'un appareil.
android.view : Les blocs de construction fondamentaux des interfaces utilisateur des applications.
android.widget : Une riche collection de composants d'interface utilisateur prédéfinis tels que des boutons, des étiquettes,
des vues de liste, des gestionnaires de mise en page, des boutons radio, etc.
android.webkit : Un ensemble de classes destinées à permettre l'intégration de capacités de navigation Web dans les
13
applications.
Architecture Android : Android Runtime (2)
Il s'agit de la troisième section de l'architecture et disponible sur la
deuxième couche à partir du bas. Cette section fournit un composant
clé appelé Dalvik Virtual Machine qui est une sorte de machine
virtuelle Java spécialement conçue et optimisée pour Android.
La machine virtuelle Dalvik utilise les fonctionnalités de base de
Linux telles que la gestion de la mémoire et le multithreading, qui
sont intrinsèques au langage Java. La machine virtuelle Dalvik
permet à chaque application Android de s'exécuter dans son propre
processus, avec sa propre instance de la machine virtuelle Dalvik.
14
Architecture Android : Application Framework
La couche Application Framework fournit de nombreux services de niveau
supérieur aux applications sous la forme de classes Java. Les développeurs
d'applications sont autorisés à utiliser ces services dans leurs applications :
Gestionnaire d'activités : Contrôle tous les aspects du cycle de vie de
l'application et de la pile d'activités.
Fournisseurs de contenu : Permet aux applications de publier et de partager
des données avec d'autres applications.
Gestionnaire de ressources : Fournit un accès aux ressources intégrées non
codées telles que les chaînes, les paramètres de couleur et les dispositions de
l'interface utilisateur.
Gestionnaire de notifications : Permet aux applications d'afficher des alertes
et des notifications à l'utilisateur.
Système de vue : Un ensemble extensible de vues utilisé pour créer des
interfaces utilisateur d'application. 15
Architecture Android : Applications
La couche Applications est l’interface entre l’utilisateur et le
smartphone
Vous trouverez toutes les applications Android sur la couche
supérieure. Vous écrirez votre application pour qu'elle soit installée
sur cette couche uniquement.
Des exemples de telles applications sont les livres de contacts, le
navigateur, les jeux, etc.
16
Versions Android
17
Applications mobiles
Une application mobile est un programme téléchargeable de façon gratuite ou
payante et exécutable à partir du système d’exploitation d’un Smartphone ou
d’une tablette ou autres.
Cette application a pour la plupart du temps, une utilité bien précise pour
l’utilisateur final.
on peut retrouver des applications mobiles pour
• Jouer.
• Réserver des services.
• Acheter des produits.
• Prendre des photos.
• Communiquer.
• Consulter ses comptes bancaires.
• Les champs d’application sont infinis….
L’essentiel du temps passé sur les Smartphones est consacré à des applications
mobiles.
18
Types d’applications mobiles
19
Application NATIVE
Installée sur un Smartphone ou une tablette, elle est sur-
mesure et doit être adaptée à chaque système
d’exploitation (OS), en somme une version différente pour
chaque type de téléphone.
Ces applications permettent de tirer parti de toute la
puissance et toutes les possibilités du devise mobile :
accélération matérielle, capteurs, caméra, accès aux
contacts, au fonctions de téléphonie, etc.
20
Application WEB
Site internet mobile (dont le design ressemble à une
application), créé pour être consulté à partir du
navigateur internet d’un smartphone.
L’application web manque d’ergonomie et de plus elle ne
se sert pas de la mémoire du smartphone ce qui la place
en infériorité par rapport à l’application native.
21
Application HYBRIDE
Il s’agit d’une application mobile qui fusionne entre les
caractéristiques de web application (développement en
HTML 5) et celles de l’application native. De cette
manière, l’application mobile sera accessible sur toutes
les plateformes d’application.
Elle est multiplateforme mais offre moins de
fonctionnalités et de performances.
22
Langages de programmation mobile
Kotlin swift
23
Kotlin ou Java
24
Kotlin
Kotlin est un langage de programmation orienté objet, fonctionnel, avec un
typage statique qui permet de compiler sur la machine virtuelle Java et
JavaScript.
Son développement provient principalement d'une équipe de programmeurs chez
JetBrains basée à Saint-Pétersbourg en Russie. Le nom de ce langage vient de
l'île de Kotline situé en mer Baltique, à 25 km de St. Pétersbourg.
Google annonce pendant la conférence Google I/O 2017 que Kotlin devient le
second langage de programmation officiellement pris en charge par Android
après Java.
Au cours de cette même conférence en 2019, la société Google communique que le
développement d'applications Android deviendra de plus en plus "Kotlin-first".
Google annonce que près de 60 % des applications Android du Top 1000
embarquent du code écrit en Kotlin
Google annonce le nouveau Android 9 Pie SDK plus convivial pour Kotlin.
25
10 raisons de choisir Kotlin
1. Typage statique
2. Concis
3. Sécurisé
4. Explicite
5. Facile à apprendre
6. Capacités fonctionnelles et orientées objet
7. Entièrement interopérable avec Java
8. Construire des applications pour Serveur, Android, Navigateur et Desktop
9. Gratuit et Open Source
10. Excellent outillage
26
Kotlin : Typage statique
Kotlin est un langage de programmation à typage statique. Cela signifie que
le type de chaque variable et expression est connu au moment de la
compilation.
L’avantage du typage statique est que le compilateur peut valider les appels
de méthodes et l’accès aux propriétés sur les objets lors de la compilation, et
éviter ainsi de nombreux bugs anodins qui risqueraient autrement de se
produire au moment de l’exécution.
Bien que Kotlin soit un langage à typage statique, il n’est pas nécessaire de
spécifier explicitement le type de chaque variable que vous déclarez. La
plupart du temps, Kotlin peut déduire le type d’une variable à partir de
l’expression d’initialisation ou du contexte environnant. Ceci est appelé
inférence de type. Nous reviendrons plus tard sur cette notion.
27
Kotlin : 2. Concis
Kotlin est concis. Cela réduit
considérablement la quantité de
code passe-partout que vous avez
écrit tout le temps dans d’autres
langages orientés objets comme
Java.
Il fournit des expressions riches
pour l’exécution de tâches
courantes. Par exemple, vous
pouvez créer une classe POJO avec
les méthodes Getters, Setters,
Equals(), hashCode() et toString()
Plus que 20% de Code moins que
JAVA
28
Kotlin : Sécurisé
Kotlin est sécurisé. Il évite les exceptions NullPointerExceptions les plus
redoutées et gênantes en prenant en charge la nullabilité dans le cadre de
son système de types.
Puisque Kotlin connait quelles variables ont la valeur nullable et lesquelles
ne le sont pas, elle peut détecter et interdire les appels non sécurisés au
moment de la compilation, ce qui entraînerait sinon une exception
NullPointerException au moment de l’exécution.
Kotlin n’autorise pas la méthode call length() sur la variable nullableStr car
l’appel n’est pas sécurisé et peut conduire à NullPointerException.
Kotlin oblige les développeurs à écrire du code sécurisé en distinguant les
types nullables et non nuls.
29
Kotlin : Explicite
Kotlin est explicite. Il fera ou permettra des choses seulement si vous lui
dites de le faire. L’explicite est considéré comme une bonne chose.
Être explicite signifie être précis sur vos choix de conception et ne rien
cacher aux lecteurs ou aux consommateurs de votre code.
Voici quelques exemples d’explicités à Kotlin :
Kotlin n’autorise pas les conversions de types implicites, par exemple, int en long ou
float pour double. Il fournit des méthodes comme toLong() et toDouble() pour le faire
explicitement.
Toutes les classes de Kotlin sont finales (non héritables) par défaut. Vous devez
explicitement marquer une classe comme étant ouverte pour permettre à d’autres
classes d’en hériter. De même, toutes les propriétés et fonctions membres d’une classe
sont finales par défaut. Vous devez explicitement marquer une fonction ou une
propriété comme étant ouverte pour permettre aux classes enfant de la remplacer.
Si vous substituez une fonction ou une propriété de classe parent, vous devez l’annoter
explicitement à l’aide du modificateur override.
30
Kotlin : Facile à apprendre
Kotlin a une courbe d’apprentissage très faible. La syntaxe de
base ressemble beaucoup à Java et C. Si vous avez une petite expérience de
Java ou de tout autre langage orienté objets, vous pourrez vous familiariser
avec Kotlin en quelques heures.
31
Kotlin : POO & Fonctionnelle
Kotlin possède à la fois des fonctionnalités fonctionnelles et orientées objet.
Il dispose d’un riche ensemble de fonctionnalités permettant de prendre en
charge la programmation fonctionnelle, notamment les types fonctionnels,
les expressions lambda, les classes de données, etc.
32
Kotlin : interopérable avec Java
Kotlin est 100% interopérable
avec Java. Vous pouvez
facilement accéder au code Java
à partir de Kotlin et
inversement. Vous pouvez
utiliser Kotlin et Java dans le
même projet sans aucun
problème. Cela facilite l’adoption
de Kotlin dans vos projets Java
existants.
33
Kotlin : large gamme de plates-formes
Vous pouvez utiliser Koltin pour créer des applications
pour une large gamme de plates-formes, notamment
Serveur, Android, navigateurs et Desktop.
Android dispose d’un support officiel pour Kotlin.
Du côté du serveur, vous pouvez utiliser Kotlin avec
le framework Spring, qui offre un support complet pour
Kotlin dans Spring version 5.
Kotlin peut également être compilé en JavaScript et
en code machine.
34
Kotlin : Gratuit et open source
Le langage de programmation Kotlin, y compris le
compilateur, les bibliothèques et tous les outils, sont
entièrement gratuits et open source. Il est disponible
sous licence Apache 2 et le projet complet est hébergé
sur Github.
35
Kotlin : Excellent outillage
Kotlin dispose d’un excellent support d’outillage. Vous pouvez choisir
n’importe quel IDE Java : IntelliJ IDEA, Eclipse, Android Studio.
De plus, vous pouvez également télécharger le compilateur autonome de
Kotlin et exécuter le code Kotlin à partir de la ligne de commande.
Ou bien en ligne via le lien : play.kotlinlang.org
36
Plan
Introduction
KOTLIN
Application mobile
37
Les commentaires
38
La fonction principale
Tout programme en Kotlin doit contenir une fonction
nommée main, cette fonction est la première fonction
exécutée :
Cette déclaration utilisée en cas de
compilation par lignes de commandes
39
Types de variables
Numbers :
Integer :
Byte : 1o : de -27 à 27-1
Short : 2o : de -215 à 215-1
Int : 4o : de -231 à 231-1
Long : 8o : de -263 à 263-1
Floating-point :
Float : 4o : Significant bits = 24 Exponent bits = 8 Decimal digits = 7
Double : 8o : Significant bits = 53 Exponent bits = 11 Decimal digits = 16
Booleans : Boolean
Characters : Char Les caractères
Strings : String Les chaînes de caractères
Arrays : Array Les tableaux
40
Les constantes
Numbers :
Integer :
Decimals: 123
Longs are tagged by a capital L: 123L
Hexadecimals: 0x0F
Binaries: 0b00001011
Floating-point :
Doubles by default: 123.5 123.5e10
Floats are tagged by f or F: 123.5f
Booleans : true and false
Characters : entre simples quotes ‘c’ \t \b \n \r \‘ \” \\ \$
Strings : “Text\n”+Variable “Text\n$Variable” (Sauf si variable est Char)
Arrays : 1..5 {1,2,3,4,5}
41
Les opérateurs
Opérateurs arithmétiques : + - / * %
Opérateurs relationnels : > < >= <= == !=
Opérateurs d’affectation : = += -= *= /= %=
Opérateurs unaires : + - ++ -- !
Opérateurs logiques : && ||
42
Déclaration des variables
Nous pouvons déclarer en Kotlin une variable grâce aux mots-
clés val et var :
val (pour valeur) : La référence de votre variable sera immuable, c’est-à-dire
que vous ne pourrez pas la modifier une fois que vous l’aurez initialisée.
En fait, c’est tout simplement l’équivalent du mot-clé final en Java ! Votre
variable pointera donc toujours vers la même référence en mémoire.
var (pour variable) : La référence de votre variable sera muable, c’est-à-dire
que vous pourrez modifier le contenu de votre variable
même après son initialisation. C’est l’état par défaut de toutes les variables
en Java. Votre variable pointera donc vers une référence en mémoire, mais
celle-ci pourra être remplacée par une autre si nécessaire.
Si l’initialisation se fait lors de la déclaration, alors on peut ne pas déclarer le type, on
fait le type sera implicitement affecté selon le type de la valeur d’initialisation :
43
La conversion de type
Les types plus petits ne sont PAS implicitement
convertis en types plus grands. Cela signifie l’obligation
d’une conversion explicite en utilisant les fonctions :
toByte() toShort() toInt() toLong() toFloat() toDouble()
=>
44
Null Safety
Par défaut, les variables en Kotlin ne supportent pas la contenance d’une
valeur nulle, à moins que vous ne l’ayez explicitement autorisée.
Ainsi, pour réaliser cela en Kotlin, nous allons simplement utiliser le point
d'interrogation ? , juste après le type de la variable.
Lors d’un appel à une fonction pour une variable Null Safety, on doit suffixer la variable par
? (c-à-d que cette fonction sera appeler uniquement si la variable est # de null
45
const
Le mot-clé const précédant le mot-clé val nous permet
de définir une constante (globale) dont la valeur sera
connue au moment de la compilation. Celle-ci ne
pourra bien évidemment pas être modifiée lors de
l’exécution de votre programme (et c’est tout l’intérêt !).
46
lateinit
Si vous ne souhaitiez pas initialiser votre variable globale avec un type non-
premitif (Classe et non pas Objet) immédiatement après sa déclaration, mais le
faire un peu plus tard dans votre code (quand par exemple une page ou un écran
a terminé de charger), et si vous écrivez la ligne suivante, Kotlin refusera de
compiler :
Vous allez tout simplement utiliser le mot-clé lateinit (pour "Late-Initialized")
permettant d’indiquer à Kotlin que vous êtes sûr et certain d’initialiser la
variable en question, un peu plus tard dans votre code :
47