92 votes

Classes abstraites, interfaces et mixins

Quelqu'un pourrait-il m'expliquer les différences entre classes abstraites , interfaces y mixins ? J'ai déjà utilisé les deux dans mon code mais je ne connais pas les différences techniques.

3voto

Jon Erickson Points 29643

Fondamentalement, une classe abstraite est une interface avec une implémentation concrète. Une interface est juste un contrat qui n'a aucun détail d'implémentation.

Vous utiliserez une classe abstraite si vous souhaitez créer une fonctionnalité commune à tous les objets qui mettent en œuvre la classe abstraite. En respectant le principe DRY (Don't Repeat Yourself) de la POO.

1voto

Beatles1692 Points 2748

Une classe abstraite est une classe dont tous les membres ne sont pas implémentés, ils sont laissés aux héritiers pour être implémentés, ce qui oblige ses héritiers à implémenter ses membres abstraits. Les classes abstraites ne peuvent pas être instanciées et donc leurs constructeurs ne doivent pas être publics].

Voici un exemple en C# :

    public abstract class Employee
    {
        protected Employee(){} 
        public abstract double CalculateSalary(WorkingInfo workingInfo);//no implementation each type of employee should define its salary calculation method.
    }

   public class PartTimeEmployee:Employee
  {
    private double _workingRate;
    public Employee(double workingRate)
    {
     _workingRate=workingRate;
    }
    public override double CalculateSalary(WorkingInfo workingInfo)
    {
      return workingInfo.Hours*_workingRate;
    }

}

Une interface est un contrat qui doit être implémenté par une classe. Elle déclare simplement la signature des membres d'une classe d'implémentation et n'a pas d'implémentation elle-même. Nous utilisons généralement les interfaces pour implémenter le polymorphisme et pour découpler les classes dépendantes.

Voici un exemple en C# :

public interface IShape
{
int X{get;}
int Y{get;}
void Draw();
}

public class Circle:IShape
{
public int X{get;set;}
public int Y{get;set;}

public void Draw()
{
//Draw a circle
}
}

public class Rectangle:IShape
{
public int X{get;set;}
public int Y{get;set;}

public void Draw()
{
//Draw a rectangle
}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X