Действительно ли наследование необходимо? - PullRequest
32 голосов
/ 10 ноября 2008

Должен признаться, я отчасти скептик ООП. Плохой педагогический и лабораторный опыт с объектной ориентацией не помог. Таким образом, я превратился в горячего сторонника Visual Basic (классического!).

Затем однажды я узнал, что C ++ изменился и теперь имеет STL и шаблоны. Мне действительно понравилось это! Сделал язык полезным. Затем в другой день MS решила применить лицевую хирургию к VB, и я действительно ненавидела конечный результат за необоснованные изменения (использование «end while» вместо «wend» сделает меня лучшим разработчиком? Почему бы не бросить «next» для » конец для "тоже? Зачем заставлять геттер вместе с сеттером? И т. д.) плюс так много функций Java, которые я нахожу бесполезными (например, наследование и концепция иерархической структуры).

И теперь, спустя несколько лет, я задаю себе философский вопрос: действительно ли необходимо наследование ?

Бригада из четырех человек говорит, что мы должны отдавать предпочтение композиции объектов, а не наследованию. И, подумав об этом, я не могу найти то, что вы можете сделать с наследованием, которое вы не можете сделать с агрегацией объектов плюс интерфейсами. Так что мне интересно, почему мы вообще это имеем?

Есть идеи? Я хотел бы видеть пример, где наследование определенно будет необходимо, или где использование наследования вместо интерфейсов композиции + может привести к более простому и легкому изменению дизайна. В предыдущих заданиях, которые я обнаружил, если вам нужно изменить базовый класс, вам нужно также изменить почти все производные классы, поскольку они зависят от поведения родительского класса. И если вы сделаете методы базового класса виртуальными ... тогда не будет большого совместного использования кода: (

Иначе, когда я, наконец, создам свой собственный язык программирования (долгое невыполненное желание, которое встречается у большинства разработчиков), я не вижу смысла добавлять к нему наследование ...

Ответы [ 22 ]

1 голос
/ 10 ноября 2008

Не нужно, но полезно.

У каждого языка есть свои методы написания меньшего количества кода. ООП иногда оказывается запутанным, но я думаю, что ответственность разработчиков заключается в том, что платформа ООП является полезной и четкой, когда она хорошо используется.

0 голосов
/ 10 ноября 2008

В дальнейшем наследование используется для представления определенного свойства для всех нескольких конкретных воплощений одного и того же типа. В этом случае GeneralPresenation имеет свойства, которые относятся ко всем «представлениям» (данные, передаваемые в представление MVC). Главная страница - единственное, что использует ее и ожидает GeneralPresentation, хотя конкретные представления ожидают больше информации с учетом их потребностей.

   public abstract class GeneralPresentation
    {
        public GeneralPresentation()
        {
            MenuPages = new List<Page>();
        }
        public IEnumerable<Page> MenuPages { get; set; }
        public string Title { get; set; }
    }

    public class IndexPresentation : GeneralPresentation
    {
        public IndexPresentation() { IndexPage = new Page(); }
        public Page IndexPage { get; set; }
    }

    public class InsertPresentation : GeneralPresentation
    {
        public InsertPresentation() { 
          InsertPage = new Page(); 
          ValidationInfo = new PageValidationInfo(); 
        }
        public PageValidationInfo ValidationInfo { get; set; }
        public Page InsertPage { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...