La chronique du dimanche #2

Bonjour,

Finalement la chronique ce ferra au rythme de mes nouvelles connaissance, Si je n’ai pas de nouvelle connaissance durant la semaine, il n’y aura pas de chronique. les notions importantes seront reporté à la chronique suivante.

Une semaine sur deux devrais être un rythme plus stable.


 

Prog Objet / Java

Créé des classes, faire un peu mumuse avec c’est bien, mais s’arrêter la ce serais franchement dommage. La ou ça deviens franchement intéressant c’est avec la composition de classe par exemple une Droite à pour attribut deux Points. Mais encore mieux l’héritage !
Par exemple les points c’est cool, mais en informatique on aime bien les Pixels, mais fondamentalement un Pixel qu’est ce c’est quoi ?
Un Pixel EST UN Point, avec deux trois truc en plus par exemple, une couleur et une luminosité, ainsi que quelques méthodes lié à sa nouvelle nature.

Exemple Java :

Class Pixel extends Point {
    private Couleur couleur;
    private int luminosite;

    public Pixel() {}
    public void clignoter() {}
    // ... 
}

Base de donné

Maîtriser le langage SQL est le principe de fonctionnement d’une base de donné permet d’alléger considérablement le traitement des requêtes dans le code.
Il ne faut pas hésiter à utiliser les jointures, conditions, intersections, projections … Dans les requêtes.
Pour structurer une base de donné il faut établir les relations de manière la plus simple possible de type X -> Y, pour ensuite être capable de trouver les clé primaire et secondaire. et les agencer correctement.

ProgWeb PHP

On peut être amené à créer des codes complexes afin de générer une simple requête SQL, mais avec un peu de réflexions et d’habitude ça passe crème. Voici un exemple de code qui permet d’effectuer une recherche grâce à des paramètres rentré par l’utilisateur. Prévoyez un paquet de Doliprane !

<form id="myForm" action="recherche.php" method="post"> <!-- formulaire.php -->
    <input type="text" name="nom" id="nom" placeholder="recherche album/artiste">
    <select name='genre'>
    <?php
        foreach($db->query("SELECT id, nom FROM genres") as $row) {
            $id = $row['id'];
            $nom = $row['nom'];
            echo  "<option value='$id'>$nom</option>";
        }
    ?>
    </select>
    <select name="date">
    <?php
        foreach($db->query("SELECT distinct YEAR(`date`) FROM albums ORDER By `date` DESC") as $row) {
            $date = $row['YEAR(`date`)'];
            echo  "<option value='$date'>$date</option>";
        }
    ?>
    </select>
    <input type="submit" value="Submit">
</form>
<?php // recherche.php
    $req = array();
    $execute = array();
    $debutRequete = 
    "SELECT album.nom, album.date, album.genre, album.artiste, artiste.nom, genre.nom FROM album
     INNER JOIN artiste ON album.artiste = artiste.id, artiste ON album.genre = genre.id WHERE ";

    if (isset($_POST['nom'])) {
        $nom = explode(" ", $_POST['nom']);
        $name = array();
        $i = 0;
        foreach ($nom as $n) {
            $name[] = "( album.nom LIKE :nom$i OR artiste.nom LIKE :nom$i )";
            $execute[":nom$i"] = "%$n%"; // generation du tableau d'association
            $i++;
        }
        $req[] = "( " . implode(" OR ", $name) . " )";
    }

    if (isset($_POST['genre'])) {
        $req[] = "( album.genre = :genre )";
        $execute[":genre"] = $_POST['genre'];
    }

    if (isset($_POST['date'])) {
        $req[] = "( YEAR(album.date) = :dates )";
        $execute[":dates"] = $_POST['date']);
    }

    $req = $debutRequete . implode(" AND ", $req);

    // $req = db->prepare($req);    
?>

Voila je vous laisse réfléchir sur ce fabuleux code non commenté :p

Algo Avancé : les files et les piles, types abstrait

Une file en informatique est une structure de donné ou le principe est que le premier entré dans la liste est le premier sortis. C’est par exemple ce qui est utilisé pour les imprimantes. on les gère grâce à deux pointeurs au sens large du terme un qui pointe le début de la file, l’autre la sortie, ainsi qu’une structure de donné contenant les éléments.

Une pile en informatique est une structure de donné ou le principe est que le premier entré dans la pile est le dernier à sortir : voyez une pile de livre. vous posez un livre sur la pile, vous ne pourrez récupérer livres que un par uns, et toujours celui qui est au dessus.
Ici, un seul pointeur, qui pointe à la fois l’entré et la sortie.

Prog Sys / C

Les threads, sont des sous programmes que l’on lance via un programme :p. On a un programme père, et des programmes fils. Ils permettent de bénéficier du parallélisme du processeur. ça permet par exemple de faire des calculs complexes en les divisant en plusieurs parties.
Par exemple : la somme des nombres de 1 à 1000. (Sur un proco 4 cœur)
On lancera 4 threads :
Le premier calculant de 1 à 250
Le deuxième calculant de 251 à 500
Le troisième calculant de 501 à 750
Le quatrième calculant de 751 à 1000 Une fois les 4 threads ayant terminé leurs résultats on ferra la somme de leur résultat et on obtiendra la somme. en ayant fait marché les 4 cœurs du proco.

Un code à suivre quand j’aurais récupéré les diapos du prof.

La chronique du dimanche #1

En quoi consiste cette chronique

Retrace ma semaine de cours :

  • Afin de me remettre en tête des connaissances acquises et les partager
  • Prodiguer des conseils, ou support de cours numériques
  • Éventuellement quelques extrait de codes
  • Tout cela généralement dans le domaine informatique puisque c’est un blog perso certes, mais de développeur

Le rythme :

Le nom étant assez évocateur… la chroniques sera hebdomadaire, et seras publié le dimanche.
Cela me permettra ainsi de me prendre un peu de temps le week-end pour des révisions, et être au point pour la semaine suivante


Commençons donc

L’analyse descendante, les 7 Commandements :

  1. La définition du problème tu fera, de l’attention aux connaissances induite tu aura
  2. Une division en sous problèmes tu résoudra
    • Pour réduire la complexité
    • Itératif le processus sera
    • Jusqu’à un niveau tribale tu divisera
    • Petit le gradient entre les étapes tu gardera (entre 2 et 6)
    • à ceux que la somme des sous problèmes soient égale au problème attention tu fera (à tout niveau de la division)
  3. Trop tôt tu ne détaillera pas
  4. De la structure de donné trop tôt, tu ne te préoccupera pas.
    • Le plus tard possible tu la choisira
    • être capable de justifier pourquoi, capable tu sera
  5. Les Algorithmes tu fera, les Algos complexes tu détaillera
  6. Tourner à la main tes Algorithmes tu fera
    • Si l’intuition que tu as merdé tu as, de la merde tu as fait
    • Les entrées et sorties tu vérifiera
  7. Sur la lisibilité de ton code tu veillera
    • Ton programme conforme au cahier des charges tu veillera
    • À commenter ton code et le documenter tu veillera
    • De l’efficacité tu ne te préoccupera pas
  8. Tout tu refera !
    • Mauvaise intuition = trop tard
    • Dans le déni tu ne continuera pas
    • En cas d’impasse, remonter d’un niveau dans l’analyse et tu recommencera

La programmation objet + Java

Tout est objets !

Un objet est un petit être intelligent, il est composé de deux choses : Des caractéristiques d’états et Des fonctions / méthodes lui permettant de communiquer avec d’autres objets ou lui même
Généralement les caractéristiques d’états sont protégés (seul l’objet y a accès) afin d’éviter des bugs structurel.
Les méthodes généralement sont public (afin que le monde extérieur puisse communiquer avec l’objet), parmi les méthodes s’en trouvera toujours une : Le constructeur,qui permettra à l’objet d’initialisé ses caractéristiques d’états.

Concernant Java

Les méthodes (y compris le constructeur) peuvent être surchargés, c’est à dire que un même nom de méthodes permet de faire la même chose grâce à des type et un nombre de paramètre différent.
En Java toute les variables de types « objets » ne sont pas des objets en réalité mais des références (pointeurs) d’une instance objet :

Point A = new Point(0.0, 1.5, "Pa"), B;
B = A;

Avec ces lignes de codes, on a pas copié le contenu du Point A dans Le Point B, on a entré dans B l’adresse mémoire (référence) contenu dans A : A et B pointent sur la même instance de Point :
L1 : A –> Instance de Point | B
L2 : A –> Instance de Point <– B

Prog Web – PHP

Commencer à réfléchir son code PHP en objets selon le Modèle MVC (Modèle Vue Contrôleur)

Les bases de données

Les fonctions type mysql_connect()… on oublie ! Place à la PDO
C’est un outil permettant de gérer les différents gestionnaire de bases de données tous de la même manière. ça permet de rendre le code plus facilement maintenable, modifiable, et portable d’un SGBD à un autre.
Utilisation Basique :

$host="localhost";
$base="m3104_2";
$login="root";
$passe="";
$driver="mysql";
$port="3306";
$db = new PDO("$driver:host=$host;dbname=$base;port=$port", $login, $passe); // créé un obj PDO connecté à la BDD

l’idéale ensuite est de préparer les requêtes, cela permet de s’assurer à 99% de ne pas avoir de problèmes d’injection SQL, et de rendre plus efficaces les instructions SQL répétitives.

$req = $db->prepare("INSERT INTO genres VALUES (:id , :nom)");
$req->execute( array(":id" => $id, ":nom" => $nom) );

:machin étant les truc à préparer et à sécuriser
vous remarquerez que l’on exécute via $req et non pas via $db
et le array dans exécute est un tableau associatif précisant que doit remplacer quoi.

Travail en collaboration

Méthodes agiles

Résumé de la semaine : UML/Cahier des charges (méthodes peu agiles) -> Poubelle.
On fait place aux méthodes agiles, par exemple la méthodes SCRUM.
Les principes de cette méthodes sont : La transparence : en mettant l’équipe sur un modèle de hiérarchie horizontale, tout en mettant un langage commun entre management et développement. L’inspection : Afin de mettre au point régulièrement des problèmes pouvant émerger, variation non conforme à l’objectif visé. * L’adaptation : ce type d’organisation existe avant tout pour s’adapter, produire du code modulaire pour s’adapter au besoins potentiellement évolutif du client.

Schéma du fonctionnement de SCRUM :
Schéma Scrumm

Les méthodes agiles permettent d’entretenir le dialogue avec le client et éviter l’effet tunnel (Foncer tête baisser dans le développement, et ce rendre compte à là fin que le produit ne répond pas/pus aux besoins du client)

Git

Git est un logiciel de gestion de version, idéale pour l’utilisation de méthodes agiles. Il permettra de développer un projet, de créer plusieurs versions, et de les maintenir séparément si besoin (via les brancher). De travailler à plusieurs sur un même dépôts. Taguer des révisions, récupérer le code tel qu’il était avant…
pas trop envie de réécrire tout mon TD sur Git, je demanderai à mon prof si je peux le transmettre ici (probablement de manière raccourcie), néanmoins voici quelques commandes utiles :
init : initialise un depot git
clone : afin de cloner un dépôt (distant ou non)
add : Ajoutes des fichiers au depot local git (afin de les commit) commit : versionne les fichiers modifié via add (commit -a équivaut à add * puis commit, commit -m « Message du commit »)
pull : met à jours le dépôt local (via un dépôt de référence)
push : met à jours le dépôt distant (à partir des modif du dépôt local)
branch : créé une nouvelle branch
merge : fusione deux branches
checkout : permet de naviguer entre les branches

Pour corriger les betises de loic :
git reset –hard hashDuCommitVouluDernier // reinitialise le depot au commit souhaité
git push –force origin master // met a jours le depots distant en corrigeant les erreurs