Java 2i002 - 2018-2019 Semestre2

Context

Why use Java?

As of 2016, Java is one of the most popular programming languages in use, particularly for client-server web applications, with a reported 9 million developers.

Principles

  • It must be “simple, object-oriented, and familiar”.
  • It must be “robust and secure”.
  • It must be “architecture-neutral and portable”.
  • It must execute with “high performance”.
  • It must be “interpreted, threaded, and dynamic”. (JVM)

Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of computer architecture.

source

Origin of Java

Sun Microsystems released the first public implementation as Java 1.0 in 1996. Acquired by Oracle in 2010.

source

UE

Planning

Pdf du planning

Dates importantes:

  • mardi 26 mars: petit contrôle (15 minutes) sur les deux derniers cours (héritage, abstract et final)
  • mardi 26 mars: proposition d’une premier diagramme UML de votre projet en binome
  • mardi 02 avril: TME solo durant 1h45
  • lundi 15 avril: rendu du mini-projet avant 11h59m59s
  • mardi 16 avril: oral du mini-projet

Barème

  • note finale (/100) = noteExamen + noteCC
    • noteExamen (/50) : note de l’examen de session
    • noteCC (/50) = noteTD + noteTMEsolo + noteProjet
      • noteTD (/20) : note des interros de TD
      • noteTMEsolo (/20) : note de TME solo
      • noteProjet (/10) : note du mini-projet

Corrections TDs

/!\ A ne pas partager aux étudiants de la prochaine promo, sinon ils ne vont pas en Tds, donc ils ont de mauvaises notes !!!

Bon courage pour l’exam !

Controle 3 avec les coef de chaque questions:

1.1. (1) monAttribut
1.2. (1) maMethode
1.3. (1) MaClasse
1.4. (1) public, protected, private, (package)
2.1. (1) aucun
2.2. (1) toString (aire)
2.3. (1) aire
2.4. (1) Forme
     Cercle: 3.14...
2.5. (1) On ne peut pas instancier la classe Forme, car elle est abstraite.
2.6. (1) Oui.
2.7. (2) Les classes abstraites ajoutent des contraintes d'implémentation qui améliorent la lisibilité et la sécurité du code, tout en facilitant la réutilisation de bouts de code (refactoring).
3.1. (2) Non, car on essaye de modifier la valeur d'un attribut final à la ligne 11.
3.2. (1) Oui, car aucune valeur n'a été affecté à la variable truc2 avant la ligne 12.
3.3. (0) Pour la forcer à garder une seule valeur. (exemple: constante)
3.4. (1) Quand on ne veut pas qu'elle puisse avoir une classe fille.

Mini-projet

Pdf du mini-projet

Barème

  • 5 points UML
  • 10 points Compte Rendu
  • 5 points Oral

Deadline

Le mini-projet doit être rendu avant 23h59m59s le 15 avril 2019.

Vous devez m’envoyer par mail (remi.cadene@lip6.fr) 1 seul fichier “Nom1Prenom1_Nom2Prenom2.zip”.

Une fois dézippé, ce fichier génère l’arborescence suivante:

  • Nom1Prenom1_Nom2Prenom2
    • NomProjet (contenant le code)
    • README.md (tutoriel de 4 lignes expliquant comment compiler et executer votre code)
    • uml.pdf (diagramme UML)
    • compte-rendu.pdf (2 pages grand maximum sans compter l’annexe)

L’objet du mail doit être “LI2002-2018-2019-S2_Nom1Prenom1_Nom2Prenom2”.

Le contenu du mail doit être vide.

PS: après la soutenance, n’hésitez pas à mettre votre projet sur la plateforme github ; ça permet de donner de la visiblité à vos projets.

Vous perdez des points, si vous ne respectez pas les consignes

Compte Rendu

  • Section 1: Introduction
    • Un texte libre expliquant en quoi consiste votre projet et à quoi il est destiné. Quel problème vous essayez de résoudre.
  • Section 2: Execution du main
    • Présenter ce que fait votre méthode “main”
  • Section 3: Difficultés rencontrées
    • Quelles difficultés avez vous rencontré ? Et comment les avez vous résolues ?
  • Section 4: Travaux futures
    • Comment améliorer votre programme ?
  • Annexe: Statistiques
    • Nombre de fichiers
    • Nombre de dossier
    • Nombre de lignes de code
    • Liste des classes “normales”
    • Liste des classes abstraites
    • Liste des interfaces
    • Liste des classes étendants Exception ou RunTimeException
    • Nombre et localisation des tableaux
    • Nombre et localisation des ArrayList
    • Nombre et localisation des static
    • Nombre et localisation des final
    • Nombre et localisation des exceptions déclanchées

Oral

Nous allons passer parmi vous. Vous allez devoir parler 1m30 chacun pour nous présenter votre projet en executant le code.

Puis nous testerons votre code pendant 2 minutes en vous posant des questions.

Votre code ne doit pas crasher.

Vous devez vous entrainer au préalable. Vous perdez des points si votre présentation est trop courte ou trop longue.

Notes

A apprendre par <3

equals

On veut créer une méthode equals afin de comparer deux objets de cette façon:

Ingredient ingr1 = new Ingredient("pain")
Ingredient ingr2 = new Ingredient("nutella")
Ingredient ingr3 = new Ingredient("pain")

System.out.println(ingr1.equals(ingr3)); // true, car "pain" == "pain"
System.out.println(ingr1 == ingr3); // false, car l'adesse ingr1 != ingr3
System.out.println(ingr1 == ingr1); // true, car l'adesse ingr1 == ingr1
System.out.println(ingr1.equals(ingr2)); // false, car "pain" != "nutella"

Donc on doit redéfinir la méthode public boolean equals(Object obj) définie dans la classe Object (lien vers javadoc):

public boolean equals(Object obj) { // signature à respecter /!\

    if (this == obj) { // même instance (adresse mémoire)
        return true;
    }
    if (obj == null) { // si null
        return false;
    }
    if (getClass() != obj.getClass()) { // pas la même classe
        return false;
    }

    Ingredient other = (Ingredient) obj;
    if (nom == null) {
        if (other.nom != null) {
            return false
        }
    } else if (!nom.equals(other.nom)) {
        return false;
    }
    return true;
}

ATTENTION: Si vous définissez public boolean equals(Ingredient ingr), vous ne redéfinissez pas la méthode de Object, donc vous perdez des points. Ici on veut définir une façon la plus discriminante de comparer deux objets.

Editeur de text conseillé

Sublime Text 3