Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32453. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
16.07.2020, 14:00  [ТС]
Студворк — интернет-сервис помощи студентам
скажите мне, как быстро перейти к радостной девочке в смайлах?.. очень долго scroll идёт...
вроде получилось - вывалились все файлы... только добавила i++ иииииии

Добавлено через 6 минут
P.S.
Цитата Сообщение от Avazart Посмотреть сообщение
async/await pattern как бы не определяют асинхронность это лишь дизайн.
в Python - тоже - лишь указывает, что будет использоваться асинхронная функция...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.07.2020, 14:07
Тогда при чем тут Qt?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
16.07.2020, 14:23  [ТС]
не при чём - реализация сделана на U++ IDE
тему можно считать завершённой
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.07.2020, 16:20  [ТС]
P.S. добавлю для инфо:
Цитата Сообщение от GoshaM Посмотреть сообщение
void Worker::Start ( StatusBar* pstatus, ProgressIndicator* pprogress )
Есть ли преимущества передачи по указателю над передачей по ссылке в C++? хоть перевод и не очень...
и цитату с форума:
Цитата Сообщение от Большой_Стен Посмотреть сообщение
В С++ нет универсального способа, чтобы и лишнюю переменную не создавать, и утечки памяти не было (по образцу из java или C#) ?
Добавлено через 1 минуту
однако
к счастью, современные компиляторы убирают двойное освобождение одного и того же указателя (- в деструкторе).
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
23.07.2020, 16:25
Цитата Сообщение от JeyCi Посмотреть сообщение
к счастью, современные компиляторы убирают двойное освобождение одного и того же указателя.
Эта фраза полностью лишена смысла.
Двойной вызов delete или free - это UB, ни на какое поведение компилятора закладываться нельзя (тем более что специально компилятор ничего не обязан убирать), нужно исправлять ошибку в программе.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.07.2020, 18:19  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
нужно исправлять ошибку в программе.
так разве это ошибка там в примере?
разницы между foo (BAR bar) и foo (BAR & бар). (Вызывается автоматическая побитовая операция копирования. Освобождение в деструкторе вызывается дважды.)
это же вроде реалии жизни... а раньше
15 лет назад они этого не сделали. (под gcc / g++ используйте setenv MALLOC_CHECK_ 0 вернуться к старым привычкам.) В результате, в соответствии с DEC UNIX, в одной и той же памяти выделяются два разных объекта.Там много удовольствия от отладки...
(перевод там хоть и кривой, но по сути примерно это)
сейчас в такой ситуации, насколько поняла, и беспокоиться не надо - можно положиться на компилятор - сам уберёт задвоение delete'a -- при передаче параметра по указателю

Добавлено через 6 минут
p.s.
или вот нормальный текст (но без вышеуказанного нюанса)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.07.2020, 18:23
Цитата Сообщение от JeyCi Посмотреть сообщение
(перевод там хоть и кривой, но по сути примерно это)
сейчас в такой ситуации, насколько поняла, и беспокоиться не надо - можно положиться на компилятор - сам уберёт задвоение delete'a -- при передаче параметра по указателю
Нет, не уберёт.
delete будет вызван ровно сколько раз, сколько раз ты его вызовешь. Ты путаешь оптимизацию - когда компилятор в compile-time убирает лишние копирования объекта, например при return-value-optimization, и динамическое создание-удаление объектов в runtime.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.07.2020, 21:00  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
delete будет вызван ровно сколько раз, сколько раз ты его вызовешь.
так в том то и дело, что я ничего не создаю и не удаляю...
просто передаю указатель на ЭУ progressIndicator... он сам себе даже не создаёт в данном случае (по указателю) дубль параметра, но при возврате в вызывающую сторону - вроде delete тоже сам делает, потом в деструкторе delete сам делает (я ведь ему не писала new)...
хотела убедиться, что безопасно - пока всё в одном рабочем thread'е - но работа с указателями тоже вроде бывает unsafe...
и 2 ядра всё-таки - не пойдёт ли код автоматом с одного потока для ускорения на разные ядра... или даже primary GUI-thread и secondary Worker thread не разойдутся ли, как в море, корабли... хотя тут вроде GuiLock работает для синхронизации

Добавлено через 5 минут
Декомпозирую по-тихоньку

Добавлено через 2 часа 19 минут
C PostCallback - грустно...
с GuiLock - всё OK ! - стихами
по указателю передала массив в др класс, а оттуда отразила итерирование по нему в GUI... и т. д.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
23.07.2020, 21:21
Цитата Сообщение от JeyCi Посмотреть сообщение
он сам себе даже не создаёт в данном случае (по указателю) дубль параметра, но при возврате в вызывающую сторону - вроде delete тоже сам делает, потом в деструкторе delete сам делает (я ведь ему не писала new)...
Ничего не понятно. Кто что делает?

Добавлено через 16 секунд
Цитата Сообщение от JeyCi Посмотреть сообщение
C PostCallback - грустно...
С этим тоже ничего не понятно.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
23.07.2020, 22:07  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
тоже ничего не понятно.
не отработал из др. класса
Цитата Сообщение от DrOffset Посмотреть сообщение
он сам себе даже не создаёт в данном случае (по указателю) дубль параметра
параметр переданный по указателю... хоть ссылка и есть всего лишь альтернативное имя указателя на память - но всё-таки она и есть 2-е имя... не знаю как ещё объяснить... согласна с oleg-m1973, это уже не мои дела, а дела компилятора... просто обратила внимание, что раньше старый компилятор имел проблемы (на вызывающей функцию стороне) с удалением параметров, переданных по указателю... - параметр - один, а удалять приходится 2 раза - поэтому это вроде руками делать надо былО...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
23.07.2020, 22:10
Цитата Сообщение от JeyCi Посмотреть сообщение
просто обратила внимание, что раньше старый компилятор имел какие-то проблемы с удалением параметров, переданных по указателю...
Не, никогда не имел
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
23.07.2020, 23:32
Цитата Сообщение от JeyCi Посмотреть сообщение
раньше старый компилятор имел проблемы (на вызывающей функцию стороне) с удалением параметров, переданных по указателю... - параметр - один, а удалять приходится 2 раза - поэтому это вроде руками делать надо былО...
Не знаю о чем конкретно речь, но двойное удаление - это всегда ошибка программиста, компилятор тут вообще не при чем.

Если "раньше имел проблемы" - это про двойное удаление, то если "раньше" программа падала на этой ошибке, а "сейчас" не падает - это не значит, что компилятор "имел проблемы". Это значит, что UB теперь проявляется по-другому. Но ошибкой это быть не перестало. И даже если программа на этом не падает, оно все равно не верно и нуждается в исправлении.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
24.07.2020, 09:54
...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
24.07.2020, 10:45  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Не знаю о чем конкретно речь, но двойное удаление
DrOffset, спасибо, что даёте свои опровержения на мои заблуждения...
там речь видимо шла о висячих (зависших) указателях - вы правы - это ошибка!... но у меня вроде изменений указателя нет, есть только изменения свойства объекта, на ячейку памяти нахождения которого указывает указатель?..
Кликните здесь для просмотра всего текста
здесь или
на ru_stackoverflow_com -- questions/108506/%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1% 87%D0%B0-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0% B0-%D0%BF%D0%BE-%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0% B5%D0%BB%D1%8E-%D0%B2-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1% 8E-%D0%B0-%D0%BF%D0%BE%D1%82%D0%BE%D0%BC-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0% BD%D0%B8%D0%B5-%D1%81%D0%B0%D0%BC%D0%BE%D0%B3%D0%BE-%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0% B5%D0%BB%D1%8F"]
Чтобы можно было изменить значения указателя, достаточно изменить сигнатуру функции F следующим образом:
void F(T &* a)
{
// do something..
}
или
Иногда проще результат передавать в качестве возвращаемого значения, чем извращаться с двойными указателями:
T * F(T * a) {
delete a;
a = NULL;
return a;
}

обязательно посмотрю потом...
пока кнопку btn_cancel опять мучаю :- из др класса того же thread'a - казалось бы проще простого, когда нет подключения к сети, но остановка request'a при обрыве соединения -- опять задумывается... Abort не очень удачно получается...
поэтому пока сама немного в зависшем состоянии... потом отвечу
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
25.07.2020, 09:38  [ТС]
наконец, дошли до дизайна Архитектуры
Передача указателя функции класса A в класс B (себе на память)
===
ВЫВОД:
Разбросать по потокам (Data-Level parallelism и Instruction-Level Parallelism, да и просто UI и поток его обслуживающий, я бы даже сказала Controller в MVC)
и выделить классы для их обслуживания (вообще не очень универсально пользоваться instance'ом, который в себе переваривает progressIndicator или чего ещё хуже - button_click -- я так думаю -- если от instance'a надо, чтобы он download_data)... думаю, чем всё тащить в класс, лучше из класса брать нужное... а то ведь параметром и весь UI можно затащить в класс и все потоки - как-то очень жирно по памяти будет, вероятно... имхо...
вобщем, принципы SOLID никто не отменял -- вот и просветление по теме наступило
P.S. а UML - всё-таки в помощь...
P.P.S.
- пример ТЗ -
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
25.07.2020, 09:52
Цитата Сообщение от JeyCi Посмотреть сообщение
Передача указателя функции класса A в класс B (себе на память)
Это старая тема. используйте Upp::Function (или std::function) и лямбда-выражения.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
25.07.2020, 10:10  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
и лямбда-выражения.
вот такая фраза немного смущает:
[&] -> lambda: capture all by reference (passes a reference) This can be quite dangerous, depending on how it is used.
в чём могут быть опасности?

Добавлено через 6 минут
хотя, насколько понимаю, - лямбды очень хорошо пришли на смену коллбэкам благодаря своему компактному синтакису... имхо
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.07.2020, 10:24
Цитата Сообщение от JeyCi Посмотреть сообщение
в чём могут быть опасности?
есть такой термин dangling references
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
25.07.2020, 18:59  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
есть такой термин dangling references
Warning:
Be extra careful when you capture variables by reference, especially with a default reference capture. The captured variables must outlive the lambda.
P.S.
What are the risks associated with the use of lambda functions in C++11

Добавлено через 3 минуты
Memory leaks and dangling pointers
Difference between dangling pointer and memory leak

Добавлено через 26 секунд
Lambdas: From C++11 to C++20, Part 1
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
25.07.2020, 22:07
JeyCi, эта проблема комплексная, и не присуща только лямбдам. С простыми callback`ами даже в базовом C-шном API может быть все абсолютно тоже самое.
Иными словами, вам всегда в С и С++ нужно помнить о том, где и сколько живут ваши объекты. А висячие ссылки в лямбдах - это частный случай - не понятно, с чего бы это именно к нему такое повышенное внимание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2020, 22:07

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

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку "Проверить соединение" Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
400
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru