# 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
> 
---
> [!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]]