|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 32604. Ответов 421
Метки вопросы наследования (Все метки)
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
собрала... осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа... а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль; б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid... === !! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о: === Обоснование выбора уровня Абстракции (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. чтобы избежать проблем Ромба и такого: Неоднозначность при множественном наследовании
0
|
||||
| 11.03.2020, 10:51 | |
|
Ответы с готовыми решениями:
421
Проверка двух текстовиков
Сделать скрипт для вывода текстов из текстовиков |
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 14.03.2020, 13:12 [ТС] | ||
|
что более memory-efficient? (а в этом контексте и реализация не маловажна... имхо)
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 14.03.2020, 13:31 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 14.03.2020, 16:36 [ТС] | ||
|
в принципе, да - там по статье и указано
p.s. множественного наследования и виртуального наследования (для обхода ромба) у меня пока нет -- поэтому пока вопрос снимается (ввиду практической непотребности на данном этапе)... пример с ходу не приложу
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 14.03.2020, 18:02 | |
|
JeyCi, все, что вы выше написали про & - это синтаксические правила. Каким образом тут "memory-efficient"? Синтаксис в общем случае никак не влияет на это.
Поэтому повторяю вопрос: уточните контекст, что вы хотите применять, где, как вы считаете, может пострадать memory-efficient? Примеры контекста применения, пожалуйста, дайте.
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||||
| 15.03.2020, 06:53 [ТС] | ||||||||
|
2)по аналогии с вызов самой функции с параметрами, переданными ByVal или ByRef - особенно, если передаются массивы - тут уж точно memory-efficiency очевидна... как и при передаче ссылок на объект класса или самих объектов класса... (думала, что между 1-м и 2-м можно провести аналогию по потреблению памяти)... полагаю, что для memory-efficiency всегда лучше передача по указателю (только если вызываем не const элемент класса, иначе бесполезно, если значение надо изменить)... что касается функций, то, думала, такая же ситуация - либо несколько раз располагаем функцию в памяти, каждый раз со своими входящими параметрами (при многократном использовании)... или даём ссылку на функцию... и не создавая новую копию, прогоняем через неё любые параметры... НО пока по цитате выше вижу, что даже без указаня */& многие компиляторы всё равно будут использовать указатель/ссылку на функцию-член (параметры отдельная история)... примеры любые, самые обыкновенные можно брать (там же по статье указаны и примеры синтаксиса - не хочу перепечатывать)... Добавлено через 5 минут на вариант, если возможен, использования компилятором функции не по указателю/ссылке - пример не покажу... как можно прикладывать пример того, чего не знаю где и как и бывает ли... ещё раз обратить внимание на цитату и на статью
... нюансы при множественном и виртуальном наследовании там далее (пока не вникала) - для инфо... но я пока их не использую - поэтому не покажу... p.s. если что-то будет не работать у меня - покажу
0
|
||||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 16.03.2020, 06:37 [ТС] | |
|
по Архитектуре - в своё время понравилась статья на habr'e
(она же во вложении) === и книга, хоть и C#, - Принципы, паттерны и методики гибкой разработки на языке C#. Роберт Мартин правда, на habr'e - есть Критика книги Боба Мартина -- но пример в конце книги по зар.плате - показался интересным (и последние главы про БД и MVC)... и вообще в ней много интересных схем дизайна и примеров применения SOLID (независимо от языка)
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 16.03.2020, 07:02 [ТС] | |
|
и на всякий случай оставлю линк на пока ещё слабое моё место - Understanding and Using C Pointers. R. M. Reese - хотя можно рассматривать и как тему для новой ветки
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 16.03.2020, 09:39 | |||||
|
JeyCi, для C++ есть книга: Гибкая разработка программ на Java и C++. Принципы, паттерны и методики. Этого же автора.
Добавлено через 1 час 4 минуты Вы так быстро бежите по материалу, и по вашему описанию очень похоже, что вы скоро сильно запутаетесь. Вот, например, это: Если ваш изначальный вопрос состоял в том, что выгоднее вызывать функцию непосредственно, или использовать указатель на функцию, то ответ опять же один: зависит от того что вам нужно сделать. Какого-то единого рецепта - нет. У этих механизмов разное назначение. Могу предложить такое эмпирическое правило: "если вы не знаете зачем вам в коде нужен указатель на функцию, то вы не должны использовать его". В большинстве стандартных ситуаций, где вам нужен вызов функций, непосредственный вызов даст самый оптимальный код из возможных.
1
|
|||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||||||||||||||||||||||||||
| 16.03.2020, 11:36 [ТС] | |||||||||||||||||||||||||||||||
|
да, вы правы - есть большие сомнения, например, по такому (из той вложенной статьи)
Все зависимости должны быть в виде интерфейсов
"Все зависимости должны быть в виде интерфейсов».
Не смотря на свою фундаментальность и кажущуюся простоту это правило нарушается, пожалуй, чаще всего. А именно, каждый раз, когда в коде программы/модуля мы используем оператор new и создаем новый объект конкретного типа, то тем самым вместо зависимости от интерфейса образуется зависимость от реализации. Понятно, что этого нельзя избежать и объекты где-то должны создаваться. Но, по крайней мере, нужно свести к минимуму количество мест, где это делается и в которых явно указываются классы, а также локализовать и изолировать такие места, чтобы они не были разбросаны по всему коду программы. просто получается на каждую record (распарсенную) нужно создавать свой new (многовато?!), потом хочу по ссылке его void add_rec(elRecord) в Table. и потом уже по ссылке эту Table в ostream, или в DB... так вот пытаюсь declaration & initialization сделать одновременно:
... а всего лишь не хочу писать new на создание каждого объект class elRecord... а в итоге в class Table::add_rec(r) как-то не так указатели доходят... вот пока и думаю, как тут лучше выразиться === DrOffset, спасибо за внимание к теме! - просто пока ещё, наверно, так много не совсем понимаю, что с трудом связываю, несколько строк, поэтому и примера приложить не могу с конкретным вопросом - просто экспериментирую и по-тиху продвигаюсь вперёд (чтобы не тупо копи-пастом из примеров в сети, а всё-таки находить самые ! красивые - т.е. быстрые и краткие - решения).... === ?? а по цитате под спойлером - так вообще пока не знаю как это сделать, чтобы конструктор не зашивать в классс?? (возможно ли?), а сделать интерфейс (фабрику, насколько, поняла) - вероятно, для создания всех этих new... ?? === вот на таком распутье я сейчас (вся работа - в классах elRecord и Table, не в структурах) p.s. слова Add to vector, сам Vector, и String - определены в IDE Добавлено через 11 минут #include <Core/Core.h> using namespace Upp;
0
|
|||||||||||||||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||||||||||||||||||||||
| 16.03.2020, 12:20 | ||||||||||||||||||||||||||
|
Добавлено через 6 минут Если не абстрактный класс, то:
1
|
||||||||||||||||||||||||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||||
| 16.03.2020, 15:37 [ТС] | |||||||||
В ЛЮБОМ СЛУЧАЕ: !! Thanks a lot - собрала в Table 1 вид файлов ok... и конструктор стал покороче благодаря вам... и от new в main'e избавилась... точки с запятыми буду стараться минимизировать, но пока ставлю, где помню...p.s. но собирать надо 3 разных вида файлов... это лучше использовать/переделать на Абстрактный класс?.. вобщем, сейчас покручу/почитаю/подумаю ещё... может Фабрику (Abstract Factory) какую замутить из паттернов? Добавлено через 10 минут всё-таки перешла на using namespace std; и только где парсинг using namespace Upp; - иначе там Vector какой-то странный в Core.h всё указатели вроде хотел... (- не полезла изучать библу)
0
|
|||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 16.03.2020, 16:18 | ||||
|
std::variant<T1, T2, T3> еще рассмотрите. Добавлено через 57 секунд Добавлено через 39 секунд Я бы проектировал класс исходя из того, что у него не будет сеттеров. Т.е. все необходимые данные вычисляются или задаются в конструкторе. Если нужен объект этого класса с новыми данными, то создается другой объект с другими аргументами конструктора. Так не всегда получится сделать (т.е. сеттеры определенно нужны в некоторых ситуациях), но класс с сеттерами, как вариант класса по умолчанию, я бы рассматривать не стал.
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||||
| 16.03.2020, 17:40 [ТС] | ||||||
|
p.s. а вообще - по совету с planetaexcel (куда оставляла линк выше) - unordered map пошустрее может оказаться - если потом join'ить придётся 3 типа файлов...
Добавлено через 42 минуты P.S. Хотя... abstract-factory
, Архитектура важна...
0
|
||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 16.03.2020, 18:47 | |
|
JeyCi, можете в целом описать задачу, которую решаете? Я посмотрел другие ваши темы, но цельной постановки задачи не нашел. Что-то связанное с файлами? Можете развернуть подробнее?
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||
| 16.03.2020, 20:20 [ТС] | |||||
|
НО по сути у нас "всё-есть файлы" (почти как Linux ) - 3 разных View, которые надо запихать в бизнес логику... и оттуда ещё выходных несколько View сделать (мало ли куда захочется закинуть эту Table или просто вывести в файл или на консоль)...Т.Е. по сути у нас, видимо 1 уровень абстракции на входе, aka файл... и его разновидности... по сути - древовидные... по сути join от корня(ей) можно будет делать... обход дерева мне, наверно, полезнее полистать, чем паттерны... т.к. уровень абстракции, вероятно, по сути Один - наверно, всё проще и на данном этапе для данной задачи я зря так "искусственно" пытаюсь самой задаче навязывать какие-то паттерны... ок, постараюсь не усложнять Добавлено через 20 минут Продукт1 -цены за период1 -- реализация за период1.1 -- реализация за период1.2 -цены за период2 -- реализация за период2.1 -- реализация за период2.2 Продукт2 (такая же история) === 1) т.е. json'ы по (условно продукту) имеют ключи к json'ам (условно) цены, которые имеют ключи (немного другие) к (условно) реализации товара по сути... в другой последовательности не с'join'ить (т.к. полный ключ для 2-ого join появляется только после 1-го join)... файлы беру из сети (пока тупо в txt скидываю, в перспективе можно и с http брать - это потом)... 2) из папок хочу собрать нужный (не знаю какой лучше итоговый контейнер, по сути "recordset" на выходе нужен для заброса в БД, пока вся логика на Access - в перспективе может на MS SQL Server Express - но всё для home use, не для сетевой версии пока!)... возможно "recordset"(vba'шный) на с++ представить в итоговый tuple (чтобы потом бросать в бд) 3) или unordered map, чтобы вначале c'join'ить... (4) не хочу join'ить на C# LINQ to Json (тоже не знаю его)... (5) не хочу join'ить на стороне сервера (не уверена, что со всеми нюансами Access будет join'ить быстро)... 6) да и парсинг всё равно нужен (т.к. текстовые поля надо будет приводить к единообразию логическому для бд) (7) не хочу excel Power Query - p.s. и такой нюанс как в схеме отразила - там в 3х уровнях файлов грануляция к всё более мелкому делению по ключам... (надеюсь, понятно выразилась)... но как-то так... p.p.s. по сути забрасывать в бд в итоге... но хотелось бы и в файл (csv), и на консоль - посмотреть.. как-то так Добавлено через 56 минут p/p/p/s но из всех разных json по сути чтение встроенной в U++ библиотекой в json.h... читаются только с раскладкой в разные классы (3 вида пока, как описала, вряд ли будет больше, но это не от меня зависит, а от источника стороннего)... = это то, что пытаюсь на данном этапе изобразить - их чтение... и хотя бы в csv или на консоль... про бд и предварительный join, наверно, буду думать потом...
0
|
|||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|||||||||||||||||||||
| 17.03.2020, 08:29 [ТС] | |||||||||||||||||||||
|
для класса Table сделала перегрузку оператора вывода:
радует, что для выгрузки группового класса не пришлось перегружать и operator[]...Добавлено через 33 минуты можно и просто функцию-член void Print()
и функция-член void SaveFile(String fn)
Добавлено через 6 минут НО вот этот уровень Абстракции? - выгрузка - уже, наверно, никак не задать?... т.к. всё равно у каждого файла будут свои поля-члены, поэтому и в каждый класс лучше добавить свою функцию-член void Print()... т.к. несколько разных перегрузок сделать для << , наверно, никак, только если банально switch case type_id(obj).name??... но это не очень по ООП... сделать универсальную функцию для выгрузки любого группового класса, вероятно, никак? p.s. или делать class IPrint - интерфейс с множественным наследованием и виртуальными функциями... не понятно что лучше с точки зрения Архитектуры?? и какой? Добавлено через 9 минут p.p.s. ХОТЯ, наверно, стоит покрутить #2 - а то уж совсем в Абстракции понесло... но Абстракции по входящим файлам так же остаются под вопросом?..
0
|
|||||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 17.03.2020, 08:48 | ||||
|
Добавлено через 3 минуты
0
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 17.03.2020, 09:21 [ТС] | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 17.03.2020, 09:41 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
|
| 17.03.2020, 12:56 [ТС] | |
|
0
|
|
| 17.03.2020, 12:56 | |
|
В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Ошибка "в указанном dsn архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|