Как стать автором
Обновить

Комментарии 16

Но тогда получается, что у круга будут свойства и методы эллипса, такие,
как RadiusX, RadiusY, StretchX, StretchY, которые для круга не имеют
смысла и не могут быть выполнены.

Почему не могут быть? По определению окружность это такой эллипс, у которого radiusX == radiusY. Оба метода одно число возвращать должны. Не знаю, что вы тут под стретчами имеете в виду. Возможно, эксцентриситет. Но и это понятие для окружности существует. Итого пример вымученный.

А вымученный он потому, что все эти Cat extends Animal вроде бы корректны, но к практике отношения не имеют. Лучше объясняйте студентам кейс с Collections.unmodifiableList в джаве. Вот уже где нарушение LSP, которое может много приятных минут доставить.

Со студентами второго курса, которые (90%) только что узнали, что такое полиморфизм и вообще ещё ничего не знают ни про какие стандартные коллекции?

Хотите сказать, что для людей, которые второй год грызут матан, стандартная либа джавы это что-то запредельное?

Не знаю, насчёт запредельного, но точно не приоритетное. Я попытался выписать всё более приоритетное (SOLID - одна из самых последних глав), получилось уже 250 страниц мелким шрифтом.

Объяснять SOLID на пальцах без погружения в реальные задачи - это как демонстрировать релятивистские эффекты на примере движущихся жигулей. Эффекты не будут видны, как вы понимаете. Я тоже думал, что понимаю солид, пока не отрефакторил реальный проект на 100к строк и не ощутил достоинства и недостатки. Ваш труд рискует уйти в песок. Говорю в том числе как инженер, который собеседует джунов, у которых регулярно в CV встречается "пишу по SOLID"

В этом с вами полностью согласен, но что делать? Не упоминать солиды вообще?

Я бы на вашем месте в качестве теории давал бы непосредственно статью Мартина плюс все, что успели написать по этому поводу в интернете за 20 лет. Пережевывать ее "на пальцах" смысла нет. Чем дальше, тем нелепее смотрятся эти "объяснения". Sapienti sat.
А в качестве практики написал бы код, в который бы аккуратно вплел нарушения принципов. Далее студенты должны провести код-ревью и обосновать, где какие принципы нарушаются.

А зачем их упоминать? Ну вот скажите, вы разве не сможете без них разрабатывать? Ведь неправда же — сможете.

Я согласен с тем, что и такое мнение имеет право на жизнь, но у меня оно другое.

Это короткий односеместровый курс, там кот наплакал лекций. Поэтому я должен хорошо научить самым основам и дальше упомянуть всё остальное, чтобы дать кругозор и перспективу. Без интроспекции и рефлекции тоже, например, можно разрабатывать - но зацепить этими словами мозг и дать вводную, я считаю, нужно, поэтому так и делаю.

Наверное есть другие ВУЗы, там другие программы, может там ООП без солидов и паттернов изучают, я ж не настаиваю -- я просто делюсь собственным видением.

Не, ну вы спросили, что делать. Я думаю, что если вам нужно расширить набор тем, то упомянуть SOLID конечно можно. Но это таки явно необязательная тема, которая студенту без опыта принесет мало пользы, как показывает моя практика. до таких принципов все же надо дозреть самому хоть немного, понять, что вам нужно как-то бороться со сложностью на таком уровне, который чуть выше одного файла кода.

Ну и потом, как по мне, когда слушатель без опыта, хорошие примеры кода им как раз полезнее, чем абстрактные принципы. То есть, именно показать, что вот класс, у которого скажем нарушается SRP. Показать, к каким негативным результатам это приводит, показать как сделать лучше. Уже потом дать этому название.

Ну и еще — если уж кругозор и перспектива — то стоит вообще отойти чуток от ООП, и показать хоть немного, как подобные проблемы решаются в других парадигмах. Скажем, что есть такая штука как ФП, и там это вот так.

Понятно, что хорошие примеры это тоже сложно.
>применяемых при разработке объектно-ориентированных программ
Я бы все же чуть сменил формулировку. Не настаиваю, но: формулировка из википедии, не та что в самом начале, а чуть ниже, она лучше показывает, для чего и почему. Ну то есть:

При создании программных систем использование принципов SOLID способствует созданию такой системы, которую будет легко поддерживать и расширять в течение долгого времени[3].

То есть, подчеркнуть, что речь о поддержке и развитии. И значит, например, что если вам вашу систему и так легко поддерживать — то вам это все в общем-то пока и не нужно. И уже от этого отталкиваться, при обсуждении конкретных принципов.

зацепить этими словами мозг и дать вводную

Оно может так где-то и работает, но только не в прикладном программировании. Мне сейчас приходится менторить джуна. Там любой мой совет в одно ухо влетает, в другое вылетает. Пока человек сам себе всю башку не разобьет обо что-то - понимания не придет. А SOLID это ровно такая вещь, которая требует в щепки разбитого лба. Ровно поэтому все 100500 статей "Щас объясню солид на JS на примере кошек" имеют нулевой эффект.

браво

— Макс, че там с диффуравнением и комплексным числом? Ммм, спасибо. А кстати, подскажи, почему тут кошечка от животного наследуется?

— Макс, с кошкой понял, но вот по лабораторной аналогия: отправитель сигнала если унаследуем от общего отправителя, то как обернуть закешированный отправитель, типа чтобы был таким же отправителем — делаю работу, с кошками понятно, но тут лишние абстракции мешают, а наследоваться можно только от одного, мне еще раз отнаследоваться и поменять в приемнике тип?...

Здравствуйте, бумажные версии ваших книг в природе существуют?

Насколько я знаю, нет :)

Помимо SOLID стоит так же сразу обучать RAII и нормальным C++. Не нужно отговорок типа "ещё рано". Эти основы важнее чем SOLID для написания корректного кода. Краткий список пробоем: сырые указатели, типы из Си (при наличии c++ аналогов)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории