Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 23.04.2015
Сообщений: 26

Немного теории ООП

13.12.2015, 13:32. Показов 2628. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
ООП отражает поведение объектов реального мира.
Объект - набор данных, и методов для работы с ними.

Например, объекты: "Человек" и "Пиво"
C#
1
2
3
Пиво.open();
//или
Человек.open(Пиво);
В первом случае пиво открывает само себя, что не отражает реального поведения вещей.
Во втором случае методы для работы с объектом хранятся не в самом объекте.
Я понимаю, что в моих рассуждениях где-то ошибка.
Поясните, пожалуйста, где?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2015, 13:32
Ответы с готовыми решениями:

Немного теории
Добрый день! На днях на одной из конференций по MSSQL, увидил немного интересное решение, обработки данных, есть две таблицы Города и...

Немного теории
хочу освоить немного openGL стал гуглить, сейчас в теме хочу прояснить для себя немного теорию. 1)glut - это просто "обертка",...

Немного теории
Доброго дня, форумчане! Пишу курсач на тему Системы программирования. Препод сказал, что у меня нет информации о видах систем...

33
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
26.12.2015, 15:47
Студворк — интернет-сервис помощи студентам
ИМХО множественная диспетчеризация, как и множественное наследование, приносит больше проблем, чем пользы.


Lisp
1
2
3
4
5
6
7
(defclass dark-beer (beer) (...)) 
 
(drink an-alcoholic-human some-water)
; output?
 
(drink an-alcoholic-human some-dark-beer)
; output?
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
28.12.2015, 09:22
Цитата Сообщение от Shamil1 Посмотреть сообщение
венная диспетчеризация, как и множественное наследование, приносит больше проблем, чем пользы.
И? Что ты хотел показать своим примером?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
28.12.2015, 11:19
Цитата Сообщение от korvin_ Посмотреть сообщение
Что ты хотел показать своим примером?
Неопределённость. Непонятно, откуда брать реализацию, если её нет для данных классов.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
28.12.2015, 20:28
Цитата Сообщение от Shamil1 Посмотреть сообщение
Неопределённость.
В чём?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Непонятно, откуда брать реализацию, если её нет для данных классов.
Из реализаций родительских классов. Если вверх по иерархии вплоть до T нет реализации --- это ошибка. Так же как и при попытке вызвать несуществующий метод в любой другой объектной модели. Никакой неопределённости.

Конкретно для твоих примеров будут вызваны
Lisp
1
(defmethod drink ((subject human) (object water)) ...)
и
Lisp
1
(defmethod drink ((subject alcoholic-human) (object beer)) ...)
соответственно. Если ты их не переопределишь. В чём проблема-то?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
28.12.2015, 21:16
Цитата Сообщение от korvin_ Посмотреть сообщение
Из реализаций родительских классов.
А если есть два равноценных кандидата?
Есть реализации для M(AA,B) и M(A,BB), то какая будет вызвана для M(AA,BB), M(AAA,BB) и M(AAA,BBB)?
Если есть правило для выбора в таких ситуациях, то оно приводит к нарушению LSP. (Если его нет, то тоже).

Добавлено через 13 минут
В примере AAA наследуется от AA, а AA от A. Так же BBB : BB : B.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
28.12.2015, 22:03
Цитата Сообщение от Shamil1 Посмотреть сообщение
А если есть два равноценных кандидата?
По-умолчанию слева-направо. Можно переопределить.

Цитата Сообщение от Shamil1 Посмотреть сообщение
то оно приводит к нарушению LSP. (Если его нет, то тоже).
Это-то тут каким боком?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
29.12.2015, 00:46
Цитата Сообщение от korvin_ Посмотреть сообщение
Это-то тут каким боком?
Есть реализации:
M(A,B) = 1
M(A,BB) = 2
M(AA,B) = 3

Тогда, если я правильно понял:
M(AA,BB) = M(AA,B) = 3 (более левое совпадение имеет приоритет)
M(AAA,BB) = M(A,BB) = 2 (точное совпадение имеет приоритет)

Я наследую AAA от AA и ожидаю, что AAA будет вести себя точно так же, как AA.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
29.12.2015, 10:03
Цитата Сообщение от Shamil1 Посмотреть сообщение
Тогда, если я правильно понял
Во-первых, неправильно.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Я наследую AAA от AA и ожидаю, что AAA будет вести себя точно так же, как AA.
Во-вторых, мультиметоды про взаимодействие нескольких объектов, а не про "поведение" одного объекта. Объяви сингл-метод и описывай в нём поведение A*.

В-третьих, если LSP "возводить в абсолют", то он вообще нигде и никогда не будет выполняться. Даже без субтипирования.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
29.12.2015, 14:10
Цитата Сообщение от korvin_ Посмотреть сообщение
Во-первых, неправильно.
Да.
Я так и не нашёл, где это описано, но, похоже, что, в отличии от других (Си-подобных) языков, выбирается метод, который лучше всего подходит по первому параметру, не зависимо от того, насколько хорошо он подходит по второму.
При таком подходе LSP не нарушается.

Цитата Сообщение от korvin_ Посмотреть сообщение
ультиметоды про взаимодействие нескольких объектов, а не про "поведение" одного объекта
Взаимодействие нашего объекта с неким другим заданным объектом - это один из аспектов поведения нашего объекта.

Цитата Сообщение от korvin_ Посмотреть сообщение
если LSP "возводить в абсолют", то он вообще нигде и никогда не будет выполняться. Даже без субтипирования.
В приведённом Вами примере сравниваются два разных экземпляра одного типа. То, что они ведут себя по-разному, это нормально, вполне ожидаемо и не является нарушением LSP.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
29.12.2015, 20:20
Цитата Сообщение от Shamil1 Посмотреть сообщение
Взаимодействие нашего объекта с неким другим заданным объектом - это один из аспектов поведения нашего объекта.
В мультиметодах нет "нашего" объекта. Там все объекты равнозначно "наши".

Цитата Сообщение от Shamil1 Посмотреть сообщение
В приведённом Вами примере сравниваются два разных экземпляра одного типа. То, что они ведут себя по-разному, это нормально, вполне ожидаемо и не является нарушением LSP.
Т.е. по-твоему любое переопределение метода --- это нарушение LSP? А также перегрузка? Долой ad-hoc полиморфизм?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
29.12.2015, 21:10
Цитата Сообщение от korvin_ Посмотреть сообщение
Т.е. по-твоему любое переопределение метода --- это нарушение LSP?
Нет.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
04.01.2016, 21:17
Цитата Сообщение от mporro Посмотреть сообщение
,

Не по теме:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Банка_Пива {
  открыть()
  {
    return Пиво;
  }
}
Человек {
  пить_пиво_из_банка(Банка_Пива x)
  {
    Я.пить_пиво(
      Банка_Пива.открыть()
    );
  }
личное пить_пиво(Пиво x);
}

Не по теме:



теперь я знаю, что такое "скрепы"!
:yahoo:

0
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
08.01.2016, 21:05
Цитата Сообщение от Shamil1 Посмотреть сообщение
..поезд везёт человека или человек едет на поезде?
всё зависит от жизни. если в жизни(задаче) у вас рассуждение про поезда и человек есть упоминание для понимание главной сути, то первое. Если вы в жизни оперируете человеком - то он не только едет, но и может ходить, прыгать, плавать... Причём ездить может и на велосипеде так-же...

Цитата Сообщение от Shamil1 Посмотреть сообщение
спички промокли или [вода] намочила спички?
см. выше. если сущность в рассуждениях спички - то первое. если вы химик и сущность вода которая всё мочит - то второе.

Цитата Сообщение от Shamil1 Посмотреть сообщение
2. Это в общем случае зависит от языка (снег идёт или [оно] "снежит"?
то же самое что выше. от задачи. от задачи идём всегда. а не как котята от языка, создавая ассемблерный код.

Цитата Сообщение от Shamil1 Посмотреть сообщение
3. Это часто неудобно
не удобно следовать частной трактовки ваших домыслов. а если от задачи - то тут много плюсов код СТАТИЧЕН(!) - потому как если поезд у вас перевозит людей, то вряд ли по жизни это изменится на подводную лодку и динозавров (это уже изменение самого бизнеса в целом!!!) Так, что идя от жизни а не своих предпочтений, Вы сокращаете затраты на разработку многократно.

Цитата Сообщение от Shamil1 Посмотреть сообщение
.."Человек" требует ссылки на класс "Пиво".
странно если было бы обратно что ещё тогда пиво должно знать об внешнем мире? представляете тогда что потребуется вам как программисту, если в дальнейшем необходимо будет различать женщина или мужчина пьёт пиво )) в первом случае изменений нуль(человек - есть человек), во втором - вы будете курочить очень много мест, где человек употребляет пиво...

Цитата Сообщение от Shamil1 Посмотреть сообщение
И страница для детского сада, которая использует класс "Человек", требует ссылки на "Пиво".
ээээ т.е. вы утверждаете, что в жизни человеки из детсада начали пить пиво???
От жизни идём, от жизни..а не домыслов своих!!!

Цитата Сообщение от Shamil1 Посмотреть сообщение
...класс-службу "Пятница!" с методом "Выпить(Человек,Пиво)"....
в тяпницу не только пьют. боюсь предположить сколько ещё действий будут в такой сущности!
С другой стороны, если речь идёт о календаре, и там есть дни недель, и глаголы из жизни которые интересуют заказчика - то тогда и такое вполне может быть...

(круглый)
ЗЫ
Рекомендую ознакомиться с фундаментальной книгой по данной теме Гради Буча - альма матер в ОО в общем-то.
Там это разжовывается...
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
09.01.2016, 01:45
kolobok0,
Я не вижу, какое отношение к моему сообщению, которое Вы цитируете, имеют тексты, которые Вы написали под цитатами. Из этого я делаю вывод, что Вы не поняли моё сообщение, придумали для него свою собственную трактовку и теперь спорите сами с собой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2016, 01:45

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

немного теории
Здравствуйте, проверьте пожалуйста мои ответы. Я тут выбрала...надеюсь верно. 1 Укажите верное утверждение? -Функция LIST...

Немного теории
Здравствуйте, ребята! Такой вопрос: У меня есть свой сайт. На нем я хочу подключить снег. Для запуска снега используется функция да и...

Немного теории
Ребятушки, поясните пожалуйста в этом кусочке: (tail (cdr val))) (if (null val) () `(let ((,stat...

Немного о теории
Впервые мне попалась такая постановка задачи: создать класс ru.qwerty.vova.ivan.Main , который имплементирует интерфейс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru