![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||||||
|
||||||||
![]() Здравствуйте уважаемые форумчане столкнулся с проблемой. Учусь в ВУзе. Дали вот такое задание:
Задача «Организация основной памяти» * информационные объекты: страницы оперативной памяти (свойства – НомерСтраницы, Состояние) * страницы объединяются в рамках объекта Сегмент (свойство – РазмерСегмента) * сегменты объединяются в рамках объекта-контейнера ОсновнаяПамять (свойство – тип ОС). Я описал классы, вот что получилось: Код:
Код:
Код:
Код:
2.Класс TSegment: поле FFirst имеет неправильный тип 3.Класс TSomeMemory: массив имеет неправильный тип первые 2 вродебы исправил, а с массивом проблемы. Подскажите пожалуйста. Спасибо. Последний раз редактировалось Deman1986, 03.11.2013 в 18:51. |
#2
|
|||
|
|||
![]() Я бы вообще не массив использовал, а TObjectList. А тип у него д.б. TSegment.
|
#3
|
|||
|
|||
![]() Спасибо за ответ. Подскажите пожалуйста как описать правильно TObjectList. Просто я запутался уже, кучу литературы перечитал, а толку нет.
Последний раз редактировалось Deman1986, 03.11.2013 в 19:16. |
#4
|
|||
|
|||
![]() Цитата:
Ну, посмотри в справке в каком он юните описан, я не помню на вскидку, сам каждый раз смотрю ![]() Использовать как и любой другой список (TList и т.д.) за исключением того, что если TObjectList является "владельцем" объектов в списке, то он сам вызывает деструктор при удалении объекта из списка. В остальном - все тоже самое, что и с любым списком. У тебя и так работа со списком сегментов "спрятана" внутри классов, соотв. тебе надо будет переписать только саму работу с массива на список. Да, и еще. По мне, так у тебя как минимум один лишний класс. Я бы сделал так: Код:
Собственно, дальше, в зависимости от задачи, делаем методы инициализации. Последний раз редактировалось lmikle, 03.11.2013 в 20:22. |
#5
|
|||
|
|||
![]() Спасибо большое за помощь, я с вами согласен, что лишний класс. Просто я еще обучаюсь Дельфи, раньше програмировал на Паскале.
|
#6
|
|||
|
|||
![]() Вот получилось как то так))
Код:
|
#7
|
|||
|
|||
![]() Цитата:
Мне все-таки кажется, что наследоваться от TObjectList не стоит. Просто в таком случае хорошим тоном считается перекрытие всех методов родительского класса на работу со своими типами, что тебе явно не нужно (учиться кодировать "чисто" надо сразу, переучиваться потом гораздо сложнее). Просто напиши обертки только к тем методам, которые тебе нужны, а сам список спряч внутри класса (как я тебе и показал). Кстати, если у тебя Дельфя одна из последних, то тогда можно сделать с помощью дженериков. В этом случае действительно компилятор за тебя сделает всю работу и можно использовать "наследование" (в кавычках, т.к. в случае использования дженериков это не совсем наследование, а инстанциация по типу). |
#8
|
|||
|
|||
![]() отправил преподавателю, он написал следующее:
1.Замечание 1 НЕ исправлено! 2.Замечание 2 исправлено НЕ правильно! 3.Замечание 3 исправлено НЕ правильно: куда исчез массив и все необходимые методы? помогите исправить пожалуйста. Просто преподаватель настаивает на массиве. Спасибо за помощь Последний раз редактировалось Deman1986, 07.11.2013 в 21:58. |
#9
|
|||
|
|||
![]() Цитата:
Ну и сделай, как он хочет. Заодно можешь передать ему от меня, что он дурак и программировать не умеет, ну или не умеет грамотно ставить задачу. 1. Переименуй класс в TPage или TMemoryPage 2. Тип д.б. как раз TPage(TMemoryPage). 3. а) Убираешь TElement, он не нужен. б) В TSegment делаешь массив для страниц памяти, кол-во, видимо, надо задавать в конструкторе, собственно, это размер сегмента. в) В TSomeMemory тоже делаешь массив для сегментов. Вроде так. |
#10
|
|||
|
|||
![]() А набросать можете у меня с массивами туговато))
|
#11
|
|||
|
|||
![]() Я подумал и вот что получилось:
Код:
Последний раз редактировалось Deman1986, 11.11.2013 в 20:37. |
#12
|
|||
|
|||
![]() Как я понимаю, связанный список тут не нужен.
Тогда сегмент будет примерно так: Код:
Это вариант с пресозданием страниц. Можно сделать вариант с выделением памяти при первом обращении. Еще можно сделать в таком случае сборщик памяти, когда занятые куски собираются в начало сегмента. Вообще, там много можно чего сделать. Фактически, можно написать свой небольшой менеджер памяти. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Deman1986 (12.11.2013)
|
#13
|
|||
|
|||
![]() Спасибо Вам большое. Вы настоящий человек. Буду думать над последним классом TSomeMemory.
|
#14
|
|||
|
|||
![]() Вот описал я класс TRam (массив для сегментов):
Код:
|
#15
|
||||
|
||||
![]() Цитата:
Почему конструктор и деструктор в приватной секции? Идентификатор WinVers как вообще попал сюда в объявление класса? В объявлении метода SetCount в конце двоеточие вместо точки с запятой. |