Простой вопрос(ООП и лифт)

флоппик

promotor fidei
Команда форума
Партнер клуба
Krishna, иди почитай значение слова "изучение". И перестань вырывать фразы их текста, меняя их смысл.
 

phprus

Moderator
Команда форума
флоппик
А я согласен с Krishna. Изучать ООП на примере модели с одним объектом - это то-же самое, что учиться управлять автомобилем на примере педали газа (одиноко лежащей на столе перед обучающимся).

Как на примере одного объекта объяснить инкапсуляцию, наследование, полиморфизм, взаимодействие объектов (что-бы не создалось впечатление, что вся программа это один объект и все поведение нужно запихнуть в него)?
 

Фанат

oncle terrible
Команда форума
Давайте сбавим накал дискуссии.


В кои-то веки на пхпклубе стали обсуждаться интересные темы - то, о чем мы все так долго мечтали.
Давайте только не будем их низводить до перебранок. А решим, что ответы должны быть аргументированными.

На любое явление всегда может быть больше одной точки зрения. Не надо считать свою единственно правильной, а собеседников - дебилами.
Давайте привыкать к тому, что правы могут быть оба, и что задача - не порвать оппонента, а наоборот - найти точки соприкосновения.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я согласен с вами, что вы не согласны. Предлагаю вам привести достойный пример для полноценного и всестороннего изучения ООП, если вам это не сложно.
 

Adelf

Administrator
Команда форума
Krishna
А теперь представь, что лифтов два или более. И есть задача организовать их поведение так, чтобы по каким-то параметрам оно было оптимальным(меньшее время ожидания, меньший износ и т.д.). Так уже интереснее становится.
 

Фанат

oncle terrible
Команда форума
Предлагаю вам привести достойный пример для полноценного и всестороннего изучения ООП
Вообще-то, я не считаю вопрос "позволит ли один лифт изучить ВСЁ ООП на уровне фаулера" релевантным вопросу топикстартера.

Но в классическом объяснении из паскаля, яблоко самодостаточно. Оно не является частью структур "дерево" или "сад".
Заметьте, я не хочу сказать, что структура - это уже будет не ООП.
 

phprus

Moderator
Команда форума
Adelf
А это уже математика, а не программирование. После нахождения оптимальной стратегии задача программирования становиться практически тривиальной. Так что математика тут интересная, а программирование увы нет, если конечно не решать задачу имитационным моделированием, а модель программировать в парадигме ООП.

флоппик
А нет такого примера, как и Универсального Решения. Лифт подойдет только для вводной лекции на которой нужно будет показать что объекты реального мира можно отображать на объекты виртуальные и таким образом моделировать в программе реальный мир.
А дальше для различных сторон ООП необходимы различные варианты. Для наследования, полиморфизма можно привести пример из биологии (кошка и собака - животные, а переопределяемый метод - это издаваемые звуки).
Для отработки взаимодействия объектов и некой инкапсуляции можно предложить вариант Контролирующее устройство, набор контролируемых (каждое устройство - объект, обмениваются информацией сообщениями или вызовами методов). Хотя этот пример мне самому не очень нравиться.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А нет такого примера, как и Универсального Решения.
Тогда я не понимаю, откуда вы взяли, что кому то тут нужно универсальное решение, позволяющее полноценно изучить ООП. Хотя вы утверждаете это, делая выжимку из моих слов, делая из них собственные выводы, хотя предпосылок к этому я не давал.
Не вижу логики в вашем поведении, и считаю что вы - неправы в контексте обсуждаемой тематики.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
для кошки и собаки сложно представить себе задачу, которую программисту нужно реализовать в коде

3 лифта с разными параметрами (1 автоматический, 2 с лифтерами) и поток пассажиров на разных этажах - достойная модель для изучения наследования, коллекций, многопоточных алгоритмов, взаимодействия групп объектов
 

Adelf

Administrator
Команда форума
если конечно не решать задачу имитационным моделированием, а модель программировать в парадигме ООП.
Ну я как раз об этом :) Мы же обучаемся только... можно позволить помоделировать даже там, где практического смысла в этом мало.

достойная модель для изучения наследования, коллекций, многопоточных алгоритмов, взаимодействия групп объектов
Вово :)
 

cDLEON

Онанист РНРСlub
Ну в данном контексте у лифта будет пассажир, который им управляет, массив этажей, на которые выходят пассажиры.
Если пассажир не вышел - лифт не закрылся и не уехал на другой вызов.
Поэтому в самом простом случае - здесь 3 объекта. Но ни как не один.
 

phprus

Moderator
Команда форума
флоппик
Тогда я не понимаю, откуда вы взяли, что кому то тут нужно универсальное решение, позволяющее полноценно изучить ООП.
Мое мнение таково:
1) Универсальных решений не существует.
2) Если человеку не нужно что-либо изучить полноценно (границы полноценности конечно зависят от разных условий), то он ошибся тематикой изучения. (да я знаю, что это грубо, но такая формулировка для меня наиболее точна. Я не хочу, что-бы на перекрестке меня переехал специалист по педали газа, который даже и не слышал о тормозах).

Из этого следует, что одним примером тут явно не обойтись, а пример с лифтом (одним) слишком слабый, что-бы на его примере можно было что-либо полноценно изучить.
Не я применил фразу "Золото-пример для изучения...", которая по моему мнению и возводить данный пример в ранг универсального решения...

grigori
Да для животных сложно представить реальную задачу, но этот пример нагляден. А такие примеры тоже имеют право на жизнь, так как большинство они заинтересуют сильнее, чем какие-то абстрактные сущности о которых обучаемые никогда не слышали. (тут я углубился в образовательный процесс с точки зрения ВУЗов. Для самообразования это может быть и ужасный пример)

3 лифта с разными параметрами ... - достойная модель для изучения ...
3 лифта - это не один лифт. Это уже некая система, состоящая из взаимодействующих подсистем. Именно этот факт и делает ее достойной моделью. Думаю, что нечто подобное и имел ввиду Krishna говоря, что сам по себе лифт является неудачным примером.
 

dimagolov

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

кстати, концептуальный вопрос. сколько кнопок делать на этаже (не крайнем)? одну или две? исходя из того, что пассажиры могут нажимать обе кнопки (на всякий случай) или ошибаться с тем, какая кнопка им нужна. другими словами стоит ли давать возможность вручную задавать направление требуемой поездки? для оценки куда реально поехал пассажир, который сел в лифт (вернее для идентификации пассажиров) вполне можно использовать вес пассажиров, все равно его очень легко можно вычислять в большинстве случаев.
 

phprus

Moderator
Команда форума
cDLEON
Поэтому в самом простом случае - здесь 3 объекта. Но ни как не один.
Этаж - это явно не объект, а либо состояние лифта (текущий этаж), либо параметр события (вызвали на №, приехать на №).
Пассажир с точки зрения внешнего мира - это объект, но с точки зрения задачи он никак не связан с лифтом и по принципу не плодить сущности без необходимости он будет убран.
А в сухом остатке модели у нас и останется один лифт.

dimagolov
Полностью согласен, но заметьте, что вы все предлагаете задачу, в которой лифт является одним звеном изучаемой Системы, а флоппик предложил изучать сферический лифт в вакууме как золото-пример ООП.

кстати, концептуальный вопрос.
А это зависит от стратегии использования лифта. Если часто ездят между этажами, то лучше ставить 2 кнопки (офис), если с первого на N-й и с N-го на первый, то хватит и одной (жилой дом). Однако для точного ответа нужно строить мат. модели и решать оптимизационную задачу.
 

dimagolov

Новичок
А в сухом остатке модели у нас и останется один лифт.
я уже показал, что пассажир (причем именно экземпляр класса пассажиры с уникальными свойствами) это весьма значимая сущность если лифт имеет хоть какой-то интеллект.
 

craz

Нестандартное звание
Автор оригинала: флоппик
Ребят, я не думаю, что он пишет ПО к лифту )
А вот задачка довольно хороша для ООП, как раз.
Ибо лифт сущность однозначная, имеет несколько состояний, и поведение, зависящее от этих состояний. Золото-пример для изучения ООП.
По-моему лифт нормальная модель для изучения ООП, может и не золото, но на вкус и цвет товарищей нет.

Кроме мышек, кошек, машинок и так далее, вы можете придумать нормальный пример с которого было бы удобно и понятно начинать изучение ОПП? бложек? гостевуха?

где придел тех границ про которые говорит phprus - что считать достойным объектом для того, чтобы на его основе изучать ООП? нейтрино - объект физического мира? почему нейтрино не достойно быть запрограммированным в стиле ООП?
 

Mols

Новичок
Автор оригинала: dimagolov
я уже показал, что пассажир (причем именно экземпляр класса пассажиры с уникальными свойствами) это весьма значимая сущность если лифт имеет хоть какой-то интеллект.
Хм... я лично не увидел, где это показано.
Лифт "принимает решение" не зная, кто его вызвал.
Вряди могут иметь значение индивидуальные свойства пассажиров.
Кроме того поведение пассажиров(например на какой этаж офиса ему надо именно сейчас) вообще зависит он неизвестных величин.
Как тут могут быть использованы индивидуальные свойства?
 

craz

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

-~{}~ 11.05.10 15:16:

и в зависимости от должности должна вообще подъезжать та или иная кабинка(ну как то они там могут меняться наверху/внизу)))))))
 

Mols

Новичок
craz
Опа !!! Класс для кнопок прорисовался))) Внутри лифта тоже неплохо-бы отпечатки считывать... мало ли че... Хороший лифт получается господа)))
 
Сверху