|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 32513. Ответов 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 архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
|
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
|
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
====================================================================
КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM)
====================================================================
. . .
|
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ
Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
|
|
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|