|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||||||||||||||||
Как упростить громоздкий синтаксис?26.06.2014, 19:15. Показов 3180. Ответов 33
Метки нет (Все метки)
Я понимаю, что это ООП ради ООП. Это моя первая программа, поэтому мне хочется задействовать полиморфизм, наследование, инкапсуляцию.
Вот упрощенный кусок моей библиотеки. Базовое пространство имён. Кликните здесь для просмотра всего текста
в двух словах: есть пространство имён с базовыми классами.есть другое пространство имён с переопределёнными классами и из-за этого переопределения мне приходится повторно определять поля (override).но это не беда. Кликните здесь для просмотра всего текста
самый ад будет при использовании сего чуда. Кликните здесь для просмотра всего текста
и таких полей десяток, в каждом из которых по многу добавленных свойств (много переопределенных классов вроде Location). И везде это приведение. Синтаксис выглядит ужасно громоздким. Пробовал я создавать переменные нужного типа и присваивать приведенные поля (всё-таки классы- ссылочный тип), но там много полей почему-то null. есть простой выход - не определять в базовом классе поля переопределяемых классов, но смысл тогда в наследовании? есть в си шарп способ преодолеть эту громоздкость при следовании принципам ООП(я всё-таки не теряю надежды написать хороший ОО код)? Добавлено через 8 минут Надо добавить, что я не помню всегда, где что переопределено и добавлено, таким образом часто, уже написав код, вижу ошибку и горожу это приведение. очень раздражает.
0
|
||||||||||||||||
| 26.06.2014, 19:15 | |
|
Ответы с готовыми решениями:
33
Как перевести синтаксис макроса VBA (Excel) в синтаксис Visual FoxPro Как перевести синтаксис Intel в синтаксис AT&T? (ассемблерная вставка в СИ) Слишком громоздкий цикл |
|
|
|
| 26.06.2014, 19:18 | |
|
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 19:25 [ТС] | |
|
insite2012, что именно? писать программу именно так или зачем проще обращаться к переменным?
0
|
|
|
|
|
| 26.06.2014, 19:26 | |
|
Уточню. Что за программа и что должна делать.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 19:28 [ТС] | |
|
insite2012, на данный момент это парсеры погоды. есть несколько пространств имён, названных соответственно поставщикам. в каждом некоторые классы переопределяются сообразно информации, предоставляемой поставщиками.
0
|
|
|
|
|
| 26.06.2014, 19:32 | |
|
tramp_1-3, я так понял, несколько поставщиков, у каждого одинаковые (по названию, но с разной реализацией) методы. Я вас верно понял? Об использовании интерфейсов не думали?
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 19:35 [ТС] | |
|
insite2012, там в основном не методы, а поля (WPF к ним привязывается). Интерфейсы с полями вроде бы не очень дружат. Кусок очень упрощён, на нём виден только метод. А наряду с ним там много добавленных полей во многих классах.
0
|
|
|
|
|
| 26.06.2014, 19:38 | |
|
tramp_1-3, я почему-то вижу больше свойств и методов, чем полей)))
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 19:39 [ТС] | |
|
insite2012, аа, да, я их путаю. в свойствах дело.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 19:45 [ТС] | |
|
Psilon, я знаю, что разные. всё запомнить не могу, что есть что. а как это будет выглядеть? вместо классов интерфейсы Astronomy, Wind, Units, Location и т.д.? не совсем понимаю.
0
|
|
|
Master of Orion
|
|
| 26.06.2014, 19:56 | |
|
tramp_1-3, на самом деле тупо поменяв классы на интерфейсы лучше не станет, это раз
Во-вторых, название интерфейса принято начинать с буквы I, то есть в вашем случае будет IAstronomy, IWind и так далее.Если получается громоздко, значит косяк в архитектуре У меня та же фигня была не один раз, правда, иногда понимание, что же было не так, приходит спустя месяцы и даже больше, с опытом. Сформулируйте, что вы хотите, нарисуйте иерархию классов на бумажке, продумайте все хорошенько, а потом только садитесь кодить Наследование - не серебрянная пуля.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 26.06.2014, 20:06 [ТС] | |
|
Psilon, в том то и дело, что с иерархией всё хорошо. в наследовании большого смысла нет здесь, просто хочется написать хороший ОО код. меня всё в программе устраивает, кроме этого чудовищного приведения. переопределение классов в пространствах имён поставщиков - логичнее я ничего не придумаю. просто думал, что в си шарп есть какой-нибудь трюк, чтобы это приведение бесконечное избежать.
0
|
|
|
Master of Orion
|
|
| 26.06.2014, 20:56 | |
|
tramp_1-3, классы для всех поставщиком должны наследоваться от одного и того же класса (или интерфейса), через который и должно происходить взаимодействие. Приведение тут вообще ни к чему. Еще раз - вы архитектуру не понимаете, а мы её просто не знаем
Поэтому получается фигня.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 27.06.2014, 03:14 [ТС] | |
|
Psilon, у меня всё так, как вы сказали
свойства переопределяю, чтобы они соответствовали тем классам, что определены в этом же пространстве имён. и для доступа ко всему, чего нет в базовых классах приходится приводить. я могу показать исходники, но я уже убрал большинство объявлений из базового класса, ибо задолбало..https://onedrive.live.com/redi... lder%2c.cs Добавлено через 3 минуты Psilon, не подумайте, что я - любитель костылей это для меня больше обучение, чем попытка написать идеальную программу, вот я пытаюсь понять, как строить логику приложения.
0
|
|
|
Master of Orion
|
|||||||
| 27.06.2014, 12:23 | |||||||
|
tramp_1-3, если бы вы были любителем костылей, я бы просто отписался от темы, поверьте
Я про класс Yahoo в данном случае.Вообще, в чем разница между сервисами?.. У вас реально дофига общего кода. Что посоветовать - рефакторите. То есть перемещайте свойства, поля, методы в базовый класс до тех пор, пока они используются везде. ТО есть refactor -> pull member up Сходу можно увидеть, что можно безболезненно 90% кода в базовый класс положить Только это довольно муторно, и нужно весь проект на руках иметь, потому что могут быть нюансы) Например, что вам мешает вот это:
1
|
|||||||
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|||||||||||
| 27.06.2014, 17:16 [ТС] | |||||||||||
|
Psilon, то самое, почему я создал тему. вспомогательные классы имеют свои версии в разных пространствах имён, и поэтому придётся всё время всё приводить.
то есть вместо
0
|
|||||||||||
|
Master of Orion
|
|
| 27.06.2014, 18:30 | |
|
tramp_1-3, какие свои версии? XDocument у каждого свой?
или Provider? Весь интерфейс вазимодействия должен быть вынесен в базовый класс. Никаких приведений в коде вообще быть не должно. Стремитесь к этому - и избавитесь от дублирования же.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||
| 27.06.2014, 21:02 [ТС] | ||
|
Добавлено через 2 часа 25 минут Psilon, в смысле в библиотеке, где все эти парсеры, приведения в впрямь не будет. оно будет уже при использовании..
0
|
||
|
Master of Orion
|
|
| 27.06.2014, 22:35 | |
|
tramp_1-3, у вас должна быть такая схема, то есть все взаимодействие - через базовый класс.
1
|
|
| 27.06.2014, 22:35 | |
|
Помогаю со студенческими работами здесь
20
Оптимизировать громоздкий код потока Упростить, восстановить и упростить, и найдти множество предикатов
Как понять синтаксис a=b|c; Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью 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.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|