|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||||
Архитектура: парсинг и выгрузка текстовиков11.03.2020, 10:51. Показов 32662. Ответов 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 архитектура драйвера и архитектура приложения" Архитектура бд Архитектура БД Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|