![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Retamon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.9.2013 Репутация: нет Всего: нет |
Нужно написать программу, помогите выбрать для нее структуру данных.
Даны материалы, зависящие от других. Например Комп - это Системник + Монитор, а например Системник в свою очередь - Мать + Память и т.д.... В каком формате хранить, и как обрабатывать? Чтобы например выбрать в списке комп, и оно выдало весь список составляющих, все глубже и глубже по уровням? Я начинающий программист, но не тупой вроде Поэтому, если знаете какой точно здесь нужен формат данных, просто тыкните его, и книжку или ссылку, куда что читать. Разжевывать не надо, сразу посылать РТФМ - тоже. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
может вы все же имеете в виду декомпозицию системы? Тогда это лаба в чистом виде же, а для лаб у нас целый раздел имеется...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| jsharp36 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
Совсем начинающий, судя с вопроса ) C# - объектно-ориентированный язык, поэтому классы - родной формат. Там есть типы, вроде Tuple<>, но это уже не совсем хорошие типы, а удобные только для использования "на коротких дистанциях", чтобы не писать класс. К свойствам Tuple обращаться неудобно, т.к. нет читаемости, не ясно, что такое Item1, Item2 и т.д. Класс SystemBlock содержит два свойства MotherBoard и Memory. Тип их определяет то, что имелось ввиду под "и т.д.". Если дальше ничего, то возможно, достаточно string. Далее, класс Computer содержит два свойства: SystemBlock (типа SystemBlock, можете назвать как-то разными синонимами, чтобы отличать класс и свойство. Это ссылка на объект класса "Системник") и свойство Monitor, тоже если дальше глубины нет, то string.
Сами ответили, что это список, т.е. скорее List<> или какой-то наследник листа. Выбирать что угодно, например, количество компьютеров с мониторами Sumsung - Linq. Для разворачивания не требуется. Такое моделирование с помощью классов - самое верное и правильное с т.з. моделирования предметной области и статической типизации. Но может быть неудобным с т.з. именно этой задачи. На каждом уровне, например, нужен свой код, чтобы двигаться вглубь и количество уровней строго задано в коде. Тогда просто посмотрите, как создаются структуры "дерево". В общем, надо класс Node (узел), и чтобы он мог содержать другие узлы. Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||
|
|||||
| dzaraev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: 1 Всего: 1 |
Если "ткнуть книжкуссылку", то вот довольно известный труд Буча: http://rutracker.org/forum/viewtopic.php?t=3343958 Также вам поможет гугель по запросу "объектно-ориентированный анализ". В общем вы затронули истинно-инженерскую тему - создание модели окружающего мира
Ну и конечно же изучайте паттерны проектирования, начать можно с тех же GoF - http://ru.wikipedia.org/wiki/Design_Patterns . Про мониторы - накидал небольшой пример: есть общая абстракция над компонентами и есть конкретные компоненты. Можно выполнять обобщенные операции, а после приведения типа из абстрактного компонента к конкретному - можно работать с конкретным. Компьютер можно также представить как составной компонент (например DesktopStation:ComputerComponentBase). Можно реализовать поднобное не через интерфейсы, а например через дженерики. Ну там уже сами фантазируйте как вам удобней )
Это сообщение отредактировал(а) dzaraev - 25.9.2013, 07:41 --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
| Retamon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.9.2013 Репутация: нет Всего: нет |
Всем спасибо за советы. Но что-то вы не то мне советуете.
Мне нужно хранить данные, а вы предлагаете классами мне зашить их намертво в код. Каждый раз если что-то добавилось - дописывать код? Нашел вроде http://www.artfulsoftware.com/mysqlbook/sa...sqled1ch20.html Придется создать БД и забить всю иерахию. Это сообщение отредактировал(а) Retamon - 25.9.2013, 11:52 |
|||
|
||||
| dzaraev |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: 1 Всего: 1 |
Каков вопрос - таков ответ
Структура данных может быть описана и в коде, и абстрактно и черт знает как еще. Ваш вопрос должен был быть таким: "как строить реляционную модель данных, когда данные представляют иерархию" или как-то так. И кстати вам всё равно придётся
если не классами, так запросами (string или linq) т.к. на уровне кода вам также потреуется модель данных и если изменится реляционная схема - изменится и объектная модель (хоть и не в 100% случаев). --------------------
Если вопрос решён - помечайте тему. |
||||||
|
|||||||
| k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Вопрос, кстати, достаточно нормальный, хотя немного двусмысленный. В любом случае, при чем тут ООАиП, классы и паттерны — не понятно.
Двусвязный граф (bidirectional graph). Для начала: http://en.wikibooks.org/wiki/Data_Structures/Graphs Пример реализации: http://quickgraph.codeplex.com/SourceContr...ctionalGraph.cs умеет также сериализацию, т.е. можно просто сохранять в файл при завершении работы программы, например. Однако, если предполагается, что в будущем БД комплектующих разрастется, то, конечно, стоит задуматься об использовании СУБД. ИМХО, лучше всего тут подойдут http://en.wikipedia.org/wiki/Graph_database нежели реляционные СУБД. -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |