Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2011, 00:45   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию организация библиотеки(внешние модули)

в общем пишу свою библиотечку и стараюсь по возможности делать её кроссплатформенной.
в общем как это есть сейчас(внутри ООП, но наружу вынесено через функции по методу чеширского кота):
имеется лишь одна длл, с функциями.
+ проблем с наследованием нет
+ всего один файл
- по мере дополнения библиотеки, длл растет(и соответственно будет занимать зря память при потреблении)

появилась мысль сделать так:
имеем длл с классами(классы экспортированы(точнее методы, но не суть) и открыты(не скрыты через кота)), они не для прямого использования.
и длл интерфейс, она уже использует те длл с классами, и предоставляет простые функции(по принципу кота), интерфейс при необходимости подгружает(*) нужные длл-классы.
+ проблем так же не будет
+ экономится память процесса при неполной загрузке библиотеки
- больше файлов и немного больше веса

тут думаю придется делать экспорт и через функции(для динамической загрузки) и через методы(для наследования)

кто что подскажет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2011, 00:59   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
- по мере дополнения библиотеки, длл растет(и соответственно будет занимать зря память при потреблении)
+ экономится память процесса при неполной загрузке библиотеки
Не понимаю я этого.
Вроде 2Гб виртуального пространства под рукой.
Это ж какой размер библиотеки должен быть?
f.hump вне форума Ответить с цитированием
Старый 21.08.2011, 01:07   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

2ГБ, то это да, но кто знает нужды целевого приложения

да и даже, хрен с ней с памятью тогда уж(хотя и разрастаться зря тоже не хочется)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 21.08.2011 в 01:12.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2011, 01:20   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ты бы хоть сказал, как будет использоваться библиотека. плагином? подгрузкой в реалтайме? тогда тут только 1 правильный способ. или же связи разрешать будет линковщик?

пс. не называй пимпл чеширским котом. pimpl - pointer to implementation, все ясно и понятно.
кстати, покажи как реализовал кросплатформенную работу с библиотеками, хочется посмотреть, так ли понял мою идею (а она красива)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 21.08.2011, 01:30   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
тут думаю придется делать экспорт и через функции(для динамической загрузки) и через методы(для наследования)
не знаю про что это, но в целом когда хочется сделать класс-длл, объявляют итерфейс

Код:
class myBadAssClass {
public:
 virtual int DoSomething(void *) = 0;
 virtual void DoNothing() = 0;
}
а библиотека эскпортирует страшный метод
Код:
myBadAssClass * CreateBadAss();
ну этот метод инициализирует все, что хотелось инициализировать в рамках myBadAssClass

Последний раз редактировалось f.hump; 21.08.2011 в 10:21.
f.hump вне форума Ответить с цитированием
Старый 21.08.2011, 02:55   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
подгрузкой в реалтайме?
или же связи разрешать будет линковщик?
вообще я не буду запрещать реалтайм, но в основе всетаки статика.(то есть можно считать что и то и то)
Цитата:
кстати, покажи как реализовал кросплатформенную работу с библиотеками, хочется посмотреть, так ли понял мою идею (а она красива)
у меня сейчас время теории.(сегодня в код решил не лезть, просто размышления, потому и создавал темы)
а это старый, которым не занимался полгода(решил немного сменить деятельность)
Цитата:
не знаю про что это, но в целом когда хочется сделать класс-длл, объявляют итерфейс
для класс dll-я просто применю __declspec(dllexport) к методам класса.(но скрытие реазации через функции выйдет тоже, ибо связке сами методы не нужны(хотя тут уже посмотрю, возможно и без них обойдусь, да это уже мои трудности будут(как связать се это добро)))

просто почему я хотел сделать отдельно, ибо например три библы:
Windows, Console, Sockets
понятное дело что не каждому приложению нужны все три.

PS: сейчас понял что написал много лишнего в вопросе.
если надо, завтра переформулирую.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 21.08.2011 в 03:10.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2011, 07:34   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в общем пишу свою библиотечку и стараюсь по возможности делать её кроссплатформенной.
в общем как это есть сейчас(внутри ООП, но наружу вынесено через функции по методу чеширского кота):
имеется лишь одна длл, с функциями.
+ проблем с наследованием нет
+ всего один файл
- по мере дополнения библиотеки, длл растет(и соответственно будет занимать зря память при потреблении)

появилась мысль сделать так:
имеем длл с классами(классы экспортированы(точнее методы, но не суть) и открыты(не скрыты через кота)), они не для прямого использования.
и длл интерфейс, она уже использует те длл с классами, и предоставляет простые функции(по принципу кота), интерфейс при необходимости подгружает(*) нужные длл-классы.
+ проблем так же не будет
+ экономится память процесса при неполной загрузке библиотеки
- больше файлов и немного больше веса

тут думаю придется делать экспорт и через функции(для динамической загрузки) и через методы(для наследования)

кто что подскажет?
Трудно что-то сказать, т.к. отсутствует конкретика вопроса. Но я все же выскажусь:
1. Один файл, наследование... - хорошо конечно, но раз у вас ООП, мы то не знаем чего у вас там за классы и что они будут делать, нужно сначала построить иерархию, спроектировать все сущности и разделить на классы, чтобы выполняли свои конкретные задачи.
2. Кроссплатформенность - тоже отлично, тогда имеет смысл определить, какие классы (с их методами) платформенно зависимы. Далее определиться, кроссплатформенность какая? runtime, на этапе компиляции или еще чего придумали? Если на этапе компиляции, то как обычно в С, через #define #ifdef и т.д. погнали соответствующие вызовы, если рантайм, то вынести класс вне основной библиотеки и подгружать динамически, например исходя из имени файла (ну добавить постфикс например или префикс win32 и т.п.).

Я может не то говорю, но просто перечитал несколько раз сообщение ваше, ну не смог понять, как уж слишком все в теории как по мне.
BOBAH13 вне форума Ответить с цитированием
Старый 21.08.2011, 10:27   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну что сейчас имеется думаю понятно.
в одной длл и классы и функциональный интерфейс.

вопрос в общем то можно сформировать гораздо короче, стоит ли менять литую длл, на набор [куча класс-длл + длл-функциональный интерфейс]
иерархия примерно получается такая(пакет->классы):
Код:
                        Base->Object
                         /    |     \
IO->Stream,FileStream,etc     |     String->String,Encoding
                      Files->File,Directory
надеюсь везде ровно..
это не учитывая зависимостей между классами(ну и не все естестенно тут)

вот я и хочу каждый из пакетов вынести отдельно.

PS: вообще сейчас на свежую голову, затея мне вполне нравится, но мало ли, совет опытных товарищей не помешает(не фигню ли я придумал)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.08.2011, 20:52   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

короче, закройте тему, пожалуйста.

сделаю так как хочу, если что вернусь к тому что было.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.08.2011, 21:12   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ИМХО я бы все в одну ДЛЛ сложил...
Ты идешь путем дотнета и это хорошее решение, но удобное ли - вот вопрос.
С одной стороны для программы не все ДЛЛки понадобятся, если ты не все будешь использовать, с другой стороны как обновлять устаревшие родительские ДЛЛ (несущие твой Base->Object), ведь это может повлиять на всю иерархию вниз.

Я бы всетки в одну ДЛЛ сложил...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешние процедуры sunny_alice Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.06.2011 08:33
внешние ключи в interbase Domanoff БД в Delphi 9 06.04.2010 16:15
«Внешние подпрограммы» Dr.Caste Помощь студентам 0 20.12.2009 15:36
Библиотеки и модули Принц Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 29.05.2008 16:39