Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours programmation

Débuter avec le langage Delphi étape par étape

Débuter avec le langage Delphi étape par étape
Participez au vote ☆☆☆☆☆★★★★★

Débuter avec le langage Delphi étape par étape

…

Delphi est un environnement de programmation largement employé pour créer des applications Windows.

Delphi permet d'utiliser le langage Pascal

Comme beaucoup de logiciels, Delphi existe en plusieurs versions (Delphi1,...,

Delphi7, Delphi 2006,…, Delphi 2010, Delphi XE)

Le présent cours utilise le Borland Delphi 7

Le but du cours est d’apprendre la programmation des Bases de données avec Delphi

Eléments de programmation avec Delphi

Palette des composants Barre d’outils Barre de menus

…

Delphi permet de créer une seule application à la fois, ouverte en tant que projet

Un projet est l’état non compilé d’une application

Une application Windows est constituée de fenêtres. Le projet Delphi qui génère l’application contient donc ces fenêtres : les fiches

A chaque fiche est adjointe une seule unité ( code en langage Pascal qui décrit le

contenu de la fiche (boutons, menus, cases à cocher,….) et son fonctionnement ( ce qui

se passe lorsqu’on clique un bouton ) et bien d’autres choses)

: il est possible d’utiliser des unités qui ne sont associées à aucune fiche

Un projet Delphi est constitué d’un fichier projet ,d’unités et de fiches

Le fichier projet porte l’extension .DPR

Chaque fiche est stockée dans un fichier avec l’extension .DFM

Chaque unité est stockée également dans un fichier portant l’extension .PAS

La fiche et son unité associée portent le même nom de fichier (Delphi ne demande ce nom qu’une seule fois et l’utilise pour l’unité et pour la fiche)

: si la fiche est stockée dans un fichier Somme.DFM, son unité associée sera stockée dans le fichier Somme.PAS

Lors de la compilation, chaque fiche (fichier .DFM) avec son unité (fichier .PAS) seront transformées en un seul fichier (.DCU)

Tous les fichiers .DCU seront transformés en un seul fichier exécutable .EXE qui représente l’application Delphi générée.

: Le fichier .EXE porte le même nom que le fichier projet .DPR

Extension Description

DPR Delphi Project : contient l’unité principale du projet

DFM Delphi ForM (fiche Delphi) : contient la structure de la fiche

PAS PAScal : contient une unité écrite en Pascal

DCU Delphi Compiled Unit (unité compilée Delphi ) : forme compilée et combinée d’un .PAS et d’un .DFM optionnel

~??? Fichier de sauvegarde temporaire

EXE EXEcutable : le résultat final de la compilation. Il est seul suffisant pour le fonctionnement de l’application

RES RESource : contient les ressources de l’application tel que son icône.

DOF

DSK

CFG

Ces fichiers contiennent les options du projet , les options d’affichage

Fichier projet

.DPR

Unité 1

.PAS

Fiche1

.DFM

Fichier 1

.DCU

Unité 2

.PAS

Fiche2

.DFM

Fichier 2

.DCU

Fichier 3

.DCU

Unité 3

.PAS pas de fiche associée

Fenêtre 1 Fenêtre 2

Application fichier .EXE

Projet Compilation Application

Le texte du fichier projet (.DPR) est généré entièrement par Delphi ( et non pas par le programmeur). Il représente le programme principal

Pour afficher le texte de ce fichier, deux méthode:

Menu Voir | Unités (CTRL+F12) puis sélectionner le nom du fichier projet

Menu Projet| Voir le source

  1. En tête du programme
  2. Le bloc USES précise la liste des unités utilisées par le projet
  3. Bloc des instructions (entre

Begin et End) précise les premières instructions à exécuter au démarrage de l’application

  • Le texte entre { et } en bleu représente un commentaire (ignoré par Delphi)
  • Le texte entre { et } en vers et précédé de $ représente une directive de compilation

Delphi permet de créer des applications Windows ( possibilité de l’interaction avec l’utilisateur à l’aide des: fenêtres, boutons, case à cocher, menus, listes, …..)

Chaque élément d’une fenêtre est dit : Composant et il est accessible à partir de la palette des composants

Chaque fiche, chaque composant possède une liste de propriétés et une liste d’événements

Les propriétés sont des paramètres réglables pour un composant. Par exemple : les dimensions, les couleurs, les polices, le titre d’une fenêtre, le texte d’un bouton,…. une partie d’événements est provoquée lors de l’utilisation des composants et des fenêtres tel que les clics et les mouvements de la souris, les frappes de touches.

D’autre partie d’événements est provoquée lorsqu’une fenêtre soit visible, invisible, lorsqu’une case à cocher est cochée ou un élément d’une liste est sélectionné.

Une unité est un fichier séparé pouvant contenir des constantes, des types, des variables et des procédures et fonctions disponibles pour la construction d’autres applications.

L’utilisation des unités permet de partager des données et des procédures et fonctions entre plusieurs applications.

UNIT Nom_unite;

INTERFACE

[ Déclarations publiques ]

IMPLEMENTATION

[ Déclarations privées ]

[ Corps des procédures et des fonctions ]

[INITIALIZATION ]

[ Code d’initialisation ]

[FINALIZATION ]

[ Code de finalisation ]

END.

  1. le nom de l’unité figure dans la partie USES d’un programme ou d’une unité qui utilise cette unité.
  2. Tout ce qui est placé ici est visible pour toute entité utilisant l’unité
  3. Cette partie définit les procédures et les fonctions déclarées dans la partie interface. On peut également y définir des types, constantes, variables et sous programmes locaux.
  4. Ce code s’exécute avant la première action du pgm utilisant l’unité
  5. Ce code s’exécute avant la fin du pgm utilisant l’unité

Unit formes ;

Interface

Const pi=3.14 ;

Function surfCercle(R: Real): real;

Function PerimRect (Long, Larg:Real):Real;

Implementation

Function surfCercle; {Pas besoin de répéter les paramètres}

Var s: real;

Begin

s:=R*R*Pi;

Result :=s;

End ;

Function PerimRect;

Begin

result :=(long+larg)*2;

End ;

End.

Eléments de programmation avec Delphi réalisé par Khadraoui.F 20

…….

Uses formes;

Var A,B,C,P: real;

…….

P:=PerimRect(A,B);

…….

Label.caption := FloatToStr ( surfCercle(c) );

….

Composant

Interface partie visible du composant

Propriétés

Caractéristiques visibles ou invisible du composant

Méthodes Procédures et Fonctions modifiant l’état du composant

Évènements

Réponses à des Evénements impliquant le composant

Deux moyens pour modifier les propriétés d’un composant :

  • Manipulation visuelle : par exemple pour dimensionner un composant, il faut le sélectionner puis déplacer les poignées avec la souris
  • Par inspecteur d’objets :

Le composant

La propriété

La valeur de la propriété

Pour utiliser une propriété d’un composant dans du code pascal (précisément dans une procédure interne à la fiche qui contient le composant) il faut écrire :

  • Le nom du composant ( sa propriété Name)
  • Un point (.)
  • Le nom de la propriété

Button2 . Height := 45;

Le composant La propriété

Les méthodes sont des procédures et des fonctions internes aux composants.

Les méthodes font tout le travail d’un composant.

De même qu’une propriété, une méthode doit être précédée par le nom du composant qu’il manipule.

Button2 . Hide ;

Button2 . Show ;

Pour masquer le bouton

Pour réafficher le bouton

La liste des évènements est spécifique à chaque composant.

Elle est listée dans l’onglet évènement de l’inspecteur d’objets. il est possible d’assigner une procédure à un des évènements d’un composant, comme suit :

 Sélectionner le composant qui déclenche l’évènement

 Aller à l’onglet évènement de l’inspecteur d’objets

 Effectuer un double clic dans la zone blanche en face du nom de l’évènement à traiter

 la procédure sera générée

La fiche est un composant conteneur (peut contenir d’autres composants)

La fiche ne se crée pas depuis la palette des composants

Pour créer une nouvelle fiche (Ajoutée au projet ouvert) :

  • l’outil Nouvelle fiche de la barre d’outils
  • menu Fichier | Nouveau | Fiche

Pour retirer la fiche du projet :

  • Menu voir | Gestionnaire de projet
  • La commande Retirer

Pour afficher la liste des fiches du projet :

  • MenuVoir | Fiches

Propriété Type description

Name String Indique le nom du composant utilisé dans le code de l'application

Caption String Spécifie une chaîne de texte permettant à l'utilisateur d'identifier le composant. Pour la fiche le texte s’affiche sur sa barre de titre

Height Integer Indique la taille verticale du composant, exprimée en pixels.

Width Integer Détermine la taille horizontale, exprimée en pixels, du composant ou de la fiche.

Left Integer Détermine la coordonnée horizontale, exprimée en pixels relativement à la fiche, du bord gauche d'un composant.

Color Tcolor Indique la couleur d'arrière-plan du composant.

Font Tfont Détermine les attributs du texte écrit au-dessus ou dans le composant.

Hint String Contient la chaîne de texte (conseil ou info bulle) apparaissant lorsque l'utilisateur déplace la souris au-dessus du composant.

Il faut aussi affecterTrue à la valeur de la propriété ShowHint

Visible Boolean Détermine si le composant apparaît à l'écran.

Les propriétés précédentes sont valables pour plusieurs composants qui vont venir par la suite de ce chapitre

Evènement Description

OnClick Se produit quand l'utilisateur clique sur le composant. Pour une fiche, il se produit si l'utilisateur clique sur une zone vide de la fiche ou sur un composant désactivé.

OnDblClick Se produit quand l'utilisateur double-clique avec le bouton gauche de la souris alors que le pointeur de la souris est au-dessus du composant.

OnMouseMove Se produit quand l'utilisateur déplace le pointeur de la souris au-dessus d'un contrôle.

OnClose Se produit quand la fiche se ferme.

OnHide Se produit quand la fiche est cachée (c'est-à-dire quand la propriété

Visible de la fiche prend la valeur False).

OnShow Se produit quand la fiche est affichée (c'est-à-dire quand la propriété Visible de la fiche prend la valeur True).

Méthode Description

Close Est une procédure sans paramètre qui ferme la fiche

Quand la fiche principale de l'application se ferme, l'application se termine.

Show Est une procédure sans paramètre qui affiche la fiche Hide Est une procédure sans paramètre qui cache la fiche

Un composant Label permet d’inclure facilement du texte sur une fiche.

Il peut contenir jusqu’à 255 caractères

En plus les propriétés Name, Caption, Width, Height, Left, Hint, ShowHint, Color,

Font, visible, le composant label possède les propriétés suivantes :

Propriété Type description

AutoSize Boolean Spécifie si le label se redimensionne automatiquement pour s'adapter à son contenu. La valeur par défaut de cette propriété est True WordWrap Boolean Autorise les retours à la ligne pour permettre d’afficher plusieurs lignes à l’intérieur du label. AutoSize doit être False pour permettre l’utilisation de plusieurs lignes.

Un composant Edit permet de proposer une zone d’édition.

Ce composant permet d’entrer une information quelconque tapée au clavier.

En plus les propriétés Name, Width, Height, Left, Hint, ShowHint, Color, Font,

visible, AutoSize (pour ajuster la largeur) le composant Edit possède les propriétés spécifiques suivantes :

Propriété Type description

Text String Contient le texte entré dans la zone d’édition. C’est aussi en modifiant cette propriété que l’on fixe le contenu de la zone MaxLength Integer Spécifie le nombre maximum de caractères que l'utilisateur peut entrer dans la zone Edit. Mettre 0 pour ne pas donner de limite (par défaut)

PasswordChar Char À utiliser lorsqu’on veut masquer les caractères tapés, comme pour les mots de Passe. Utiliser par exemple le caractère « * » pour masquer et le caractère « #0 » pour ne pas masquer

En plus les évènements OnClick, OnDblClick, OnMouseMove, le composant Edit possède l’évènement spécifique suivant :

Evènement Description

OnChange Se produit quand le texte de la zone de saisie a peut-être changé.

Le composant Button sert en général à proposer à l’utilisateur une action.

Comme la plupart des composants, le composant Button possède les propriétés

Name, Caption, Width, Height, Left, Hint, ShowHint, Font, Visible, WordWrap

Méthode Description

Clear Est une procédure sans paramètre qui efface tout le texte de la zone de saisie.

ClearSelection Est une procédure sans paramètre qui efface le texte sélectionné de la zone de saisie.

Les évènements OnClick, OnMouseMove

ListBox permet d'afficher une collection d'éléments dans une liste déroulante..

Il est possible de sélectionner un ou plusieurs éléments (mais pas d’édition).

En plus les propriétés Name, Width, Height, Left, Hint, ShowHint, Color, Font,

visible, le composant ListBox possède les propriétés spécifiques suivantes :

Propriété Type description

Sorted Boolean Spécifie si les éléments de la liste sont triés par ordre alphabétique.

MultiSelect Boolean Détermine s’il est possible de sélectionner plusieurs éléments à la fois.

Items TString Est une propriété Objet qui contient les éléments (les chaînes de caractères) qui apparaissent dans la liste. Elle dispose ses propres

propriétés et méthodes:

Count : est une propriété (Integer) qui indique le nombre des éléments de la liste.

Add(str) : est une méthode (fonction) qui ajoute la chaine « str » à la liste des éléments

Clear : est une méthode (procédure) qui vide la liste.

Méthode Description

Clear Est une procédure sans paramètre qui efface tous les éléments de la liste. C’est l’équivalent de Items.Clear

ClearSelection Est une procédure sans paramètre qui désélectionne tous les éléments  de la liste (attention ! C’est différent de la méthode ClearSelection de Edit)

Le composant Memo permet l’édition du texte sur plusieurs lignes.

Il stocke le texte sous forme de lignes: chaque ligne est une chaine de caractère.

En plus les propriétés Name, Width, Height, Left, Hint, ShowHint, Color, Font,

visible, le composant Memo possède les propriétés spécifiques suivantes :

Propriété Type description

Lines TString Est une propriété Objet qui contient les lignes (les chaînes de caractères) du texte. Elle dispose des propriétés et méthodes analogues à celles de la propriété Items de ListBox

Similaires à ceux de Edit ( OnChange, OnClick, OnDblClick, OnMouseMove)

Similaires à celles d’un Edit ( Clear, ClearSelection)

BitBtn (bouton Bitmap) est un composant de l’onglet Supplément de la palette des composants.

Il représente un bouton avec une image sur sa face..

Les boutons bitmap se comportent de la même manière que les composants bouton.

Eléments de programmation avec Delphi

En plus les propriétés Name, Caption, Width, Height, Left, Hint, ShowHint, Color,

Font, Visible, ce composant possède les propriétés spécifiques suivantes

Propriété Type description

Glyph TBitmap Spécifie le bitmap (image) qui apparaît sur le bouton BitBtn.

Kind TBitBtnKind Détermine le type du bouton bitmap. Le type TBitBtnKind définie plusieurs constantes pour des boutons Standards :

bkOK : bkNo :

bkCancel : bkYes :

Similaires à ceux de Button

Conception et Réalisation d’une base de données

Eléments de programmation avec

Delphi

Bases De Données avec Delphi

Définition d’une Base De Données

Exemples de BDD

Propriétés d’une BDD

Système de Gestion de Base de Données (SGBD)

  1. Conception d’une base de données

Plan

Le modèle relationnel

Structure d’une BDD

Démarche de conception

Etudes de cas

Etapes de réalisation d’une BDD

Une Base De Données (BDD)est un ensemble structuré de données enregistrées sur des supports accessibles par l’ordinateur, pour satisfaire un ensemble d’utilisateurs de façon sélective.

Le volume des données généré par les activités humaines croît avec le développement de notre civilisation.

Ces données sont souvent gérées par des moyens informatique

Les données d’un établissement d’enseignement, d’une entreprise, d’une banque , d’un hôpital, ….etc sont souvent des ensembles de même structure. Par exemple dans une entreprise:

Liste des membres du personnel : pour chaque personne, on enregistre le nom, prénom, adresse, sexe, date de naissance, date de recrutement, fonction dans l’entreprise, etc.

Liste de produits dans le stock : pour chaque produit, on garde : la référence, désignation, quantité en stock, prix unitaire, taux TVA, etc.

Données

  • Produits
  • Clients
  • Fournisseurs
  • Commandes
  • Factures
  • ….

Données

  • Employés
  • Salaires
  • Congés
  • Retraites
  • Mutations
  • Avancements
  • ….

BDD du

Stock

BDD du

Personnel

Entreprise

données

  • Etudiants
  • Modules
  • Formations
  • Enseignants
  • Notes
  • …. données
  • Livres
  • Thèses
  • Emprunts
  • Adhérents
  • ….

BDD de la scolarité

BDD de la bibliothèque

Etablissement d’enseignement

 Exhaustivité des données la BDD doit contenir toutes les informations requises par les traitements attendus.

Exemple : si une personne est absente dans la BDD du personnel, elle risque de ne pas être payée

 Données non redondantes (unicité) une information ne sera pas répétée plusieurs fois dans une BDD.

Exemple : si une personne est enregistrée deux fois, elle risque de toucher double paye !?

 Données structurées les données d’une BDD doivent être réparties d’une manière logique en des ensembles de même structure.

Exemple : on ne peut pas mettre ensemble les informations des produits et celles des clients, il faut les séparer.

 Données en liaison les données d’une même BDD doivent avoir des relations entre elles et ne peuvent être toutes indépendantes les unes des autres.

Exemple : les notes dans une BDD d’un établissement d’enseignement dépendent des étudiants et des formations.

Le logiciel qui gère une BDD s’appelle un Système de Gestion de Base de

Données (SGBD) (DBMS en anglais, pour Data Base Management System).

Delphi, ACCESS, DBASE, FoxPro, Oracle, Clipper, SQL server, , etc.

Définir la structure de la BDD.

Conserver les données sur les Disques.

Rechercher les données selon les critères des utilisateurs.

Assurer la sécurité et confidentialité des données surtout dans un environnement multiutilisateurs.

Un modèle de données (de BDD) est un ensemble de règles selon lesquelles les données sont structurées et organisées. Il existe plusieurs modèles de BDD :

Modèle HIERARCHIQUE

Modèle RESEAU

Modèle Orienté Objets

Modèle RELATIONNEL (le plus répandu)

Une BDD est un ensemble de données organisé sous forme d’une ou plusieurs tables de données.

Chaque table représente un ensemble de données relatives à un domaine ou une entité bien déterminée.

Des liaisons existent entre tables qui dépendent les unes des autres, c’est la raison pour laquelle, elles sont rassemblées dans une même BDD.

T1

T2

T3

R2

R1 BDD

T1, T2, T3 : Tables

R1, R2 : Relations

Une table est un ensemble de données organisées en lignes et en colonnes.

Les lignes sont appelées : Enregistrements

Les colonnes sont appelées : Champs

Table 1 Table 2

Enregistrement 1

Champ1 Champ2 Champ3

Enregistrement 2

Table 3

Référence Désignation Prix unitaire Quantité en stock

01 Lait liquide 25 DA 3000

02 Café 400 DA 200

03 Sucre 60 DA 100

04 Lait en poudre 170 DA 50

Nom Prénom Adresse Sexe Date naissance

Date recrutement

Allaoui Ahmed 25 rue Biskra, Batna M 12/04/70 02/06/94

Zidani Samia 15 cité 150 log, Batna F 14/01/80 10/04/05

Ben Cherif Mohamed N 123 bloc A2, cité 1200 log, Batna

Une BDD peut stocker une quantité considérable d’informations, celles-ci peuvent évoluer dans le temps et peuvent subir des mises à jours.

Vu l’importance d’une BDD, sa création doit être réfléchie. La meilleure façon de la concevoir et d’anticiper tous les besoins en information et à long terme.

Toutefois, une BDD peut être conçue par approche successive.

Avant de se lancer dans la création d’une BDD, on devrait prendre quelques instants pour structurer nos besoins en information. On propose les étapes d’analyse suivantes :

Module Informatique 8

  1. Déterminer les relations qui peuvent exister entre les tables
  2. Structurer la BDD en des tables

Conception d’une Base de données

  1. Faire un découpage des informations (selon leurs natures et dépendances) jusqu'au plus petit élément significatif.

Définir l’objet ou le domaine d’étude et décrire tous les paramètres le décrivant.

Demarche de conception

Conception d’une Base de données

Etudiants

NumIns*

Nom

Prénom

DateN

Modules

CodeM *

Intitulé

Coef

Notes

NumIns*

CodeM*

Note

(NumIns*, nom, prénom, dateN)

(CodeM*, Intitulé, Coef)

(NumIns*, CodeM*, Note)

Conception d’une Base de données

Etudiants

NumIns*

Nom

Prénom

DateN

Modules

CodeM *

Intitulé

Coef

Notes

NumIns*

CodeM*

Note

Clé primaire Clé primaire composite Clé primaire

Un étudiant peut suivre plusieurs modules

Un module peut être suivi par plusieurs étudiant

Relation plusieurs à plusieurs (N à M)

Entre les tables Etudiants et Modules

Table de jointure

Conception d’une Base de données

Commandes

NumCmde*

date

CodeCl

Montant

Clients

CodeCl*

Nom

prénom

Adresse

(CodeCl*,Nom, Prénom, adresse)

(NumCmde*, date, CodeCl, Montant)

Conception d’une Base de données

Commandes

NumCmde*

date

CodeCl

Montant

Clients

CodeCl*

Nom

prénom

Adresse

Un Client peut passer plusieurs Commandes

Une Commande peut être passée par un seul client

Relation un à plusieurs (1à N)

Entre les tables Commandes et Clients

Clé primaire Clé primaire

Clé étrangère

Conception d’une Base de données

Bureaux

NumBur*

NumBloc

Etage

Enseignants

CodeEns*

Nom prénom

Spécialité

NumBur

(CodeEns*,Nom, Prénom, Spécialité, NumBur)

(NumBur*, NumBloc, Etage)

Module Informatique 11

Conception d’une Base de données

Bureaux

NumBur*

NumBloc

Etage

Enseignants

CodeEns*

Nom prénom

Spécialité

NumBur

Un enseignant peut avoir un seul Bureau

Un bureau peut être attribué à un seul enseignant

Relation un à un (1 à 1)

Entre les tables Enseignants et Bureaux

Conception d’une Base de données

Une fois l’analyse et la conception de la BDD terminées, on doit passer à sa réalisation à l’aide d’un SGBD. Cela nécessite les étapes :

Création des tables de la BDD : la création une table passe par deux étapes :

Création de sa structure (définition des champs)

Saisie des informations (création des enregistrements)

Définition des relations entre tables

Interrogation de la BDD : Une BDD ne doit pas être sans intérêt, elle doit restituer des informations à la demande des utilisateurs. Une demande constitue une interrogation (requête) de la BDD.

Etablissement des états à imprimer : l’utilisateur d’une BDD a toujours besoin d’afficher et d’imprimer des listings (états) contenants des données obtenues à partir des tables ou des requêtes.

Decouvrir ces documents

  • Débuter avec le langage Fortran 77 étape par étape

    Débuter avec le langage Fortran 77 étape par étape

  • Débuter avec le langage Fortran étape par étape

    Débuter avec le langage Fortran étape par étape

  • Apprendre à programmer avec Ada étape par étape

    Apprendre à programmer avec Ada étape par étape

  • La macroeconomie formation etape par etape

    La macroeconomie formation etape par etape

  • Le langage C pas a pas livre de formation complet pour apprendre a programmer

    Le langage C pas a pas livre de formation complet pour apprendre a programmer

  • Cours complet sur l’electricite automobile etape par etape

    Cours complet sur l’electricite automobile etape par etape

  • La méthode Merise étape par étape

    La méthode Merise étape par étape

  • Cours complet pour apprendre à utiliser PhotoFiltre étape par étape

    Cours complet pour apprendre à utiliser PhotoFiltre étape par étape

Articles connexes

  • Comment faire un rétro-planning en ligne?
  • Exercice HTML: Débuter avec HTML
  • Optimisez Votre Productivité avec les Cases à Cocher Excel : Guide Pratique
  • Exercice requete SQL corrigé (Tour de France)
  • Comment faire un planning des heures de travail sur Excel?
  • Exercices sur la programmation web avec le langage PHP
  • Tutoriel Python : Notions de base
  • Tutoriel Python-Numpy : les fonctions statistiques
  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02