|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
Объектно-ориентированное проектирование и дизайн приложений: взаимодействие, модели, системы, архитектура21.12.2015, 06:52. Показов 8706. Ответов 125
Метки нет (Все метки)
В общем, дело такое. В ООП ничего не понимаю. Нужны некоторые уточнения парадигмы. Предполагается чистый C++ (без boost, stl и подобного).
Для примера: создание класса "журнал оценок". Двойки в который в детстве ставили многим. 1. Должен ли класс внутри себя хранить массив ФИО, Даты? Или не должен. 2. Не очень понятно как связать оценки, если должен. Я так понимаю, что класс все-таки должен хранить внутри себя массивы. Но это использовать неудобно, местами вообще непонятно (вопрос пересечений ФИО и Даты для получения оценки). Как это может стать удобным мой мозг догадываться наотрез отказался, уперся в то, что массивы надо создавать вне класса и обрабатывать их вне класса, а класс должен содержать только единичные значения. Это, с единичными значениями и внешними массивами, может и удобно, но так не получается такой объект, который как бы заимствован из нашего мира и спроецирован в мир приложения, а, значит, такое ООП - не ООП. Помощь нужна. Я именно в теории нуждаюсь. Примеры, конечно, тоже могут стать полезны, только сложных не надо.
0
|
|
| 21.12.2015, 06:52 | |
|
Ответы с готовыми решениями:
125
объектно-ориентированный анализ,объектно-ориентированное проектирование Буч, Гради. Объектно-ориентированное проектирование с примерами на С++ Объектно-ориентированный анализ и проектирование с примерами приложений |
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|||||
| 15.01.2016, 22:17 | |||||
|
daslex,
Во-первых, хороший и простой и жизненный вариант приведён мистером Kastaneda в третьем посте. Но если развлекаться/извращаться в ооп, то: Для того чтобы такого не происходило существуют шаблоны проектирования, это не только бестпрактис код который мы должны все использовать, это язык для разработки больших программ, это способ взаимодействия между программистами на уровне архитектуры - это единственное что позволяет реже задавать вопросы:
0
|
|||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 15.01.2016, 22:26 [ТС] | |
|
В варианте Kastaneda почему оценка enum?
У меня его вариант не получился. Чего-то там упущено. Вопрос с которым я борюсь сейчас - инкапсуляция.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||
| 15.01.2016, 22:36 | ||||
![]() Если желаете добавлять к оценке "2" - "Кидался бумажками в девочку за первой партой", то тогда заводите конечно класс, но мы же про студентов говорим, а не про подготовительную группу в яслях? )) ![]()
1
|
||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 15.01.2016, 22:50 [ТС] | ||
|
___________ Я подозреваю, что Вы не особо разобрались в моей ситуации. 1. Есть конкретный вопрос. 2. Есть конкретная задача. 3. Есть конкретные попытки. Что мне не нравится в Ваших ответах 1. Разабстрагировывание. Мне дела нет ни до каких сущностей, пока я застрял в "скелете" программы. 2. Вы очень поторопились с ответами. Кроме отсыла на третий пост ничего полезного не увидел. 3. Ваши советы могут привести к тому, что слабохарактерный человек разочаруется в ООП и смысле жизни. Плохо. Если я решил разобрать программу с точки зрения одной парадигмы, то и стоит ее разбирать с точки зрения той парадигмы. Не потому что парадигма - пуп решений, а потому что она позволяет решить такого рода задачу.
0
|
||
|
Комп_Оратор)
|
||
| 15.01.2016, 22:52 | ||
|
daslex, кот Frisky, это же начало. Потом нужно пробовать более сложные вещи. А сразу с журнала начать, это не оптимально. Представьте, что начинающий художник бьется над проблемой игры света в волнах у Айвазовского. В принципе то, нужно ответить на вопросы: 1. Что из себя представляет журнал как набор существенных признаков с точки зрения вашей программы и Вы получите свойства, - набор данных. Если Вы не знаете структур, то это бесполезно. 2. Что должен уметь делать журнал (что делает - глагол)) и Вы получите набор методов. О функциях тоже знать уже нужно. Обдумывая методы - начните с прототипов и сразу может выяснится, что какие-то свойства нужно добавить. Нельзя проектировать сложный класс без подготовки и практики. Начните с экзаменационной ведомости может? А вообще начинают вхождение в тему с таких классов как Точка, Треугольник и кошаки всякие не случайно. Слово парадигма пока не поможет.
0
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|||||||
| 15.01.2016, 23:14 | |||||||
Другие вопросы - вам уже много насоветовали, осталось разве что переварить.
1
|
|||||||
|
Комп_Оратор)
|
||
| 15.01.2016, 23:31 | ||
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 15.01.2016, 23:51 [ТС] | |
|
Как объяснить себе я знаю.
Почему другим объяснение мое непонятно для меня неизвестно. 1. Что из себя представляет журнал как набор существенных признаков? - Что-то такое, куда записана информация. Всё. Я знаю структуры. Проблема не в них. 2. Что должен уметь делать журнал? - а) Поиск информации. Журнал кроме как для поиска информации в реальном мире не нужен. Можно, конечно, пожар из него устроить, скормить плохому студенту, на самолетики пустить. Меня интересует только поиск в нем информации. б) Сохранение информации в единицу трансляции (больше чем массив подходит). в) Больше ничего. Начинать надо не с методов или прототипов, а с проектирования хоть на бумаге, иначе даже маленький проект превращается в огромную головную боль. Я уже сделал такой вывод. Экзаменационная ведомость - простой массив объектов одного класса? Это вообще не сложно (мне). В ином случае (не массив объектов) все превращается в мой журнал. Добавлено через 9 минут Не по теме: Для решения таких проблем описаны паттерны. Добавлено через 2 минуты Проблема не в "Куда засунуть поведение", а в том "Как связать" два независимых класса.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
| 16.01.2016, 00:31 | ||||||
. А с точки зрения реального кода - тоже без разницы, ибо испортить такую маленькую штуку будет сложно(одна лишняя зависимость - это капля в море), и можно отрефакторить потом при надобности, главное чтобы никто на это неверное поведение не завязался, т.е. инкапсуляция.daslex, Я опять возьмусь за старое только ещё скажу что большая архитектура - штука очень индивидуальная, она очень зависит от ваших взглядов, от опыта, от того сыты ли вы, от звёзд на небе, особенное влияние вносит мой "шарообразный конь в вакууме" стоящий у меня на столе. Именно поэтому вы не принимаете/осознаёте приведённые вам другими людьми примеры.Сугубо моё имхо в подходе проектирования: 1) В пень рисование УМЛ диаграмм, хотя честно на бою я их рисовать не пробовал ![]() - Если алгоритмически код не сложен и понятен, то я предпочитаю лабать сразу в коде гору заглушек, да сидите так и пишете теже умл которые бессмысленно компилять, но в коде. - Если сложный, то да, обращаюсь за помощью к бумажке и ручке и потом опять же в пункт (1) с первоочередной проработкой тонких мест, и размышления об оптимизации. 2) В голове подхожу к архитектуре сразу с двух сторон, как снизу(с минимальных сущностей), так и сверху(с самого верхнего интерфейса использования) Нпример: Для сферической программы в вакууме "журнал" - на первой странице сего топика как минимум две дельных реализации, но вы их пока не принимаете. ![]() ![]() Не по теме: Как говорится "нет такой проблемы которую нельзя решить добавлением ещё одного уровня абстракции, кроме как слишком большого количества уровней абстракции" Просто в лоб агрегированием классов - и вы получите "Фасад". Если там что-то сложнее требуется - говорите. Свзывание сейчас у вас не сложное, и нужно не бояться создавать новые сущности если они нужны. Сложно это когда нужно связать классы через 5 уровней абстракции. 1) Не бойтесь создавать сущности если они нужны. 2) Напишите уже скорее модель. 3) Сделайте для неё сериализацию. 4) Определитесь с интерфейсом взаимодействия пользователя. 5) Прикрутите пару абстракций, для красивого/удобного связывания (2) и (4).
1
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 16.01.2016, 00:55 [ТС] | ||
|
Надо сразу правильно учиться. Это не та область, где стоит махать рукой на маленькие огрехи.
Мое мнение таково, что кто-то на инкапсуляцию смотрит как-то очень поверхностно что ли. (это не утверждение, это ощущение). Тыркать пальцами не буду, в тем более не могу отрицать, что в этом моменте могу быть не прав. _________ 2 и 3 не понял. Я не знаю что сие означает. Рисунок никто не смотрел ведь. Признайтесь по хорошему. То, что тут мне советуете, там все это обрисовано. Это не столько UML диаграмма, сколько объясняловка (больше, конечно, самому себе).
0
|
||
|
Комп_Оратор)
|
||
| 16.01.2016, 00:59 | ||
![]() В целом согласен. Лучше нагородить горбылей, а потом разгребать, чем буриданова дилемма. Вообще, не стал бы я доверять выведение оценок журналу. Слишком он сух и черств (имхо). Я вижу в нём связную информацию о: -посещаемости ; -оценки. То есть для каждой записи из списка студентов для данного предмета есть последовательность полей датированных занятий (попросту пар дата - клетка), где клетка может быть: - " " пустой (был/делал вид что учится); - "Н" (не был / делал вид что болел или честно филонил); -"O" (обведенный кружком "Н" означает отработал. Не знаю как теперь, а у нас такое было). - "цифра или число " в зависимости от шкалы - оценка. Данные клетки должны разделяться итоговыми четвертными. Кроме всего прочего у клетки могут быть дополнительные поля-описатели (желательно чтобы были) вроде - рядовое занятие, контрольная, лабораторная и т.п. эти атрибуты синхронны по дате (контрольная у всего класса одновременно бывает). То есть надо разобрать, как это будет у Вас в проге работать. Тогда и появятся методы - дай количество пропущенных, долги, оценки сквозные, оценки по контрольным и пр.
2
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||
| 16.01.2016, 01:17 | ||||
|
Профессор будет за журналом ходить в деканат. В журнале уже будет предмет, список студентов и их оценок. )Сериализация - преобразование данных из одного формата в другой - в вашем случае операторы чтения и записи из/в потоки ввода/вывода соответственно. ![]() Добавлено через 4 минуты daslex, Забыл указать, что профессор не должен на самом деле "ходить в деканат", профессор о деканате не должен знать, профессор - это просто маленькая модель, описывающая преподавателя. "ходить в деканат" -это я абстрактно говорю )))) Архитектурно, при начале урока нечто поведенческое должно "взять" из объекта "деканат" нужный "журнал", нужного "профессора", нужных "студентов" и начать проставлять "оценки".
1
|
||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 16.01.2016, 01:18 [ТС] | |
|
0
|
|
|
Комп_Оратор)
|
||
| 16.01.2016, 01:29 | ||
|
Не по теме:
daslex, получается, что класс описывает поток учебных дней. Поэтому может описание учебного дня в виде класса не помешало бы. Тут имеет смысл подумать, а какие учебные дни бывают.
1
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 16.01.2016, 01:39 | ||
|
Мистер IGPIGP, мне об этом напомнил ![]() Не по теме: Хотя можно конечно и не останавливаться, если голодной смерти не боитесь или это для учебных целей, хотя второе не исключает первое :)
1
|
||
|
Комп_Оратор)
|
||
| 16.01.2016, 01:46 | ||
|
-лекция; -практика/лаба -тематическая контрольная; -четвертная контрольная; -годовая контрольная; вроде всё пока. Для каждого из них имеет смысл " ", "Н", "О"... То есть у занятия группка наследников, например. Хотя можно и перечислением обойтись. Тут же непонятно какого уровня прога будет.
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 16.01.2016, 01:47 [ТС] | |
|
Я через некоторое время попробую с деканатом. Другие заботы пока что.
Я не планировал делать мегасистему. Это для учебных целей. Я же писал (смотреть первые два предложения в самом начале темы). Я планировал сделать скелет программы. Сегодня в мыслях было имитировать учебный процесс. Своеобразная автоматизация учебного периода. При правильном проектировании должно получиться.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 16.01.2016, 01:52 | ||
И никто и никогда не узнает какого уровня будет хоть одна прога в этом мире ![]() И я никак не считаю что вы не правы. Напротив, если нужны разные занятия - обязательно их описать.
2
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 16.01.2016, 01:54 | |
|
Вы тут ведете речь не столько непосредственно об объектно-ориентированном программировании, сколько об объектно-ориентированном дизайне ( https://en.wikipedia.org/wiki/... ted_design ).
Я б советовал ознакомиться с SOLID ( http://butunclebob.com/Article... iplesOfOod ) и GRASP ( https://en.wikipedia.org/wiki/... ted_design ), почитать про Domain-Driven Design и паттерны проектирования. Еще достаточно странно видеть попытку просто вот взять и перенести реальный мир в реализацию ООП на языке. Перед нами изначально должна стоять какая-то конкретная проблема, которую нужно решить. Тогда мы строим модель реального мира, но не абсолютно точную, а приближенную настолько, чтобы с ее помощью эту проблему можно было решить. А пока вы, как мне кажется, просто выбираете сущности наобум, без понимания зачем они вообще тут нужны - потому что четкой задачи нету, а есть ООП ради ООП. Может я неправ, но ощущение у меня такое.
4
|
|
| 16.01.2016, 01:54 | |
|
Архитектура и проектирование приложения: ищу видео, статьи и книги с примерами реальных маленьких приложений Гради Буч: "Объектно-ориентированный анализ и проектирование с примерами приложений" Как происходит взаимодействие приложений с реализацией модели OSI? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|