Vous êtes sur la page 1sur 27

INF3044

Programmation mobile
Aurélien Texier
texier@esiea.fr

2018-2019
Programmation mobile
• On estime à 1,5 milliard le nombre de smartphones vendus en 2017 dans le
monde.
• 2 principaux OS :

• Le nombre d’applications mobiles disponibles est de plus de deux millions


sur les plateformes de téléchargement d’Apple et d’Android.
• Les ventes d’applications mobiles représentent 77 milliards de dollars pour
l’App Store et le Google Play Store.
INF3044 – Programmation mobile 2
Détails du cours

• Objectif : Apprendre à créer une application mobile Android.

• Pré-requis : Base en programmation/algorithmique (INF1031->INF2032).


Base en programmation orienté objet (INF3034).

• Organisation du cours : 21h en face-à-face.


Projet de développement d’une application.

INF3044 – Programmation mobile 3


Android
Présentation et histoire

INF3044 – Programmation mobile 4


Android – Quelques chiffres
• 87,5% - Au 3ème trimestre 2016, Android était l’OS mobile le plus utilisé au monde
avec environ 87,5% des parts du marché (contre 12,1% pour iOS).

• 9.0 – Le 7 mars 2018, la version 9.0 d’Android (Pie) est annoncée et sort le 6 août
2018.

• 3 500 000 - En 2017, le Google Play Store comptait environ 3,5 millions
d’applications contre seulement 2,1 millions d’applications pour l’App Store.

INF3044 – Programmation mobile 5


Android - Histoire
• 2003
• Création de la start-up « Android Inc. »
Objectif initial : Développer un OS "intelligent" pour appareil photo numérique.
Prise de conscience du marché des autres devices.
• 2005
• Juin : Rachat de la société par Google.
• 2007
• Novembre : Création de l’Open Handset Alliance.
• 5 Novembre : Sortie de la version beta d’Android.
Le 5 novembre est retenu comme l’anniversaire d’Android.
• Création du logo : Bugdroid.
• 2010
• Lancement de la gamme Nexus.  Pixel (2016)

INF3044 – Programmation mobile 6


Android - Versions
| | | | | | | | | | | | | | |
|
| 23 Sept. 2008 | 30 Avril 2009 | 26 Oct. 2009 | 6 Déc. 2010 | 19 Oct. 2011 | 3 Sept. 2013 | 5 Oct. 2015 |
21 Août 2017
| Version 1.0 | Version 1.5 | Version 2.0 | Version 2.3 | Version 4.0 | Version 4.4 | Version 6.0 |
Version 8.0
| | Cupcake | Eclair | Gingerbread | Ice Cream | Kitkat | Marshmallow |
Oreo
| | | | | | | | Sandwich | | | | |
|
5 Nov. 2007 9 Fév. 2009 | 15 Sept. 2009 | 20 Mai 2010 | 22 Fév. 2011 | 16 Juil. 2012 | 3 Nov. 2014 | 22 Août 2016
|
Version Bêta Version 1.1 | Version 1.6 | Version 2.2 | Version 3.0 | Version 4.1 | Version 5.0 | Version 7.0
|
Donut | Froyo | Honeycomb | Jelly Bean | Lollipop | Nougat
|
| | | | | | |
| | | | | |
| | | | | |

INF3044 – Programmation mobile 7


Android - Versions

INF3044 – Programmation mobile 8


Android - Architecture
• L’architecture Android est organisée en 5 couches :
• Le noyau Linux
• Des bibliothèques logicielles
OpenGL/ES
SQLite
…
• Une machine virtuelle Java : Dalvik (avant v5.0)
Android RunTime (ART) depuis la version 5.0
• Un Framework
• Des applications
INF3044 – Programmation mobile 9
Android - Développement
• Langage de programmation
• Applications développées en Java
• Utilisation du SDK Android
• Possibilité de développer en C/C++
• Android Native Development Kit (NDK)
Permet de créer du code commun entre
plusieurs applications,
des applications Android & iOS.
• Création d’un Android Package (APK)
• Possibilité de poster l’application sur le Google play
• Anciennement Android Market
INF3044 – Programmation mobile 10
Android
Le langage Java

INF3044 – Programmation mobile 11


Le langage Java
• Langage Orientée Objet
• Syntaxe assez proche du C/C++

• Contient un garbage collector (pas de gestion de la mémoire)


• Nécessite un environnement de développement :
JRE (Java Runtime Environment) : contient la machine virtuelle Java et les
bibliothèques de base du langage.
JDK (Java Development Kit) : contient le JRE et un ensemble d’outils pour compiler et
déboguer le code Java.

INF3044 – Programmation mobile 12


Le langage Java
Quelques changement par rapport au C/C++

• Pas de .c/.h -> .java

• Une seule classe public par .java ayant le même nom que le fichier.

• La fonction main doit être une méthode public static d’une classe.
1 public class MonApplication
• Compilation : 2
3
{
public static void main(String[] args)
javac MonApplication.java 4 {
5 System.out.println("Hello World");

• Lancement :
6
7 }
}

java MonApplication

INF3044 – Programmation mobile 13


Le langage Java
Les variables
Il existe deux types de variables : les primitives et les objets.
• Les primitives : int, float, boolean, …
• Les objets avec le mot clé class. Ces classes sont des types complexes composés d’une ou
plusieurs autres variables appelées attributs ou variables membres.
Exemple : 1 // Déclaration de la classe CMagician
2 public class CMagician
3 {
4 // Déclaration des attributs ou membre de la classe
5 public int m_mana;
6 public float m_magicalPower;
7 // Les membres peuvent être d’autres classes
8 public CSpell m_magicSpell;
9 }

INF3044 – Programmation mobile 14


Le langage Java

Les classes
• En plus des membres, les classes peuvent contenir des instructions appelées méthodes.

1 public class CMagician


2 {
3 public int m_mana; /**< remains mana */
4 public float m_magicalPower; /**< power for spell */
5 public CSpell m_magicSpell; /**< spell of the magician */
6
7 public boolean useMana(int p_mana)
8 {
9 if(p_mana > m_mana)
10 return false;
11 m_mana -= p_mana;
12 return true;
13 }
14 }

INF3044 – Programmation mobile 15


Le langage Java

Les classes
• Parmi les différents types de méthodes il en existe un particulier. Il s’agit des constructeurs.
Ces méthodes construisent le type de la classe en question et renvoient un objet de ce type.
1 public CMagician(float p_initalPower, CSpell p_spell)
2 {
3 m_mana = 0;
4 m_magicalPower = p_initialPower;
5 m_spell = p_spell;
6 }

On peut ensuite construire (instancier) un magicien comme suit :

1 CMagician mage = new CMagician(7, fireBall);

INF3044 – Programmation mobile 16


Le langage Java

L’héritage
• Utilisation du mot-clé extends pour indiquer qu’un classe hérite d’une autre.

1 public class CCharacter


2 {
3 int m_life;
4 CWeapon m_weapon;
5 }

1 public class CMagician extends CCharacter { ... }

1 public class CDarkMagician extends CMagician { ... }

INF3044 – Programmation mobile 17


Le langage Java

Les packages
• Moyen d’organiser ses classes, un peu à la manière des namespaces (C++).
1 package nomDuPackage;

1 package a.b.c.d;
2
3 public class CCharacter
4 { ...
5 }

1 a.b.c.d.CCharacter;
import a.b.c.d.*;
2
3 CCharcacter monPerso = new a.b.c.d.CCharacter();
CCharacter();

INF3044 – Programmation mobile 18


Le langage Java

Portée d’une classe, méthode ou variable


• Il existe 4 modificateurs d’accessibilité. Trois sont définis par des mots-clés et le
quatrième est le modificateur vide.

Mot-clé Portée Remarque


Accessible par tout objet Il ne peut y avoir qu’une seule classe publique
public
par .java qui doit porter le nom du fichier
Accessible par toutes les classes du même package Les variables ne sont pas accessibles aux classes
"rien"
filles définies dans un autre package
Accessible que dans les classes filles et celles du
protected Il est fortement conseillé de déclarer les
même package
membres d’une classe en protected ou private et
Accessible que dans la classe dans laquelle elle est de créer des "getter" et "setter".
private
définie

INF3044 – Programmation mobile 19


Le langage Java
Classes abstraites
• abstract
Devant une classe, indique que celle-ci ne pourra pas être instanciée.
1 // La classe CCharacter n’a pas d’intérêt à être instanciée
2 public abstract class CCharacter
3 {
4 private int m_life;
5 private CWeapon m_weapon;
6 }

1 // La classe CMagician, elle, a intérêt à être utilisée directement,


2 // le magicien étant lui-même un personnage
3 public class CMagician extends CCharacter { ... }

INF3044 – Programmation mobile 20


Le langage Java
Classes abstraites
• abstract
Une méthode peut aussi être abstract, cela signifie qu’elle n’a pas besoin d’être
développée. Par contre, toutes les classes héritant de la classe contenant cette méthode
devront décrire une implémentation de celle-ci.
 Correspond à une méthode virtuelle pure

INF3044 – Programmation mobile 21


Le langage Java
Les interfaces
• Pas d’héritage multiple en Java.
 Utilisation des interface.
Il s’agit d’une classe sans membres (hors statique) ni constructeur dont toutes méthodes
sont abstraites.

1 interface CCharacter
2 {
3 ...
4 }

INF3044 – Programmation mobile 22


Le langage Java
Les interfaces
• Pas d’héritage multiple en Java.
 Utilisation des interface.
On n’hérite pas d’une interface, on l’implémente.

1 interface CCharacter { ... }


2
3 class CMagician implements CCharacter { ... }

Possibilité d’implémenter plusieurs interface (car pas d’héritage multiple en Java).

INF3044 – Programmation mobile 23


Le langage Java
Autres mots-clés
• this et super
Ils désignent respectivement des références sur l’instance courante et sur la classe mère.
1 class CMagician {
2 void attack(int p_damage) { ... }
3 }
4
5 class CDarkMagician extends CMagician {
6 void attack(int p_damage) { ... }
7
8 void magicAttack(int p_damage)
9 {
10 super.attack(p_damage); // Appel de la méthode attack() de CMagician.
11 this.attack(p_damage); // Appel de la méthode attack() de CDarkMagician.
12 }
13 }

INF3044 – Programmation mobile 24


Le langage Java
Autres mots-clés
• static
Utilisable pour des variables et méthodes (entre autres), il indique la non-appartenance à
une instance particulière de la classe.

1 public class CMagician


2 {
3 public static int m_maxMana;
4 ...
5 }

1 CMagician gandalf, saroumane;


2 gandalf.m_maxMana = 73;
3 // saroumane.m_maxMana == 73

INF3044 – Programmation mobile 25


Le langage Java
Autres mots-clés
• final
Devant une variable, indique que celle-ci ne pourra plus être modifiée après son initialisation.
Il peut être couplé au mot-clé static pour créer une constante liée à la classe.
Par convention, on écrit ces constantes en majuscule.

1 public class CMagician


2 {
3 public static final int MAX_MANA = 73;
4 ...
5 }

1 CMagician harryPotter;
2 harryPotter.MAX_MANA = 100; // Interdit !!!

INF3044 – Programmation mobile 26


Le langage Java
Autres mots-clés
• final
Devant une méthode, indique que celle-ci ne pourra pas être redéfinie dans une classe fille.

Devant une classe, indique que celle-ci ne pourra pas être dérivée. Si on souhaite le faire, il
faudra l’encapsuler dans une autre classe.

INF3044 – Programmation mobile 27

Vous aimerez peut-être aussi