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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2010, 00:54   #1
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
Вопрос Методы доступа к свойствам

Привет всем!

У меня было задание - обьектная реал-ция массива из динам-ких очредей
Собственно я его выполнила, но препод сказал, чтоб переделала описание классов, используя методы доступа к закрытым свойствам.

Первые два класса я смогла сделать, а вот с последним классом-контейнром - проблема.
Подскажите пожалуйста - как правильно сделать доступ к свойству-массиву? как реализовать эти методы дступа?

вот то что я сделала:

Код:
TYPE

{класс ЭЛЕМЕНТ очереди}
 TQueueItem = class
  private // закрытые свойства

    FData: integer; // наши данные
    FNext: TQueueItem; // указатель на следующий элемент
    procedure SetData (Value: integer); 
    procedure SetNext (Next: TQueueItem); 

  public // открытые методы класса

    property Data: integer read FData write SetData; // доступ к свойствам
    property Next: TQueueItem read FNext write SetNext;
       constructor Create (value: integer); // инициализация элемента очереди
  end;



{класс ОЧЕРЕДЬ}
  TQueue = class
  private

    FMarker: integer; // метка очереди -> для ее поиска
    FFirst, FLast: TQueueItem; // указатели начала и конца очереди
    procedure SetMarker (Mark: integer);
    procedure SetFirst (First: TQueueItem);
    procedure SetLast (Last: TQueueItem);


  public

    property Marker: integer read FMarker write SetMarker;
    property First: TQueueItem read FFirst  write SetFirst;
    property Last: TQueueItem read FLast  write SetLast;
      constructor Create; // инициализация очереди
      //...
  end;



{Класс КОНТЕЙНЕР}
  TCont = class
  private

    FMas: array of TQueue; // динамический массив указателей
    FOutput: TMemo; // ссылка на Memo
    function GetMas(Index: Integer): TQueue;
    procedure SetMas(Index: integer);

  public

   property Mas [index: integer]:TQueue read GetMas write SetMas; //??????????????
   property Output : Tmemo read FOutput;
     Constructor Create(var M: TMemo); // инициализация массива
     //...
  end;

//---реализация методов доступа

{класс TQueueItem********************************}

procedure TqueueItem.SetData (Value: integer);
begin
  FData := Value;
end;

procedure TqueueItem.SetNext (Next: TQueueItem);
begin
  FNext := Next;
end;

{инициализация элемента}
constructor TQueueItem.Create(value: integer);
begin
  Data := value;
  next := nil;
end;

{класс TQueue***********************************}

procedure TQueue.SetMarker (Mark: integer);
begin
  FMarker := Mark;
end;

procedure Tqueue.SetFirst (First: TQueueItem);
begin
  FFirst := First;
end;

procedure Tqueue.SetLast (Last: TQueueItem);
begin
  FLast := Last;
end;

{инициализация очереди}
Constructor TQueue.Create;// создаем пустую очередь
begin
  first := nil;
  last := nil;
end;

{класс TCont***************************************}

function TCont.GetMas(Index: Integer): TQueue;
begin
  Result := Mas[Index];
end;

procedure TCont.SetMas(Index: integer);
begin
  FMas[Index] := Mas; //????????
end;


{инициализация массива}
constructor TCont.Create(var M: TMemo);
begin
  SetLength(Mas,0);
  Output := M;//ссылку на поле MEMO
end;

Последний раз редактировалось diliana; 07.02.2010 в 01:46.
diliana вне форума Ответить с цитированием
Старый 08.02.2010, 12:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
diliana
Солнышко, обычно в полночь спят люди, а не монитор глазами протирают )

Вот смотри. Твоя главная ошибка что ты не доверяешь Делфи дописывать за тебя, потому допустила стратегическую ошибку.
Обычно лентяи вроде меня если пишут поле, стучащее в массив, обьявленный в Private начинают так:
Код:
property Mas [index: integer]:TQueue
Далее нажимают CTRL+SHIFT+C и Делфи любезно дописывает все остальное за лентяев, аккуратно и главное правильно.
Получается такое:
Код:
  TCont = class
  private

    FMas: array of TQueue; // динамический массив указателей
    FOutput: TMemo;
    function GetMas(index: integer): TQueue;
    procedure SetMas(index: integer; const Value: TQueue); // ссылка на Memo
  public

   property Mas [index: integer]:TQueue read GetMas write SetMas;
   property Output : Tmemo read FOutput;
     Constructor Create(var M: TMemo); // инициализация массива
  end;
{ TQueueItem }
А у тебя ну прям невооруженной пяткой слышно что ты руками все писала, мучилась.
Не надо так, написала главное, CTRL+SHIFT+C - и пусть Делфи сама все доделает за тебя.

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

Код:
function TCont.GetMas(index: integer): TQueue;
begin
 if (i>=Low(FMas))and(i<=High(FMas)) then Result:=FMas[i] else Result:=nil;
end;

procedure TCont.SetMas(index: integer; const Value: TQueue);
begin
 if (i>=Low(FMas))and(i<=High(FMas)) then FMas[i]:=Value
  else begin
{ Иногда нужно чтоб свойство умело само расставлять правильно 
значения в массив, даже если нет места досоздать его до нужного размера. 
Это не всегда оптимально, но иногда полезно, впрочем эту часть кода можешь не писать
}
   SetLEngth(FMas,i+1);
    FMas[i]:=Value
  end;
end;
Все. А в программе просто проверяешь на nil то что вернет это свойство, и будет тебе счастье
I'm learning to live...

Последний раз редактировалось Stilet; 08.02.2010 в 12:19.
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 13:30   #3
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Привет Stilet!

Цитата:
А у тебя ну прям невооруженной пяткой слышно что ты руками все писала, мучилась.
Не надо так, написала главное, CTRL+SHIFT+C - и пусть Делфи сама все доделает за тебя.
действительно я сама все писала-мучилась.
я же не знала, что есть такая суперштучка!
в общем удалила то, что сама написала, и с помощью этого приема заново свойства переделала

Спасибо большое-пребольшое за подсказку и за код!
diliana вне форума Ответить с цитированием
Старый 08.02.2010, 14:01   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Всегда, пожалуйста )
Доверяй Делфи,она "вдруг тебя не бросит, лишнего не спросит".
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 14:03   #5
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

оффтоп:
такой метод программирования, в скором будущем, к добру не приведет
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 08.02.2010, 14:06   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
к добру не приведет
Почему не приведет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 14:13   #7
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Да потому, что народ отупеет... зачем писать и думать самому, когда делфи все само вставит и напишет, надо только кнопоньки нажать
©Учиться, учиться и еще раз учиться!
quit вне форума Ответить с цитированием
Старый 08.02.2010, 14:19   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от quit Посмотреть сообщение
Да потому, что народ отупеет... зачем писать и думать самому, когда делфи все само вставит и напишет, надо только кнопоньки нажать
Да не вжизнь просто это время будет использовано на другие нужды .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.02.2010, 14:56   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надо только кнопоньки нажать
Это существенно сокращает время, и никак не мешает стратегии.
Тоже самое что сказать "Откажитесь от GUI - вернитесь в ДОС".
Ты как хочешь, а мне уже такое не понравится, я лучше доверюсь умным программам, сокращающим мне время и исправляющим мои ошибки.
Впрочем это уже флуд...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы сортировки. Teddy Помощь студентам 1 16.10.2008 19:08
Методы... Arkuz Свободное общение 6 11.10.2008 16:53
Программное обращение к свойствам файлов и их изменение lemonhead Общие вопросы Delphi 1 24.07.2008 10:20
Как получить доступ к свойствам и методам запущеного браузера? loma Общие вопросы .NET 0 08.07.2008 05:23
Вопрос по свойствам папки ЧИЖ Общие вопросы Delphi 1 25.02.2007 01:16