| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Обязательно. Компонента всегда наследник 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) |
| Автор: Romikgy 23.2.2006, 12:15 |
| А это наследник Tobject |
| Автор: z-END 23.2.2006, 12:15 |
| Ты точно в словах не путаешься? Компонент это TComponent а контрол это TControl ? |
| Автор: Snowy 23.2.2006, 12:26 |
| z-END, конечно путаю. Зачем спрашиваешь Не TControl, а TComponent. Но суть та же. |
| Автор: Демо 23.2.2006, 13:11 |
| 1. Давайте называть правильно - компонент. И никак иначе. 2. Если имеется ввиду объект - экземпляр класса Object Pascal, то он никакого отношения к компонентам не имеет. Объект - экземпляр класса. Практически не зависит от среды и языка программирования. Компонент - элемент среды программирования. Зависит как от языка, так и от среды программирования (в данном случае - Delphi). |
| Автор: remax 23.2.2006, 14:08 | ||||
Это что-то новенькое! Хотел бы я посмотреть, как "практически не зависимый от среды и языка программирования" экземпляр класса, например TButton1 из Delphi будет функционировать в среде VC!
Вообще-то, вся иерархия компонент Delphi есть ни что иное, как классы Object Pascal. И, следовательно, здесь очевидная взаимосвязь Но этот как раз тот случай, когдп перемена мест слов играет роль: Утверждение - Любой компонент является объектом. Верно Утверждение - Любой объект является компонентом. Не верно P.S. Что тут еще непонятного? |
| Автор: SoWa 23.2.2006, 14:35 |
| Нет. Грамотно- компонента. Конечно, любой компонент наследник класса TComponent. |
| Автор: Fin 23.2.2006, 16:39 |
| У нас наверно чуть разная точка зрения на понятия. IMHO Компонент никак не зависит от языка программирования. Это набор процедур, функций, сообшений, данных. Которые работают все вместе в совокупности для решения каких либо целей. Например компонента работы с XML. Компонента может быть выполнена, как и в стиле структурного программирования, так и ввиде объекта (класса), так и в виде совокупности классов (объектов). В этом коренное различие от одного единственного объекта (класса). Компонента для внешнего пользователя выступает черным яшиком. Программист который ее использует, знает только интерфейс компоненты. и все. Почему в дельфи начинают делать все компоненты с класса TComponent? Я думаю, потому что в этом классе решены некоторые рутинные вопросы. И с него удобно стартовать. Но это не значит, что в других языках, обязательная стартовая точка должна быть именно с этого класса. |
| Автор: SoWa 23.2.2006, 19:14 |
| Ляпнул! Это ActiveX-компоненты не зависят от компилятора! |
| Автор: Radio 23.2.2006, 19:29 | ||
remax,
Так вот мне интересно, какой объект является компонентой, то есть что его отличает от других объектов, что его уже можно назвать компонент? |
| Автор: Snowy 23.2.2006, 19:55 |
| Экземпляр класса - наследника TComponent. Ну или любого класса пронаследованного от TComponent. |
| Автор: Radio 23.2.2006, 20:17 |
| И это что все различия что ли. Ну ладно, а функционально, где выгоднее применять компоненты. Ведь их не просто так обособили - компоненты- а потому что они могут решать ряд каких-то сходих задач - так вот каких именно? |
| Автор: 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 |
| Сказал - как отрезал. Спасибо. |
| Автор: Fin 23.2.2006, 23:34 | ||
Этим я хотел сказать, что нельзя привязывать понятие "компонента" к какому либо языку программирования и к технологии в частности. Ибо компоненту можно написать и на языке Brainfuck http://ru.wikipedia.org/wiki/Brainfuck при этом суть слова не изменится. |