|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
||||||
Как правильно наследоваться с вложенным классом?30.09.2016, 10:43. Показов 1957. Ответов 33
Метки нет (Все метки)
Приветствую.
Есть класс, точнее 2. Один вложен в другой.
0
|
||||||
| 30.09.2016, 10:43 | |
|
Ответы с готовыми решениями:
33
Дан базовый класс, показать, как он будет наследоваться производным классом Как правильно наследоваться от CActiveRecord в Yii? Шаблон очереди с приоритетом и вложенным классом |
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
|
| 30.09.2016, 14:58 [ТС] | |
|
Матрешка подразумевает под собой некую сущность, которая обладает сл. свойствами
1) Содержит в себе List экземпляров некоторого класса 2) Методы для работы с этим листом. Удаление, добавление, сравнение, сохранение копии,(которые будут переданы всем наследникам) 3) Приватные поля и их свойства, например LasSelectedItem (которые будут переданы всем наследникам) 4)Содержит в себе описание (класс) тех элементов что в вышеупомянутом листе соедржаться. 4.1) Этот класс содержит в себе ссылку на класс контейнер (тот класс где хранится список) 4.2) Содежит приватные поля и методы типа Имя, ОчиститьСодерживамое(), чёнить ещё (которые будут переданы всем наследникам) 5) Матрешка доступна для наследования, с возможностью наследникам добавлять свои методы и поля С этой позиции Sheets, Rows, Cells это всё может быть интерпретировано как наследники матрешки. Базовые поля и функции у них у всех одинаковы по сути, но каждый из них содержит в себе дополнительные свои поля + поля которые сами являются матрешкой. Например отдельный Sheet(n) из Sheets содержит в себе Rows, каждый из Row которого содержит в себе Cells и т д.
0
|
|
|
|
||
| 30.09.2016, 15:29 | ||
![]() Usaga правильно советует, почитайте хорошую книгу. От себя добавлю "Совершенный код" Макконнелла, главы 5-7 для начала. То, что вы пытаетесь соорудить, обречено на провал, имхо. Даже на начальном этапе уже становится страшно
0
|
||
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
||
| 30.09.2016, 15:50 [ТС] | ||
Мтарешка тут не ознзачает набор вложенностей, а означает одну из таких единиц "вложенностей". Чё собственно я снова пишу то уже в котором посте одно и тоже ), Вы скажите почему вы считаете что матрешка неправильно спроектировано то? Толи вы меня не понимаете, то ли понимаете где тут очевидный косяк но не хотите говорить
0
|
||
|
|
|
| 30.09.2016, 16:08 | |
|
JustOneQuestion, раскройте все свои карты: сформулируйте конкретную задачу, чтобы начать получать конкретные советы.
Вы делаете подобие Excel? Есть у вас план, архитектура примерная? Показывайте тогда)
0
|
|
|
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,045
|
||
| 30.09.2016, 17:16 | ||
|
Во-вторых, я тебе несколько раз уже говорил, что ты совершенно не понимаешь инструмента, с которым пытаешься работать (ООП). Не исключено, что ты не понимаешь и задачу, которую пытаешься решить. Я считаю бесполезным продолжать развивать эту тему, пока ты сам для себя не выяснишь, что ты хочешь и пока ты хоть какой-то минимум знаний не освоишь. Пытаться описывать один класс внутри другого только потому, что "Один содержит другой" - это... мягко говоря сильно. Я тебе, как человек не родившийся программистом, а с нуля учившийся, рекомендую: если уж ты решил потратить время, то потрать его на изучение упорядоченного в виде учебника материала, а не на слепое, рандомное тыкание "наугад" пока не получится. Это даст больше, чем тебе кажется.
0
|
||
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
|||||||
| 01.10.2016, 15:01 [ТС] | |||||||
Вот код...
Можно от вопроса "как унаследовать вложенные классы". Перейти к вопросу "как из этого кода вычленить общее и запихвать это общее в отдельную сущность, и как потом эти классы из этой сущности получить". Добавлено через 19 часов 23 минуты Вот зачем спрашивается просили то код и примерную архитектуру? Стоит только показать - всё, сразу все коментарии пропадают. Некотрые задачи, стоит рассматривать так, как они есть, с чисто акадеимческой точки зрения. Тут либо сказать что задача некорректна, либо дать ответ, либо сказать что не знаете.
0
|
|||||||
|
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,045
|
|
| 02.10.2016, 04:07 | |
|
JustOneQuestion, комментарии пропали потому, что наступили выходные и люди активно начали выходнить.
По поводу кода: я шибко не всматривался Отвечу, лучше, на вопрос.Если некий набор классов имеет что-то общее, это общее желательно вынести. Чтобы не было дублирования. Но такой "вынос кода" не подразумевает именно наследование. Наследование используется только, когда явно прослеживается связь "является". Т.е. когда один класс является специализацией другого. Автобус является специализацией автомобиля. Но СТО не является, хотя там тоже можно найти колёса и двигатель (может даже не один). Эта связь должна выявляться с помощью головного мозга, а не просто по наличию общих фрагментов кода. Вообще, ООП для того и создавалось, чтобы было легче моделировать систему в терминах предметной области и только потом перекладывать эту модель на код, а не наоборот, как делаешь ты. По мимо наследования, можно применить композицию, когда один класс "содержит" другой. Это я продемонстрировал тебе выше. Класс получает "на руки" экземпляр другого класса и пользуется его функционалом по мере надобности при этом не находясь с ним в "родственных связях". Если "СТО" и "Автобус" имеют в себе "двигатель", то это не делает их родственными, просто они используют один и тот же класс. Такой себе примерчик ![]() Ну и в мелких случаях, когда есть небольшой фрагмент кода, который фиг знает куда притулить. То можно вынести его в отдельный класс-helper с несколькими статичными методами. В общем целом, это разновидность композиции. Ну и чисто фишка C#-а - расширяющие методы. Если у тебя есть фрагмент кода по работе, скажем, с коллекциями и этот фрагмент везде нужен, то сотворив "расширение" для класса коллекции, можно найти элегантный выход из ситуации ![]() И самое важное: применение всех этих принципов не должно нарушать другой - принцип единственной ответственности. Класс названный "юнитом" должен юнитить и ничего больше. Он не должен знать, что он находится в какой-то коллекции, тем более он не должен по этой коллекции шариться и проверять там имена других юнитов на уникальность. Ни разу это не его забота. Скорее всего это и не забота контейнера, в котором он находится. Напрашивается третий класс - "UnitManager". Разбивая свою систему на такие "зоны ответственности" ты делаешь её проще и управляемей. Надеюсь я понятно изложил свои мысли
1
|
|
|
|
||||||||||||||||||
| 02.10.2016, 09:12 | ||||||||||||||||||
|
Это можно сделать следующим образом:
0
|
||||||||||||||||||
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
||
| 02.10.2016, 16:21 [ТС] | ||
|
Storm23, огромное спасибо за конструктивный ответ по теме
. Я уж было потерял надежду на такие ответы.Только что увидел ваше сообщение, но до конца не осознал то что вы предложили. Про гетерогенное дерево вы абсолютно правильно поняли, но на первый беглый взгляд ваше решение отличается от той задумки которая у меня была вначале. Я посмотрю ваше решение подробнее и отвечу более конкретно. Сейчас же меня смутило одно -
0
|
||
|
|
|||||||
| 02.10.2016, 17:03 | |||||||
0
|
|||||||
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
|
| 02.10.2016, 20:04 [ТС] | |
|
Storm23, не уверен что полностью понял ваш новый код. НО вот что меня в нём смущает.
По сути вы обошлись одним классом а не как я пытался двумя вложенными, ну или даже двумя раздельными. И так получается у вас, что каждый класс (элемент дерева) способен вмещать в себе список только одного типа веток. (тут вот я сомневаюсь) или же ветки разных типов но в едином массиве. Ссмотрите, книга содержит в себе листы. А вот листы в себе содержать могут не только массив Cells но и массив картинок, графиков, форм ещё чегото. Ваш код помоему не позволит такое реализовать, не так ли? Я тут грубо ошибаюсь? В тех примерах что я указывал раньше Я делал специально два класса, так что один из них "Class А" был контейнер для одного массива однотипных элементов типа "class AUnit". А вот "class AUnit" в какомто смысле тоже был контейнером, но только не для массива одно типных элементов, а для счётного количества единичных экземпляров различных классов типа "Class А" [ну точнее "наследников" от "Class А", похожих на "Class А" но уже содержащих другие ABCUnit'ы]. В таком варианте созданное "дерево" как раз и позволит в одном листе иметь два поля типа класс Сells и класс Pictures, котоыре соотвествтенно будут иметь в себе массив типа класс Ячейка(Cell без S на конце) и массив типа класс Картинка(Pictures без S на конце), а сами листы будут в массиве Sheets (ну или WorkBook).
0
|
|
|
|
||
| 02.10.2016, 20:19 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
|
| 02.10.2016, 20:37 [ТС] | |
|
Проблема в индексаторах...вобщемто. Имея два List индексаторов уже не будет.
А гетерогенное дерево это вот как раз таки оно. В екселе же листы и строки и столбцы и ячейки и картинки как раз и содержит. А доступ весьма удобоный WorkBook(1).Sheet("Отчёт").Row(1).Clear( ) или WorkBook(1).Sheet("Отчёт").Column(2).Add () - вполне себе хорошая, понятная структура Неоднородного дерева.
0
|
|
|
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
|
||||||||||||||||
| 05.10.2016, 12:00 [ТС] | ||||||||||||||||
|
Вобщем резултаты таковы:
1)Что касается вложенности классов, то с одной стороны особых заморочек нет, а с другой от неё в конечном счёте решено было отказаться. 2) Что касается же наследования, и собственно самого примера с матрешкой/неоднородным деревом, то вот что в итоге получилось. Базовая часть:
Как по мне так крайне удобно. Тестирую. Предложения замечания?
0
|
||||||||||||||||
| 05.10.2016, 12:00 | |
|
Разработать класс прямоугольника с текстовым комментарием с вложенным классом текстовой строки Как правильно выбрать n элементов с одинаковым классом? Как правильно связать класс формы с классом отрисовки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|