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, Супермодераторы



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

Сейчас этот форум просматривают: Google [Bot]


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

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