# Contexte historique ![[software-engineering-SE68-SE69.png|320x229]] > Actes des conférences SE’68 (à gauche) et SE’69 (à droite). --- ## Crise du logiciel dans les années 70 - Augmentation de la puissance des machines - Logiciels de plus en plus complexes - Langages complexes et rudimentaires : Assembleur, Fortran, Cobol Problématique : - Baisse de la qualité du code - Explosion des coûts - Retards - Logiciels moins fiables --- ![[chat_nounou_effet_tunnel.jpg|320x240]] > Mon chat est un peu concon Au passage une chouette illustration de l'effet tunnel --- ## Émergence du génie logiciel > "The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software." > — IEEE Standard Glossary of Software Engineering Terminology - Gérer la **complexité** - Faciliter le **travail en équipe** - Maîtriser les **budgets** - Améliorer les **outils** - Adopter des **méthodes** et **processus** de développement pour **rationaliser** la production d’un logiciel et sa **maintenance** https://interstices.info/la-naissance-du-genie-logiciel/ --- ## Objectifs - **Extensibilité** : capacité d’ajouter de nouvelles fonctionnalités facilement - **Adaptabilité/Reutilisabilité** : capacité a voir ses fonctionnalités adaptées à de nouveaux contextes d’utilisation - **Modularité** : créer des codes indépendants, portable et interchangeable - **Maintenabilité** : Un code maintenable est un code facile à comprendre, modifier et améliorer sans introduire de régressions ou d’erreurs --- ## Maintenance > [!tip] Un logiciel n’est jamais fini et change en permanence > Un logiciel, ça change tout le temps. > Si le logiciel lui-même ne s’use pas, son utilité dépend en revanche de son **adéquation au besoin**, et ce besoin **change régulièrement**. > Un logiciel n’est donc **jamais fini**, sauf lorsqu’il est mis à la poubelle en fin de vie. > > Software Craft , première édition — Dunod --- La maintenance peut constituer la majeure partie du temps de développement d’un projet, elle est considérée en continu tout au long de l'évolution du logiciel : - Code bien architecturé - Code évolutif et robuste - Utilisation de méthodologies adaptées - Stratégie de test automatisé - Utilisation de processus de Devops : CI/CD > [!info]- Laurent Bossavit — D'où viennent les bugs — Bretzel Craft 2026 > ![](https://www.youtube.com/watch?v=c8juF7NrVLI) --- > [!tip]- And, never forget ... > No matter what the problem is, > it's always a people problem. > >  Jerry Weinberg — The Psychology of Computer Programming --- # Organisation de ce cours ![[dragobert_danse.png|320x226]] --- ## Objectifs pédagogiques - **Modéliser** des classes en appliquant les principes fondamentaux de la programmation orientée objet : encapsulation, héritage, polymorphisme - **Concevoir** une interface utilisateur graphique avec JavaFX pour interagir avec les objets métier - **Découvrir** les design patterns appliqués à la POO pour améliorer la maintenabilité du code - **Comprendre** l’écosystème Java et le rôle de la JVM comme fondation d’un langage objet portable - **Sensibiliser** aux impacts environnementaux du code et identifier des leviers d’éco-conception dans le développement Java - **Structurer** une application Java à l’aide de packages et d’un gestionnaire de dépendances (ex : Maven, Gradle) - **Intégrer** une base de données relationnelle avec JDBC pour persister les objets, ## Journée type - Présentation des notions - Exercices / Travaux pratiques - Correction > [!danger] **Ce support de cours est inutile !** > > Les connaissances se trouvent dans **les exercices** et votre **savoir faire**. Ne soyez pas passif pendant la journée. ## **Evaluation des connaissances** **QCM: 30%** - 1h30 — 30 questions **Projet à réaliser en binôme ou en groupe : 70%** - A faire en 1 semaine (vendredi 6 - vendredi 13 mars) - à rendre en fin de module # À suivre [[Aperçu de l’écosystème Java]]