Rendez-vous en TypeScript



Translate this TypeScript program into Java

Download TypeScript program Rendez_vous.ts.zip 

class Personne {
    constructor(private readonly _name: string) {
    }

    public a_l_heure(moment: string, participants: Array<Personne>): void {
        console.info(this._name + " rendez-vous à l'heure " + moment + " avec " +
            participants.map(participant => participant._name).filter(name => name !== this._name).join(" - "));
        // participants.filter(participant => participant._name !== this._name).map(participant => participant._name).join(" - "));
    }
}

class Rendez_vous {
    private readonly _heure: number;
    private readonly _minute: number;
    private readonly _participants: Array<Personne>;
    get participants(): Array<Personne> {
        return this._participants;
    }

    /* Minuterie : */
    readonly dringgg: Promise<string>;
    private _interval_id: number;

    constructor(private readonly date: Date, ...participants: Array<Personne>) {
        this._heure = date.getHours();
        this._minute = date.getMinutes();
        this._participants = [...participants];
        this.dringgg = new Promise<string>((c_est_l_heure, c_est_plus_l_heure) => {
            /* On passe les fonctions 'c_est_l_heure' et 'c_est_plus_l_heure' en parametres de la minuterie */
            /* Le timer est ici réglé à 15 sec. mais le sujet du contrôle fait varier cette valeur : */
            this._interval_id = setInterval(this._est_ce_que_c_est_l_heure_, 15000, c_est_l_heure, c_est_plus_l_heure, this);
        });
    }

    // Les fonctions 'c_est_l_heure' et 'c_est_plus_l_heure' sont recuperees ici pour tenir (ou non) la promesse :
    private _est_ce_que_c_est_l_heure_(c_est_l_heure: Function, c_est_plus_l_heure: Function, rendez_vous: Rendez_vous): void {
        const maintenant: Date = new Date(Date.now());
        const moment: string = maintenant.getHours() + ":" + (maintenant.getMinutes() < 10 ? "0" + maintenant.getMinutes() : maintenant.getMinutes());
        console.info("Est-ce que c'est l'heure ? " + moment);
        if (rendez_vous._heure === maintenant.getHours()) {
            if (rendez_vous._minute === maintenant.getMinutes()) {
                clearInterval(rendez_vous._interval_id); // On arrete la minuterie (timer)...
                c_est_l_heure(moment);
            } else if (rendez_vous._minute < maintenant.getMinutes()) {
                clearInterval(rendez_vous._interval_id); // On arrete la minuterie (timer)...
                c_est_plus_l_heure("Petit retard " + moment);
            }
        } else if (rendez_vous._heure < maintenant.getHours()) {
            clearInterval(rendez_vous._interval_id); // On arrete la minuterie (timer)...
            c_est_plus_l_heure("Gros retard " + moment);
        }
    }
}

const Main = /* async */ () => {
    const Damien = new Personne("Damien");
    const Julie = new Personne("Julie");
    /* L'heure du rendez-vous est fixée ici mais le sujet du contrôle fait varier cette valeur : */
    const rendez_vous: Rendez_vous = new Rendez_vous(new Date('2024-09-27T10:15:00'), Damien, Julie);
    rendez_vous.dringgg.then(moment => {
        rendez_vous.participants.forEach(participant => participant.a_l_heure(moment, rendez_vous.participants));
    }).catch(message => {
        console.error(message);
    }).finally(() => {
        console.log("Coucou");
    });
}

Main();
Quiz

Q1 : la fonction Main doit-elle être déclarée async (pour l’instant en commentaire) pour le programme compile sans erreurs ?

Q2 : On lance le programme à 8h 50m 00s. Le rendez-vous est fixé à 08::51::00 et le timer est réglé à 120000ms. Qu’est-ce qui est affiché ?

Q3 : On lance le programme à 8h 50m 00s. Le rendez-vous est fixé à 08::51::00 et le timer est réglé à 15000ms. Qu’est-ce qui est affiché ?

Q4 : Combien y-a-t-il d’attributs (champs) non static dans tout objet de type Rendez_vous ?

Q5 : De quoi hérite la classe Rendez_vous ?

Q6 : Dans l’hypothèse énoncée en Q2, est-ce que Coucou est affiché à l’écran ?

Q7 : Dans l’hypothèse énoncée en Q3, est-ce que Coucou est affiché à l’écran ?

Q8 : Dans la méthode a_l_heure de la classe Personne, si on intervertit map suivie de filter au profit de filter suivie de map (voir ligne en commentaire) ?