Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
\/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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.04 c
3-1178593856
ДимаЛ
2007-05-08 07:10
2007.09.02
Изображения в SQL Server


1-1182078980
zzz(KOT)zzz
2007-06-17 15:16
2007.09.02
Проблемы с графикой в Delphi, Индексирование цвета


2-1186724942
Евгений Р.
2007-08-10 09:49
2007.09.02
Модуль открывается в Bin-формате


2-1186593827
Sonia
2007-08-08 21:23
2007.09.02
Проблема с настройками клиента Oracle (а может еще чего-то)


1-1182935318
tytus
2007-06-27 13:08
2007.09.02
FastReport 4.2.52 неправильно работает MemoOnBeforePrint





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский