<commit_before>= Planning
:toc: preamble
:sectanchors:
//works around awesome_bot bug that used to be published at github.com/dkhamsing/awesome_bot/issues/182.
:emptyattribute:

The entry page of the Java course in L3.

== Prerequisites
You know algorithmics: you know how to design algorithms to solve problems, using data structures, if required, such as lists or stacks. 
You can use at least one of the three major operating systems (Windows, a Linux variant or Mac OS) to compile and run a program in at least one language, and are generally at ease with that OS: you know how to edit files and move them around, install and use basic programs, …

== Abbreviations

* [I]: Important
* [O]: Optional (do it if you are specifically interested in the related aspect)
* ESx.y (or ESx.y.z): designates section x.y (or x.y.z) in Eck’s https://math.hws.edu/javanotes/[book] (in chapter x)
* EQx: quiz chapter x
* EQx.y: question number y in Eck’s book, from quiz chapter x
* EEx.y: exercice number y in Eck’s book, from exercices chapter x
* Ranges are always given with ends included (EQ1.3 to 1.9 means 3 and 9 included)
* Markers apply to the whole line. Example: "4.3 intro to 4.3.2, 4.6.1 [I]" means that everything in between 4.3 and 4.3.2 plus 4.6.1 are important.

== General references
* Eck’s https://math.hws.edu/javanotes/[book]
* Stéphane Airiau’s https://www.lamsade.dauphine.fr/~airiau/Teaching/L3-Java/[course] (in French)
* The https://app.gosoapbox.com/event/290081765/[confusion barometer]
* Java API https://docs.oracle.com/en/java/javase/11/docs[Javadoc]
* https://teams.microsoft.com/l/meetup-join/19%3Aaaa1a5bbda774320a271ee4b5ba402e4@thread.tacv2/1609694419561[Teams]
* https://github.com/oliviercailloux/Teaching/blob/main/README.adoc#take-notes[Take notes]!

//* https://whiteboard.fi/g67kd

== Planning

[[S1]]
=== S1 (6 January 2021)

Prerequisites: https://github.com/oliviercailloux/java-course/blob/master/Best%20practices/Various.adoc#installing-the-jdk[JDK]

* https://github.com/oliviercailloux/java-course/raw/master/L3/Pr%C3%A9sentation%20du%20cours%20Objet/presentation.pdf[Pres course]
* https://github.com/oliviercailloux/java-course/blob/master/Syntax/README.adoc[Syntax]: basics; exercices (Shorts and Methods); then Classes

// *Second slot*

* https://github.com/oliviercailloux/java-course/blob/master/Execution/README.adoc[Execution]
* Syntax: packages ; more exercices

* At end: random questions involving jshell, javac & java

[[S2]]
=== S2a (12)

* https://github.com/oliviercailloux/java-course/blob/master/Dev%20tools/Eclipse.adoc[Eclipse & Java]

* At end: random questions involving Eclipse, javac & java

=== S2b (13)

* Graded exercice https://github.com/oliviercailloux/java-course/blob/master/Git/Git%20branching.adoc[Git branching]: similar to the exercices related to https://github.com/oliviercailloux/java-course/blob/master/Git/README.adoc[Git] (see also https://github.com/oliviercailloux/java-course/blob/master/Git/Git-br-2018.adoc[Git-br-2018] and https://github.com/oliviercailloux/java-course/blob/master/Git/Git-br-2019.adoc[Git-br-2019]). 25 minutes: 13:52 to 14:17 (or 14:22 max for late commits).
* https://github.com/oliviercailloux/java-course/blob/master/Overview/README.adoc[Basics of objects]

[[S3]]
=== S3 (13 and 14)

* Graded exercice https://github.com/oliviercailloux/java-course/blob/master/Dev%20tools/Exercice.adoc[Eclipse]: about refactoring, navigating, formatting… You have 12 minutes (17:29 to 17:41 or max 17:46 for late commits).
* Two major aspects of software engineering: https://github.com/oliviercailloux/java-course/blob/master/Contrat/README.adoc[contract] and fail-fast.

[[S4]]
=== S4 (27)

* https://github.com/oliviercailloux/java-course/blob/master/Contrat/README.adoc[Contract]: end; exercices
* https://github.com/oliviercailloux/java-course/blob/master/Maven/README.adoc[Maven]: overview

[[S5]]
=== S5 (10 Feb)

* https://github.com/oliviercailloux/java-course/blob/master/Objects%20%26%20interfaces/README.adoc[Objects & interfaces]. Exercices: EE5.1, 5.2, EE5.3, Three dice
* Interfaces. Exercice: I like to move it move it; Coffee

[[S6]]
=== S6 (12 Feb)

* Polymorphism: inheritance
* The `Object` class and its methods: `toString()`, `equals`, `hashcode`. Exercice: Car string
* http://journals.ecs.soton.ac.uk/java/tutorial/java/exceptions/throwable.html[Exceptions]. Exercice: Checked exceptions

[[S7]]
=== S7 (3 Mar)

* Graded exercice about: Eclipse, Contract, Objects, Interfaces, Exceptions. Accept https://classroom.github.com/a/M-4KNbQC[this assignment] to create your remote repository for this exercice. Clone my https://github.com/oliviercailloux/coffee/[Coffee] repository. Connect your local resulting repository to your remote repository for this exercice (instead of, or in supplement to, my Coffee repository). Implement the classes `DripCoffeeMaker` and `MyEspressoMachine`, making sure they satisfy their contracts. Do _not_ _change_ any provided code, you may only _add_ new code (thus, leave the package declarations untouched). Push your work frequently to your remote repository for this exercice, making sure that it compiles. You have 45 minutes: the deadline is at 14:31.
** As usual, you must configure Eclipse as expected in this course; and make sure your git `user.name` equals your GitHub username.
** If the code does not compile, the grade is zero.
* https://github.com/oliviercailloux/java-course/blob/master/Objects%20%26%20interfaces/README.adoc#generics[Generics]
* https://github.com/oliviercailloux/java-course/blob/master/Collections/README.adoc[Collections]

[[S8]]
=== S8 (5 Mar)

* https://github.com/oliviercailloux/java-course/blob/master/JUnit/README.adoc[Unit testing]
* https://github.com/oliviercailloux/java-course/blob/master/Syntax/README.adoc#varargs[Varargs] syntax & exercice
* Primitive types (autoboxing); optional; give guarantees: https://github.com/oliviercailloux/java-course/blob/master/Style/Null.adoc[Protect against null references]
* https://github.com/oliviercailloux/java-course/blob/master/Style/README.adoc[Favor static factory methods]
* No https://mycore.core-cloud.net/index.php/s/jDdn1OcEfjjj8NU[plagiarism], but reuse! (Link to audio track from https://fr.wikipedia.org/wiki/Le_Jeu_des_dictionnaires[Le Jeu des Dictionnaires], included with permission from geluck.com.)
* Files and https://github.com/oliviercailloux/java-course/blob/master/Flows.adoc[flows]
* Projects discussion

// Delivery 1: before end of 20 April. See instructions.

[[S9]]
=== S9 (17 Mar)

* Graded exercice, _at Dauphine_: mainly about the contents of S7 and S8. As usual, you will have to accept an assignment to create your own remote repository; clone one of my repositories; connect your local repository to your own remote repository; and push your commits there. Make sure you can do this easily. *This test will count for three of the previous tests.*

* Files and flows: https://github.com/oliviercailloux/java-course/blob/master/Flows.adoc#path-operations[Path operations] and providers.
* Comparator and sorting, (Comparable), Maps
** More info: https://math.hws.edu/eck/cs124/javanotes7/c10/[ES10.3] to 10.5, https://math.hws.edu/eck/cs124/javanotes7/c8/[ES8] intro to 8.4, Airiau https://www.lamsade.dauphine.fr/~airiau/Teaching/L3-Java/cours6.pdf[C6]
* *Exercices*:
** Define an interface `EasyMap` with two methods: a method that puts a pair of key (`String`, the last name of a person, here supposed to be unique) and value (`Person`, having a first name and a last name) into a map, and a method that returns an `Optional` containing the value corresponding to the given key (parameter of the method) or that returns an empty `Optional` if there is no such value. Implement this interface in a class `EasyMapImpl`. Provide a static factory method in the interface `EasyMap` (it declares that it returns an `EasyMap`, and does it by instanciating your `EasyMapImpl`). Minimize the number of lines of code (but not at the price of readability). Note that this exercice implements a part of the https://en.wikipedia.org/wiki/Forwarding_(object-oriented_programming)[forwarding] pattern.
** Define `MyComparator`, a class that implements a comparator over `Person`: it considers a person as “smaller” (or “coming before”) another person according to the dictionary ordering of their last name. Add a third method to `EasyMap`, that returns a list of values ordered by that comparator.
// implement a hashmap with a list of lists
** *TODO home* https://math.hws.edu/javanotes/c10/exercises.html[EE10.3] (you may use `List` implementations, but not `Map`, of course)
// TreeMap<String, TreeSet<Integer>>  concordance
** https://math.hws.edu/javanotes/c10/exercises.html[EE10.6]
<commit_msg>No pr S8<commit_after>= Planning
:toc: preamble
:sectanchors:
//works around awesome_bot bug that used to be published at github.com/dkhamsing/awesome_bot/issues/182.
:emptyattribute:

The entry page of the Java course in L3.

== Prerequisites
You know algorithmics: you know how to design algorithms to solve problems, using data structures, if required, such as lists or stacks. 
You can use at least one of the three major operating systems (Windows, a Linux variant or Mac OS) to compile and run a program in at least one language, and are generally at ease with that OS: you know how to edit files and move them around, install and use basic programs, …

== Abbreviations

* [I]: Important
* [O]: Optional (do it if you are specifically interested in the related aspect)
* ESx.y (or ESx.y.z): designates section x.y (or x.y.z) in Eck’s https://math.hws.edu/javanotes/[book] (in chapter x)
* EQx: quiz chapter x
* EQx.y: question number y in Eck’s book, from quiz chapter x
* EEx.y: exercice number y in Eck’s book, from exercices chapter x
* Ranges are always given with ends included (EQ1.3 to 1.9 means 3 and 9 included)
* Markers apply to the whole line. Example: "4.3 intro to 4.3.2, 4.6.1 [I]" means that everything in between 4.3 and 4.3.2 plus 4.6.1 are important.

== General references
* Eck’s https://math.hws.edu/javanotes/[book]
* <NAME>’s https://www.lamsade.dauphine.fr/~airiau/Teaching/L3-Java/[course] (in French)
* The https://app.gosoapbox.com/event/290081765/[confusion barometer]
* Java API https://docs.oracle.com/en/java/javase/11/docs[Javadoc]
* https://teams.microsoft.com/l/meetup-join/19%3Aaaa1a5bbda774320a271ee4b5ba402e4@thread.tacv2/1609694419561[Teams]
* https://github.com/oliviercailloux/Teaching/blob/main/README.adoc#take-notes[Take notes]!

//* https://whiteboard.fi/g67kd

== Planning

[[S1]]
=== S1 (6 January 2021)

Prerequisites: https://github.com/oliviercailloux/java-course/blob/master/Best%20practices/Various.adoc#installing-the-jdk[JDK]

* https://github.com/oliviercailloux/java-course/raw/master/L3/Pr%C3%A9sentation%20du%20cours%20Objet/presentation.pdf[Pres course]
* https://github.com/oliviercailloux/java-course/blob/master/Syntax/README.adoc[Syntax]: basics; exercices (Shorts and Methods); then Classes

// *Second slot*

* https://github.com/oliviercailloux/java-course/blob/master/Execution/README.adoc[Execution]
* Syntax: packages ; more exercices

* At end: random questions involving jshell, javac & java

[[S2]]
=== S2a (12)

* https://github.com/oliviercailloux/java-course/blob/master/Dev%20tools/Eclipse.adoc[Eclipse & Java]

* At end: random questions involving Eclipse, javac & java

=== S2b (13)

* Graded exercice https://github.com/oliviercailloux/java-course/blob/master/Git/Git%20branching.adoc[Git branching]: similar to the exercices related to https://github.com/oliviercailloux/java-course/blob/master/Git/README.adoc[Git] (see also https://github.com/oliviercailloux/java-course/blob/master/Git/Git-br-2018.adoc[Git-br-2018] and https://github.com/oliviercailloux/java-course/blob/master/Git/Git-br-2019.adoc[Git-br-2019]). 25 minutes: 13:52 to 14:17 (or 14:22 max for late commits).
* https://github.com/oliviercailloux/java-course/blob/master/Overview/README.adoc[Basics of objects]

[[S3]]
=== S3 (13 and 14)

* Graded exercice https://github.com/oliviercailloux/java-course/blob/master/Dev%20tools/Exercice.adoc[Eclipse]: about refactoring, navigating, formatting… You have 12 minutes (17:29 to 17:41 or max 17:46 for late commits).
* Two major aspects of software engineering: https://github.com/oliviercailloux/java-course/blob/master/Contrat/README.adoc[contract] and fail-fast.

[[S4]]
=== S4 (27)

* https://github.com/oliviercailloux/java-course/blob/master/Contrat/README.adoc[Contract]: end; exercices
* https://github.com/oliviercailloux/java-course/blob/master/Maven/README.adoc[Maven]: overview

[[S5]]
=== S5 (10 Feb)

* https://github.com/oliviercailloux/java-course/blob/master/Objects%20%26%20interfaces/README.adoc[Objects & interfaces]. Exercices: EE5.1, 5.2, EE5.3, Three dice
* Interfaces. Exercice: I like to move it move it; Coffee

[[S6]]
=== S6 (12 Feb)

* Polymorphism: inheritance
* The `Object` class and its methods: `toString()`, `equals`, `hashcode`. Exercice: Car string
* http://journals.ecs.soton.ac.uk/java/tutorial/java/exceptions/throwable.html[Exceptions]. Exercice: Checked exceptions

[[S7]]
=== S7 (3 Mar)

* Graded exercice about: Eclipse, Contract, Objects, Interfaces, Exceptions. Accept https://classroom.github.com/a/M-4KNbQC[this assignment] to create your remote repository for this exercice. Clone my https://github.com/oliviercailloux/coffee/[Coffee] repository. Connect your local resulting repository to your remote repository for this exercice (instead of, or in supplement to, my Coffee repository). Implement the classes `DripCoffeeMaker` and `MyEspressoMachine`, making sure they satisfy their contracts. Do _not_ _change_ any provided code, you may only _add_ new code (thus, leave the package declarations untouched). Push your work frequently to your remote repository for this exercice, making sure that it compiles. You have 45 minutes: the deadline is at 14:31.
** As usual, you must configure Eclipse as expected in this course; and make sure your git `user.name` equals your GitHub username.
** If the code does not compile, the grade is zero.
* https://github.com/oliviercailloux/java-course/blob/master/Objects%20%26%20interfaces/README.adoc#generics[Generics]
* https://github.com/oliviercailloux/java-course/blob/master/Collections/README.adoc[Collections]

[[S8]]
=== S8 (5 Mar)

* https://github.com/oliviercailloux/java-course/blob/master/JUnit/README.adoc[Unit testing]
* https://github.com/oliviercailloux/java-course/blob/master/Syntax/README.adoc#varargs[Varargs] syntax & exercice
* Primitive types (autoboxing); optional; give guarantees: https://github.com/oliviercailloux/java-course/blob/master/Style/Null.adoc[Protect against null references]
* https://github.com/oliviercailloux/java-course/blob/master/Style/README.adoc[Favor static factory methods]
* No https://mycore.core-cloud.net/index.php/s/jDdn1OcEfjjj8NU[plagiarism], but reuse! (Link to audio track from https://fr.wikipedia.org/wiki/Le_Jeu_des_dictionnaires[Le Jeu des Dictionnaires], included with permission from geluck.com.)
* Files and https://github.com/oliviercailloux/java-course/blob/master/Flows.adoc[flows]

// Delivery 1: before end of 20 April. See instructions.

[[S9]]
=== S9 (17 Mar)

* Graded exercice, _at Dauphine_: mainly about the contents of S7 and S8. As usual, you will have to accept an assignment to create your own remote repository; clone one of my repositories; connect your local repository to your own remote repository; and push your commits there. Make sure you can do this easily. *This test will count for three of the previous tests.*

* Files and flows: https://github.com/oliviercailloux/java-course/blob/master/Flows.adoc#path-operations[Path operations] and providers.
* Comparator and sorting, (Comparable), Maps
** More info: https://math.hws.edu/eck/cs124/javanotes7/c10/[ES10.3] to 10.5, https://math.hws.edu/eck/cs124/javanotes7/c8/[ES8] intro to 8.4, Airiau https://www.lamsade.dauphine.fr/~airiau/Teaching/L3-Java/cours6.pdf[C6]
* *Exercices*:
** Define an interface `EasyMap` with two methods: a method that puts a pair of key (`String`, the last name of a person, here supposed to be unique) and value (`Person`, having a first name and a last name) into a map, and a method that returns an `Optional` containing the value corresponding to the given key (parameter of the method) or that returns an empty `Optional` if there is no such value. Implement this interface in a class `EasyMapImpl`. Provide a static factory method in the interface `EasyMap` (it declares that it returns an `EasyMap`, and does it by instanciating your `EasyMapImpl`). Minimize the number of lines of code (but not at the price of readability). Note that this exercice implements a part of the https://en.wikipedia.org/wiki/Forwarding_(object-oriented_programming)[forwarding] pattern.
** Define `MyComparator`, a class that implements a comparator over `Person`: it considers a person as “smaller” (or “coming before”) another person according to the dictionary ordering of their last name. Add a third method to `EasyMap`, that returns a list of values ordered by that comparator.
// implement a hashmap with a list of lists
** *TODO home* https://math.hws.edu/javanotes/c10/exercises.html[EE10.3] (you may use `List` implementations, but not `Map`, of course)
// TreeMap<String, TreeSet<Integer>>  concordance
** https://math.hws.edu/javanotes/c10/exercises.html[EE10.6]

{'fraction_non_alphanumeric': 0.12003888825345992, 'fraction_numerical': 0.027736474894201075, 'mean_word_length': 4.913763949949273, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 8, 'https://': 82, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1013373', 'n_tokens_mistral': 6109, 'n_tokens_neox': 5623, 'n_words': 1723}