Бред


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
126 8 37

Аноним 07/03/20 Суб 22:51:30 2151259221
Без названия.png (4Кб, 225x225)
225x225
Анти-паттерны проектирования.

В тред призываются программисты.
Пацаны, нужна ваша помощь.
Встал вопрос с одним анти-паттерном - Вызов предка (Call super).
Поясните мне чем он плох? гугл нормального ответа не выдал.
А если точнее, то вопрос такой.
У меня есть класс, который содержит в себе строки с названием категории и типа класса, так же содержится метод, который вносит в эти строки данные. От этого класса наследуется ещё 2 других класса. Оба эти класса вызывают родительский метод инициализации строк, но не просто вызывают, а расширяют его, добавляя новый необходимый функционал в метод. Но перед тем, как этот расширенный метод начинает работать, он вызывает базовый родительский метод инициализации, чтобы сначала внести данные в строки типа и категории.
Как я вычитал в гугле - тут на лицо анти-паттерн "Вызов предка", но я не понимаю как от него избавиться.
У меня есть вариант везде писать инициализацию всех строк, но тут уже нарушается анти-паттерн "Копи-паст".
Что делать? Бочку не предлагать.
Аноним 07/03/20 Суб 22:52:56 2151259862
Аноним 07/03/20 Суб 22:53:57 2151260423
15743482353670.png (94Кб, 411x420)
411x420
Аноним 07/03/20 Суб 22:55:16 2151261044
>>215125922 (OP)
Бля, пацы, выручайте, весь день голову ломаю.
Аноним 07/03/20 Суб 22:56:32 2151261675
15797898798120.png (430Кб, 800x600)
800x600
07/03/20 Суб 22:56:52 2151261846
Да пошел ты нахуй. Сажа, скрыл
Аноним 07/03/20 Суб 22:57:02 2151261927
>>215125922 (OP)
Может быть, это противоречит принципу единой ответственности
Аноним 07/03/20 Суб 22:58:21 2151262558
Потому что паттерн прямо противоречит основе в твоём коде, тебе надо использовать CSS подргрузку для адекватной работы команды.
Аноним 07/03/20 Суб 22:58:45 2151262759
>>215125922 (OP)
Ты долбоеб? Просто забей хуй, блять, нахуй ты на эти анти паттерны дрочишь.
Аноним 07/03/20 Суб 23:05:23 21512659310
>>215126192
Но если я буду каждый раз разбивать один класс на кучу других - у меня будет огромное число классов с одинаковыми данными, которые я просто скопирую.
Это ведь тоже анти-паттерн "Копи-пасты".
Мне проще сделать единый класс с данными, от которого будут наследоваться другие классы, у которых есть точно такие же данные.
Аноним 07/03/20 Суб 23:05:43 21512660811
Аноним 07/03/20 Суб 23:06:15 21512663912
>>215126275
>нахуй ты на эти анти паттерны дрочишь
Потому что учусь и мне стоит их знать, иначе вечно буду хуйню писать.
Аноним 07/03/20 Суб 23:10:30 21512683113
15637319458670.jpg (39Кб, 480x412)
480x412
>>215125922 (OP)
Главный паттерн - работает и хуй с ней.
Аноним 07/03/20 Суб 23:11:43 21512689414
>>215126831
Я, бляжд, хочу на работу в It за 20 ударов плетей в месяц пойти.
Мне нужно знать как избавляться от ошибок.
Аноним 07/03/20 Суб 23:15:22 21512707015
>>215126593
А что именно ты делаешь в родительском классе с этими данными?
Аноним 07/03/20 Суб 23:19:40 21512730016
>>215127070
Всё просто.
Есть родительский класс, у которого два свойства.
string _type
и
string _category
Есть метод initialization()
Который эти строкам присваивает значение.
Вот и весь класс.
От него уже идут дочерние классы, которые эти строки используют при получении названия (нужно, чтобы удобнее было ориентироваться в проводнике) и для сортировки (собственно по типу и по категории).
Аноним 07/03/20 Суб 23:23:13 21512747517
>>215127300
Выполняй присваивание в конструкторе
Аноним 07/03/20 Суб 23:25:11 21512756618
>>215127475
В конструкторе родительского класса?
Получается я смогу добавлять новый функционал в конструкторы дочерних классов?
Как-то я сам об этом даже не подумал.
Спасибо.
Думаю это поможет решит проблему.
Аноним 07/03/20 Суб 23:27:49 21512769619
>>215126639
>Потому что учусь и мне стоит их знать, иначе вечно буду хуйню писать.

Хуйню ты будешь писать если не перестанешь дрочить на паттерны.
Аноним 07/03/20 Суб 23:28:00 21512770820
>>215127566
Да, в конструкторе родительского класса. А вот куда добавлять логику у дочерних классов, это вопрос. Но можно и в конструктор и в отдельные методы
Аноним 07/03/20 Суб 23:28:39 21512774121
>>215127696
Чаще хуйню пишут те, кто их не знает

Мимо
Аноним 07/03/20 Суб 23:29:02 21512776122
Тред не читай, сразу отвечай.
Вместо перекрытия и вызова того же самого метода, предок должен вызывать новый абстрактный метод и именно его надо перекрывать в наследнике (паттерн шаблона).
А вообще, поебать. Никому нахуй не вперлось ооп в 2020.
Аноним 07/03/20 Суб 23:31:46 21512790223
>>215126608
Я просот рандомный набор фраз написал лол
Аноним 07/03/20 Суб 23:32:06 21512791924
>>215127696
Каждый должен пару лет жизни подрочить на паттерны, даже если он не имеет никакого отношения к компьютерам. Это важный этап становления личности.
Аноним 07/03/20 Суб 23:32:35 21512795225
>>215127761
Почему должен? В чём профит?
Аноним 07/03/20 Суб 23:33:34 21512799826
>>215127761
>Никому нахуй не вперлось ооп в 2020
Двачую братишку! Правда на собесах упорно спрашивают это дерьмо.
Аноним 07/03/20 Суб 23:36:09 21512814427
>>215127708
Суть в том, что у дочерних классов есть и свои дочерние классы.
И каждый раз им нужно инициализировать всё больше и больше данных.
И дабы не писать тонны кода, я просто вызываю базовые методы инициализации, которые были у родителей.
Получается всё хорошо и на вид, и на деле.
Но как оказалось - это ошибка, хоть и не очевидная.
Аноним 07/03/20 Суб 23:37:59 21512822628
Аноним 07/03/20 Суб 23:38:44 21512825929
>>215127952
В том, что нет необходимости рассчитывать на "конвенцию" (все потомки обязаны вызвать метод предка). Какой-то долбоеб может забыть вызвать метод предка и нет никакой возможности проверить статическим анализатором что предок был вызван. В случае с паттерном шаблона ты просто не сконпелируешь класс потомка, пока не определишь новый абстрактный метод.

>>215127998
Потому что так научили мартыханов из HR. Ну, и ленивый тимлиды иногда спрашивают, потому что в свое время спрашивали их, а выдумывать новые вопросы сложно.
Аноним 07/03/20 Суб 23:40:31 21512832630
>>215128144
Инициализация должна происходить в конструкторе или метод инициализации должен в нем (конструкторе) вызываться. Зачем извне её вызывать? Тем более, что там ещё иерархия какая-то намечается. Классы должны быть самодостаточными, без учета того, что кто-то там должен дергать метод инициализации
Аноним 07/03/20 Суб 23:42:21 21512841131
Аноним 07/03/20 Суб 23:49:31 21512877332
>>215128326
>Инициализация должна происходить в конструкторе
Вообще-то, нет. Сильно зависит от времени жизни объекта.
Если инициализация зависит от других компонент и есть какое-то подобие inversion of control и dependency injection, то конструирование объекта и его инициализация это разные вещи и они должны контролироваться контейнером. Ну, и плюс писать юнит тесты для классов с бизнесс логикой в конструкторе оче сложно.
Аноним 07/03/20 Суб 23:49:48 21512879233
сру на все паттерны
js-сеньор
Аноним 07/03/20 Суб 23:50:55 21512885034
>>215128326
Чтож. Звучит логично.
Каждый класс будет инициализировать свои данные в конструкторе и мне не придётся с ними ебаться.
Спасибо анон, действительно помог.
У меня из головы вылетело то, что конструкторы предков тоже вызываются при инициализации дочерних классов и я вообще про конструкторы забыл.
Аноним 07/03/20 Суб 23:52:18 21512892635
>>215128773
Вот, блять, поэтому ответа в гугле я не нашёл.
Но впрочем мне нужно, чтобы объект инициировался в начале своей жизни и в будущем уже мог использоваться.
Аноним 07/03/20 Суб 23:53:10 21512897336
>>215128259
>новый абстрактный метод
Спасибо анон. Плохо разбираюсь в этом.
Придётся потратить время на изучение этой темы.
07/03/20 Суб 23:53:13 21512897637
Аноним 07/03/20 Суб 23:53:39 21512899438
>>215127475
согласен с этим, первое что в голову приходит. Касаемо того, чем плох вызов предка - вероятнее всего ломает полиморфизм
Аноним 07/03/20 Суб 23:55:32 21512908239
Аноним 07/03/20 Суб 23:56:46 21512914140
>>215128976
манька, кому ты заливаешь, в одрм только джсе десятки паттернов из коробки)
Аноним 07/03/20 Суб 23:57:36 21512918141
>>215125922 (OP)
вот не шаришь ты химию и несешь всякую хуйню и валишь самостоятельные.
вызвали предков
А у них метод ЗнанияПоХимии не реализован.Ну колхозаны они, какая химия?
Ошибка времени выполнения.?
Зато реализован метод ДатьПизды. Его и применят после разговора с учителем.
Аноним 07/03/20 Суб 23:58:23 21512922942
>>215128850
>конструкторы предков тоже вызываются при инициализации дочерних классов
Сам по себе вызывается только конструктор по умолчанию (без параметров). Если у предка есть два конструктора, то тебе надо выбирать какой из них вызвать из наследника. Если ты случайно пропустишь вызов конструктора предка, возможно вызовется не тот, что надо и ты узнаешь об этом только в рантайме. В общем, тот же анти-паттерн.
Аноним 07/03/20 Суб 23:59:49 21512931243
>>215129229
Наследование, получается, сплошной антипаттерн.
Аноним 08/03/20 Вск 00:00:26 21512935844
>>215125922 (OP)
>Как я вычитал в гугле - тут на лицо анти-паттерн "Вызов предка", но я не понимаю как от него избавиться.
Это типа наследование, иногда полезен иногда и нет, сейчас он используется в некоторых специфических случаях, можешь использовать композицию, создавай независимые классы и вызывай их в основном классе, типа класс становится модульным.
Аноним 08/03/20 Вск 00:00:50 21512938245
>>215128973
class A {
void init() {
// doSomeCommonShitHere
anotherInit();
}

abstract void anotherInit();
}

class B extends A {
void anotherInit() {
// doMoreShitSpecificToB
}
}
Аноним 08/03/20 Вск 00:05:18 21512963646
>>215125922 (OP)
хуевый ты похромист если не гуглится
Аноним 08/03/20 Вск 00:05:23 21512964547
>>215125922 (OP)
ОП пидор, програмирует в своих программах, ебучих программных роботов-киборгов-убийц чтоб они захватили нашу планету. Умри скотина!
Аноним 08/03/20 Вск 00:07:19 21512974348
>>215129645
с таким скиллом он максимум запрограммирует кнопку exit
Аноним 08/03/20 Вск 00:07:22 21512974549
>>215128994
>вероятнее всего ломает полиморфизм
Если так подумать - то логично.
Я переопределяю метод в дочернем классе, но при этом вызываю базовый метод в переопределённом.
Но блять, не писать же гору текста.
Аноним 08/03/20 Вск 00:09:09 21512983650
image.png (723Кб, 800x600)
800x600
>>215129645
Тем временем оп, перекрашивающий кнопочки...
Аноним 08/03/20 Вск 00:09:36 21512986251
>>215129743
Я пытаюсь поднять свой скилл.
Аноним 08/03/20 Вск 00:11:57 21512998152
>>215129862
Ты странное место для этого выбрал десу
Аноним 08/03/20 Вск 00:13:28 21513005353
>>215129981
Ну, чувак.
Двач - это не только толпа одичавших долбаёбов, инцилов и пиздолизов.
Это ещё и другой народ, который может дать дельный совет.
>>215129382
Вот выше мне указали на абстрактные классы, которыми я не пользовался, а они, оказываются, мне нужны.
Не зря создал тред.
Аноним 08/03/20 Вск 00:14:06 21513008954
>>215129981
И зайдёт какой-нибудь такой же как я анон-дегенерат, почитает и поймёт, что ему нужно что-то изучить, чтобы не создавать тупые треды.
Аноним 08/03/20 Вск 00:18:30 21513028555
>>215129745
можешь по аналогии с этим сделать https://en.wikipedia.org/wiki/Call_super. Просто в родительском классе создаешь абстрактный (либо просто пустой метод) postProcess(), например, и вызываешь его в родительском после или внутри своего инит-метода. postProcess уже переопределяешь в наследниках
Аноним 08/03/20 Вск 00:19:58 21513036756
>>215125922 (OP)
Это не антипаттерн, тут все зависит где он используется и кем.
Если ты делаешь так во внешней библиотеке которую используют другие, то это плохо, если делаешь у себя в программе и тем более только ты, то ок.
По сути этот функционал скрывается за фабрикой чтобы кто-то другой не мог по ошибке забыть вызвать родительский класс.
В реальном проде вообще всем похуй на эти антипаттерн и делают как угодно кроме пары исключений на которые у тимлида стоит.
Аноним 08/03/20 Вск 00:19:58 21513036857
>>215130285
Такой вариант тоже неплохо выглядит.
Попробую и его.
Аноним 08/03/20 Вск 00:24:22 21513059458
>>215130367
Ну.
Я делаю свою супер-пупер-убийцу-всего-на-свете игру на Юнити.
Думаю, я могу иногда использовать антипатерны ведь работаю я один.

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

Тут, я знаю, высмеивают за игры на юнити, но это действительно неплохой вариант вкатиться в программирование, потому что сталкиваешься с ситуациями, которые нужно как-то решать решать.
Аноним 08/03/20 Вск 00:26:49 21513071659
>>215130594
Юнити и программирование это разные вещи.
Там все достаточно узко и специфично, если хочешь в геймдев идти на юнити то ок, если просто программистом, то не ок.
Аноним 08/03/20 Вск 00:29:39 21513086160
>>215130716
Тут поспорить не смогу.
Ты прав.
Но он помог мне освоить списки, словари, разобраться в типах данных. Я выяснил, что String может сильно забивать память и иногда лучше использовать Stringbuilder.
Освоил ну как освоил, ознакомился с рефлексией.
Базовые знания +- можно получить.
Аноним 08/03/20 Вск 00:29:52 21513087361
>>215130368
А вообще, как сказал >>215130367, на это по большему счет хуй кладут как и на моем теперешнем проекте, так что я бы над таким даже голову не ломал на твоем месте
Аноним 08/03/20 Вск 00:30:02 21513087962
>>215125922 (OP)
>Встал вопрос с одним анти-паттерном - Вызов предка (Call super).
>Поясните мне чем он плох?
Чо, даже википедию не смог прочесть?

the fact that the language itself may not be able to enforce all conditions prescribed on this call is what makes this an anti-pattern.

The anti-pattern is the requirement of calling the parent. There are many examples in real code where the method in the subclass may still want the superclass's functionality, usually where it is only augmenting the parent functionality. If it still has to call the parent class even if it is fully replacing the functionality, the anti-pattern is present.


Перевожу для безграмотных
Антипаттерном это становится, ТОЛЬКО ЕСЛИ ТЫ ТРЕБУЕШЬ вызывать родительский метод.
И антипаттерном это является потому, что это ты требуешь, а средствами языка заставить это делать не можешь.
Т.е. можно написать такой класс-предок, который не вызовет родительский код, И ЧО ТЫ СДЕЛАЕШЬ?
Аноним 08/03/20 Вск 00:30:39 21513091563
>>215129745
Ты ничего не будешь нарушать. Наследование , оно на то и дано, чтобы наследовать поведение, а местами расширить.
Делай инициализацию в конструкторе базового класса и наследуй его. Ты будешь обязан вызвать супер в конструкторе наследника.
Ты не ломаешь полиморфизм. Он совсем про другое.
Аноним 08/03/20 Вск 00:31:02 21513092964
>>215130879
БЫСТРОФИКС
>Т.е. можно написать такой класс-предок
класс-наследник
Аноним 08/03/20 Вск 00:32:22 21513098365
>>215130873
Я всё понимаю, что на многое закрывают глаза.

Но у меня интерес к этому уже есть, хочется почитать/поизучать/попробовать.
Люблю программирование.
Аноним 08/03/20 Вск 00:34:10 21513105666
>>215130929
Так, кажется начинаю понимать.
Нет ничего страшного в том, что я вызываю родительский метод в переопределённом методе дочернего класса.
Страшно то, что базовый метод не вызывается принудительно и его могут забыть?
Бля, тогда это всё объясняет.
Тут действительно можно использовать абстрактный класс или на край прикрутить интерфейс.
Аноним 08/03/20 Вск 00:35:42 21513114067
>>215130915
Эти слова успокаивают.
+ тут ещё и пояснили, что я должен принудительно вызывать базовый метод, чтобы не нарушалась работа класс потому что если не вызвать родительский метод, то весь класс полетит в пизду.
Аноним 08/03/20 Вск 00:37:06 21513120968
>>215125922 (OP)
Схуяли super антипаттерн? Как ты собрался делать переопределение метода из родительского класса, копипастой кода?
Аноним 08/03/20 Вск 00:37:27 21513122569
>>215131056
Можно ещё базу данных и запросы к апи.
Из простой модели раздули страшное и непонятное чудовище
Аноним 08/03/20 Вск 00:38:39 21513128170
>>215131140
Ну это логично, если у тебя конструирование класса через методы идёт.
должно быть через конструктор
Аноним 08/03/20 Вск 00:38:59 21513129571
Такс такс что тут у нас? ООП? ахахах
Аноним 08/03/20 Вск 00:39:42 21513133272
>>215131209
Так вот блять в этом и весь юмор.
Я и не понимал, нахуя мне копировать то, что уже есть в родительском классе.
Если бы не это - на создал бы тред.
Аноним 08/03/20 Вск 00:40:00 21513135073
Аноним 08/03/20 Вск 00:40:01 21513135274
>>215130873
Тем лучше. Можно единственному изо всей группы ебашить идеальный код и смотреть на других как на говно.
Аноним 08/03/20 Вск 00:40:21 21513136575
>>215131281
Каюсь, совсем забыл о конструкторах.
Аноним 08/03/20 Вск 00:41:03 21513140376
>>215131350
как же хорошо когда у тебя на проекте функ. композиция я не это всё
Аноним 08/03/20 Вск 00:42:30 21513148877
>>215131332
Ну и нахуя ты всякий бред читаешь?
Аноним 08/03/20 Вск 00:42:43 21513149778
>>215131403
Я не особо давно в программирование и то, что для вас очевидно - у меня иногда вызывает вопросы.
Аноним 08/03/20 Вск 00:43:12 21513152479
>>215130983
Понимаю, сам когда-то все это хотел поизучать, но в целом паттерны не лучшая область для изучения, но дело твое. А так: удачи и не выгореть
Аноним 08/03/20 Вск 00:43:20 21513153580
>>215127761
Ты просто макака. В сложном софте единственное вариант не закопаться это организовать программу как взаимодействие классов.
Аноним 08/03/20 Вск 00:43:38 21513155081
>>215131488
Потому что на форумах чуть что - сразу в гугол отправляют, а в гугле в википедии пишут про то, что это антипаттерн и его нужно избегать.
А избегая его я затрагиваю ещё ряд антипаттернов.
Аноним 08/03/20 Вск 00:43:59 21513156582
>>215131524
Спасибо.
Пока не близок к выгоранию.
Аноним 08/03/20 Вск 00:45:05 21513161783
>>215131550
В любом фреймворке это используется, не читай больше этот бред.
Аноним 08/03/20 Вск 00:47:29 21513172884
>>215125922 (OP)
Смотри, если ты вызываешь методы предка для реализации СВОЕГО функционала, то это ОК. Т.е. нужно - вызываешь, не нужно - не вызываешь.
Но если ты ОБЯЗАН вызвать метод предка, чтобы просто все работало, то это значит, что код неправильно организован, а нужные функции не выделены как положено.
Аноним 08/03/20 Вск 00:49:26 21513181685
Я если честно нихуя не понял что за строки и категории, но если это какая-то инициализация, то происходить она должна в конструкторе
Аноним 08/03/20 Вск 00:49:39 21513182286
>>215131728
Да, я ОБЯЗАН вызывать метод предка в переопределённом методе наследника.
Сейчас мне пояснили как можно избавиться от этой ошибки, стараюсь применить на практике все советы.
Аноним 08/03/20 Вск 00:51:00 21513187287
>>215131535
>единственное вариант
В школе просто про другие варианты не рассказывают.
Аноним 08/03/20 Вск 00:51:11 21513188388
>>215131728
Сложно представить такую ситуацию, когда не достаточно вернуть методом валидное значение, вероятно метод предка меняет глобальные переменные или состояние инстанса.
Аноним 08/03/20 Вск 00:54:30 21513200689
>>215131822
в конце статьи в вики (английской, само собой) про этот кол супер дан рецепт, как этого избегать

вызываешь из родительского абстрактный метод, который реализуешь в каждом наследнике.
не реализовать абстрактный метод в наследнике ты не сможешь
Мэрит 08/03/20 Вск 01:04:10 21513208690
>>215131883
Может, там какой-нибудь йоба-алгоритм на два экрана, а наслденики только по-разному готовят входные данные.
Нимаат 08/03/20 Вск 01:16:49 21513239191
>>215125922 (OP)
Суть антипаттерна в том, что если тебе для того, чтобы добавить наследника, нужно чтобы этот наследник обязательно вызвал метод предка - значит когда-то этот метод вызвать забудут и все пойдёт по пизде. Тебе надо этот общий обязательный код внести в конструктор, а изменяющуюся (для наследников) часть - в отдельные методы, и уже эти методы оверрайдить в наследниках..
Шагане 08/03/20 Вск 01:19:58 21513252092
>>215132391
Понятно.
То есть условно - если я согрешу и у меня будет в проекте этот антипаттерн - он не заруинит проект (я один работаю).
Просто, к примеру, антипаттерн "спагетти-код" как раз руинит разработку.
Шагане 08/03/20 Вск 01:21:24 21513258493
>>215132006
Но ведь тогда мне придётся каждый раз писать код.
Не проще один раз написать реализацию в родителе и каждый раз использовать её?
Это же самая настоящая копи-паста, что тоже антипаттерн.
Нимаат 08/03/20 Вск 01:22:49 21513264694
>>215132520
Не заруинит, но лучше пинать себя за каждую такую хуйню. Не важно сколько человек работает, ты сам же можешь потом напороться на эту мину
Шагане 08/03/20 Вск 01:24:14 21513271395
>>215132646
Согласен.
Поэтому и пытаюсь щас решить эту проблему.
Но пока ничего путного не выходит.
Сновида 08/03/20 Вск 01:27:57 21513286296
>>215132006
ВСКОРЕ В ПОДНАСЛЕДНИКЕ ТРЕБУЕТСЯ ЭТО НЕМНОГО РАСШИРИТЬ
@
CALL SUPER — АНТИПАТТЕРН
@
ЖИДКО ПЕРНУВ КОПИПАСТИШЬ
Шагане 08/03/20 Вск 01:29:12 21513292397
>>215132862
Вот блять ДА.
И нахуй это нужно?
Один антипаттерн закрывать другим?
Не проще пойти по пути менее пиздецового антипаттерна?
Хавра 08/03/20 Вск 01:30:40 21513299498
Шагане 08/03/20 Вск 01:31:17 21513302999
Неждана 08/03/20 Вск 01:32:18 215133077100
femaleit.jpg (37Кб, 577x444)
577x444
>>215132923
>>215132862
ИТТ уже три раза нопейсали как решить проблему. Даже с примером.
Походу, тред иллюстрирует что не всем дано в ойти вкатиться.
Хавра 08/03/20 Вск 01:33:16 215133126101
>>215132006
>>215132862
Нахуй вообще вся эта залупа нужна при существовании интерфейсов?
Нимаат 08/03/20 Вск 01:34:30 215133181102
>>215132862
Дак в чем проблема - в наследнике из главного метода вызываем новый отдельный (можно даже не абстрактный)
В поднаследнике его переопределяем и у наследника главный метод будет расширенным.
Нимаат 08/03/20 Вск 01:35:13 215133220103
>>215133181
>наследника
*поднаследника

Блядь и кстати наследование это антипаттерн
Неждана 08/03/20 Вск 01:35:52 215133246104
shrug1.jpg (18Кб, 385x400)
385x400
>>215133181
Забей. Там никого нет дома.
Нур 08/03/20 Вск 01:38:57 215133374105
15834682502800.jpg (28Кб, 600x595)
600x595
>>215125922 (OP)
Оп, нестрадай хуйней. Программа должна выполнять свою функцию. Какими путями ты этого достигнешь - всем похуй. Устроили тут рефакторинг бля.
Мимосеньор
Шагане 08/03/20 Вск 01:39:37 215133402106
>>215133374
Затем, что ну пишут же в интернетах, значит так надо.
Нимаат 08/03/20 Вск 01:40:16 215133438107
>>215133374
Чет ты не к месту применил слово рефакторинг, сеньор-пиздоболю
Сновида 08/03/20 Вск 01:43:13 215133553108
>>215133181
То есть ты предлагаешь переделывать наследника, чтобы запилить поднаследника? А с OCP по ебалу не хочешь?
Или ты просто предлагаешь единожды спроектировать архитектуру, а от всяких эволюционных моделей отказаться?
Мэрит 08/03/20 Вск 01:45:04 215133642109
>>215133181
Можно проебаться и вызывать этот "новый отдельный метод" вместо "главного".
Нимаат 08/03/20 Вск 01:49:03 215133807110
>>215133553
Ну OCP да, но тут уже изначально проебались, что началась ебля с деревом наследований, надо было использовать делегирование для изменяющейся части.

>>215133642
Не, ты не понел. Поднаследник ничего не вызывает. Он Наследует основной метод от наследника, но внутри этого метода есть вызов того метода, который у поднаследника свой. Всё расширение в этом самом методе поднаследника.
Мэрит 08/03/20 Вск 01:54:20 215134021111
>>215133807
Я тебе говорю про тот код, что этих твоих наследников с поднаследниками в конечном итоге юзать будет. Какой из трёх методов ему вызывать?
Нимаат 08/03/20 Вск 01:58:29 215134180112
>>215133642
Мы его будем вызывать через тот интерфейс где метод впервые объявлен. Т.е. метод будет только один.
Исходя из того, какого класса объект - будет вызываться метод наследника/поднаследника и т.д. Полиморфизм
Нимаат 08/03/20 Вск 01:58:52 215134195113
Орлэйт 08/03/20 Вск 02:03:25 215134358114
>>215125922 (OP)
Да забей чмоки-чмоки, всё это дрисня и понты.
Орлэйт 08/03/20 Вск 02:05:58 215134461115
>>215126894
Ты этому всему научишься со временем на интуиции без всяких книжек, а так ты только будешь свои паттерны пихать туда, куда не следует и не более, пока не отработал 5 лет кодером не забивай этим голову, когда уже будет такая квалификация, чтобы архитектором быть, тогда ты и сам уже будешь всё это знать.
Орлэйт 08/03/20 Вск 02:09:39 215134619116
>>215133438
Всё он к месту применил, не выёбуйся на дядьку, он небось 10 лет назад уже кодером работал, когда ты под стол пешком ходил.
мимомидл
Нимаат 08/03/20 Вск 02:15:57 215134896117
>>215134619
>Программа должна выполнять свою функцию. Какими путями ты этого достигнешь - всем почмоки-чмоки.
Да, ахуенно
Орлэйт 08/03/20 Вск 02:17:21 215134964118
>>215134896
Так и есть, и вообще чем проще, тем лучше.
Дамалис 08/03/20 Вск 02:38:59 215135775119
Используй либо шаблон, как писали выше либо делегирование. Передаешь класс который умеет в базовую интциализацию.

При делегирлвании проще расширять функционал.

Дамалис 08/03/20 Вск 02:40:33 215135835120
Еще дополню, подход с делегироаанием проще тестировать, чем шаблон
Идан 08/03/20 Вск 05:20:35 215139432121
>>215125922 (OP)
>>215125922 (OP)
Ты бы хоть узнал почему вызов предка антипаттерн сначал. Вызов предка плох, потому что тот кто пишет код ребенка не будет знать, что предок ОЖИДАЕТ, что его вызовут. Вместо вызова предка юзай темплейт паттерн - предок сам себе все иниттит, а попутно вызывает другой метод - вот его-то сабклассы и имплементируют. Таким образом метод предка всегда будет вызван, а сабклассам ПРИХОДИТСЯ имплементировать навязанную им логику.
Рафа 08/03/20 Вск 05:40:16 215139652122
Аделисия 08/03/20 Вск 08:19:58 215141995123
>>215125922 (OP)
Инкапсулируй вызовы в приватный метод и успокойся.
Димах 08/03/20 Вск 09:48:49 215144822124
>>215131872
Ну вариантов 2 либо ООП, либо процедурное программирование в стиле с. Второе намного сложнее.
Дипти 08/03/20 Вск 10:27:25 215146374125
Да, аноны, спасибо.
Помогли.
Я, конечно, от костылей не избавился (Ибо на Unity сложно реализовать класс через конструктор), но от антипаттерна избавился с помощью абстрактных классов.
Абида 08/03/20 Вск 10:34:56 215146667126
>>215139432
>потому что тот кто пишет код ребенка не будет знать, что предок ОЖИДАЕТ, что его вызовут
отказываться от удобной штуки только из-за того, что кто-то там не заглянет в код родителя или чего-то там не знает, ну это не аргумент - super это простой и удобный инструмент, который экономит кучу времени и защищает от дублирования кода, не увеличивая сложности при этом.
Дипти 08/03/20 Вск 10:39:01 215146808127
>>215146667
Ну, дублирование кода я-таки избежал.
Но у меня появилась куча абстрактных методов.
Впрочем, с ними стало даже удобнее, ибо уменьшилось число строк кода.
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов