# Ruby/Classes et objets
## Les objets

Un objet est une entité, quelque chose ayant une existence propre. Par exemple : une Feuille, une Fenêtre, un Entier, une Chaîne de caractères, un Tableau, etc. Un objet possède des attributs (des caractéristiques) qui peuvent être des méthodes ou des variables (ou bien évidemment les deux). Une fois créés, les objets peuvent être manipulés via leurs méthodes.
Un objet est typé : il est du type de sa classe (voir plus bas). En clair, le type de l’objet correspond au nom de sa classe.
Avant d'aller plus loin, voici les types des objets "standards" que vous avez manipulés depuis le début du cours sans le savoir :
* Integer pour les entiers
* Float pour les flottants
* String pour les chaînes de caractères
* Array pour les tableaux
* Hash pour les hachages
* Method pour les méthodes
* etc.

### Création d'objet

Comme vous l'avez déjà vu, les objets de type simple comme les nombres (entiers ou flottants), les chaînes de caractères, les tableaux, etc. sont créés par simple déclaration.
Pour tous les autres (ceux que vous avez vous-mêmes définis), on utilise la méthode new. Par exemple, pour créer un objet de type Ordinateur (en supposant que ce type soit défini), voici ce qu’il faut faire :
La méthode new permet de créer l'objet, on parlera aussi d'instancier un objet. Elle est appliquée à la classe de l'objet. L'objet nouvellement créé sera de type Ordinateur.

## Les classes

Une classe regroupe toutes les informations (variables) et toutes les méthodes communes aux objets de son type, elle nous servira de modèle chaque fois que nous voudrons en créer une nouvelle instance.
Pour déclarer une classe quelconque, il faut procéder ainsi :
Le mot-clé class débute la déclaration d'une classe et le mot-clé end y met fin.
Les noms de classes (ici Fenetre) débutent toujours par une lettre majuscule.
Par la suite, les classes que nous créerons contiendront des variables et méthodes.

## Réutilisation du code

Imaginons que vous vouliez créer un programme affichant une fenêtre contenant une image. Vous codez le tout sans problème : le nom de la fenêtre, ses dimensions, sa disposition et son contenu. Puis vos compétences en programmation augmentent et vous vous sentez aptes à créer un jeu de morpion en fenêtre. Seulement voilà : créer une fenêtre, vous savez le faire, vous l'avez d'ailleurs déjà fait un peu plus tôt.
C'est là que vous pouvez réutiliser le code existant : vous pourriez définir une classe Fenetre et vous servir d'elle à chaque fois que vous voulez créer une nouvelle fenêtre : de cette manière, on évite le code inutile et redondant.

## L'encapsulation

L'encapsulation désigne le fait de masquer les informations contenues dans un objet (les variables de la classe), et de les rendre accessibles uniquement par des méthodes que nous auront définies. Ces informations sont encapsulées dans l'objet. Ainsi, toute la partie technique du code est contournée.
Dans notre exemple : imaginons que notre class Fenetre soit dotée d'une variable couleur_fond. Plutôt que de modifier cette variable depuis l'extérieur de la classe, on définiera une méthode changer_couleur_fond contenant les instructions permettant d'accéder à la couleur de fond de la fenêtre, puis de la modifier. De cette manière, l'information de la couleur de fond de la fenêtre ne sera pas accessible et ne pourra donc pas être modifiée en dehors de cette méthode.
| Boucles | Méthodes (suite) |