2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 11:20 
Аватара пользователя


30/05/09
121
Киев
Всем привет! Очень банальный вопрос: так что же такое компонент (для C++ Builder/Delphi)? Народ пишет по-разному:
1. Компонент - это строительные блоки для приложений. (Telles - Borland C++ Builder 1998)
2. Компонент — в программировании, множество языковых конструкций (например, классов в ООП языках), объединенных по общему признаку. (Википедия)
В многих учебниках и статьях вообще не приводится никакого определения (в минуту жизни трудной Фихтенгольц успокаивает, в частности). Хотелось бы выяснить или сформулировать определение для этого термина. Что-то на подобии того, как:
Класс - это пользовательский тип данных, представляющий собой совокупность других переменных, объектов и функций (методов), и в общем случае состоящий из трёх секций: private, protected, public. (Для С++ в классе по умолчанию перегружены 4 функции: конструктор, деструктор, конструктор копирования и оператор присваивания).
Может кто знает какой нибудь словарь терминов по этому делу?

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 11:52 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Во-первых, два приведенных вами определения друг другу не противоречат, во-вторых, компонентами в Delphi применительно к VCL принято называть наследников класса TComponent.

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 12:04 
Аватара пользователя


30/05/09
121
Киев
Хочется более содержательного определения. Как вариант:
Компонент - это особый класс (наследник TComponent), включающий специальный интерфейс для чтения и записи свойств и обработчики событий.

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 12:50 
Заслуженный участник


27/04/09
28128
Он может просто наследовать TComponent и всё. Посмотрите, например, на TXPManifest (в Delphi 7 был, дальше не помню). У него вообще нет ни свойств, ни методов, ни событий (и даже полей нет!). Он используется, чтобы приписать в uses модуль XPMan, в котором определён, автоматически (можно и руками; в этом модуле подключается xpmanifest.res, говорящий потом системе, запускающей программу, что надо использовать новый стиль отображения элементов управления, а не «квадратный»).

Для каждого такого класса можно зарегистрировать кнопочку на панели компонентов.

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

Alhimik в сообщении #799586 писал(а):
включающий специальный интерфейс для чтения и записи свойств и обработчики событий
«Специальный интерфейс» ещё сильнее мутит воду. Вам что, так точно понятнее? Обычно в каждом ООП-языке есть только один «специальный интерфейс» для чтения и записи свойств, а не несколько разных — зачем тогда это дополнение?

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 14:23 


24/05/09

2054
Компонент - это такая штуковина, которую можно бесплатно юзать в своих программах, и - что важно - какой-то неизвестный программист написал её до тебя и для тебя.

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 15:16 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Alhimik в сообщении #799586 писал(а):
Хочется более содержательного определения. Как вариант:
Компонент - это особый класс (наследник TComponent), включающий специальный интерфейс для чтения и записи свойств и обработчики событий.
Извините, но другого определения у меня для вас нет.
Слово "компонент" может иметь много разных оттенков смысла в зависимости от области, в которой оно применяется. Но если мы говорим о библиотеке VCL Delphi, то там компонентом называется любой класс, являющийся наследником класса TComponent, независимо от длины цепочки наследования. Это необходимое и достаточное условие.

Хотя, пожалуй, стоит сделать уточнение. Обычное значение слова "компонент" при этом никуда не исчезает, и компонентом приложения вы можете назвать абсолютно любую его часть в соответствии с любым другим определением слова "компонент". В этом случае, если нужно сделать акцент на том, что вы говорите именно о компоненте Delphi, используйте термин "компонент VCL".

-- 12.12.2013, 16:23 --

Alhimik в сообщении #799586 писал(а):
включающий специальный интерфейс для чтения и записи свойств и обработчики событий.
Применительно к языку программирования Delphi, эта фраза вообще бессмысленна, потому что свойства в Delphi сами по себе являются "специальным интерфейсом" для "чтения и записи" внутреннего состояния объекта, а обработчики событий - это просто свойства определенного типа, не более того. Свойства любого типа могут быть у абсолютно любого класса.

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 15:28 
Аватара пользователя


30/05/09
121
Киев
arseniiv в сообщении #799613 писал(а):
Он может просто наследовать TComponent и всё. Посмотрите, например, на TXPManifest (в Delphi 7 был, дальше не помню). У него вообще нет ни свойств, ни методов, ни событий (и даже полей нет!).

Не у каждого класса заполнена секция protected. Но, в общем случае, она же есть.
Со "специальным интерфейсом" согласен, увлекся. Под ним имел в виду задание специальных методов для чтения и записи свойств:
Используется синтаксис C++
class PACKAGE TEditW : public TEdit
{
   private:
      int m_value;
//...  
   __published:
      __property bool Value = {read=m_value, write = SetValue, default=0}
//...

};
 

Итого,
Компонент VCL - это класс потомок от TComponent, в общем случае содержащий свойства с интерфейсом для их чтения, записи, значение по умолчанию и обработчики событий.
Какие-нибудь еще возражения?

 Профиль  
                  
 
 Re: C++ Builder/Delphi Компонент. Определение
Сообщение12.12.2013, 15:54 
Заслуженный участник


27/04/09
28128
Всё-таки «потомка от TComponent» достаточно.

Про __published, __property и другие сходные __-ключевые слова: в Delphi это обычные ключевые слова, хорошо вписывающиеся в язык. Просто «стандартный» C++ во время написания (не знаю, что там с новыми стандартами) Borland своих «VCL-совместимых» компиляторов C++ не поддерживал у объектов свойства и события, потому в Borland расширили язык, но так, чтобы это не сильно портило существующий код, где могли попадаться идентификаторы типа property. Создавать же идентификаторы, начинающиеся с __, не поощряется, потому нововведённые ключевые слова сделали именно такого вида, и в C++-коде они выглядят «специальными», хотя для понимающего их компилятора они никакие не специальные (а другой если и скомпилирует код с ними, то совершенно неправильно).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group