{"id":391,"date":"2025-03-22T12:09:25","date_gmt":"2025-03-22T11:09:25","guid":{"rendered":"https:\/\/wmg-studio.com\/?p=391"},"modified":"2025-03-22T12:09:25","modified_gmt":"2025-03-22T11:09:25","slug":"programmation-orientee-objet-poo","status":"publish","type":"post","link":"https:\/\/wmg-studio.com\/index.php\/2025\/03\/22\/programmation-orientee-objet-poo\/","title":{"rendered":"Programmation Orient\u00e9e Objet (POO)"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\n  <title>POO en .NET &#8211; Cours complet illustr\u00e9<\/title>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;700&#038;display=swap\" rel=\"stylesheet\"\/>\n  <style>\n    body {\n      font-family: 'Inter', sans-serif;\n      margin: 0;\n      background-color: #f5f7fa;\n      color: #1e1e1e;\n      line-height: 1.7;\n    }\n    header {\n      background: linear-gradient(to right, #0077ff, #00c896);\n      color: white;\n      padding: 3rem 1rem;\n      text-align: center;\n    }\n    header h1 {\n      font-size: 2.8rem;\n      margin: 0;\n    }\n    .container {\n      max-width: 960px;\n      margin: 2rem auto;\n      background: white;\n      padding: 2.5rem;\n      border-radius: 14px;\n      box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n    }\n    h2, h3 {\n      color: #0077ff;\n      margin-top: 2rem;\n    }\n    h2 {\n      font-size: 1.8rem;\n      border-bottom: 2px solid #00c896;\n      padding-bottom: 0.3rem;\n    }\n    h3 {\n      font-size: 1.4rem;\n      margin-top: 1.5rem;\n    }\n    ul {\n      padding-left: 1.5rem;\n    }\n    li {\n      margin-bottom: 0.5rem;\n    }\n    pre {\n      background-color: #f0f4f8;\n      padding: 1rem;\n      border-radius: 8px;\n      overflow-x: auto;\n      font-family: 'Courier New', monospace;\n      font-size: 0.95rem;\n      border-left: 4px solid #0077ff;\n    }\n    img {\n      max-width: 100%;\n      display: block;\n      margin: 1.5rem 0;\n      border-radius: 8px;\n      box-shadow: 0 4px 10px rgba(0,0,0,0.1);\n    }\n    .highlight {\n      background-color: #e6fffa;\n      border-left: 5px solid #00c896;\n      padding: 1rem;\n      border-radius: 8px;\n      margin: 1.5rem 0;\n    }\n    footer {\n      text-align: center;\n      font-size: 0.9rem;\n      color: #888;\n      padding: 2rem 1rem;\n    }\n  <\/style>\n<\/head>\n<body>\n\n<header>\n  <h1>Programmation Orient\u00e9e Objet (POO)<\/h1>\n  <p>Un cours complet, illustr\u00e9 et pratique en .NET<\/p>\n<\/header>\n\n<div class=\"container\">\n\n  <h2>\ud83d\udcd8 Qu&rsquo;est-ce que la POO ?<\/h2>\n  <p>\n    La Programmation Orient\u00e9e Objet (POO) est une mani\u00e8re de concevoir des logiciels en s&rsquo;inspirant du monde r\u00e9el. Chaque \u00e9l\u00e9ment important du domaine m\u00e9tier est repr\u00e9sent\u00e9 par un <strong>objet<\/strong> contenant :\n  <\/p>\n  <ul>\n    <li><strong>Des attributs<\/strong> (ou propri\u00e9t\u00e9s) : ce que l&rsquo;objet a<\/li>\n    <li><strong>Des m\u00e9thodes<\/strong> : ce que l&rsquo;objet sait faire<\/li>\n  <\/ul>\n  <p>\n    Elle a \u00e9t\u00e9 popularis\u00e9e dans les ann\u00e9es 80 \u00e0 travers des langages comme Smalltalk, puis C++, Java, et aujourd&rsquo;hui .NET\/C#. Elle facilite la r\u00e9utilisation, la lisibilit\u00e9 et la maintenance du code.\n  <\/p>\n\n  <h2>\ud83e\uddf0 Exemple simple avec une voiture<\/h2>\n  <p>Voici une classe qui repr\u00e9sente une voiture avec ses propri\u00e9t\u00e9s et son comportement :<\/p>\n  <pre>\npublic class Voiture\n{\n    public string Modele { get; set; }\n    public string Couleur { get; set; }\n    public int Annee { get; set; }\n\n    public void Demarrer()\n    {\n        Console.WriteLine(\"La voiture d\u00e9marre...\");\n    }\n}\n\nvar maVoiture = new Voiture\n{\n    Modele = \"Mercedes CLA\",\n    Couleur = \"Noir\",\n    Annee = 2022\n};\n\nmaVoiture.Demarrer();\n  <\/pre>\n  <p>Cet objet <code>maVoiture<\/code> est une instance concr\u00e8te de la classe <code>Voiture<\/code>. D&rsquo;autres voitures peuvent \u00eatre cr\u00e9\u00e9es \u00e0 partir du m\u00eame mod\u00e8le.<\/p>\n\n  <h2>\u2696\ufe0f Les piliers de la POO<\/h2>\n\n  <h3>Encapsulation<\/h3>\n  <p>Elle prot\u00e8ge les donn\u00e9es sensibles d\u2019un objet en interdisant l\u2019acc\u00e8s direct depuis l\u2019ext\u00e9rieur. On y acc\u00e8de uniquement via des m\u00e9thodes :<\/p>\n  <pre>\npublic class CompteBancaire\n{\n    private decimal solde;\n\n    public void Deposer(decimal montant)\n    {\n        if (montant > 0) solde += montant;\n    }\n\n    public decimal ConsulterSolde() => solde;\n}\n  <\/pre>\n\n  <h3>H\u00e9ritage<\/h3>\n  <p>Une classe enfant h\u00e9rite des propri\u00e9t\u00e9s d\u2019une classe parent. Exemple avec <code>Vehicule<\/code> et <code>Moto<\/code> :<\/p>\n  <pre>\npublic class Vehicule\n{\n    public string Marque { get; set; }\n}\n\npublic class Moto : Vehicule\n{\n    public bool AUnCasque { get; set; }\n}\n  <\/pre>\n\n  <h3>Polymorphisme<\/h3>\n  <p>Il permet \u00e0 une m\u00eame m\u00e9thode de se comporter diff\u00e9remment selon le type de l\u2019objet :<\/p>\n  <pre>\npublic class Animal\n{\n    public virtual void Crier() => Console.WriteLine(\"Cri d'animal\");\n}\n\npublic class Chien : Animal\n{\n    public override void Crier() => Console.WriteLine(\"Wouf !\");\n}\n  <\/pre>\n\n  <h3>Abstraction<\/h3>\n  <p>Elle permet de d\u00e9finir une interface ou une classe abstraite qui cache les d\u00e9tails d&rsquo;impl\u00e9mentation :<\/p>\n  <pre>\npublic interface IPaiement\n{\n    void Payer(decimal montant);\n}\n\npublic class PaiementCB : IPaiement\n{\n    public void Payer(decimal montant)\n    {\n        Console.WriteLine($\"Paiement de {montant} \u20ac par carte\");\n    }\n}\n  <\/pre>\n\n  <h2>\ud83d\udd17 Les associations entre objets<\/h2>\n  <p>Les objets peuvent \u00eatre li\u00e9s entre eux par diff\u00e9rents types de relations :<\/p>\n  <ul>\n    <li><strong>Association :<\/strong> une classe utilise une autre (relation simple)<\/li>\n    <li><strong>Agr\u00e9gation :<\/strong> une classe poss\u00e8de une autre classe, mais l\u2019objet agr\u00e9g\u00e9 peut exister seul<\/li>\n    <li><strong>Composition :<\/strong> l\u2019objet contenu ne peut exister sans l\u2019objet contenant<\/li>\n  <\/ul>\n  <pre>\npublic class Moteur\n{\n    public int Chevaux { get; set; }\n}\n\npublic class Voiture\n{\n    public Moteur Moteur { get; set; } = new Moteur();\n}\n  <\/pre>\n\n  <h2>\ud83d\udce6 Objet de valeur (Value Object)<\/h2>\n  <p>Un objet de valeur est une entit\u00e9 sans identifiant, compar\u00e9e uniquement par son contenu. Tr\u00e8s utile pour repr\u00e9senter des donn\u00e9es comme une adresse ou une monnaie :<\/p>\n  <pre>\npublic class Adresse\n{\n    public string Rue { get; }\n    public string Ville { get; }\n\n    public Adresse(string rue, string ville)\n    {\n        Rue = rue;\n        Ville = ville;\n    }\n\n    public override bool Equals(object obj)\n    {\n        return obj is Adresse a &&\n               a.Rue == Rue &&\n               a.Ville == Ville;\n    }\n\n    public override int GetHashCode() => HashCode.Combine(Rue, Ville);\n}\n  <\/pre>\n\n  <h2>\u2705 En r\u00e9sum\u00e9<\/h2>\n  <ul>\n    <li>La POO structure le code autour d\u2019objets du monde r\u00e9el<\/li>\n    <li>Elle repose sur 4 piliers : encapsulation, h\u00e9ritage, polymorphisme, abstraction<\/li>\n    <li>Les objets peuvent \u00eatre li\u00e9s par association, agr\u00e9gation ou composition<\/li>\n    <li>Les objets de valeur sont immuables et compar\u00e9s par leurs donn\u00e9es<\/li>\n  <\/ul>\n<\/div>\n\n<footer>\n  &copy; 2025 &#8211; Cours POO illustr\u00e9 avec .NET par Farhat\n<\/footer>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>POO en .NET &#8211; Cours complet illustr\u00e9 Programmation Orient\u00e9e Objet (POO) Un cours complet, illustr\u00e9 et pratique en .NET \ud83d\udcd8 Qu&rsquo;est-ce que la POO ? La Programmation Orient\u00e9e Objet (POO) est une mani\u00e8re de concevoir des logiciels en s&rsquo;inspirant du monde r\u00e9el. Chaque \u00e9l\u00e9ment important du domaine m\u00e9tier est repr\u00e9sent\u00e9 par un objet contenant : Des attributs (ou propri\u00e9t\u00e9s) : ce que l&rsquo;objet a Des m\u00e9thodes : ce que l&rsquo;objet sait faire Elle a \u00e9t\u00e9 popularis\u00e9e dans les ann\u00e9es 80 \u00e0 travers des langages comme Smalltalk, puis C++, Java, et aujourd&rsquo;hui .NET\/C#. Elle facilite la r\u00e9utilisation, la lisibilit\u00e9 et la<\/p>\n","protected":false},"author":1,"featured_media":237,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-391","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-poo"],"_links":{"self":[{"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/posts\/391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/comments?post=391"}],"version-history":[{"count":7,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/posts\/391\/revisions"}],"predecessor-version":[{"id":398,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/posts\/391\/revisions\/398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/media\/237"}],"wp:attachment":[{"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/media?parent=391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/categories?post=391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wmg-studio.com\/index.php\/wp-json\/wp\/v2\/tags?post=391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}