48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
1 | |
Организация кода. Проектирование кода06.04.2017, 20:13. Показов 1289. Ответов 9
Метки нет Все метки)
(
Доброго времени суток!
Появилось желание реализовать в учебных целях библиотеку для связанных списков, очередей, стеков. Возник ряд вопросов. 1. Как реализовать эти библиотеки универсальными, чтобы они принимали в качестве своих элементов данные любого формата. Например, чтобы можно было бы организовывать очереди не только из целых чисел, но и различных структур данных. 2. Как подойти к процессу проектирования интерфейса библиотеки? Возможно, есть какая-та литература по вопросам проектирования ПО? В практике пока не очень силен.
0
|
|
06.04.2017, 20:13 | |
Ответы с готовыми решениями:
9
Проектирование кода
Организация кода Организация кода по категориям |
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
|
|
07.04.2017, 05:03 | 2 |
si1n3rd, можно посмотреть как в ядре линуха реализованы списки, загуглить linux list_head.
0
|
Нарушитель
|
|
07.04.2017, 10:50 | 3 |
![]() Решение
Взять библиотеку Glib и посмотреть.
Думаю, нужно использовать указатели на void.
1
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
07.04.2017, 12:07 [ТС] | 4 |
CoderHuligan, разрешите задать еще такой вопрос. Реально ли написать универсальную единую библиотеку для реализации различных видов списков. Например, я запускаю функцию list_init("single"), и мне функция возвращает указатель на односвязный список. Или лучше не морочить голову, а сделать для каждого вида списка свой интерфейс?
0
|
Нарушитель
|
||||||
07.04.2017, 13:45 | 5 | |||||
![]() Решение
Думаю, что реально сделать что-то подобное. Я тоже хочу реализовать нечто похожее и универсальное. Однако, думаю, что на си это будет несколько неуклюже выглядеть. Ведь универсализм против специфики конкретной задачи, а значит несколько неоптимален. Да и кстати в glib это уже реализовано, например, для односвязных списков:https://developer.gnome.org/gl... Lists.html
Я недавно нечто подобное делал:
Добавлено через 28 минут si1n3rd, Вот "сырцы" гномовской библиотеки: https://opensource.apple.com/s... ib-1.2.10/ Реализация односвязных списков: https://opensource.apple.com/s... .auto.html Общий заголовочный файл: https://opensource.apple.com/s... .auto.html
1
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
07.04.2017, 14:03 [ТС] | 6 |
CoderHuligan, спасибо. Я парочку библиотек уже пересмотрел с реализацией списков и очередей. Везде виды списков реализовываются разными интерфейсами. То есть, я не нашел пока библиотеки, где хотя бы три базовых вида списков реализовывались в одном наборе интерфейсов. Да, и если так подумать, то по всей видимости это не практично. А вот сделать так, чтобы принимался любой вид данных реально, я уже это реализовал. Правда, работы еще завались
![]()
1
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|||||||||||
08.04.2017, 22:58 [ТС] | 7 | ||||||||||
CoderHuligan, есть такой вопрос. Есть два варианта реализовать принятие любого вида данных.
Первый, принимать указатель на объект и цеплять его к void *data. Второй, принимать указатель на объект, выделять malloc'ом место в ноде под data и копировать туда данные из объекта, но тогда нужно где-то хранить размер передаваемых данных. Попробую кодом передать. Первый случай:
![]()
0
|
Нарушитель
|
|||||||||||
09.04.2017, 10:14 | 8 | ||||||||||
![]() Решение
Второй вариант это конечно бред.
По первому варианту лучше: так как размер данных при определениии функции задан, как void*, то при вызове этой функции мы просто в параметрах сразу приводим указатель на даные к нужному типу, и все дела. Хотя, компилятор это может сделать и за нас. Поэтому не:
1
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
12.04.2017, 15:25 [ТС] | 9 |
CoderHuligan, обращусь к вам, как к человеку более опытному. Может вы сможете посоветовать какую-то литературу про проектированию ПО? А то не особо понимаю, куда знания то применять.
0
|
Нарушитель
|
|
12.04.2017, 16:49 | 10 |
Тут есть намного более опытные товарищи.
Литературы по программированию пруд пруди. Но по проектированию ПО мало. В основном это литература по ООП проектированию. Видимо это потому, что способы проектирования являются своеобразным "ноу-хау" разработки. Оно приходит с опытом, а этим опытом мало кто делится. Могу посоветовать только в каком направлении рыть. Мэйн-стрим это ООП разработка - там деньги, понты и прочее. Но будущее на мой взгляд за автоматным програмированием, хотя оно только начинает прокладывать себе дорогу. На мой взгляд это и есть истинный путь, но многие могут со мной поспорить. Когда-нибудь оно будет мэйн-стримом, и если сейчас начать изучать этот подход, то в будущем будешь первым. Вот здесь сайт по автоматам:, там много материалов по этому вопросу:http://is.ifmo.ru и здесь(хотя этот сайт немного поломался):http://www.softcraft.ru/auto/
1
|
12.04.2017, 16:49 | |
Помогаю со студенческими работами здесь
10
Правильная организация кода в проекте Может ли грамотное проектирование и хороший стиль кода компенсировать бедность языка? Правильная организация кода программы C++ Coocox Организация программа(написание красивого кода) Организация тестирования программного кода для МК Организация задержки выполнения кода конструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |