|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||||||||||||||||
Как упростить громоздкий синтаксис?26.06.2014, 19:15. Показов 3378. Ответов 33
Метки нет (Все метки)
Я понимаю, что это ООП ради ООП. Это моя первая программа, поэтому мне хочется задействовать полиморфизм, наследование, инкапсуляцию.
Вот упрощенный кусок моей библиотеки. Базовое пространство имён. Кликните здесь для просмотра всего текста
в двух словах: есть пространство имён с базовыми классами.есть другое пространство имён с переопределёнными классами и из-за этого переопределения мне приходится повторно определять поля (override).но это не беда. Кликните здесь для просмотра всего текста
самый ад будет при использовании сего чуда. Кликните здесь для просмотра всего текста
и таких полей десяток, в каждом из которых по многу добавленных свойств (много переопределенных классов вроде Location). И везде это приведение. Синтаксис выглядит ужасно громоздким. Пробовал я создавать переменные нужного типа и присваивать приведенные поля (всё-таки классы- ссылочный тип), но там много полей почему-то null. есть простой выход - не определять в базовом классе поля переопределяемых классов, но смысл тогда в наследовании? есть в си шарп способ преодолеть эту громоздкость при следовании принципам ООП(я всё-таки не теряю надежды написать хороший ОО код)? Добавлено через 8 минут Надо добавить, что я не помню всегда, где что переопределено и добавлено, таким образом часто, уже написав код, вижу ошибку и горожу это приведение. очень раздражает.
0
|
||||||||||||||||
| 26.06.2014, 19:15 | |
|
Ответы с готовыми решениями:
33
Как перевести синтаксис макроса VBA (Excel) в синтаксис Visual FoxPro Как перевести синтаксис Intel в синтаксис AT&T? (ассемблерная вставка в СИ) Слишком громоздкий цикл |
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|||||||
| 28.06.2014, 09:01 [ТС] | |||||||
|
Psilon,В Base.Weather включен экземпляр Base.Location. В Yahoo.Weather он переопределен таким образом
В Yahoo.Location есть члены, которых нет в Base.Location. Вот тут и нужно приведение.. И таких классов, как Location много, и членов таких тоже. Это не страшно, просто я думал, что это дело можно упростить - синтаксис сильно загромождает. Добавлено через 7 минут И, по-моему, в XAML вновь добавленные члены тоже не видны, которых в базовом классе нет. Могу ошибаться. Добавлено через 10 минут - хотел опробовать Linq to xml, а пространства имён Yahoo он не переваривает, пришлось по-другому. Provider имеет статическое свойство, которое в каждом пространстве имён своё, его вроде бы уже не переприсвоить, хотя дело не в Provider, а в том, что таких классов как Provider много, и там различия немного существенней - взять тот же Yahoo.Forecast и Yahoo.Atmoshpere.Добавлено через 3 часа 36 минут Psilon, поменял содержимое Base и Yahoo. Ну как, теперь Ъ ООП? ![]() папка v2 https://onedrive.live.com/redi... =folder%2c
0
|
|||||||
| 28.06.2014, 12:10 | |
|
0
|
|
|
Master of Orion
|
|||
| 28.06.2014, 12:17 | |||
|
Добавлено через 2 минуты В вашем случае наследование вообще не используется. Как-то слишком много кода вообще для такой простой задачи... pycture, F# неплох, сразу его узнал Правда, сначала думал это не он, т.к. нигде нет |> ignore
1
|
|||
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|||
| 28.06.2014, 12:58 [ТС] | |||
|
да, я искусственно усложнил задачу, чтобы научиться. надо сказать, что многое понял и узнал о объектно-ориентированном подходе. думаете много? рефакторил как мог, там же парсеры в основном. загляните ещё раз в ту папку v2, теперь базовый класс реально базовый, вроде всё дописал как надо. Добавлено через 5 минут Не по теме: так недолго стать одним из считанных программистов на хаскеле :good:
0
|
|||
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 28.06.2014, 13:31 [ТС] | |
|
Psilon, Вам по душе конечная версия моего кода? улучшил как мог.
0
|
|
|
Master of Orion
|
|||||||||||
| 28.06.2014, 13:45 | |||||||||||
|
tramp_1-3, ну уже лучше, хотя все еще можно половину выкинуть, вынеся в базовый класс
![]() Ну да ладно. Давайте с простого. Зачем вы в данном месте приводите таким образом:
0
|
|||||||||||
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 28.06.2014, 13:50 [ТС] | |
|
Psilon, потому что в базовом такого метода нет. это я так абстрагировался, ведь когда изначально писал ещё не знал, что буду таким образом получать местоположение, думал просто хранить инфу. потом решил так оставить, намеренно не стал под одного поставщика затёсывать. метод, пожалуй, можно и добавить.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 28.06.2014, 14:11 [ТС] | |
|
Psilon, тогда придётся и класс абстрактным делать. ну да ладно. это в общем мелочь. что ещё не так?
0
|
|
|
Master of Orion
|
|
| 28.06.2014, 14:13 | |
|
tramp_1-3, да в этом все дело
весь интерфейс (а этот метод это часть интерфейса) должны быть в базовых классах. Ну и конечно они должны быть абстрактными, раз уж ничего не умеют делать, без специализации.
0
|
|
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
||||||||||||
| 28.06.2014, 15:46 [ТС] | ||||||||||||
|
но от этого не легче. куда же деть различающуюся реализацию? вот например в WorldWeatherOnline я имею
![]() Добавлено через 1 минуту эти свойства ведь тоже часть интерфейса
0
|
||||||||||||
|
Master of Orion
|
||||||
| 28.06.2014, 15:49 | ||||||
Сообщение было отмечено tramp_1-3 как решение
Решение
tramp_1-3, можно просто сделать свойство типа AdditionalDetails, куда это складывать. По-моему вы вообще очень все усложняете
У вас все классы могут просто возвращать Dictionary<string,string>, и все.
0
|
||||||
|
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
|
|
| 28.06.2014, 15:55 [ТС] | |
|
Psilon, ни в коем случае Вас не упрекаю, а только благодарю за неоценимую помощь самоучке
![]() я вроде бы по книжкам всё делаю, подражаю тем простеньким примерам, реальность всегда суровей. Вы предложили интересный вариант, я ещё сам постараюсь придумать что-нибудь, спасибо!
0
|
|
| 28.06.2014, 15:55 | |
|
Оптимизировать громоздкий код потока Упростить, восстановить и упростить, и найдти множество предикатов
Как понять синтаксис a=b|c; Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|