Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
«нафига программисту нужен системный анализ?»
Правда, некоторые связи будут весьма странными с точки зрения логики обывателя. Но это не исключает их невозможности.
Вопрос: слушая хозяина машины, что мы себе представляем: то, что машина состоит из колес одного класса? Или то, что машина состоит из класса колес?
Под классом колес мы понимаем множество объектов. Не то, что понимается под этим термином в ООП (описание типа, модель объектов, описание общих признаков), нет. Мы понимаем просто набор каких-то объектов.
Если мы задаем этот вопрос программистам, то они входят в ступор
В таком случае мы обычно говорим — машина состоит из пяти колес.
Умение из рассказа заказчика извлекать нужные сущности и моделировать их корректным образом и есть искусство аналитика.
«состоит из», а не «включает в себя»
Умение из рассказа заказчика извлекать нужные сущности и моделировать их корректным образом и есть искусство аналитика
Когда дело дойдёт до кода, всех менеджеров и прочих будет интесовать лишь один вопрос «как быстро это сделаешь?», а не разговоры о сфероконях.
Под классом колес мы понимаем множество объектов. Не то, что понимается под этим термином в ООП (описание типа, модель объектов, описание общих признаков), нет. Мы понимаем просто набор каких-то объектов.
Auto: (wheel1_id, wheel2_id, wheel3_id, wheel4_id, wheel5_id)
Wheels: (id, ...)
Auto: (id)
Wheels: (auto_id, ...)
Если колесо не знает о машине, то кому оно передаст сообщение, что оно лопнуло/отвинтилось/наехало на камень?
И откуда оно тогда будет знать, что оно — именно колесо, а не какая-нибудь покрышка на баррикадах?
В предметной области нет экземпляров.
Шоу обеспечено.
Что касается обсуждаемой статьи, то вопрос то нормальный для аналитиков, да и для программистов, желающих заниматься и анализом предметной области.
А вот что этот вопрос должен показать? Знаком ли человек с теорией множеств применительно к анализу предметной области?Наверное, это больше к автору. Но мне кажется так:
Мы вот, когда нам интересно, как человек делает анализ, просто даем несложную предметную область и предлагаем построить модель, а лучше — несколько.
аналитик должен быть математиком
а какие-такие классы имеются в виду?
А что именно вы хотите в таких случаях?
Это почему?
… после чего получит в ответ определение из поста и потратит большую часть времени на выражение задачи в терминах того, кто ее ставит. Особенно учитывая, что все это делается на слух — это избыточная сложность.
Увидеть, как человек размышляет. В 90+ процентах случаев кандидат не может нарисовать непротиворечиво одну. Обычно дело начинается с физической модели — на ее основании просим нарисовать логическую. Если человек рисует процесс — просим нарисовать переходы состояний. Со сценариями использования тоже по-разному выходит.
Да пусть хоть кем будет, но базовые вещи то нужно знать.
В плане множеств, хотя бы на уровне, что такое множество, и какие операции к ним применимы.
Можно предложить «паттерн», как в терминах ООП реализовать сущность предметной области.
Неплохо. А как по времени все это занимает?
Понятие базовых вещей у всех отличается.
Разработчику? Извините, но эта задача сама по себе бессмысленна, потому что в терминах ООП, если не оговаривать специфику, сущность предметной области реализуется как объект. Аналитику? Ему не надо мыслить терминами ООП (если П — это программирование).
Аналитик должен иметь хотя бы представление о множествах.
Иначе как он сможет проанализировать задачу, и поставить ее разработчикам,
например, такую: напишите программу, которая среди всех синих и зеленых машин найдет все машины с мощностью более 100 л.с.?
Что такое объект? Вы имеет в виду класс в терминах современного ООП, экземпляры которого (объекты) мы можем создавать?
С подходом «одна сущность — один объект» к вам придет такой разработчик и наплодить статик полей у сущностей.
Видите? Вообще слово «множество» не понадобилось, не говоря уже о классах.
Нет, я имею в виду именно объект: совокупность данных и операций над ними. Я на всякий случай еще раз напомню, что class-based OOP — не единственная реализация ОО-парадигмы.
Нет. У объекта per se нет статических полей — они появляются только в конкретном языке. Вы же говорите «как реализовать в ООП», а не «как реализовать на <впишите ваш язык>»?
Изначально вы ставили задачу как «как реализовать сущность», а теперь говорите о группе связанных сущностей (причем я бы еще поспорил, является ли каждая из них сущностью в терминах предметной области, или нет).Если вы помните наши предыдущие дискуссии и мою небольшую статью-комментарий, то я как раз и говорил о том, что «каждая из этих сущностей» не является сущностью в терминах предметной области.
Понимание множеств — один из удачных бэкграундов для данного примера с машинами.
Что такое class-based OOP?
Достаточно было бы использовать ключевое слово datatype вместо class, и не было бы неверного представления, что типу данных Слон можно завести статическое поле «Общее кол-во слонов» или «Среднее кол-во слонов».
Достаточно было бы разрешить статик поля только как readonly и immutable, и уже даже технической возможности сделать этого не было бы.
А вот связанная группа сущностей («метасущность») образует сущность в терминах предметной области.
Я вот ни разу не видел, чтобы заказчик воспринимал множества сущностей как самостоятельные сущности в терминах предметной области. Это всегда именно множества, объединенные по тому или иному критерию.
начинает интерпретироваться, как жёсткий объект,
Отдали эти множества в функцию, которая ищет соответствия — с её точки зрения, эти множества оказались самостоятельными сущностями.
Что-то «emergent properties» и «emergent entities» в Гугле выдают сплошную философию. Где можно прочитать про это применительно к программированию?
А то моя первая мысль — что эти «связи» не имеют «связь с созвездием», а являются его частью,
более того, подменяют собой точки — созвездие смотрит на точку, а видит «точку в созвездии», со всеми вновь появившимися атрибутами.
К каждому из них у меня приклеена электронная метка с ИД. Все ИД заведены в базе данных и на каждый ИД заведена история изготовления и хранения.
Никогда не делаются утверждения «склад хранит класс» или «машина состоит из класса».
в этой математике обязана быть операция над множеством темпоральных частей
Нельзя на склад завести класс
Но при этом понятно, что класс не может быть частью индивида.
Что такое отношение часть-целое? какие условия должны соблюдаться, чтобы мы один объект посчитали частью другого объекта (целого)?
Подпадают ли отношения между объектом «класс колес автомобиля» и объектом «конструкция автомобиля» под отношения часть-целое?
Я проверял этот тезис с учетчиками.Это сильный аргумент. )))
Я говорю, что авто состоит из класса колес.Как всегда надо начинать с терминологии. Что такое «состоит»? На сколько я понял, под «состоит» вы подразумеваете отношение часть-целое (класс есть часть автомобиля).
Ну а теперь рассуждаем про объект-класс: сколько бы классов мы ни добавляли к объекту-индивиду, сколько бы ни удаляли — конструкция объекта не изменится
Если мы удалим из конструкции авто класс колес, то конструкция изменится.Класс существует либо у нас в голове или в виде информационного объекта. Если мы потеряете память или удалим класс из информационной системы, то с конструкцией машины ничего не произойдет. Но тут лучше думать не об удалении, а о добавлении: мы можем сколько угодно добавлять классов (места в авто, правые колеса плюс болты в кузове), именно классов, а не индивидов, при этом конструкция не изменится.
Следовательно, замена колеса никак не повлияла на конструкцию авто с данной точки зрения.Конечно, мы же проделываем две операции: удалили часть, вернули на место эту же честь. Что тут может изменится. Конструкция изменилась между этими операциями: удалили колесо — конструкция изменилась. А при удалении класса (а не индивидов) конструкция никак не может изменится.
Если мы потеряете память или удалим класс из информационной системы, то с конструкцией машины ничего не произойдет
Произойдет, она исчезнет.А автомобиль (индивид — ведь именно о конкретном автомобиле вы писали), частью которого является класс так же исчезнет?
Я знаю, что ограничение на отношение объект-класс существует во всех моделлерах. Но именно это ограничение не позволяет дать мне определение некоторых объектов нашего мира.
Устраиваясь на новую работу, я придумал новый вопрос для собеседования.
Класс объектов или объекты класса?