|
0 / 0 / 1
Регистрация: 23.04.2015
Сообщений: 26
|
||||||
Немного теории ООП13.12.2015, 13:32. Показов 2350. Ответов 33
Метки нет (Все метки)
Добрый день!
ООП отражает поведение объектов реального мира. Объект - набор данных, и методов для работы с ними. Например, объекты: "Человек" и "Пиво"
Во втором случае методы для работы с объектом хранятся не в самом объекте. Я понимаю, что в моих рассуждениях где-то ошибка. Поясните, пожалуйста, где?
0
|
||||||
| 13.12.2015, 13:32 | |
|
Ответы с готовыми решениями:
33
Немного теории |
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||||||
| 13.12.2015, 14:13 | ||||||
|
Antonious
1
|
||||||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
||
| 13.12.2015, 15:41 | ||
|
Каждый класс создаётся не "потому что это соответствует объекту реального мира", а с какой-то конкретной целью. При этом не страшно, даже если банка пива выпивает человека .
2
|
||
|
|
|
| 23.12.2015, 11:57 | |
|
Shamil1, какой смысл банке открывать и выпивать человека если это не соответствует действительности? Боюсь представить дальнейшее развитие/эволюцию подобных классов. Сколько ещё не очевидных методов/полей появится в банке с пивом? И как потом разобраться в этом коде? А если код будет смотреть сторонний разработчик? Что может он подумать об авторе кода?
0
|
|
|
|
|
| 23.12.2015, 12:37 | |
|
Возможно, Shamil1 хотел сказать «банка пива выпивается человеком».
Схема субъект-действие-объект, конечно, напрямую склоняет нас наделить субъекта возможностью совершать действие над объектом. Но уже случай, когда агенс не совпадает субъектом, встречается с проблемой определения, кто является носителем действия. Ещё есть случаи, когда несколько объектов совершают групповое действие друг к другу (например, два тела разной природы отталкиваются — кто выступает в роли носителя действия?). Инструменталистский взгляд «делаем так, потому что нам так удобнее организовывать код» лишает необходимости решать все вышеобозначенные проблемы и даже думать о них. И в этом свете банка пива тогда начинает открывать человека, когда такое архитектурное решение оказывается более простым и очевидным, чем любое другое; в противном же случае не пиво открывает человека, а человек — пиво.
1
|
|
|
|
|
| 23.12.2015, 13:57 | |
|
Как-то я вынужден был тесно столкнуться с семантическими сетями и был удивлён, что после длительных рассуждений о типах связей (ISA, IKA etc) и прочей логике поступало предложение отказаться от сети как графа с помеченными дугами в пользу двудольного графа из объектов и действий/свойств, где каждое действие/свойство соединено помеченными (ролью объекта) ребрами с объектами, которые вступают в указанное действие или обладают свойством. Например, переход от Кот---есть--->Животное к Кот---вид-->бытие-кота-как-животного<---род---Животное
Ваше предложение ввести среду является по сути предложением перехода к такому представлению, когда взаимодействующие объекты уравниваются в правах, а субъектом становится среда. Последовательно продолжая рассуждения, естественно спросить, а почему носителем действия открывания/выпивания пива является человек, а не природа, которая открывает/выпивает пиво человеком? Чем взаимодействие человек-пиво принципиально отличает от взаимодействия других двух разнородных объектов?
0
|
|
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|
| 23.12.2015, 16:19 | |
|
snake32,
Вы предлагаете ориентироваться на схему "субъект-действие-объект". Но: 1. Это неоднозначно (поезд везёт человека или человек едет на поезде? спички промокли или [вода] намочила спички?) 2. Это в общем случае зависит от языка (снег идёт или [оно] "снежит"?) 3. Это часто неудобно (поэтому шаблоны типа "активная запись" выходят из употребления) 4. Это в принципе неверно, так как это реакция типа "почему - потому что", а целесообразно использовать реакцию типа "зачем - для того чтобы". Рассмотрим пример с пивом. Вы считаете очевидным добавить объекту "Человек" метод "Выпить(Пиво)". Но к чему это приведёт? Теперь класс "Человек" требует ссылки на класс "Пиво". И страница для детского сада, которая использует класс "Человек", требует ссылки на "Пиво". Вариант добавить объекту "Пиво" метод "Выпить(Человек)" (или лучше назвать его "Выпиться"?) на первый взгляд будет более лучшим решением. Но это решение мне тоже не нравится. Но лично я предпочту сделать специальный класс-службу "Пятница!" с методом "Выпить(Человек,Пиво)". И если вдруг выяснится, что в каких-то случаях часть методов этого класса не используется и при этом требует дополнительных ссылок, я всегда могу разделить эту службу на две.
1
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
|
||||||||||||||
| 23.12.2015, 21:53 | ||||||||||||||
А тем, кому не понятно, как это пиво само себя открывает, напомню, что программирование служит для моделирования, при котором мы абстрагируемся от реальности. Есть разные подходы к организации программ. В Ъ-ООП, например, "всё есть объект", у объектов есть поведение. Поэтому даже у камней получается какое-то поведение. Кого это смущает (что, вообще-то, правильно), может сделать две вещи: 1) вспомнить, что ООП --- это не религия, а инструмент, и использовать его для камней и бутылок пива, пользуясь некоторыми плюшками, типа динамической диспетчеризации, наследования, модульности. 2) снова вспомнить, что ООП --- это не религия, и его не обязательно использовать везде, где можно и нельзя, нужно и не нужно.
0
|
||||||||||||||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|||||
| 24.12.2015, 00:59 | |||||
|
У меня есть библиотека (dll), в ней один класс с двумя методами. Я пришёл к выводу, что очень часто в проекте используется только один из этих методов, и вынес эти два метода в разные классы и в разные библиотеки (dll). Как мне сюда прикрутить мультиметоды?
0
|
|||||
|
|
|||||||
| 24.12.2015, 02:00 | |||||||
0
|
|||||||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 24.12.2015, 09:49 | ||
|
Мне кажется, у вас фундаментально неверное представление о методах, что и порождает сложности в описании объектов. Метод -- это не действие, которое может совершить объект.
Если человек открывает банку и возвращает её, причём контракт гарантирует неизменность человека в этом процессе, то такое действие уже никак не является методом человека. Это совершенно отдельный объект.
1
|
||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|
| 24.12.2015, 11:04 | |
|
Mysterious Light,
Варианты с наследованием не проходят. "Человеки" могут отличаться не только тем, что одни пьют Пиво, а другие - нет. Таких отличий может быть много, а множественное наследование привело бы только усложнению кода без видимых плюсов. Добавлено через 14 минут mporro, Интересный подход. Выглядит более логичным, чем "сравнение с действительностью". Но тем не менее... Если придерживаться данного подхода, то вместо добавления в мой класс метода ToString(), мне следует в класс String добавить новый конструктор, принимающий экземпляр моего класса. Конечно, данный пример несколько "простоват", но можно придумать и более "тонкие" примеры.
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 24.12.2015, 12:28 | ||
|
Что касается изменений, и методов, которые изменяют наши объекты, то они нужны, чтобы полностью определить алгебру наших объектов. # Пусть необходимо описать объекты алгебры Однако такие объекты, которые успешно преобразовываются друг в друга, это, зачастую, не то, чего бы нам хотелось. Если у нас есть таинственный компьютер с тремя кнопками, мы, конечно, можем их нажимать, только от этого будет мало пользы. Чтобы польза была, важно иметь средства перцепции таинственного чёрного ящика на понятном нам уровне. Для этого мы снабжаем объекты методами-запросами. # Методами-запросами назовём минимальный необходимый набор методов, позволяющий в рамках предметной области полностью описать возможные преобразования внутреннего состояния объекта в другие объекты. Здесь важно то, что методы-запросы непосредственно завязаны на внутренне состояние. Если какой-либо метод-запрос не использует внутреннее состояние -- следует вычеркнуть его из класса. Если какой-либо метод запрос может быть выражен как композиция других методов-запросов, его следует вычеркнуть. Так что нет никакой необходимости заводить методы в класс строки. Там хранятся методы для преобразования между строками (минимальный набор) и свои методы преобразования строки понятному виду, к байтовому массиву, например, и числу, определяющему кодирования символов. А у человека есть метод to_string(), с помощью которого мы как раз и выясняем пил он пиво или нет, или возможно пил, но не так много, чтобы отнять права.
1
|
||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|
| 24.12.2015, 13:46 | |
|
mporro,
А куда поместить методы: - transfer(A a, B b) // меняет оба объекта - calculate(A a, B b) // не меняет ни один из объектов - validate(A a) // не меняет объект
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|||||||
| 24.12.2015, 14:48 | |||||||
|
Но скорее всего, все три случая не описывают методы, а описывают действия, которые должны быть выражены объектами. Например так:
1
|
|||||||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
|
|||||
| 25.12.2015, 21:00 | |||||
|
0
|
|||||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|
| 26.12.2015, 02:16 | |
|
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
|
|||||||||||||||||
| 26.12.2015, 12:09 | |||||||||||||||||
1
|
|||||||||||||||||
| 26.12.2015, 12:09 | |
|
Помогаю со студенческими работами здесь
20
немного теории немного теории Немного теории Немного теории Немного о теории Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|