16
UML SysML и пр. / Re: Что за символ UML 2 - объединине?
« : 21 Декабря 2011, 05:54:18 »
Именно мерг. Спасибо.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Вероятно, еще разделитель.А вот разделителей быть не может, символы набираются на табло, а в том месте, где водоплавающим видится разделитель, должна быть нажата управляющая кнопка - кнопка помещения уже готового операнда целиком в очередь. Не в строку, а в очередь, следующий помещённый в очередь операнд будет уже другим элементом и отделяется безо всяких разделителей.
Или, по крайней мере, без кнопки и табло.Зачем 40 раз запускать цикл? Но если нужны значения сорока выражений, то именно так. За один раз ровно одно выражение. Пусть длинное, но одно. А если не понятно, что это цикл, так и без табло будет тоже самое и надо исправлять именно изображение цикла. И без кнопки как она вообще получится, если алгоритм зашивается в кнопку? Причём, пользовательский интерфейс от алгоритма вроде отделён. Я пока не указал, будет ли калькулятор даже десятичным, или шестнадцатеричным. А может вообще вавилонская система будет. Это пока ни где не указано. Знак числа - это унарный -, а у меня предусмотрен только бинарный. Хотя, в принципе можно сделать и унарный на том же классе, что и запятая. А можно так: -4+68+2*4 записывать как
А то из диаграммы можно сделать вывод, что пользователь для получения результата выражения должен сорок раз на кнопку 'Расчет' нажать.
Говоря про нарушение стиля ООП я имел в виду один из основных принципов: отделение представления от модели.И где же у меня в кнопке хвосты от реализации стека и очереди? Если они ограничены, то могут в качестве внутреннего представления юзить массивы. А можно сделать списки. Очередь будет односвязной, а стек двусязным. А можно на динамических массивах. Можно вообще на файлах сделать. От модели системы в целом это представление как раз и отделено, выбор же самих интерфейсов очереди и стека вытекает из нотации. Не из нотации UML, конечно. А из нотации самих выражений, для которых этот калькулятор предназначен. Инфиксному нужно дерево, постфиксному - одновременно стек и очередь.
Вопрос зачем? Ответ повторность использования, модифицируемость. Опять же реализуется принцип ООП: открытость для расширения, закрытость для модификации....Так ведь именно на классах основано повторное использование. Наследуем от класса и метод-обработчки тоже наследуется. А для не связанных классов он не имеет смысла. Да и доступ из него нужен к атрибутам объекта, а они могут быть закрыты. Одну оконную процедуру френдануть - не велико отступление, а все обработчики френдить=прощай инкапусляция. Да и обработчики по смыслу все общедоступные, их не проблема вызывать и без френда, только завернуть исходники блокируемых обработчиков в альтернативы, проверяющие допустимость операции, но уже на уровне реализации, а не модели.
Кнопка - интерфейсный элемент, Табло тоже. Цель кнопки - получить команду извне(среагировать на событие) и передать его дальше. Кому? ну некому обработчику, который знает куда ее передать.Согласен, но у меня обработчик зашит в метод. Или это тоже ошибка? Например, в метод "+ void Нажать()" класса "цифровая кнопка" зашит вызов "Табло::+ void Добавить(n:char)", причём, этот вызов - действие внутри метода, а "-char n" - атрибут класса "цифровая кнопка". Это зашито в метод. У запятой в методе уже два действия, второе - вызов операции блокирования самой кнопки, а та операция уже пишет атрибут "- bool Заблокировано", если он true, то в следующий раз операция "Нажать" уже не вызывается. Ну и так далее. Так что скорей уж пору поинтересоваться, не переборщил ли я с ООПом. Не будет ошибкой зашивание обработиков в методы? Мелкософтовый c++ позволяет из оконной процедуры (а именно она контролирует допустимость операций и централизует диспетчеризацию сообщений, предназначенных классу) вызвать что угодно, включая члены классов, лишь бы оно было доступно в глобальной области видимости + можно ключевым словом friend отменить все спецификаторы видимости одного класса в отношении конкретной функции, в том числе, оконной процедуры, а если и этого мало - friend ещё в одном классе и его спецификаторы тоже перестают распространяться на данную функцию. А так как пишу я именно на мелкософтовом c++, то реализовать такую модель могу, но сама оконная процедура формально не может быть членом класса.
Модель должна упрощать реальность.Упрощать, но не перевирать и в меру. Вот представь математическую модель релятивистского ускорителя (БАК, например). Если заложить ньютоновские формулы для ускоряемых частиц, то модель проще, но дальше от реальности и ускоритель вообще не сможет работать. Но кварки в бетоне стен туннеля того же ускорителя можно не моделировать.
2. Каждая модель может быть представлена с различной степенью точности.И как же интересно можно зафиксировать уровень детализации?
Модель есть объект, заменяющий другой объект, систему, процесс, или явления и адекватно воспроизводящий все важные с точки зрения цели моделирования свойства заменяемого объекта, системы, процесса, или явления.Больше свойств воспроизведёшь - модель точнее, меньшее - наоборот. Те же свойства адекватнее воспроизведёшь - модель точнее, загрубишь - наоборот. Но модель то в любом случае можно менять, при этом меняются, добавляются, или убираются свойства.
3. Лучшие модели - те, что ближе к реальности.А как ещё? Вот представь: делаешь ты текстовый редактор с поддержкой иврита, а твоя модель не учитывает, что евреи пишут с права налево. Не годна твоя модель и редактор будет без поддержки иврита, а если это единственные его язык, то вообще не получится и всё только из-за того, что модель далека от реальности. Или по-твоему лучше ничего не сделать и свалить вину на моделиста?
4. Нельзя ограничиваться созданием только одной модели. Наилучший способ при разработке любой нетривиальной системы - использовать совокупность нескольких моделей, почти независимых друг от другаВторая модель - это другие аспекты предметной области, которые ты мог пропустить при создании первой модели, но только в том случае, когда они не зависимы, иначе это просто две формы одной модели, возможно два уровня её детализации, но замыленный шараповский глаз (см "Место встречи изменить нельзя") так и не прочищен.
1. Выбор модели оказывает определяющее влияние на подход к решению проблемы и на то, как будет выглядеть это решение.Ну а как? Ты же не по самой предметной области будешь систему делать. Раз ты пользуешься моделью, то она тебе и заменяет саму задачу, а если нет, то ты её не используешь, так как модель по своему определению есть заменяющий объект, значит выбор модели определяет представление задачи, ну а представление задачи определяет подход к её решению. Это всё равно как выбор языка оказывает определяющее влияние на набор используемых при общении слов. А как иначе? Нельзя говорить по-русски английскими словами. Нельзя решать задачу математическими методами, выбрав в качестве модели макет, если только перед непосредственно решением не построить математическую модель уже макета (модель модели, видимо метамодель). Нельзя, выбрав модель в приращениях, принимать решения об управляющих воздействиях на печь в полных уровнях и наоборот.