Форум: Форум C++Разное
Новые темы: 00
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дескрипторы
 
 автор: alex19921992   (26.02.2007 в 15:47)   письмо автору
 
 

Что такое дескрипторы, объясните пожалуйста! Буду очень признателен, если объясните просто и понятно!

  Ответить  
 
 автор: oleg_alexeev   (26.02.2007 в 16:44)   письмо автору
 
   для: alex19921992   (26.02.2007 в 15:47)
 

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

Обычно дескрипторы реализуются в виде целых чисел или указателей.


HWND hadle = CreateWindow (...);  // создание окна
MoveWindow (hadle, ...);                     // перемещение окна
CloseWindow (hadle);                        // закрытие окна

  Ответить  
 
 автор: alex19921992   (26.02.2007 в 18:26)   письмо автору
 
   для: oleg_alexeev   (26.02.2007 в 16:44)
 

Хорошо, что такое идентификатор объекта и что за объекты вообще могут быть?

  Ответить  
 
 автор: oleg_alexeev   (26.02.2007 в 21:18)   письмо автору
 
   для: alex19921992   (26.02.2007 в 18:26)
 

Вопрос, как говорится, на засыпку ... =))

Объект - базовое понятие объектно-ориентированного программирования.
И, как все базовые понятия, не имеет точного определения. Можно давать только разные описания,
помогающие интуитивно почувствовать что это.

В конкретном же случае языков C/C++ объектом является экземпляр структуры/класса,
находящийся где-то в памяти (с этим определением вполне можно поспорить, уточнить,
расширить и т.п.).

пример:

struct Window
{
  int x, y;  // положение
  int w, h;  // размеры
  ...  // прочая лабуда
};

void * CreateWindow()
{
  Window *p = new Window;
  p->x = 0;
  p->y = 0;
  ...
  return p;
}

void CloseWindow(void *p)
{
  delete ((Window *)p);
}


Здесь структура Window - это описание структуры объекта (извиняюсь за тавтологию).

В функции CreateWindow в памяти создается экземпляр этой структуры и инициализируются
её поля, т.е. создается объект. Из функции возвращается указатель на объект. Этот указатель
может называться идентификатором объекта, поскольку он определяет (идентифицирует)
этот (и только этот) объект.

В функцию CloseWindow передается идентификатор объекта. Там он преобразуется в
указатель на объект и затем объект уничтожается.

Можно заметить, что вызывающему коду совершенно не нужно знать объявление структуры Window.
Ради этого и были придуманы дескрипторы - для сокрытия информации о внутреннем устройстве.
Так, разработчики операционной системы могут модернизировать свои окошки, не влияя на
существующий код приложений.

  Ответить  
 
 автор: cheops   (27.02.2007 в 12:27)   письмо автору
 
   для: alex19921992   (26.02.2007 в 15:47)
 

Изначально, это был номер. Открываете вы несколько файлов одновременно, и чтобы не путать их - каждому открытому файлу присваивается уникальный номер (дескриптор), по которому вы всегда однозначно можете обратиться к тому или иному файлу. Потом вместо чисел стали использоваться объекты.

В Windows очень много ресурсов - окна, кисти, палитры, файлы, изображения и т.п. поэтому требуется очень много дескрипторов, чтобы управлять этим хозяйством и не путаться в них.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования