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

Вниз

Что есть компонент и объект?   Найти похожие ветки 

 
panov ©   (2002-03-12 08:28) [0]



 
MBo ©   (2002-03-12 08:47) [1]

В философском смысле?


 
Виктор Щербаков ©   (2002-03-12 08:58) [2]

ИМХО, с точки зрения проектировщика, объект означает комбинацию данных и программы, представляющих некоторую сущность реального мира.


 
panov ©   (2002-03-12 09:00) [3]

Лучше бы определения.
А также какими понятиями оперировать в разговоре о таких вещах, как компонент, класс, объект.

Например, как правильно:
Во время выполнения программы компонент TMemo ...
или
Во время выполнения программы объект типа TMemo ...
или
Во время выполнения программы экземпляр класса TMemo ...


 
Виктор Щербаков ©   (2002-03-12 09:06) [4]

Я предпочитаю последнее, но иногда сокращаю до просто Memo, когда смысл и так понятен собеседникам. А компонент - это наследник TComponent, поэтому, если собеседник знает дерево наследования VCL, то можно и не уточнять.
Объект на Object pascal, это не то же самое, что экземпляр класса. См. в хэлпе "object types".


 
MBo ©   (2002-03-12 09:08) [5]

Все же правильно - по определению (ООП в Паскале) экземпляр класса является объектом. Memo тоже объект, а в более узкой сущности - компонент. Преподаешь?

P.S.
Пришли к раввину с просьбой рассудить, кто прав. Выслушал он взаимоисключающие мнения и говорит: И ты прав, и ты тоже прав!
третий воскликнул: Как это, ребе, так же не может быть!
И ты прав... сказал мудрый старикашка.


 
Иван Шихалев ©   (2002-03-12 09:08) [6]

Если мы рассматриваем его на форме, во взаимодействии с ней и другими компонентами, то компонент. Если нам важно, что это экземпляр определенного класса (например, мы рассматриваем его место в иерархии классов), то экземпляр класса.

А если объект типа, то типа оп-па :)


 
MBo ©   (2002-03-12 09:15) [7]

>Объект на Object pascal, это не то же самое, что экземпляр класса
Это так, но в житейско-программистском значении это обычно не учитывается из-за сравнительно небольшой теперь важности старого (TPascal) понимания термина. Это и оставлено (QT=Object(...)) для совместимости


 
paul_shmakov ©   (2002-03-12 16:31) [8]

слово "компонент" появляется, когда мы говорим о существовании класса в неком окружении (enviroment), контейнере, среде.
именно этим и отличается компонент от класса или экземпляра класса (объекта). естественно, компонент - это обычный класс, но на который наложены некоторые ограничения. например, определенная иерархия наследования. т.е. понятие "компонент" - логическое.

delphi предоставляет компонентную среду, в которой классы, наследуемые от класса TComponent, встраиваются в определенную design-time среду, окружение.

компонентную модель следует считать более высокой абстракцией, следующим витком развития ооп. программисту гораздо удобнее писать компонент, который выполняет только свою бизнес-функцию, а не класс, который должен заботится и обо всем остальном.
обо всем остальном должен заботится контейнер, в котором и выполняется компонент (пример, enterprise java beans).


 
Владислав ©   (2002-03-12 16:59) [9]

В применении к Delphi:

Компонент - это наследник (не обязательно прямой) TComponent.

Объект - это наследник (также не обязательно прямой) TObject.

Множество TObject включает в себя множество TComponent.


 
vuk ©   (2002-03-12 17:22) [10]

to Владислав:
Не соглашусь с Вами по поводу объектов.
В ОО-терминологии объект и экземпляр класса - синонимы. При этом всегда понятно - о чем идет речь. Если говорится "экземпляр" или "объект", то имеется ввиду существующий экземпляр какого-то класса. Тогда как класс описывает поведение объектов(экземпляров) этого класса. Не знаю кто как, я предпочитаю придерживаться общепринятой терминологии - она более четкая.


 
Владислав ©   (2002-03-12 18:15) [11]

> vuk © (12.03.02 17:22)

Я не хочу с Вами спорить, но здесь как раз та ситуация, когда непонятно о чем речь :). Об этом нужно узнать у вопрошающего :).

Если смешать терминологии ООП и VCL и все же оставить все понятным, то лучше вообще разделить термины "объект", "экземпляр класса", "класс" ну и "компонент" в придачу :).


 
Delirium ©   (2002-03-12 18:19) [12]

Предлагаю такое мнение


 
evgeg ©   (2002-03-12 18:20) [13]

Компонент -- это либо объект, который можно положить на форму или DataModule в design-time, либо форма, либо DataModule.


 
panov ©   (2002-03-12 18:21) [14]

>Владислав © (12.03.02 18:15)
Уточняю. Например в форуме появляется вопрос такого типа:
Как мне в компонент TMemo скопировать текст из ClipBoard?

Как правильно? Я подозреваю, что объект TMemo.

Как создать компонент TMemo динамически? - подобный вопрос.


 
Delirium ©   (2002-03-12 18:24) [15]

Класс это : TMyClass=class
Объёкт это : TMyObject=class(TObject)
Компонент это: TMyComponent=class(TComponent)
естественно и все последующие потомки подчиняюся вышеозначеной иерархии, как вам терминалогия?


 
Иван Шихалев ©   (2002-03-12 18:26) [16]

> Как мне в компонент TMemo скопировать текст из ClipBoard?

Тут, возможно, и то и то.

> Как создать компонент TMemo динамически?

Тут однозначно речь идет о компоненте, поскольку вопрос подразумевает взаимодействие его с формой, а именно помещение на нее.


 
evgeg ©   (2002-03-12 18:29) [17]

> Класс это : TMyClass=class
> Объёкт это : TMyObject=class(TObject)

Оба объявления определяют определяют одно и то же: тип - класс.


 
Delirium ©   (2002-03-12 18:34) [18]

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


 
vuk ©   (2002-03-12 18:37) [19]

>Если смешать терминологии ООП и VCL и все же оставить все
>понятным, то лучше вообще разделить термины "объект",
>"экземпляр класса", "класс" ну и "компонент" в придачу :).
Терминологию лучше использовать ту, которая допускает меньше неоднозначностей.
А вообще говоря, понятие компонент относится скорее к архитектуре приложения, тогда как класс и экземпляр(объект) - понятие ЯП. Компонент не в любой компонентной архитектуре обязательно является классом. К примеру класс COM может быть написан на языке не поддерживающем ООП, на C, например...

to evgeg:
Компонент, который нельзя положить на форму - не компонент? :o)

to panov:
>Я подозреваю, что объект TMemo.
Именно.

>Как создать компонент TMemo динамически? - подобный вопрос.
Правильнее было бы "создать экземпляр TMemo динамически".


 
Иван Шихалев ©   (2002-03-12 18:38) [20]

> А вообще говоря, понятие компонент относится скорее к
> архитектуре приложения, тогда как класс и экземпляр(объект)
> - понятие ЯП.

Вот это-то я и пытаюсь объяснить, да слова правильного не нашел.

>> Как создать компонент TMemo динамически? - подобный вопрос.
> Правильнее было бы "создать экземпляр TMemo динамически".

А в чем тогда вопрос?



 
evgeg ©   (2002-03-12 18:47) [21]

> vuk
> Компонент, который нельзя положить на форму - не компонент? :o)
Любой компонент можно положить на форму (если, конечно, он зарегестрирован). Суть TComponent-а в том, что он обеспечивает основу для визуального проектирования в design-time.


 
vuk ©   (2002-03-12 18:53) [22]

to evgeg:
>Любой компонент можно положить на форму
Ну тогда положите на форму компонент TStringField. :o)
В конце концов, вполне могут быть компоненты, которые не предназначены для работы на формах.

>Суть TComponent-а в том, что он обеспечивает основу для
>визуального проектирования в design-time.
Основу для design-time обеспечивает RTTI и IDE.


 
yaJohn ©   (2002-03-12 18:55) [23]

2 Иван Шихалев © (12.03.02 18:38)
> А в чем тогда вопрос?
Любопытное доказательство старого тезиса (рекомендованного к прочтению всеми участниками форума) о том, что правильно поставленный вопрос включает в себя 70% ответа.
Цифра - приблизительная. Иногда я подозреваю, что должно быть >100

К сути вопроса: Вопрос о терминологии не будет решен вплоть до создания раздела знаний (науки) постулирующей эти термины. Является ли ООП на сегодняшний день таковой?



 
vuk ©   (2002-03-12 18:57) [24]

to yaJohn:
Возьмите любую книгу по теории ООП. Того же Буча. Там все есть.


 
evgeg ©   (2002-03-12 19:12) [25]

>vuk
StringField-ы и лежат на форме, просто их не видно :)


 
Иван Шихалев ©   (2002-03-12 19:23) [26]

> Возьмите любую книгу по теории ООП. Того же Буча. Там все есть.

Там нет ничего, что можно назвать наукой. Пока это все технологии, методики. Хорошие методики, иногда - хорошо изложенные, но системы, которая объединила бы их в теорию нет. Можно сравнить того же Буча и того же Кнута...


 
vuk ©   (2002-03-12 19:23) [27]

>просто их не видно
Я в курсе, но положить-то их туда нельзя - только через редаетор полей. :o)
Еще раз повторяю - компоненты могут использоваться и вне форм, мало того, они могут и не предполагать своего помещения на форму, а работать только в определенном окружении, которое к формам/модулям данных никак не относится.


 
vuk ©   (2002-03-12 19:26) [28]

to Иван Шихалев:
>Там нет ничего, что можно назвать наукой.
Это да, но с терминологией о которой мы здесь беседуем(класс/объект), похоже, уже все устаканивается...


 
Иван Шихалев ©   (2002-03-12 19:26) [29]

Форма, не форма... Для компонента важно его окружение в конкретном модуле или приложении.


 
yaJohn ©   (2002-03-12 19:29) [30]

2 vuk
Возьмусь утверждать, что термин "компонент" используется Борланд и Г.Бучем несколько по разному.
Но имхо - это пустое. С практической точки зрения во всяком случае.
С академической... Спорить с апологетами - занятие не благодарное. Борланды правы и Буч прав. И Вук тоже прав. ;))) Как преподавать студентам? В принципе - все равно, те кто понимают о чем речь - поймут и Буча и Вука и Борланд. Остальные - не поймут ничего.


 
Иван Шихалев ©   (2002-03-12 19:30) [31]

И где же мой стакан? :)

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

> А вообще говоря, понятие компонент относится
> скорее к архитектуре приложения, тогда как класс
> и экземпляр(объект) - понятие ЯП.


 
evgeg ©   (2002-03-12 19:33) [32]

> vuk
Какой смысл тогда от компонента, а не от объекта наследовать? Ну, деструкторы для членов компонентов, которые через Create (self) создавались явно вызывать не надо, а еще?
TStringField можно на форму из палитры положить (если его в ней зарегестрировать), толку от этого не будет, ну и что?


 
vuk ©   (2002-03-12 19:48) [33]

to evgeg:
>Какой смысл тогда от компонента, а не от объекта наследовать?
Хранение структурированных данных в потоках достаточная причина?

to Иван Шихалев:
>Нижеследующее вижу как подтверждение моего тезиса, только Буч-то
>тут при чем?
Собственно Буч ни при чем, просто это первое, что всплыло в голове и что найти проще всего. То, что он написал в какой-то мере отражает сложившуюся ситуацию - та же самая терминология и у других авторов встречается.


 
Sir Alex ©   (2002-03-12 20:37) [34]

IMHO,
"Компонент" - это любой класс, порожденный от TComponent (прямо или косвенно).
"Компонент" - это класс наделенный дополнительными полномочиями, позволяющие классу отображать себя на "палитре компонентов", иметь и управлять дочерними компонентами и т.д.
Когда говорят об объекте, неважно от кого он порожден, от класса или от компонента (это есть одно и тоже), поэтому правильнее говорить "Как создать экземпляр(или объект) компонента TMemo динамически?" либо "Как создать экземпляр(или объект) класса TMemo динамически?"


 
Sir Alex ©   (2002-03-12 20:42) [35]

Да и еще попробую ответить на вопрос:

Что есть компонент и объект?

"Компонент" - специализированный класс.
"Объект" - экземпляр любого класса.

(IMHO)


 
vuk ©   (2002-03-12 20:44) [36]

to Sir Alex:
>позволяющие классу отображать себя на "палитре компонентов",
Нет. Сам компонент ничего подобного не делает. Этим занимаеся IDE.

>иметь и управлять дочерними компонентами и т.д.
А вот это имеется.


 
JohnnyCrisJoe ©   (2002-03-12 20:46) [37]


> panov © (12.03.02 18:21)
> >Владислав © (12.03.02 18:15)
> Уточняю. Например в форуме появляется вопрос такого типа:
> Как мне в компонент TMemo скопировать текст из ClipBoard?
>
> Как правильно? Я подозреваю, что объект TMemo.
>
> Как создать компонент TMemo динамически? - подобный вопрос.

После прочтения этого возникла мысль:

класс - некий носитель определённых свойств и методов, но не заточенный под конкретные задачи.
компонент - класс, реализующий какую-либо конкретную функциональность на основе класса. TButton - компонент
но когда речь идёт о куске кода:
MyButton := TButton.Create, то здесь MyButton - уже объект.


 
vasco ©   (2002-03-12 20:50) [38]

Полностью согласен с yaJohn. Если два человека понимают друг друга, то какая разница, какие термины они используют. А пытаться всех привести к одному знаменателю - дело безнадежное и чрезвычайно напоминает мне мои курсантские годы:
Из чего складывается оценка курсанта?
Балл - за подход,
балл - за отход,
балл - за знания
и два - за старание.

Если человеку в обиходе проще изъясняться определенными терминами, так пусть его...
Мы же не говорим "проявление фотопленки", "печатание фотоснимков", хотя, как говорят филологи, это как раз и есть правильные варианты. Можно еще, кстати, разобраться, как правильнее "компонент" или "компонента"...


 
Sir Alex ©   (2002-03-14 18:25) [39]

2 Vuk
Написал немного не то. Компонент имеет необходимые методы и свойства, для того, что-бы IDE смогла отобразить его на палитре.


 
vuk ©   (2002-03-14 19:13) [40]

to Sir Alex:
>Компонент имеет необходимые методы и свойства, для того, что-бы
>IDE смогла отобразить его на палитре.
И какие же методы/свойства имеют отношение к отображению на палитре?



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

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

Наверх




Память: 0.58 MB
Время: 0.018 c
14-69978
ATLANTIDO
2002-03-10 20:06
2002.04.22
WinXP - Ctrl+Alt+Del ?


7-70034
Андрей Татуков
2002-01-25 17:05
2002.04.22
как определить МОДЕЛЬ МОНИТОРА?


3-69755
EAlexander
2002-04-01 15:24
2002.04.22
DOA&ODAC


6-69950
zam
2002-02-11 04:24
2002.04.22
Конвертировать ISAPI в webappdebugger executable


3-69674
vopros
2002-03-29 10:59
2002.04.22
Как сделать ледующую фильтрацию.