Каким образом обрабатываются объекты в ООП?

Понимаю всю красоту ООП. Но камень линейного (функционального, спасибо за поправку) программирования не дает легко соскочить.
Сколько книжек я посмотрел уже по С++, но так и не получил понимания, если я создаю несколько объектов кем и как они управляются.
Поясню суть задачи: имеется ряд данных, из которого при последовательной обработке по определенным правилам выделяется признак для создания объекта, все начальные данные объекта извлекаются из потока, затем объект развивается по нескольким возможным сценариям и в итоге погибает. Однако во время жизни скажем первого объекта могут образоваться еще несколько и они развиваются по тем же правилам и умирают, возможно раньше первого.
Так вот в линейном программировании я должен создать лист "объектов" и цикл по обработке каждого "объекта". Как дело обстоит в ООП, мне нужно также программировать список и работу объектов или достаточно сформировать какое-то событие, действие ну НЕ ПОНИМАЮ ЧТО, чтобы объекты обработали новую порцию данных?
Может кто-то на пальцах пояснить простоту ООП или книгу подскажите не про свойства ООП, а про то как оно работает.
  • Вопрос задан
  • 357 просмотров
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Основная суть ООП в объектах, которые сами могут управлять собой и выполнять действия над собой.
МояМашина.ПовернутьНалево, а не ПовернутьМашинуНалево(МояМашина).

Классы могут наследоваться. Мы можем иметь список объектов, например список транспорта (например, список будет состоять из объектов велосипедов, самолётов, легковых машин). Сами объекты могут иметь собственные методы, например,
МойВелосипед.ПодтянутьСпицы; МойСамолёт.Приземлиться;
которых нет у других, но могут иметь общие методы, например тот же поворот. И мы можем дать команду всему списку ПовернутьНалево.
цикл для i от 0 до 100 делать СписокТранспорта[i].ПовернутьНалево.

В списке транспорта, как я уже сказал и самолёты и вертолёты, но все они выполнят команду, т.к. все они будут наследоваться от класса Транспорт, который имеет метод ПовернутьНалево.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Adamos
@Adamos
ООП - это не какое-то принципиально другое программирование, это просто способ собрать данные и обрабатывающие их функции в одно место и убрать их из всех остальных мест, которых эта внутренняя кухня не касается.
У вас довольно путанное объяснение, я его понял так: у вас объект - парсер потока читает следующую порцию данных и обрабатывает ее (создавая новые объекты или модифицируя существующие), после чего нужно обновить уже существующие объекты и выдать информацию о них в "график". Соответственно, у парсера должен быть метод, читающий вход; член - вектор созданных объектов, имеющих общий интерфейс обхода; и метод обхода вектора, вызываемый после каждого чтения.
"График" может быть объектом, ссылка на который передается в каждый объект при создании, либо рисоваться парсером же по полученной при обходе вектора информации... ну, это вам виднее.
В результате те же ваши десять функций просто будут распиханы туда, где они непосредственно нужны, и данные будут доступны именно им, а не всему коду сразу. Это и дисциплинирует, и позволяет делать более гибкие, поддерживаемые решения. Впрочем, это проявляется не на коде из десяти функций, конечно.
Ответ написан
zagayevskiy
@zagayevskiy
Android developer at Yandex
Никем и никак они не управляются. Конкретно в С++ ты можешь рассматривать объекты как структуры, с привязанными к ним функциями, имеющими неявный аргумент this.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Объект представляет собой обычную структуру, и из полей, которые неявно прописываются в объекты — один или несколько указателей на таблицы виртуальных методов. (Несколько, если есть множественное наследование.)

В ООП точно так же, как в процедурном, и делай; дополнительный вопрос — как быть, если в одном списке могут быть объекты разных типов. Например, можно делать std::vector<std::unique_ptr<SomeBase>>.
Ответ написан
Комментировать
PODBOX
@PODBOX Автор вопроса
Человек
Добрые люди, только что отписал первому комментатору, но смотрю тут не раскрывается коммент.
Повторюсь, судя по вашим словам:
Мне надо создать фабрику объектов, которая обнаруживает ситуацию лопнувшего яйца и записывает его в свой список, а при новой порции данных не только смотрит не вылупился ли еще какой объект, но и вызывает метод обработки данных всех объектов в списке... а зачем тогда ООП, написал структуру с семафором состояния, динамический массив и десяток функций, что работают в соответствии с семафором только это методами линейного программирования, каждое исправление - бег по всему коду...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы