# POO (Object Oriented Programming)

## Type de langages

Il existe 3 types de langages lorsqu'on s'intéresse à leur exécution. Ce passage de langage "humain" à instructions processeur (code machine). Voici les 3 types de langages différents sur ce point là :

| Type de langage                                 | Fonctionnement                                                                                                                                                                                                                                             | Avantages/Inconvénients                                                                                                                                                                |
| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Langages compilés                               | Le code est directement compilé en instructions processeur, adaptées sur mesure pour le processeur pour lequel il a été compilé et pour le noyau avec lequel il devra communiquer.                                                                         | La compilation met un certains temps et est adaptée qu'à un seul `OS` (noyau plus précisément).                                                                                        |
| Langages compilés en IL (langage intermédiaire) | Une `VM` va exécuter les instructions compilées en `IL`. Cette optimisation par compilation préalable permet d'être rapide sans pour autant sacrifier la portabilité puisque c'est la `VM` qui se charge d'être compatible avec les systèmes sous-jacents. | La portabilité est bien meilleure que chez les langages compilés mais l'exécution est plus lente car effectuée par une `VM` qui s'occupe de lire le `IL` et exécuter les instructions. |
| Langages interprétés                            | Un autre programme appelé interpréteur va lire en temps réel les instructions du `script` (le code) et exécuter les instructions.                                                                                                                          | Le type de langages le plus lent, mais le plus pratique à manipuler car effectif immédiatement à l'aide de l'interpréteur adéquat.                                                     |

## Choix du langage

Tous les langages reposent sur les mêmes principes de conditions, boucles, fonctions et variables. Chacun possède ses petites subtilités et différences mais globalement, apprendre un langage revient à apprendre à programmer. Changer de langage est un effort mineur une fois toutes ces bases acquises.

Voici une liste de quelques langages connus ainsi que leur préférence d'utilisation :

| Langage                         | Execution               | Utilisation                                                                                                                                                                                                                                     |
| ------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Python` & `Ruby` & `Perl`      | Langages interprétés    | Automatisation de tâches, algorithmes scientifiques                                                                                                                                                                                             |
| `JavaScript`                    | Langage interprété      | Modification du comportement d'une page web, souvent basé sur des évènements. Utilisé aussi en `back-end` d'applications web avec `NodeJS`.                                                                                                     |
| `PHP`                           | Langage interprété      | `Back-end` d'applications web dynamiques.                                                                                                                                                                                                       |
| `C` & `C++` & `Rust`            | Langages compilés       | Développements d'applications sur PC/serveurs/mobiles. Priorité à la performance.                                                                                                                                                               |
| `Java` & `C#`                   | Langages Intermédiaires | Souvent la même utilisation que les langages compilés mais avec une meilleure portabilité car la performance reste raisonnable mais c'est compilé en un langage intermédiaire dont les instructions sont exécutées par une `VM` optimisée pour. |
| Les `ASM` (assembleur)          | Langages compilés       | Petits programmes dont l'optimisation est extrêmement importante, souvent utilisés dans les systèmes embarqués.                                                                                                                                 |
| `Bash` & `PowerShell` & `Batch` | Langages interprétés    | Utilisés comme langages d'interaction avec l'ordinateur dans un terminal de commandes. Sert d'interface entre l'utilisateur et la machine.                                                                                                      |

{% hint style="success" %}
Il existe une multitude de langages, chacun utile pour répondre à un besoin. Il y a des langages pour le web, d'autres pour les applications PC, d'autres pour les applications serveurs ou encore pour les applications mobiles.

Ici, pour des raisons de praticité, nous allons baser nos explications sur JavaScript, un langage script orienté objet. La particularité de ce langage est qu'il est utilisé dans le web, côté client et côté serveur. Au départ, le JavaScript était utilisé côté client seulement, pour automatiser certaines tâches directement sur notre navigateur. C'est cet aspect là du JavaScript que nous allons traiter ici. Mais gardez bien en tête que TOUTES ces explications s'appliquent aux autres langages et que comprendre en profondeur un langage permet de comprendre tous les autres langages (presque).
{% endhint %}

## Que peut-on faire avec JavaScript ?

`JavaScript` permet d'automatiser tout ce que notre navigateur est capable de faire. Lorsque vous visitez une page web, votre navigateur reçoit un fichier `HTML` et vous l'affiche correctement. Et bien le `JavaScript` (généralement envoyé par le serveur web auquel appartient la page) est une suite d'instructions pour votre navigateur qui permet de modifier ce contenu `HTML` de manière automatique, ou bien d'effectuer une toute nouvelle requête ou modifier certains cookies.\
\
En bref, le `JavaScript` est une suite d'instruction que votre navigateur peut choisir de suivre. C'est important de comprendre cela car c'est ce qui répond à notre question : "Que peut-on faire avec `JavaScript` ?". En effet, avec `JavaScript`, on peut faire tout ce que notre navigateur est capable de faire, c'est à dire, tout ce que VOUS êtes capable de faire avec votre navigateur, que ça soit consulter et modifier vos cookies, analyser vos connexions, ouvrir de nouveaux onglets, en fermer certains, modifier un contenu `HTML` via l'inspecteur d'éléments.

## Introduction

Je vais donc expliquer le plus simplement possible les notions les plus importantes de programmation orientée objet en m'appuyant sur `JavaScript` pour mes exemples et la syntaxe. Cela permet aussi de se familiariser avec des notions de web qui vous serons dans tous les cas très utiles.

{% hint style="warning" %}
Ma motivation principale pour utiliser `JavaScript` comme langage d'exemple est qu'il est interprété et visuel. Donc le rendu de nos modifications du code est instantané et visuel. De plus, nous possédons tous un interpréteur `JavaScript` sur notre ordinateur, en effet, c'est notre navigateur. Pas besoin de télécharger d'applications additionnelles comme `Python`.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.nerumir.fr/programmation/poo-object-oriented-programming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
