Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 74 75 [76] 77 78 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1126
,
|
|
|
|
Цитата --Ins-- @ А ты точно правильно понимаешь? Абстрактный класс - это только в c++ класс со всеми абстрактными методами. У нас (как и везде) это называется интерфейсом или интерфейсным классом. А абстрактный класс в человеческом понимании - это класс, который СОДЕРЖИТ абстрактные методы и решает некую абстрактную задачу. Хотя да, тяжело это вам понять. Я же например могу в своем базовом классе решить задачу скажем сериализации объекта (полностью), в потомке мне для этого ни строчки кода написать не придется. А вот у с++ с этим бооольшие проблемы, насколько я понял Незнаю чего ты в этом сообщении мне пытался донести, но я явно против того чтобы у класса АбстрактноеЖивотное переопределять метод движение и в нем переставлять все лапы... А абстрактную задачу в абстрактном классе Документ я себе действительно не могу представить... В моем понимании базовый абстрактный класс, должен просто содержать абстрактные методы, без их реализации... |
|
Сообщ.
#1127
,
|
|
|
|
|
Сообщ.
#1128
,
|
|
|
|
Цитата --Ins-- @ Я для начала должен код понять. Я задал вопрос, как это обеспечивается? Ответ может упустил, но вроде не вижу Да там вроде ничего сложного. А ответ вроде вот: |
|
Сообщ.
#1129
,
|
|
|
|
Цитата --Ins-- @ ...независимо от того, забудет программист в потомке это сделать явно или не забудет? Цитата --Ins-- @ Он забыл. Дальше что? Он и не знает. он предоставляет ему возможность такие действия определить. |
|
Сообщ.
#1130
,
|
|
|
|
ООП такое ООП... =)
Инс, а если потомок переопределит ПослеКонструктор? =) |
|
Сообщ.
#1131
,
|
|
|
|
Почитаю на досуге. И без обид - давай к терминам не придираться. Я ваши абстрактные классы называю интерфейсами, и заметь -это фишка не только Delphi. Абстрактными классами во многих языках принято называть просто базовые классы, которые нет смысла инстанцировать, но которые нужно использовать для наследования. Я не прав? То какого хрена он от него унаследован? А если хочет? Что, писать код сериализации в каждом классе отдельно? А если я точно знаю, что у меня будет 100 классов, которые нужно сериализовать подобным образом. Почему я не могу выделить предка для этих классов, который раз и навсегда снимет этот вопрос? Что - и у нас сам будет решать, а вот КАК - уже решать не будет. Это решит предок, хотя лучше чтобы это решил внешний класс сериализатора. Собственно этот внешний класс тоже решает абстрактную задачу ![]() А после конструирования нужно чтобы статус был сброшен и баста И если потомок захочет иначе - я бы ему рекомендовал пересмотреть свои желания Я в своей иерархии делаю так, чтобы потомок все сделал правильно и с минимумов услилий. Где жестко определяя поведение (которое вводится на уровне абстракции предка), а где мягко, позволяя переопределить поведение в критических точках. Кстати, AfterConstruction - это мягко - он виртуальный Добавлено Цитата korvin @ Инс, а если потомок переопределит ПослеКонструктор? =) inherited? Добавлено Цитата Qraizer @ Он забыл. Дальше что? Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали |
|
Сообщ.
#1132
,
|
|
|
|
Цитата --Ins-- @ А AfterConstruction разве не автоматом из TObject дергается? Где это inherited должно быть? Не забыть в переопределенном AfterConstruction написать inherited AfterConstruction? А где же автоматизм? inherited? |
|
Сообщ.
#1133
,
|
|
|
|
Цитата D_KEY @ Предок выставляет свои поля в конструкторе напрямую, а modified ставиться в false. Потомки делают точно также, а свойство modified оказывается не измененным(false) Я переспросил потом, как оно оказывается неизмененным? Из-за чего? Из-за того, что вызывается конструктор базового класса? |
|
Сообщ.
#1134
,
|
|
|
|
Цитата --Ins-- @ Он и не знает. он предоставляет ему возможность такие действия определить. Тоесть абстрактный класс содержащий в себе методы, делает вполне конкретные действия? Это как минимум выглядит странно, на что тебе и намекают |
|
Сообщ.
#1135
,
|
|
|
|
инс, а если программист забудет поставить инхеритед?
|
|
Сообщ.
#1136
,
|
|
|
|
Цитата trainer @ А AfterConstruction разве не автоматом из TObject дергается? Эээ, а как это мешает тебе написать в переопределенном AfteConstruction сначала inherited, а потом - свои добавления. Здесь никаких принципиальных отличий от любого виртуального метода нет. |
|
Сообщ.
#1137
,
|
|
|
|
Цитата --Ins-- @ В простейшем случае - да, в более сложном - нет. Так есть лекарство от этого более сложного случая? Ну, к примеру, поле - это приватное поле предка, а для его установки у нас в потомке есть только public или protected сеттер? Ы? Мы это уже выясняли. Потомок не должен никак дергать поля базового класса, тем более приватные, - это нарушение разграничения ответственности. Вот устанавливать width-height через конструктор базового - это всегда пожалуйста. |
|
Сообщ.
#1138
,
|
|
|
|
Цитата --Ins-- @ Почитаю на досуге. И без обид - давай к терминам не придираться. Я ваши абстрактные классы называю интерфейсами, и заметь -это фишка не только Delphi. Абстрактными классами во многих языках принято называть просто базовые классы, которые нет смысла инстанцировать, но которые нужно использовать для наследования. Я не прав? Нету в С++ интерфейсов. В С++ есть только абстрактные классы, которые могут обеспечить все, что обеспечивают интерфейсы. Правда только если есть множественное наследование в языке. Цитата Почему я не могу выделить предка для этих классов, который раз и навсегда снимет этот вопрос? Раз и навсегда он решить не может, потому, что потомок все-равно указывает в чем именно заключается сериализация. Цитата Что - и у нас сам будет решать, а вот КАК - уже решать не будет. Это решит предок, хотя лучше чтобы это решил внешний класс сериализатора. У нас также. Показывали же уже. Цитата Цитата korvin @ Инс, а если потомок переопределит ПослеКонструктор? =) inherited? ![]() А если "забудет"(с)? |
|
Сообщ.
#1139
,
|
|
|
|
Цитата --Ins-- @ Если забудет в твоем случае - все будет работать неправильно, а в моем - ему и помнить то не нужно, за него уже подумали В его случае я уверен что до такого гениального проектного решения никто не додумается, потому как есть более легкие, гибкие для этого средства.ю.. |
|
Сообщ.
#1140
,
|
|
|
|
Вообще, это получается какое-то размазанное неявное конструирование.
|