Cet article est le premier d’un dossier destiné aux étudiants en fin d’études, aux développeurs juniors et également aux passionnés envisageant de passer prochainement des entretiens techniques en Java. Dans ce dossier, nous aborderons les thèmes suivants :

  • Introduction au concept de POO en JAVA
  • Héritage et encapsulation, surcharge et Polymorphisme 
  • Les modificateurs d’accès

Chaque article sera rédigé sous la forme de questions / réponses avec les questions qui sont le plus souvent posées en entretien technique. Ils vous aideront donc à mieux les préparer et les explications apportées vous permettront d’approfondir vos connaissances et compétences Java déjà acquises pour pouvoir plus facilement les réexpliquer.

      I.            Qu’est-ce que la programmation Orientée Objet ?

Contrairement à la programmation procédurale qui repose sur des séries d’instructions et de logique, la programmation orientée objet est un style de programmation qui s’articule autour d’objets renfermant des données et des mécanismes.

Avantages :

  • Elle traduit un univers complexe en de petits ensembles simples et autonomes (Objets),
  • Elle permet de sécuriser nos données en définissant des règles d’accès et de modification,
  • Elle permet de travailler à plusieurs sur un même projet composé de plusieurs briques.

   II.            Pouvez-vous nous expliquer ce que sont une classe et un objet, et nous expliquer ce qui les différencie ?

Pour répondre à cette question, nous vous proposons de répondre à 7 sous-questions qui pourraient vous être posées afin de vous faire avancer dans votre réponse.

1.       Qu’est-ce qu’une classe en java ?

Une Classe est un ensemble d’attributs et de méthodes (fonctions). En outre elle représente l’ensemble des caractéristiques et des mécanismes d’un concept du monde réel.

package invivoo;

public class Car {
	
// Declaring attributes
	private String brand ;
	private String registration ;
	private int x ;
	private int y ;
	
	
	/**
	 * Default constructor to initialize coords.
	 */
	public Car(){
		x = 0;
		y = 0;
	}
	
	/**
	 * Another constructor to set the brand and the id number.
	 * 
	 * @param brand: car brand
	 * @param registration: registration number
	 */
	public Car(String brand, String registration){
		this() ; // call the first constructor (not mandatory)
		this. brand= brand; // this : to differentiate the given parameter and the instance attribute 
		this. registration= registration;
	}

	/**
	 * A simple way to run the car
	 */
	public void move(){
		x++ ;
		y++ ;
	}
}

1.       Qu’est-ce qu’un attribut ?

D’une part, un attribut est considéré comme une caractéristique spécifique à chaque instance d’une classe. C’est pourquoi on parle d’attribut d’instance.

Exemple : dans la classe précédemment définie, la marque, le numéro d’immatriculation et les coordonnées sont des variables ou attributs propres à chaque instance de la classe « Car ». Et les données renfermées ne sont pas partagées.

D’autre part, un attribut peut contenir une donnée unique, constante ou partagée entre les instances d’une classe : on parle d’attribut de classe. (Voir la partie sur « static »).

La déclaration d’un attribut est essentiellement composée de sa visibilité (voir les modificateurs d’accès), le type de la donnée contenue et du nom qu’il porte.

2.       Qu’est-ce qu’une méthode ?

Une méthode correspond à un comportement ou une fonctionnalité de l’entité à laquelle elle est liée.

Elle est identifiée par sa signature qui est essentiellement composée de son nom, du nombre et du type de ses paramètres.

Exemple : voir la méthode « move » de la classe « Car » précédemment définie.

3.       A quoi sert le constructeur ?

Un constructeur est une méthode qui permet de créer une nouvelle instance d’une classe. Il porte toujours le nom de la classe dans laquelle il est défini et sert à initialiser des attributs soit avec des valeurs passées en paramètre ou avec des valeurs par défaut.

Sa définition n’est pas obligatoire et nous pouvons en définir, dans une même classe, autant qu’on souhaite avec des signatures différentes.

4.       Qu’est-ce qui différencie un constructeur d’une méthode ?

Une méthode (ou fonction), en POO, est une fonctionnalité rattachée à un concept d’entité du monde réel ou simplement une routine définie dans une classe utilitaire.

Littéralement, un constructeur est une méthode mais il faut préciser que :

  • Il prend obligatoirement le nom de la classe dans laquelle il est défini,
  • Il n’a pas « de type de retour » et ne retourne « aucune valeur »,
  • Il existe toujours un constructeur dans une classe, celui par défaut (vide) en cas d’absence de définition explicite,
  • Ils sont appelés à l’instanciation d’un objet avec le mot-clé « new ».

5.       Que représente un objet en Java ?

Un objet est un conteneur qui contient un ensemble de données avec des mécanismes intégrés permettant de les manipuler.

6.       Quelle est la différence (ou relation) entre une classe et un objet ?

Il est important de distinguer la relation et les différences existant entre une classe et un objet :

  • Un objet est une instance d’une classe. Tandis qu’une classe est définie comme étant un « Template » correspondant à un élément du monde réel.
  • Normalement, on devrait parler d’objet qu’à l’exécution d’un programme.
  • Un objet est créé grâce au mot clé « new » en utilisant un constructeur, alors qu’une classe est définie avec le mot clé « class ».
  • Au cours de l’exécution, on peut avoir plusieurs objets instances d’une classe, alors que la classe concernée n’est déclarée qu’une seule fois.
  • La création d’un objet nécessite l’allocation de mémoire, cependant ce n’est pas le cas pour une classe.

A l’issue de cette première partie, en plus de pouvoir définir le concept de la programmation objet, vous êtes en mesure de pouvoir reconnaître et différencier ses deux grandes entités : les classes et les objets.

Dans le prochain article qui suit nous allons maintenant répondre aux questions qui pourraient être posées sur quatre principes au cœur de la programmation orientée objet :
héritage et encapsulation, surcharge et polymorphisme.

N »hésitez pas à découvrir notre expertise Java.