Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Я помнится писал где-то про аналогию с наследованием. Это грандиозная мистификация! Нет никакого наследования (как в генетике например)! Есть расширение класса. Оно так и называется - extend. Почему нет? Есть. Но к реальному миру это не имеет отношения. Насчёт расширения, -- ну нет же. Для расширения есть множество различных паттернов и подходов. Тот же Мост, например. Для расширения как раз лучше используется аргрегация, чем наследование. mayton Код: java 1. Собака расширяет волка. И всё. Не наследует. Не копирует. Не инкапсулирует. А просто расширяет. Это буквальный английский перевод. Ну вот он и плохой пример для ООП :) Тут термин extends работает ещё хуже, так как конкретно запутывает, и откровенно нагло врёт разработчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 18:51 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Я надеюсь что в ближайшее время я доберусь до монад и у нас будет тема для спора о "состоянии". Пока у меня еще мало понимания мотиваций к использованию тех или иных абстракций ФП. А состояние - это тема важная. Без нее и БД не работает и файловая система выглядела бы странной метафорой. Кому нужна файловая система без состояний? Мне - нет. Надо было мне выделить слово _мутируемое_ :) В самом состоянии проблем никаких нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 18:55 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
hVostt exp98 А мне кажется, автор в глубине души надеялся в итоге на существование системы в стиле быстрого прототипирования. Но на высшем уровне, типа меню с набором кнопок: "сделать хочу козу" "сделать хочу утюг" ... Да, очень на это похоже. А потом на подходе очередное "изобретение", программирование мышкой, и прочие прелести долб-зма :) Если автор в смысле топикстартер, то нет, я о таком не думал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 19:09 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
fixxer, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 19:10 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
redkij hVostt пропущено... Да, очень на это похоже. А потом на подходе очередное "изобретение", программирование мышкой, и прочие прелести долб-зма :) Если автор в смысле топикстартер, то нет, я о таком не думал) Слава те хоспади ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 19:12 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
iOracleDev Раз уж взялись за зоопарк, давай рассмотрим наследование на примере зоопарка. Пусть у нас будут волк, собака, заяц, кошка, жираф, бегемот, зебра, слон. Итак, все животные разные в реальном мире между ними нет наследования, они независимы, ни в одном из них не сидит другое животное. 100% согласен. Более того. Наша наивная попытка построить онтологию или таксономию биологического мира вызовет гомерический хохот у всех биологов и зоологов и генетиков. Практически все. Все гипотезы по онтологическим или родственным связями в учебных примерах ООП по зверям - можно выкинуть на помойку. Почему я так часто и так много делаю на этом акцент. Да потому что бизнес сущности - это не животные. Это - другое. И изучать ООП для бизнеса надо на примере с вовлечением правильных сущностей. Истина должна быть даже в мета-программировании. Нельзя ее игнорировать или быть поверхностными. iOracleDevМы написали классы на каждое животное, стали писать функцию отвечающую за перемещение объекта и выяснилось, они все о четырех конечностях и функция перемещения у них одинакова, что у нас получилось? Мы написали одинаковый код много раз, а если еще и накосячили, придется исправлять в многих местах и тестировать каждый объект по отдельности, это хорошо, нет это совсем не хорошо (даже принцип в программировании на этот счет имеется - DRY). А давай ка мы возьмем и выделим четыре конечности и функцию перемещения в самостоятельный класс, назовем его "животное бегающее на четырех ногах", являются ли все перечисленные нами животные животными бегающими на четырех ногах? Да являются, замечательно получили суперкласс в котором один раз описали количество конечностей и метод перемещения, бинго. Это уже не зоопарк. Это сценарий комьютерной игры где мы решили схитрить и что-то соптимизировать. Ну а по поводу животного с четырьмя ногами... Вы уж меня извените. Это какой-то "плантоновский" человек получается. Никаких реальных биологических обобщений с 4 ногами мы не сделаем. В игре - да. В зоопарке - нет. В зоопарке мы можем найти табличку с Properties - где написано имя зверя. Вид. Подвид. Окрас. Наличие шкуры. Что он кушает. Где обитает. Вот это правда! Да. Вот это - вносите в ваши классы. Это и будет биологической правдой. Можете его скелет описать. Но это скорее топология или морфология. Графы. Но наследование здесь тоже не подходит. А 4 ноги - это.. Вобщем это пахнет антропологией. Наукой которая построена на обмане и на политической целесообразности. Увольте. Не надо нам такой подход. Если-бы вы меня попросили описать зоопарк - то я-бы взял для этого именно описательный инструмент. Semantic Web. RDF. Графы со связями. Triplets. И SparQL как язык и платформа для сбора сведений и формирования отчотов. Я-бы не беспокоился о полиморфизме потому-то там нечего полиморфировать. Или нужно совершенно другое задание. Как я уже говорил. Комьютерная игра например. Вообще нужно быть аскетом в описательных задачах. iOracleDevООП это абстракция, слабенький убогонький мозг программиста не может выдавать машинный код исходя из того что ему нужно сделать на уровне человеческих понятий, вот и имеем прослойку в виде ограниченного человеческого языка (процедурный, ооп, ФП и т.д.), который компилятор может механически перевести в машинный код. Согласен. Но я рассматриваю ООП просто как некий сахар или надстройку на обычным процедурным программированием. При этом очень слабую. И формально недоказумую. Почему формализм важен? Если вы хотите что-то доказать в математике - то вы втаскиваете систему аксиом. Лемм. И теорем. И выдаете новую теорему. И все присутсвующие - соглашаются. После того как заслушают ваше доказательсво. Здесь есть некий слабый кивок в сторону ФП например где хотя-бы декларирована попытка внести доказательную базу (Prolog/Lisp). В ООП не так. Сколько в аудитории человек - столько и мнений по поводу декомпозиции задачи на ООП. Это напоминает богословские споры средних веков. Священники любили спорить что такое ребро Адама или сколько ангелов пляшут на кончике иголки. Грубо говоря ООП математически недоказуемо. ООП - гуманитарно. ООП создано в угоду когнитивным качествам разработчика как best practices, как вспомогательный описательный инструмент. Красота. Наглядность и прочее и прочее что не из чего не вытекает и не доказывает. В реальном мире как правило нет никакого наследования, каждый объект самостоятелен и не отнаследован ни от какого другого, в информационном плане можно выделить группу общих свойств и поведения и вынести их в абстрактного родителя, но этот абстрактный родитель не существует в реальности. То что обозначается термином наследование в реальном мире, в мире ООП не годится для создания суперклассов, наследование в реальном мире и в абстракции ООП роднит только то, что и то и другое можно представить в виде направленного графа. Да. В реальном мире объекты - скорее клоны или прототипы. Здесь - самое реалистичное ООП - как ни странно в JavaScript. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 22:17 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
hVostt mayton Я помнится писал где-то про аналогию с наследованием. Это грандиозная мистификация! Нет никакого наследования (как в генетике например)! Есть расширение класса. Оно так и называется - extend. Почему нет? Есть. Но к реальному миру это не имеет отношения. Насчёт расширения, -- ну нет же. Для расширения есть множество различных паттернов и подходов. Тот же Мост, например. Для расширения как раз лучше используется аргрегация, чем наследование. Наверное имелось в виду не агрегация а композиция. Агрегация это КМК включение коллекции объектов. А с композицией еще интереснее. Если-бы в биологии мы могли композировать... типа беременная курица комозирует в себе яйцо... Ну что-то в этом роде. Я-бы ограничился просто "включением нужного функционала". И механик много. Модули. Зависимости. Шаблоны. Например если мне надо создать мапу где код физлица отображается на его ФИО + дату рождения + признак заблокирован или нет. То я сделаю нечто вроде. Код: sql 1. И какую механику я использовал? Кодогенерация? Метапрограммирование? Да пофиг по большему счету. Компиллятор разрулит. Ну а сишники в этом смысле еще дальше ушли. Что есть их шаблонный процессор? Куда его классифицировать в этой схеме? Непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 22:30 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
Процессор штука тупая, он может считать, может не считать и скормить мы ему можем только его же команды, но человек не может генерировать команды процессору, понадобились абстракции, начали с близкой к машинным, потом поднялись до уровня процедурных, ООП всего лишь следующий этаж над процедурным, абстракция позволяющая людям, не машине, лучше ориентироваться и поддерживать код. Чем ограничены все языки программирования? Они ограничены возможностью преобразовать хотелку в машинные команды процессора. Ничего общего с реальным миром компьютерные языковые абстракции не имеют. С физическим лицом все несколько сложнее, у него нет ID, единственный ID это полная 100% расшифровка генетического кода, которая в настоящий момент с необходимой точностью недостижима, но и этот ID в случае клонов не даст уникальности. С десяток лет назад многие пытались создать объектно-ориентированную СУБД, но сделать этого не смогли, потому что подходы несовместимы и сами абстракции тоже несовместимы. Программа на ООП языке компилируется в исполнимые модули, решающие какую то заданную задачу, СУБД является уже скомпилированной готовой программой, предоставляющей возможность обрабатывать множества с использованием декларативного языка запросов. Но несмотря на несовместимость подходов люди упорно продолжали пытаться впихнуть невпихуемое. ООП для бизнеса на примере правильных сущностей? Давайте рассмотрим простой пример person, employee, department. С точки зрения ООП employee является person и employee не является department, по идее мы должны отнаследоваться от person, а department ввести композицией. Однако в СУБД совершенно спокойно обходятся композицией и ссылки на person и department равноценны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 22:58 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton То я сделаю нечто вроде. Код: sql 1. Жава вообще штука неадекватная, scanner.nextInt(), scanner.hasNextInt(), она не может сделать банальную вещь одной функцией и не упасть по эксцепшену. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 23:12 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
Не помню чтоб вообще пользовался Scanner. По моему это редкая штука. Если нужен какой-то особый процессинг текста - нам хватает CSV/JSON/Yaml парсеров. Если что-то сложное - то Antlr. А сканнер - это какой-то уе6анский API. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 23:21 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
iOracleDev ООП для бизнеса на примере правильных сущностей? Давайте рассмотрим простой пример person, employee, department. С точки зрения ООП employee является person и employee не является department, по идее мы должны отнаследоваться от person, а department ввести композицией. Однако в СУБД совершенно спокойно обходятся композицией и ссылки на person и department равноценны. Если ты имеешь в виду MongoDb, Couch и прочие NoSQL и докумнетно-ориентированные - то у них есть своя методология разработки. Она основана на поиске и вычленении т.н. агрегатов. Это по сути тоже что и 1 ко многим только для документов. Общая рекомендация была такова. Единого подхода нормализации для таких систем нет. Там по сути есть несколько вариантов как реализовать одну и ту-же документную модель комбинируя по разному агрегаты. Например персона - агрегирует кассовые чеки. Магазин агрегирует транзакции. Все это говн0 запускается под нагрузкой - и смотрится - где упадёт или где плохо. Если плохо - тогда делается попытка сделать агрегаты по другому. Напоминает повторную сдачу карт в покере. Или еще один вариант решения транспортных задач. Вобщем тут дело не в ООП а в практической нерешаемости декомпозиции предметной области на агрегаты правильно. Как ни бей - всё неправильно. И аномалий куча. Просто из всех неправильных надо выбрать хотя-бы подходящий по перформансу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 23:28 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Наверное имелось в виду не агрегация а композиция. Агрегация это КМК включение коллекции объектов. Не. К коллекциям это не имеет отношения. Есть разница конечно между композицией и агрегацией, если говорить об это строго. Если не строго, достаточно говорить -- агрегация. mayton А с композицией еще интереснее. Если-бы в биологии мы могли композировать... типа беременная курица комозирует в себе яйцо... Ну что-то в этом роде. Ну вот. Если говорить строго, про курицу и яйцо, это именно самая настоящая агрегация :) Хотя конечно как посмотреть, точнее в какой момент времени? mayton Я-бы ограничился просто "включением нужного функционала". Зависит от архитектуры. И много от чего. Нужный функционал иногда можно добавить настройками, встраиваемыми скриптами, исключительно императивным путём. mayton Например если мне надо создать мапу где код физлица отображается на его ФИО + дату рождения + признак заблокирован или нет. То я сделаю нечто вроде. Код: sql 1. Это решение в лоб. Вот совсем не интересно. Интересно, если вы выделили чистый домен. И смогли объяснить это на языке бизнеса, используя свой домен. mayton Компиллятор разрулит. Ну тут абстракции довольно низкоуровневые. Про архитектуру говорить не приходится. mayton Ну а сишники в этом смысле еще дальше ушли. Что есть их шаблонный процессор? Куда его классифицировать в этой схеме? Непонятно. Обычное (сегодня) уже мета-программирование :) Посмотрите в сторону Nemerle, например, там ещё интереснее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 23:41 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
iOracleDev ООП для бизнеса на примере правильных сущностей? Давайте рассмотрим простой пример person, employee, department. С точки зрения ООП employee является person и employee не является department, по идее мы должны отнаследоваться от person, а department ввести композицией. Однако в СУБД совершенно спокойно обходятся композицией и ссылки на person и department равноценны. чего вы всё усложняете то? объекты это не серебрянная пуля, а способ избежать повторения кода + автоматизировать (на этапе конструктора, например) а ещё можно создать вектор структур. ну и прекрасно они справляются с этой задачей, какие вы там проблемы нашли? зациклились на названиях зачем-то... надо задачу решать, а не огород городить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 23:46 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton ... Если плохо - тогда делается попытка сделать агрегаты по другому. Напоминает повторную сдачу карт в покере. Или еще один вариант решения транспортных задач. Вобщем тут дело не в ООП а в практической нерешаемости декомпозиции предметной области на агрегаты правильно. Как ни бей - всё неправильно. И аномалий куча. Просто из всех неправильных надо выбрать хотя-бы подходящий по перформансу. Это интересный аспект, и на мой взгляд, в практической жизни он выглядит примерно так: Нечего даже и пытаться "сделать правильно". А идеальную программу надо делать так: а) с ближайшей банды четырёх, или там какого местного Фаулера, немедленно стребовать образцов, шаблонов и прочих паттернов. б) заказать в соседнем опенсорце библиотечную реализацию таких образцов, спрингов подходящей системы, бутов и прочего подспорья, зависимо от яп, после чего умыть и отряхнуть руки. С этого момента программирование, там где оно про "декомпозицию", становится не твоим делом. Много памяти жрёт - не твое дело, ты используешь рекомендованные и одобренные паттерны. Медленно работает - не твое дело, см. пункт выше. За любую попытку что-то улучшить, углубить и любым образом влезть в существо библиотечной реализации, прикладному программисту руки отрубаются по локти, чтобы в следующий раз неповадно было. Что делать, если программист решит что-то поменять в собственном коде - тоже понятно, надо отрубать по плечо оставшуюся после первого отрубания часть руки. И с этого момента программа работает не просто сама, а с каждом днём всё быстрее, и требуя все меньше памяти. Нужно только успевать последние версии библиотечных реализаций использованных паттернов в неё подставлять, которые методом непрерывного процесса улучшают библиотечные реализации избранных образцов. Так создаются самоулучшающиеся, без влияния прикладного программиста, программы. Не знаю, подразумевалась ли бандой такого рода идея с самого начала, но на практике она работает безотказно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 00:09 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
booby местного Фаулера А сколько у вас Фаулеров в команде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 01:03 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
hVostt booby местного Фаулера А сколько у вас Фаулеров в команде? дык, это ведь коммерческая тайна, чай. А про хороших Фаулеров, как про хорошую фигу, тема на три пальца раскладывается - где-то их разумное количество - ну, там два, или три - почти банда, и даже как-то могут промеж себя договориться, где-то явный дефицит, но немало случаев, когда и каждый сам себе физически Фаулер. От всего этого всякие занимательные случаи происходят. Но, не было бы весело, и народ бы уж давно поразбежался бы, наверно... В общем, хватает нам и Фаулеров и прочих замечательных людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 01:12 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Никаких реальных биологических обобщений с 4 ногами мы не сделаем. Просто, как вы уже неоднократно отмечали - требуется хорошо знать предметную область, чтобы делать корректные декомпозицию и иерархию классов. И, вероятно, в разных задачах одной и той же предметной области иерархия и декомпозиция будут разными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 06:39 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
booby, Вопрос был риторический ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 10:12 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
hVostt, топик напомнил анекдот про философа и сантехника :) По теме: - Functional reactive programming - Railway oriented programming - Railway oriented programming C# ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 11:49 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
skyANA, Гуд. Рельсы и FRP это намного ближе к вопросу топикастера, чем всё, что тут обсуждалось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 12:41 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov mayton Никаких реальных биологических обобщений с 4 ногами мы не сделаем. Просто, как вы уже неоднократно отмечали - требуется хорошо знать предметную область, чтобы делать корректные декомпозицию и иерархию классов. И, вероятно, в разных задачах одной и той же предметной области иерархия и декомпозиция будут разными. Мы еще дальше ушли от зоопарка. Теперь у нас есть исторические классификаторы. Тоесть если быть точными нам уже нужна би-темпоральность. И способность связей появлятся и исчезать в зависимости от исторического периода. Представте что вы обращаетесь к механике рефлексии класса и указываете период (since, until) и рефлектор вам отвечает да дескыть 100 млн лет назад бронтозавр действительно существовал и имплементировал интерфейс тетраподов. Это еще раз подтверждает мои слова о том что поставленная задача вообще не соответствует задачам ООП. Историческая изменчивость объектов и классов или их lineage - это вообще сверх-постановка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 12:51 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
hVostt, автор...Вот совсем не интересно. Интересно, если вы выделили чистый домен. И смогли объяснить это на языке бизнеса, используя свой домен. Я и говорю, все хотят готовые кнопки. А лучше одну большую. Тогда вас всех сферический бизнесмэн посылает и жмёт всё сам, он ведь самый умный, либо нанимает обычного манагера. Сбылась мечта дурака бизнесмэна. И booby туда же авторТак создаются самоулучшающиеся, без влияния прикладного программиста, программы. А на практике ... в вакансиях пишут требования к сантехнику, совмещённые с требованиями к философу. Когда это повелось там, не знаю, а у нас сразу резко с 90-х. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 13:00 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Это еще раз подтверждает мои слова о том что поставленная задача вообще не соответствует задачам ООП. каким-таким "задачам ООП"? Кто их ставил? Их ставили все кому не лень и там уже целый частокол, в котором чёрт ногу сломит. В итоге тут уже 4я страница обсуждений этого барахла. Решать надо свою задачу, и ООП даёт для этого кучу инструментов, которые прекрасно решат что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 13:01 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
mayton Мы еще дальше ушли от зоопарка. Просто, как уже отмечалось - требуется знать предметную область. Хотя бы на уровне дилетанта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 13:04 |
|
||
|
Подходы к построению архитектуры в функциональном программировании
|
|||
|---|---|---|---|
|
#18+
полудух mayton Это еще раз подтверждает мои слова о том что поставленная задача вообще не соответствует задачам ООП. каким-таким "задачам ООП"? Кто их ставил? Их ставили все кому не лень и там уже целый частокол, в котором чёрт ногу сломит. В итоге тут уже 4я страница обсуждений этого барахла. Решать надо свою задачу, и ООП даёт для этого кучу инструментов, которые прекрасно решат что угодно. Выше по топику. Один господин задал задачу. Раз уж взялись за зоопарк, давай рассмотрим наследование на примере зоопарка. Пусть у нас будут волк, собака, заяц, кошка, жираф, бегемот, зебра, слон. Итак, все животные разные в реальном мире между ними нет наследования, они независимы, ни в одном из них не сидит другое животное. Мы написали классы на каждое животное, стали писать функцию отвечающую за перемещение объекта и выяснилось, они все о четырех конечностях и функция перемещения у них одинакова, что у нас получилось? Мы написали одинаковый код много раз, а если еще и накосячили, придется исправлять в многих местах и тестировать каждый объект по отдельности, это хорошо, нет это совсем не хорошо (даже принцип в программировании на этот счет имеется - DRY). А давай ка мы возьмем и выделим четыре конечности и функцию перемещения в самостоятельный класс, назовем его "животное бегающее на четырех ногах", являются ли все перечисленные нами животные животными бегающими на четырех ногах? Да являются, замечательно получили суперкласс в котором один раз описали количество конечностей и метод перемещения, бинго. Вот и попробуй решить эту задачу. Я не знаю как ее решать. Может я подхожу слишком фундаментально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2020, 13:09 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39921500&tid=1339831]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 273ms |

| 0 / 0 |
