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.
Réponses
Trop de publicités?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.
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
}
}
- Réponses précédentes
- Plus de réponses