Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.11.2013, 17:59
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Описание классов в Delphi

Здравствуйте уважаемые форумчане столкнулся с проблемой. Учусь в ВУзе. Дали вот такое задание:
Задача «Организация основной памяти»
* информационные объекты: страницы оперативной памяти (свойства – НомерСтраницы, Состояние)
* страницы объединяются в рамках объекта Сегмент (свойство – РазмерСегмента)
* сегменты объединяются в рамках объекта-контейнера ОсновнаяПамять (свойство – тип ОС).
Я описал классы, вот что получилось:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
класс TMemory
type
    TMemory = class(TObject)
private
// поля
    FNumber: integer; // приватное поле
    FPriznak: Boolean; // приватное поле
    public
// Конструктор
Constructor Create (const Number: integer; Priznak: boolean);
// методы чтения и записи свойств
    function GetNumber: integer; // получаем номер
    procedure SetNumber (const Value: integer); // задаём номер
    function GetPriznak: boolean; // получаем состояние
    procedure SetPriznak (const Value: boolean); // задаём состояние
end;
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
класс TElement
type
TElement = class(TObject)
private
// поля
    FMemory: TMemory; // приватное поле
    FNext: TElement; // приватное поле, указатель на следующий элемент
    public
// конструкторы и деструкторы
    constructor Create (const Memory: TMemory);
    destructor Destroy; override;
// методы чтения и записи свойств
    function GetNext: TElement; // получаем следующий элемент стека
    procedure SetNext (const Value: TElement); // задаём следующий элемент стека
    function GetMemory: TMemory; // возвращаем значение поля FMemory
end;
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
класс TSegment
type
    TSegment = class(TObject)
private
// поля
    FFirst: byte; // приватное поле, вершинный элемент
    FNum: integer; // приватное поле, номер сегмента
    public
// конструкторы и деструкторы
    constructor Create (const Num: integer);
    destructor Destroy; override;
// методы чтения и записи свойств
    function GetFirst; TSegment; // получаем головной элемент
    function GetNum: integer; // получаем номер сегмента
    procedure SetNum (const Value: integer); // задаем номер сегмента
// методы
    procedure AddMemory (const Memory: TMemory); // добавляем элемент в стек
    function DelFirst: TElement; // удаляем вершинный элемент
    procedure Clear; // очищяем стек
end;
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
класс TSomeMemory
type
    TSomeMemory = class(TObject)
    Private
// поля
    FSome: array of  TMemory (динамический массив экземпляров класса TMemory)
    FCount: real (приватное поле, количество сегментов)
// конструкторы и деструкторы
    Constructor Create (initianCount)
    Destructor Destroy; override
// методы получения и установки значений свойств
    Function GetMemory (index: integer): TMemory (возвращаем объект класса TMemory)
    Function GetCount: integer (получаем количество сегментов)
// методы
    Function SegmentNO (No: integer):TSegment
    Function AddSL (No: integer): integer (добавляем в массив сегмент)
    Function DeleteSL (No: integeer): integer (удаляем из массива сегмент)
    Procedure SaveFile (const FileName: string) (сохраняем список в файле)
    Procedure LoadFile (const FileName: string) (загружаем список из файла)
    function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string
WinVers = 'Software\Microsoft\Windows\CurrentVersion' (читаем всё из реестра)
Преподаватель прокоментировал следующие ошибки: 1.Класс TMemory: название класса не соответствует его назначению
2.Класс TSegment: поле FFirst имеет неправильный тип
3.Класс TSomeMemory: массив имеет неправильный тип
первые 2 вродебы исправил, а с массивом проблемы. Подскажите пожалуйста. Спасибо.

Последний раз редактировалось Deman1986, 03.11.2013 в 18:51.
Ответить с цитированием
  #2  
Старый 03.11.2013, 19:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы вообще не массив использовал, а TObjectList. А тип у него д.б. TSegment.
Ответить с цитированием
  #3  
Старый 03.11.2013, 19:09
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за ответ. Подскажите пожалуйста как описать правильно TObjectList. Просто я запутался уже, кучу литературы перечитал, а толку нет.

Последний раз редактировалось Deman1986, 03.11.2013 в 19:16.
Ответить с цитированием
  #4  
Старый 03.11.2013, 20:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Deman1986
Спасибо за ответ. Подскажите пожалуйста как описать правильно TObjectList. Просто я запутался уже, кучу литературы перечитал, а толку нет.

Ну, посмотри в справке в каком он юните описан, я не помню на вскидку, сам каждый раз смотрю

Использовать как и любой другой список (TList и т.д.) за исключением того, что если TObjectList является "владельцем" объектов в списке, то он сам вызывает деструктор при удалении объекта из списка. В остальном - все тоже самое, что и с любым списком.

У тебя и так работа со списком сегментов "спрятана" внутри классов, соотв. тебе надо будет переписать только саму работу с массива на список.

Да, и еще.
По мне, так у тебя как минимум один лишний класс. Я бы сделал так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type
  TMemBlock = class
    // тут содержимое блока - занят или нет, базовый адрес и т.д.
  end;
 
  TSegemnt = class
  private
    FBlocks : TObjectList;
    // Ну и другие аттрибуты
  public
    property Blocks[Index : Integer] : TMemBlock read GetBlock; // Для прямого обращения к блоку по индексу
    ...
  end
 
  TRAM = class
  private
    FSegments : TObjectList;
  ...
  end;

Собственно, дальше, в зависимости от задачи, делаем методы инициализации.

Последний раз редактировалось lmikle, 03.11.2013 в 20:22.
Ответить с цитированием
  #5  
Старый 03.11.2013, 22:01
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо большое за помощь, я с вами согласен, что лишний класс. Просто я еще обучаюсь Дельфи, раньше програмировал на Паскале.
Ответить с цитированием
  #6  
Старый 03.11.2013, 23:10
Deman1986 Deman1986 вне форума
Прохожий
 
Регистрация: 03.11.2013
Сообщения: 32
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Вот получилось как то так))
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
класс TSomeMemory
type
    TSomeMemory = class(TObjectList)
    Private
// поля
    function GetItems (Index: integer): TSegment;
    procedure SetItems(Index: Integer; const Value: TSegment);
    public
    property Items[Index: Integer]: TSegment read GetItems write SetItems; default;
//чтение элементов списка будет происходить через метод GetItems,
//а запись - через SetItems
// методы
    function WinInfo(Root_Key: HKEY; Key_Open, Key_Read: string): string
WinVers = 'Software\Microsoft\Windows\CurrentVersion' // читаем всё из реестра
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025