Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Компонент и объект...   Найти похожие ветки 

 
\/iKTOR   (2007-08-09 18:32) [0]

Здравствуйте мастера.
Часто эти два понятия идут по соседству и обозначают одно и тоже, в объектно-ориентированном программировании чаще фигурирует объект, применительно к VCL Delphi, как следует из названия, это компоненты, но если их используют, он становятся объектами, вобщем может кто точно определить в чем у них разница.


 
Kolan ©   (2007-08-09 18:54) [1]

> Компонент и объект&#133

Объект — экземплярлюбого класса.

А Dlephi есть такой класс TComponent. Так вот экземпляры такого класса называют компонентами.

Таким образом Объект более общее понятие, а компонент более узкое оно обозначает объекты-экземпляры TComponent(или его потомков).

Короче Любой компонент — это объект, но не наоборот.

ЗЫ
Надеюсь вопрос я правильно понял&#133


 
\/iKTOR   (2007-08-09 19:03) [2]

Спасибо, только тогда получается, что TObject, стоящий выше в иерархии компонентов VCL на самом деле Обект? Помоему приставка T... определяет принадлежность к компонентам делфи...?
Я вообще представлял, что все классы именно делфи называются компонентами делфи, а уже после модификации стают просто бъектами создаваемого приложения.


 
Kolan ©   (2007-08-09 19:13) [3]


> только тогда получается, что

Тогда получается RTFM.
Научитесь различать объект и класс.

Я вообще представлял, что все классы именно делфи называются компонентами делфи, а уже после модификации стают просто бъектами создаваемого приложения.
Это назывется каша в голове. Прочтите любую книгу по ООП.


 
Kolan ©   (2007-08-09 19:16) [4]

Вот это будет в самый раз.

http://www.podgoretsky.com/ddp.html
Delphi 5. Руководство разработчика, том 1
Delphi 5. Руководство разработчика, том 2


 
\/iKTOR   (2007-08-10 10:14) [5]

>Это назывется каша в голове. Прочтите любую книгу по ООП.
Конечно каша, я же только учусь, а во всех книгах, что мне попадались эти понятия тесно переплетены и не имеют нигде объяснения в различии этих терминов.
Спасибо за ссылку, буду изучать, надеюсь хоть там есть точное описание этих понятий. Если там не изложено субъективное представление автора...


 
DevilDevil ©   (2007-08-10 10:27) [6]

путаются сразу три понития:

- object (проще говоря, record, который может иметь функиции, поля и свойства. Используется редко.)
- объект класса (экземпляр класса). Т.е. Label1 - это объект, экземпляр класса TLabel.
- класс (TObject)

имхо правильно называть:

- объект
- экземпляр класса
- класс.


 
MsGuns ©   (2007-08-10 10:29) [7]

>Kolan ©   (09.08.07 18:54) [1]
>Объект - экземплярлюбого класса.

Вовсе нет. Объект это более широкое понятие.
"Объектом" в общем случае является любая переменная, запись (record), указатель, файл, папка и т.д., участвующие в алгоритме обработки данных


 
DevilDevil ©   (2007-08-10 10:29) [8]

все классы и типы в Delphi принято называть с буквы "T".
компоненты - это необычные классы.
классы - это необычные типы.

:)


 
\/iKTOR   (2007-08-10 10:31) [9]

Спасибо.
Ну с эти как раз можно разобраться (хотя поначалу и сложно).
А вот что тогда компонент, чем он в это смысле отличается от объекта?


 
\/iKTOR   (2007-08-10 10:33) [10]

Можно ли вообще это как то четко сформулировать?


 
DevilDevil ©   (2007-08-10 10:43) [11]

Компонент - это специальный Delphi класс, свойства и события экземпляров которого могут быть изменены в IDE.


 
MsGuns ©   (2007-08-10 10:45) [12]

Компонент - это такая зверюка, которая обладает свойствами дельфишного компонента, в частности его можно "кидать" на форму ;)
При этом на форме окажется не сам компонент, а его ЭКЗЕМПЛЯР (экземпляр класса) - вот тогда он станет "объектом", т.е. с ним можно работать.

Объект же в общем случае может быть не привязан ни к какому компоненту (например переменная) и его нельзя "положить" на форму и, следовательно, увидеть

Можно сказать так:
Компонент - это некий код, реализующий определенный функционал
Объект - это область памяти, содержащия как сам код, так и сопутствующие ему байты с информацией, статической (не изменяемой при выполнении) или динамической (именяющейся при выполнении).
К простым объектам можно отнести переменные, указатели, записи, файлы и т.д., содержащие только код
К "сложным" объектам относятся те же ЭКЗЕМПЛЯРЫ классов (к которым в частности относятся все потомки TComponent), а также созданные самим программистом специальные блоки кода

Вообще, отностительно физической сущности процессора все, что участвует в работе приложения, можно отнести к объектом - ведь для него любая иформация в регистре, стеке или памяти служит ОБЪЕКТОМ. Для ОС объектами служат сообщения, порты, файлы и т.д.


 
MsGuns ©   (2007-08-10 10:48) [13]

Поправочка:
К простым объектам можно отнести переменные, указатели, записи, файлы и т.д., содержащие только ДАННЫЕ


 
DevilDevil ©   (2007-08-10 10:48) [14]

есть компонент TLabel.
Ты можешь создать экземпляр такого компонента (класса) в самой среде.
Этот экземпляр может называться Label1. А может и MySuperPuperLabel - как назовёшь. У каждого такого экземпляра можно менять свойства в самой среде разработки.

А есть типы, классы и свойства, которые нельзя изменить в среде разработки.


 
Сергей М. ©   (2007-08-10 10:48) [15]


> что тогда компонент, чем он в это смысле отличается от объекта?


Компонент, с т.з. иерархии VCL-классов, есть класс TComponent или любой порожденный на его основе класс.

Компонент, с т.з Делфи-объектов, есть любой экземпляр класса, порожденного от класса TComponent

Так или иначе, но с любой из этих т.з. понятие "Компонент" неразрывно связано с классом TComponent.


 
Юрий Зотов ©   (2007-08-10 10:52) [16]

Во наговорили....

> \/iKTOR   (10.08.07 10:33) [10]
> Можно ли вообще это как то четко сформулировать?

Компонент - это объект класса TComponent или его потомка. Все.

Прочее есть следствия.


 
\/iKTOR   (2007-08-10 10:52) [17]

Спасибо, вобщем тоже, что я писал в первом посте, только подробнее.


 
DevilDevil ©   (2007-08-10 10:55) [18]

ыыы... мнения разошлись :)


 
\/iKTOR   (2007-08-10 11:00) [19]

>Компонент - это объект класса TComponent или его потомка. Все.
Ну чтоже, похоже так считает большинство.
Я так подозреваю, что не зря говорится в руководстве для разработчиков классов визуальной библиотеки компонентов, что не приветствуется создание новых компонентов, потомков класса TObject без крайней необходимости, нужно делать их потомками класса TComponent.


 
MsGuns ©   (2007-08-10 11:01) [20]

>Юрий Зотов ©   (10.08.07 10:52) [16]
>Во наговорили....

Вопрос ставился не "Что такое компонент ?", а "Чем обличается компонент от объекта"
Вот и наговорили ;)


 
\/iKTOR   (2007-08-10 11:17) [21]

Резюме.
Вот мне тут RTFM, говорят...
Самое интересное то, что книги для начинающих опускают подробности связанные с формированием самой среды разработки.
А книги для профи, опускают подробности формулировок, подразумевая, что раз уж это кто читает, то основы ему вполне знакомы.
Поэтому получить полное представление что и почему, можно перелапатив кучу документов, где вскользь упоминается пересечение первопричин возникновения понятий, и особенности их практического применения.
Афтар поплелся обреченно RTFM....


 
Юрий Зотов ©   (2007-08-10 11:22) [22]

> \/iKTOR   (10.08.07 11:00) [19]

> Ну чтоже, похоже так считает большинство.

Это абсолютно неважно, кто что считает. У термина "компонент" есть четкое и однозначное определение - и оно именно такое. Независимо ни от каких большинств-меньшинств.

> в руководстве для разработчиков классов визуальной библиотеки
> компонентов

Интересно было бы почитать. Ссылочкой не поделитеь?


 
\/iKTOR   (2007-08-10 11:39) [23]

Ссылочку я приводил в другой теме, я преобразовал его в формат CHM но правок в начальный текст не делал
http://www.ssfiles.com/uploads/338de8129e.rar (416 килобайт).

Это первая выдержка -
Но разработчики компонентов не должны создавать свои компоненты непосредственно как производные (потомки) от класса TObject. Библиотека VCL предос­тавляет широкий выбор классов, производных от класса TObject, и разрабатываемые компоненты могут создаваться на их основе. Эти уже существующие классы обеспечивают большинство функциональных возможностей, необходи­мых для вновь создаваемых компонентов. Лишь при создании классов, не являющихся компонентами, имеет смысл делать их потомками класса TObject.

Далее по иерархии идет -
Класс TPersistent происходит непосредственно от класса TObject.
Особенностью класса TPersistent является то, что экземпляры происходящих от него объектов могут читать и записывать свои свойства в поток.
Поскольку все компоненты являются потомками класса TPersistent, то все они обладают этой способностью.
Класс TPersistent определяет не специальные свойства или события, а только некоторые методы, полезные как пользователям, так и разработчикам компонентов.

А за ним уже TComponent


 
\/iKTOR   (2007-08-10 11:45) [24]

> в руководстве для разработчиков классов визуальной библиотеки
тут я допустил неточность, это не руководство а рекомендации и разъяснения устройства VC библиотеки Делфи ориентированное на разработчиков самих компонентов Делфи, а не прикладных программ не связанных с Делфи.


 
Юрий Зотов ©   (2007-08-10 11:58) [25]

> \/iKTOR   (10.08.07 11:39) [23]

Спасибо, скачал, посмотрел. Материал для начинающих весьма полезный, хорошо бы было где-то его выложить напостоянно.

Но есть и погрешности, например: "разработчики компонентов не должны создавать свои компоненты непосредственно как производные (потомки) от класса TObject".

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


 
\/iKTOR   (2007-08-10 12:06) [26]

>Спасибо, скачал, посмотрел. Материал для начинающих весьма полезный, хорошо бы было где-то его выложить напостоянно.
И вам спасибо за теплые слова, я только за, тем более я продолжаю дополнять потихоньку книгу сию, раскладываю по полочкам(подразделам, упорядочиваю, бытаюсь связать непонятные пока мне вещи).
Если бы помошников было много, можно было бы сформировать полезное руководство, а главное доступное для понимания и правильно организованное, но инфы так много и она так неупорядоченна, что одному все не объять.

>"Не должны" - это неточность, потому что этого просто не получится. Любой класс, НЕ являющийся потомком TComponent, среда НЕ будет считать компонентом - и, соответственно, работать с ним, как с компонентом тоже НЕ будет. Не удастся ни в палитре его зарегистрировать, ни все остальное.

Спасибо, я внесу вашу поправку, но оригинальный текст не мой. Когда внесу существенные дополнения, выложу еще.


 
Kolan ©   (2007-08-10 13:36) [27]

> Вовсе нет. Объект это более широкое понятие.

На нач. этапе такое допущение имхо не вредно.



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.023 c
2-1186488500
Roun
2007-08-07 16:08
2007.09.02
Как удалить пустые строки из Memo?


15-1186137353
de.
2007-08-03 14:35
2007.09.02
О материалах


8-1164779407
Vulix
2006-11-29 08:50
2007.09.02
Прозрачное окно, созданное с помощью CreateWindow


15-1186482650
sql_
2007-08-07 14:30
2007.09.02
function


3-1178863927
Dmitry_177
2007-05-11 10:12
2007.09.02
Создание таблицы в DataBase