|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
Как правильно унаследовать TPoint2D от TPoint3D/ Правильно ли наследовать? ООП24.11.2016, 22:15. Показов 2187. Ответов 19
Метки нет (Все метки)
Два пользовательских класса: Точка в 2D пространстве и точка в 3D пространстве.
С точки зрения самого принципа, здесь так делать правильно, а с точки зрения удобства - нет. Этот Z-хвост мешает мне жить. Я, конечно, могу унаследовать не от TPoint3D, а от какого-то абстрактного класса типа TPointAbstract, но это будет противоречить словам принципа: "Части от целого". Я не понимаю, как быть. Можно ли здесь уложиться в принципы ООП?
0
|
|||||||||||
| 24.11.2016, 22:15 | |
|
Ответы с готовыми решениями:
19
Как правильно наследовать форму |
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 24.11.2016, 22:25 | ||
Где это вы, интересно, такой принцип вычитали? Открытое наследование реализует отношение "является разновидностью". 2D не является разновидностью 3D, поэтому не может быть от него унаследован, наоборот можно.
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 24.11.2016, 22:40 [ТС] | |
|
Как где, на форуме кто-то очень ругался, когда окружность от точки наследуют, и в книгах предпочтение отдают агрегации/композиции и наследованию частей из того, что вместе из себя они представляют. Так быстрее строится некоторого рода система, которую создаёшь (вверх если, то лезешь всё выше и выше, получается очень громоздко и перестраивать тяжело, не знаешь, когда остановиться, азарт иногда берёт; а вниз - приходишь к конечному достаточно быстро, что ниже просто некуда).
Можно, но потом однажды сделаешь наследование круга от точки (сейчас это образное выражение) и словишь оплеух. Говорят, что время так разрулило, где от большего наследуются отдельные элементы этого большего. (Здесь своими словами я сказал, не помню, как говорят и пишут)
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 24.11.2016, 22:49 | ||
|
Тип - это описание некоторого множества объектов реального мира. Подтип, т.е. некий наследник этого типа - это описание подмножества объектов данного типа. Ну, скажем, тип ЧЕЛОВЕК описывает множество всех людей. Но в нем есть подмножества мужчин и женщин, следовательно для их описания можем создать типы-наследники от типа ЧЕЛОВЕК - подтипы МУЖЧИНА и ЖЕНЩИНА. В общем, открытое наследование - это конкретизация. В типе ЧЕЛОВЕК мы абстрагировались от многих параметров конкретного человека, от пола, например. Наследование, это когда мы из множества параметров, от которых мы абстрагировались, извлекаем те, которые нам понадобились, и добавляем в свойства класса.
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 24.11.2016, 22:55 [ТС] | |
|
Целое => Человек.
От целого производятся мужчина и женщина, что и есть "От целого части этого целого". Неудачный пример.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 24.11.2016, 23:00 | ||
|
Двумерная точка - это когда мы от всех размерностей кроме двух абстрагировались. Но среди двумерных есть подмножество, которое имеет третью координату, т.е. можем наследовать от двумерной трехмерную. Т.е. наследник обладает всеми признаками базового класса, плюс еще какими-то.
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
| 24.11.2016, 23:03 [ТС] | ||||||
|
Смотрите. Я приведу более понятную ситуацию. Предположительно, изначально не было известно, что существуют какие-то виды объектов, не обладающие свойствами, характеризующие эти объекты. Мутить воду не буду, покажу псевдосистемой.
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 24.11.2016, 23:11 | ||
|
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 24.11.2016, 23:21 [ТС] | ||
|
Это противоречит природе вещей
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 24.11.2016, 23:26 | ||
|
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 24.11.2016, 23:34 [ТС] | |
|
Здесь, в принципе, легко понять, что всего-то нужен новый класс, который обозначит вид исключений. Это, наверное, единственный правильный выход.
Для птиц - TBird_nofly - какой-нибудь, если летать не умеют. Только это ж как тяжело потом что-то добавлять туда и удалять оттуда, исправлять там что-то. Если один объект-исключение, то не так страшно, а если система большая и там их под тысячу? Ничего хорошего от такого можно не ждать, наверное. Добавлено через 1 минуту Я об общих схожих свойствах, где дублировать нужно.'
0
|
|
|
|
|||
| 25.11.2016, 08:57 | |||
|
1
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 25.11.2016, 09:50 | ||
Сообщение было отмечено gru74ik как решение
РешениеДобавление наследника с пустой функцией fly - это костыль, с которым, возможно, пришлось бы мириться в реальной жизни, но это уж точно не "единственный правильный выход". Правильный выход - это перепроектировать систему с учетом новых требований. Т.е. сделать класс "птица", от него два наследника "летающие_птицы" и "нелетающие_птицы", соответственно, функция fly будет только у первых.
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 25.11.2016, 20:38 [ТС] | ||
Похоже, что где-то Вы целостную ситуацию немного неправильно поняли. Может, устали. То, о чём я сказал "правильный выход", там я не имел в виду наследование от птиц нелетающих птиц, а всего лишь новый тип, который в иерархии ляжет на один уровень с типом "Птица". Это в контексте должно было быть понятно. Это сообщение сейчас всего-лишь маленькое уточнение, в связи с небольшой зародившейся кашей.
0
|
||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 31.12.2016, 01:08 | |
|
2
|
|
| 31.12.2016, 01:23 | ||
|
Не по теме:
Пришлось через хабр https://habrahabr.ru/post/83269/подбираться.
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 31.12.2016, 01:56 | ||
|
Мне кажется, самым неокрепшим для начала надо освоить правило 35 Скотта Майерса из "50 рекомендаций": "используйте открытое наследование для моделирования отношения "есть разновидность".
1
|
||
|
230 / 113 / 79
Регистрация: 17.10.2016
Сообщений: 312
|
||
| 31.12.2016, 02:09 | ||
|
А это правило 32.
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 31.12.2016, 02:18 | |
|
0
|
|
|
230 / 113 / 79
Регистрация: 17.10.2016
Сообщений: 312
|
|
| 31.12.2016, 03:33 | |
|
0
|
|
| 31.12.2016, 03:33 | |
|
Помогаю со студенческими работами здесь
20
Как правильно наследовать на Symfony? Как правильно наследовать публичный конструктор? Как правильно наследовать несколько элементов Как правильно наследовать методы класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|