From 8a29677c5dbbca2084dbda1fc9dd1f54fb8a50c0 Mon Sep 17 00:00:00 2001 From: Alanna DEVLIN GENIN Date: Fri, 18 Jul 2025 03:07:50 +0200 Subject: [PATCH] feat: add instructions and to-dos --- _formations/oop/0_installation.md | 7 +++++- _formations/oop/6_examen_fa.md | 37 +++++++++++++------------------ _formations/oop/6_examen_fi.md | 23 ++++++++++++------- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/_formations/oop/0_installation.md b/_formations/oop/0_installation.md index f49c30ca..eb4975a9 100644 --- a/_formations/oop/0_installation.md +++ b/_formations/oop/0_installation.md @@ -13,10 +13,15 @@ visible: true type: formation --- -# Installation +# Installation de PyCharm Pour ce cours, nous allons utiliser PyCharm, un environnement de développement intégré (IDE) pour Python. Téléchargez PyCharm Community Edition sur le site officiel de JetBrains ([lien ici](https://www.jetbrains.com/fr-fr/pycharm/download/?section=windows)). :warning: **Attention** : assurez-vous de télécharger la version **Community Edition**, qui est gratuite et non la version PyCharm Professional, qui est payante. {% include figure.liquid loading="eager" path="assets/img/oop/install-pycharm.png" title="Install PyCharm" class="img-fluid rounded z-depth-1" %} + +# Utilisation de PyCharm + +> TO DO: Ajouter des instructions pour l'utilisation de PyCharm +{: .block-danger } diff --git a/_formations/oop/6_examen_fa.md b/_formations/oop/6_examen_fa.md index 5ac3ea09..fe2c9686 100644 --- a/_formations/oop/6_examen_fa.md +++ b/_formations/oop/6_examen_fa.md @@ -25,7 +25,7 @@ type: formation > #### :exclamation: Consignes > -> L'accès à Internet est autorisé pour **consulter la documentation Python**. Il est **interdit de communiquer** avec d'autres personnes ou d'**utiliser des outils d'Intelligence Artificielle** tels que ChatGPT. **En cas de triche, la note de 0 sera attribuée.** +> L'accès à Internet est autorisé pour **consulter la documentation Python**. Il est **interdit de communiquer** avec d'autres personnes ou d'**utiliser des outils d'Intelligence Artificielle** tels que ChatGPT ou les auto-complétions de code. **En cas de triche, la note de 0 sera attribuée.** > {: .block-danger } @@ -48,7 +48,7 @@ StreamFlix propose deux types d'abonnements : Vous devez concevoir et implémenter un système orienté objet qui permettra de : 1. Gérer différents types de contenus (films et séries) -2. Gérer les abonnements des utilisateurs +2. Gérer les abonnements des utilisateurs 3. Gérer les visionnages 4. Implémenter des tests unitaires @@ -57,8 +57,8 @@ classDiagram class Content { - id : int + title : str - + genre : str - + year : int + + genre : str + + year : int # ratings : list[int] + duration : int + __init__(id, title, genre, year, duration) @@ -68,14 +68,14 @@ classDiagram + add_rating(rating: int) void +__eq__(other) bool } - + class Movie { + __init__(id, title, genre, year, duration) + is_long_movie() bool + __str__() +__eq__(other) bool } - + class Series { + num_seasons int + episodes_per_season list~int~ @@ -85,7 +85,7 @@ classDiagram + __str__() + __lt__(other: Series) } - + class Subscription { <> # viewed_time int @@ -95,22 +95,21 @@ classDiagram + __init__(type: str, monthly_price: float, quality: str) + can_watch(content: Content) bool + add_viewed_time(duration: int) void - + show_advertisement() void + is_premium() bool } - + class FreeSubscription { + can_watch(content: Content) bool + add_viewed_time(duration: int) void + show_advertisement() void + is_premium() bool } - + class PremiumSubscription { + can_watch(content: Content) bool + is_premium() bool } - + class User { + id int + username str @@ -120,7 +119,7 @@ classDiagram + __init__(id, username, email, subscription) + watch(content: Content) } - + class WatchHistory { + history : dict + __init__() @@ -128,7 +127,7 @@ classDiagram + get_history(user_id) + most_watched_genre(user_id) } - + Content <|-- Movie Content <|-- Series Subscription <|-- FreeSubscription @@ -145,9 +144,9 @@ classDiagram |----------------------------------------------|----------------------------------------------------| | `id` | Identifiant du film | | `title` | Titre du contenu | -| `genre` | Genre du contenu. -| `year` | Année de sortie. | -| `ratings` | Liste des évaluations du contenu. | +| `genre` | Genre du contenu. +| `year` | Année de sortie. | +| `ratings` | Liste des évaluations du contenu. | | `duration` | Durée du contenu en minutes. | | `__init__(id, title, genre, year, duration)` | Constructeur de la classe Content. | | `get_id()` | Retourne l'identifiant du contenu. | @@ -194,7 +193,6 @@ La classe `Subscription` définit les méthodes et attributs communs à tous les | `__init__()` | Constructeur initialisant le temps de visionnage à 0 | | `can_watch(content: Content) -> bool` | Méthode abstraite déterminant si un média peut être visionné | | `add_viewing_time(duration: int)` | Méthode ajoutant du temps au compteur de visionnage | -| `show_advertisement()` | Méthode gérant l'affichage des publicités | | `is_premium() -> bool` | Méthode abstraite indiquant si l'abonnement est premium | --- @@ -220,7 +218,6 @@ La classe `PremiumSubscription` définit les méthodes et attributs spécifiques |------------------|-------------| | `can_watch(content: Content) -> bool` | Retourne toujours `True` car aucune limite de temps pour les abonnés premium | | `add_viewing_time(duration: int)` | Ne fait rien car pas de limite de temps pour les abonnements premium | -| `show_advertisement()` | Ne fait rien car pas de publicités pour les abonnements premium | | `is_premium() -> bool` | Retourne toujours `True` car c'est un abonnement premium | --- @@ -313,7 +310,7 @@ Créer un fichier main avec : ### Tests unitaires -Vous devez écrire des tests unitaires pour les classes `Movie`, `Series`, `User` et `WatchHistory`. Les tests doivent couvrir les cas normaux et les cas limites. +Vous devez écrire des tests unitaires pour les classes `Movie`, `Series`, `User` et `WatchHistory`. Les tests doivent couvrir les cas normaux et les cas limites. - - diff --git a/_formations/oop/6_examen_fi.md b/_formations/oop/6_examen_fi.md index 63d8b41c..a14733f8 100644 --- a/_formations/oop/6_examen_fi.md +++ b/_formations/oop/6_examen_fi.md @@ -3,12 +3,12 @@ layout: page title: TP6 description: > TP noté -importance: 7 +importance: 8 category: BUT 2 - Programmation Orientée Objet mermaid: enabled: true zoomable: true -permalink: /oop/exam/ +permalink: /oop/exam/fi/ visible: false type: formation --- @@ -21,10 +21,17 @@ type: formation L'objectif de ce TP est de mobiliser les notions abordées lors des TPs. -L'accès à Internet est autorisé pour consulter la documentation Python, mais il est interdit de communiquer avec d'autres personnes ou d'utiliser des outils d'IA ou des chatbots tels que ChatGPT. En cas de triche, la note de 0 sera attribuée. - -:warning: Les conventions de nommage ainsi que toutes les règles de bonnes pratiques seront prises en compte dans la notation. Au moins, une classe doit être documentée. - +> #### :exclamation: Consignes +> +> L'accès à Internet est autorisé pour **consulter la documentation Python**. Il est **interdit de communiquer** avec d'autres personnes ou d'**utiliser des outils d'Intelligence Artificielle** tels que ChatGPT ou les auto-complétions de code. **En cas de triche, la note de 0 sera attribuée.** +> +{: .block-danger } + +> #### :information_source: Barème +> +> Les conventions de nommage ainsi que toutes les règles de bonnes pratiques seront prises en compte dans la notation. Au moins une classe doit être complètement documentée. +> +{: .block-warning } --- ### :notes: Gestion d'un système de musique et de podcasts @@ -143,10 +150,10 @@ classDiagram Méthodes - `__str__()` : une méthode spéciale permettant d'afficher les informations du podcast au format suivant `Podcast title by host_name has number_episodes (duration seconds)` par exemple `Y'a plus de saisons by Swann Périssé has 12 episodes (92501 seconds)`. -- `play(seconds: int)` : une méthode permettant de lire le podcast +- `play(seconds: int)` : une méthode permettant de lire le podcast - Si `seconds` est spécifié par l'utilisateur, ajouter `seconds` à `current`. - Sinon ajouter 10 minutes à la variable `current` (10 minutes = 600 secondes) -- `rate_podcast(rating: int)` : permet de noter (entre 1 et 5) le podcast. +- `rate_podcast(rating: int)` : permet de noter (entre 1 et 5) le podcast. - Ajoute une note (`rating`) dans la liste de notes (`ratings`). - Si la note est inférieure à 1 ou supérieure à 5, une exception `InvalidRatingError` doit être levée. - `average_rating()` : retourne la note moyenne du podcast, vous pouvez utiliser la méthode `mean` du module `statistics`.