Наследование является одним из тех инструментов, которые можно использовать, и, конечно, им можно злоупотреблять, но я думаю, что языки должны иметь больше изменений, прежде чем наследование на основе классов может быть удалено.
Давайте возьмем мой мир на данный момент, который в основном разрабатывается на C #.
Чтобы Microsoft отказалась от наследования на основе классов, им пришлось бы встроить гораздо более мощную поддержку обработки интерфейсов. Такие вещи, как агрегация, где мне нужно добавить много кода, просто чтобы подключить интерфейс к внутреннему объекту. Это действительно должно быть сделано в любом случае, но в таком случае это будет требованием.
Другими словами, следующий код:
public interface IPerson { ... }
public interface IEmployee : IPerson { ... }
public class Employee : IEmployee
{
private Person _Person;
...
public String FirstName
{
get { return _Person.FirstName; }
set { _Person.FirstName = value; }
}
}
Это должно было бы быть намного короче, иначе у меня было бы много таких свойств, чтобы мой класс подражал человеку достаточно хорошо, что-то вроде этого:
public class Employee : IEmployee
{
private Person _Person implements IPerson;
...
}
это может автоматически создать необходимый код, вместо того, чтобы писать его мне. Просто возвращение внутренней ссылки, если я приведу свой объект к IPerson, не принесет пользы.
Так что вещи должны быть лучше поддержаны, прежде чем наследование на основе классов может быть снято со стола.
Кроме того, вы бы удалили такие вещи, как видимость. Интерфейс на самом деле просто имеет две настройки видимости: там и не там. В некоторых случаях, я думаю, вы были бы вынуждены предоставить больше внутренних данных просто для того, чтобы кто-то еще мог легче использовать ваш класс.
Для наследования на основе классов вы обычно можете предоставить некоторые точки доступа, которые потомки могут использовать, но внешний код не может, и вам, как правило, придется просто удалить эти точки доступа или сделать их открытыми для всех. Не уверен, что мне нравится любая альтернатива.
Мой самый большой вопрос заключается в том, какой конкретно целью будет удаление таких функций, даже если в качестве примера планируется построить D #, новый язык, такой как C #, но без наследования на основе классов. Другими словами, даже если вы планируете создать совершенно новый язык, я все еще не совсем уверен, какой будет конечная цель.
Является ли целью удаление чего-то, чем можно злоупотреблять, если не в правильных руках? Если это так, у меня есть список длиной в милю для различных языков программирования, и я бы действительно хотел бы сначала посмотреть адреса.
В верхней части этого списка: ключевое слово с в Delphi. Это ключевое слово не просто стреляет себе в ногу, это похоже на то, как компилятор покупает ружье, приходит к вам домой и целится за вас.
Лично мне нравится наследование на основе классов. Конечно, вы можете написать себе в угол. Но мы все можем сделать это. Удалите наследственное наследие, я просто найду новый способ выстрелить себе в ногу.
Теперь, куда я положил этот дробовик ...