2.04k likes | 2.27k Views
Programmation. Avant-propos. Programmation / Avant-propos. Programmation Ensemble des activités permettant l'écriture de programmes informatiques On parle de Conception logicielle. Programmation / Avant-propos.
E N D
Programmation Avant-propos
Programmation / Avant-propos • ProgrammationEnsemble des activités permettant l'écriture de programmes informatiquesOn parle de Conception logicielle
Programmation / Avant-propos • De l'architecture machine aux langages de haut niveauxUn ordinateur est une machine permettant de traiter des informations selon des procéduresIl est doté, entre autre, • d'un processeur • d'une mémoire centrale qui interagissent CPU Mémoire
Algorithme Procédure 1 Procédure 2 Procédure 3 Procédure 4 Procédure 5 Procédure n Programmation / Avant-propos • Les procéduresUne procédure est une opération à effectuer • AlgorithmeUn algorithme est une suite de procédures à réaliser
Programmation / Avant-propos • ImplémentationLa mise en œuvre d'un algorithme consiste en la traduction en langage de programmationOn parle d'implémentation • Langage de bas / haut niveau Principe:Une recette de cuisine doit être plus ou moins détaillée en fonction de l'expérience du cuisinier
Programmation / Avant-propos • Langage de bas / haut niveau (suite)Le niveau de détail d'un algorithme est proportionnel à celui du langage de programmation: • Utilisation d'un langage de bas niveau: Nécessité de détailler l'algorithme • Utilisation d'un langage de haut niveau:Possibilité de moins détailler l'algorithme
Programmation / Avant-propos • Exemple concret: La soustraction • Acquis du module I1: • Je connais la méthode permettant de réaliser • l'addition (a+b) • la complémentation à 2 (cplt2(x)) • Algorithmiquea – b = a + (-b) = a + cplt2 (b) • J'ai maintenant la méthode permettant de réaliser la soustraction
Programmation / Avant-propos • Acquis du module I2: • J'ai à disposition: • un composant réalisant l'addition d'un registre 8 bits (add) • un composant réalisant la complémentation à 2 (C2) • Implémentation (langage bas niveau) a b c minus add C2
Programmation / Avant-propos • Acquis (futurs !) du module I3 • J'ai à disposition une fonction permettant de réaliser: • l'addition (a+b) • la négation (-b) • Implémentation (langage haut niveau) • c=a+(-b)
c b t a -2 4 -4 2 Programmation / Avant-propos langage humainement compréhensible langage compréhensible par la machine Algorithme Programme stocker a Processeur stocker b procédures traduction (compilation) réaliser -b stocker dans t addition (a,t) opérations entrée/sortie stocker dans c Mémoire
Programmation / Avant-propos • De l'algorithmique au programme • L'algorithmique est l'étape essentielle (80%) de la conception d'un programmeMAIS • L'algorithme n'est pas directement compréhensible par la machine…
Programmation / Avant-propos • Le langage de programmation: • est une traduction de l'algorithme dans un langage fini et non ambiguë • offre un certain nombre de procédures • Le compilateur • est l'outil permettant de traduire le langage de programmation en langage machine • dépend du langage utilisé • est fortement lié à l'architecture de la machine
Algorithme stocker a stocker b réaliser -b stocker dans t addition (a,t) stocker dans c Programmation / Avant-propos • Synthèse Intervention du programmeur Utilisation de logiciel de compilation Code source Programme traduction en langage de programmation read a traduction (compilation) read b t=-b c=a+t
Java Introduction
Java • Rappel sur l'étape de la compilation • Compilation: • Rôle:passage du langage de programmation vers un langage machine • Conséquences:Lors de la compilation, des liens sont établis entre: • le programme, • le système d'exploitation (Microsoft Windows, Linux, MacOS, …) • l'architecture de la machine (Intel, Risc, Motorola, …)
Java • Conséquences (suite) • Un tel programme ne peut s'exécuter que sur la plateforme pour laquelle il a été compilé ! • Nécessité de re-compiler pour les différentes plateformes ciblées • Même sur une même architecture machine, un programme est lié au système d'exploitation
Légende Indépendant de la machine Dépendant de la machine Exécutable Exécutable Exécutable Exécutable Exécutable Unix Linux Windows MacOS PalmOS Architecture 1 Risc 6000 Architecture 2 Intel x86 Architecture 3 Mac G5 Architecture 4 Intel xScale Langages compilés et limitations fichier source du programme Compilation
Portabilité • Notion de portabilitéCapacité d'un programme à être indépendant du système d'exploitation et de l'architecture machine Impossible ! Programme portable Unix Linux Windows Architecture 1 Risc 6000 Architecture 2 Intel x86
Java et la portabilité • Solution proposée:Construire une machine virtuelle: • joue le rôle de plateforme virtuelle • dépendante de l'architecture machine et du SE • opère un langage machine virtuel indépendant de l'architecture réelle et du SE réel Code source Java Programme Java Machine virtuelle SE / Architecture
Machine virtuelle Machine virtuelle Machine virtuelle Machine virtuelle Machine virtuelle Unix Linux Windows MacOS PalmOS Architecture 1 Risc 6000 Architecture 2 Intel x86 Architecture 3 Mac G5 Architecture 4 Intel xScale Pseudo-Langage interprétéSchéma du principe Java fichier source du programme Programme portable ! Compilation Programme Java
Conséquences • Avantage • Portabilité • Le programme ne nécessite pas de recompilation pour un autre couple SE/LM • Inconvénient • Vitesse d'exécution • La machine virtuelle interprète le pseudo langage pour exécuter des instructions machines
Java Présentation
monProgramme.java API JVM Plateforme matérielle Java • Java est un langage de programmation orienté objet • La plateforme Java: • Définition:Une plateforme est l'environnement matériel et logiciel dans lequel s'exécute un programme • Composition: • La JVM (Java Virtual Machine)Eléments du langage natif • La J-API (Java Application Programming Interface)Eléments supplémentaires
Java: Fiche signalétique • Propriétaire: Sun Microsystem • Naissance: fin 1995 • Signe particulier: • fortes compétences dans la créations d'applications client-serveur et Internet • Langage multi-plateforme • Domaines d'applications multiple: • bureautique, • graphique, • multimédia, • base de données, • …
Java Techniques de base
Compilation et exécution sous Java • Mon premier programme: HelloWorld ! • Remarques • Le nom de la classe principale est le nom du fichier • Une seule public class par fichier • Attention à la casse ! Hello.java publicclass Hello { publicstaticvoid main (String [] args) { System.out.println("Bonjour"); } }
Invocation d’un programme • Une classe est exécutable QUE si elle contient une méthode main() • Invocation:java Hello(Attention: pas d’extension !)
Compilation et exécution sous Java C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est 78C3-E609 Répertoire de C:\Hello 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rép(s) 5 089 857 536 octets libres C:\Hello> C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est 78C3-E609 Répertoire de C:\Hello 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rép(s) 5 089 771 520 octets libres C:\Hello>javac Hello.java C:\Hello> Répertoire de C:\Hello 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rép(s) 5 089 771 520 octets libres C:\Hello>javac Hello.java C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est 78C3-E609 Répertoire de C:\Hello 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:12 417 Hello.class 08/03/2005 14:06 142 Hello.java 2 fichier(s) 559 octets 2 Rép(s) 5 089 771 520 octets libres C:\Hello> 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:06 142 Hello.java 1 fichier(s) 142 octets 2 Rép(s) 5 089 771 520 octets libres C:\Hello>javac Hello.java C:\Hello>dir Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est 78C3-E609 Répertoire de C:\Hello 08/03/2005 14:12 <REP> . 08/03/2005 14:12 <REP> .. 08/03/2005 14:12 417 Hello.class 08/03/2005 14:06 142 Hello.java 2 fichier(s) 559 octets 2 Rép(s) 5 089 771 520 octets libres C:\Hello>java Hello Bonjour C:\Hello>
Applet • Pré requisIl faut créer une page HTML • VisualisationAutomatique, après chargement par un navigateurAttention: la JRE est requise ! <HTML> <HEAD> <TITLE> test applet Java </TITLE> </HEAD> <BODY> <APPLET code="NomFichier.class" width=270 height=200> </APPLET> </BODY> </HTML>
Java Éléments de base, Types natifs
Blocs et instructions • InstructionUne instruction se termine par ;Peut tenir sur plusieurs lignes • Exemplechar v = 'c';char u='d';
Blocs et instructions • BlocUn bloc de code est délimité par { et }Contient un ensemble d'instructions { … … instructions … … }
Types natifs • Java est un langage de manipulation d'objetsCependant, tout n'est pas objet !Il existe un nombre fini de types natifsLa taille mémoire des types natifs est constant quelque soit la plateforme !
Types natifs • boolean • description type booléen • intervalle de variationfalse ou true • espace mémoire 1 bit • exemple: boolean var = true;
Types natifs • boolean (suite) • Autre exemples boolean v1 = 2; // ERREUR boolean v2 = 'a'; // ERREUR • Remarque pas de conversion possible vers d'autre types
Types natifs • byte • description type octet signé • intervalle de variation [-128 ; +127] • espace mémoire 8 bits • exemple byte var = 0x12;
Types natifs • byte (suite) • Autres exemples byte v1 = 12; // initialisation base 10 byte v2 = 'a'; // initialisation caractère byte v3 = "toto"; // ERREUR
Types natifs • char • description caractère unicode • intervalle de variation [0 (\u0000); 65535 (\uFFFF)] • espace mémoire 16 bits • exemple char var = 'a';
Types natifs • char (suite) • Autre exemples char v1 = 12; char v2 = "ab"; // ERREUR char v3 = 0x12; char v4 = \u0014; • Remarque entouré de cotes simples
Types natifs • short • description entier court signé • intervalle de variation [-32768 ; 32767 ] • espace mémoire 16 bits • exemple short var = 1452;
Types natifs • int • description entier signé • intervalle de variation [-2147483648 ; 2147483647 ] • espace mémoire 32 bits • exemple: int v = -123;
Types natifs • long • description entier long • intervalle de variation [-9223372036854775808 ; 9223372036854775807 ] • espace mémoire 64 bits • exemple: long v = 1524454;
Types natifs • float • description virgule flottante simple précision • intervalle de variation [1.401e-045 ; 3.40282e+038 ] • espace mémoire 32 bits • exemple float v = 123.45;
Types natifs • double • description virgule flottante double précision • intervalle de variation [2.22507e-308 ; 1.79769e+308 ] • espace mémoire 64 bits • exemple double v = 123.45;
Attention • L'affectation numérique peut générer des ambiguïtés ! • Problématique:Quel est le type des variables suivantes: 'a' char 0x12 int 123 int 123.45 double ?
Attention • Problématique (suite)long v = 922337203685477508; // ERREURcar la valeur numérique est de type interreur de type 'out of range' car la borne sup. du type int( v >> 2147483647 ) • Effet perverslong v = 152454*2243*100;L'évaluation numérique de v est 34195432200 (<BS(long))Or, l'instruction System.out.println("v=" + v);Affiche v=-164306168
Valeur numériques • QuestionComment créer une valeur numérique de type long ?? • Suffixe numérique • type long: nombrel ou nombreL • type float: nombref ou nombreF • type double: nombred ou nombreD
Valeur numériques • Exemples:long v = 922337203685477508L;long v = 152454L*2243*100;System.out.println("v=" + v); Affiche v=34195432200
Les variables • Une variable possède: • un identifiant • un type • une valeur
Les variables • Déclaration simpletype identifiant ; • Déclaration multipletype identifiant_1, identifiant_2(, …) ; • Déclaration affectation simpletype identifiant = valeur; • Déclaration affectation multipletype identifiant_1 = valeur_1, identifiant_2 = valeur_2(, …) ;