Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Component=Object или нет?


Автор: Radio 22.2.2006, 22:02
А чем отличается обьект от компоненты?

Автор: Foley 22.2.2006, 22:25
Ну если подумать, что Объекто Ориентированное Программирование, это программирование при помощи объектов, то наверно да...(ведь компоненты являються объектами...)
Хотя фиг знает...

Автор: Snowy 22.2.2006, 22:39
Сомпонента это класс.
Компонента, брошенная на форму есть экземпляр класса, наследника TControl.
То есть компонента не является объектом, пока она не создана при помощи конструктора или не брошена на форму. Иначе она есть объект.

Автор: Fin 22.2.2006, 22:58
Компонента не обязательно может быть объектом. Если скажем она написано стилем структурного программирования. Конечно стараются сделать компоненту в ООП. Как наиболее доминируюший стиль программирования. VCL самой дельфи построена на ООП. И компоненты в Дельфи являются объектами.
Когда бросается компонента на форму, Оболочка Дельфи автоматически создает код для создания экземпляра данного объекта.

Автор: Snowy 22.2.2006, 23:13
Цитата(Fin @ 22.2.2006, 22:58 Найти цитируемый пост)
Компонента не обязательно может быть объектом.

Обязательно.
Компонента всегда наследник TControl.
Никак по другому она написана быть не может.

Автор: Fin 22.2.2006, 23:27
Snowy, Я писал компоненту на чистом WinAPI. Когда разбирался с ней (WinAPI). И писал в стиле структурного программирования. Да и первые компоненты самой винды написаны в структурном стиле.

Автор: remax 23.2.2006, 03:28
Наверное проблема в терминологии...

1) Не вызывает сомнения, что для того чтобы поместить компоненту в палитру компонентов он должен быть наследником класса TComponent или от любого другого класса- наследника TComponent. Любые инсинуации на эту тему - бессмысленны.

2) Методы любого объекта - это процедуры. Которые, безусловно могут быть написаны в стиле структурного программирования. Мало этого, может быть большое количество локальных процедур - не имеющих соостветствия в методах объекта. Кроме того, Delphi поддерживает использование ассемблерного кода, что в общем случае даже не является структурным программированием.

3) Целый ряд компонент Delphi родными для него не являются. Это, например, ActiveX портированные из C++. В Delphi реализована только обвязка для взаимодействия с ним.


Не забираясь дальше в дебри тонкостей программирования на делфи, можно сделать следующие выводы:
1) Любой компонент является объектом (или классом объекта, в терминологии Delphi)
2) ООП не исключает других техник программирования, таких как например структурное программирование

Fin! Использование "чистого" WinAPI само по себе тоже не противоречит принципам ООП. Мало этого, совсем не обязательно использовать Windows вообще, чтобы реализовывать ООП! (Например, Kylix под Linux)
smile

Автор: Snowy 23.2.2006, 11:48
Fin, у тебя неверное представление о понятии "компонент".
Компонент Delphi это всегда наследник TControl. И никак иначе.
Можешь реализовать его как угодно, но он все рабно должен быть классом, пронаследованным от TControl или любого его потомка.
Например,сама по себе кнопка Windows не является компонентом.
А вот TButton уже компонент.

Цитата(Fin @ 22.2.2006, 23:27 Найти цитируемый пост)
Я писал компоненту на чистом WinAPI. Когда разбирался с ней (WinAPI). И писал в стиле структурного программирования. Да и первые компоненты самой винды написаны в структурном стиле.
Мы говорим о компонентах, а не о элементахуправления User Interface. Это разные понятия.

Автор: Romikgy 23.2.2006, 12:15
Цитата(Snowy @ 23.2.2006, 10:48 Найти цитируемый пост)
Компонент Delphi это всегда наследник TControl.

А
Цитата(Snowy @ 23.2.2006, 10:48 Найти цитируемый пост)
TControl

это наследник Tobject smile

Автор: z-END 23.2.2006, 12:15
Цитата(Snowy @ 23.2.2006, 11:48 Найти цитируемый пост)
Компонент Delphi это всегда наследник TControl. И никак иначе

Ты точно в словах не путаешься?
Компонент это TComponent а контрол это TControl ?

Автор: Snowy 23.2.2006, 12:26
z-END, конечно путаю. Зачем спрашиваешь smile
Не TControl, а TComponent.
Но суть та же.

Автор: Демо 23.2.2006, 13:11
1. Давайте называть правильно - компонент. И никак иначе.
2. Если имеется ввиду объект - экземпляр класса Object Pascal, то он никакого отношения к компонентам не имеет.

Объект - экземпляр класса. Практически не зависит от среды и языка программирования.
Компонент - элемент среды программирования. Зависит как от языка, так и от среды программирования (в данном случае - Delphi).

Автор: remax 23.2.2006, 14:08
Цитата(Демо @ 23.2.2006, 10:11)
Объект - экземпляр класса. Практически не зависит от среды и языка программирования.

Это что-то новенькое! Хотел бы я посмотреть, как "практически не зависимый от среды и языка программирования" экземпляр класса, например TButton1 из Delphi будет функционировать в среде VC! smile


Цитата(Демо @ 23.2.2006, 10:11)
Если имеется ввиду объект - экземпляр класса Object Pascal, то он никакого отношения к компонентам не имеет.

Вообще-то, вся иерархия компонент Delphi есть ни что иное, как классы Object Pascal. И, следовательно, здесь очевидная взаимосвязь smile

Но этот как раз тот случай, когдп перемена мест слов играет роль:

Утверждение - Любой компонент является объектом. Верно
Утверждение - Любой объект является компонентом. Не верно

P.S. Что тут еще непонятного?

Автор: SoWa 23.2.2006, 14:35
Цитата(Демо @ 23.2.2006, 13:11 Найти цитируемый пост)
1. Давайте называть правильно - компонент. И никак иначе.

Нет. Грамотно- компонента.
Конечно, любой компонент наследник класса TComponent.

Автор: Fin 23.2.2006, 16:39
У нас наверно чуть разная точка зрения на понятия.
IMHO Компонент никак не зависит от языка программирования. Это набор процедур, функций, сообшений, данных. Которые работают все вместе в совокупности для решения каких либо целей. Например компонента работы с XML. Компонента может быть выполнена, как и в стиле структурного программирования, так и ввиде объекта (класса), так и в виде совокупности классов (объектов). В этом коренное различие от одного единственного объекта (класса). Компонента для внешнего пользователя выступает черным яшиком. Программист который ее использует, знает только интерфейс компоненты. и все.
Почему в дельфи начинают делать все компоненты с класса TComponent? Я думаю, потому что в этом классе решены некоторые рутинные вопросы. И с него удобно стартовать.
Но это не значит, что в других языках, обязательная стартовая точка должна быть именно с этого класса.

Автор: SoWa 23.2.2006, 19:14
Цитата(Fin @ 23.2.2006, 16:39 Найти цитируемый пост)
Компонент никак не зависит от языка программирования.

Ляпнул! Это ActiveX-компоненты не зависят от компилятора!

Автор: Radio 23.2.2006, 19:29
remax,
Цитата

Утверждение - Любой объект является компонентом. Не верно

Так вот мне интересно, какой объект является компонентой, то есть что его отличает от других объектов, что его уже можно назвать компонент?

Автор: Snowy 23.2.2006, 19:55
Цитата(Radio @ 23.2.2006, 19:29 Найти цитируемый пост)
какой объект является компонентой
Экземпляр класса - наследника TComponent. Ну или любого класса пронаследованного от TComponent.

Автор: Radio 23.2.2006, 20:17
И это что все различия что ли. Ну ладно, а функционально, где выгоднее применять компоненты. Ведь их не просто так обособили - компоненты- а потому что они могут решать ряд каких-то сходих задач - так вот каких именно? smile

Автор: Snowy 23.2.2006, 21:11
Компонент - A reusable object or program that performs a specific function and is designed to work with other components and applications.

Автор: Radio 23.2.2006, 22:02
Сказал - как отрезал. smile
Спасибо.

Автор: Fin 23.2.2006, 23:34
Цитата(SoWa @ 23.2.2006, 18:14 Найти цитируемый пост)
Цитата(Fin @ 23.2.2006, 16:39 Найти цитируемый пост)
Компонент никак не зависит от языка программирования.

Ляпнул! Это ActiveX-компоненты не зависят от компилятора!

Этим я хотел сказать, что нельзя привязывать понятие "компонента" к какому либо языку программирования и к технологии в частности. Ибо компоненту можно написать и на языке Brainfuck http://ru.wikipedia.org/wiki/Brainfuck при этом суть слова не изменится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)