Автор Тема: Как кто тут относится к ООП?  (Прочитано 2239 раз)

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Как кто тут относится к ООП?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Как кто тут относится к ООП?
« Ответ #1 : 15.08.2016 12:14:02 »
Как кто тут относится к ООП?
Я пробовал что-то писать на Turbo Pascal в, примерно, 1993 году. :-) Парадигма интересная вроде показалась... То есть, на самом Turbo Pascal я много писал достаточно, но без ООП части. ООП паскалевский смотрел чуть-чуть.
« Последнее редактирование: 15.08.2016 12:30:26 от asy »

Оффлайн Юра Римский

  • Участник
  • *
  • Сообщений: 138
Re: Как кто тут относится к ООП?
« Ответ #2 : 15.08.2016 21:01:03 »
Как кто тут относится к ООП?
Много раз начинал, но мне не удаётся применить на практике. Это не значит, что ООП - плохо, возможно я сути не понимаю. Теоретически ООП предполагал, что программисты смогут в программах оперировать сущностями реального мира, но на практике у меня не получилось этого добиться. Я не вижу смысла в методах объекта. В реальном мире у объектов нет никаких методов. В реальном мире действие совершается над объектом, а не объектом.

Как сказать, что заяц и кролик на пару съели морковку? Заяц, кролик и морковка - объекты реального мира.

Морковка->съесть(заяц, кролик)? Морковка должна знать о том, кто и в каком количестве её может теоретически съесть.
А морковка->съесть(волк) должно вызвать ошибку.

Не слишком ли много кладётся на морковку?

Вводить новую сущность пара? Пара(заяц, кролик)->съесть(морковка). Не, количество сущностей начнёт расти не по дням, а по часам.

Притом, что действие (не метод) съесть вполне может знать, кто и чего может собственно съесть :) съесть([заяц, кролик], морковка) как-то проще для понимания :)

Оффлайн Александр Ерещенко

  • Участник
  • *
  • Сообщений: 1 246
Re: Как кто тут относится к ООП?
« Ответ #3 : 15.08.2016 21:17:34 »
Как кто тут относится к ООП?
Много раз начинал, но мне не удаётся применить на практике. Это не значит, что ООП - плохо, возможно я сути не понимаю. Теоретически ООП предполагал, что программисты смогут в программах оперировать сущностями реального мира, но на практике у меня не получилось этого добиться. Я не вижу смысла в методах объекта. В реальном мире у объектов нет никаких методов. В реальном мире действие совершается над объектом, а не объектом.

Как сказать, что заяц и кролик на пару съели морковку? Заяц, кролик и морковка - объекты реального мира.

Морковка->съесть(заяц, кролик)? Морковка должна знать о том, кто и в каком количестве её может теоретически съесть.
А морковка->съесть(волк) должно вызвать ошибку.

Не слишком ли много кладётся на морковку?

Вводить новую сущность пара? Пара(заяц, кролик)->съесть(морковка). Не, количество сущностей начнёт расти не по дням, а по часам.

Притом, что действие (не метод) съесть вполне может знать, кто и чего может собственно съесть :) съесть([заяц, кролик], морковка) как-то проще для понимания :)

Как-то Вы интересно восприняли сущности. :)
А если так:
Объект: Животное.
Метод объекта: Съесть (Еда)   (еда - это параметр)
Заяц, Кролик - объекты, наследованные от Животное.
Применение метода: Заяц.Съесть(Морковка)

Оффлайн Юра Римский

  • Участник
  • *
  • Сообщений: 138
Re: Как кто тут относится к ООП?
« Ответ #4 : 15.08.2016 22:32:31 »
Применение метода: Заяц.Съесть(Морковка)
Вопрос был про одновременно, когда и заяц, и кролик едят одновременно одну и ту же морковку :) Я про параллельные вычисления и многозадачность говорю. Объекты начинают знать слишком много.

Простая задача скопировать таблицу из БД в файл. Есть объект Таблица, есть объект Файл. Кто этим занимается?

Должна ли таблица уметь записывать себя в файл? Нет, не должна. Файлов много: xml, json, html, text, cvs, serialize-array, ещё всё тоже самое запакованное в zip, rar, 7z... с паролем. А там ещё некоторые поля нужно сконвертировать, например, unixtime в нормальный datetime. И чего получается?

Файл->записать(таблица())
Таблица->сохранить(файл)
Всё не то, задача куда сложнее.


Нужно создавать некий записыватель таблицы в файл.

ЗаписывательТаблицыВФайл->записывай(таблица, файл) - это уже не отражение реального мира и, если файл ещё можно в разных форматах представить, то таблица с некоторыми сконвертированными полями - это уже выходит за рамки объектов.

Я не спорю, я как раз пытаюсь разобраться, может, есть способ лаконично решить эти задачи в ООП и я просто о нём не знаю.

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Re: Как кто тут относится к ООП?
« Ответ #5 : 25.08.2016 20:33:00 »
запись таблицы в файл и запись в файл таблицы - суть не одно и тоже. Это совсем разные операции.
Применительно к морковке - находится в процессе поедания - поедать морковку - суть разные операции, ибо кролику важно знать как именно он должен съесть морковку, а морковке нужно знать только то, что она должна быть съедобной.

Оффлайн flint1975

  • Участник
  • *
  • Сообщений: 1 443
Re: Как кто тут относится к ООП?
« Ответ #6 : 25.08.2016 20:36:18 »
Собственно - есть две задачи:
1. Составить корректную модель мира
2. Описать в терминах ООП некую (необязательно корректную) модель.

1 задача - проектирование
2 задача кодинг

Оффлайн Юра Римский

  • Участник
  • *
  • Сообщений: 138
Re: Как кто тут относится к ООП?
« Ответ #7 : 25.08.2016 21:47:35 »
Собственно - есть две задачи:
1. Составить корректную модель мира
2. Описать в терминах ООП некую (необязательно корректную) модель.
Собственно, именно это и не удаётся.

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

Как бы объяснить максимально просто?

Нужно достать из шкафа брюки и надеть их на себя.

шкаф->открыть()
брюки = шкаф->содержимое(брюки)
я->одеть(брюки)

Это уровень учебников. Полный восторг, суперфантастика.

Но вот усложним задачу. Нужно найти фиолетовые брюки с пуговицами, а не молнией.

шкаф->открыть()
брюки = шкаф->содержимое(брюки) //? хрена два

кто отвечает за фиолетовый цвет и пуговицы?

В той парадигме, которую я использую появляется цикл:
каждый предмет из шкаф->содержимое():
    если брюки и фиолетовые и не молния и пуговицы:
        брюки = предмет
        выйти из цикла

Чем это концептуально отличается от процедурного программирования?

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

Как скрыть детали реализации?
« Последнее редактирование: 25.08.2016 21:50:53 от Юра Римский »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Re: Как кто тут относится к ООП?
« Ответ #8 : 26.08.2016 05:30:28 »
ООП – это ещё и декомпозиция как свойств, так и действий (методов). Поэтому вводим объект поиска:
ищем = поиск_одежды()
ищем.тип = одежда::брюки
ищем.цвет = цвет::фиолетовый
ищем.исключить( фурнитура,  одежда::фурнитура::молния )
...
брюки = шкаф.получить( ищем )

Фильтром может быть или регэксп или итератор.

Да, ООП многословен. ;)
Андрей Черепанов (cas@)

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
Re: Как кто тут относится к ООП?
« Ответ #9 : 26.08.2016 10:54:34 »
Если честно, странная тема. Как к нему можно относится? А как можно относиться к столу или к табуретке?
ООП есть и всё. Хочешь писать на Delphi-Lazarus-Builder, значит используешь табуретку, то есть ООП. Хочешь писать драйверы или кодить контроллеры на ассемблере, значит ООП не используешь. Иногда, в зависимости от задач и/или среды программирования, выбора нет и использовать ООП надо по определению. Как тогда к нему относиться? Это же инструмент.
Что именно имеется ввиду под "относится"? Понимание концепции (именно это обсуждается почему-то)? Или принятие-отторжение такого способа программирования?
Как по мне, то я считаю, что программисту без разницы в какой концепции программировать. Обычно программисту есть разница какой язык. Есть у программиста каждого любимые языки и не любимые. Вот я очень люблю язык паскаль. Когда пишу программы на нём, мне это очень нравится. Могу подолгу отлаживать и доделывать, шлифовать каждую часть программы. Не люблю ужасно писать на прологе (иногда приходилось в учебных целях друзьям-преподавателям из Бауманского писать). Без эмоций к остальным языкам почти. Когда пишу на асемблере, си, яве, пхп - без эмоций к языку просто стараюсь, чтобы задача была выполнена и чтобы было оптимально.
« Последнее редактирование: 26.08.2016 10:56:21 от tema »

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Как кто тут относится к ООП?
« Ответ #10 : 26.08.2016 15:34:22 »
tema, да вот посмотрел как в C# это сделали... Есть класс А. И нужно с экземпляр - а. И с ним нужно что-то сделать. Имхо логично писать так: а.действие().  Но авторы C# решили иначе: A.действие(а); Нечто подобное наблюдается и в питоне - вместо того чтобы написать a.len нужно писать len(a). Вроде и ООП, а в то же время и нет.
кто отвечает за фиолетовый цвет и пуговицы?
я.одеть(шкаф.найти(тип.брюки, цвет.фиолетовый, застёжки.пуговицы))
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн bliser

  • Участник
  • *
  • Сообщений: 107
Re: Как кто тут относится к ООП?
« Ответ #11 : 28.08.2016 23:42:34 »
Как кто тут относится к ООП?

Отношусь как к инструменту. Он (ООП) в одних случаях очень удобен в других - мешает. Лично мне на большом (для меня) проекте удобнее пользоваться  ООП, т.к. при этом код нагляднее и проще.


Оффлайн Юра Римский

  • Участник
  • *
  • Сообщений: 138
Re: Как кто тут относится к ООП?
« Ответ #12 : 29.08.2016 18:52:25 »
я.одеть(шкаф.найти(тип.брюки, цвет.фиолетовый, застёжки.пуговицы))
Так точно нельзя. Если шкаф будет знать, что в нём хранится, то в случае добавления нового атрибута для одежды придётся редактировать и шкаф.

Вариант "ищем = поиск_одежды()" мне больше понравился. Шкаф знает только то, что в него может влезть некий искатель и он должен предоставить ему всё своё содержимое. Так, конечно, проще. Но всё-таки ввод на каждый чих нового объекта сильно напрягает. Мне всё равно как-то проще процедурой:
найти(шкаф, фильтр)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Re: Как кто тут относится к ООП?
« Ответ #13 : 29.08.2016 19:10:17 »
я.одеть(шкаф.найти(тип.брюки, цвет.фиолетовый, застёжки.пуговицы))
Так точно нельзя. Если шкаф будет знать, что в нём хранится, то в случае добавления нового атрибута для одежды придётся редактировать и шкаф.

Вариант "ищем = поиск_одежды()" мне больше понравился. Шкаф знает только то, что в него может влезть некий искатель и он должен предоставить ему всё своё содержимое. Так, конечно, проще. Но всё-таки ввод на каждый чих нового объекта сильно напрягает. Мне всё равно как-то проще процедурой:
найти(шкаф, фильтр)
Описывайте одной строкой все атрибуты и ищите по ним регэкспом.
Андрей Черепанов (cas@)

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Как кто тут относится к ООП?
« Ответ #14 : 29.08.2016 20:06:59 »
Так точно нельзя. Если шкаф будет знать, что в нём хранится, то в случае добавления нового атрибута для одежды придётся редактировать и шкаф.
Не обязательно. Если нужно в шкафу с одеждой хранить ещё что-то, то тогда пишем типа того
я.одеть(шкаф.найти((вещь) => { вернуть вещь.тип == брюки и вещь.цвет == фиолетовый и ...})
Теперь одежду можно хранить хоть в холодильнике.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?